Если pte страницы помечен битом _PAGE_USER равным 0, приведет ли это к сбою страницы или исключению general_protection?

Я пытаюсь понять защиту, обеспечиваемую архитектурой Intel x86 MMU. Я в основном смущен тем, когда MMU вызовет ошибку страницы (page_fault, int 14) и когда ЦП вызовет исключение (ошибка general_protection, int 13). Я знаю, что ЦП обычно вызывает исключение при несоответствии уровней привилегий.

Но кто сопоставляет бит режима пользователя/супервизора с уровнем привилегий, MMU или ЦП?

В частности, я не могу интерпретировать, кто вызовет исключение, когда я сбрасываю флаг _PAGE_USER записи pte страницы, я ожидаю, что ошибка будет вызвана MMU (или это процессор?)

Пожалуйста, укажите мне на ресурсы, если вы можете, чтобы я мог прочитать, если это где-то доступно. Спасибо !


person newbie    schedule 11.08.2014    source источник
comment
Хорошо, я думаю, мне нужно объяснить контекст немного больше. Я пытаюсь отслеживать страницы процесса. Для этого я полагаюсь на этот механизм ошибки страницы. Я защищаю страницы и при возникновении неисправности снимаю защиту после учета. Это не hw или что-то в этом роде. Это то, что я пытаюсь сделать, чтобы добиться чего-то еще, что я должен сделать на x86.   -  person newbie    schedule 11.08.2014


Ответы (1)


Но кто сопоставляет бит режима пользователя/супервизора с уровнем привилегий, MMU или ЦП?

Из (https://software.intel.com/sites/default/files/319433-014.pdf)

Каждый доступ к линейному адресу является либо доступом в режиме супервизора, либо доступом в режиме пользователя. Все доступы, выполняемые, когда текущий уровень привилегий (CPL) меньше 3, являются доступами в режиме супервизора. Если CPL = 3, доступ обычно осуществляется в пользовательском режиме.

Короче говоря, кольцо 3 — это пользователь, кольца 0–2 — руководитель.

В частности, я не могу интерпретировать, кто вызовет исключение, когда я сбрасываю флаг _PAGE_USER записи pte страницы, я ожидаю, что ошибка будет вызвана MMU (или это процессор?)

Ошибка возникает из-за MMU, который является частью процессора на современных компьютерах. Итак, это не имеет большого значения.

Linux Kernel Development Роберта Лава и Understanding the Linux Kernel Даниэля П. Бове отлично освещают эту тему. Первый содержит меньше подробностей о реализации ядра Linux на x86 и, как правило, его легче понять.

person Alexey Shmalko    schedule 14.08.2014
comment
Спасибо за ваш ответ. У меня возникла путаница в отношении ошибки general_protection и ошибки страницы, т. Е. Если бит PAGE_USER равен 0, возникает ошибка страницы или ошибка защиты. Но я понял, что это действительно вызывает ошибку страницы, поэкспериментировав с некоторыми изменениями в коде. - person newbie; 15.08.2014