Механизм защиты распознает четыре уровня привилегированности, нумеруемые от 0 до 3. Чем больше номер, тем ниже уровень привилегированности. При удовлетворении всех прочих проверок защиты исключение общей защиты генерируется при попытке программы доступа к сегменту с меньшим уровнем привилегированности (т.е. с большим числом, задающим уровень), чем имеет данный сегмент.
Хотя для отмены механизма защиты никакого управляющего регистра или бита режима не предусмотрено, того же эффекта можно достигнуть путем присвоения всем уровням привилегированности значения 0. (Бит PE регистра CR0 не является разрешающим битом собственно для механизма защиты; он используется для включения "защищенного режима", режима выполнения программы, в котором доступной является вся 32-разрядная архитектура процессора в целом. Если защищенный режим выключен, то процессор работает в режиме "реальных адресов", который просто реализует возможности обладающего более высоким быстродействием и улучшенного процессора 8086).
Уровни привилегированности могут использоваться для повышения надежности операционной системы. В случае присвоения операционной системе наивысшего уровня привилегированности она становится защищенной от сбоев в случае ошибок в других программах. При таких программных сбоях операционная система имеет возможность сгенерировать соответствующие диагностические сообщения и попытаться выполнить восстановительные процедуры.
Следующий уровень привилегированности может быть установлен для других частей программного обеспечения, таких как программы, управляющие периферийными устройствами, которые называются драйверами устройств. При сбое в драйвере устройства операционная система должна иметь возможность выдать диагностическое сообщение, поэтому имеет смысл защитить операционную систему от возможных сбоев драйверов устройств. Однако, драйвер устройства может работать с важным периферийным оборудованием, например с дисководом. Сбои прикладных программ не должны приводить к разрушению структуры директорий на диске, поэтому имеет смысл защищать драйверы устройств от сбоев прикладных программ. Драйверы устройств должны иметь уровень привилегированности промежуточный, между операционной системой и прикладными программами. Прикладным программам присваивается самый низкий уровень привилегированности.
На Рисунке 6-2 показано, как эти уровни привилегированности могут быть интерпретированы в качестве колец защиты. Центральное кольцо защиты содержит сегменты, в которых находится наиболее важное программное оеспечение, обычно ядро операционной системы. Прочие кольца используются для менее важного программного обеспечения.
Уровни привилегированности хранятся в следующих структурах данных:
Два младших бита сегментного регистра CS содержат текущий уровень привилегированности (CPL). Это уровень привилегированности выполняемой в текущий момент программы. Младшие два бита регистра SS также содержат копию CPL. Обычно CPL равен уровню привилегированности кодового сегмента, из которого происходит выборка команд программы. CPL изменяется при передаче управления кодовуму сегменту с другим уровнем привилегированности.
Дескрипторы сегмента содержат поле, которое называется уровнем привилегированности дескриптора (DPL). DPL представляет собой уровень привилегированности применительно к сегменту.
Селекторы сегмента содержат поле, которое называется запрошенным уровнем привилегированности (RPL) RPL представляет собой уровень привилегированности процедуры, создавшей данный селектор. Если RPL имеет меньший уровень привилегированности, чем CPL, то он замещает CPL. Когда более привилегированная программа принимает селектор сегмента из менее привилегированной программы, RPL вызывает доступ к памяти с меньшим уровнем привилегированности.
Уровни привилегированности проверяются, когда селектор дескриптора загружается в сегментный регистр. Проверки, используемые для доступа к данным, отличаются от проверок при передаче выполнения между выполняемыми сегментами; следовательно, существует два типа доступа, рассматриваемые в следующих разделах в отдельности.
Кольца защиты ** * * ** * * * * ** * * * * * * Ядро * * * * * * * *операционной -----------> * *системы * * * *Уровень 0* * * * * * * * * * * * * *Вспомогательные --------> Уровень 1средства * *операционной * * ** * *системы (драйверы ------> Уровень 2устройств и т.д.) * * * * **Прикладные программы----> Уровень 3 * * ** Рисунок 6-2. Кольца защиты