
- •IX. Алгоритмы замещения страниц
- •2. Локальные и глобальные алгоритмы замещения страниц
- •3. Алгоритм замещения неиспользовавшейся в последнее время страницы (nru)
- •4. Алгоритм выталкивания первой пришедшей страницы (fifo)
- •8. Алгоритм выталкивания редко используемой страницы (nfu)
- •8.1. Отличительная особенность в реализации алгоритма nfu.
- •7.2. Недостатки алгоритма nfu.
- •9. Алгоритм замещения страниц Рабочий набор
- •10. Алгоритм замещения страниц wsClock
- •11. Распределение памяти
- •11.1. Зависимость частоты страничных прерываний от размеров памяти, предоставленной процессу.
- •11.2. Размер страниц.
- •11.3. Совместно используемые страницы. Отдельные пространства команд и данных.
- •11.4. Очистка страниц.
- •Очистка страниц в ос unix и unix-подобных системах (linux)
- •Очистка страниц в Windows-системах
- •X. Сегментация памяти
- •1. Сегменты, доступ к сегментам, сегментация
- •2. Основные способы адресации
- •2.2. Сегментная адресация (сегментация).
- •2.3. Страничная организация.
- •2.4. Комбинация сегментирования и страничного способа.
- •Использование единого адресного пространства и использование сегментов
- •3.1. Программа, использующая единое адресное пространство:
- •3.2. Использование сегментов.
- •4. Реализация сегментации
- •4.1. Сегментация с использованием страниц в ос multics.
- •Преобразование адреса в системе multics
IX. Алгоритмы замещения страниц
2. Локальные и глобальные алгоритмы замещения страниц
Локальные алгоритмы замещения страниц распределяют фиксированное или динамически настраиваемое число страниц для каждого процесса, распределение страничных блоков происходит поровну между процессами, независимо от их размеров (подход справедливый, но может быть не эффективным, т. к. все процессы разные). После того, как процесс израсходовал все предназначенные ему страницы, система удаляет из физической памяти одну из его страниц (а не из страниц других процессов).
Этот подход требует, чтобы система хранила список физических страниц каждого процесса, который называют рабочим множеством процесса.
Большинство процессоров имеют простейшие аппаратные средства, позволяющие собирать некоторую статистику обращений к памяти. Эти средства включают два специальных флага на каждый элемент таблицы страниц: флаг обращения (reference бит), который автоматически устанавливается, когда происходит любое обращение к этой странице, и флаг изменения (modify бит), который устанавливается, если производится запись в эту страницу. Чтобы использовать эти возможности, операционная система должна периодически сбрасывать эти флаги.
Глобальный алгоритм замещения страниц заключаются в том, что в случае возникновения исключительной ситуации, освобождается любая физическая страница, независимо от того, какому процессу она принадлежала; страничные блоки распределяются между процессами в зависимости от их размеров, которые могут изменяться динамически, и поэтому определить размер достаточно сложно. Тем не менее, глобальный алгоритм работает эффективнее, чем локальный.
Недостатки глобальных алгоритмов:
делают одни процессы чувствительными к поведению других процессов (например, если один процесс в системе использует большое количество памяти, то все остальные процессы будут в результате ощущать замедление из-за недостатка памяти);
некорректно работающий процесс может подорвать работу всей системы (если, конечно, в системе не предусмотрено ограничение на размер памяти, выделяемой процессу), пытаясь захватить все больше памяти.
Идеальный алгоритм замещения страниц заключается в том, чтобы выгружать ту страницу, которая будет запрошена позже всех. Но этот алгоритм не осуществим, т. к. нельзя знать, какая страница и когда будет запрошена, а можно лишь набрать статистику использования страниц.
3. Алгоритм замещения неиспользовавшейся в последнее время страницы (nru)
В алгоритме NRU (Not Recently Used) используются биты обращения (R-Referenced) и изменения (M-Modified) в таблице страниц. При обращении бит R выставляется в 1, через некоторое время ОС переводит его в 0. Бит M переводится в 0 только после записи на диск.
Благодаря этим битам можно получить четыре класса страниц:
не было обращений и изменений (R=0, M=0);
не было обращений, было изменение (R=0, M=1);
было обращение, не было изменений (R=1, M=0);
было обращение и изменение (R=1, M=1).
4. Алгоритм выталкивания первой пришедшей страницы (fifo)
Алгоритм FIFO (First In – First Out) – это простейший алгоритм, когда каждой странице присваивается временная метка; реализуется созданием очереди страниц, в конец которой страницы попадают, когда они загружаются в физическую память, а из начала очереди берутся страницы, когда требуется освободить память. Для замещения выбирается старейшая страница. Понятно, что эта стратегия с достаточной вероятностью будет приводить к замещению активно используемых страниц (например, страниц текстового процессора). Недостаток заключается в том, что наиболее часто запрашиваемая страница может быть выгружена.
5. Алгоритм замещения страниц Вторая попытка
Алгоритм Вторая попытка подобен алгоритму FIFO с использованием проверки бита обращения в таблице страниц: если R=1 (было обращение), то страница переводится в конец очереди; если R=0 (не было обращения), то страница выгружается. В этом алгоритме часто используемая страница никогда не покинет память.
Недостатком является то, что приходится часто перемещать страницы по списку.
6. Алгоритм замещения страниц Часы
В алгоритме Часы, чтобы избежать перемещения страниц по списку, наряду с использованием проверки бита обращения в таблице страниц (если R=1, то страница остается в списке; если R=0, то страница выгружается) используется указатель, который перемещается по списку.
7. Алгоритм дольше всего неиспользовавшейся страницы (LRU)
Алгоритм LRU (Least Recently Used) состоит в следующем: если использовать прошлое, то для аппроксимации будущего имеет смысл замещать страницу, которая не использовалась в течение долгого времени.
Алгоритм LRU используется достаточно часто и считается хорошим алгоритмом, но основная проблема заключается в его реализации.
Способы реализации алгоритма LRU
1. Выстраивание страниц по количеству их использования, т. е., поддерживать список, в котором выстраивать страницы по количеству использования. Реализация этого способа очень дорогая и, кроме того, список должен обновляться при каждой ссылке, а также требуется много времени на поиск страниц в списке.
2. Использование специального устройства: например, можно иметь 64-битный указатель, который автоматически увеличивается на 1 после каждой инструкции, а в таблице страниц иметь соответствующее поле, в которое заносится значение указателя при каждой ссылке на страницу.
Важно отметить, что никакая реализация LRU неприемлема без специального оборудования, помимо стандартных регистров. Если, например, задействовать прерывание для модификации полей, то это будет замедлять ссылку к памяти в 10 раз.