Очистка страниц в ОС UNIX и UNIX-подобных системах (LINUX)

Очистка страниц.

Совместно используемые страницы. Отдельные пространства команд и данных.

Размер страниц.

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

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

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

Например, в UNIX-системах, когда создается дочерний процесс, то у родительского и дочернего процессов – общее пространство данных: если один из процессов попытается изменить данные, то происходит прерывание и создание копии этой страницы; если записи не происходит, то оба процесса работают с общей памятью, что приводит к ее экономии.

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

В OC UNIX последовательность запуска процессов, следующая:

· сначала запускается процесс 0, которым является свопер (специальный планировщик, управляющий перемещением данных между памятью и диском); он каждые несколько секунд проверяет, есть ли на диске готовые процессы для загрузки в память для выполнения; при этом сам код программы в своп-файле не сохраняется, а подкачивается непосредственно из файла программы;

· вторым запускается процесс 1, которым является процесс init, т. е. программа инициализации;

· затем запускается процесс 2, которым является страничный демон (программа, периодически проверяющая состояние памяти); он активизируется каждые 250 мс и проверяет количество свободных страничных блоков: если их меньше, чем 1/4 памяти, то начинает выгружать страницы на диск; использует модифицированный алгоритм часов, который является глобальным, т. е. не различает, какому процессу принадлежит страница.

В ОС LINUX нетпредварительной загрузки страниц и концепции рабочего набора (множество страниц, которые процесс использует до момента времени t); тексты программ и отображаемые файлы подгружаются прямо из файлов, расположенных на диске; все остальное выгружается в раздел свопинга или в файлы свопинга (их может быть от 0 до 8).

Алгоритм выгрузки страниц основан на страничном демоне (kswapd), который активизируется раз в секунду и проверяет, достаточно ли свободных страниц; при нехватке памяти демон может быть активизирован принудительно.

Страничный демон состоит из трех процедур:

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

· вторая процедура ищет страницы, совместно редко используемые несколькими пользователями;

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

Другой демон (bdflush) в ОС LINUX регулярно активизируется и проверяет, не превысило ли количество измененных страниц определенное значение: если превысило, то он начинает их принудительно сохранять на диск.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: