2011-01-28 3 views
7

Учитывая, что в Linux и 32-битной архитектуре x86 существует разделение 3: 1 доступного адресного пространства 4 ГБ. Пользовательскому пространству выделяется 0-3 Гб, а для ядра - 3-4 Гб. Как виртуальный адрес, который больше 3Gb и, следовательно, попадает в адресное пространство ядра, преобразуется в физический адрес? Будут ли отображаться таблицы страниц?преобразование виртуального адреса ядра

ответ

5

В книге Мела Гормана есть Understanding the Linux Virtual Memory Manager.

Короткий ответ: Да, ядро ​​устанавливает таблицы страниц для перевода физического адреса 0 на виртуальный адрес 3 GiB. (Раздел 3.7.1). Это включает физическое местоположение, в которое загружено ядро ​​(обычно 1 МБ на x86).

+0

Спасибо за ответ. После выполнения некоторых поисковых запросов я обнаружил, что существует #define PAGE_OFFSET, который имеет 3 ГБ (настраивается), и виртуальный адрес ядра имеет один к одному сопоставление с физическим адресом, полученным просто вычитанием PAGE_OFFSET из виртуального адреса ядра и, следовательно, без использования таблиц страниц. пожалуйста, поправьте меня, если я ошибаюсь. – user593575

+1

Это простое сопоставление делает реализацию virt_to_phys() простой: как вы сказали, просто вычтите PAGE_OFFSET. Но пейджинг включен - это позволяет переносить виртуальные адреса на физическое оборудование, так как команды извлекаются и данные доступны. –

+0

У меня есть ваше мнение. Таблицы страниц всегда используются, когда пейджинг включен, независимо от того, какой виртуальный адрес принадлежит ядру или пользовательскому пространству. (Увы, я не могу проголосовать, так как он требует минимум 15 очков) – user593575

Смежные вопросы