Оглавление Об учебном пособии
Использованные источники1 Использованные источники2 Использованные источники3 Использованные источники4 Использованные источники5 Использованные источники6

Глава 4. Работа механизма защиты.


4.1. Проверки корректности использования команд.

Привилегированные команды. К привилегированным командам относятся те, на выполнение которых влияет уровень привилегий программы или привилегии устройств ввода/вывода.

МП iх86 имеет 3 группы привилегированных команд, степени привилегий которых различны:

  • PL0-команды;
  • IOPL-"чувствительные" (IOPL-sensitive) команды;
  • команды, модифицируемые в соответствии с текущим уровнем привилегии.

PL0-команды. Это команды, выполнение которых разрешено только на уровне привилегий 0. При попытке выполнить их в Р-режиме на другом уровне привилегий генерируется сигнал нарушения общей защиты (прерывание 13).

В некоторых литературных источниках только эти команды определяются как привилегированные.

IOPL-"чувствительные" команды. Это команды, которые изменяют состояние флажка прерываний IF, выполняют захват шины или операцию ввода-вывода.

Для выполнения этих команд программа необязательно должна иметь уровень привилегий 0. Привилегированность этих команд заключается в том, что их могут выполнять программы, уровень привилегий которых выше уровня, определяемого полем IOPL уровня привилегий ввода-вывода в регистре EFLAGS. Другими словами, для выполнения этих команд требуется, чтобы CPL был численно меньше или равен IOPL (CPL <= IOPL). При попытке выполнить их в Р-режиме при CPL > IOPL генерируется нарушение общей защиты (прерывание 13).

Команды обращения к устройствам ввода/вывода (IN, INS, OUT, OUTS) являются особой подгруппой IOPL-"чувствительных" команд. На их выполнение, кроме соотношения уровней привилегий CPL <= IOPL, влияет содержимое битовой карты разрешения ввода/вывода в сегменте состояния задачи TSS.

Выполнение команд ввода/вывода разрешено, если CPL <= IOPL. При CPL > IOPL производится проверка содержимого битовой таблицы разрешения ввода/вывода.

Командами, модифицируемыми в соответствии с текущим уровнем привилегии, являются две команды:

  • POPFD - загрузка регистра EFLAGS четырехбайтным значением из стека;
  • POPF - загрузка регистра FLAGS двухбайтным значением из стека.

Команды POPFD и POPF сами по себе не являются привилегированными, но их выполнение зависит от значения CPL, т.е. от уровня привилегий содержащего их кода. Здесь речь идет о защите по модификации полей регистра флагов IOPL и IF.

Флаг IOPL может модифицироваться только PL0-программами. По сути дела IOPL является PL0-флагом.

Флаг IF может модифицироваться IOPL-чувствительными командами при CPL <= IOPL. В этом смысле IF можно считать IOPL-чувствительным флагом.

Любая программа может содержать команды POPFD и POPF. Эти команды могут изменять любые биты флагов, но биты IOPL могут быть изменены этими командами, только если выполняется PL0-программа, а флаг IF - если выполняется условие CPL <= IOPL.

Процессор никак не сообщает об изменении действия этих команд. Это вполне штатная ситуация. Процессор просто не модифицирует биты IOPL и флаг IF, если это не разрешено.



Вопросы для самопроверки:

  1. Что такое PL0-команды.
  2. Какие команды входят в группу PL0 - команд.
  3. Чем заканчиваются попытки некорректного использования PL0 - команд.
  4. Какие команды входят в группу IOPL - чувствительных команд.
  5. В чем заключается привилегированность IOPL - чувствительных команд.
  6. В чем заключается привилегированность команд обращения к устройствам ввода/вывода.
  7. Какие команды входят в группу команд модифицируемых в соответствии с текущим уровнем привилегии.
  8. В чем заключается особенность команд модифицируемых в соответствии с текущим уровнем привилегии.
<< Предыдущая страница Следущая страница >>