Глава 7. Защита на уровне страниц.
При использовании защиты на уровне страниц, каждое обращение к памяти проверяется до того, как оно произойдёт и при выявлении нарушений, генерируется исключение страничного нарушения. Эта проверка происходит параллельно трансляции адреса и не приводит к потере производительности.
Процессор выполняет две проверки защиты на уровне страниц:
Ограничение адресного пространства (системный и пользовательский режимы).
| Тип страницы (только чтение или чтение/запись).
| |
Защитная информация для страниц хранится в двух флагах каждого элемента каталога или таблицы страниц:
флаг чтения/записи (бит 1 элемента),
| флаг система/пользователь (user/supervisor) (бит 2 элемента).
| |
Ограничение адресного пространства.
Защитный механизм страниц, позволяющий ограничить доступ к страницам, основан на двух уровнях привилегий:
Режим системы (supervisor mode - флаг U/S равен 0) - Наиболее привилегированный. Для ядра операционной системы и защищённых страниц кода (например, драйверы) и данных (например, таблицы страниц).
| Режим пользователя (user mode - флаг U/S равен 1) - Не привилегированный. Для прикладного кода и данных.
| |
Если процессор находится на нулевом уровне привилегий, то он работает в режиме системы, если на любом другом уровне (1, 2 или 3) - то в режиме пользователя.
В режиме системы процессору доступны все страницы, в режиме пользователя - только пользовательские.
Если операционная система использует плоскую модель памяти, в которой сегменты могут перекрываться, то защита на уровне сегментов не всегда действует, т.к. сегмент прикладной программы может быть отображён на системный сегмент и единственной защитой по привилегиям остаётся защита на уровне страниц.
Тип страницы.
Есть два типа страниц:
С доступом только для чтения (флаг R/W равен 0).
| С доступом по чтению и записи (флаг R/W равен 1).
| |
Когда процессор находится в режиме системы и флаг WP в CR0 сброшен (это его состояние после инициализации), все страницы являются доступными для чтения и записи (защита от записи игнорируется). Когда процессор находится в режиме пользователя, он может записывать только в пользовательские страницы с доступом по чтению и записи. Системные страницы для процессора в таком режиме не доступны и при попытке обращения к ним, процессор генерирует исключение страничного нарушения.
Процессоры семейства P6, Pentium и Intel486 позволяют защитить пользовательские страницы от записи процессором, находящимся с режиме системы. Это делается установкой в 1 флага WP в регистре CR0.
Атрибуты защиты для страниц в таблице страниц, могут отличаться от атрибутов, установленных в самой таблице страниц. Совместное действие этих атрибутов, при сброшенном флаге WP, показано в таблице 4-2.
Совместная защита на уровне сегментов и страниц.
При разрешённом страничном преобразовании, процессор сначала проверяет защиту на уровне сегментов, а потом - на уровне страниц. Если обнаруживается ошибка, процессор не производит обращения к памяти и генерирует исключение.
Защита на уровне страниц не перекрывает защиту на уровне сегментов. Например, сегмент кода по определению на записываемый; установка страниц, на которые он отображён, как страницы с доступом по чтению и записи всё равно не делает возможным запись в сегмент кода.
Элемент каталога страниц | Элемент таблицы страниц | Совместный эффект | |||
Приви- легия | Тип доступа | Приви- легия | Тип доступа | Приви- легия | Тип доступа |
User | Только чтение | User | Только чтение | User | Только чтение |
User | Только чтение | User | Чтение и запись | User | Только чтение |
User | Чтение и запись | User | Только чтение | User | Только чтение |
User | Чтение и запись | User | Чтение и запись | User | Чтение и запись |
User | Только чтение | System | Только чтение | System | Чтение и запись* |
User | Только чтение | System | Чтение и запись | System | Чтение и запись* |
User | Чтение и запись | System | Только чтение | System | Чтение и запись* |
User | Чтение и запись | System | Чтение и запись | System | Чтение и запись* |
System | Только чтение | User | Только чтение | System | Чтение и запись* |
System | Только чтение | User | Чтение и запись | System | Чтение и запись* |
System | Чтение и запись | User | Только чтение | System | Чтение и запись* |
System | Чтение и запись | User | Чтение и запись | System | Чтение и запись* |
System | Только чтение | System | Только чтение | System | Чтение и запись* |
System | Только чтение | System | Чтение и запись | System | Чтение и запись* |
System | Чтение и запись | System | Только чтение | System | Чтение и запись* |
System | Чтение и запись | System | Чтение и запись | System | Чтение и запись |
Примечание:
* | Если флаг WP в CR0 установлен, тип доступа определяется флагом R/W элемента каталога или таблиц страниц. |
Оглавление | Вопросы? Замечания? Пишите: sasm@narod.ru |
Copyright © Александр Семенко. |