5. Защита    
 СОДЕРЖАНИЕ
 Введение
 1. Развитие архитектуры
 2. Структура МП
 3. Ресурсы МП
 4. Управление памятью
 5. Защита
 6. Многозадачность
 7. Прерывания и исключения
 8. Инициализация МП
 9. Эмуляция 8086
 Глоссарий
 ПРАКТИКА
 1. Семантический разрыв
 2. CPUID
 3. Защищенный режим
 Вопросы и задания

5.5. Защита на уровне страниц

Совместно с защитой на уровне сегментов, процессор может использовать защиту на уровне страниц. Особенно это удобно при использовании сплошной модели памяти, когда и операционная система, и прикладные программы работают в едином пространстве логических адресов, т.к. защита на уровне страниц может обеспечить разграничение привилегий для страниц операционной системы и прикладных программ. Защита на уровне страниц предоставляет два типа контроля: ограничение адресного пространства (страницы супервизора и страницы пользователя) и ограничение типа доступа (доступ только для чтения и доступ на чтение-запись). Если проверки не проходят, генерируется страничное нарушение (исключение #14).

На правила защиты на уровне страниц влияют следующие биты:

Ограничение адресного пространства на уровне страниц обеспечивается двумя уровнями привилегий: режим супервизора (уровень 0) и режим пользователя (уровень 1). Режим супервизора соответствует привилегиям на уровне сегментов CPL=0, CPL=1 и CPL=2. В режиме супервизора доступны все страницы. Режим пользователя соответствует привилегиям на уровне сегментов CPL=3. В режиме пользователя доступны только страницы пользователя.

В адресное пространство супервизора попадают страницы, для которых соответствующий элемент таблицы страниц ИЛИ каталога таблиц содержит бит US=0. В адресное пространство пользователя попадают страницы, для которых И соответствующий элемент таблицы страниц, И соответствующий элемент каталога таблиц содержат бит US=1.

В определенных случаях процессор обращается к памяти в режиме супервизора вне зависимости от текущего уровня привилегий:

В МП Intel386 ограничение типа доступа применяется только в адресном пространстве пользователя. Программа в режиме пользователя имеет право изменять только те страницы, для которых И соответствующий элемент таблицы страниц, И соответствующий элемент каталога таблиц содержат бит RW=1. Если для какой-либо страницы элемент таблицы страниц ИЛИ элемент каталога таблиц содержит бит RW=0, то страница доступна только для чтения. В режиме супервизора все страницы доступны и для чтения, и для записи.

В МП Intel486 и более поздних возможно применение контроля доступа в режиме супервизора, если бит CR0.WP=1. Тогда попытка обращения к странице, для которой элемент таблицы страниц или элемент каталога таблиц содержит бит RW=0, приводит к страничному нарушению на любом уровне привилегий. Это свойство операционные системы могут использовать для реализации механизма "copy-on-write" ("копирование при записи"). Например, Unix при создании нового процесса вызовом fork(), может для дочернего процесса создать набор страниц только для чтения, отображенный в то же физическое пространство, что и родительский процесс. Когда дочерний процесс попытается изменить какие-либо данные, по страничному нарушению операционная система выполнит фактическое копирование изменяемой страницы.

Когда используются оба вида защиты и на уровне страниц, и на уровне сегментов, процессор сначала выполняет проверки защиты сегментов, и только в случае успеха - проверки защиты страниц. Т.е. если доступ к памяти отвергается защитой на уровне сегментов, то будет сгенерировано нарушение общей защиты, а проверки защиты страниц выполняться не будут и дополнительно страничное нарушение не возникнет. Если проверки защиты сегментов проходят успешно, но нарушаются правила защиты страниц, генерируется страничное нарушение. Доступ к памяти предоставляется, только когда выполнены все правила и для сегментов, и для страниц.