Question

J'ai essayé de chercher dans le code source de Linux une structure / union qui correspondrait à la PTE sur un système x86 avec PAE désactivé. Jusqu'à présent, je n'ai trouvé que les éléments suivants dans arch / x86 / include / asm / page_32.h

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

Je suis un peu confus en ce moment car j'ai 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 la PTE, comme l'explique le manuel.

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

EDIT: j'ai avec moi la source 2.6.29

Était-ce utile?

La solution

pteval_t considère simplement l'entrée de table de pages comme un blob opaque. Dans l'architecture que vous regardez, il s'agit simplement d'une valeur non signée 32 bits.

Les champs de la PTE sont accessibles à l’aide d’opérateurs et de masques au niveau des bits. Dans la source que j’ai sous la 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 d'Intel (dont la plupart sont des indicateurs à un 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

Autres conseils

Je vous conseillerais d'acheter Comprendre le noyau Linux de O'REILLY, ainsi que Pilotes de périphérique Linux . Et en vous abonnant à LWN.net ; bien que vous puissiez prendre un bon départ depuis leur page d'index du noyau même sans abonnement.

Pour la gestion de la mémoire, recherchez sur la page "Gestion de la mémoire" la page d'index. section ... et les " systèmes à grande mémoire " section. Ce dernier contient quelques articles sur le passage aux tables de pages à quatre niveaux qui devraient être utiles pour comprendre cette partie du code.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top