Очистка страниц.
Совместно используемые страницы. Отдельные пространства команд и данных.
Размер страниц.
Маленькие страницы улучшают распределение памяти, но увеличивают таблицу страниц, а частые переключения уменьшают производительность.
Большие страницы ухудшают распределение памяти, хотя уменьшают таблицу страниц, и исключают частые переключения, поэтому производительность увеличивается.
Один из вариантов распределения памяти – это единое пространство команд и данных, а другой – разделение пространств команд и данных. Если два процесса содержат в таблицах страниц указатели на общие страницы, то для второго варианта распределения памяти это легко реализуется, поскольку данные используются в режиме чтения.
Например, в UNIX-системах, когда создается дочерний процесс, то у родительского и дочернего процессов – общее пространство данных: если один из процессов попытается изменить данные, то происходит прерывание и создание копии этой страницы; если записи не происходит, то оба процесса работают с общей памятью, что приводит к ее экономии.
|
|
Наилучший подход к распределению памяти – это иметь в запасе свободные блоки, освобождая их заранее, вместо того, чтобы искать и освобождать их при нехватке памяти; используется страничный демон – программа, которая периодически проверяет состояние памяти: если занято много блоков, то производится выборочная выгрузка страниц.
В OC UNIX последовательность запуска процессов, следующая:
· сначала запускается процесс 0, которым является свопер (специальный планировщик, управляющий перемещением данных между памятью и диском); он каждые несколько секунд проверяет, есть ли на диске готовые процессы для загрузки в память для выполнения; при этом сам код программы в своп-файле не сохраняется, а подкачивается непосредственно из файла программы;
· вторым запускается процесс 1, которым является процесс init, т. е. программа инициализации;
· затем запускается процесс 2, которым является страничный демон (программа, периодически проверяющая состояние памяти); он активизируется каждые 250 мс и проверяет количество свободных страничных блоков: если их меньше, чем 1/4 памяти, то начинает выгружать страницы на диск; использует модифицированный алгоритм часов, который является глобальным, т. е. не различает, какому процессу принадлежит страница.
В ОС LINUX нетпредварительной загрузки страниц и концепции рабочего набора (множество страниц, которые процесс использует до момента времени t); тексты программ и отображаемые файлы подгружаются прямо из файлов, расположенных на диске; все остальное выгружается в раздел свопинга или в файлы свопинга (их может быть от 0 до 8).
|
|
Алгоритм выгрузки страниц основан на страничном демоне (kswapd), который активизируется раз в секунду и проверяет, достаточно ли свободных страниц; при нехватке памяти демон может быть активизирован принудительно.
Страничный демон состоит из трех процедур:
· в первой процедуре используется алгоритм часов; она ищет редко используемые страницы страничного кэша (копия, к которой можно обращаться быстрее, чем к оригиналу) и буферного кэша файловой системы;
· вторая процедура ищет страницы, совместно редко используемые несколькими пользователями;
· третья процедура ищет редко используемые страницы одиночных пользователей; сначала сканируются страницы у того процесса, у которого их больше всего.
Другой демон (bdflush) в ОС LINUX регулярно активизируется и проверяет, не превысило ли количество измененных страниц определенное значение: если превысило, то он начинает их принудительно сохранять на диск.