无法理解页面地址扩展的过程

时间:2019-12-30 15:21:40

标签: operating-system

我试图弄清页面地址扩展的工作方式,并阅读了维基百科的一些参考资料,最后的图片是PAE的经典结构。但是我仍然不知道为什么这行得通。

以下是我的问题

  1. Dir.pointer条目的大小是多少? 32位?

  2. 任何人都可以解释有关事实PAE map 32 bits virtual address to 36 bits physical address的详细信息吗?

enter image description here

1 个答案:

答案 0 :(得分:0)

(Q1):每个 Dir.Po​​inter 条目都是64位,并且这些条目与 Page Directory 条目和 Page Table < / em>条目。大致来说,因为尽管共享了布局,但是保护和内存类型位的解释却大不相同。

在经典的32位+ PAE中,cr3寄存器包含第31..5位中第一个 Dir.Po​​inter 条目的物理地址。位4..0被忽略,但可能应为零。 4个 Dir.Po​​inters 的集合必须对齐32字节。由于该寄存器的大小限制,该Dir.Po​​inter表必须位于地址空间的低4G中。

在P(DP | PD | PT)条目中,此位的布局如下:

63 -- no execute ( this page cannot execute )
62..M -- must be zero (later ignored).
(M-1)..12 -- upper M-12 bits of physical address
11..0 -- protection, size and type bits.

M是lg(MAX_PHYSICAL_ADDRESS),可以是运行时确定的值。

(Q2):因此,当处理器找到对应于虚拟地址V的(4k)页表条目时,它发出:

 (v & 0xfff) | ((PTE (M-1)..12) << 12)

作为物理地址。 如果发现PD条目指定了较大的页面,它将发出:

 (v & 0xfffff) | ((PDE (-1)..20) << 20)

作为物理地址。

地址中的物理位比虚拟位多没有关系。给定的进程(地址空间)只能引用4G的存储器/设备地址。多个进程可能同时处于活动状态,每个进程都有4G的非重叠映射或部分重叠映射。因此,系统支持64G的ram,但每个进程可能只能看到4G。