32 位 PAE 和 64 位内核有什么区别?

Mr.*_*nce 6 linux 64bit kernel memory pae

我只问这个关于内存寻址。

我知道 PAE 内核允许操作系统访问比标准 32 位内核更多的内存,但是,其他含义是什么?64 位内核和 32 位 PAE 内核之间有什么具体区别?

根据维基百科,进程地址空间保持在 32 位,这意味着它最多只能访问 4GB 的内存。然而,操作系统可以访问 64GB 的地址空间,为进程分配 4GB 的块。

对我来说,这似乎是一个很大的区别,似乎被许多人忽略了。

0xC*_*22L 7

内核查看物理内存并提供进程的视图。如果您想知道如果整个机器只有 512 MB 的 RAM,一个进程怎么会有 4 GB 的内存空间,这就是原因。每个进程都有自己的虚拟内存空间。该地址空间中的地址被映射到物理页或交换空间。如果要交换空间,则必须先将它们交换回物理内存,然后您的进程才能访问页面以对其进行修改。

XQYZ 的回答(DOS highmem)中 Torvalds 的例子并不太牵强,尽管我不同意他关于 PAE 通常是坏事的结论。它解决了具体问题并有其优点——但所有这些都是有争议的。例如,库的实现者可能认为实现并不容易,而该库的用户可能认为该库非常有用且易于使用。Torvalds 是一个实施者,所以他肯定会说出声明所说的内容。对于最终用户来说,这解决了一个问题,而这正是最终用户关心的问题。

因为 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章Intel处理器手册具有一定的概述和卷3A(“保护模式的内存管理”)进行了详细介绍,如果你想读了它的第3章。

对我来说,这似乎是一个很大的区别,似乎被许多人忽略了。

你是对的。但是,大多数人是用户,而不是实施者。这就是为什么他们不会在意。只要您的应用程序不需要大量内存,很多人都不在乎(尤其是因为有兼容层)。