我只问这个关于内存寻址的问题。
我知道 PAE 内核允许操作系统比标准 32 位内核访问更多内存,但是,还有什么其他含义呢? 64 位内核和 32 位 PAE 内核之间有哪些具体区别?
根据 Wikipedia,进程地址空间仍为 32 位,这意味着它最多只能访问 4GB 内存。然而,操作系统可以访问 64GB 地址空间,为进程分配 4GB 块。
在我看来,这是一个很大的区别,但似乎被很多人忽视了。
答案1
内核查看物理内存并提供进程视图。如果您想知道如果您的整机只有 512 MB RAM,一个进程如何拥有 4 GB 内存空间,那就是原因。每个进程都有自己的虚拟内存空间。该地址空间中的地址被映射到物理页或交换空间。如果要交换空间,则必须将它们交换回物理内存,然后您的进程才能访问页面并对其进行修改。
XQYZ 的答案(DOS highmem)中 Torvalds 的例子并不算太牵强,尽管我不同意他的结论,即 PAE 通常是一件坏事。它解决了具体问题并有其优点——但所有这些都是有争议的。例如,库的实现者可能不会认为实现很容易,而该库的用户可能会认为该库非常有用且易于使用。托瓦尔兹是一名实施者,因此他必须说出声明中的内容。对于最终用户来说,这解决了一个问题,这也是最终用户所关心的。
PAE 有助于解决 32 位计算机上的另一个遗留问题。它允许内核映射完整的 4 GB 内存,并解决许多机器上存在的 BIOS 内存漏洞,导致没有 PAE 的纯 32 位内核仅“看到”3.1 或 3.2 GB 内存,尽管物理内存为 4 GB。
不管怎样,对于 64 位内核来说,物理页面和虚拟页面之间是对称关系(不考虑交换空间和其他细节)。然而,PAE 内核在进程地址空间内的 32 位指针与物理内存中的 36 位地址之间进行映射。这里需要更多的簿记工作。关键字:“扩展页表”。但这更像是一个编程问题。这是主要的区别。与完整的线性地址空间相比,需要更多的簿记工作。对于 PAE,正如您提到的,它是 4 GB 的块。
除此之外两个都PAE 和 64 位允许大页面(而不是 32 位中的标准 4 KB 页面)。
第 1 卷第 3 章英特尔处理器手册有一些概述,如果您想阅读的话,第 3A 卷(“保护模式内存管理”)的第 3 章有更多详细信息。
在我看来,这是一个很大的区别,但似乎被很多人忽视了。
你说得对。然而,大多数人是用户,而不是实施者。这就是为什么他们不会关心。只要您的应用程序不需要大量内存,许多人就不会关心(特别是因为存在兼容层)。
答案2
你可能想看看 Linus Torwalds 对此有何评论这里:
PAE 颠覆了这个非常简单的事实,把事情搞砸了。提出这个想法的人完全无能,并且忘记了所有 DOS HIGHMEM 的痛苦。我们放弃 286 并开始使用 386,而不是让 HIGHMEM 垃圾与窗户进入更大的物理空间,这是有充分理由的。
[...]
请跟我重复一遍:PAE 并没有真正解决任何问题。那是一个错误。这完全是一次失败,是硬件工程师不了解软件的结果。
答案3
从CPU的角度来看,
- PAE 是一个外在事物:CPU 只有 36 个引脚来寻址内存地址。
- 虽然 64 位是内在的东西:它使用寄存器的高 32 位。
从系统其余部分的角度来看,如果您使用 PAE 或 64 位内核,则没有区别。它只能看到来自 CPU 引脚的信号,并且在这两种情况下 CPU 都有 36 位来寻址内存。
当然,(2) 也自动包含 (1)。