Привилегированные команды. защита доступа к данным

К привилегированным командам относятся:

1. Команды воздействующие на механизм сегментации и защиты. (напр: команды остановки процессора, загрузки регистров дескрипторных табл, слово состояния машины, сброс флага вкл задачи)
также относятся: mov (передача данных), если в качестве 1-го из операндов она использует численные регистры(регистры- управления чаще всего).
эти команды доступны только для работающих на нулевом уровне привилегированных программ (или PR0)

2. Команды изменяющие значение флага IF и команды ввода-вывода. Отличительная особенность этих команд заключается в том что возможность их использования определяется двух битным полем IOPL регистра флага. Эти команды еще наз. IOPL зависимы.
Если задачи в кот-х не разрешено использовать защищенные команды попытаются это сделать, то будет сгенерированно нарушение общей защиты, в большинстве случаев, и задача будет снята с исполнения.




Защита доступа к данным:

При каждом обращении к данным средства защиты по привилегиям осущ-т проверку возможности обращения к этим данным, т.е фактически проверяется достаточно ли привилегии у текущего кода для обращения к этим данным.

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

CPL – уровень привилегий исполняющегося на данный момент кода.

Также при проверке учитывается уровень привилегий записанный в селекторе (поля RPL) при обращении к данным.

В общем случае правило защиты:

DPL >= max (CPL, RPL) = FPL(это эффективный уровень привилегий) 

 

Защита сегмента кода. текущий уровень привилегий

Каждая ссылка к памяти контролируется с точки зрения удовлетворения защитным проверкам. Все проверки выполняются до начала цикла обращения к памяти; любые нарушения защиты предотвращают начало цикла доступа к памяти и генерируют исключение. Поскольку проверки защиты выполняются параллельно с трансляцией адреса, они не влияют на характеристики быстродействия системы.

Существует пять проверок:

Проверка типа

Проверка границы

Ограничение адресуемого домена

Ограничение точек входа в процедуру

Ограничение набора команд

Нарушение защиты ведет к генерации исключения.

CPL - текущий уровень привилегий (Current Privilege Level): уровень привилегий, на котором в данный момент исполняется задача. Значение CPL хранится в поле RPL селектора сегмента кода, который помещен в регистр CS. Обычно это значение соответствует уровню привилегий дескриптора исполняемого сегмента кода. Уровень привилегий меняется, когда управление передается сегменту кода с другим значением DPL (за исключением подчиняемых сегментов кода).

Проверка уровня привилегий при доступе к сегментам данных.

Для доступа к операнду в сегменте данных, необходимо загрузить в сегментный регистр (DS, ES, FS или GS) селектор дескриптора сегмента данных. Для этого предназначены команды MOV, POP, LDS, LES, LFS и LGS. Перед тем, как загрузить селектор в сегментный регистр, процессор проверяет уровень привилегий, сравнивая уровень привилегий текущего кода (CPL), RPL селектора и DPL дескриптора. Загрузка селектора производится, когда DPL больше либо равен CPL или RPL, иначе загрузка не произойдёт и процессор сгенерирует исключение общей защиты. Адресное пространство процедуры или задачи зависит от значения её CPL. Когда CPL = 0, доступны сегменты данных на всех уровнях привилегий, при CPL = 1 - на уровнях 1, 2 и 3, при CPL = 3 - только на 3-м уровне. Прикладная программа может изменить RPL селектора, например, установить его в 0, и тогда проверка доступа будет осуществляться только по CPL.

Доступ к данным в сегменте кода.

В некоторых случаях может понадобиться доступ к данным (точнее - чтение), содержащимся в сегменте кода; для этого возможны следующие способы:

Загрузить в сегментный регистр данных селектор сегмента кода, разрешённого для чтения.
Использовать префикс замены сегмента для чтения сегмента кода, разрешённого для чтения, чей селектор уже загружен в регистр CS.

Текущий уровень привилегий - CPL (Current privilege level). CPL - это уровень привилегий текущего исполняемого кода. Он хранится в битах 0 и 1 регистров CS и SS. Обычно, CPL равен уровню привилегий сегмента кода, из которого выбираются команды. Процессор меняет CPL, когда управление передаётся сегменту кода с другим уровнем привилегий. CPL интерпретируется немного иначе, когда управление передаётся подчинённому сегменту кода. Подчинённый сегмент кода доступен с тех уровней привилегий, которые численно не меньше, чем DPL подчинённого сегмента кода. CPL не меняется, когда происходит передача управления на подчинённый сегмент кода, имеющий уровень привилегий, отличный от CPL.

Передача управления между уровнями привилегий. подчиненные сегменты кода.

Передача управления между уровнями привилегий.

Довольно часто встречается ситуация, когда необходимо передать управление между уровнями привилегий. Например, такая ситуация возникает при необходимости вызова стандартной подпрограммы операционной системы из прикладной программы. Или позволить прикладной программе прочитать данные из ядра операционной системы. Поскольку защита по привилегиям не разрешает такие действия напрямую, это осуществляется двумя косвенными методами: с использованием сегментов подчиненного кода и шлюзов вызова.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: