Архитектура операционной системы UNIX :: Бах Морис Дж.
Страница:
449 из 715
алгоритм swapper /* загрузка выгруженных процессов, выгрузка других процессов с целью расчистки места в памяти */
входная информация: отсутствует
выходная информация: отсутствует
{
loop:
for (всех выгруженных процессов, готовых к выполнению)
выбрать процесс, находящийся в состоянии выгруженности дольше остальных;
if (таких процессов нет) {
приостановиться (до момента, когда возникнет необходимость в загрузке процессов);
goto loop;
}
if (в основной памяти достаточно места для размещения процесса) {
загрузить процесс;
goto loop;
}
/* loop2: сюда вставляются исправления, внесенные в алгоритм */
for (всех процессов, загруженных в основную память, кроме прекративших существование и заблокированных в памяти) {
if (есть хотя бы один приостановленный процесс)
выбрать процесс, у которого сумма приоритета и продолжительности нахождения в памяти наибольшая;
else /* нет ни одного приостановленного процесса */
выбрать процесс, у которого сумма продолжительности нахождения в памяти и значения nice наибольшая;
}
if (выбранный процесс не является приостановленным или не соблюдены условия резидентности)
приостановиться (до момента, когда появится возможность загрузить процесс);
else выгрузить процесс;
goto loop; /* на loop2 в исправленном алгоритме */
}
Рисунок 9.9. Алгоритм подкачки
На Рисунке 9.10 показана динамика выполнения пяти процессов с указанием моментов их участия в реализации алгоритма подкачки. Положим для простоты, что все процессы интенсивно используют ресурсы центрального процессора и что они не производят обращений к системным функциям; следовательно, переключение контекста происходит только в результате возникновения прерываний по таймеру с интервалом в 1 секунду. Процесс подкачки исполняется с наивысшим приоритетом планирования, поэтому он всегда укладывается в секундный интервал, когда ему есть что делать.
|< Пред. 447 448 449 450 451 След. >|