Защита страниц


Защита работает как на уровне сегментов, так и на уровне страниц. При использовании плоской модели сегментации памяти защита на уровне страниц также предотвращает недопустимое взаимное влияние между программами. Каждая ссылка к памяти контролируется на удовлетворение проверок защиты. Все проверки выполняются до начала цикла обращения к памяти; любое нарушение защиты предотвращает начало этого цикла и генерирует исключение. Существует два вида проверки защиты на уровне страниц:
1. Ограничения на адресуемый домен памяти.
2. Проверка типа.
Нарушение защиты приводит к генерации исключения.
Для страниц и сегментов понятие привилегированности интерпретируется по-разному. Для сегментов существует четыре уровня привилегированности, лежащих в диапазоне от 0 (высший уровень привилегированности) до 3 (низший уровень привилегированности). для страниц существует два уровня привилегированности:
1. Уровень супервизора (U/S=0) — для операционной системы, прочего системного программного обеспечения (например, драйверов устройств), а также для защищаемых системных данных (например, страничных таблиц).
2. Уровень пользователя (U/S=1) — для прикладных кодов и данных.
Уровни привилегированности, используемые в сегментации, отображаются в уровнях привилегированности страниц. Если CPL равен 0, 1 или 2, то процессор работает на уровне супервизора. Если же CPL равен 3, то процессор работает на уровне пользователя. Когда процессор работает на уровне супервизора, все страницы являются доступными. Когда процессор работает на уровне пользователя, доступны только страницы, имеющие уровень пользователя.
Проверка типа
Механизмом защиты распознаются только два вида страниц: 1. Доступ Только для Чтения (R/W=0) 2. Доступ на Чтение/Запись (R/W=1).
Когда процессор работает на уровне супервизора при очищенном бите WP в регистре CR0 (в состоянии бита, соответствующем инициализации при сбросе системы), все страницы являются одновременно доступными для чтения и записи (признак защиты записи игнорируется). Когда процессор работает на уровне пользователя, то для записи доступны лишь страницы уровня пользователя, помеченные признаком Чтение/Запись. Страницы уровня пользователя, помеченные для Чтения/Записи или Только для Чтения, являются доступными для чтения. Страницы уровня супервизора с уровня пользователя недоступны ни для чтения, ни для записи. При попытке нарушения прав доступа к защищенным страницам генерируется исключение общей защиты.
Переопределение защиты страниц
Некоторые виды доступа проверяются, как имеющие уровень привилегированности 0, для любых значений CPL:
— Доступ к дескрипторам сегментов (LDT, GDT, TSS и IDT).
— Доступ к внутреннему стеку по время выполнения команды CALL, или исключений и прерываний, когда происходит изменение уровня привилегированности.
Объединение защиты сегментов и страниц
При разрешенном механизме подкачки страниц процессор i486 сначала выполняет проверки защиты сегмента, а затем проверки защиты страницы. Если процессор обнаруживает нарушение защиты на любом из уровней защиты, как сегмента, так и страницы, выполнение не продолжается: генерируется исключение. Если исключение генерируется механизмом защиты сегментов, исключение защиты страниц не генерируется.

Загрузка...