Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
23
Добавлен:
17.04.2013
Размер:
103.94 Кб
Скачать

Реализации lru Точная

Требует строго упорядочивать страницы по времени обращения к ним. Сложно.

На основе бита обращения к странице

Для каждой страницы поддерживается бит использования(R). Этот бит аппаратно устанавливается при каждом обращении к странице (может размещаться в таблице страниц).

Номера загружаемых страниц размещаются в кольцевом буфере.

Когда происходит прерывание по отсутствию страницы, указатель кольцевого буфера смещается на 1. Анализируется бит R текущей страницы буфера

- если равен 0, страница замещается

- если равен 1, то очищается и переходим к следующему элементу буфера

Если бит R установлен для всех страниц, то метод вырождается вFIFO.

N-й шанс (2-й шанс)

Поддерживается счетчик просмотров для каждой страницы.

Когда происходит прерывание по отсутствию страницы, указатель кольцевого буфера смещается на 1. Анализируется бит R текущей страницы буфера

- если равен 0, то счетчик увеличивается и если <N переходим к следующей позиции, иначе страница замещается

- если равен 1, то очищается счетчик и бит R и переходим к следующему элементу буфера

При больших N может происходить многократный просмотр буфера с наращиванием счетчика до величиныN.

Обычно N=1 для чистых (не модифицированных) страниц иN=2 для «грязных» страниц.

Многие процессоры поддерживают до 4 битов, связанных со страницами:

  • use (R) - устанавливается при каждом обращении к странице и очищается алгоритмомLRU

  • modified (W) - устанавливается при каждой записи в страницу и очищается при записи страницы на диск

  • valid (P) – бит присутствия страницы в памяти

  • read-only – бит защиты страницы от записи

Заметим, что первые два могут эмулироваться на основе двух последних.

Например, VAX/VMS не поддерживаетR иM биты

Поддерживаются два списка страниц:

  • FIFO - помечены какread-write и доступны для обращения

  • LRU (второй шанс) - помечены какinvalid, но находятся в памяти

При обращении к странице:

Еслив спискеFIFO, то обращаемся к ней

иначепрерывание по отсутствию страницы

По прерыванию:

Еслив спискеLRU, то

переместить в список FIFO,

первую страницу из FIFO переместить в конецLRU

иначе

удалить первую из LRU,

переместить в конец LRUпервую страницу изFIFO,

загрузить требуемую страницу в конец FIFO

Явление «пробуксовки» (thrashing)

Возникает в случае, когда размер буфера меньше чем число активно используемых страниц.

Например, пусть время обращения к странице – 200нс, а время обработки прерывания по отсутствию страницы – 10 мс, вероятность прерывания 0.2.

Тогда среднее время обращения к странице составит ~2мс, т.е. ухудшение на 4 порядка.

Беда в том, что система не представляет потребности и характер поведения процессов, можно лишь фиксировать факт резкого увеличения числа прерываний по отсутствию страницы на уровне производительности дисковой подсистемы.

Как определить текущие потребности процессов?

Соседние файлы в папке вар1