Алгоритмы, основанные на приоритетах

Вычисление приоритета основывается на статических и динамических характеристиках. Изменение приоритета может происходить по инициативе процесса, пользователя, ОС. Правила назначения приоритета процессов определяют эффективность работы системы.

Планирование по наивысшему приоритету (highest priority first - HPF).

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

Возможно два варианта:

- относительный приоритет (ожидание исчерпания кванта у текущего процесса)

- абсолютный приоритет (немедленная смена текущего процесса)

Задача выбора/постановки процесса с наивысшим приоритетом зависит от организации очереди (упорядочена/неупорядочена).

Возможно наличие очередей с одинаковым приоритетом.

Пример использования стратегии HPF.

Выбор самого короткого задания (shortest job first - SJF).

Время выполнения – характеристика, на которой основан приоритет. Приоритет обратно пропорционален ожидаемому времени обработки.

Этот вариант

удобен для “коротких” процессов.

Класс подходов, использующих линейно возрастающий приоритет.

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

Из выбора A и В - разные правила планирования:

- Если 0<A<=B обслуживание очереди по дисциплине FIFO

- Если 0>B>=A обслуживание очереди по дисциплине LIFO

Нелинейные функции изменения приоритета

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

В частности, метод SJF можно модифицировать, добавляя приоритет длинным процессам после некоторого времени ожидания.

Разновидности круговорота.

Простой круговорот (RR – round robin) не использует никакой статистической или динамической информации о приоритетах. (см. рисунок выше)

При круговороте со смещением каждому процессу соответствует своя длина кванта, пропорциональная его приоритету.

«Эгоистический» круговорот. Если параметры A и B : 0<=B<A.

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

Приоритет выполняемых процессов увеличивается с коэффициентом B<A, следовательно, ожидающие процессы их догонят.

При B=0 «эгоистический» круговорот практически сводится к простому.

Очереди с обратной связью (feedback – FB).

Используется N очередей. Новый процесс ставится в первую очередь, после получения кванта он переносится во вторую и так далее. Процессор обслуживает непустую очередь с наименьшим номером.

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

«-» Работа с несколькими очередями – издержки.

«+» Удобны для коротких заданий: не требуется предварительная информация о времени выполнения процессов.

БИЛЕТ 27

Смешанные алгоритмы планирования

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

К примеру, в основе – концепция квантования, а определение кванта и/или дисциплина обслуживания очередей базируется на приоритетах.

БИЛЕТ 28 . Планирование свопинга в ОС UNIX.

Планирование процесса, которому предстоит занять время центрального процессора, основывается на понятии приоритета. Каждому процессу сопоставляется некоторое целое числовое значение его приоритета (в т.ч., возможно, и отрицательное). Общее правило таково: чем больше числовое значение приоритета процесса, тем меньше его приоритет, т.е. наибольшие шансы занять время ЦП будут у того процесса, у которого числовое значение приоритета минимально.

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

В вычислении приоритета P_PRI используются две изменяемые составляющие - P_NICE и P_CPU. P_NICE - это пользовательская составляющая приоритета. Его начальное значение полагается равным системной константе NZERO, в процессе выполнения процесса P_NICE может модифицироваться системным вызовом nice().Аргументом этого системного вызова является добавка к текущему значению (для обычного – непривилегированного - процесса эти добавки представляют собой неотрицательные числа). Значение P_NICE наследуется при порождении процессов, и таким образом, значение приоритета не может быть понижено при наследовании. Заметим, что изменяться P_NICE может только в сторону увеличения значения (до некоторого предельного значения), таким образом пользователь может снижать приоритет своих процессов.

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

В общем случае, приоритет процесса есть функция:

P_PRI = f(P_NICE, P_CPU)

Константа P_USER представляет собой нижний порог приоритета для пользовательских процессов. Пользовательская составляющая, как правило, учитывается в виде разности _NICE – NZERO, что позволяет принимать в расчет только добавку, введенную посредством системного вызова nice().Системная составляющая учитывается с некоторым коэффициентом. Поскольку неизвестно, проработал ли до момента прерывания процесс на процессоре полный интервал между прерываниями, то берется некоторое усреднение. Суммарно получается следующая формула для вычисления приоритета

P_PRI = P_USER + P_NICE – NZERO + P_CPU/a.

Заметим, что, если приоритет процесса не изменялся при помощи nice(), то единственной изменяемой составляющей приоритета будет P_CPU, причем эта составляющая растет только для того процесса, который находится в состоянии выполнения. В тот момент, когда значение ее станет таково, что в очереди готовых к выполнению процессов найдется процесс с меньшим значением приоритета, выполняемый процесс будет приостановлен и заменен процессом с меньшим значением приоритета. При этом значение составляющей P_CPUдля выгруженного процесса сбрасывается в нуль.

Пример. Рассмотрим два активных процесса, разделяющих процессор, причем таких, что ни их процессы-предки, ни они сами не меняли составляющую P_NICEсистемным вызовом nice() .Тогда P_NICE =NZERO иоба процесса имеют начальное значение приоритета P_PRI = P_USER, так как P_CPU=0.Пусть значение P_CPUувеличивается на единицу через Nединиц времени (частота прерывания по таймеру), а в вычисление приоритета она входит с коэффициентом 1/A.Таким образом, дополнительная единица в приоритете процесса, занимающего процессор, «набежит» через А таймерных интервалов. Значение P_CPUвторого процесса остается неизменным, и его приоритет остается постоянным. Через NAединиц времени разница приоритетов составит единицу в пользу второго процесса и произойдет смена процессов на процессоре.

Принципы организация своппинга.

В системе определенным образом выделяется пространство для области свопинга. Есть пространство оперативной памяти, в котором находятся процессы, обрабатываемые системой в режиме мультипрограммирования. Есть область на ВЗУ, предназначенная для откачки этих процессов по мере необходимости. Упрощенная схема планирования подкачки основывается на использовании некоторого приоритета, который называется P_TIME и также находится в контексте процесса. В этом параметре аккумулируется время пребывания процесса в состоянии мультипрограммной обработки, или в области свопинга. В поле P_TIME существует счётчик выгрузки (outage) и счётчик загрузки (inage).

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

Windows NT

Определено 32 уровня приоритета.

2 класса нитей:

- нити с переменными приоритетами (1-15);

- нити “реального времени” (16-32);

Изначально процессу присваивается базовый приоритет. Нить получает значение. Из базовых приоритетов операционная система может менять базовый приоритет.

Планирование проводится по высшему приоритету. Поддерживается группа очередей (по одной для каждого приоритета). Система просматривает очереди, начиная с высшего приоритета. Если квант закончился, то процесс получает приоритет 1 и отправляется в конец. Повышается значение приоритета при выходе из состояния ввода-вывода.

БИЛЕТ 29 Планирование в системах реального времени

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

Системы реального времени бывают “Жесткие” и ”мягкие ”.

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

Это может быть обеспечено за счет :

- полного тестирования всевозможных сценариев

- построения статического расписания

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

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

Пусть {Ti} набор периодических процессов с периодами – pi, предельными сроками выполнения diи требованиями ко времени выполнения ci.

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

Необходимое условие наличия расписания:

Сумма коэффициентов использования m=S ci/ pi<= k, где k - количество доступных процессоров.

Наши рекомендации