Виртуальная память
Оптимальный алгоритм замещения страниц
Одна из возможных стратегий замещения страниц следующая: Замещается та страница, которая не использовалась в течение наибольшего периода времени. Это вполне оправдано с точки зрения здравого смысла: чем раньше страница последний раз использовалась, тем, по-видимому, меньше она необходима в основной памяти.
Рассмотрим пример применения данного алгоритма с той же строкой запроса и с четырьмя максимально возможными фреймами у каждого процесса:
1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
Нетрудно видеть, что будет иметь место всего 6 отказов страниц (в отличие от алгоритма FIFO с 10 отказами страниц).
Пример использования оптимального алгоритма замещения страниц с той же строкой запроса, которая применялась на рис. 18.9 для алгоритма FIFO, приведен на рис. 18.11.
Алгоритм Least Recently Used (LRU)
Данный алгоритм замещения страниц основан на следующем принципе: Замещается та страница, которая раньше всего использовалась.
Для примера со строкой запросов: 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5 число отказов страниц равно всего 4.
Однако следует иметь в виду, что использование системой информации о времени последнего обращения к странице требует хранения в каждом элементе таблицы страниц значения времени последнего обращения (time stamp). Каждый элемент таблицы страниц содержит счетчик. Каждый раз при обращении к странице через некоторый элемент таблицы страниц содержимое системных часов (clock) копируется в его поле счетчика.
Если требуется изменение в конфигурации страниц, необходимо проанализировать поля счетчиков всех элементов таблицы страниц, чтобы определить, какую именно страницу следует заместить. Для определения элемента таблицы страниц с минимальным счетчиком требуется применить алгоритм поиска минимального элемента в массиве, сложность которого O(n),где n – длина таблицы страниц.
Пример использования алгоритма замещения страниц LRU с той же строкой запроса, что и на рис. 18.9 и рис. 18.11 для других алгоритмов, приведен на рис. 18.12.
Для оптимизации данного алгоритма, чтобы избежать поиска минимального элемента таблицы страниц при каждом замещении страниц, используется стековая реализация – стек номеров страниц хранится в форме двухсвязного списка. При обращении к странице она перемещается в начало списка (для этого требуется изменить 6 указателей). Преимущества данной модификации алгоритма в том, что при замещении страниц не требуется поиска.
На рис. 18.13 приведен пример использования стека в алгоритме LRU для хранения самых недавних обращений к страницам.
Алгоритмы, близкие к LRU
Имеется несколько алгоритмов, близких к алгоритму LRU, в которых реализованы различные идеи улучшений или упрощений, направленные на то, чтобы уменьшить недостатки LRU.
- Бит ссылки (reference bit).В данном алгоритме с каждой страницей связывается бит, первоначально равный 0. При обращении к странице бит устанавливается в 1. Далее, при необходимости замещения страниц, заменяется та страница, у которой бит равен 0 (если такая существует), т.е. страница, к которой не было обращений. Данная версия алгоритма позволяет избежать поиска по таблице страниц. Однако она, очевидно, менее оптимальна, чем LRU.
-
Второй шанс (second chance).В данной версии алгоритма используются
ссылочный бит и показания часов, которые хранятся в каждом элементе таблицы страниц.
Замещение страниц основано на показаниях часов. Если страница, которую следует заместить
(по показаниям часов), имеет ссылочный бит, равный 1, то выполняются следующие действия:
- Установить ссылочный бит в 0;
- Оставить страницу в памяти;
- Заместить следующую страницу (по показаниям часов), по тем же самым правилам.
Данный алгоритм имеет следующее эвристическое обоснование. Странице, которая дольше всего не использовалась, как бы дается второй шанс на то, что она будет использована, т. е. делается эвристическое предположение, что, по мере возрастания времени, вероятность обращения к странице, к которой давно не было обращений, возрастает.
Схема алгоритма второго шанса изображена на рис. 18.14.