Типы адресов
На разных этапах жизненного цикла программы для представления переменных и кодов требуются 3 типа адресов:
1) Символьные имена. Присваиваются пользователем при написании программ (например, имена переменных)
2) Виртуальные адреса (математические или логические). Генерируются транслятором, переводящим программу на машинный язык.
Поскольку заранее неизвестно, в какой блок оперативной памяти будет загружаться программа, то начальным адресом программы принимается нулевой адрес.
3) Физические адреса. Это номера ячеек оперативной памяти, где в действительности расположены переменные и команды.
Виртуальное адресное пространство – это совокупность виртуальных адресов процесса. Диапазон возможных адресов у всех процессов является одним и тем же и задается границами 0000000016 и FFFFFFFF16. Каждый процесс имеет свое виртуальное адресное пространство.
Существует 2 способа преобразования виртуальных адресов в физические:
1) замена виртуальных адресов на физические выполняется один раз для каждого процесса во время начальной загрузки программы в память:
Используется перемещающий загрузчик, который на основании имеющейся информации о начальном адресе свободной физической памяти (куда будет загружаться процесс), а также информации об адресно-зависимых элементах программы, выполняет загрузку программы, совмещая ее с заменой виртуальных адресов физическими.
Недостаток: при необходимости переместить процесс в другой участок оперативной памяти, необходима его выгрузка и повторная загрузка.
2) программа загружается в память в неизмененном виде:
Операционная система запоминает смещение фактического расположения программного кода относительно виртуального адресного пространства. Во время выполнения программы при каждом обращении к оперативной памяти выполняется преобразование виртуального адреса в физический. Это смещение запоминается как константа в операционной системе.
Преимущество: способ является более гибким, т.к. допускает перемещение процесса по памяти.
Недостаток: увеличиваются затраты на постоянный пересчет адресов
Необходимо различать:
1) максимально возможное виртуальное адресное пространство процесса. Определяется архитектурой компьютера и разрядностью его схем адресации (32 или 64-битная). Например, 32-разрядный процессор 232 = 4 Гбайт.
2) назначенное (выделенное) процессу виртуальное адресное пространство. Представляет собой набор виртуальных адресов, действительно нужных процессу для работы.
Виртуальное адресное пространство делится на 2 непрерывные части: системную и пользовательскую (например, Windows NT- по 2 Гбайт на обе части). Системная часть является общей для всех процессов, в ней размещаются коды и данные операционной системы.
В настоящее время часто возникает ситуация, когда объем виртуального адресного пространства превышает доступный объем оперативной памяти. В таком случае операционная система для хранения данных виртуального адресного пространства, не помещающихся в оперативную память, использует внешнюю память (жесткий диск). На этом принципе основана виртуальная память. Это наиболее эффективный способ управления памятью. В настоящее время виртуальная память в современных операционных системах вытеснила методы распределения памяти фиксированными, динамическими или перемещаемыми разделами.