Структура контекста процесса

 

Контекст процесса включает в себя:

· содержимое адресного пространства задачи

· информацию об аппаратных регистрах

· структуру данных ядра

 

По функциональному признаку контекст делят на:

· пользовательский контекст, который включает в себя:

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) – нижнее пороговое значение

Ядро вычисляет приоритет в следующих случаях:

- непосредственно перед переходом процесса в состояние останова;

- при возвращении процесса из режима ядра в режим задачи;

- в режиме задачи через кванты времени для того чтобы передвигать очереди в процессе.

В течение кванта времени возможно несколько прерываний, отраженных в таблице процессов.

Приоритет процесса в очереди = полураспад + базовое значение.

Существуют алгоритмы, позволяющие динамически менять продолжительность кванта времени = > повышение быстродействия, но и повышение времени переключения при уменьшении кванта.

Все алгоритмы годятся для систем разделения времени и не годятся для систем реального времени, так как не гарантируют запуск процесса в определенный момент времени. Альтернатива: использование микроядерных ОС.