
Краткие итоги
Виртуальная память – метод распределения памяти, при котором логическая память процесса отделена от физической, превышает физическую по объему, ее образ хранится во вторичной памяти, а конкретный фрагмент памяти подкачивается в основную память при обращении к нему. Такой метод позволяет расширить адресное пространство, обеспечить совместное использование памяти, сэкономить память при создании процессов.
Виртуальная память может быть реализована путем страничной или сегментной организации по требованию.
Страничная организация по требованию – схема страничной организации, при которой страница подкачивается в основную память только при обращении к ней. При отсутствии адресуемой страницы в основной памяти происходит прерывание – отказ страницы (page fault). Бит valid-invalid элемента таблицы страниц указывает, присутствует ли страница в основной памяти.
При обработке ситуации отказа страницы ОС находит фрейм в основной памяти и подкачивает в него страницу с диска. При отсутствии свободного фрейма выполняется алгоритм замещения страниц – выбор фрейма-жертвы (по какому-либо критерию), откачка его на диск и подкачка на освободившееся место адресуемой страницы.
Виртуальная память дает возможность оптимизировать при создании процесса (дочерний процесс может использовать пространство памяти родительского, если он его не изменяет), а также организовать совместно используемые файлов, отображаемые в память.
При замещении страниц на диск откачиваются только модифицированные страницы (для их указания используется бит модификации в элементе таблицы страниц).
Число отказов страниц обратно пропорционально зависит от числа свободных фреймов у каждого процесса: чем больше фреймов, тем меньше отказов страниц. Исключение – аномалия Belady: возрастание числа отказов при четырех фреймах, по сравнению с тремя в алгоритме FIFO.
Используются следующие алгоритмы замещения страниц: FIFO (замещается страница, загруженная в память раньше всех); оптимальный алгоритм (замещается страница, которая не использовалась в течение наибольшего периода времени); LRU (замещается страница, к которой раньше всего было обращение); LRU с использованием стека страниц с самой ранней по обращению страницей на вершине; замещение страниц с нулевым битом ссылки; алгоритм второго шанса (замещение второй по давности обращений страницы, с сохранением первой в памяти); LFU – замещение реже всего используемой страницы; MFU – замещение чаще всего используемой страницы.
Выделение процессам фреймов в основной памяти для размещения страниц выполняется равномерно (выделяется одинаковое число фреймов), пропорционально размерам процессов, по приоритетам, локально (для каждого процесса свой список свободных фреймов) или глобально (общий список свободных фреймов для всех процессов).
Thrashing – ситуация катастрофической нехватки фреймов в основной памяти, когда процессор занят в основном откачкой и подкачкой. Для борьбы с thrashing реализуется стратегия управления рабочими множествами. Рабочее множество – набор фреймов и страниц, используемых процессом.
В Windows NT каждый процесс имеет минимум и максимум элементов рабочего множества. Если объем свободной памяти меньше некоторого критического порога, рабочие множества всех процессов сокращаются.
В системе Solaris имеется пороговое значение для подкачки страниц; управление страницами выполняется на основе модифицированных показаний часов.