Организация ввода-вывода. Часть 2. Драйверы для WINDOWS NT. Рощин А.В. - 23 стр.

UptoLike

Составители: 

23
данный селектор, должен соответствовать выполняемой инструкции.
Нарушение типа (например, ссылка инструкции JMP на вентиль вызова)
порождает исключение #GP. При передаче управления действуют
следующие правила привилегий, нарушение которых также приводит к
исключению #GP:
команды JMP или CALL могут ссылаться либо на подчиненный
сегмент кода с DPL, большим или равным CPL, либо на
неподчиненный сегмент с DPL равным CPL,
прерывания внутри задачи или вызовы, которые могут изменить
уровень привилегий, могут передавать управление кодовому
сегменту с уровнем привилегий, равным или большим привилегий
CPL, только через вентили с тем же или меньшим уровнем
привилегий, чем CPL,
инструкции возврата, которые не переключают задачи, могут
передать управление только кодовому сегменту с таким же или
меньшим уровнем привилегий,
переключение задач может выполняться с помощью вызова,
перехода или прерывания, которые ссылаются на вентиль задач
или сегмент состояния задачи (TSS) с тем же или меньшим
уровнем привилегий.
Смена уровня привилегий, происходящая при передаче управления,
автоматически вызывает переопределение стека
. Начальное значение
указателя стека SS:SP для уровня привилегий 0, 1, 2 содержится в TSS. При
передаче управления по командам JMP или CALL в SS:SP загружается
новое значение указателя стека, а старые значения помещаются в новый
стек. При возврате на прежний уровень привилегий его стек
восстанавливается (как часть инструкции RET или IRET). Для вызовов
подпрограмм с передачей параметров через стек и сменой уровня
данный селектор, должен соответствовать выполняемой инструкции.
Нарушение типа (например, ссылка инструкции JMP на вентиль вызова)
порождает исключение #GP. При передаче управления действуют
следующие правила привилегий, нарушение которых также приводит к
исключению #GP:
        − команды JMP или CALL могут ссылаться либо на подчиненный
          сегмент кода с DPL, большим или равным CPL, либо на
          неподчиненный сегмент с DPL равным CPL,
        − прерывания внутри задачи или вызовы, которые могут изменить
          уровень привилегий, могут передавать управление кодовому
          сегменту с уровнем привилегий, равным или большим привилегий
          CPL, только через вентили с тем же или меньшим уровнем
          привилегий, чем CPL,
        − инструкции возврата, которые не переключают задачи, могут
          передать управление только кодовому сегменту с таким же или
          меньшим уровнем привилегий,
        − переключение задач может выполняться       с помощью вызова,
          перехода или прерывания, которые ссылаются на вентиль задач
          или сегмент состояния задачи (TSS) с тем же или меньшим
          уровнем привилегий.
        Смена уровня привилегий, происходящая при передаче управления,
автоматически вызывает переопределение стека. Начальное значение
указателя стека SS:SP для уровня привилегий 0, 1, 2 содержится в TSS. При
передаче управления по командам JMP или CALL в SS:SP загружается
новое значение указателя стека, а старые значения помещаются в новый
стек.    При   возврате   на   прежний   уровень   привилегий   его   стек
восстанавливается (как часть инструкции RET или IRET). Для вызовов
подпрограмм с передачей параметров через стек и сменой уровня



                                    23