Защищенный режим процессоров Intel


Детальное описание схемы преобразования адресов - часть 4


Поле W называется битом разрешения записи в сегмент. Если этот бит установлен в 1, наряду с чтением возможна и запись в данный сегмент. В противном случае при попытке чтения выполнение программы будет прервано.

Поле D задаёт направление расширения сегмента. Обычный сегмент данных расширяется в область старших адресов (расширение вверх). Если же в сегменте расположен стек, расширение происходит в обратном направлении - в область младших адресов (расширение вниз). Для сегментов, в которых организуются стеки, необходимо устанавливать поле D равным 1.

Дескрипторы системных сегментов содержат поле TYPE, определяющее тип системного сегмента. В таблице 1 приведены возможные для этого поля значения.

Таблица 1. Типы системных сегментов.

Поле TYPE Тип сегмента
0 Запрещённое значение
1 Доступный TSS для процессора i80286
2 Сегмент LDT
3 Занятый TSS для процессора i80286
4 Вентиль вызова для процессора i80286
5 Вентиль задачи для процессоров i80286 и i80386
6 Вентиль прерывания для процессора i80286
7 Вентиль исключения для процессора i80286
8 Запрещённое значение
9 Доступный TSS для процессора i80386
A Зарезервировано
B Занятый TSS для процессора i80386
C Вентиль вызова для процессора i80386
D Зарезервировано
E Вентиль прерывания для процессора i80386
F Вентиль ловушки для процессора i80386

Мы на время отложим детальное описание всех типов системных дескрипторов, так же как и поля DPL, использующееся для организации защиты сегментов, для того чтобы сконцентрировать своё внимание на схеме преобразования адресов в процессоре i80286.

Итак, перед переводом процессора в защищённый режим нам необходимо сформировать в памяти таблицу GDT и загрузить в регистр GTDR её адрес и предел при помощи команды LGDT.

В терминах языка ассемблера структура дескриптора может быть описана следующим образом:

STRUC desc_struc limit dw 0 ; предел сегмента base_lo dw 0 ; младшее слово 24-битового ; физического адреса сегмента base_hi db 0 ; старший байт 24-битового ; физического адреса сегмента access db 0 ; поле доступа reserved dw 0 ; зарезервировано, для сегментов ; процессора i80286 должно быть ; равно нулю ENDS desc_struc

Тогда мы можем определить таблицу GDT как набор дескрипторов со структурой desc_struc:




- Начало -  - Назад -  - Вперед -