Динамическое преобразование адресов
Механизм динамического преобразования адресов должен вести таблицы, показывающие, какие виртуальные адреса в текущий момент находятся в физической памяти, и где именно они размещаются. Если бы такое отображение осуществлялось побайтно, то информация об отображении была бы столь велика, что для ее хранения потребовалось бы столько же или даже больше физической памяти, чем для самих процессов. Поэтому, виртуальная память имеет, как правило, блочную организацию. Такая организация предполагает хранение виртуальных блоков во внешней памяти и их загрузку (подкачку) в оперативную память по мере необходимости. При этом происходит отображение виртуального адресного пространства на физическое адресное пространство ЭВМ. Это отображение выполняется средствами ОС.
Адреса в системе поблочного отображения являются двухкомпонентными ("двумерными"). Чтобы обратиться к конкретному элементу данных, программа указывает блок, в котором этот элемент располагается, и смещение этого элемента относительно начала блока. Виртуальный адрес v указывается при помощи упорядоченной пары (b, d), где b - номер блока, а d - смещение относительно начального адреса этого блока. Схема двумерной адресации показана на рис. 2.
Рис 2. Формат виртуального адреса в системе поблочного отображения.
Преобразование адреса виртуальной памяти V = (b,d) в адрес реальной памяти r осуществятся так, как это показано на рис. 3. Каждый процесс имеет собственную таблицу отображения блоков, которую операционная система ведет в реальной памяти.
Рис 3. Преобразование виртуального адреса при поблочном отображении.
Реальный адрес a этой таблицы загружается в специальный регистр центрального процессора, называемый регистром начального адреса таблицы блоков. Таблица отображения блоков содержит по одной строке для каждого блока процесса. Эти строки находятся в таблице в последовательном порядке. Номер блока b суммируется с базовым адресом a таблицы, образуя реальный адрес строки таблицы для блока b. Эта строка содержит реальный адрес b' блока b в реальной памяти. К этому начальному адресу прибавляется смещение d, и в результате образуется нужный реальный адрес r.
В случае, если блоки имеют фиксированный размер, говорят о страничной организации виртуальной памяти. В случае блоков переменной длины имеет место сегментная организация виртуальной памяти.
Описание лабораторной работы
В данной лабораторной работе изучаются методы управления виртуальной памятью в рамках операционной системы Windows.
Виртуальная память в ос Windows.
В основе всей системы управления памятью Windows лежит страничная система виртуальной памяти, встроенная в ядро ОС. Эта система позволяет приложениям использовать области памяти, размер которых значительно превышает объем физической памяти компьютера.
Операционная система Windows поддерживает сплошную (несегментированную) модель памяти. Каждому процессу предоставляется линейное адресное пространство размером до 4-х Гбайт. При этом область памяти размером 2 Гбайт с адресами 00000000H - 7FFFFFFFH предоставлена приложению, а оставшиеся 2 Гбайт зарезервированы для использования ОС. Адресные пространства всех запущенных приложений разделены. Такое разделение выполняется с помощью назначения приложениям индивидуальных наборов страниц виртуальной памяти. В результате для каждого приложения выполняется отображение линейных адресов в собственный набор страниц виртуальной памяти, не пересекающийся с набором страниц других приложений. Этим достигается выполнение функции защиты памяти, необходимой для обеспечения надежной многозадачной работы.
Каждая страница имеет свой дескриптор, который содержит всю необходимую информацию о странице. Дескриптор страницы имеет следующий формат, показанный на рис. 4:
Рис 4. Формат дескриптора страницы.
Устанавливая соответствующим образом биты защиты, операционная система может отметить страницу как доступную для чтения, чтения - записи, или как недоступную. При попытке выполнить обращение для выполнения операции с неразрешенным доступом возникает прерывание.
Операционная система Windows позволяет создать до 16 -ти отдельных файлов виртуальных страниц, расположенных на различных дисковых устройствах. Разряды 6 - 3 хранят номер файла страницы, в котором находится данная страница.
Состояние страницы идентифицируются разрядами 2 - 0. Страница может находиться в переходном состоянии, быть обновленной, но не сохраненной в памяти и быть загруженной в память. Если приложение пытается обратиться к виртуальной странице, которая не загружена в оперативную память, возникает аппаратное прерывание, и нужная страница автоматически загружается из соответствующего файла страниц (подкачивается в память).
В дополнение к информации о состоянии страницы, находящейся в дескрипторе, система управления виртуальной памятью хранит состояние страниц в базе данных страниц. В этой базе страница может быть отмечена как имеющая одно из следующих состояний:
Свободная. Страница доступна для использования после заполнения ее нулями.
Заполненная нулями. Страница свободна, заполнена нулями и доступна для использования приложениями.
Правильная. Страница используется активным процессом.
Измененная. Содержимое страницы было изменено, но страница еще не сохранена на диске в файле страниц (не откачена).
Запасная. Страница удалена из текущего набора виртуальных страниц процесса.
Плохая. Обращение к данной странице ведет к аппаратной ошибке.
Для работы с виртуальной памятью в программном интерфейсе Windows имеется набор соответствующих функций. Для резервирования и получения в свое распоряжение (назначения) виртуальной памяти служит функция VirtualAlloc, которая осуществляет выделение и назначение (при повторном обращении) желаемого объема виртуальной памяти с указанным типом доступа. Результатом работы этой функции является указатель на начало области виртуальной памяти (в случае успешного завершения). Виртуальная память освобождается после использования с помощью функции VirtualFree. Изменение типа доступа в процессе работы программы осуществляется с помощью функции VirtualProtect.
