两个内核都将虚拟地址空间分成用户部分和内核部分。内核部分在系统中的所有进程之间共享,因此内核仅限于可直接寻址的内存。系统中的每个用户进程都有自己的地址空间用户部分。传统上,这种拆分是在中间完成的,每半个 2GB。可以使用 /3gb boot.ini 开关指示 Windows 将拆分移动到用户的 3gb 和内核的 1gb。linux 内核在构建时相当可配置,最后我检查了 Ubuntu 内核以 3:1 拆分构建。
PAE 允许寻址 64 GB 的物理内存,但任何给定的页表仍然限制为 4 GB。因为该地址空间只有一个内核部分在系统上的所有进程之间共享,所以无论如何它都被限制为 1 或 2 GB 的可直接寻址内存。可以使用额外的物理内存,但它必须在任何给定时间仅部分映射到虚拟地址空间,并在需要时更改映射。因为每个进程都有一个单独的用户地址空间,例如,您可以拥有 5 个不同的进程,每个进程都有 2gb 自己的内存,映射到您安装的 16gb 物理内存的不同部分,内核使用另一个 2gb。
请注意,文件系统缓存不必一直保持页面映射,因此它可以使用更多的物理内存,并且内核在需要时自动映射它的位,然后取消映射以便它可以映射其他页面。这种诡计允许内核将许多 GB 的内存用于缓存,并将几百 MB 用于其他用途,即使内核只有 1 GB 的虚拟地址空间可以使用。
另外值得注意的是,在最近的 Windows 版本中,微软已经制定了各种人为的产品许可限制。即使我启用 PAE,我在 PC 上使用的 Windows 7 Pro 也拒绝使用大于 4gb 的物理内存地址,这导致它只能使用安装的 4.0 GB 内存中的 3.4 个,因为ram 被重新定位到 4gb 标记之上,以便为视频 ram 等位于 4gb 之下的东西留出空间。