Контекст процесса включает в себя:
· содержимое адресного пространства задачи
· информацию об аппаратных регистрах
· структуру данных ядра
По функциональному признаку контекст делят на:
· пользовательский контекст, который включает в себя:
o код и данные
o стек задачи
o совместно используемые области памяти в виртуальных адресах
Когда не хватает места в ОЗУ часть пользовательского контекста помещается в область swapping’a.
· регистровый контекст, который включает в себя:
o счетчик команд, указывающий адрес следующей команды. Адрес как правило является виртуальным либо внутри АП задачи, либо внутри АП ядра
o слово состояния процессора, который указывает аппаратный статус по отношению к конкретному процессу (режим работы процессора, приоритет). Регистр состояния зависит от конкретного процессора.
o РОНы
o Указатель на посл. выполненную или след. команду (в зависимости от архитектуры) (IP)
o Указатель вершины стека (адрес стека ядра или стека задачи) (SP)
· системный контекст, который состоит из статической составляющей и динамической составляющей. Постоянно процесс использует только статическую составляющую, которая не изменяется по ходу выполнения процесса. Кроме того, имеется переменное количество динамических составляющих. Динамический контекст имеет структуру стека, количество динамических уровней = количеству уровней прерываний процессора + 2 (на переход в режим задач и обратно в режим ядра).
Статическая часть контекста включает в себя:
o запись таблицы процессов, описывающее состояния процесса с управляющей информацией (часть контекста). К этой инф-ии ядро может обратиться в любой момент.
o привилегии процесса, адресное пространство, выделенное под выполнение процесса
o общие и частные таблицы областей процесса (общие есть для каждого процесса). Управление памятью – ID участков вирт-го адр-го пр-ва процесса, не явл-го резидентным.
o таблица преобразования виртуальных адресов в физические
o записи частной таблицы областей памяти. Они необходимы для преобразования виртуальных адресов в физические
o стек ядра каждого процесса. Записи о процедуре ядра – информация о цепочке системных вызовов этого процесса. Т. о., каждый процесс имеет свою копию ядра. Ядро восстанавливает данные стека и помнит указатель на вершину стека
Динамическая часть состоит из уровней и представляет собой стек.
0-й (нижний) – пользовательский.
На следующих уровнях – свой, регистровый контекст.
Размер стека определяется максимальным количество прерываний.
Ядро помещает контекст в стек при возникновении прерывания, при обращении к системным функциям и при переключении контекста (передача управления другому процессу). Выталкивание из стека происходит в тех же случаях, т.е. само переключение контекста содержит два этапа:
· Запоминание «старого» контекста
· Восстановление «нового» контекста
Информация для восстановления «нового» процесса берется из таблицы процессов.
Если выполняется задача, требующая обращения к внешнему устройству и выполнен запрос, но пока информация не пришла процесс переключился, то информация поступит к новому процессу (в память) и старый процесс получит ее только после возобновления работы.
Наряду с функциональным структурированием существует иерархическое. Это характерно для многопоточных систем. Связано с тем, что для множества потоков можно выделить общую часть. Существует локальный контекст – для одного потока, групповой контекст – для групп потоков, глобальный контекст – для процесса.
Преимущества – ускоряет переключение потоков за счет ускорения переключения контекстов.
UNIX: делает контекст по функциональным. NetWare: делает контекст по иерархии.
Системный контекст переключается частично аппаратно, частично программно. Дескриптор хранится в виде строки таблицы процессов. Пространство под табл. процессов резервируется динамически в области ядра. На основе этой таблицы происходит планирование и диспетчеризация процессов.
Планирование и диспетчеризация
Переход от одного процесса к другому выполняется в результате планирования потоков. Фактически осуществляется планирование потоков, а не процессов.
Осуществляется на основе информации, хранящейся в системе.
При планировании решается 2 задачи:
1) определение момента t смены актив потока
2) выбор потока из очереди готовых (как правило, тех, что в ОЗУ):
- динамически (online);
- статически (offline).
В большинстве ОС общего назначения – динамическое планирование, т.е. решение задачи на основе анализа текущей информации.
ОС работает в условиях неопределённости: потоки и процессы появляются и завершаются непредсказуемо. Динамический планировщик не использует предположений о мультипрограммной смеси. Такое планирование сложнее, но гибче.
Статическое планирование – формирование мультизадачной смеси (исп-ся в ОС РВ). Здесь есть предварительная информация о решаемых задачах (полная или частичная). Выполняется разработка расписания задач, результатом чего является таблица расписания выполнения задач (где и когда выполняется та или иная задача). Такое планирование повышает быстродействие.
Алгоритмы планирования:
- на основе квантования (фикс/нефикс, штрафы, изменение длительности кванта каждого процесса, LIFO, FIFO, RR (round robin));
- на основе приоритетов.
Выбирается задача с наивысшим приоритетом, убирается по-разному.
Абсолютный приоритет – может прерывать до завершения (возможно вложенное выполнение).
Относительный приоритет – по крайней мере до логического конца (до конца кванта времени).
При планировании в ОС общего назначения по умолчанию работает относительная схема приоритетов. В ОС РВ работает схема абсолютных приоритетов.
Диспетчеризация – реализация решения, принятого на этапе планирования программами и аппаратными средствами. Выполняется как в статическом, так и в динамическом режиме. В отличие от планирования диспетчеризация реализуется в большинстве случаев аппаратно.
37. Алгоритмы планирования
1. На основе квантования – передача происходит либо по завершении процесса, либо при переходе процесса в ожидание, либо при завершении времени квантования, либо при выходе с ошибкой. Квантование выполняется во всех системах с разделением времени. Величина кванта может быть фиксированной либо изменяющейся. Изменение времени кванта может зависеть от стадии в жизненном цикле процесса и связано с оптимизацией
Приоритеты: абсолютные, относительные
Схема выбора всегда одинаковая – выбирается процесс с наивысшим приоритетом. Но если во время выполнения процесса приходит процесс с более высоким приоритетом, то при реализации абсолютного приоритета текущий процесс прерывается и начинается выполнение нового; в относительном – выполнение пришедшего процесса начинается только после завершения текущего.
Вытесняющая (retentive) и невытесняющая (non-reentive) многозадачность
- Невытесняющая – способ планирования процессов, при котором выполняющийся процесс работает до тех пор, пока он сам по собственной инициативе не передаст управление планировщику ОС (например, обслуживание ПУ или ФС – чтобы закончить начатую работу).
«-» - может произойти неконтролируемый захват ресурсов в монопольное пользование.
- Вытесняющая – способ, при котором решение о переключении работы с одного процесса на другой принимается исключительно планировщиком ОС, а не активной задачей (напр., большинство ОС общ. назн.).
«-» - задача может не успеть выполниться.
Плюсы обратно.
Основные различия – степень централизации механизма планирования. При невытесняющей схеме механизм планирование распределяется между прикладной задачей и ОС. Такой механизм более сложный. При вытесняющей – реализация планирования полностью является прерогативой ОС.
Планирование и диспетчеризация в UNIX системах
Анализ очередей при каждом переключении контекста. Связано с таймерными прерываниями.
Основные методы планирования
- метод карусели – кольцевой буфер. Ядро предоставляет ресурсы процессу на определённый квант времени. Далее выбирается та задача, которая дольше всего была в ожидании. После этого – запись в конец буфера (метод FIFO). Квант регулируется динамически в зависимости от загруженности системы. Очередность регулируется приоритетами. Процесс возобновляется из точки приостанова. Возобновлений может быть много.
Диспетчеризация – реализация решения, принятого на этапе планирования программами и аппаратными средствами.
После переключения контекстов запускается планировщик, который выбирает процесс с наибольшим приоритетом из тех, кто находится в состоянии резервирования (либо из готовых из памяти). Если очереди пусты или выбрать невозможно, то система переводится в режим ожидания до следующего прерывания от таймера.
Параметры диспетчеризации
Существует специальное поле структур, описывающих процессы. Они включают параметры планирования. Есть поле динам/стат приоритетов.
1) приоритет в режиме задачи (user mode)
2) приоритет в режиме ядра (kernel mode)
Приоритет в режиме задачи зависит от того, как этот процесс использовал ресурсы в ранее.
С каждым уровнем приоритетов ассоциируется своя очередь процессов. Приоритеты для (1) оценивается после возвращения процесса из режима ядра в режим задачи. Приоритеты для (2) вычисляются для процессов находящихся в режиме ожидания (останова). Для (1) существует верхнее пороговое значение, для (2) – нижнее пороговое значение
Ядро вычисляет приоритет в следующих случаях:
- непосредственно перед переходом процесса в состояние останова;
- при возвращении процесса из режима ядра в режим задачи;
- в режиме задачи через кванты времени для того чтобы передвигать очереди в процессе.
В течение кванта времени возможно несколько прерываний, отраженных в таблице процессов.
Приоритет процесса в очереди = полураспад + базовое значение.
Существуют алгоритмы, позволяющие динамически менять продолжительность кванта времени = > повышение быстродействия, но и повышение времени переключения при уменьшении кванта.
Все алгоритмы годятся для систем разделения времени и не годятся для систем реального времени, так как не гарантируют запуск процесса в определенный момент времени. Альтернатива: использование микроядерных ОС.