Windows x86物理内存是24位?

Windows x86物理内存是24位?

我正在读一本新书,Windows Internals 5,关于内存管理(第 9 章物理地址扩展 PAE 部分)。第 770 页提到“32 位系统内部用 24 位表示物理地址”。我完全糊涂了,我认为 x86 物理内存也应该用 32 位寻址,这就是系统被称为 32 位系统的原因。

知道哪里出了问题吗?

答案1

以下是 David Solomon 和 Mark Russinovich 合著的《Windows 2000 内部》一书第 7 章中有关启动 /PAE 含义的更多详细信息。

自 Pentium Pro 以来,所有 Intel x86 系列处理器都包含一种称为物理地址扩展 (PAE) 的内存映射模式。使用适当的芯片组,PAE 模式允许访问高达 64 GB 的物理内存。当 x86 在 PAE 模式下执行时,内存管理单元 (MMU) 将虚拟地址分为四个字段。

MMU 仍然实现页目录和页表,但是它们之上还有第三级,即页目录指针表。PAE 模式可以比标准转换模式寻址更多内存,这并不是因为额外的转换级别,而是因为 PDE 和 PTE 是 64 位宽,而不是 32 位。系统内部使用 24 位表示物理地址,这使 x86 能够支持最大 2^(24+12) 字节或 64 GB 的内存

编辑:正如乔治所说,24 位页码代表 24+12=36 位字节地址。这是对 32 位普通空间的地址扩展。

答案2

我正在阅读《Windows Internals》第四版(第 435-437 页)中的“物理地址扩展 (PAE)”一章,但似乎找不到对 24 位的引用。其中提到了用于基页地址的 25 位,这意味着可寻址空间变为 2 ^ (12 + 25) = 128GB。但我们会回过头来讨论这个问题。首先让我们看看线性地址是如何转换为物理地址的(书​​中对此进行了完美的描述):线性地址分为三部分:

  • 12 个低位是页内偏移,可寻址 4Kb 页内的任意字节;
  • 接下来的10位是页表(PTE)中记录的索引,其中包含页面的基地址(第一个字节的物理地址);
  • 最高 10 位是页目录表(PDE)中记录的索引,其中包含 PTE 的基地址。

PTE 和 PDE 中的每个项目包含 32 位记录,其中 20 位分别包含页面或下一级表的物理地址。另外 12 位是描述页面或表的标志(可读/可写/可执行等)。这就是 80386、x486 和 Pentium 的工作方式。

现在,奔腾 Pro 和更新的 CPU 在 PAE 模式下运行时,在 PDE 和 PTE 表中使用 64 位宽的记录。在这些记录中,最多可以使用 40 位来编码内存中页面的基址。这意味着 PAE 模式理论上可以寻址 2 ^ 40 个页面(1T 页),每个页面 2 ^ 12(每个 4Kb)。总理论地址空间为 2 ^ (40 + 12) = 2 ^ 52 = 4Peta 字节。但是,操作系统不会使用所有这 40 位。例如,Windows 只使用其中的 24 位,这导致总可寻址地址空间为 2 ^ (24 + 12) = 2 ^ 36 = 64G 字节。

显然,不同版本的 Windows 在该表中使用不同的位数,这似乎有点奇怪。根据该书的第 4 版,在这种情况下使用了 25 位,这使可寻址空间达到 128Gb,这也得到了以下机构的证实:这一页。这就是上述第 4 版和第 5 版之间差异的根源。

有关翻译过程的更多详细说明,请参阅第 4-17 页和第 4-18 页(第 4.4.2 章)。Intel 64 和 IA32 架构软件开发人员手册

哦,是的,系统之所以被称为 32 位,并不是因为它寻址 2^32 字节。而是因为它在内部寄存器为 32 位宽的模式下运行(这不再总是正确的,但与现实非常接近)。如果可寻址空间决定操作系统的名称,那么 DOS 将是 20 位操作系统,而旧 Mac 将是 24 位操作系统

答案3

这是指将 32 位虚拟地址空间映射到 24 位物理地址空间。通常,20 位虚拟页码会转换为 12 位物理页码,其余位是页面偏移量

相关内容