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


Кольца защиты - часть 2


Текущий уровень привилегий копируется в поле RPL селектора сегмента кода, загруженного в регистре CS. Программа всегда может проанализировать свой текущий уровень привилегий исходя из значения поле RPL в регистре CS. Однако она не может изменить свой уровень привилегий простой заменой содержимого поля RPL в сегменте CS.

Итак, программа получает от операционной системы текущий уровень привилегий CPL, который она может проанализировать на основании содержимого регистра CS.

Дескрипторы, описывающие сегменты данных, содержат поле уровня привилегий дескриптора DPL (Descriptor Privilege Level). Поле DPL содержит минимальные привилегии, которые нужны для доступа к сегменту данных.

Перед тем, как обратиться к сегменту данных, программа должна загрузить в один из сегментных регистров селектор, соответствующий нужному сегменту данных. В селекторе необходимо указать поле уровня запрашиваемых привилегий RPL (Requested Privilege Level).

Программе будет предоставлен доступ к сегменту только в том случае, когда уровень привилегий дескриптора запрашиваемого сегмента DPL больше или равен значению max(CPL,RPL), т.е. наибольшему из значений текущего уровня привилегий CPL и уровня запрашиваемых привилегий RPL:

DPL >= max(CPL,RPL)

Если программа попытается получить доступ к более привилегированному, чем она сама сегменту памяти, её выполнение будет прервано.

В наших примерах, реализованных для простоты в кольце 0, все уровни привилегий равны 0, т.е. DPL=CPL=RPL=0.




- Начало -  - Назад -  - Вперед -