Добавил:
Developer Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС Нижний.pdf
Скачиваний:
13
Добавлен:
25.03.2023
Размер:
2.75 Mб
Скачать

Лабораторный практикум по курсу "Операционные системы"

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

Алгоритм обычно оценивается на конкретной последовательности ссылок к памяти, для которой подсчитывается число ошибок присутствия в памяти. Эта последовательность называется reference string. Мы можем генерировать reference string искусственным образом при помощи датчика случайных чисел или трассируя конкретную систему. Последний метод дает слишком много ссылок, для уменьшения числа которых можно сделать две вещи:

-для конкретного размера страниц можно запоминать только их номера, а не адреса, на которые идет ссылка;

-если имеется ссылка на страницу, ближайшие последующие ссылки на данную страницу можно не фиксировать.

Как уже говорилось, большинство процессоров имеют простейшие аппаратные средства, позволяющие собирать некоторую статистику обращений к памяти. Эти средства включают два специальных флага на каждый элемент таблицы страниц. Один флаг (флаг использования или обращения, reference бит) автоматически устанавливается, когда происходит любое обращение к этой странице, а второй флаг (флаг модификации или изменения, modify бит) устанавливается, если производится запись в эту страницу. Чтобы использовать эти возможности, операционная система должна периодически сбрасывать эти флаги.

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

Алгоритмы замещения страниц

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

Этот алгоритм имеет минимальную частоту ошибок присутствия в памяти среди всех алгоритмов. Он прост: замещай страницу, которая не будет использоваться в течение наибольшего периода времени. Каждая страница помечается числом инструкций, которые будут выполнены, прежде чем на эту страницу будет сделана первая ссылка.

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

Алгоритм FIFO - Выталкивание первой пришедшей страницы

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

Учебно-исследовательская лаборатория «Информационные технологии» 59

Лабораторный практикум по курсу "Операционные системы"

Алгоритм LRU (The Least Recently Used) - Выталкивание дольше всего не использовавшейся страницы

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

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

Существует класс алгоритмов, называемых стековыми. Это алгоритмы, для которых множество страниц в памяти для ОЗУ, объемом n страниц - всегда подмножество страниц для случая ОЗУ из n+1 страницы. LRU таковым является.

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

Алгоритм NFU (Not Frequently Used) - Выталкивание редко используемой страницы

Программная реализация алгоритма, близкого к LRU. Рассмотренные варианты LRU в принципе реализуемы, но, как уже отмечалось, они требуют специальной аппаратной поддержки, которой большинство современных процессоров не предоставляет. Поэтому хотелось бы иметь алгоритм, достаточно близкий к LRU, но не требующий сложной специальной поддержки. Один из таких возможных алгоритмов - это алгоритм NFU.

Для него требуются программные счетчики, по одному на каждую страницу, которые сначала равны нулю. При каждом прерывании по времени (а не после каждой инструкции) операционная система сканирует все страницы в памяти и у каждой страницы с установленным флагом обращения увеличивает на единицу значение счетчика, а флаг обращения сбрасывает.

Таким образом, кандидатом на освобождение оказывается страница с наименьшим значением счетчика, как страница, к которой реже всего обращались. Главным недостатком алгоритма NFU является то, что он никогда ничего не забывает. Например, страница, к которой очень много обращались некоторое время, а потом обращаться перестали, все равно не будет удалена из памяти, потому что ее счетчик содержит большую величину.

Для устранения данного недостатка используется небольшая модификация алгоритма, которая реализует "забывание". Достаточно, чтобы периодически (например, раз в секунду) содержимое каждого счетчика сдвигалось вправо на 1 бит, а уже затем производилось бы его увеличение для страниц с установленным флагом обращения.

Другим, уже не так просто устранимым недостатком алгоритма, является длительность процесса сканирования таблиц страниц.

60 Учебно-исследовательская лаборатория «Информационные технологии»

Соседние файлы в предмете Современные операционные системы