Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Обработка аппаратных прерываний и исключений в защищенном режиме 32-х разрядных процессоров Intel. Структура и виды шлюзов с переключением на новую задачу, в контексте текущей задачи.



В защищённом режиме обработка прерываний отличается от обработки прерываний в реальном режиме: вместо таблицы прерываний, содержащей адреса обработчиков прерываний, - дескрипторная таблица прерываний IDT, содержащая дескрипторы прерываний. Она адресуется регистром IDTR. Каждый элемент IDT представляет 8-байтовую структуры: 0-1: смещение 0..15; 2-3: селектор; 4: 0; 5: биты 0-3 – тип, 4 – S=0, 5-6: DPL, 7 – P; 6-7: смещение 16..31.

Эти структуры называют шлюзами. Существует 3 вида, которые могут располагаться в IDT: interrupt gate (шлюз прерывания), trap gate (шлюз ловушки), task gate (шлюз задачи).

Смещение состоит из 2х частей, но для шлюза задачи игнорируется и должно быть равно 0.

Селектор указывает на дескриптор сегмента обработчика, а для шлюза задачи – на TSS задачи, предназначенного для обработки.

Байт атрибутов содержит: P – бит присутствия; DPL – уровень привилегий, S – признак системного дескриптора, должен быть равен 0; Type – тип.

Типы шлюзов: 0 – резерв, 1 – свободная TSS (16 бит), 2 – дескриптор TSS (16 бит), 3 – занятый TSS (16 бит), 4 – шлюз вызова (16 бит), 5 – шлюз задачи, 6 – шлюз прерывания (16 бит), 7 – шлюз ловушки (16 бит), 8 – резерв, 9 – свободная TSS (32 бита), 10 – резерв, 11 – занятый TSS (32 бита), 12 – шлюз вызова (32 бита), 13 – резерв, 14 – шлюз прерывания (32 бита), 15 – шлюз ловушки (32 бита).

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

Обработка прерываний с переключением на новую задачу происходит, если прерыванию соответствует шлюз задачи. Смысл полей в дескрипторе шлюза задач отличается: поле смещения игнорируется, а селектор указывает на TSS задачи, предназначенной для обработки прерываний.

При возникновении прерываний, из IDT выбирается соответствующий дескриптор. МП, определив, что это шлюз задачи, сохраняет контекст задачи в TSS текущей задачи, определённой регистром TR. Дескриптор TSS текущей задачи помечается «занятым». По селектору, расположенному в дескрипторе шлюза задачи предназначенного для обработки, выбирается дескриптор TSS, а по нему и сам TSS. Контекст задачи из TSS обработчика загружается и устанавливается флаг NT, показывающий, что данная задача является вложенной. В поле обратной связи TSS обработчика помещается селектор прерванной задачи, и управление передаётся обработчику (по cs и eip из TSS).

Преимущество: позволяет сохранить все регистры (при использовании шлюза ловушки или прерывания сохраняется только eflag, cs и eip). Недостаток: большие накладные расходы при переключении задач, а в сохранении всех регистров обычно нет необходимости. В современных ОС данный подход практически не используется.

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

1) При возникновении прерывания, МП определяет его номер и извлекает из IDT соответствующий ему дескриптор.

2) В стек на уровне привилегий текущего сегмента помещаются следующие данные: 2.0) SS и SP, если уровень привилегий шлюза выше текущего уровня привилегий; 2.1) eflags; 2.2) eip; 2.3) es. Если рассматриваемому прерыванию соответствует шлюз прерывания, то запрещаются все прерывания (IF=0).

3) Из дескриптора шлюза извлекается поле смещения и помещается в eip.

4) Из дескриптора шлюза извлекается селектор и помещается в cs.

5) По индексу селектора (cs) извлекается дескриптор из LDT или GDT и помещается в теневой регистр.

6) По значению линейного базового адреса в дескрипторе определяется адрес сегмента, содержащего обработчик, а путём добавления смещения – и адрес самого обработчика. После этого управление передаётся найденному обработчику.

При использовании обработки прерываний в контексте текущей задачи, мы остаёмся в том же виртуальном адресном пространстве, но переключаемся на другой, более привилегированный, код, принадлежащий данной задаче. Механизмы защиты позволяют защитить данный код, поэтому большинство современных ОС используют именно такой подход к обработке прерываний и исключений. Обработчик адресуется обычно GDT, что позволяет сделать их доступными для всех задач.

 

21. Дескрипторная таблица прерываний (IDT). Шлюз прерываний и шлюз ловушки.

IDT содержит дескрипторы прерываний. Она адресуется регистром IDTR. Каждый элемент IDT представляет 8-байтовую структуры: 0-1: смещение 0..15; 2-3: селектор; 4: 0; 5: биты0-3 – тип, 4 – S=0, 5-6: DPL, 7 – P; 6-7: смещение 16..31.

Эти структуры называют шлюзами. Существует 3 вида, которые могут располагаться в IDT: interrupt gate (шлюз прерывания), trap gate (шлюз ловушки), task gate (шлюз задачи).

Смещение и селектор указывают на смещение внутри сегмента и на дескриптор сегмента обработчика. Байт атрибутов содержит: P – бит присутствия; DPL – уровень привилегий, S – признак системного дескриптора, должен быть равен 0; Type – тип (для прерывания – 6 или 14, для ловушки – 7 или 15 для 16 или 32 бит соответственно).

Если тип обрабатываемого прерывания – шлюз ловушки или прерывания, то обработка происходит в контексте текущей задачи. Если рассматриваемому прерыванию соответствует шлюз прерывания, то запрещаются все прерывания (IF=0).

 


Поделиться:



Последнее изменение этой страницы: 2019-05-08; Просмотров: 170; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.01 с.)
Главная | Случайная страница | Обратная связь