Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
пособие_Unix.doc
Скачиваний:
4
Добавлен:
26.11.2019
Размер:
2.41 Mб
Скачать

3.5.2 Приоритеты процессов

Механизм планирования в UNIX основан на использовании приоритетов, назначенных процессам. Каждый процесс имеет приоритет планирования, который может изменяться во время выполнения. Процесс, обладающий наивысшим приоритетом, планировщик назначает на выполнение. Используется вытесняющее планирование. Планировщик поставит процесс, имеющий приоритет выше приоритета выполняемого процесса, на выполнение, даже если у выполняемого процесса не израсходован его квант времени.

Традиционное само ядро UNIX является не вытесняющим. Если процесс выполняется в режиме ядра (например, в течение исполнения системного вызова или прерывания), то ядро не заставит такой процесс уступить процессор высокоприоритетному процессу. Выполняющийся процесс может только добровольно освободить процессор в случае своего блокирования, ожидая необходимый ресурс. Реализация не вытесняющего ядра решает проблемы синхронизации, связанных с доступом нескольких процессов к одним и тем же структурам данных ядра.

Приоритет процесса задается любым целым числом, лежащим в диапазоне от 0 до 127. Чем меньше число, тем выше приоритет процесса. Приоритеты от 0 до 49 зарезервированы для ядра, следовательно, прикладные процессы могут обладать приоритетами от 50 до 127. Наиболее высокий приоритет имеет процесс init,

Каждый процесс имеет два атрибута приоритета: текущий приоритет (PRI), на основании которого происходит планирование, и относительный приоритет, называемый также поправкой приоритета - nice number. Это пользовательская составляющая приоритета. Она наследуется от родителя и может изменяться по воле процесса. Изменяться она может только в сторону увеличения значения (до некоторого предельного значения).

NICE является числом в диапазоне от 0 до 39 (со значением 20 по умолчанию). Увеличение значения приводит к уменьшению приоритета. Приоритет процесса не является фиксированным и динамически изменяется системой в зависимости от использования вычислительных ресурсов, времени ожидания запуска и текущего состояния процесса. Например, для того, чтобы поскорее вывести процесс из режима ядра, его приоритет автоматически повышается.

3.5.3 Реализация планировщика

Ситуации, активизирующие планировщик:

  • при создании процесса проблема состоит в том, какой процесс запускать: родительский или дочерний

  • при завершении процесса из набора готовых к выполнению процессов выбрать и запустить следующий

  • при блокировке процесса на операциях ввода/вывода, семафоре или др. надо выбрать и запустить другой процесс

В Unix используется циклическое планирование по нескольким очередям.

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

Самое существенное в этом алгоритме это определение оптимальной длины кванта. Слишком маленький квант приводит к частым переключениям контекста, а это занимает некоторое время (=1мс), а слишком большой квант приводит к медленному реагированию на короткие интерактивные запросы. Разумным компромиссом является значение кванта около 20-30мс.

Суть приоритетного планирования в следующем: каждому процессу присваивается приоритет, и управление передается готовому к работе процессу с самым высоким приоритетом.

Тогда циклическое планирование по очередям представляет собой следующее.

Предположим, используется четыре класса приоритетов. Пока в классе 4 есть готовые к запуску процессы, они запускаются один за другим согласно алгоритму циклического планирования, и каждому отводится квант времени. Если в классе 4 нет готовых к запуску процессов, запускаются процессы класса 3 и т.д.

Процессы, готовые к запуску

Приоритет 4

Приоритет 3

Приоритет 2

Приоритет 1

Рисунок 3.8 – Схема циклического планирование по нескольким очередям

Если приоритеты постоянны, до процессов класса 1 процессор может не добраться. Поэтому в каждой ОС существуют алгоритмы динамического изменения приоритетов.

От версии зависит и количество очередей планирования. Например, SCO UNIX имеет 127 очередей – по одной на каждый приоритет. BSD использует 32 очереди, каждая из которых использует диапазон приоритетов.