Виртуальная память в ОС Windows.

В основе всей системы управления памятью Windows лежит страничная система виртуальной памяти, встроенная в ядро ОС. Эта система позволяет приложениям использовать области памяти, размер которых значительно превышает объем физической памяти компьютера.

Операционная система Windows поддерживает сплошную (несегментированную) модель памяти. Каждому процессу предоставляется линейное адресное пространство размером до 4-х Гбайт. При этом область памяти размером 2 Гбайт с адресами 00000000H - 7FFFFFFFH предоставлена приложению, а оставшиеся 2 Гбайт зарезервированы для использования ОС. Адресные пространства всех запущенных приложений разделены. Такое разделение выполняется с помощью назначения приложениям индивидуальных наборов страниц виртуальной памяти. В результате для каждого приложения выполняется отображение линейных адресов в собственный набор страниц виртуальной памяти, не пересекающийся с набором страниц других приложений. Этим достигается выполнение функции защиты памяти, необходимой для обеспечения надежной многозадачной работы.

Каждая страница имеет свой дескриптор, который содержит всю необходимую информацию о странице. Дескриптор страницы имеет следующий формат, показанный на рис. 4:

Рис 4. Формат дескриптора страницы.

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

Операционная система Windows позволяет создать до 16 -ти отдельных файлов виртуальных страниц, расположенных на различных дисковых устройствах. Разряды 6 - 3 хранят номер файла страницы, в котором находится данная страница.

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

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

    • Свободная. Страница доступна для использования после заполнения ее нулями.
    • Заполненная нулями. Страница свободна, заполнена нулями и доступна для использования приложениями.
    • Правильная. Страница используется активным процессом.
    • Измененная. Содержимое страницы было изменено, но страница еще не сохранена на диске в файле страниц (не откачена).
    • Запасная. Страница удалена из текущего набора виртуальных страниц процесса.
    • Плохая. Обращение к данной странице ведет к аппаратной ошибке.

Для работы с виртуальной памятью в программном интерфейсе Windows имеется набор соответствующих функций. Для резервирования и получения в свое распоряжение (назначения) виртуальной памяти служит функция VirtualAlloc, которая осуществляет выделение и назначение (при повторном обращении) желаемого объема виртуальной памяти с указанным типом доступа. Результатом работы этой функции является указатель на начало области виртуальной памяти (в случае успешного завершения). Виртуальная память освобождается после использования с помощью функции VirtualFree. Изменение типа доступа в процессе работы программы осуществляется с помощью функции VirtualProtect.