Межсегментная передача управления


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

Вентили вызова (Call Gates) используются для вызовов процедур со сменой уровня привилегий, вентили задач (Task Gates) используются для переключения задач, вентили прерываний (Interrupt Gates) и ловушек (Trap Gates) определяют процедуры обслуживания прерываний. Вен­тили вызова позволяют автоматически копировать заданное число слов из ста­рого стека в новый. Вентили прерываний отличаются от вентилей ловушек только тем, что они запрещают прерывания (сбрасывают IF), а вентили ловушек не запрещают. Для каждого типа вентилей используются соответствующие дес

SELECTOR

OFFSET 15…0

OFFSET 31…18

P

DPL

a

TYPEf 1

0

0

0

WORD COUNT 4…0

Дескрипторы вентилей:

б) 32-битный формат 386+

В байте управления доступом у этих дескрипторов бит S=0. Бит Р определя­ет действительность (Р=1) или недействительность (Р=0) содержимого сегмен­та. Поле DPL задает уровень привилегий. Поле TYPE (4-7) определяет тип вентиля:

4 — вентиль вызова 80286 (Call Gate),

5 — вентиль задачи 80286 (Task Gate),

6 — вентиль прерывания 80286 (Interrupt Gate),

7 — вентиль ловушки 80286 (Trap Gate),

С — вентиль вызова 386+ (Call Gate),

D — вентиль задачи 386+ (Task Gate),

E — вентиль прерывания 386+ (Interrupt Gate),

F — вентиль ловушки 386+ (Trap Gate).

Поле WORD COUNT используется только в ключах вызовов и определяет число слов из стека вызывающего процесса, автоматически копируемых в стек вызываемой процедуры. Для сегментов 80286 слова 16-битные, для 386+ слова 32-битные.Слово DESTINATION SELECTOR для вентилей вызова, прерываний и ло­вушек задает селектор целевого сегмента кода, а для вентиля задачи — селектор целевого TSS.Слово DESTINATION OFFSET задает смещение (адрес) точки входа в целе­вом сегменте.При использовании вентилей может возникнуть исключение 13, которое оз­начает, что селектор указывает на некорректный тип дескриптора. При попытке : использования недействительного вентиля (Р=0, 8) возникает исключение 11.

Загрузка...