Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VSOS_2014.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.9 Mб
Скачать
    1. Типы адресов

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

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

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

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

    1. Физическое и логическое адресное пространство

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

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

Преобразование виртуальных адресов в физические выполняется специальным блоком управления памятью MMU (memory management unit). Существуют различные схемы такого преобразования. В простейшей схеме используется регистр базы (base relocation register). Значение этого регистра просто прибавляется к каждому адресу программы (см. рис. 11.1)

Заметим, что пользовательская программа никогда не использует физические адреса. Каждый адрес программы – это смещение относительно регистра базы.

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

Концепция отделения логического адресного пространства от физического является центральной в управлении памятью.

Рисунок 11.25 – Простейшая схема преобразования логического адреса в физический

    1. Связывание адресов

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

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

Рисунок 11.26 – Этапы жизненного цикла программы

  • Этап компиляции (Compile time). Когда на стадии компиляции известно точное место размещения процесса в памяти, тогда непосредственно генерируются физические адреса. При изменении стартового адреса программы необходимо перекомпилировать ее код. В качестве примера можно привести COM-программы MS-DOS, которые связывают ее с физическими адресами на стадии компиляции.

  • Этап загрузки (Load time). Если информация о размещении программы на стадии компиляции отсутствует, компилятор генерирует перемещаемый код. В этом случае окончательное связывание откладывается до момента загрузки. Если стартовый адрес меняется, нужно всего лишь перезагрузить код с учетом измененной величины.

  • Этап выполнения (Execution time). Если процесс может быть перемещен во время выполнения из одной области памяти в другую, связывание откладывается до стадии выполнения. Здесь желательно наличие специализированного оборудования, например регистров перемещения. Их значение прибавляется к каждому адресу, сгенерированному процессом. Большинство современных ОС осуществляет трансляцию адресов на этапе выполнения, используя для этого специальный аппаратный механизм.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]