Отдельные аспекты функционирования менеджера памяти

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

В ряде случаев поддержка страничной системы приводит к необходимости разрешить некоторым страницам быть локализованными в памяти.

Факт наличия виртуальной памяти не означает, что ввод-вывод отсутствует. Они взаимодействуют. Например, процесс может запросить ввод в буфер и ожидать его завершения. Управление передастся другому процессу, который может сгенерировать page fault и, с отличной от нуля вероятностью, спровоцировать выгрузку той страницы, куда должен быть осуществлен ввод первым процессом. Хаос, особенно, если ввод-вывод реализован через отдельный процессор (DMA transfer).

Одно из решений данной проблемы - вводить данные в невытесняемый буфер в пространстве ядра. А затем копировать их в пользовательское пространство. Дополнительное копирование может иметь результатом нежелательный оверхед.

Второе решение - локализовать страницы в памяти, используя специальный бит локализации. Локализованная страница не подлежит замещению. Она делокализуется после завершения операции ввода-вывода.

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

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

Другим важным применением локализации является ее использование в системах мягкого реального времени. Рассмотрим процесс или поток реального времени. Вообще говоря, виртуальная память - антитеза вычислений реального времени, так как дает непредсказуемые задержки при подкачке страниц. Поэтому системы реального времени почти не используют виртуальной памяти. ОС Solaris2 поддерживает, как реальное время, так и разделение времени. Для решения проблемы fault'ов, Solaris2 разрешает процессам сообщать системе, какие страницы важны для процесса и локализовать их в памяти. В результате возможно выполнение процесса, реализующего задачу реального времени, содержащего локализованные страницы, где временные задержки страничной системы будут минимизированы.

Помимо системы локализации страниц есть и другие интересные проблемы, возникающие в процессе управления памятью. Так, например, бывает непросто осуществить повторное выполнение инструкции, вызвавшей page fault. Представляют интерес алгоритмы отложенного выделения памяти (копирование при записи и др.). Ограниченный объем данного курса не позволяет рассмотреть их более детально.