2009-09-17 4 views
3

J'ai essayé de chercher dans le code source linux une structure/union qui correspondrait au PTE sur le système x86 avec PAE désactivé. Jusqu'à présent, j'ai trouvé que ce qui suit dans arch/x86/include/asm/page_32.hStructure PTE dans le noyau linux

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

Je suis un peu confus en ce moment depuis que je suis le Manuel de référence Intel Vol 3A ouvert devant moi et rien dans cette union ne correspond à la douzaine de champs impairs présents dans le PTE comme l'explique le manuel.

Cela peut être une question triviale, mais pour moi, il est devenu plus comme une pierre d'achoppement dans le processus de compréhension de la gestion de la mémoire dans le noyau Linux.

EDIT: J'ai la source 2.6.29 avec moi

+0

Quelle version de la source Linux regardez-vous? – caf

Répondre

5

Le pteval_t traite juste l'entrée de table de page comme un blob opaque - sur l'architecture que vous regardez, il est juste une valeur non signée 32 bits.

Les champs dans le PTE sont accessibles en utilisant des opérateurs et des masques au niveau du bit - dans la source que j'ai à portée de main (Linux 2.6.24), ils sont définis dans include/asm-x86/pgtable_32.h. Les champs que vous voyez dans le Manuel de référence Intel (dont la plupart sont des drapeaux sur un seul bit) sont définis ici - par exemple:

#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 
+0

Ah, merci :) Ça clarifie à peu près tout – user108127

4

Je recommande l'achat Understanding the Linux Kernel de O'REILLY, ainsi que Linux Device Drivers. Et vous abonner à LWN.net; Bien que vous puissiez obtenir un bon début à partir de leur page kernel index même sans abonnement.

Pour la gestion de la mémoire, consultez la page d'index de la section "Gestion de la mémoire" ... et la section "Systèmes de grande mémoire". Ce dernier a quelques articles qui parlent du passage à des tables de pages à quatre niveaux qui devraient être utiles pour comprendre cette zone du code.

+0

Merci. Je regarde en ce moment LWN – user108127

Questions connexes