7.4.5.2.2. Защита, привилегии и ввод-вывод

 

Уровень привилегий ввода-вывода (ВВ) обеспечивает защиту, разрешая задаче доступ ко всем устройствам ввода-вывода (УВВ) или же запрещая задаче доступ к любому УВВ. В режиме виртуального МП 8086 для выбора уровня привилегий любой комбинации байтов ВВ может использоваться битовая карта разрешения ВВ.

Защита ВВ обеспечивается двумя способами: битовая карта разрешения ВВ сегмента TSS определяет право использовать порты в адресном пространстве ВВ; уровень привилегий ВВ IOPL в регистре EFLAGS определяет право использовать связанные с ВВ команды. Эти механизмы работают только в защищенном режиме, в который входит также и режим виртуального МП 8086. Они не работают в реальном режиме. В реальном режиме любая процедура исполняет команды ВВ и любой порт ВВ может быть адресован любой из этих команд.

Битовая карта разрешения ввода-вывода. IN, INS, OUT, OUTS-это команды, которые прямо используют адреса из пространства ВВ. Процессор может селектив-

но выявить ссылки на определенные адреса ВВ. Механизм, который позволяет осуществить это выявление,-это битовая карта разрешения ВВ в сегменте TSS. На рис. 5.3 показано, где именно в сегменте TSS появляется эта карта.

Эта карта является вектором битов, и ее размер и размещение в TSS могут изменяться. Процессор размещает битовую карту посредством 16-разрядного поля базы карты в фиксированной части таблицы TSS, которая содержит относительный адрес начала карты. Верхняя граница карты ввода-вывода-это то же самое, что и граница сегмента TSS. Поскольку карта разрешения ВВ находится в таблице TSS, то различные задачи могут иметь различные карты. Таким образом, операционная система может зарезервировать порты для задачи путем изменения карты разрешения ВВ в таблице TSS задачи.

Каждый бит в этой карте соответствует адресу байта порта ВВ. То есть бит для порта 41 находится по адресу: база карты ВВ + 5, относительный адрес бита равен 1. Процессор проверяет все биты, которые соответствуют адресам портов ВВ, участвующим в операции ВВ. То есть при операции с двойным словом будут проверяться четыре бита, которые соответствуют адресам четырех соседних байтов. Если любой из проверяемых битов установлен, то МП 80386 вызывает обработку исключения по защите. Если же все проверяемые биты очищены, то операция ввода-вывода продолжается.

Рис. 5.3. Таблица TSS с картой ввода-вывода.

Если МП 80386 обнаруживает команду ввода-вывода в защищенном режиме, то сначала он проверяет, не является ли текущий уровень привилегий CPL меньшим или равным уровню IOPL. Если это верно, то продолжается операция ввода-вывода, иначе МП 80386 проверяет карту разрешения ввода-вывода. (Заметим, что в режиме виртуального МП 8086 МП 80386 проверяет эту карту безотносительно к уровню IOPL.) Если база карты ввода-вывода больше или равна границе таблицы TSS, то сегмент TSS не имеет карты разрешения ввода-вывода и все команды ввода-вывода вызывают обработку исключения, когда уровень CPL больше уровня IOPL.

Необходимо, чтобы на команды, имеющие отношение к вводу-выводу, не только налагались ограничения, но и чтобы они были исполняемыми процедурами на уровнях привилегий, отличных от нуля. Для обеспечения этого МП 80386 использует два бита регистра флагов для хранения уровня IOPL. Уровень IOPL определяет уровень привилегий, необходимый для того, чтобы выполнять связанные с ВВ команды. Следующие шесть команд могут выполняться только в том случае, если уровень CPL меньше или равен уровню IOPL. Эти команды называются «чувствительными», так как они чувствительны к значению, хранимому в битах IOPL: IN (ввод), INS (ввод строки), OUT (вывод), OUTS (вывод строки), CLI (очистить флаг разрешения прерываний), STI (установить флаг разрешения прерываний).

Для того чтобы использовать чувствительные команды, процедура должна исполняться на уровне привилегий, по крайней мере таком же, как и уровень, хранимый в битах IOPL. Любая попытка менее привилегированной процедуры использовать одну из этих шести команд приводит к обработке исключения по общей защите.

Каждая задача в системе имеет свою уникальную копию регистра флагов, поэтому она может иметь свой уровень IOPL. Задача может изменить значения битов IOPL только командой POPF. Такие изменения являются привилегированными. Ни одна процедура не может модифицировать биты IOPL, если только эта процедура не исполняется на нулевом уровне привилегий. Любая менее привилегированная команда или процедура, пытающаяся изменить биты IOPL, не приводит к обработке исключения; уровень IOPL остается неизмененным.

 

 

HotLog

Заказчику web дизайна и программирования - каталог сайтов, обзор дизайн студий