Windows 中的 RAM、虚拟内存、页面文件和内存管理

原始 KB 数: 2160852

总结

本文包含有关 32 位版本的 Windows 中的虚拟内存实现的基本信息。

在现代操作系统(如 Windows、应用程序和许多系统进程)中,始终使用虚拟内存地址引用内存。 虚拟内存地址由硬件自动转换为真实(RAM)地址。 只有操作系统内核的核心部分绕过此地址转换,直接使用实际内存地址。

始终使用虚拟内存,即使所有正在运行的进程所需的内存不会超过系统上安装的 RAM 量。

进程和地址空间

在 32 位版本的 Windows 下运行的所有进程(例如,应用程序可执行文件)都分配了虚拟内存地址( 虚拟地址空间),范围为 0 到 4,294,967,295(2*32-1 = 4 GB),不管计算机上安装了多少 RAM。

在默认 Windows 配置中,为此虚拟地址空间的 2 GB(GB)指定用于每个进程的专用使用,并且所有进程和操作系统之间共享其他 2 GB。 通常,应用程序(例如记事本、Word、Excel 和 Acrobat Reader)仅使用 2 GB 专用地址空间的一小部分。 操作系统仅将 RAM 页帧分配给正在使用的虚拟内存页。

物理地址扩展(PAE)是 Intel 32 位体系结构的功能,它将物理内存(RAM)地址扩展到 36 位。 PAE 不会更改虚拟地址空间的大小(仍为 4 GB),而只是处理器可以解决的实际 RAM 量。

进程中运行的代码使用的 32 位虚拟内存地址与 36 位 RAM 地址之间的转换根据操作系统维护的转换表自动、透明地由计算机硬件处理。 任何虚拟内存页(32 位地址)都可以与任何物理 RAM 页(36 位地址)相关联。

以下列表描述了各种 Windows 版本支持的 RAM 量(截至 2010 年 5 月):

Windows 版本 RAM
Windows NT 4.0 4 GB
Windows 2000 Professional 4 GB
Windows 2000 标准服务器 4 GB
Windows 2000 高级服务器 8 GB
Windows 2000 Datacenter Server 32 GB
Windows XP Professional 4 GB
Windows Server 2003 Web Edition 2 GB
Windows Server 2003 标准版 4 GB
Windows Server 2003 企业版 32 GB
Windows Server 2003 Datacenter Edition 64 GB
Windows Vista 4 GB
Windows Server 2008 标准版 4 GB
Windows Server 2008 企业版 64 GB
Windows Server 2008 Datacenter 64 GB
Windows 7 4 GB

页面文件

RAM 是有限的资源,而出于大多数实际目的,虚拟内存是无限的。 可以有多个进程,每个进程都有自己的 2 GB 专用虚拟地址空间。 当所有现有进程使用的内存超过可用 RAM 时,操作系统会将一个或多个虚拟地址空间的页面(4 KB 段)移动到计算机的硬盘。 这将释放 RAM 帧以供其他使用。 在 Windows 系统中,这些 页页存储在分区根目录中的一个或多个文件(Pagefile.sys文件)。 每个磁盘分区中可以有一个这样的文件。 页面文件的位置和大小在系统属性中配置(单击“高级”、“性能,然后单击“设置”按钮)。

用户经常问 我该创建页面文件有多大? 此问题没有单一答案,因为它取决于已安装 RAM 的数量以及工作负荷所需的虚拟内存量。 如果没有其他可用信息,则安装 RAM 的典型建议为 1.5 倍是一个很好的起点。 在服务器系统上,你通常想要有足够的 RAM,以便永远不会有短缺,因此不会使用页面文件。 在这些系统上,维护大型页面文件可能没有用处。 另一方面,如果磁盘空间充足,则维护大型页面文件(例如,已安装 RAM 的 1.5 倍)不会造成问题,这也无需担心要使其变得有多大。

性能、体系结构限制和 RAM

在任何计算机系统上,随着负载的增加(用户数量、工作量),性能会降低,但以非线性方式。 负载或需求的任何增加(超出特定点)都会导致性能显著下降。 这意味着某些资源供应严重短缺,已成为瓶颈。

