Вопрос

Я пытался посмотреть в исходном коде linux структуру / объединение, которое соответствовало бы PTE в системе x86 с отключенным PAE. Пока что я нашел только следующее в arch / x86 / include / asm / page_32.h

typedef union {
        pteval_t pte;
        pteval_t pte_low;
} pte_t;

Я сейчас немного сбит с толку, поскольку передо мной открыто справочное руководство Intel Vol 3A, и ничто в этом объединении не соответствует дюжине нечетных полей, присутствующих в PTE, как объясняется в руководстве.

Это может быть тривиальный вопрос, но для меня это стало больше камнем преткновения в процессе понимания управления памятью в ядре Linux.

РЕДАКТИРОВАТЬ: у меня есть источник 2.6.29 со мной

Это было полезно?

Решение

pteval_t просто обрабатывает запись таблицы страниц как непрозрачный большой двоичный объект - в архитектуре, которую вы просматриваете, это просто 32-битное значение без знака.

Доступ к полям в PTE осуществляется с помощью побитовых операторов и масок - в источнике, который мне удобен (Linux 2.6.24), они определены в include / asm-x86 / pgtable_32.h . Поля, которые вы видите в Справочном руководстве Intel (большинство из которых являются однобитными флагами), определены здесь, например:

#define _PAGE_PRESENT   0x001
#define _PAGE_RW    0x002
#define _PAGE_USER  0x004
#define _PAGE_PWT   0x008
#define _PAGE_PCD   0x010
#define _PAGE_ACCESSED  0x020
#define _PAGE_DIRTY 0x040
#define _PAGE_PSE   0x080   /* 4 MB (or 2MB) page, Pentium+, if present.. */
#define _PAGE_GLOBAL    0x100   /* Global TLB entry PPro+ */
#define _PAGE_UNUSED1   0x200   /* available for programmer */
#define _PAGE_UNUSED2   0x400
#define _PAGE_UNUSED3   0x800

Другие советы

Я бы порекомендовал приобрести Понимание ядра Linux у O'REILLY, а также Драйверы устройств Linux . И подписаться на LWN.net ; хотя вы можете получить довольно хорошее начало со страницы индекса ядра даже без подписки.

Для управления памятью посмотрите на странице индекса «Управление памятью». раздел ... и "Системы с большой памятью" раздел. В последнем есть несколько статей, в которых рассказывается о переходе на четырехуровневые таблицы страниц, которые должны помочь в понимании этой области кода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top