【译】操作系统和 PAE 支持

为了解决 4 GB 以上的物理内存要求超过英特尔 (32 位) 处理器标准操作模式提供的32位地址,英特尔推出了 36 位的物理寻址模式,称为 PAE,开始于英特尔奔腾 Pro 处理器。

这篇文章介绍了一些微软 Windows 操作系统和几个 UNIX 操作系统使用为使用 PAE 模式处理的应用程序提供支持的技术。因为在这些环境中运行的进程有 32 位指针,操作系统必须管理和呈现 PAE 的 36 位的地址,在这种情况下应用程序才可以使用它。关键的问题是: 操作系统是如何解决这个问题的?性能、 功能、 编程的简单性和如何处理这些问题的可靠性将会确定大内存支持的用处。

更新时间: 2006 年 7 月 14 日

PAE: 32-与 64 位系统

PAE 是仅支持 32 位版本的 Windows 操作系统 ;64 位版本的 Windows 不支持 PAE。有关设备驱动程序和 64 位版本的 Windows 的系统要求的信息,请参阅64 位系统的设计在32位系统上支持地址窗口化扩展 (AWE) API。它还支持本地和 Wow64 应用程序的 x64 系统。

虽然支持 PAE 内存是通常与超过 4 GB 的 RAM 的支持相关联,可以在 Windows XP SP2,Windows Server 2003 和后来 32 位版本的 Windows 上启用 PAE,支持硬件强制数据执行保护 (DEP).

本文中的信息适用于 Windows 2000、Windows XP 专业版、Windows Server 2003 和这些操作系统的更高版本 (本文称 "Windows")。

技术背景

标准32位模式下的地址转换

