В защищенном режиме процессор поддерживает 2 уровня защиты: сегментная и страничная.
Уровни привилегий: 0 – самый высокий, 3 – нижний.
Страничный механизм раздела: уровень пользователя, уровень супервизора.
Во время вычисления физического адреса происходит проверка лигитивности (разрешения) доступа к ячейке памяти. Проверка по 6 пунктам
1. Проверка границы
2. Проверка типа
3. Проверка уровня привилегией
4. Ограничение адресного домена
5. Ограничение точек входа в процедуру
6. Ограничение набора команд
Если все удачны то происходит выполнение команды.
Установка механизма защиты происходит при переходе процессора в защищенный режим при установке флага РЕ в регистре флагов 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.Доступ к нулевому селектору сегмента.
