Использует ли Linux self-map для каталога страниц и таблиц страниц? - PullRequest
3 голосов
/ 11 марта 2011

Я просто задаю этот вопрос, потому что мне интересно, как работает ядро ​​Linux. Согласно http://i -web.iu-tokyo.ac.jp / edu / training / ss / lecture / new-documents / Lectures / 02-VirtualMemory / VirtualMemory.ppt Windows использует специальные записи на своей странице каталоги и таблицы страниц с именем self-map для возможности манипулировать содержимым каталога / таблиц страниц из виртуального адресного пространства ядра. Если кто-то знаком с управлением памятью в Linux, скажите, пожалуйста, ядро ​​Linux решает эту проблему похожим или другим способом. Спасибо.

1 Ответ

4 голосов
/ 11 марта 2011

Да, в Linux таблицы страниц также сопоставляются с адресным пространством.Но в структурах данных подкачки в некоторых архитектурах могут использоваться физические адреса.Так что это не исправлено в Linux.Но вы можете легко получить доступ к столу.

Вот код ядра для доступа к таблице страниц

struct mm_struct *mm = current->mm;
pgd = pgd_offset(mm, address);
pmd = pmd_offset(pgd, address);
pte = *pte_offset_map(pmd, address);

Чтобы узнать больше об управлении памятью linux , посмотрите это

Cr3 зарегистрироваться в магазинах IA32указатель базы таблицы страниц (указатель pgd), в котором хранится физический адрес.Это верно даже для Windows (поскольку это особенность процессора x86, а не ОС).

Прочитайте эту статью , чтобы понять подкачку IA32.

Edit2: Структура задачи содержит экземпляр mm_struct , относящийся к управлению памятью этой задачи (то есть процесса), этот mm_struct имеет pgd_t * pgd. load_cr3 загружает физический адрес таблицы каталогов страниц в регистр cr3, но принимает виртуальный адрес pgt.Таким образом, mm_struct содержит виртуальный адрес pgt.

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

...