Если поступает ссылка на страницу, уже находящуюся в памяти, алгоритм замены вообще не вызывается.
Алгоритм замены часов пытается достичь некоторых из преимуществ замены LRU, но без массивных накладных манипулирования бит LRU на каждой странице хите.
Страница может находиться в одном из трех состояний:
- Присутствует в памяти и
recently-used
бит есть true
. В этом случае при доступе к странице не будет ошибки страницы, поэтому биты не изменятся.
- Присутствует в памяти, но
recently-used
немного есть false
. В этом случае страница также помечается в таблице страниц таким образом, что при обращении к странице произойдет сбой страницы. (И если в этом случае возникает ошибка страницы, единственное, что делает обработчик ошибки страницы, это изменяет состояние на recently-used
.)
- Страница отсутствует в памяти. В этом случае мы смотрим на
clock-hand
. Пока clock-hand
указатель указывает на страницу с установленным recently-used
битом, true
мы переворачиваем recently-used
бит на false
, а затем увеличиваем, clock-hand
чтобы указать на следующую страницу. Когда мы находим страницу с recently-used
уже очищенной, это страница, которую мы заменяем. Затем мы помечаем новую страницу как recently-used
и увеличиваем clock-hand
на следующую страницу.
В основе часов лежит вероятностный алгоритм аппроксимации LRU. Если скорость, с которой осуществляется доступ к странице, намного выше, чем скорость, с которой clock-hand
они возвращаются на ту же страницу, вероятность того, что страница будет отмечена, высока recently-used
. Если скорость , при которой страницы осуществляется доступ мала по сравнению со скоростью , с которой clock-hand
возвращается вокруг, то страница, скорее всего, будет в состоянии не recently-used
. Последняя использованная страница никогда не будет заменена. (Почему?)