Привилегии
В защищенном режиме имеется 4-уровневая система привилегий, которая управляет использованием привилегированных инструкций и доступом к дескрипторам. Уровни привилегий нумеруются от 0 до 3, нулевой имеет высшие привилегии. Уровни привилегий обеспечивают защиту задач изолируемых друг от друга локальными таблицами дескрипторов. Программы, операционные системы, обработчики прерываний и другое системное обеспечение могут включаться в виртуальное адресное пространство каждой задачи и защищаться системой привилегий. Каждая часть системы работает на своем уровне привилегий. Задачи, дескрипторы и селекторы имеют свои атрибуты привилегий. Привилегии задач действуют на выполнение инструкций и использование дескрипторов. Текущий уровень привилегий и задачи CPL определяются двумя младшими битами регистра CS, и может изменяться только при передаче управления к новому сегменту через дескриптор вентиля. Привилегии дескриптора задаются полем DPL байта управления доступом. DPL определяет наименьший уровень привилегий с которым возможен доступ к данному дескриптору. Привилегии селектора задаются полем RPL т.е. двумя младшими битами селектора. С помощью RPL можно урезать эффективный уровень привилегий EPL, который определяется как максимальное арифметическое из значений CPL и RPL. Контроль доступа к сегментным данным производится при исполнении команд загрузки селекторов в SS, DS, ES, FS и GS. Для получения доступа эффективный уровень привилегий EPL должен быть EPL DPL. Контроль типов и привилегий при передаче управления производится при загрузке селектора в регистр CS. Тип дескриптора на который ссылается данный селектор должен соответствовать выполняемой инструкции. Нарушение типа порождает исключение 13. Привилегии и битовая карта разрешения ввода вывода и управляет флагом прерываний IF. Уровень привилегий ввода вывода определяется полем IOPL регистра флагов. Значение IOPL можно изменить только при CPL=0.
Защита
Защита микропроцессора предназначена для предотвращения несанкционированного выполнения критических инструкций: команды HLT, которая останавливает микропроцессор и команд влияющих на сегменты кода и данных.
Механизмы защиты делятся на 3 группы:
- ограничение использования сегментов, например, запрет записи в только читаемый сегмент данных. Доступность использования только сегментов дескрипторы которых описаны в GDT и LDT;
- ограничение доступа к сегментам через правила привилегий;
- выделение привилегированных инструкций или операций, которые можно выполнять только при определенных уровнях CPL и IOPL.
Проверки, порождающие исключения можно тоже разделить на 3 группы:
- проверка при загрузке сегментных регистров;
- проверка ссылок операндов;
- проверка привилегий инструкций.
Для того, чтобы задачи не нарывались на срабатывание защиты, в систему команд введены специальные инструкции тестирования указателей. Они позволяют быстро удостовериться в возможности использования селектора или сегмента без риска порождения исключения.