Дескриптор шлюзаДескриптор шлюза — служебная структура данных, служащая для различных переходов. Используется только в защищённом режиме. В реальном режиме некоторым аналогом может служить дальний адрес. Длина дескриптора стандартна и равна восьми байтам.
Селектор и смещение составляют обычный дальний адрес точки входа в процедуру. При выполнении дальних команд CALL, JMP с указанием селектора шлюза, значение смещения, указываемого в команде игнорируется. Алгоритм перехода с использованием шлюза:
Теперь подробнее: Шлюз вызова (англ. Call Gate)
Нельзя использовать в IDT. Характерной особенностью шлюза вызова является наличие поля WC, благодаря которому возможна передача до 25=32 слов/двойных слов вызываемой процедуре через стек. Подробнее данный тип шлюза описан в статье Сегментная защита памяти Шлюз задачи (англ. Task Gate)Может использоваться в любой из трёх дескрипторных таблиц. Единственная особенность этого шлюза состоит в том, что в качестве сегмента указан сегмент TSS. Поля смещения не используются и могут иметь любое значение. Шлюз прерывания (англ. Interrupt Gate)Этот шлюз используется только в IDT. Его особенностью является сброс флага прерываний IF при входе в процедуру обработки. Так как прежнее значение регистра флагов сохраняется в стеке, то при выходе из процедуры обработки флаг IF принимает исходное положение. Это позволяет обрабатывать некоторые прерывания в режиме CLI. Шлюз ловушки (англ. Trap Gate)Этот шлюз используется только в IDT. Самый простой шлюз. При поступлении прерывания просто переходит на процедуру обработки (при необходимости производится переключение стека). См. также
Ссылки |