关于32位Vista不支持4G内存,以及一些误传的解决方案。

通过查阅MSDN,通过PAE实现了对更多物理内存的访问,但是对于某个具体的32位进程,其可寻址空间仍然只有4G,进程执行过程中,并不知道这4G内存映射到

物理内存的什么地方,是CPU的MMU负责把4G进程地址空间映射到经过PAE扩展寻址的物理内存区,但是通过windows平台的AWE或者linux下的mmap,进程可以利

用超出其进程地址空间的物理内存。
参考:
[AWE]
http://en.wikipedia.org/wiki/Address_Windowing_Extensions
http://msdn.microsoft.com/en-us/library/aa366527.aspx

[PAE]
http://en.wikipedia.org/wiki/Physical_Address_Extension
http://msdn.microsoft.com/en-us/library/aa366796.aspx

 

另转网上一篇文章:

Windows Vista是一款相当耗费资源的操作系统,特别是内存。从某种意义上说,要提升运行Windows Vista的系统性能,最简单也最有效的方式便是为系统扩

充尽可能多的内存。那么,Windows Vista最高能支持多少物理内存呢? 

根据微软给出的规格,除Starter版仅支持1GB内存外,其他版本的Windows Vista(32位)均能够支持4GB的“内存”——当然,指32位x86系统,64位Windows

Vista x64也没有对应的Starter版本——不过,需要注意的是,这里所谓的“4GB”并非等同于真正的物理内存,而是指可用的内存寻址空间。 

相信有计算机基础的用户都清楚,对32位系统而言,4GB是其能够寻址空间的极限,除非通过PAE(Physical Address Extension : 物理地址扩展)将4GB之上的

内存通过映射的方式作为4GB空间中的页面来扩展。而在这4GB的地址空间中,必须为计算机的系统资源如BIOS、显卡、PCI-Express等PCI接口留出位置。 

让我们简单地看一下Windows Vista x86所支持的4GB寻址空间都包括哪些:首先,BIOS至少要占去512KB,当然,这是一个很小的数字;其次,显卡要占去略大

于其视频RAM的空间,比如说,对于希望在高分辩率下使用Aero Glass的情况而言,256MB显存是必需的,这也意味着必须在4GB的寻址空间中为显卡的256MB视

频RAM留出位置;第三,对基于x86的计算机系统而言,其还必须为其他的PCI设备保留相当部分的寻址空间,比如各种IO设备等。这样,Windows Vista在寻址真

正的物理内存之前,系统中已经被各种资源占用512MB到1GB的寻址空间,也即是说,Windows Vista真正能够使用的物理内存大致在3 GB到3.4 GB之间。 

这对于象Windows Vista这样一款以1GB RAM越跳的系统而言,系统内存的可扩充空间实在太小,尤其与当年Windows XP 128MB-4GB的内存范围相比。而且,虽

然Windows Vista X86从内核上来说应该是能够支持PAE的,但似乎目前微软并没有相应的计划。也许,Windows Vista会在今后以Service Pack方式引入对PAE

的支持?——当然,也需要硬件厂商特别是CPU、芯片组与主板厂商的配合。 

另一方面,狂炒几年的桌面64位技术尽管并未给最终用户带来太多真正意义的好处,但负面影响则是巨大的:那便是软件开发商越来越习惯了“奢侈”地使用

内存资源,以前那种在以较少的内存下实现尽可能多功能的“精致”设计越来越少见,或者说,内存总是至少不是软件开发商关注的重点,从而出现了动辄需

上百兆甚至过GB内存才能保证运行的程序。而在32位的Windows系统——不仅仅Windows Vista——中,所支持的4GB寻址空间被分成两部分:其中2GB可被应用

程序使用,而另外的2GB则被系统内核占用。因此,即使对于系统中安装了4GB内存的Windows Vista而言,应用程序所能够使用的内存也被限制在2GB之内,从

而在某些情况下仍难免会出现“内存不足”的情况。对此,虽然可以通过微软的4GT RAM Tuning来将内核的内存起始位置移至3GB处——以在Boot.ini中添加“

/3GB”开关实现,即将为内核分配的虚拟地址空间缩小到1GB,而将应用程序可使用的地址空间扩展到3GB——但距理想程度仍有距离。 

当然,如何系统硬件支持64位,问题就好办多了,Windows Vista x64可支持的内存从8GB(Windows Vista Home Basic)到128GB(Windows Vista Ultimate),类

