estrutura PTE no kernel linux
-
10-07-2019 - |
Pergunta
Eu tenho tentado a olhar em volta no código fonte do Linux para uma estrutura / união que tinha correspondem ao PTE no sistema x86 com PAE desactivada. Até agora eu encontrei apenas o seguinte no arch / x86 / include / asm / page_32.h
typedef union {
pteval_t pte;
pteval_t pte_low;
} pte_t;
Estou um pouco confuso agora desde que eu tenho o Manual Intel Referência 3A Vol aberto na minha frente e nada no que corresponde sindicais aos campos ímpares dúzia apresentar na PTE como o manual explica.
Esta poderia ser uma questão trivial, mas para mim, tornou-se mais como um obstáculo no processo de gerenciamento de memória entendimento no kernel do Linux.
EDIT: Eu tenho a fonte 2.6.29 comigo
Solução
O pteval_t apenas trata a entrada da tabela de página como um blob opaco -. Na arquitetura que você está olhando, é apenas um de 32 bits valor sem sinal
Os campos dentro do PTE são acessados ??usando operadores bit a bit e máscaras - na fonte que eu tenho à mão (Linux 2.6.24), estes são definidos no include/asm-x86/pgtable_32.h
. Os campos que você vê na Intel Manual de Referência (a maioria dos quais são bandeiras de um único bit) são definidos aqui - por exemplo:
#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
Outras dicas
Eu recomendaria compra Compreender a Linux Kernel da O'Reilly, bem como Linux Device Drivers . E assinando LWN.net ; mas você pode obter um bom começo muito de seu kernel do índice página mesmo sem uma assinatura.
Para o gerenciamento de memória, olhar na página de índice para a seção "Gerenciamento de memória" ... ea seção "sistemas de memória Large". Este último tem alguns artigos que falam sobre a mudança para tabelas de páginas de quatro nível que deve ser útil na compreensão desta área do código.