2014-01-21 1 views

ответ

1

Я думаю, вы немного смущены. Адресное пространство ядра находится над адресом 0xC0000000. Биты в каталоге страниц указывают на таблицу страниц. Нечто подобное на 32 бита архитектуре с размером страницы 4KB:

  1. Первых десяти бит в точке адреса в каталог Page
  2. Вторые десять бит в точке адреса к Page Table
  3. Последние 12 битов в точке адреса на странице

Давайте посмотрим, как это делается (грубо) для виртуального адреса 0x2003ff01:

  1. Первые десять битов: 0x80 добавляются как смещение глобального каталога страницы (указываемой cr3 регистра в архитектуре x86). Сохраненный там адрес должен соответствовать таблице страниц процесса.
  2. Вторая десятка бит: 0x3FF соответствует таблице страниц. Это смещение добавляется к указателю таблицы страниц, и вы получаете адрес страницы, которую ищете.
  3. Добавить последние 12 бит в указатель страницы и получить ячейку памяти, которую вы искали.

Это более или менее то, как процесс выполняется в Linux. Я пропустил много спецификаций, просто хотел дать общее объяснение.

Надеюсь, это поможет!

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