我知道linux在内存管理中使用三级页表。
我对页面表的内容感到困惑。页面表 包含下一级页表的基本地址或它包含页框 号码?
如果它包含页面帧编号,那么它的基址如何 得到特定的页面表?它存储在哪里?
如果有人向我澄清这一点会很棒。
答案 0 :(得分:1)
如果你在谈论x86(/ 64),那么每个页表项(终端除外)都包含下一页表的物理地址,终端PTE包含实际代码/数据的物理地址页。
由于页面表本身被组织为页面,因此它们的物理地址自然是页面大小的倍数。
在PTE中存储完整的物理地址毫无意义,12个最低有效位始终为零(如果页面大小为4KB),因此它们不存储在PTE中(以及存储在PTE中的已恢复空间) PTE用于控制标志,例如内核/用户,只读/可写,可执行,存在,脏,访问等。像这样被截断的地址通常被称为页框号,因为它们只是页码(如果你计算地址为0的页面为0的所有页面,地址为4096的页面为1,依此类推)。
所有血腥细节的问题的最终答案都在相关的CPU手册中。