Структура PTE в ядре Linux - PullRequest
       19

Структура PTE в ядре Linux

3 голосов
/ 18 сентября 2009

Я пытался найти в исходном коде 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 со мной

Ответы [ 2 ]

5 голосов
/ 18 сентября 2009

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
4 голосов
/ 18 сентября 2009

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

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

...