linux - linux内核中的PTE结构

标签 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 内核内存管理过程中的绊脚石。

编辑:我有 2.6.29 源代码

最佳答案

pteval_t 只是将页表条目视为一个不透明的 blob - 在您正在查看的架构上,它只是一个 32 位无符号值。

PTE 中的字段使用按位运算符和掩码访问 - 在我手边的源代码中(Linux 2.6.24),这些在 include/asm-x86/pgtable_32.h 中定义。您在 Intel 引用手册中看到的字段(大部分是单位标志)在这里定义 - 例如:

#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

关于linux - linux内核中的PTE结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1441353/

相关文章:

linux - 从 Linux shell 将多个文件从一个目录复制到另一个目录

linux - 通过内核模块轮询循环设备

c - 隐藏报告描述符 : wrong padding

linux - 内核态上下文切换时如何保持原子性?

python - Freebase:使用游标有配额限制吗?

java - Hibernate获取链接到当前用户的对象

linux - 如何使用 UNIX 命令获取具有最大年龄的人的姓名

linux - 如何使用 unix shell 脚本将多个 csv 文件合并到一个 Excel 工作表中?

linux - ssh mysqldump 从 oscent 到远程服务器

python - 这是你分页的方式,还是有更好的算法?