Логическая память.

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

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

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

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

Большинство современных ОС поддерживают сегментную организацию памяти. В некоторых архитектурах, например Intel, сегментация поддерживается оборудованием. Адреса, к которым обращается процесс отличается от адресов реально существующих в ОП. В каждом конкретном случае, использованные программой адреса могут быть представлены различными способами. Например, адреса в исходных текстах обычно символьные. Компилятор связывает эти символьные адреса с перемещаемыми адресами ( такими как n байт от начала модуля).

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

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

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