ОГРАНИЧЕНИЕ ДОСТУПА К ДАННЫМ


Для адресации операнда в памяти селектор сегмента данных должен быть загружен в регистр сегмента данных (регистры DS, ES, FS, GS или SS). Процессор проверяет уровни привилегированности сегментов. Проверка выполняется при загрузке селектора сегмента.

Как показано на Рисунке 6-3, в проверке привилегированности этого типа участвуют три различных уровня привилегированности. Три проверяемых уровня привилегированности: 1. CPL (текущий уровень привилегированности программы). Он хранится в двух младших битах регистра CS. 2. DPL (уровень привилегированности дескриптора) дескриптора сегмента, содержащего операнд. 3. RPL (уровень привилегированности источника запроса) из селектора, используемого для задания сегмента, содержащего операнд. Этот уровень хранится в двух младших битах сегментного регистра, используемого для доступа к операнду (регистра SS, DS, ES, FS или GS). Если операнд находится в стековом сегменте, то RPL и CPL совпадают.
Команды могут загружать сегментный регистр только если DPL сегмента имеет такой же или меньший уровень привилегированности (больший номер привилегированности), чем у наименее привилегированного CPL и RPL селектора. Адресуемый домен задачи изменяется при изменении его CPL. Если CPL равен 0, то сегменты данных всех уровней привилегированности доступны; когда CPL равен 1, то доступны только сегменты данных с уровнями привилегированности от 1 до 3; а когда CPL равен 3, то доступны только сегменты данных с уровнем привилегированности 3.
Доступ к данным в кодовых сегментах
Возможны следующие способы доступа к данным в кодовом сегменте:
1. Загрузка в регистр сегмента данных селектора неконформного, доступного для чтения выполняемого сегмента.
2. Загрузка в регистр сегмента данных селектора комформного, доступного для чтения выполняемого сегмента.
3. Использование префикса переопределения сегмента для чтения из доступного для чтения выполняемого сегмента, селектор которого уже загружен в регистр CS.
Для случая 1 применимы те же правила доступа, что и для сегмента данных. Случай 2 допустим всегда, поскольку уровень привилегированности кодового сегмента с установленным битом Конформности такой же, как и CPL, независимо от его DPL. Случай 3 также допустим всегда, поскольку DPL кодового сегмента, выбранного при помощи регистра CS, совпадает с CPL.

Загрузка...