所有 IA-32 处理器 (英特尔奔腾、奔腾 Pro、奔腾®ii 至强和奔腾 III 至强) 都支持32位物理地址 (4 gb), 允许应用程序在运行时处理 4 GB 的虚拟地址。系统必须将应用程序和操作系统使用的32位虚拟地址转换为硬件使用的32位物理地址。(奔腾 Pro 是 IA-32 家族中第一个支持 PAE 的处理器, 但对于36位物理地址, 通常缺乏芯片组支持。

Windows 使用两个级别的映射来进行转换, 这是由内存管理器创建和维护的一组称为页目录和页表的数据结构所推动的。

PSE 模式

IA-32 支持两种方法来访问超过 4 GB (32 位) 的内存。PSE (页面大小扩展) 是第一种方法, 随奔腾 ii。此方法提供了兼容性优势, 因为它保持了 PTE (页表条目) 的大小为4字节。但是, 唯一实际的实现就是通过一个驱动程序。由于读取和写入 4 GB 以上所需的缓冲区复制操作, 此方法遭受了显著的性能限制。pse 模式用于 pse 36 RAM 磁盘使用模型。

PSE 使用标准的1K 目录, 没有页面表来扩展页面大小 4 MB (消除该模式的一个间接寻址级别)。页目录项 (PDE) 包含14位地址, 当与22位字节索引组合时, 将生成36位扩展物理地址。4 kb 和 4 MB 的页面同时支持 4 GB 以下, 以标准方式支持 4 KB 页。

请注意, 位于 4 GB 以上的页面必须使用 PSE 模式 (具有 4 MB 的页面大小)。

PAE 模式

PAE 是访问 4 GB 以上内存所支持的第二种方法;该方法得到了广泛的应用。PAE 使用 4 KB 或 2 MB 的页面将多达 64 gb 的物理内存映射到32位 (4 gb) 虚拟地址空间。页面目录和页面表被扩展为8字节格式, 允许将页面表和页面框架的基地址扩展到24位 (从20位)。这是额外的四位被引入来完成36位物理地址的地方。

Windows 支持使用 4 KB 页的 PAE。PAE 还支持一种支持 2 MB 页面的模式。许多 UNIX 操作系统依赖于 2 MB 页面模式。地址转换是在不使用页表的情况下完成的 (PDE 直接提供页面框架地址)。

操作系统实现和应用程序支持

接下来的问题是操作系统如何管理和呈现 PAE 的36位地址, 应用程序 (带有32位指针) 实际上可以使用额外的内存。

有五个应用程序支持模型。前两个模型 (服务器合并和大缓存) 在操作系统中完全处理, 不需要对应用程序进行任何更改。第二个模型 (应用程序窗口和进程分叉) 要求应用程序更改以支持大型内存的 API 扩展。最后一个模型 (PSE 36 RAM 磁盘) 不需要对操作系统进行任何更改 (在驱动程序中实现), 而是授权应用程序更改以支持驱动程序。

1. 服务器整合

启用 PAE 的操作系统应该能够利用系统提供的所有物理内存来加载多个应用程序;例如, App#1、App#2、应用程序 #N, 每个虚拟地址都包含 4 GB (最大)。在非 PAE 启用的系统中, 结果可能是大量的分页, 因为系统中的最大物理内存限制为 4 GB。

使用 PAE 模式支持的额外物理内存, 操作系统可以在内存中保留更多的这些应用程序, 而无需分页。这在支持服务器整合配置方面很有价值, 通常需要在单个服务器中支持多个应用程序。请注意, 支持此功能不需要任何应用程序更改。

2. 大缓存

也可以为数据缓存使用附加的 PAE 启用的内存。如果操作系统支持此功能, 则无需重新编码应用程序即可利用它。Windows 高级服务器和数据中心服务器支持 PAE 平台上的缓存, 并可以利用所有可用内存。

3. 应用视窗

启用 PAE 的操作系统可以引入一个 API, 允许对系统中任何位置的物理内存进行正确编码的应用程序访问, 尽管它可能超过 4 GB。理想情况下, 分配 "高" 物理内存并创建或移动窗口的 API 应该是快速而简单的代码。这对于需要快速访问内存中大量数据的应用程序非常有利。

在进程之间共享高内存可以在 API 和实现中引入相当多的复杂性。Windows 避免了这种共享。

另外, 分页的支持使得操作系统的设计和实现变得更加困难, 使确定性性能更加难以实现。Windows 也避免了高内存的分页。

4. 工艺分叉和共享内存

此应用程序支持模型将当前进程拆分为两个或多个几乎相同的副本。副本由用户和系统栈、分配的数据空间和寄存器组成。主要区别是, 一个具有父级的进程 ID (PID);另一个有一个新的 PID。叉子返回的值是 PID。对于作为父项的副本的子级或子级 pid, pid 为零。

5. PSE36 RAM 磁盘

通过使用内核设备驱动程序 (非常类似于 RAM 磁盘), 可以利用 4 GB 以上的内存, 而不会对操作系统进行任何更改。基本操作系统 (以32位模式运行) 和驱动程序 (在 PAE 模式下运行) 之间的兼容性保持不变, 因为页面表保持在4字节宽的范围内。这一非常低的发展影响的权衡有几个:

  • 由于所有 i/o 都被迫执行双缓冲, 性能降低。

  • 应用程序开发影响不会明显低于当前 api 所需的效果。

  • 它不能用作 "整合服务器", 因为所有应用程序共享相同的 4 GB 物理内存空间。

设计实现

大型内存支持的操作系统实现必须直接解决这些问题才能成功。根据处理这些问题所做的设计选择, 操作系统的简单性、可靠性和性能将受到直接影响。

IA32 大内存支持技术问题

内存共享和进程间通信

在所有的情况下, 内存重新映射被用来分配内存给进程, 这是许多 PAE 变体所共有的, 内存共享是有问题的。正在重新映射的物理内存是 "外部" 进程虚拟地址空间。因此, 物理内存在共享进程的内部访问和安全控制以及操作系统提供的功能的意义上与进程的连接较少。

要应用访问和安全控制, 需要大大增加操作系统内存管理器所需的簿记以及应用程序开发人员必须使用的 API 集。使用非常快速的重新映射操作, 这会对高性能产生负面影响。还必须记住, 无论使用何种物理映射内存, 在任何情况下, IPC/内存共享仍可能在两个进程的虚拟地址空间之间进行。

TLB 击落

翻译备用缓冲区 (TLBs) 是处理器寄存器或缓存, 它提供页表项的直接逻辑到物理映射。一旦加载, 处理器必须很少读取页面目录 (TLB 错过), 除非有任务切换发生。

在重新映射操作过程中, 必须确保所有处理器在芯片上都有有效的逻辑到物理映射。因此, 重新映射操作需要 TLB 击落, 因为映射 (其中 "逻辑" = 内存的应用程序/进程视图) 会使逻辑到物理关联失效。

处理器 (或处理器) 重新加载 TLB 时会产生性能影响。所有操作系统都有此问题, 在 PAE 内存支持的情况下, 它们以不同的方式改善了问题:

  • Windows 提供了单个应用程序 "批处理" 所需的重新映射操作的能力, 以便所有情况同时发生, 并且只导致一个 TLB 击落和一个性能下降, 而不是随机重新映射出现, 每一项都将影响性能。对于大型应用程序来说, 这是相当足够的, 它们通常在单用途系统上运行。

  • 其他操作系统提供 "牺牲品" 缓冲区或允许一个进程共享另一个进程的映射, 但代价是更高的同步和 API 复杂性。

    Windows XP 还提供了这种 "批处理" 或分散/收集功能。此外, 对于 Windows Server 2003、企业版和数据中心版本, 这些操作的性能也得到了改进。

i/o

在一级或另一级别, 所有 PAE 变体都支持32位和64位 DMA i/o 设备和随附驱动程序。然而, 有许多条件和条件。

内核和内存组织

通常, 内核内存空间组织与操作系统的标准内核不变。在许多情况下, 诸如内存池大小之类的项目保持不变。为向后兼容, PCI 基地址寄存器 (条形) 保持不变。较大的内存大小会导致内核地址空间的某些移动, 通常在系统中实际存在 16 gb 和 32 gb 内存时。

操作系统的一个区别是内存分配是否是动态的:

  • 某些操作系统要求管理员配置用于各种用途的内存量 (缓存、映射、合并等)。

  • Windows 不要求管理员配置内存分配, 因为使用是动态的, 在使用的 api 的约束中。

硬件支持

PCI 标准提供了一种方法, 通过在两个单独的发送中发送高32位地址和低32位地址, 适配器可以物理地处理超过 4 GB 的内存。这称为双地址周期 (DAC), 用于了解64位地址但仅有32地址行的32位适配器, 以及有64个地址行的适配器。这是向后兼容性功能。

考虑到 PCI 将内存地址超过32位的方法, 存在一种微妙的故障模式。在两个 4 GB 区域中 "跨越" 的任何 i/o 范围都必须特别处理。如果没有, 地址范围将被正确地解码仅一个部分的传输和剩余的部分将被转换成错误的内存位置。这将损坏内存, 并会使系统崩溃、崩溃应用程序或在该位置悄悄损坏数据。应用程序无法阻止此原因, 因为它们只提供了虚拟地址, 并且对物理级别没有可见性。使用 PAE 的所有操作系统都面临此问题, 但有些不显式地阻止这种情况发生, 而是依赖于设备驱动程序采取正确的操作。

但是, Windows 明确地防止了此问题。当 i/o 范围以这种方式跨越时, Windows 会将两个单独的地址和范围返回给设备和驱动程序。最后一个特例是从 4 GB 到更远的第一个过渡。该区域不需要 dac 4 GB 以下, 但在其余的转移中需要 dac。同样, 在这种情况下, Windows 返回两个单独的地址和范围, 以防止内存损坏。

显然, DAC 或64位适配器和驱动程序提供了最佳性能, 因为不发生 i/o 缓冲。但是, 只要适配器和驱动程序不能使用超过32位的地址信息, 就需要这种缓冲。使用 PAE 模式寻址的所有操作系统都支持这种 "双缓冲", 这是一种向后兼容功能。此缓冲确实具有与以下几个因素相关的性能损失:

  • 适配器硬件性能

  • 驱动程序性能

  • 为双缓冲提供的操作系统支持

  • 系统中安装的物理内存量

随着物理内存的增加, 相对于32位的 i/o 地址量也会随着这些地址的32位以下而增加。在大多数情况下, 操作系统透明地提供双缓冲, 尽管某些 Unix 变体不提供此功能的任何帮助, 并且需要任何32位设备和驱动程序来管理它们自己的双缓冲例程和分配。

驱动程序问题

通常, 设备驱动程序必须以一些小的方式进行修改。虽然实际的代码更改可能很小, 但可能很难。这是因为当不使用 PAE 内存寻址时, 设备驱动程序可以假定物理地址和32位虚拟地址限制相同。PAE 内存使这个假设不真实。

以前可以安全使用的一些假设和快捷方式不适用。一般而言, 这些类别分为三类:

  • 必须修改分配和对共享内存缓冲区的代码中的缓冲区对齐方式, 使其不忽略物理地址的上32位。

  • 必须避免在许多位置截断地址信息。

  • 必须严格隔离虚拟和物理地址引用, 这样 DMA 操作就不会将信息传输到或从随机内存位置转移。

可以在 windows XP SP2、windows Server 2003 SP1 和更新版本的 windows 上启用 PAE 模式, 以支持硬件强制 DEP。但是, 为这些系统设计的许多设备驱动程序可能尚未在启用 PAE 的系统配置中进行测试。为了限制对设备驱动程序兼容性的影响, 对 windows XP SP2 和 windows Server 2003 SP1 标准版进行了硬件抽象层 (HAL) 的更改, 以将物理地址空间限制为 4 GB。鼓励驱动程序开发人员阅读有关DEP的信息.

寻呼

支持 PAE 的大多数操作系统支持虚拟内存分页的某些性质的物理内存超过 4 GB。这通常会出现一些限制, 例如将引导/系统分页文件限制为 4 GB, 或者跨多个操作系统组织的卷 (不一定是物理主轴) 传播分页文件 (或文件)。

虽然这允许虚拟内存的明显好处, 但缺点是性能对具有以下一个或多个特性的应用程序的影响:

  • 对数据集使用大量的物理内存

  • 做大量的 i/o

  • 具有大型可执行工作集

最后, 分页支持通常是以增加 API 集和减慢开发和版本迁移为代价的。

用户 api

支持 PAE 的所有操作系统都有 api, 允许在 IA-32 处理器上超出虚拟地址范围的进程使用物理内存。这些差异主要在于它们为前面描述的项目提供了多少支持: 内存共享、进程间通信、分页等。Windows 提供了一个简单而直接的 api 集, 即地址窗口化扩展 (AWE) api 集, 它仅包含五 api 调用, 最复杂的 api 是四倍大, 涉及内核和用户级调用。

专有 api 的扩散--其中一些直接与处理器体系结构 (内核级) 联系在一起--使得从一个 Unix 变体移植到另一个昂贵、耗时的应用程序, 并不断努力平衡成本与性能优化。Windows 提供了一个 API 集, 它在32位和64位硬件平台之间是简单、快速和完全可移植的, 只需重新编译即可正常工作。

页面大小

几乎所有支持 PAE 的操作系统在向应用程序提供超过 4 GB 的物理内存时都使用不同的页面大小。主要的例外是 Windows, 它向应用程序提供的 IA-32 平台上仅有 4 KB 页 (在基于 Itanium 的平台上这是不同的)。

对应用程序使用不同页面大小的问题与需要在不同内存分配大小下正常工作所需的额外应用程序复杂性相关, 以及与基本假设相关的微妙影响, 几乎所有应用程序具有页面大小。尽管研究显示, 小类应用程序可以从较大的页面大小 (2 mb 或 4 mb) 中受益, 因为每个 TLB 项都跨越了更大的地址范围, 但一般规则是应用程序不会从较大的页面大小中受益。

Windows 和 PAE

Windows 版本支持
Windows 2000 专业版、 Windows XPAWE API 和 4 GB 的物理 RAM
Windows XP SP2 及更高版本AWE API 和 4 GB 的物理地址空间
Windows 2000 服务器,Windows Server 2003 标准版AWE API 和 4 GB 的 RAM
Windows Server 2003 SP1 中,标准版AWE API 和 4 GB 的物理地址空间
Windows Server 2003 企业版8 处理器和 32 GB RAM
Windows Server 2003 SP1 中,企业版8 个处理器和 64 GB RAM
Windows 2000 高级服务器8 处理器和 8 GB 的 RAM
Windows 2000 的数据中心服务器32 处理器和 32 GB RAM (支持为 64 GB 不由于缺乏系统的测试提供)
Windows Server 2003 数据中心版32 个处理器和 64 GB RAM
Windows Server 2003 SP1 中,数据中心版32 处理器和 128 GB 的 RAM

PAE 和Windows,对于开发人员,包括准则有关的详细信息请参阅PAE 内存和 Windows.

(本文直接采用必应翻译转译,原网页:https://docs.microsoft.com/en-us/previous-versions/windows/hardware/design/dn613969(v%3dvs.85)

0 Comments (2633 Views)

Leave a Reply

Your email address will not be published. Required fields are marked *