Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
(4) Маленькая шпорка2.doc
Скачиваний:
72
Добавлен:
24.12.2018
Размер:
2.87 Mб
Скачать

55. Преобразование логического адреса в линейный

Преобразование логического адреса в линейный

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

Для вычисления линейного адреса процессор:

  1. использует селектор сегмента для нахождения дескриптора сегмента;

  2. анализирует дескриптор сегмента, контролируя права доступа (сегмент доступен с текущего уровня привилегий) и предел сегмента (смещение не превышает предел)

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

Селектор - это 16-битный идентификатор сегмента.

Он содержит индекс дескриптора в дескрипторной таблице, бит определяющий, к какой дескрипторной таблице производится обращение (LDT или GDT), а также запрашиваемые права доступа к сегменту.

Индекс выбирает один из 8192 дескрипторов в таблице дескрипторов. Процессор умножает значение этого индекса на восемь (длину дескриптора) и добавляет результат к базовому адресу таблицы дескрипторов. Таким образом получается линейный адрес требуемого дескриптора.

TI - индикатор таблицы определяет таблицу дескрипторов, на которую ссылается селектор: TI=0 означает глобальную дескрипторную таблицу (GDT), а TI=1 - используемую в настоящий момент локальную дескрипторную таблицу (LDT).

RPL - запрашиваемый уровень привилегий (Requested Privilege Level). Используется механизмом защиты.

Дескрипторные таблицы - это массивы памяти переменной длины, содержащие восьмибайтные элементы - дескрипторы.

Дескрипторная таблица может иметь длину от 8 байт до 64Кбайт и в каждой таблице может быть до 8192 дескрипторов.

Старшие 13 битов селектора используются как индекс в таблице дескрипторов. Эти таблицы обслуживает ОС, поэтому команды загрузки таблицы являются привилегированными командами.

Существуют две обязательных дескрипторных таблицы - глобальная дескрипторная таблица (Global Descriptor Table - GDT) и дескрипторная таблица прерывания (Interrupt Descriptor Table - IDT),- а также до 8191 локальных дескрипторных таблиц (Local Descriptor Table - LDT), из которых в один момент времени процессору доступна только одна.

Расположение дескрипторных таблиц определяется регистрами процессора GDTR, IDTR, LDTR. Регистры GDTR и IDTR - 6-байтные, они содержат 32 бита линейного базового адреса дескрипторной таблицы и 16 бит предела таблицы.

Дескриптор - это 8-байтная единица описательной информации, распознаваемая устройством управления памятью в защищенном режиме, хранящаяся в дескрипторной таблице.

Дескриптор сегмента содержит базовый адрес описываемого сегмента, предел сегмента и права доступа к сегменту.

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

------------------------Накрайняк нижеследующее выкинуть нах---------------------

Базовый адрес сегмента (Base Address) определяет место сегмента внутри линейного 4Гбайтного адресного пространства. Процессор объединяет три фрагмента базового адреса для формирования одного 32-разрядного значения.

Предел сегмента (Segment Limit) определяет размер сегмента. Задает максимальное (для сегментов стека - минимальное) смещение в сегменте, обращение по которому не вызывает нарушения общей защиты.

G - бит гранулярности (Granularity) определяет размер единиц, в которых интерпретируется поле предела. Если G=0, то граница интерпретируется в байтах, иначе в единицах по 4Кбайт.

D - размер по умолчанию (Default size). Задает разрядность данных по умолчанию : D=0 - 16 бит, D=1 - 32 бит.

AVL (available) - может использоваться по усмотрению системного программиста.

P - бит присутствия (Present). Если P =0, то данный дескриптор не может быть использован при трансляции адресов.

DPL - уровень привилегий дескриптора (Descriptor Privilege Level) используется механизмом защиты.

S - бит системного дескриптора (System): определяет, является ли данный сегмент системным (S=0) или же сегментом кода/данных (S=1).

Тип дескриптора (Type). Интерпретация этого поля зависит от вида дескриптора.