Якщо посилання надходить на сторінку, яка вже є в пам'яті, алгоритм заміни взагалі не викликається.
Алгоритм заміни тактових годин намагається досягти деяких переваг заміни 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
. Сторінку, яку нещодавно використовували, ніколи не буде замінено. (Чому?)