PTE Struktur im Linux-Kernel
-
10-07-2019 - |
Frage
Ich habe versucht, eine Struktur / union in der Linux-Quellcode zu suchen um die deaktiviert zu dem PTE auf x86-System mit PAE entsprechen würde. Bisher habe ich nur die in Bogen folgend gefunden / x86 / include / asm / page_32.h
typedef union {
pteval_t pte;
pteval_t pte_low;
} pte_t;
Ich bin ein wenig verwirrt jetzt, da ich vor dem Intel-Referenzhandbuch Vol 3A von mir und nichts in dieser Vereinigung geöffnet haben entspricht das Dutzend ungeradeen Felder in der PTE als das Handbuch erläutert.
Dies könnte eine triviale Frage, aber für mich hat sich in den Linux-Kernel zu verstehen, Speicherverwaltung eher wie ein Stein des Anstoßes in dem Prozess werden.
EDIT: Ich habe die 2.6.29 Quelle mit mir
Lösung
Die pteval_t behandelt nur den Seitentabelleneintrag als opakes blob - auf der Architektur an der Sie suchen, es ist nur ein 32-Bit-Wert ohne Vorzeichen
. Die Felder innerhalb des PTE verwenden Bitoperatoren und Masken zugegriffen - in der Quelle Ich habe praktisch (Linux 2.6.24), so werden diese in include/asm-x86/pgtable_32.h
definiert. Die Felder, die Sie in der Intel-Referenzhandbuch (von denen die meisten Single-Bit-Flags sind) werden hier definiert - zum Beispiel:
#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
Andere Tipps
würde ich empfehlen den Kauf Verständnis der Linux Kernel von O'Reilly, sowie Linux Device Drivers . Und abonnieren Sie LWN.net ; wenn Sie einen ziemlich guten Start aus ihrem Kernel Index Seite auch ohne Abonnement erhalten können.
Für die Speicherverwaltung, suchen Sie auf der Indexseite für den „Memory Management“ Abschnitt ... und der „Large-Speichersysteme“ Abschnitt. Letztere hat ein paar Artikel, die über den Umzug zu Vier-Ebenen-Seitentabellen sprechen, die in das Verständnis dieser Bereich des Code hilfreich sein sollte.