Организация виртуальной памяти

Как уже упоминалось, объем виртуальной оперативной памяти гораздо превышает объем физической (реальной) оперативной памяти. Но как это происходит?

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

содержимое физической оперативной памяти является подмножеством памяти на диске;

перемещение информации между физической оперативной памятью и дисковой памятью прозрачно для программиста и выполняется по необходимости (по требованию реальной текущей ситуации);

частота обращений в быструю физическую оперативную память значительно больше частоты обращений в медленную дисковую память.

Таким образом, возможно создание иллюзии очень большой физической оперативной памяти.

Пространство адресов

Для идентификации переменных и команд на разных этапах жизненного цикла программы используются символьные имена (метки), виртуальные адреса и физические адреса (рис. 7.1).

Рис. 7.1. Типы адресов

Символьные имена присваивает пользователь при написании программы на алгоритмическом языке или ассемблере.

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

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

Адресное пространство – это упорядоченное множество неотрицательных целочисленных адресов {0, 1, 2,...}. Если целочисленные значения адресного пространства линейно упорядочены, то говорят, что это линейное адресное пространство.

Чтобы упростить рассуждения, будем всегда полагать, что используются линейные адресные пространства. В компьютере с виртуальной памятью ядро процессора генерирует виртуальные адреса из адресного про­странства N =2n адресов, называемого виртуальным адресным пространством (0,1,2,... N-1).Размер адресного пространства определяется количеством двоичных разрядов (битов), необходимых для представления наиболь­шего адреса. Например, виртуальное адресное пространство с N = 2n адресами назы­вают n -разрядным адресным пространством.

В общем случае емкость виртуальной памяти (размер виртуального адресного пространства) для программиста ограничивается:

с одной стороны – разрядностью целочисленных регистров общего назначения, которые программист использует для работы с адресами;

с другой стороны – емкостью дисковой памяти в компьютере и особенностями операционной системы.

Для компьютеров с разрядностью целочисленных регистров общего назначения 32 размер виртуальной памяти не может быть больше 232, т.е. 4Г байт, хотя емкость дисковой памяти может значительно превосходить величину 4Г байта и составлять сотни и тысячи Г байт. В таких компьютерах размер виртуальной памяти ограничен 4Г байтами.

В компьютерах с 64-разрядной архитектурой целочисленные регистры общего назначения 64-х разрядные. Теоретически предельный размер виртуальной памяти равен 264 байт. Это значение превосходит, и очень значительно, все возможные значения дисковой памяти - как в настоящее время, так и обозримом будущем. В этих компьютерах размер виртуальной памяти ограничивается возможностями операционной системы и объемом реальной дисковой памяти.

В компьютере также имеется физическое адресное пространство, которое соответствует М байтам физической оперативной памяти в компьютере {0, 1,2,..., М-1}. Мне обязательно должно быть степенью двойки, но для простоты рассуждений примем, что М=2m.

Важность понятия адресного пространства объясняется тем, что оно проводит четкое различие между объектами данных (байтами) и их атрибутами (адресами). Как только осознается это различие, можно сделать обобщение и позволить каждому объекту данных иметь несколько независимых адресов, каждый из которых выбирается из своего адресного пространства. Такова основная идея вир­туальной памяти. Каждому байту оперативной памяти ставится в соответствие вир­туальный адрес из виртуального адресного пространства и физический адрес, вы­бранный из физического адресного пространства.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: