Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция ЭВМ 2013-2014.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
3.85 Mб
Скачать

Тема 5.3. Дескрипторы и таблицы

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

Существуют три типа таблиц дескрипторовлокальная таблица дескрипторов LDT (Local Descriptor Table), глобальная таблица дескрипторов GDT (Global Descriptor Table) и таблица дескрипторов прерываний IDT (Interrupt Descriptor Table). Размеры таблиц могут находиться в пределах от 8 байт до 64К-байт, что соответствует числу элементов в таблице от 1 до 8К.

С каждой из этих таблиц связан соответствующий регистр процессора. Регистры GDTR и IDTR имеют программно-доступное 16-битное поле лимита, задающее размер таблицы, и 32-битное поле базового адреса, определяющее положение таблицы в пространстве линейных адресов памяти. У регистра LDTR программно доступно только 16-битное поле селектора, по которому из GDT автоматически загружаются программно-недоступные и невидимые поля базового адреса и границы. Схема выборки дескрипторов показана на рис. 24.

Селектор сегмента (CS…GS)

Дескриптор сегмента

теневая часть регистра (CS…GS)

15

3

2

1

0

INDEX

TI

DPL

Атрибуты сегмента

Граница сегмента

Базовый адрес сегмента

G DT

(TI=0)

L DT

(TI=1)

Граница GDT

Граница LDT

. . .

. . .

+

Дескриптор сегмента

. . .

+

Дескриптор

сегмента

+

Дескриптор LDT

. . .

. . .

15

0

31

16

Граница GDT

Базовый адрес GDT

Начало GDT

Начало LDT

Регистр GDTR

Регистр LDTR

15

3

2

1

0

INDEX

0

DPL

Атрибуты LDT

Граница LDT

Базовый адрес LDT

Селектор LDT

теневая часть регистра LDTR

Рис. 34 Схема выборки дескрипторов из таблиц GDT и LDT

Инструкции загрузки регистров таблиц LGDT, LIDT и LLDT являются привилегированными (выполняются только на уровне привилегий 0). Инструкции LGDT и LIDT загружают из памяти 6-байтное поле, содержащее базовый адрес и лимит локальной таблицы. Инструкция LLDT загружает только селектор, ссылающийся на дескриптор, содержащий базовый адрес и границу локальной таблицы дескрипторов.

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

Выбор таблицы (локальная или глобальная) определяется по значению бита TI селектора, а положение (номер) дескриптора задается 13-битным полем INDEX селектора. При ссылке на дескриптор, выходящий за лимит таблицы, возникает исключение #GP.

Таблица дескрипторов прерываний, используемая в защищенном режиме, может содержать описания до 256 прерываний. Таблица может содержать только шлюзы задач, прерываний и ловушек. Базовый адрес и лимит таблицы загружается привилегированной инструкцией LIDT (аналогично LGDT). Размер IDT должен быть не менее 256 байт, чтобы в нее поместились все зарезервированные прерывания процессора. Ссылка на элементы IDT происходит по инструкциям INT, аппаратным прерываниям и исключениям процессора. При возникновении прерывания или исключения, дескриптор которого выходит за лимит таблицы, вырабатывается исключение #DF.

В общем виде формат дескриптора представлен на рис. 25, где 32-разрядный базовый адрес сегмента (база ВА[31:0]) и 20-разрядная граница сегмента (L[19:0]) размещены по частям в различных байтах дескриптора.

Граница сегмента L указывает максимальное допустимое значение относительного адреса, которое может использоваться при обращении к сегменту. Величина (L+1) определяет размер сегмента в байтах или страницах. Обращение к ячейке памяти, находящейся за границей данного сегмента, вызывает исключение типа #GP.

Помимо базового адреса и границы сегмента дескрипторы задают ряд других важных его атрибутов, состав которых зависит от вида сегмента. Отдельные биты байта 6 дескриптора определяют следующие атрибуты сегмента.

Байт 7

Байт 6

Байт 5

Байт 4

31

24

23

22

21

20

19

16

15

14

13

12

11

8

7

0

BA[31:24]

G

D/B

0

Avail

Граница L[19:16]

P

DPL

S

TYPE

Базовый адрес BA[23:16]

Базовый адрес BA[15:0]

Граница сегмента L[15:0]

31

16

15

0

Байты 3,2

Байты 1,0

Рис. 35. Общий формат дескриптора

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