Лучше всегда держать в запасе свободные блоки, освобождая их заранее, чем при нехватке памяти, искать и освобождать их.
Страничный демон - программа, периодически проверяющая состояние памяти, если занято много блоков, то производит выборочную выгрузку страниц.
В UNIX системах последовательность запуска процессов, следующая:
процесс 0 - это свопер
процесс 1 - это init
процесс 2 - это страничный демон
Страничный демон просыпается каждые 250мс, и проверяет количество свободных страничных блоков, если их меньше 1/4 памяти, то он начинает выгружать страницы на диск. Он использует модифицированный алгоритм часов, и он является глобальным (т.е. он не различает, какому процессу принадлежит страница).
Каждые несколько секунд свопер проверяет, есть ли на диске готовые процессы для загрузки в память для выполнения. При этом сам код программы в своп-файле не сохраняется, а подкачивается непосредственно из файла программы.
В LUNIX системенетпредварительной загрузки страниц и концепции рабочего набора.
Тексты программ и отображаемые файлы подгружаются прямо из файлов расположенных на диске.
Все остальное выгружается в раздел свопинга или файлы свопинга (их может быть от 0 до 8).
Алгоритм выгрузки страниц основан на страничном демоне (kswapd), он активизируется раз в секунда и проверяет достаточно ли свободных страниц. Демон может быть активизирован и принудительно, при не хватке памяти.
Демон состоит из трех процедур:
· В первой используется алгоритм часов, она ищет редко используемые страницы страничного кэша и буферного кэша файловой системы.
· Вторая процедура ищет совместно редко используемые страницы.
· Третья ищет редко используемые страницы одиночных пользователей. Сначала сканируются страницы у того процесса, у которого их больше всего.
В LINUX есть еще один демон - bdflush. Он регулярно просыпается и проверяет, не превысило ли определенное значение количество измененных страниц, если да то он начинает их принудительно сохранять на диск.
7.4 Особенности реализации в Windows
В Windows системахсегментация (следующая лекция) не поддерживается. Поэтому каждому процессу выделяется виртуальное адресное пространство в 4 Гбайт (ограничение 32 разрядов). Нижние 2 Гбайт доступны для процесса, а верхние 2 Гбайт отображаются на память ядра. В Advanced server и Datacenter server процесс может использовать до 3 Гбайт.
Страницы имеют фиксированный размер (на процессорах Pentium 4 Кбайт, на Itanium 8 или 16 Кбайт) и подгружаются по требованию.
Конфигурация виртуального адресного пространства Windows
Белым цветом выделены области приватных данных процесса.
Затемнены области, совместно используемые всеми процессами.
Области в 64 Кбайт в начале и в конце, используются для защиты виртуального адресного пространства процесса, при попытке чтения или записи в эти области будет вызвано прерывание.
Системные данные содержат указатели и таймеры, доступные на чтение другим процессам.
Отображение верхней части на память ядра, позволяет при переключении потока в режим ядра не менять карту памяти.
У страниц есть три состояния:
· свободное - не используется
· фиксированное - данные отображены в странице
· зарезервированное - зарезервировано, но не занято данными (при создании потока)
Файлы свопинга может быть до 16, разделов свопинга нет. В файлах свопинга хранятся только изменяемые страницы.
Опережающая подкачка в Windows не используется.
В Windows используется понятие рабочий набор.
Страничный демон в Windows состоит из :
· менеджера балансового множества - проверяет, достаточно ли свободных страниц.
· менеджера рабочих наборов - который исследует рабочие наборы и освобождает страницы.
Также в Windows есть следующие демоны:
· свопер-демон
· демон записи отображенных страниц - запись в отображенные файлы