Struttura PTE nel kernel Linux
-
10-07-2019 - |
Domanda
Ho cercato di cercare nel codice sorgente di Linux una struttura / unione che corrispondesse alla PTE sul sistema x86 con PAE disabilitato. Finora ho trovato solo quanto segue in arch / x86 / include / asm / page_32.h
typedef union {
pteval_t pte;
pteval_t pte_low;
} pte_t;
Sono un po 'confuso in questo momento poiché ho il Manuale di riferimento Intel Vol 3A aperto davanti a me e nulla in quell'unione corrisponde alla dozzina di campi dispari presenti nel PTE come spiega il manuale.
Questa potrebbe essere una domanda banale ma per me è diventata più un ostacolo nel processo di comprensione della gestione della memoria nel kernel di Linux.
EDIT: ho la fonte 2.6.29 con me
Soluzione
pteval_t considera la voce della tabella delle pagine solo come un blob opaco - sull'architettura che stai osservando, è solo un valore senza segno a 32 bit.
I campi all'interno del PTE sono accessibili usando operatori e maschere bit a bit - nella fonte che ho a portata di mano (Linux 2.6.24), questi sono definiti in include / asm-x86 / pgtable_32.h
. I campi visualizzati nel Manuale di riferimento di Intel (la maggior parte dei quali sono flag a bit singolo) sono definiti qui, ad esempio:
#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
Altri suggerimenti
Consiglierei di acquistare Comprensione del kernel Linux da O'REILLY, nonché Driver di dispositivo Linux . E iscriversi a LWN.net ; anche se puoi iniziare piuttosto bene dalla loro indice del kernel anche senza abbonamento.
Per la gestione della memoria, cerca nella pagina dell'indice il " Gestione della memoria " sezione ... e i "sistemi a memoria grande" sezione. Quest'ultimo ha alcuni articoli che parlano del passaggio a tabelle di pagine a quattro livelli che dovrebbero essere utili per comprendere quest'area del codice.