Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы ОС.docx
Скачиваний:
44
Добавлен:
22.09.2019
Размер:
3.18 Mб
Скачать

27. Сегментная логическая адресация. (Лекция 7)

Сегмент (segment) – область памяти, выделенная для однотипных данных с линейной адресацией внутри области.

Пространство логических адресов (набор всех адресов) – двумерное, требуется указать адрес (номер) сегмента и смещение внутри него.

Размер сегмента произволен, положение его начала в физической памяти – тоже.

Сегментная адресация в процессоре Intel 8086: Разрядность ЦПУ – 16 бит (машинное слово – 2 байта)

Адресация с помощью слова – 64 КБайта (216)

Адресная шина – 20 линий, емкость памяти = 1 Мбайт (220), для доступа к памяти необходимо больше 2 байт, поэтому адресное пространство делится на сегменты до 64 КБ.

Регистры ЦПУ для сегментной адресации (по 16 бит):

CS – сегмент кода, DS – сегмент данных, SS – сегмент стека, ES – сегмент для произвольных нужд.

При сегментной организации виртуальный адрес является двумерным для программиста и для ОС, и состоит из двух полей – номера сегмента и смещения внутри сегмента. Двумерность адреса является следствием представления пользователя о процессе не в виде линейного массива байтов, а как набор сегментов переменного размера (данные, код, стек...). Логическое адресное пространство – набор сегментов. Каждый сегмент имеет имя, размер и другие параметры (уровень привилегий, разрешенные виды обращений, флаги присутствия). В отличие от страничной схемы, где пользователь задает только один адрес, который разбивается на номер страницы и смещение прозрачным для программиста образом, в сегментной схеме пользователь специфицирует каждый адрес двумя величинами: именем сегмента и смещением.

Каждый сегмент – линейная последовательность адресов, начинающаяся с 0. Максимальный размер сегмента определяется разрядностью процессора (при 32-разрядной адресации это 232 байт или 4 Гбайт). Размер сегмента может меняться динамически (например, сегмент стека). В эл-те таблицы сегментов помимо физич. адреса начала сегмента обычно содержится и длина сегмента.

Л огический адрес – упорядоченная пара v=(s,d), номер сегмента и смещение внутри сегмента.

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

Рисунок-Преобразование логического адреса при сегментной организации памяти.

Аппаратная поддержка сегментов распространена мало (главным образом на процессорах Intel). В большинстве ОС сегментация реализуется на уровне, не зависящем от аппаратуры. Хранить в памяти сегменты большого размера целиком так же неудобно, как и хранить процесс непрерывным блоком. Лучше идея разбиения сегментов на страницы.