Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux内核中的PTE结构_Linux_Linux Kernel_Paging - Fatal编程技术网

linux内核中的PTE结构

linux内核中的PTE结构,linux,linux-kernel,paging,Linux,Linux Kernel,Paging,我一直试图在linux源代码中查找与禁用PAE的x86系统上的PTE相对应的结构/联合。到目前为止,我在arch/x86/include/asm/page_32.h中只找到了以下内容 typedef union { pteval_t pte; pteval_t pte_low; } pte_t; 我现在有点困惑,因为我面前打开了《英特尔参考手册》第3A卷,而该联合体中没有任何内容与PTE中的十几个字段相对应,正如手册所解释的那样 这可能是一个微不足道的问题,但对

我一直试图在linux源代码中查找与禁用PAE的x86系统上的PTE相对应的结构/联合。到目前为止,我在arch/x86/include/asm/page_32.h中只找到了以下内容

typedef union {
        pteval_t pte;
        pteval_t pte_low;
} pte_t;
我现在有点困惑,因为我面前打开了《英特尔参考手册》第3A卷,而该联合体中没有任何内容与PTE中的十几个字段相对应,正如手册所解释的那样

这可能是一个微不足道的问题,但对我来说,它更像是理解linux内核内存管理过程中的绊脚石


编辑:我随身携带了2.6.29源代码,pteval不只是将页表条目视为一个不透明的blob-在您所看到的体系结构上,它只是一个32位无符号值

PTE中的字段使用位运算符和掩码进行访问-在我手头的源代码(Linux 2.6.24)中,这些字段在
include/asm-x86/pgtable_32.h
中定义。您在《英特尔参考手册》中看到的字段(大多数是单位标志)在此处定义,例如:

#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
我建议从O'REILLY购买,以及。并签署;;即使没有订阅,你也可以从他们的页面获得一个很好的开始


有关内存管理,请在索引页上查找“内存管理”部分。。。以及“大内存系统”部分。后者有几篇文章讨论了迁移到四级页面表的问题,这有助于理解这方面的代码。

您正在查看哪个版本的Linux源代码?