Алгоритм замены страницы часов - уже существующие страницы


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.