在某些时候,无法增加供不应求的资源。 这意味着 已达到体系结构限制 。 Windows 中一些经常报告的体系结构限制包括:

  • 系统(内核)的 2 GB 共享虚拟地址空间
  • 每个进程 2 GB 的专用虚拟地址空间(用户模式)
  • 660 MB 的系统 PTE 存储(Windows Server 2003 及更早版本)
  • 470 MB 的分页池存储(Windows Server 2003 及更早版本)
  • 256 MB 的非分页池存储(Windows Server 2003 及更早版本)

这特别适用于 Windows Server 2003,但也可能适用于 Windows XP 和 Windows 2000。 但是,Windows Vista、Windows Server 2008 和 Windows 7 并不全部共享这些体系结构限制。 此处的用户和内核内存限制(数字 1 和 2)相同,但 PTE 和各种内存池等内核资源是动态的。 此新功能可同时启用分页内存和非分页内存。 这也使 PTE 和会话池能够超出前面讨论的限制,达到整个内核耗尽的地步。

经常找到并引用如下语句:

使用终端服务器时,在使用 4 GB RAM 之前,将完全使用 2 GB 的共享地址空间。

在某些情况下,这可能是事实。 但是,你必须监视系统,以了解它们是否适用于你的特定系统。 在某些情况下,这些语句是来自特定 Windows NT 4.0 或 Windows 2000 环境的结论,不一定适用于 Windows Server 2003。 对 Windows Server 2003 进行了重大更改,以减少实际上会达到这些体系结构限制的可能性。 例如,内核中的某些进程已移动到非内核进程,以减少共享虚拟地址空间中使用的内存。

监视 RAM 和虚拟内存使用情况

性能监视器是监视系统性能以及确定瓶颈位置的原则工具。 若要开始性能监视器,请单击“开始”,单击控制面板,单击“管理工具,然后双击性能监视器 下面是一些重要计数器及其说明的摘要:

  • 内存、已提交的字节数:此计数器是虚拟内存需求的度量值。

    这显示了进程分配的字节数,以及操作系统在页面文件(或两者)中提交 RAM 页框或页槽的字节数。 随着 提交的字节 增长大于可用 RAM,分页将增加,并且正在使用的页面文件大小也会增加。 在某些时候,分页活动开始显著影响性能。

  • 进程、工作集_Total:此计数器是活动使用的虚拟内存的度量值。

    此计数器显示需要多少 RAM,以便用于所有进程的虚拟内存位于 RAM 中。 此值始终为 4,096 的倍数,即 Windows 中使用的页面大小。 随着对虚拟内存的需求超出可用 RAM,操作系统会调整进程的虚拟内存量在其工作集中,以优化可用 RAM 使用率并最大程度地减少分页。

  • 分页文件,正在使用的 %pagefile:此计数器是实际使用的页文件量度量值。

    使用此计数器可确定页面文件是否是适当的大小。 如果此计数器达到 100,则页面文件已满,并且内容将停止工作。 根据工作负荷的波动性,你可能希望页面文件足够大,以便使用的页文件不超过 50-075%。 如果正在使用大部分页面文件,则在不同的物理磁盘上有多个页面文件,可能会提高性能。

  • 内存,Pages/秒:此计数器是最误解的措施之一。

    此计数器的高价值并不一定意味着性能瓶颈源于 RAM 短缺。 由于内存过度承诺,操作系统将分页系统用于交换页面以外的目的。

  • 内存、页面输出数/秒:此计数器显示将多少个虚拟内存页写入页面文件,以释放 RAM 页帧,以便每秒用于其他目的。

    如果怀疑分页是性能瓶颈,这是监视的最佳计数器。 即使已提交的字节数大于已安装的 RAM,如果页面输出/秒在大多数时间都较低或零,则 RAM 没有明显的性能问题。

  • 内存, 缓存字节, 内存, 池非分页字节, 内存, 池分页字节数, 内存, 系统代码总字节数, 内存, 系统驱动程序总字节数:

    这些计数器的总和是衡量实际使用 4-GB 虚拟地址空间的 2 GB 共享部分的多少。 使用这些方法可确定系统是否达到了前面讨论的体系结构限制之一。

  • 内存、可用 MBytes:此计数器用于度量满足虚拟内存需求(新分配或从页面文件还原页面)的 RAM 量。

    当 RAM 供不应求(例如,已提交的字节大于安装的 RAM),操作系统将尝试通过复制未处于活动状态的虚拟内存页复制到页面文件来保留可供立即使用的一定部分可用 RAM。 因此,此计数器不会达到零,不一定表明系统是否缺少 RAM。

参考

地址窗口扩展