Разделы:


Best links:

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

Для повышения производительности системы, рекомендуется размещать IDT по адресу, кратному 8. Размер IDT должен быть кратен 8, т.к. она состоит из 8-байтных дескрипторов, а предел, следовательно, на 1 меньше.

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

Параметры IDT (адрес и предел) процессор хранит с специальном 48-разрядном регистре IDTR. Формат этого регистра следующий:

Адрес начала IDT - это тот адрес, по которому вы разместили IDT. Предел таблицы IDT - это максимальное смещение относительно её начала.

Image

Рис. 5.6. Формат регистра IDTR.

Подготовка и запись значения IDTR аналогична действиям для GDTR, поэтому соответствующий пример здесь не приводится.

Для загрузки содержимого IDTR из памяти в регистр используется команда LIDT, для сохранения из регистра в память - SIDT, причём, команда IDTR может выполняться только на нулевом уровне привилегий, а SIDT - на любом. Единственным операндом у обеих команд является адрес 48-разрядной переменной.

Программа, работающая не на 0-м уровне привилегий может получить адрес и предел IDT и только от операционной системы зависит, разрешит ли она доступ непривилегированной программе к IDT.

предыдущаяследующая