x86地址space计算PAE为36位

x86 address space calculation PAE to 36 bits

我很难理解 PAE。我知道它通过 PDPT 创建了第三级间接寻址,因此地址转换从 CR3 -> PDPT(4 个条目) -> PD(512 个条目) -> PT (512 个条目) -> PAGE (4096)。但是地址还是32位的,这个方案怎么得到36位的地址呢?我很感激一个例子。添加另一个 table 如何“增加”地址 space?

PAE 不会改变 32 位虚拟地址,只会改变它们映射到的物理地址的大小。 (这很糟糕,虚拟地址 space 远远不够一次映射所有这些物理页面。Linus Torvalds 写了一篇关于 PAE 的精彩评论:https://cl4ssic4l.wordpress.com/2011/05/24/linus-torvalds-about-pae/ originally posted on https://www.realworldtech.com/forum/?threadid=76912&curpostid=76973 / https://www.realworldtech.com/forum/?threadid=76912&curpostid=76980

它还将 PTE(Page Table Entry)从 4 个字节加宽到 8 个字节,这意味着 2 个级别已经不够用了; 那是小的额外级别通过这 4 个条目转换虚拟地址的前 2 位的地方。

36 位恰好是第一代实现 PAE 的 CPU 支持的物理地址大小,Pentium ProPAE 没有固有的 36 位限制。

x86-64 采用了 PTE 格式,。当前的 x86-64 CPU 在具有 PAE 的传统模式下支持与在 64 位模式下相同的物理 address-size。 (由 CPUID 报告)。该限制是一种设计选择,可以在缓存标记、TLB 条目、store-buffer 条目等以及与它们相关的比较器中保存位。考虑到商业上可用的 DIMM 大小和内存控制器的数量,即使在 multi-socket 系统中,它通常被选择为超过真实系统实际可以使用的 RAM 数量,并且仍然为一些 I/O 留出空间地址 space.

x86-64 在 PAE 之后不久就出现了,或者很快就与桌面使用相关了,所以 PAE 只是 36 位是一个常见的误解。 (因为 64 位模式是寻址更多内存的好得多的方法,允许单个进程使用超过 2G 或 3G,具体取决于 user/kernel 拆分。)