Сегментно-страничное распределение.

Данный метод представляет собой комбинацию страничного и сегментного распределения памяти и, вследствие этого, сочетает в себе достоинства обоих подходов.

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

Оперативная память делится на физические страницы.

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

 

 

 

Общие выводы:

Страничная виртуальная память организует перемещение данных между памятью и диском страницами – частями ВАП фиксированного и сравнительно небольшого размера (достоинства – высокая скорость обмена, низкий уровень фрагментации; недостатки – сложно организовать защиту данных, разделенных на части механически);

Сегментная виртуальная память предусматривает перемещение данных сегментами – частями ВАП произвольного размера, полученными с учетом смыслового значения данных (достоинства – «осмысленность» сегментов упрощает их защиту; недостатки – медленное преобразование адреса, высокий уровень фрагментации);

Сегментно-страничная виртуальная память сочетает достоинства обоих предыдущих подходов.

 

9.2 Стратегии управления виртуальной памятью (свопинг).

Стратегии управления виртуальной памятью:

ü Стратегия выборки (fetch policy) .

ü Стратегия размещения (placement policy).

ü Стратегия замещения (replacement policy).

 

Выборка:

Определяет, в какой момент следует переписать отсутствующую в ОП страницу (сегмент) из внешней памяти в ОП.

Выборка бывает по запросу и с упреждением.

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

 

Размещение:

Определяет, в какое место первичной памяти следует поместить поступающую страницу (сегмент).

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

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

 

 

Замещение:

Определяет, какую страницу (сегмент) нужно вытолкнуть во внешнюю память, чтобы освободить место.

Разумная стратегия замещения позволяет оптимизировать хранение в памяти самой необходимой информации.

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

1’st page fault : страница 1 была вытеснена и заменена страницей 5, т.к. страница 1 в будущем больше не будет вызываться.

2’nd page fault: страница 2 была вытеснена и заменена страницей 4, т.к. страница 2 будет вызвана позже чем остальные две страницы (страницы 5 и 3).

3’rd page fault: страница 4 была вытеснена и заменена страницей 2, т.к. страница 4 в будущем больше не будет вызываться.

 

Алгоритмы замещения страниц (свопинга):

Глобальные – оперируют всей совокупностью страниц оперативной памяти.

Локальные – оперируют множеством страниц оперативной памяти, принадлежащих конкретному процессу.

 

Алгоритмы замещения страниц (свопинга):

FIFO(First In First Out) – замещение первой использованной страницы

FIFO 2nd Chance(похож на clock)

LRU (Least Recently Used) – замещение дольше всех неиспользовавшихся страниц

NRU (Not Recently Used) или clock – замещение не использовавшихся в последнее время страницы

NFU (Not Frequently Used) – замещение наименее часто используемых страниц

 

Пример действия FIFO:

 

FIFO 2nd Chance:

Модификация алгоритма FIFO, которая использовалась в ранних версиях UNIX.

Позволяет избежать потери часто используемых страниц с помощью анализа признака использования R для самой «старой» страницы.

Если признак установлен (R = 1), то страница, в отличие от FIFO, не выталкивается, а очищается бит (R = 0) и страница становится в конец очереди.

Недостаток – недостаточная эффективность алгоритма, потому что постоянно передвигает страницы по списку. Поэтому лучше хранить описания страничных блоков в виде кольцевого списка и использовать указатель на старейшую страницу – алгоритм NRU (clock).

 

 

Алгоритм LRU:

Для замещения выбирается дольше всего неиспользовавшаяся страница.

Часто используется и считается хорошим.

Основная проблема – реализация (требуется аппаратная поддержка).

Реализация LRU №1:

Основана на использовании специального признака обращения (reference bit) к странице (требуется аппаратная поддержка).

Каждой странице назначается свой счетчик обращений.

С некоторым постоянным временным интервалом для каждой страницы выполняется:

- если признак обращения = 0 (страница не использовалась), увеличить счетчик на 1;

- если признак обращения = 1 (страница использовалась), обнулить счетчик;

- сбросить признак обращения.

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

 

Реализация LRU №2:

В некоторых архитектурах (например, Intel) признак обращения отсутствует.

Для эмуляции признака обращения можно использовать признак достоверности (valid bit), сбрасывая его для возникновения «псевдосбоев» страниц – пример ОС Windows 2000-2008.

Недостаток – огромное количество дополнительных страничных прерываний.

 

NRU или clock:

Реализация:

- все страничные кадры ОП выстраиваются в один большой круг (часы) реализуемый обычным кольцевым списком;

- “стрелка часов” указывает следующего кандидата на вытеснение движется по списку страниц как стрелка часов;

- если признак обращения сброшен, значит, страница давно не использовалась, и она – подходящая жертва;

- если признак обращения установлен, он сбрасывается, и стрелка переводится на следующую страницу.

Особенности:

- чем чаще требуются страницы, тем быстрее движется стрелка;

- при достаточно большом объеме памяти дополнительные расходы невелики;

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

NFU (Not Frequently Used):

Программная реализация алгоритма, близкого к LRU, - алгоритм NFU.

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

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

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

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

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

 

Понятие «trashing».

Высокая частота страничных прерываний называется трешинг (thrashing).

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

Критическая ситуация такого рода возникает вне зависимости от конкретных алгоритмов замещения.

В результате все процессы попадают в очередь запросов на свопинг, а очередь процессов в состоянии готовности пустеет.

ОС видит это и постепенно увеличивает степень мультипрограммирования.

Таким образом, пропускная способность системы падает из-за трешинга.

 

Решение проблемы trashing:

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

В этом случае если даже один из процессов попадает в трешинг, это напрямую не сказывается на других процессах.

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