Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Processes - Metodicka (edited) with MPI - last....doc
Скачиваний:
59
Добавлен:
22.12.2018
Размер:
1.59 Mб
Скачать
    1. Планирование процессов в ос unix.

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

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

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

 P_PRI = F(P_NICE, P_CPU)

Т.е. в вычислении приоритета 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 = P_USER + P_NICE + P_CPU

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

P_PRI = P_USER + P_NICE – NZERO + P_CPU/a

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]