Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Сборка Часть2 / АВМиС / Лекции / Дескрипторные таблицы

.doc
Скачиваний:
41
Добавлен:
15.09.2014
Размер:
39.94 Кб
Скачать

Дескрипторные таблицы

Дескрипторные таблицы - это массивы памяти переменной длины, содержащие восьмибайтные элементы - дескрипторы. Дескрипторная таблица может иметь длину от 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 бит предела таблицы. Программно доступная часть регистра LDTR (16 бит) содержит селектор LDT. Дескрипторы LDT находятся в GDT.

GDT содержит дескрипторы, доступные всем задачам в системе. GDT может содержать дескрипторы любых типов: и дескрипторы сегментов, и системные дескрипторы (кроме шлюзов прерываний и ловушек). Первый элемент GDT (с нулевым индексом) не используется. Ему соответствует нуль-селектор, обозначающий "пустой" указатель.

Таблицы LDT обеспечивают способ изоляции сегментов программы и данных исполняемой задачи от других задач. LDT связана с конкретной задачей и может содержать только дескрипторы сегментов, шлюзы вызовов и шлюзы задач.

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

IDT может содержать только шлюзы задач, шлюзы прерываний или шлюзы ловушек.

Типы системных дескрипторов

0

резерв

8

резерв

1

доступный 16-битный TSS

9

доступный 32-битный TSS

2

LDT

A

резерв

3

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

B

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

4

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

C

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

5

шлюз задачи

D

резерв

6

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

E

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

7

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

F

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

Дескрипторы TSS (сегмента состояния задачи) и LDT так же, как и дескрипторы сегментов содержат 32-битный линейный базовый адрес и 20-битный предел. Дескрипторы шлюзов содержат в битах 16-31 селектор вызываемого сегмента кода, а в битах 0-15 и 48-63 смещение точки входа (в шлюзе задачи не используется), а биты 32-39 зарезервированы и должны содержать 0 (для шлюза вызова биты 32-36 определяют количество параметров, передаваемых в стек вызываемой процедуры).

Для обеспечения совместимости с МП 80286 поддерживаются все 16-битные дескрипторы МП 80286. Дескрипторы МП 80286 содержат 24-разрядный адрес и 16-разрядную границу. С другой стороны, дескрипторы 32-битных процессоров имеют 32-разрядный базовый адрес, 20-разрядную границу и бит дробности G. Таким образом, если старшее слово дескриптора равно нулю, то это дескриптор МП 80286.