Архитектура операционной системы UNIX :: Бах Морис Дж.
Страница:
448 из 715
Если процесс подкачки не может найти ни одного процесса, подходящего для выгрузки, или ни одного процесса, подходящего для загрузки, или ни одного процесса, перед выгрузкой не менее 2 секунд [26] находившегося в памяти, он приостанавливает свою работу по причине того, что ему нужно загрузить процесс в память, а в памяти нет места для его размещения. В этой ситуации таймер возобновляет выполнение процесса подкачки через каждую секунду. Ядро также возобновляет работу процесса подкачки в том случае, когда один из процессов переходит в состояние приостанова, так как последний может оказаться более подходящим для выгрузки процессом по сравнению с ранее рассмотренными. Если процесс подкачки расчистил место в памяти или если он был приостановлен по причине невозможности сделать это, он возобновляет свою работу с перезапуска алгоритма подкачки (с самого его начала), вновь предпринимая попытку загрузить ожидающие выполнения процессы.
алгоритм swapper /* загрузка выгруженных процессов, выгрузка других процессов с целью расчистки места в памяти */
входная информация: отсутствует
выходная информация: отсутствует
{
loop:
for (всех выгруженных процессов, готовых к выполнению)
выбрать процесс, находящийся в состоянии выгруженности дольше остальных;
if (таких процессов нет) {
приостановиться (до момента, когда возникнет необходимость в загрузке процессов);
goto loop;
}
if (в основной памяти достаточно места для размещения процесса) {
загрузить процесс;
goto loop;
}
/* loop2: сюда вставляются исправления, внесенные в алго
|< Пред. 446 447 448 449 450 След. >|