Да, в 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
.
Так как таблицы страниц находятся в пространстве ядра, а виртуальная память ядра отображается напрямую для ускорения простого макроса.