Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТОС_2013 / ТОС_6_3_проц_слайды1.doc
Скачиваний:
8
Добавлен:
03.03.2016
Размер:
1.56 Mб
Скачать

Некоторые задачи алгоритмов планирования

Все системы Справедливость — предоставление каждому процессу справедливой доли процессорного времени Принудительное применение политики — контроль за выполнением принятой политики Баланс — поддержка занятости всех частей системы Системы пакетной обработки данных Пропускная способность — максимальное количество задач в час Оборотное время — минимизация времени, затрачиваемого на ожидание обслуживания и обработку задачи Использование процессора — поддержка постоянной занятости процессора Интерактивные системы Время отклика — быстрая реакция на запросы Соразмерность — выполнение пожеланий пользователя Системы реального времени Окончание работы к сроку — предотвращение потери данных Предсказуемость — предотвращение деградации качества в мультимедийных системах

Планирование процессов построено на определенном наборе правил, исходя из которых планировщик выбирает, когда и какому процессу предоставить вычислительные ресурсы системы.

При этом желательным является удовлетворение нескольких требований, например, минимальное время отклика для интерактивных приложений, высокая производительность для фоновых задач и т. п.

Принципы планирования процессов

Традиционные алгоритмы планирования UNIX обеспечивают возможность одновременного выполнения интерактивных и фоновых приложений.

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

Планирование процессов в UNIX основано на приоритете процесса, который не является фиксированным и динамически изменяется системой

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

В этом состоянии выполняющийся процесс может освободить процессор "по собственному желанию", в результате недоступности какого-либо ресурса перейдя в состояние сна.

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

Такой подход значительно упрощает решение задач синхронизации и поддержания целостности структур данных ядра.

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

Текущий приоритет варьируется в диапазоне от 0 (низкий приоритет) до 127 (наивысший приоритет). Процессы, выполняющиеся в режиме задачи, имеют более низкий приоритет, чем в режиме ядра.

Для режима задачи приоритет меняется в диапазоне 0—65, для режима ядра — 66—95 (систем­ный диапазон).

Процессы, приоритеты которых лежат в диапазоне 96—127, являются процессами с фиксированным приоритетом, не изменяемым ОС, и предназначены для поддержки приложений реального времени.

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

Таблица 3.3. Системные приоритеты сна

Событие

Приоритет 4.3BSD UNIX

Приоритет SCO UNIX |

Ожидание загрузки в память сегмента/страницы (свопинг/страничное замещение)

0

95

Ожидание индексного дескриптора

10

88

Ожидание ввода/вывода

20

81

Ожидание буфера

30

80

Ожидание терминального ввода

75

Ожидание терминального вывода

74

Ожидание завершения выполнения

73

Ожидание события — низкоприоритетное состояние сна

40

66

Разделение между приоритетами режима ядра и задачи также зависит от версии.

Когда процесс пробуждается, ядро устанавливает значение текущего приоритета процесса равным приоритету сна.

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

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

После завершения системного вызова перед возвращением в режим задачи ядро восстанавливает приоритет режима задачи, сохраненный перед выполнением системного вызова. Это может привести к понижению приоритета

Текущий приоритет процесса в режиме задачи p_priuser зависит от двух факторов: значения nice number и степени использования вычислительных ресурсов р_срu:

p_priuser=a*p_nice - b*p_cpu,

где p_nice — постоянная составляющая, зависящая от параметра nice.

Здесь выбрана схема, при которой большему значению р_срu соответствует больший приоритет. Поэтому в простейшем случае коэффициент а является отрицательным, a p_nice равно значению параметра (nice number).

Задача планировщика разделения времени — справедливо распределить вычислительный ресурс между конкурирующими процессами.

Для принятия решения о выборе следующего запускаемого процесса планировщику необходима информация об использовании процессора.

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

Каждую секунду ядро пересчитывает текущие приоритеты процессов, готовых к запуску (приоритеты которых меньше 65), последовательно увеличивая их.

Это перемещает процессы в более приоритетные очереди и повышает вероятность их последующего запуска.

Например, UNIX версии SVR3, использует следующую формулу:

p_cpu = p_cpu/2

Эта простая схема проявляет недостаток нивелирования приоритетов при повышении загрузки системы.

В результате степень использования процессора перестает оказывать заметное влияние на приоритет, и низкоприоритетные процессы (т. е. процессы с высоким nice number) практически "отлучаются" от вычислительных ресурсов системы.

В 4.3BSD UNIX для пересчета р_срu используется другая формула:

p_cpu = p_cpu*(2*load)/(2*load+l)

Здесь параметр load равен среднему числу процессов, находившихся в очереди на выполнение за последнюю секунду, и характеризует среднюю загрузку системы за этот период времени.

Этот алгоритм позволяет частично избавиться от недостатка планирования SVR3, т.к. при значительной загрузке системы уменьшение р_срu при пересчете будет происходить медленнее.

Описанные алгоритмы планирования позволяют:

- учесть интересы низкоприоритетных процессов;

- обеспечивать более вероятный выбор планировщиком интерактивных процессов по отношению к вычислительным (фоновым).

Фоновые процессы, потребляющие значительные ресурсы процессора, имеют высокую составляющую р_срu и, как следствие, более низкий приоритет.

Как правило, очередь на выполнение не одна.

Например, SCO UNIX имеет 127 очередей — по одной на каждый приоритет. BSD UNIX использует 32 очереди, каждая из которых обслуживает диапазон приоритетов, например 0—3, 4—7 и т. д.

При выборе следующего процесса на выполнение из одной очереди, т. е. из нескольких процессов с одинаковым текущим приоритетом, используется механизм кругового чередования (round robin).

Этот механизм запускается ядром через каждый временной квант для наиболее приоритетной очереди.

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

Алгоритмы планирования