linux - linux中的三级页表

标签 linux linux-kernel

我知道linux在内存管理中使用三级页表。

I got confused on the content of the page table.Does page table contains next level page tables base address or it contains page frame number?

If it contains page frame number then how base address for that particular page table is got?Where is it stored?

如果有人向我澄清这一点,那就太好了。

最佳答案

如果你在谈论 x86(/64),那么每个页表条目(终端除外)都包含下一个页表的物理地址,而终端 PTE 包含实际代码/数据的物理地址页面。

由于页表本身是按页面组织的,因此它们的物理地址自然是页面大小的倍数。

在 PTE 中存储完整的物理地址毫无意义,12 个最低有效位始终为零(如果页面大小为 4KB),因此它们不存储在 PTE 中(并且回收的空间在PTE 用于控制标志,例如内核/用户、只读/可写、可执行、存在、脏、已访问等)。像这样被截断的地址通常称为页框编号,因为它们只不过是页码(如果您从 0 开始计算地址 0 处的页面的所有页面,地址 4096 处的页面从 1 开始的所有页面,依此类推)。

您的问题的最终答案以及所有血淋淋的细节都在相关的 CPU 手册中。

关于linux - linux中的三级页表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12242868/

相关文章:

linux - 通过 USB 驱动器复制 git repo 会导致所有文件显示为已修改

c -/proc 目录是根据请求动态生成的吗?

c++ - unix 中 select 和 poll 系统调用的功能区别

linux - Bash 脚本,查找命令,使用通配符或正则表达式

php - 在保护源代码的同时在 pc 或 Raspberry Pi 上运行本地网络服务器

c++ - 如何在C程序中直接改变显存映射来绘制像素(无需库函数)

linux -/proc/sys/vm/flush_mmap_pages 去哪儿了?

linux - linux如何在应用程序中加载库

debugging - utrace 项目死了吗?

c++ - Gstreamer 元素在 C 程序中不可用,但使用 gst-tools 确实可用