Что если получить доступ к несуществующему физическому адресу в системе X86? - PullRequest
1 голос
/ 26 июня 2019

Я работаю над модулем ядра Linux, который отображает физический диапазон адресов в виртуальное адресное пространство процесса, играя с таблицами страниц процесса.
Тогда у меня в голове возникает вопрос: что произойдет, если PTE будет указывать на несуществующий физический адрес?
Например, мой ноутбук X86 имеет 8 ГБ оперативной памяти, и если PTE имеет значение 0x8000000400001227, то сгенерирует ли ЦП какое-то исключение для доступа к этому недействительному адресу?
Я быстро проверил это, но ничего необычного не произошло, и я запутался полностью.

Пожалуйста, помогите прояснить причину или дайте мне знать, если мне действительно нужно прочитать некоторые документы X86.

1 Ответ

2 голосов
/ 26 июня 2019

Обычно память, считанная в несуществующую память, возвращает все FF, и запись в память отбрасывается.(Для некоторых платформ и / или некоторых диапазонов адресов чтение может возвращать 0. Это зависит от того, как диапазон адресов декодируется набором микросхем.)

Биты записи таблицы страниц 51: M зарезервированы (где M - этоширина физического адреса, поддерживаемая процессором), поэтому, если вы отобразите и попытаетесь получить доступ к адресу, превышающему ширину физического адреса, вы получите ошибку страницы из-за зарезервированного нарушения бита.Я думаю, что M обычно 39 бит для клиентов;больше для серверов.Вы можете узнать значение для вашей системы, используя CPUID с eax = 80000008 и исследуя биты 7: 0 eax.

...