似的寻址限制不复存在。
 
首先申明一点,我这里只讨论vista 32bit,原因不说了:很多多****硬件恐怕连64bit驱动都找不到.

Vista旗舰版(已激活),2G内存实在捉襟见肘,内核基本就霸占1G(刚开机800M,但跑一会随便就到1G了),剩下几百MB实在不够用,所以就打算升级到4G内

存,因为之前也听说32位操作系统对4G支持不完全,所以这段时间花了很多时间翻阅了很多资料,终于把事情搞清楚了……

1.所有32位Windows中,只有Win2003 SP2 (必须SP2)可以支持4G内存,但不是完美的,为啥呢?因为它是通过PAE模式实现的,这种模式实现可以利用到更大的

内存,但利用效率比64位windows要低!

2.很多网上流传的说法是可以通过添加启动参数:bcdedit /set pae ForceEnable 来实现访问4G内存,但是实际呢?实际上无论是理论还是实践都不支持这个

说法,很多人试过之后丝毫没有作用,仍然是显示3G~3.5G(由系统安装的PCI硬件数量不同而改变,设备越多显示的值越少),为什呢? 下面引用MSDN的原文

:(http://msdn2.microsoft.com/en-us/library/aa906211.aspx

Windows automatically enables PAE when the computer is configured for hot-add memory devices in memory ranges beyond the 4 GB region, as

defined by the Static Resource Affinity Table (SRAT). Hot-add memory supports memory devices that you can add without rebooting or turning

off the computer. In this case, because PAE must be enabled when the system starts, it is enabled automatically so that the system can

immediately address extended memory that is added between restarts. Hot-add memory is supported only on Windows Server 2008, Enterprise

Edition, Windows Server 2003, Enterprise Edition and Windows Server 2003, Datacenter Edition, and only on computers with an ACPI BIOS, an

x86-based processor, and specialized hardware. 

也就是说,PAE是可以实现32位windows利用4G内存,但前提是拥有特殊的硬件(我们可以理解为服务器级别的)支持才可以做到而不适用于我们的PC,而/set

pae ForceEnable又是什么用呢?下面引用MSDN的原文:(http://msdn2.microsoft.com/en-us/library/aa906211.aspx

On a computer that supports hardware-enabled Data Execution Prevention (DEP) and is running a 32-bit version of the Windows operating

system that supports DEP, PAE is automatically enabled when DEP is enabled and, on all 32-bit versions of the Windows operating system,

except Windows Server 2003 with SP1, PAE is disabled when you disable DEP. To enable PAE when DEP is disabled, you must enable PAE

explicitly, by using /set nx AlwaysOff and /set pae ForceEnable.

意思是说,由于DEP(数据执行保护)关闭后PAE会自动关闭,但是如果用户需要在关闭DEP同时仍然需要打开PAE,才需要使用/set pae ForceEnable !! 而

不是很多人理解的只要用这个参数就可以支持4G内存!

至于我们关心的,Vista 32位版本在我们的PC机上能支持多大的内存呢? 答案是3,120 MB,也就是3.05G!原因很简单,因为考虑到PCI设备(例如显卡,声卡

,网卡等等)占用的寻址范围,Vista32保留了接近1G的内存地址空间来保证这些设备的兼容性(虽然你的机器可能很多地址未被使用),也就是说,无论你看

到系统属性里是3G还是3.5G,实际可以使用的内存都是3G ! 而且微软给家庭用户给出的建议是要使用4G或以上的内存,必须使用Windows2003或者XP和Vista的

64位版本。(MSDN原文见http://support.microsoft.com/?kbid&id=929605

另外需要注意一点的是,安装3G内存后不表示就可以使用这么多,因为32位windows默认应用程序只能使用2G内存,剩下的都保留给系统内核了,因此还需要添

加启动参数:"bcdedit /set increaseuserva 3072" 来使得windows把2G以上的内存也分配给应用程序!


OK,说了这么多,大家应该很清楚了,不要因为内存便宜或钱多就上4G,因为总会浪费1G的(当然要不在乎这点钱我也没办法),(唯一缺点是3G的DDR2无法实

现双通道)

 

posted on 2008-12-03 15:45  smwikipedia  阅读(13854)  评论(5编辑  收藏  举报

导航