从虚拟内存转换为物理内存?

时间:2021-07-21 09:53:23

标签: linux memory memory-management frame page-tables

在 32 位操作系统中,从虚拟内存到物理内存的转换是这样完成的:

enter image description here

但是在 64 位中它是这样完成的:

enter image description here

这真的很奇怪吗?为什么 32 位的第一层是 PDE,而 64 位的第一层不是?加上 64 位为什么除了最后一个都不是 PDE。 (由于 PTE 持有一些与物理内存相关的标志,所以为什么要重复 3 次相同的信息)?

1 个答案:

答案 0 :(得分:0)

intel 文档中有这样的 64 位条目:

PML4-Entry -> [anon., Pg. Dir. Ptr.] -> Pg. Dir-Entry ->
-> Page Tbl.-Entry -> phys. Address.

最后两个(表格和目录)每个人都可以同意,但在上层就不太清楚了。

所以你的第二个数字以不具体的方式使用 PTEPSE 可能是一个更笼统的术语:

<块引用>

CR3 的格式和分页结构条目与 4 级分页 和 5 级分页

(SDM 第 3 卷中图 4-11 的标题;还包含 PDPTEPML4EPML5E 作为缺失名称)


PTE 唯一的独特之处似乎是 PAT。除PML4和PML5外,其他级别也有细微差别。

一个PDPTE(级别3)可以容纳一个PD-Address,也可以容纳一个1GB的页面;然后需要“物理”标志(对于 PAT,使用不同的位)。

PDE 和直接 2MB 页面框架相同。

这给出了三组分页结构:

PML5, PML4: for hierarchical access
PDPT, PD:   for hier. and (or) direct mapping
PT:         for mapping 

物理布局是统一的,但语义在不同级别之间略有变化。甚至 CR3 也可以保存 PML4 或 PML5 表地址。