Защита адресного пространства задач. Уровни привилегий. Механизм шлюзов. Уровни привилегий
Надежность
мультипрограммных ОС в МП i80x86
обеспечивается различными механизмами защиты: разделение адресных пространств
задач, введение уровней привилегий для сегментов кода и сегментов данных и т.д.
Они обеспечивают защиту задач друг от друга, защиту ОС от задач, защиту ОС от
её собственных компонентов, защиту задач от собственных ошибок.
Общая
стратегия защиты состоит в следующем. Защита адресного пространства задач
обеспечивается его локальностью.
ОС обеспечивает выделение задачам адресного пространства с помощью
дескрипторных таблиц и таблиц трансляции страничных кадров, располагающихся в
адресном пространстве ОС, недоступном задачам и используемых МП аппаратно.
При плоской модели в
памяти может контролироваться только выход за пределы сегмента, внутри же
сегмента контроль обращения памяти фактически не возможен и любая задача или
поток может испортить адресное пространство другой задачи. Для взаимодействия
задач с разными адресными пространствами необходимо иметь общее адресное
пространство. В этом случае для защиты ОС используется механизм защиты
сегментов с помощью уровней привилегий.
Для предотвращения
доступа задач в адресное пространство ОС в МП предусмотрено 2 режима работы: супервизора (доступ ОС и выполнение действий по
всем адресам адресного пространства) и пользовательский (ограничение набора выполняемых команд
и обнаружение и пресечение недопустимых действий). Можно говорить о разных
уровнях привилегий этих режимов.
В МП i80х86 имеется 4 уровня привилегий или
колец защиты: 0=00, 1=01, 2=10, 3=11.
При этом уровень 00
самый высокий (уровень ОС), а уровень 11 самый низкий (уровень прикладных
программ). Уровень 01 используется для программ системного сервиса (обслуживание
аппаратуры, драйверов ввода-вывода), а уровень 10 для программ
пользовательского интерфейса, СУБД и т.д. Для специальных системных функций,
являющихся по отношению к ОС приложениями, чаще всего используются уровни 0 и
3.
Уровень
привилегий задач определяет, какие команды в них можно использовать. А также,
какое подмножество сегментов и страниц в их адресном пространстве они могут
обрабатывать.
Основными
системными объектами, которыми манипулирует процессор при работе в защищённом режиме, являются дескрипторы. Дескрипторы
сегментов содержат информацию об уровне привилегий соответствующего сегмента
кода или данных. Уровень привилегии исполняющейся задачи определяется значением
поля привилегии из дескриптора её текущего кодового сегмента. В каждом дескрипторе
сегмента есть поле DPL в байте прав доступа. Кроме этого есть
следующие уровни привилегий: CPL, RPL и EPL.
Поле DPL (direct privilege level) текущего сегмента становится полем CPL (current privilege level). При обращении к
какому-нибудь сегменту в нужном селекторе указывается запрашиваемый уровень
привилегий RPL.
В пределах одной
задачи используются сегменты с одним и тем же уровнем привилегий. Механизм
проверки привилегий работает при межсегментных обращениях, когда участвуют
целевой (к которому мы обращаемся) сегмент и текущий сегмент кода (из которого
идёт обращение). Процессор сравнивает значения CPL, RPL, DPL на основе понятия
эффективного уровня привилегий:
EPL = max (RPL,DPL)
Доступ к сегменту
ограничивается по следующим правилам:
1) при доступе к
сегментам данных проверяется условие:
CPL ≤ EPL,
т.е. уровень
привилегий запрашиваемого сегмента должен быть не выше, чем у запрашивающего, иначе
существует опасность изменения данных с более высоким уровнем привилегий, что
воспринимается, как ошибка и вызывает прерывание;
2) при доступе к
сегменту кодов проверяется условие:
CPL = DPL = RPL,
т.е. сегмент,
адресуемый сегментным регистром SS, должен иметь уровень привилегий равный
уровню текущего сегмента кода. Каждому уровню привилегий сегментов кода соответствует
свой стек, т.е. их четыре;
3) передача управления из
высокопривилегированного сегмента кода в низкопривилегированный сегмент кода
должна сопровождаться проверкой условия:
DPL = CPL.
|