10.4.3. Дескрипторы

Дескриптор - это 64-битная (восьмибайтная) структура данных, которая мо­жет встречаться в таблицах GDT и LDT. Он способен описывать сегмент кода, сег­мент данных, сегмент состояния задачи, быть шлюзом вызова, ловушки, прерыва­ния или задачи. В GDT также может находиться дескриптор LDT,

Дескриптор сегмента данных или кода (подробно рассмотрен в разделе 6.1) байт 7: биты 31-24 базы сегмента

байт 6: бит 7: бит гранулярности (0 - лимит в байтах, 1 - лимит в 4-килобайт-ных единицах)

бит 6: бит разрядности (0 - 16-битный, 1 - 32-битный сегмент)

бит 5: О

бит 4: зарезервировано для операционной системы

биты 3-0: биты 19 - 16 лимита байт 5: (байт доступа)

бит 7: бит присутствия сегмента

биты 6-5: уровень привилегий дескриптора (DPL) бит 4: 1 (тип дескриптора - не системный)

бит 3: тип сегмента (0 - данных, 1 - кода)

бит 2: бит подчиненности для кода, бит расширения вниз для данных бит 1;битразрешениячтениядлякода, бит разрешения записи для данных

бит 0: бит доступа (1 - к сегменту было обращение) байт 4: биты 23-16 базы сегмента байты 3-2: биты 15-0 базы

байты 1-0: биты 15-0 лимита

Таблица 22. Типы системных дескрипторов

0

Зарезервированный тип

8

Зарезервированный тип

1

Свободный 16-битный TSS

9

Свободный 32-битный TSS

2

Дескриптор таблицы ЦЭТ

А

Зарезервированный тип

3

Занятый 16-битный TSS

В

Занятый 32-битный TSS

4

16-битный шлюз вызова

С

32-битный шлюз вызова

Б

Шлюз задачи

D

Зарезервированный тип

б

16-битный шлюз прерывания

Е

32-битный шлюз прерывания

7

16-битный шлюз ловушки

F

32-битный шлюз ловушки

Если в дескрипторе бит 4 байта доступа равен 0, дескриптор называется сис­темным. В этом случае биты 0-3 байта доступа определяют один из 16 ных типов дескриптора (см. табл. 22).

Дескрипторы шлюзов

Дальние CALL JMP на адрес с любым смещением и с селектором, указываю-щимнадескрипторшлюзавызова,приводяткпередачеуправленияпоадресу,кото-рый есть в дескрипторе. Обычно такие дескрипторы используются для уп­равления между сегментами с различными уровнями привилегий (см. раздел 10.7).

или       на адрес с селектором, указывающим на шлюз задачи, приво­дят к переключению задач (см. раздел 10.8).

Шлюзы прерываний и ловушек используются для вызова обработчиков пре­рываний и исключений типа ловушки (см. раздел 10.5).

байты 7-6: биты 31 - 16 смещения (0 для 16-битных шлюзов и шлюза задачи)

байт 5: (байт доступа)

бит 7 - бит присутствия сегмента

биты 6-5: DPL - уровень привилегий дескриптора

бит 4: О

биты 3-0:'тип шлюза (4, 5, 6, 7, С, Е, F)

байт 4: биты 7-5: 000

биты 4-0: 00000 или (для шлюза вызова) число двойных слов, которые

будут скопированы из стека вызывающей задачи в стек вы­зываемой

байты 3-2: селектор сегмента

байты 1-0: биты 15-0 смещения (0 для шлюза задачи)

Дескрипторы TSS и LDT

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

Форматы дескрипторов совпадают с форматом дескриптора для сегмента кода или данных, но при этом бит разрядности всегда равен нулю и, естественно,системный бит равен нулю, а биты 3-0 байта доступа содержат номер типа сег­мента (1, 2, 3, 9, В). Команды JMP и CALL на адрес с селектором, соответствую­щим TSS незанятой задачи, приводят к переключению задач.