Связывание адресов
Логическая память
Большинство программ – это набор модулей независимых друг от друга (слабо зависимых). В общем случае модули одной программы размещаются в разных областях памяти зачастую не смежных друг с другом – лучший способ.
Область данных, в которой размещены фрагменты программы, называется сегментом. Внутри сегмента поддерживается линейная адресация. Сегмент может содержать отдельную функцию, большой объем данных. Отдельные участки памяти, хранящие совместно используемую информацию, которую ОС отображает в память нескольких процессов, и называются сегментами. При использовании сегментов есть возможность контролировать характер работ с конкретным сегментом, используя атрибуты.
Стек процесса P2 |
Библиотека |
Данные процесса P1 |
Код процесса P1 |
Данные процесса P2 |
Стек процесса P1 |
Стек процесса P2 |
ОС |
Большинство современные ОС поддерживает сегментную организацию памяти. Фирма Intel поддерживает сегментацию аппаратно (обычно более эффективна). Адреса в исходных текстах обычно символические. Компилятор связывает символические адреса с перемещаемыми адресами (n-байт от начала модуля). Такой адрес, сгенерированный программой, называют логическим адресом (в системах с виртуальной памятью этот адрес называют виртуальным). Совокупность всех логических адресов называется логическим (виртуальным) адресным пространством.
|
|
Логическое и физическое адресные пространства ни по организации, ни по размеру не соответствуют друг другу => процессор и ОС д/б способны отобразить ссылки на адреса в коде программы в реальные физические адреса, соответствующие текущему положению программы в основной памяти. Такое отображение адресов называют трансляцией (привязкой адреса или связыванием адресов).
Связывание логического адреса с физическим д/б осуществлено до начала выполнения соответствующей команды или в момент его выполнения. Таким образом, привязка инструкции и данных к памяти м/б сделана в следующий момент:
· Этап компиляции – когда знаем куда загружать
· Этап загрузки – отсутствует информация о размещении программ на стадии компиляции, окончательное связывание откладывается до момента загрузки
· Этап выполнения – если процесс м/б перемещен во время выполнения из одной области памяти в другую, связывание откладывается до стадии выполнения
При использовании памяти ОС должна выполнять следующие функции:
1. Отображать адрес пространства процесса (логический адрес) на конкретную область оперативной памяти
2. Распределение памяти между конкурирующими процессами
3. Контроль доступа к адресным пространствам процессора
4. Выгрузка процессов во внешнюю память, если оперативной памяти не достаточно
5. Учет свободной и занятой памяти