Установка, сброс защиты


В защищенном режиме процессор поддерживает 2 уровня защиты: сегментная и страничная.
Установка механизма защиты происходит при переходе процессора в защищенный режим при установке флага РЕ в регистре флагов CR 0. Включение страничного механизма защиты происходит при установлении флага PG в регистре CR 0. Способ косвенного отклонения страничной защиты: сбрасывание флаг WP в регистре CR 0; установка флага чтения/записи и R/W флаг U/S.
Поля и флаги используемые в механизме защиты.
Если S=0, то системный сегмент, S=1, поле type 0 – данные, 1 – код.
Флаг S – тип дескриптора, 12-й бит в двойном слове.
Поле Type – с 8 по 11 бит во 2-ом двойном слове. Хранит информацию, какого типа этот дескриптор. Поле длины сегмента – одинаковое для всех 3-х (1-ое двойное слово).
Флаг G – 23-й бит во втором двойном слове, определяет гранулярность сегмента.
Бит E – 10 –й бит во 2 двойном слове, влияет на действие механизма защиты.
Поле DPL – уровень привилегий дескриптора, 13,14 бит 2 дв. Слова
Поле CPL – текущий уровень привилегий, в 0 и 1 бите регистре CS, показан текущий уровень выполняемой программы.
Флаг U/S — 2-ой бит таблицы каталогов (таблицы страниц) 0- пользовательская страница, 1- супервизор.
Флаг R/W – 1-й бит таблицы каталогов (страниц) определяет тип доступа к страницам
Все поля и флаги устанавливаются процессором при создании дескриптора
Проверка границы сегмента
Т.к. размер сегмента плавающий, надо проверять имеет ли право доступа процессор к этой ячейке. Зависит от флага G (единица измерения 1 байт или 4 Кб ), флаг В используется для определения доступа 32 или 16 битных, флаг Е признак или направление расширения.
Расширение вниз для поля Е возможно только для сегмента данных.
Е=1 – память растет вниз
Проверка типа
Процессор использует флаг S и поле Type. S=0 – системный сегмент, S=1 – данные или код (в зависимости от старшего бита поля Type).
Основная операция IO, при которой производится проверка. 1.При загрузке селектора в сегментный регистр. Если загружен стековый регистр, то может быть загружен сегментом данных разрешением записи W=1. 2.Попытка инструкции обратиться к текущему сегменту ( а) попытка записи в текущий сегмент кода, б) попытка записи в сегмент данных по чтению, в) попытка чтения кодового сегмента при запрете чтения). 3.Доступ к нулевому селектору сегмента.
Проверка уровней привилегий
0 – уровень имеет больше всего доступа, предназначен для ядра ОС, 1 и 2 – для окружения ОС (драйверов), 3- для прикладных ПО
При попытке доступа к уровню, который не имеет сегмент процессор генерирует ошибку.
CPI – уровень привилегий текущей программы, хранится в CS и SS
DPL- уровень привилегий сегмента или шлюза
Хранится в поле DPL дескриптора
КЗД – запрашиваемый уровень привилегий располагается в сегментном регистре, используется с СPL, для определения имеет ли программа право доступа к какому либо сегменту.
Для сегмента данных: DPI – показ наивысшее уровень привилегии, который должен иметь кодовый сегмент для доступа к сегменту данных.
Шлюз: DPL интерпретирует как у данных.
Для кодовых сегментов: не конформный (С=0) к данному кодовому сегменту могут обратиться только более привилегированные сегменты, конформный (С=1) доступ могут иметь сегмент, уровень привилегий которого меньше, чем у текущего кодового сегмента.

Загрузка...