Типы адресов

На разных этапах жизненного цикла программы для представления переменных и кодов требуются 3 типа адресов:

1) Символьные имена. Присваиваются пользователем при написании программ (например, имена переменных)

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

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

3) Физические адреса. Это номера ячеек оперативной памяти, где в действительности расположены переменные и команды.

Виртуальное адресное пространство – это совокупность виртуальных адресов процесса. Диапазон возможных адресов у всех процессов является одним и тем же и задается границами 0000000016 и FFFFFFFF16. Каждый процесс имеет свое виртуальное адресное пространство.

Существует 2 способа преобразования виртуальных адресов в физические:

1) замена виртуальных адресов на физические выполняется один раз для каждого процесса во время начальной загрузки программы в память:

 

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

Недостаток: при необходимости переместить процесс в другой участок оперативной памяти, необходима его выгрузка и повторная загрузка.

 

2) программа загружается в память в неизмененном виде:

 

 

Операционная система запоминает смещение фактического расположения программного кода относительно виртуального адресного пространства. Во время выполнения программы при каждом обращении к оперативной памяти выполняется преобразование виртуального адреса в физический. Это смещение запоминается как константа в операционной системе.

Преимущество: способ является более гибким, т.к. допускает перемещение процесса по памяти.

Недостаток: увеличиваются затраты на постоянный пересчет адресов

 

Необходимо различать:

1) максимально возможное виртуальное адресное пространство процесса. Определяется архитектурой компьютера и разрядностью его схем адресации (32 или 64-битная). Например, 32-разрядный процессор 232 = 4 Гбайт.

2) назначенное (выделенное) процессу виртуальное адресное пространство. Представляет собой набор виртуальных адресов, действительно нужных процессу для работы.

Виртуальное адресное пространство делится на 2 непрерывные части: системную и пользовательскую (например, Windows NT- по 2 Гбайт на обе части). Системная часть является общей для всех процессов, в ней размещаются коды и данные операционной системы.

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