一、“/3GB”方式
1、内存分配
从80386开始,出于安全性的考虑(防止用户访问并篡改操作系统的关键部分),以及考虑到系统的稳定性,该系列的CPU可以运行于ring0至ring3从高到低4个权限级别,对数据也提供相应的4个保护级别。规则如下:
(1)运行于较低级别的代码不能随意调用高级别的代码和访问高级别的数据。
(2)只有ring0层的代码可以直接对物理硬件进行访问。
为了兼容其他平台,Windows只用了2个运行级别:ring0、ring3 。分别对应以下2种处理器存储模式:
(1)内核模式,对应ring0层。这是操作系统的核心部分,设备驱动程序就是运行在该模式下。在此模式下,程序可以访问所有的内存和硬件,并使用所有的处理器指令。
(2)用户模式,对应ring3层。这是给用户的应用程序用的,包括操作系统的用户接口部分(即win32 API)以及所有的应用程序都运行在该级别。在此模式下的应用程序不能访问其他进程的资源,除非通过API调用。
在Windows操作系统中,任何一个进程都被赋予了其自己的虚拟地址空间(VAS:Virtual Address Space),这就是应用程序能够申请访问的最大地址空间。
在32位操作系统中,最大寻址空间为2^32=4GB。在默认情况下,操作系统将4GB的VAS的高位分配给了内核模式,只有低位的2GB是用户地址空间。
2、修改启动选项
默认情况下,操作系统和应用程序各占2GB内存。 对于Windows Server 2003,考虑在boot.ini文件中使用“/3GB”方式减少内核模式占用的地址空间,从而使应用程序获得更多的VAS。
例如:
[boot loader]
timeout=30
default-multi(0)disk(0)rdisk(0)partition(1)\WINNT
[operating system]
default-multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows Server 2003" /fastdetect /3GB
3、更多选项
如果不将全部3GB都用于应用程序,那么可以在“/3GB”参数后面再加上“/USERVA”参数,精确指定内存地址空间分配给应用程序的大小。例如:“/USERVA=2500”表明配置2500MB内存的地址空间预留给应用程序,操作系统只保留的核心内存空间为:3072-2500=572MB。
建议将USERVA的值设定在2800至3030之间。
二、PAE与AWE
1、扩展内存空间
Intel Pentium PRO之后的处理器把管脚数从32增加到36,从而处理器现在寻址能力达2^36=64GB。可是内存的地址表还只是支持4GB寻址,为此Intel推出一种内存映射模式,称为物理地址扩展(PAE)。这样,系统就可以映射更多的内存空间,寻址宽度可达标准的2倍。
Windows的址址窗口扩展(AWE)机制可以允许32位的应用程序访问超过4GB的物理内存。虚拟内存窗口被用来缓存AWE读写访问物理内存的请求。
2、修改启动参数
在boot.ini文件通过添加“/PAE”参数
3、对“/3GB”方式的影响
(1)“/3GB”参数必须放在“/PAE”之后。
(2)通过“/3GB”参数压缩了核心内存的空间,同进也压缩了其中Windows用于管理物理内存的表,因此,“/3GB”方式下最大只能管理16GB的物理内存。如果可用的物理内存超过16GB,要确保boot.ini文件中没有“/3GB”参数。
4、注意事项
在Windows Server 2003或Windows Server 2008中启用AWE时,都必须锁定内存中的页,以防将它们写入分页文件。
修改组策略,依次展开 “计算机配置-Windows设置-安全设置-本地策略-用户权限分派”。例如,要防止SQL Server把内存写入分页文件,就在“将页锁定在内存”策略中添加SQL Server启动帐户。
上述用户的进程将数据保持在物理内存中,这样就防止系统将数据分布到磁盘上的虚拟内存中。
在Windows Server 2008 R2中,此项组策略为“锁定内存页”。