Прежде всего: этот вопрос касается архитектуры IA-32 (x86).
У меня есть вопрос об устаревшей (не PSE, не PAE) пейджинговой связи. В устаревшей подкачке у нас есть каталог страниц с 1024 записями, каждая из которых указывает на таблицу страниц. Каждая таблица страниц содержит 1024 записи (это страницы), каждая из которых указывает на выровненный 4096-байтовый физический адрес.
Между тем, каждая отдельная запись каталога страниц и запись таблицы страниц содержат несколько флагов, и обе они имеет флаг 'U' (бит № 2): если этот флаг установлен, то страница может быть доступна как пользователю (ring3), так и супервизору (ring0); однако, если этот флаг не установлен, только супервизор (ring0) может получить к нему доступ. Этот флаг часто называют «бит пользователя / супервизора».
Вопрос: что мне делать, если я хочу, чтобы страницы ring0 и ring3 были в одной таблице страниц? Я могу настроить записи в таблице страниц с соответствующими привилегиями, но какую привилегию должна указывать соответствующая запись каталога страниц?
Например: я установил первую таблицу страниц (диапазон виртуальных адресов: 0x00000000 - 0x003FFFFF) ) для отображения диапазона физических адресов 0x00000000 - 0x003FFFFF (это покрывает 4 мегабайта). Первый мегабайт (0x00000000 - 0x000FFFFF) должен быть доступен только супервизору (ring0), поэтому «бит пользователя / супервизора» очищается. Следующие три мегабайта (0x00100000 - 0x003FFFFF) должны быть доступны как пользователю (ring3), так и супервизору (ring0), поэтому «бит пользователя / супервизора» установлен.
На эту таблицу страниц указывает Первая страница каталога. Но «бит пользователя / супервизора» для этой записи каталога страниц должен быть очищен (только супервизор) или установлен (как пользователь, так и супервизор)? В чем разница?