挑战Windows极限:物理内存 -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【meiwen.anslib.com - 电脑资料】

  打现在起数月内,笔者将会撰写一个系列专题,而这是开山第一篇,

挑战Windows极限:物理内存

。该系列叫做《挑战Windows极限》,描述Windows和应用程序对具体资源的使用方法、资源使用在许可和实现方面的限制、资源使用的测量方法,以及资源泄露的诊断方法等。为了能够有效地管理Windows系统,我们需要知道Windows系统是怎样管理物理资源的,例如CPU和内存等,还要知道Windows系统怎样管理逻辑资源的,例如虚拟内存、句柄,还有窗口管理器对象等。了解这些资源的限制,并对其使用情况进行追踪,有助于我们精确地掌握应用程序的资源使用状况,帮助我们给某个关键应用分配足够多的系统资源,还有助于我们找出导致资源泄露的应用程序。

  物理内存

  物理内存是计算机上的最重要的资源之一。Windows的内存管理器负责给活动进程、设备驱动,和操作系统自己分配内存。因为绝大多数系统所能访问的数据和代码远比物理内存多,所以从本质上来说,物理内存是代码和数据在其中运行的窗口。所以内存容量对性能有影响,因为如果进程或者操作系统所需的代码或者数据不存在,内存管理器就需要从磁盘中读取这些内容。

  除了会对性能造成影响,物理内存的容量还会影响其他资源。例如,对于非分页池来说,这是由物理内存提供后备的操作系统缓冲,很明显,其容量会受到物理内存的限制。物理内存也会对系统的虚拟内存限制有影响,虚拟内存的大小等于物理内存容量、再加上所有页面文件的最大容量。物理内存还会对进程的最大数量具有间接的影响,笔者将会在今后的文章里专门提到线程和进程的限制。

  Windows Server内存限制

  Windows对于物理内存的支持,要受到诸如硬件限制、许可、操作系统数据结构,以及驱动程序的兼容性等方面的综合影响。MSDN网站的Memory Limits for Windows Releases文章对不同Windows版本、以及同一个版本的不同SKU的限制进行介绍。

  我们可以查看所有Windows版本的不同SKU的物理内存支持许可。例如,32位Windows Server 2008标准版仅支持4GB,而32位Windows Server 2008数据中心版支持64GB。类似的,64位Windows Server 2008标准版支持32GB,而64位32位Windows Server 2008数据中心版支持2TB。目前来说,并没有多少系统拥有2TB内存,不过Windows Server性能产品组知道有两台服务器拥有那么多的内存,其中一台位于某地的实验室。该服务器的任务管理器如下图所示:

  32位的最大限制是128GB,Windows Server 2003数据中心版可以支持,这是因为在大内存的系统上,内存管理器用来追踪物理内存的结构,需要消耗更多系统虚拟地址空间。内存管理器把每个内存页的追踪数据保存在叫做PFN数据库的数组中,而且考虑到性能因素,会把整个PFN数据库映射到虚拟内存中。因为它用28字节的数据结构来代表每个内存页,128GB系统的PFN数据库需要将近930MB的空间。32位Windows拥有4GB的虚拟地址空间,由硬件所定义,默认划分为两半,其中一半供用户模式进程(例如Notepad)所使用,另一半供系统所使用,

电脑资料

挑战Windows极限:物理内存》(http://meiwen.anslib.com)。因此980MB的容量就要占据将近一半的系统虚拟地址空间(共2GB),只剩下约1GB空间可以用来映射内核、驱动程序、系统缓存和其他系统数据结构:

  这也就是为什么当同一个SKU版本以4GB的调整选项引导时(也叫做4GT,在Boot.ini文件里配置/3GB或者/USERVA选项,或者配置Bcdedit命令的/Set IncreaseUserVa启动选项),其内存限制会更大,这是因为4GT选项会给用户模式进程分配3GB空间,而仅给系统保留1GB空间。

  内存管理器可以仅把PFN数据库的一部分映射到系统地址空间,这样就可以提供更多的内存空间,这会增加复杂性,同时由于增加了映射和取消映射的操作,而可能导致性能的下降。由于直到现在,计算机所配备的内存容量才变得足够大,才需要考虑采用这种办法,但是因为在64位Windows中,并不需要强制把整个PFN数据库映射到系统地址空间,所以这种可以提供更多内存的办法仅供64位Windows使用。

  64位Windows Server 2008数据中心版最多支持2TB内存,这不是由于硬件限制所造成的,而是因为微软对2TB进行了严格测试,而只支持2TB内存。在Windows Server 2008发布的时候,计算机所配备的最大内存基本上就是2TB,所以Windows将其作为物理内存的最大值。

  Windows客户端内存限制

  64位Windows客户端,不同SKU的内存支持也有所不同,Windows XP Starter版的内存支持最低,仅512MB,而Windows Vista旗舰版的内存支持最高,可达128GB。但是所有版本的32位Windows客户端SKU,包括Windows Vista、Windows XP和Windows 2000 Professional,最大支持4GB物理内存。标准的X86内存管理模式,最大可以支持4GB的物理地址访问。在早期,并不需要考虑在客户端提供超过4GB的支持,因为当时很少有计算机配备那么高的内存,哪怕是服务器。

  但是在Windows XP SP2开发的过程中,已经可以预见客户端计算机将会配备超过4GB的内存,所以Windows产品组对超过4GB的Windows XP计算机进行大量的测试。Windows XP SP2还支持物理地址扩展(PAE)功能,该功能本来是为了在硬件上实现非执行(NX)保护,因为这是数据执行保护(DEP)的必要条件,但是该功能还可以支持超过4GB的内存。

  Windows产品组的工程师发现,很多测试计算机会发生崩溃、挂起,或者无法启动的故障现象,这是因为某些设备驱动程序,主要是一些客户端计算机(而非服务器)上的显卡或者声卡,其驱动程序在编写时没有考虑到内存大于4GB的情况。所以,这些驱动程序会截去那部分地址,从而导致内存冲突以及其他副作用。而服务器则通常会配备更加常规的硬件设备,其驱动程序更加简单稳定,因为通常来说碰到这些问题的几率很小。由于客户端设备驱动程序所存在的这些问题,迫使Windows客户端SKU只能忽略高于4GB的那部分物理内存,哪怕从理论上来说可以对其进行寻址。

  32位客户端计算机的实际内存限制

  尽管从许可上来说,32位客户端SKU的最大内存支持是4GB,但是实际上的限制会更低,这要看计算机的芯片组以及所连接的设备。这是因为物理地址映射不仅仅包含物理内存,还包含设备内存,X86和X64位系统会把所有设备内存映射到低于4GB的地址边界,以便确保和32位操作系统的兼容性,这些操作系统不知道如何处理超过4GB的地址部分。如果计算机配备4GB内存和类似显卡、声卡和网卡这样的设备,Windows会给这些设备内存分配共计500MB空间,而4GB物理内存中的500MB只能占用超过4GB的地址边界,如下图所示。

 

最新文章