Детальное описание элементов преобразования адресов

11/07/94 03:24pm zr_pradr.lek
А.В.Фролов, Г.В.Фролов "Защищенный режим процессоров Intel 80286/80386/80486. Практическое руководство по использованию защищенного режима" БСП том 6 М "Диалог-МИФИ" 1993
В.Б.Бродин, И.И.Шагурин "Микропоцессор i486. Архитектура, программирование, интерфейс" М "Диалог-МИФИ" 1993

Детальное описание элементов преобразования адресов.

Длина таблицы, уменьшенная на единицу называется ПРЕДЕЛОМ ТАБЛИЦЫ (GDT limit) и служит для проверки правильности задаваемых программой селекторов. Перед переходом в защищенный режим должна быть сформирована соответствующая таблица дескрипторов и ее пареметры загружены в регистр. Дескрипторы (описатели сегментов) таблицы базовых адресов содержит следующие поля (от младших байт к старшим):

  1. ПРЕДЕЛ (16 бит) - размер сегмента, уменьшенный на единицу;

  2. БАЗОВЫЙ АДРЕС (24 бита) - содержит физический адрес сегмента, описываемого данным дескриптором;

  3. ДОСТУП (8 бит) - описывает тип сегмента (что содержится);

  4. РЕЗЕРВ (16 бит) - в i286 нули, в i386 + старшая часть физического адреса и дополнительная информация.

ПРИМЕЧАНИЕ: Назначение полей может меняться в зависимости от значения поля "доступ".

При работе процессор отслеживает попытки обращения за пределы описанного сегмента. Поле доступа, расположенное в 5-ом байте дескриптора, служит для классификации дескрипторов и существует в трех форматах. Конкретный формат определяется его битом 4 (бит S) и если S=1, то битом 3 (бит E).

СИСТЕМНЫЙ СЕГМЕНТ описывает дескрипторы таблиц LDT, дескрипторы сегментов состояния задачи TSS, дескрипторы шлюзов.

СЕГМЕНТ КОДА (ПРОГРАММ) описывает области памяти, хранящие исполняемый код.

СЕГМЕНТ ДАННЫХ -описывает области, отведенные для хранения данных программы и областей стека.

Назначение битов:

Типы системных сегментов:

0h Запрещенное значение;

ПРИМЕЧАНИЕ: Шлюзы еще называвают ВЕНТИЛЯМИ обращений.

Пример создания таблицы GDT (для i286):

; Определения структур данных и констант

STRUC desc_struc ; структура дескриптора

limit dw 0 ; предел

base_l dw 0 ; мл. слово физического адреса

base_h db 0 ; ст. байт физического адреса

access db 0 ; байт доступа

rsrv dw 0 ; зарезервировано

ENDS desc_struc

; Биты байта доступа

ACC_PRESENT EQU 10000000b ; сегмент есть в памяти

ACC_CSEG EQU 00011000b ; сегмент кода

ACC_DSEG EQU 00010000b ; сегмент данных

ACC_EXPDOWN EQU 00000100b ; сегмент расширяется вниз

ACC_CONFORM EQU 00000100b ; согласованный сегмент

ACC_DATAWR EQU 00000010b ; разрешена запись

; Типы сегментов

; сегмент данных

DATA_ACC = ACC_PRESENT OR ACC_DSEG OR ACC_DATAWR

; сегмент кода

CODE_ACC = ACC_PRESENT OR ACC_CSEG OR ACC_CONFORM

; сегмент стека

STACK_ACC = ACC_PRESENT OR ACC_DSEG OR ACC_DATAWR OR ACC_EXPDOWN

; Глобальная таблица дескрипторов GDT,

; содержит следующие дескрипторы:

; gdt_0 - дескриптор для пустого селектора (при работе не

; используется)

; gdt_gdt - дескриптор для GDT (для возможности модификации при работе)

; gdt_ds - дескриптор для сегмента, адресуемого DS

; gdt_cs - дескриптор для сегмента кода

; gdt_ss - дескриптор для сегмента стека

GDT_BEG = $

LABEL gdtr WORD

gdt_0 desc_struc <0,0,0,0,0>

gdt_gdt desc_struc <GDT_SIZE-1,,,DATA_ACC,0>

gdt_ds desc_struc <DSEG_SIZE-1,,,DATA_ACC,0>

gdt_cs desc_struc <CSEG_SIZE-1,,,CODE_ACC,0>

gdt_ss desc_struc <STACK_SIZE-1,,,STACK_ACC,0>

GDT_SIZE = ($ - GDT_BEG) ; размер таблицы дескрипторов

ПРИМЕЧАНИЕ: В таблице не определены размеры областей и их адреса; эти значения определяются исходя из потребностей загружаемой программы и ее фактического положения в памяти.
Загрузить в соответствующий регистр данные о таблице можно после доопределения ее компанент командой: lgdt [QWORD gdt_gdt]

Уточненный алгоритм формирования физического адреса процессором i80286 в защищенном режиме:

  1. В соответствии с битом TI CЕЛЕКТОРА выбирается регистр GDTR или LDTR;

  2. По значению поля INDEX селектора и поля LIMIT регистра определяется наличие соответствующего дескриптора в таблице;

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

  4. По значению СМЕЩЕНИЯ и полей ПРЕДЕЛ и ДОСТУП (бит ED) проверяется отсутствие выхода за границу требуемого сегмента;

  5. Вычисляется физический адрес и осушествляется обращение к ячейке, если она присутствует в памяти.


Stay-at-home