количество страниц, выделяемых каждому процессу, меняется со
временем. Основной алгоритм часов работает, сканируя в цикле
страничные блоки (как если бы они лежали на окружности
циферблата часов). На первом проходе, когда стрелка часов указывает
на страничный блок, сбрасывается его бит использования. На втором
проходе у каждого страничного блока, к которому не было доступа с
момента первого прохода, бит использования останется сброшенным,
и этот страничный блок будет помещен в список свободных страниц.
Страничный блок в списке свободных страниц сохраняет свое
содержание, что позволяет восстановить страницу, если она
потребуется прежде, чем будет перезаписана.
Изначально в версии UNIX 4BSD использовался основной
алгоритм часов, но затем он был заменен более эффективным
алгоритмом часов с двумя стрелками. В этом алгоритме страничный
демон поддерживает два указателя на карту памяти. При работе он
сначала очищает бит использования передней стрелкой, а затем
проверяет этот бит задней стрелкой. После чего перемещает обе
стрелки. Если две стрелки находятся близко друг от друга, то только у
очень активно используемых страниц появляется шанс, что к ним
будет обращение между проходами двух стрелок. Если же стрелки
разнесены на 359 градусов (то есть задняя стрелка находится слегка
впереди передней), то по сути снова получается исходный алгоритм
часов. При каждом запуске страничного демона стрелки проходят не
полный оборот, а столько, сколько необходимо, чтобы количество
страниц в списке свободных страниц было не менее lotsfree.
Если операционная система обнаруживает, что частота подкачки
страниц слишком высока, а количество свободных страниц все время
ниже lotsfree, свопер начинает удалять из памяти один или несколько
процессов, чтобы остановить состязание за свободные страничные
блоки. Свопинг в системе 4BSD осуществляется по следующему
алгоритму. Сначала свопер проверяет, есть ли процесс, который
бездействовал в течение 20 и более секунд. Если такие процессы есть,
из них выбирается бездействовавший в течение максимального срока
и выгружается на диск. Если таких процессов нет, изучаются четыре
самых больших процесса, из которых выбирается тот, который
находился в памяти дольше всех, и выгружается на диск. При не-
обходимости этот алгоритм повторяется до тех пор, пока не будет
высвобождено достаточное количество памяти.
Пример практической реализации
операционной системы: UNIX