Как устанавливаются разрешения для сегментов памяти в Linux x86_64 и x86 - PullRequest
0 голосов
/ 03 июля 2018

Я уже давно пытаюсь это выяснить. Я читал, что в Linux используется подкачка страниц, а DEP обеспечивается путем пометки страницы как неисполняемой. Но как насчет разрешений на чтение / запись? Как глобальная таблица дескрипторов и регистры сегментов вступают в игру? Я прочитал, что таблицы глобальных и локальных дескрипторов содержат разрешения для каждого сегмента. Так это таблицы, которые управляют разрешениями или структурами области VM, поддерживаемыми ядром?

1 Ответ

0 голосов
/ 04 июля 2018

регистры сегментов x86 не вступают в игру (за исключением FS или GS для локального хранилища потоков). Сегментация не используется для управления чтением / записью, это делается отдельно для каждой страницы с записями таблицы страниц.

Linux отслеживает сопоставления в своих собственных структурах данных отдельно от таблиц аппаратных страниц, чтобы выяснить, что поместить в таблицы страниц HW.

Аппаратная запись таблицы страниц (по одной на страницу) имеет бит только для чтения и чтения-записи. Это существовало даже в унаследованном формате таблицы страниц, до того, как новый формат таблицы страниц (длинный режим PAE и x86-64) представил бит No-eXecute для DEP.

См. Почему в 64-битном виртуальном адресе длина 4 бита (длина 48 бит) по сравнению с физическим адресом (длина 52 бита)? для диаграммы формата таблицы страниц x86-64 и ссылки на больше документов.

Таблицы страниц в 32-битном режиме PAE в основном одинаковы. См. https://wiki.osdev.org/Paging#MMU для разбивки битов, в частности, бит R в каждом аппаратном PTE контролирует то, что делает аппаратное обеспечение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...