
- •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
10. Алгоритм замещения страниц wsClock
Алгоритм WSClock основан на алгоритме Часы; использует рабочий набор, биты обращения (R-Referenced) и изменения (M-Modified) в таблице страниц, а также время последнего использования.
Если R=0 и возраст страницы > t, то страница выгружается и загружается новая страница; если R=1, то R переводится в 0, и страница остается, а время ее последнего использования изменяется.
Алгоритм WSClock является достаточно реальным и используется на практике.
11. Распределение памяти
11.1. Зависимость частоты страничных прерываний от размеров памяти, предоставленной процессу.
Показателем потребности процесса в страницах является частота страничных прерываний: чем больше частота, тем больше памяти необходимо процессу.
Зависимость количества страничных прерываний в секунду от количества блоков, предоставленных, процессу следующая:
Если частота ниже линии В, то памяти процессу предоставлено слишком много.
Если частота выше линии А, то памяти процессу предоставлено слишком мало.
Если всем процессам не хватает памяти, то происходит, так называемая, пробуксовка, т. е. производится выгрузка одного из процессов на диск.
11.2. Размер страниц.
Маленькие страницы улучшают распределение памяти, но увеличивают таблицу страниц, а частые переключения уменьшают производительность.
Большие страницы ухудшают распределение памяти, хотя уменьшают таблицу страниц, и исключают частые переключения, поэтому производительность увеличивается.
11.3. Совместно используемые страницы. Отдельные пространства команд и данных.
Один из вариантов распределения памяти – это единое пространство команд и данных, а другой – разделение пространств команд и данных. Если два процесса содержат в таблицах страниц указатели на общие страницы, то для второго варианта распределения памяти это легко реализуется, поскольку данные используются в режиме чтения.
Например, в UNIX-системах, когда создается дочерний процесс, то у родительского и дочернего процессов – общее пространство данных: если один из процессов попытается изменить данные, то происходит прерывание и создание копии этой страницы; если записи не происходит, то оба процесса работают с общей памятью, что приводит к ее экономии.
11.4. Очистка страниц.
Наилучший подход к распределению памяти – это иметь в запасе свободные блоки, освобождая их заранее, вместо того, чтобы искать и освобождать их при нехватке памяти; используется страничный демон – программа, которая периодически проверяет состояние памяти: если занято много блоков, то производится выборочная выгрузка страниц.
Очистка страниц в ос unix и unix-подобных системах (linux)
В OC UNIX последовательность запуска процессов, следующая:
сначала запускается процесс 0, которым является свопер (специальный планировщик, управляющий перемещением данных между памятью и диском); он каждые несколько секунд проверяет, есть ли на диске готовые процессы для загрузки в память для выполнения; при этом сам код программы в своп-файле не сохраняется, а подкачивается непосредственно из файла программы;
вторым запускается процесс 1, которым является процесс init, т. е. программа инициализации;
затем запускается процесс 2, которым является страничный демон (программа, периодически проверяющая состояние памяти); он активизируется каждые 250 мс и проверяет количество свободных страничных блоков: если их меньше, чем 1/4 памяти, то начинает выгружать страницы на диск; использует модифицированный алгоритм часов, который является глобальным, т. е. не различает, какому процессу принадлежит страница.
В ОС LINUX нет предварительной загрузки страниц и концепции рабочего набора (множество страниц, которые процесс использует до момента времени t); тексты программ и отображаемые файлы подгружаются прямо из файлов, расположенных на диске; все остальное выгружается в раздел свопинга или в файлы свопинга (их может быть от 0 до 8).
Алгоритм выгрузки страниц основан на страничном демоне (kswapd), который активизируется раз в секунду и проверяет, достаточно ли свободных страниц; при нехватке памяти демон может быть активизирован принудительно.
Страничный демон состоит из трех процедур:
в первой процедуре используется алгоритм часов; она ищет редко используемые страницы страничного кэша (копия, к которой можно обращаться быстрее, чем к оригиналу) и буферного кэша файловой системы;
вторая процедура ищет страницы, совместно редко используемые несколькими пользователями;
третья процедура ищет редко используемые страницы одиночных пользователей; сначала сканируются страницы у того процесса, у которого их больше всего.
Другой демон (bdflush) в ОС LINUX регулярно активизируется и проверяет, не превысило ли количество измененных страниц определенное значение: если превысило, то он начинает их принудительно сохранять на диск.