Организация виртуальной памяти
Для реализации преобразования виртуального адреса в физический поступают следующим образом. Виртуальную память разбивают на блоки одинаковой длины, обычно равной 4 Кбайт, которые называют страницами. В этом случае файлы, в которых хранятся страницы виртуальной памяти, называются файлами страниц или файлами подкачки. При обращении процесса по адресу в виртуальной странице, если необходимо, то происходит загрузка этой страницы в реальную память компьютера и настройка адресного пространства процесса на работу с этой страницей. Такая организация виртуальной памяти называется страничной.
Учитывая страничную организацию виртуальной памяти — физический и виртуальный адреса имеют форматы, которые показаны на рис. 20.2.
Рис. 20.2. Форматы реального и виртуального адресов
Фактически в этом случае адрес делится на две части: старшую и младшую. Старшая часть адреса рассматривается как номер страницы в реальной или виртуальной памяти, а его младшая часть — как смещение внутри этой страницы. Например, если адрес имеет длину 32 бита, а длина страницы равна 4 Кбайт, то младшие 12 бит рассматриваются как смещение внутри страницы, старшие 20 бит — как номер страницы. Это разбиение обусловлено тем, что 212 = 4096 байт. Единственное различие между виртуальным и реальным адресами состоит в том, что виртуальный адрес имеет большую длину поля, отведенного на номер виртуальной страницы.
Для преобразования виртуальных адресов в реальные адреса в системной области физической памяти для каждого процесса хранится таблица страниц, строки которой имеют структуру, которая показана на рис. 20.3.
Рис. 20.3. Формат строки таблицы страниц процесса
Рис. 20.4. Схема преобразования виртуального адреса в реальный адрес
Схема преобразования виртуального адреса в физический адрес изображена на рис. 20.4, где регистр b содержит базовый адрес таблицы страниц процесса. Используя эту схему преобразования адресов, алгоритм отображения виртуальной памяти в реальную память может быть описан следующим образом.
1. Находится строка в таблице страниц, соответствующая номеру виртуальной страницы. Индекс этой строки равен b + v.
2. Если f = 1, то виртуальная страница находится в реальной памяти. Если же f = 0, то виртуальная страница находится на диске. В этом случае выполняется загрузка виртуальной страницы в реальную память. После чего значение столбца f устанавливается в 1, а столбец r указывает на адрес виртуальной страницы в реальной памяти.
3. Вычисляется реальный адрес, который формируется из адреса реальной страницы, заданного значением r, и смещения в виртуальной странице, заданного значением d.
Повторим, что все эти действия выполняются аппаратным образом, а именно, процессором.
В заключение этого раздела отметим, что возможен другой подход к организации виртуальной памяти, при котором виртуальная память разбивается на блоки неравной длины, которые называются сегментами. В этом случае в реальную память загружаются не страницы, а блоки виртуальной памяти.
Существует также комбинированный подход, который заключается в том, что виртуальная память разбивается на страницы, которые потом объединяются в сегменты. Эти подходы к организации виртуальной памяти нами рассматриваться не будут, т. к. в операционных системах Windows используется страничная организация виртуальной памяти. Сегментная организация виртуальной памяти использовалась в старой операционной системе Windows 3.1.