Алгоритм заміни тактової сторінки - вже наявні сторінки


9

Симулюючи алгоритм заміни годинника, коли посилання, яке вже є в пам’яті, чи збільшується рука годинника?

Ось приклад:

З 4 слотами, використовуючи алгоритм заміни годинника

Список довідок: 1 2 3 4 1 2 5 1 3 2 4 5

Початковий список виглядатиме так:

-> [1][1]
   [2][1]
   [3][1]
   [4][1]

Наступним посиланням на вставку буде 1, потім 2. Чи все-таки рука вказуватиме на 1 після 1 і після 2? Іншими словами, після вставки 5, годинник виглядатиме так:

-> [5][1]
   [2][0]
   [3][0]
   [4][0]

?

Відповіді:


9

Я думаю, що цей приклад може прояснити всі ваші сумніви.

Наприклад:
припускає, що основна пам'ять порожня, на початковій сторінці посилальної послідовності є:
3 2 3 0 8 4 2 5 0 9 8 3 2один довідний біт на кадр (називається "використаний" біт)

  PU 3 PU 2 PU 3 PU 0 PU 8 PU 4
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| | 0 | * | 3 | 1 | | 3 | 1 | | 3 | 1 | | 3 | 1 | | 3 | 1 |
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| | 0 | | | 0 | * | 2 | 1 | | 2 | 1 | | 2 | 1 | | 2 | 1 |
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| | 0 | | | 0 | | | 0 | * | | 0 | * | 0 | 1 | | 0 | 1 |
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| | 0 | | | 0 | | | 0 | | | 0 | | | 0 | * | 8 | 1 |
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| | 0 | | | 0 | | | 0 | | | 0 | | | 0 | | | 0 | *
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + ----  


  PU 2 PU 5 PU 0 PU 9 PU 8 PU 3
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| 3 | 1 | * | 3 | 1 | * | 5 | 1 | | 5 | 1 | | 5 | 1 | | 5 | 1 |
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| 2 | 1 | | 2 | 1 | | 2 | 0 | * | 2 | 0 | * | 9 | 1 | | 9 | 1 |
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| 0 | 1 | | 0 | 1 | | 0 | 0 | | 0 | 1 | | 0 | 1 | * | 0 | 1 | *
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| 8 | 1 | | 8 | 1 | | 8 | 0 | | 8 | 0 | | 8 | 0 | | 8 | 1 |
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- +
| 4 | 1 | | 4 | 1 | | 4 | 0 | | 4 | 0 | | 4 | 0 | | 4 | 0 |
+ --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + --- + + --- + ----  


  PU 2 PU   
+ --- + --- + + --- + --- + 
| 5 | 1 | * | 5 | 0 |
+ --- + --- + + --- + --- + 
| 9 | 1 | | 9 | 0 |
+ --- + --- + + --- + --- +
| 0 | 0 | | 2 | 1 |   
+ --- + --- + + --- + --- +  
| 8 | 0 | | 8 | 0 | *
+ --- + --- + + --- + --- + 
| 3 | 1 | | 3 | 1 |  
+ --- + --- + + --- + --- +  

* = вказує на вказівник, який визначає наступне місце для сканування 
P = сторінка #, що зберігається в цьому кадрі 
U = використаний прапор, 
0 = останнім часом не використовується 
1 = посилається нещодавно

Це називається алгоритмом лінійного сканування або алгоритмом другого шансу, який використовується в BSD Linux. 
Як правило, вона реалізована у вигляді кругової черги.

Чи можете ви дати пояснення, що це означає, з точки зору тексту? Це гарна діаграма, але такі діаграми марні, коли ми не знаємо, що це означає.
Дискретна ящірка

7

Якщо посилання надходить на сторінку, яка вже є в пам'яті, алгоритм заміни взагалі не викликається.

Алгоритм заміни тактових годин намагається досягти деяких переваг заміни LRU, але без масивних витрат на маніпулювання бітами LRU на кожному зверненні сторінки.

Сторінка може бути в одному з трьох станів:

  1. Присутні в пам'яті і recently-usedбіт є true. У цьому випадку не буде помилки сторінки, коли трапляється доступ до сторінки, тому жодні біти не змінюватимуться.
  2. Присутні в пам'яті, але recently-usedбіт є false. У цьому випадку сторінка також позначається у таблиці сторінок таким чином, що у випадку доступу до неї відбудеться помилка сторінки. (І якщо в цьому випадку виникає помилка сторінки, єдине, що робить обробник помилок сторінки, - це змінити стан recently-used.)
  3. Сторінка відсутня в пам'яті. У цьому випадку ми дивимось на 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 . Сторінку, яку нещодавно використовували, ніколи не буде замінено. (Чому?)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.