Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛК Коблякова Д.А. от 09-КТ-2.doc
Скачиваний:
52
Добавлен:
27.03.2015
Размер:
1.07 Mб
Скачать

10.3.1 Fifo алгоритм. Выталкивание первой пришедшей страницы.

Простейший алгоритм. Каждой странице присваивается временная метка.  Реализуется это просто созданием очереди страниц, в конец которой страницы попадают, когда загружаются в физическую память, а из начала берутся, когда требуется освободить память. Для замещения выбирается старейшая страница. К сожалению, эта стратегия с достаточной вероятностью будет приводить к замещению активно используемых  страниц,  например, страниц текстового процессора. Заметим, что при замещении активных страниц все работает корректно, но fault происходит немедленно.

Интуитивно ясно, что чем больше страничных кадров имеет память, тем реже будут иметь место page fault'ы.  Удивительно, но это не всегда так. Как установил Belady с коллегами, определенные последовательности обращений к страницам приводят в действительности к увеличению числа страничных нарушений при увеличении кадров, выделенных процессу. Это явление носит название аномалии FIFO или аномалии Belady.

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

10.3.2 Оптимальный алгоритм

Одно из последствий открытия аномалии Belady - поиск оптимального алгоритма.  Этот алгоритм имеет минимальную частоту fault'ов среди всех алгоритмов. Он прост:

замещай страницу, которая не будет использоваться в течение наибольшего периода времени, т.е. к которой дольше всего не будет обращений.

Каждая страница помечается числом инструкций, которые будут выполнены, прежде чем на эту страницу будет сделана первая ссылка.

Этот алгоритм нереализуем. ОС не знает,  к какой странице будет следующее обращение.  (Ранее такие проблемы были с планированием процессов -  алгоритм SJF).  Для второго обращения уже можно делать прогноз на основе информации собранной после первого обращения.

Зато из этого можно сделать вывод, что для того, чтобы алгоритм замещения был максимально близок к идеальному алгоритму, система должна как можно точнее предсказывать будущие обращения процессов к памяти. Данный алгоритм применяется для оценки качества реализуемых алгоритмов.

10.3.3 Выталкивание дольше всего не использовавшейся страницы. Lru (The Least Recently Used) Algorithm .

Исходим из эвристического правила, что недавнее прошлое - хороший ориентир для прогнозирования ближайшего будущего.

Ключевое отличие между FIFO и оптимальным алгоритмом в том, что один смотрит назад, а другой вперед. Если использовать прошлое, для аппроксимации будущего, имеет смысл замещать страницу, которая не использовалась в течение долгого времени. Такой подход называется least recently used (LRU) алгоритм.

LRU часто используется и считается хорошим. Основная проблема - реализация.

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

Причем он должен обновляться при каждой ссылке. Много времени нужно на поиск страниц в списке.  Есть вариант реализации со специальным устройством.  Например, - иметь 64-битный указатель, который автоматически увеличивается на 1 после каждой инструкции и в таблице страниц иметь соответствующее поле, в которое заносится значение указателя  при каждой ссылке на страницу. При возникновении page fault'а выгружается страница с наименьшим указателем.

Как оптимальный алгоритм,  так и LRU не страдают от аномалии Белейди. Существует класс алгоритмов, называемых стековыми (stack) алгоритмами, которые не проявляют аномалии Белейди. Это алгоритмы, для которых множество страниц в памяти для n кадров всегда подмножество страниц для n+1 кадра.  LRU таковым является.

Заметим, что никакая реализация LRU неприемлема без  специального оборудования помимо стандартных регистров. Если, например, задействовать прерывание для модификации полей, то это будет замедлять ссылку к памяти в 10 раз.