Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Сборная ответов к госэкзаменам.doc
Скачиваний:
137
Добавлен:
02.09.2019
Размер:
7 Mб
Скачать

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

Планирование процессов включает в себя решение следующих задач:

  • Определение момента времени для смены выполняемого процесса

  • Выбор процесса на выполнение из очереди готовых процессов

  • Переключение контекстов старого и нового процессов (обычно решается аппаратно)

Различные алгоритмы планирования решают эти задачи по-разному.

  • Не вытесняющая многозадачность. Переключение с контекста на контекст происходит в самое удачное время для ОС, не тратиться время на восстановление процесса; с максимальным быстродействием для системы; нет максимального допуска пользователя к выполнению процесса, непредсказуемо время решения процесса.

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

Современные системы – с вытесняющей многозадачностью.

Существуют механизмы прерывания, основанные на:

  • Переключение по времени. Встраивается центральный таймер, который подает сигнал прерывания; может произойти в конкретный момент реального времени системы или по истечению кванта времени; кванты, выделяемые CPU могут быть постоянными и переменными. Переменный квант может динамически изменяться или вычисляться по формулам. Если квант маленький, то контекст очень быстро дергается. Большой квант – большая задержка.

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

Приоритет = (время ожидания + время обслуживания) / время обслуживания.

Планирование с абсолютными приоритетами.

  • Если появился процесс наивысшим приоритетом, все остальные приоритеты прерываются.

  • Процедура выбора

FIFO – first in, first out

LIFO – last in, first out

RR – round robin – циклическая процедура обслуживания

SJL – shortlist job first – кратчайшие задания – первыми

SRT – shortlist remaining time – по наименьшему оставшемуся до завершения времени

HPF – highest priority first

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

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

Как и оперативная память, процессор является разделяемым ресурсом, который должен быть справедливо распределен между конкурирующими процессами. Планировщик процессов как раз и является той подсистемой ядра, которая обеспечивает предоставление процессорных ресурсов процессам, выполняющимся в операционной системе. UNIX является систе­мой разделения времени, это означает, что каждому процессу вычисли­тельные ресурсы выделяются на ограниченный промежуток времени, по­сле чего они предоставляются другому процессу и т. д. Максимальный временной интервал, на который процесс может захватить процессор, на­зывается временным квантом (time quantum или time slice). Таким образом создается иллюзия, что процессы выполняются одновременно, хотя в дей­ствительности в каждый момент времени выполняется только один (на однопроцессорной системе) процесс.

UNIX является многозадачной системой, а это значит, что одновременно выполняются несколько приложений. Очевидно, что приложения предъ­являют различные требования к системе с точки зрения их планирования и общей производительности. Можно выделить три основных класса при­ложений:

  • Интерактивные приложения. К этому классу относятся командные интерпретаторы, текстовые редакторы и другие программы, непо­средственно взаимодействующие с пользователем. Такие приложения большую часть времени обычно проводят в ожидании пользователь­ского ввода, например, нажатия клавиш клавиатуры или действия мышью. Однако они должны достаточно быстро обрабатывать такие действия, обеспечивая комфортное для пользователя время реакции. Допустимая задержка для таких приложений составляет от 100 до 200 миллисекунд.

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

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

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

В этом разделе мы рассмотрим основные принципы и механизмы плани­рования в традиционных UNIX-системах. Начнем с обработки прерыва­ний таймера, поскольку именно здесь инициируются функции планирова­ния и ряд других действий, например, отложенные вызовы (callout) и алармы (alarm).

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

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

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

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

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

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

Процессу, ожидающему недоступного в данный момент ресурса, система определяет значение приоритета сна, выбираемое ядром из диапазона сис­темных приоритетов и связанное с событием, вызвавшее это состояние. В табл. 3.3 приведены значения приоритетов сна для систем 4.3BSD UNIX и SCO UNIX (OpenServer 5.0). Заметим, что направление роста значений приоритета для этих систем различно — в BSD UNIX большему значению соответствует более низкий приоритет.

Событие

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

Приоритет SCO UNIX

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

0

95

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

10

88

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

20

81

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

30

80

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

75

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

74

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

73

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

40

66

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

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

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

p_priuser = a*p_nice — b*p_cpu,

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

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

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

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

p_cpu = p_cpu/2

Эта простая схема проявляет недостаток нивелирования приоритетов при повышении загрузки системы. Это происходит потому, что в этом случае каждый процесс получает незначительный объем вычислительных ресур­сов и следовательно имеет малую составляющую р_сри, которая еще более уменьшается благодаря формуле пересчета р_сри. В результате степень использования процессора перестает оказывать заметное влияние на при­оритет, и низкоприоритетные процессы (т. е. процессы с высоким nice number) практически "отлучаются" от вычислительных ресурсов системы.

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

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

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

Описанные алгоритмы планирования позволяют учесть интересы низко­приоритетных процессов, т. к. в результате длительного ожидания очереди на запуск приоритет таких процессов увеличивается, соответственно уве­личивается и вероятность запуска. Представленные алгоритмы также обес­печивают более вероятный выбор планировщиком интерактивных процес­сов по отношению к вычислительным (фоновым). Такие задачи, как ко­мандный интерпретатор или редактор, большую часть времени проводят в ожидании ввода, имея, таким образом, высокий приоритет (приоритет сна). При наступлении ожидаемого события (например, пользователь осу­ществил ввод данных) им сразу же предоставляются вычислительные ресурсы. Фоновые процессы, потребляющие значительные ресурсы процессора, имеют высокую составляющую р_сри и, как следствие, более низкий приоритет.

Как правило, очередь на выполнение не одна. Например, SCO UNIX име­ет 127 очередей — по одной на каждый приоритет. BSD UNIX использует 32 очереди, каждая из которых обслуживает диапазон приоритетов, на­пример 0—3, 4—7 и т. д. При выборе следующего процесса на выполнение из одной очереди, т. е. из нескольких процессов с одинаковым текущим приоритетом, используется механизм кругового чередования (round robin). Этот механизм запускается ядром через каждый временной квант для наи­более приоритетной очереди. Однако если в системе появляется готовый к запуску процесс с более высоким приоритетом, чем текущий, он будет за­пущен, не дожидаясь прошествия временного кванта. С другой стороны, если все процессы, готовые к запуску, находятся в низкоприоритетных по отношению к текущему процессу очередях, последний будет продолжать выполняться и в течение следующего временного кванта.