Типы адресов и адресных пространств.

Для идентификации переменных и команд на разных этапах жизненного цикла программы используются разные имена:

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

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

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

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

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

 


Классификация ОС по распределению памяти. Сегментно-страничное распределение памяти(примеры ОС)

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


Классификация ОС по распределению памяти. Сегментация (примеры ОС)

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

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