Защищенный режим процессоров Intel 80286 80386 80486

       

Привилегированные и чувствительные команды


Для обеспечения надёжности работы операционной системы необходимо ограничить использование обычными программами некоторых команд процессора. Например, обычные программы не должны иметь доступа к командам загрузки системных регистров GDTR и LDTR.

В таблице 2 приведён список привелигерованных команд, которые могут выполняться только в нулевом приоритетном кольце, т.е. только теми программами, которые имеют наибольшие привилегии (CPL=0).

Таблица 2. Привилегированные команды процессора i80286.

КомандаВыполняемые функции
LGDTЗагрузка регистра глобальной таблицы дескрипторов GDTR
LLDTЗагрузка регистра локальной таблицы дескрипторов LDTR
LIDTЗагрузка регистра таблицы дескрипторов прерываний IDTR
LTRЗагрузка регистра задачи TR
LMSWЗагрузка слова состояния машины MSW
CLTSСброс флага переключения задачи
HLTОстанов процессора

В этой таблице вам знакомы только команды LGDT и LLDT, остальные команды мы разберём позже, по мере изучения различных возможностей процессора i80286, таких как обработка прерываний в защищённом режиме и мультизадачность.

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

Кроме привилегированных команд, необходимо ограничить обычные программы в использовании команд ввода/вывода: IN, OUT, INS, OUTS. С помощью этих команд программа может, например, перепрограммировать контроллеры прерываний и прямого доступа к памяти, что в свою очередь откроет путь к непосредственной модификации памяти по физическим адресам.

Также не следует разрешать обычным программам использовать команды, которые могут заблокировать прерывания: CLI, STI, LOCK. В мультизадачной среде обычные программы не должны иметь возможность отключать механизм разделения времени между задачами.

Регистр FLAGS флагов процессора i80286 в разрядах 12-13 содержит двухбитовое поле IOPL (Input/Output Privilege Level). Это поле определяет наименее привилегированное кольцо, в котором разрешено использовать команды ввода/вывода.

Программы, работающие не в нулевом кольце, не могут сами модифицировать поле IOPL регистра FLAGS. При выполнении команд, загружающих регистр флажков (IRET и POPF) не в нулевом кольце, поле IOPL не модифицируется. Аналогично, без изменения остаётся флаг разрешения прерываний IF.

Содержание раздела