Если поступает ссылка на страницу, уже находящуюся в памяти, алгоритм замены вообще не вызывается.
Алгоритм замены часов пытается достичь некоторых из преимуществ замены 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 . Последняя использованная страница никогда не будет заменена. (Почему?)