8.1.1 Алгоритм

8.1.1 Алгоритм

Сразу после переключения контекста ядро запускает алгоритм планирования выполнения процессов (Рисунок 8.1), выбирая на выполнение процесс с наивысшим приоритетом среди процессов, находящихся в состояниях "резервирования" и "готовности к выполнению, будучи загруженным в память". Рассматривать процессы, не загруженные в память, не имеет смысла, поскольку не будучи загружен, процесс не может выполняться. Если наивысший приоритет имеют сразу несколько процессов, ядро, используя принцип кольцевого списка (карусели), выбирает среди них тот процесс, который находится в состоянии "готовности к выполнению" дольше остальных. Если ни один из процессов не может быть выбран для выполнения, ЦП простаивает до момента получения следующего прерывания, которое произойдет не позже чем через один таймерный тик; после обработки этого прерывания ядро снова запустит алгоритм планирования.

алгоритм schedule_process

входная информация: отсутствует

выходная информация: отсутствует

{

 выполнять пока (для запуска не будет выбран один из процессов) {

  for (каждого процесса в очереди готовых к выполнению)

   выбрать процесс с наивысшим приоритетом из загруженных в память;

  if (ни один из процессов не может быть избран для выполнения)

   приостановить машину;

 /* машина выходит из состояния простоя по прерыванию */

 }

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

 переключиться на контекст выбранного процесса, возобновить его выполнение;

}

Рисунок 8.1. Алгоритм планирования выполнения процессов