December 11 2017 07:51:19
Навигация
Авторизация
Логин

Пароль



Вы не зарегистрированы?
Нажмите здесь для регистрации .

Забыли пароль?
Запросите новый здесь.
уровень привилегий CPL
ФОРМАТЫ ПРЕДСТАВЛЕНИЯ ДАННЫХ И ВЫПОЛНЕНИЕ ОПЕРАЦИЙ

Уровень привилегий запроса RPL задается битами 0,1 селектора, загруженного в сегментный регистр при обращении к соответствующему сегменту. Этот уровень устанавливается выполняемой программой, которая с помощью данного селектора обращается к памяти системы.

img030

Текущий уровень привилегий CPL задается битами 0, 1 селектора, размещенного в регистре сегмента программ CS. Определяет уровень привилегий выполняемого в настоящий момент сегмента программы.

Напомним, что меньшее значение DPL, RPL, CPL соответствует более высокому уровню привилегий (защиты). Наиболее защищенный сегмент имеет значение DPL = 0, наименее защищенный - DPL = 3. Для наименее привилегированных программ пользователя CPL = 3, наиболее привилегированные программы ядра ОС имеют CPL = 0.

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

Обращение к сегментам программ и данных в защищенном режиме производится с учетом описанной выше системы привилегий. При этом правила обращения зависят от типа сегмента.

Обращение к сегментам данных производится с помощью селекторов, загружаемых в регистры DS, ES, FS, GS. При обращении анализируются значения RPL селектора и CPL текущей программы. Эффективный уровень привилегий для запроса данных в этом случае определяется как максимальное из значений RPL и CPL. Обращение к запрашиваемому сегменту данных разрешается, если его уровень защиты DPL >= max(RPL, CPL). Нарушение этого правила при обращении вызывает исключение типа #GP («нарушение общей защиты»).

Таким образом, задавая определенное значение RPL в селекторе, можно управлять доступом текущей программы к сегментам данных, имеющим различный уровень защиты. Например, при RPL = 0 доступ к данным будет определяться значением CPL текущей программы. Если задать RPL = 3, то при любом CPL программа может обратиться только к наименее защищенным сегментам данных, относящимся к кольцу 3.

Обращение к сегменту стека выполняется путем загрузки селектора в регистр SS. Этот селектор должен выбирать дескриптор сегмента с разрешенной записью, т. е. бит 1 в байте доступа должен иметь значение W = 1 (см. рис. 2.43, б). Значения RPL и DPL должны быть равны CPL. Нарушение этих правил (обращение к сегменту, для которого W = 0; использование селекторов и дескрипторов, имеющих значения RPL и DPL, не равные CPL) приводит к исключению типа #GP. При обращении к дескриптору, имеющему значение бита присутствия Р = 0 (отсутствующий сегмент) возникает исключение типа #SS («ошибка обращения к стеку»).

Обращение к сегментам программ (передача управления) реализуется при выполнении команд межсегментного перехода JMP, вызова подпрограммы CALL и возврата из подпрограммы RET, прерывания INT и возврата из прерывания IRET. Правила обращения к сегментам программ зависят от значения бита подчиненности С в байте доступа дескриптора (см. рис. 2.43, а).

Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, авторизуйтесьили зарегистрируйтесь для голосования.

Нет данных для оценки.

Время загрузки: 0.02 секунд 2,294,978 уникальных посетителей