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

Дескрипторы

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

Выделяются следующие типы и виды дескрипторов:

  1. Несистемные:

    1. Сегмента кода.

    2. Сегмента данных.

  2. Системные:

    1. Сегмента состояния задачи (task state segment, TSS).

    2. Локальной таблицы дескрипторов (local descriptors table, LDT).

    3. Специальные (дескрипторы шлюзов или вентилей (gates)):

      1. Шлюза вызова (call gate).

      2. Шлюза прерывания (interrupt gate).

      3. Шлюза ловушки (trap gate).

      4. Шлюза задачи (task gate).

Несистемные и системные неспециальные дескрипторы описывают соответствующие сегменты.

Специальные дескрипторы описывают т. н. шлюзы или вентили. Шлюзы предоставляют защищенные входы в системные процедуры и обработчики, которые работают на других уровнях привилегий, чем прикладные программы или главные процедуры. Например, CALL в шлюз вызова может предоставить доступ к процедуре в таком же или более привилегированном сегменте кода, чем текущий. Шлюзы также удобны для перехода между 16- и 32-битными сегментами кода. В режиме IA-32e шлюзы вызова полезны для переключения между 64-битным и совместимым (compatibility) режимами.

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

Дескриптор сегмента данных или кода имеет следующий формат:

  • байт 7: биты 31-24 базы сегмента;

  • байт 6:

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

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

  • бит 5: 0;

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

  • биты 3-0: биты 19 – 16 лимита;

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

  • бит 7: бит присутствия сегмента (P);

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

  • бит 4: 1 (тип дескриптора — не системный);

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

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

  • бит 1: бит разрешения чтения для кода (R), бит разрешения записи для данных (W);

  • бит 0: бит доступа (A) (1 — к сегменту было обращение);

  • байт 4: биты 23-16 базы сегмента;

  • байты 3-2: биты 15-0 базы сегмента;

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

Лимит (предел) сегмента — это максимально допустимое смещение внутри него. Лимит плюс единица — это размер сегмента.

База — адрес начала сегмента.

Биты A и P байта доступа предназначены для организации виртуальной памяти. Для сегментов, находящихся в физической памяти, бит P должен быть установлен в 1. Любая попытка программы обратиться к сегменту памяти, в дескрипторе которого бит P установлен в 0, приведет к прерыванию, обработчик которого подгрузит данный сегмент в память.

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

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

Таблица 9.

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

0

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

8

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

1

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

9

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

2

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

A

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

3

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

B

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

4

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

C

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

5

Шлюз задачи

D

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

6

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

E

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

7

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

F

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

Формат дескрипторов TSS и LDT

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

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

Команды JMP и CALL на адрес с селектором, соответствующим TSS незанятой задачи, приводят к переключению задач.

Формат специальных дескрипторов

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

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

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

Формат шлюзов:

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

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

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

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

  • бит 4: 0 (тип дескриптора — системный);

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

  • байт 4:

  • биты 7-5: 000;

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

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

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

Соседние файлы в папке Задания к лабораторным