Использование всех четырех уровней привилегий не является обязательным. Существующие программы (ранее созданное программное обеспечение часто спроектировано с меньшим числом уровней) могут просто игнорировать другие допустимые уровни. Рекомендуется, чтобы одноуровневая система использовала нулевой уровень привилегий (незащищенную систему можно реализовать, поместив все процедуры в сегменты с уровнем привилегий 0). В двухуровневой системе следует использовать уровни 0 и 3. При этом, если появятся новые соображения по распределению уровней, то можно перемещаться либо вверх на уровень ядра, либо вниз на уровень прикладных программ.
![]() |
Прикладные программы
![]() |
Расширения ОС (служебные
программы), базы данных
![]() |
Системные программы и
утилиты ОС
![]() |
Ядро ОС
PL = 0
![]() |
PL =1
![]() |
PL =2
![]() |
PL =3
![]() |
Рис. Кольца защиты процессора 80х86
Механизм проверки привилегий работает в ситуациях, которые можно назвать межсегментными. К ним относятся доступ к другому сегменту данных или стековому сегменту, реализация межсегментных передач управления в случае особых ситуаций, при прерываниях или при выполнении команд безусловной передачи управления CALL, INT, JMP, RET, IRET и во всех других случаях, когда осуществляется загрузка какого-либо селектора для выбора соответствующего сегмента.
Во всех межсегментных обращениях всегда участвуют два сегмента - текущий сегмент кода и целевой сегмент назначения (кода, данных или стека).
В проверку привилегий входят три различных уровня привилегий:
- текущий уровень привилегий CPL;
- запрашиваемый уровень привилегий RPL (уровень привилегий селектора инициатора запроса);
- уровень привилегий дескриптора целевого сегмента назначения DPL.
При подготовке программы к запуску операционная система, обеспечивающая управление программами в защищенном режиме, например Windows или OS/2, присваивает каждому сегменту кода и данных определенный уровень привилегий и заносит его в поле DPL (Discriptor Privilege Level) байта доступа соответствующего дескриптора. Уровень привилегий дескриптора DPL указывает минимальный уровень привилегий, необходимый для доступа к данному сегменту.
Подготовка дескрипторных таблиц и заполнение их дескрипторами осуществляется в реальном режиме. Эта подготовка включает в себя задание структуры дескриптора, определение дескрипторной таблицы как набора дескрипторов с выбранной структурой и формирование селекторов для каждого дескриптора, в индексном поле которого указывается номер дескриптора в таблице. Формат селектора, рассмотренный ранее, содержит поле RPL (Requested Privilege Level - запрашиваемый уровень привилегий). Важнейшим назначением уровня RPL является использование его в селекторах шлюзов. С помощью шлюзов пользовательская программа получает от ОС только те обслуживания, которые ОС разрешает оказывать пользовательским программам. Более подробно использование шлюзов рассматривается в разделе “Межсегментные вызовы в защищенном режиме”. Другим важным использованием запрашиваемого уровня привилегий RPL является контроль привилегий при межуровневых обращениях к сегментам данных. Запрашиваемый уровень привилегий RPL, указываемый в селекторе, не влияет на выбор дескриптора, но он может запретить доступ к сегменту, если уровень привилегий источника запроса ниже уровня привилегий дескриптора сегмента назначения.. Содержимое поля RPL должно быть численно меньше или равно значению DPL выбираемого дескриптора
Операция присвоения уровней DPL и RPL выполняется во время трансляции: в файл исходной программы вставляется специальный файл данных, описывающих дескрипторы в дескрипторной таблице и селекторы , их определяющие.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.