2024年3月31日发(作者:)

为何系统不识别4GB内存终极解迷

500元、300元、150元......随着DDR2价格的逐渐崩盘,目前连2GB DDR2-800内存的价

格也已经跌至百元,越来越多的朋友为爱机装上了4GB内存。随着4GB电脑的逐渐增加,

一个长期存在的问题又再次被人们所关注:为何我只能看到3.25GB物理内存?

无论是WinXP-32bit还是Vista-32bit,所有的用户都可以发现自己的任务管理器中最多

只显示3.25GB物理内存,更甚者还会有2.8GB甚至更低的数值出现。我们花钱购买的内存

就这样白白不见了么?人们当然不会允许这样的事情发生,于是各种论坛上展开了关于4GB

内存的大量讨论。重装系统、打开PAE、使用Ramdisk、开启Memory Remapping等等各种

手段层出不穷,所有人都想找回那失去的内存。再逐一尝试之后,人们发现始终能够在32bit

系统上找到那0.75GB内存的下落。人们所寄希望的Vista系统也仅仅是能够在系统属性上看

到4.00GB的字样,设备管理器的物理内存依然安逸的保持在3.25GB。期间,各大电脑网站

和杂志也刊登了一些关于这方面的文章,介绍了大量内容,最终人们将一切归罪于32bit操

作系统。这样的审判似乎很正确,毕竟我们可以真实的看到64bit系统下那>3.25GB的物理

内存显示,32bit系统显然贪污掉了0.75GB内存。然而事实上,操作系统却在这里成为了不

折不扣的替罪羊。因为事实上即使是在64bit系统中,内存同样会被“侵蚀”;而32bit系统也

同样可以使用超过4GB的内存。为了让广大网友都能够了解事实究竟,今天笔者就为操作

系统客串一次辩护律师,为其平反这个内存贪墨案,找寻那失落的内存。真相永远只有一个!

注:文本将以Intel当代芯片组的内存分配机制为例讲述,其他品牌芯片组在细节上或许有

与本文所描述不同之处,但结论上不会有太大出入。

32bit操作系统,32bit处理器,有着32bit寻址能力,可以访问2^32=4G物理地址,于

是拥有识别4GB内存的能力,这似乎是完全顺理成章的事情。然而其中有一个关键,什么

是物理地址?物理地址就是物理内存的地址?非也。物理地址是指处理器和系统内存之间所

用到地址,我们可以简单理解成是CPU“极方便访问的地址”。这个地址并非物理内存独享,

尽管通常它基本都会与物理地址重叠,但也可以根据需要被其他设备占用,使得物理内存实

际上只能够占用这4GB地址中的一部分。

认真看看上面这个P45芯片组的系统地址区域图。图中的方块代表的是不同区域的“地

址”,这些地址囊括了一台电脑中所有能和操作系统以及芯片组关联的设备地址,而不仅仅

是“物理内存地址”。同样的,那个4G的红线代表的是第4G个Byte的地址,并不是4GB

物理内存的分界线,尽管内存控制器很多时候确实会让它们重叠在一起。P45芯片组是一款

支持36bit寻址的产品,即可以支持64GB地址,但为了去迎合操作系统以及各种软件,因

此需要保证系统运转所必须的所有设备地址都可以在4GB范围内找到,否则会给硬件32bit

驱动程序的制作带来很多麻烦,对驱动程序兼容性造成极大程度的影响。很显然,让一个系

统正常运行并不仅仅包括内存,还要包括各种I/O设备等。在4GB的寻址范围内,物理内

存实际上只占据了一块,就是那个被称为Main Memory Address Range的区域(图中绿色框)。

安装4GB以下内存的话,Windows的任务管理器会确认1MB至TOLUD寄存器数值作为系

统可用的物理内存(无板载显卡占用)。TOLUD全称是Top of Low Usable Dram,这个16bit

寄存器由BIOS赋予一个适当的数值,其含义是4GB地址内的可用物理内存地址顶端。如

果安装2GB内存,那么TOLUD的数值就是7FFFFFFFh,也就是16进制的2GB(加上0

地址),任务管理器一般会显示2046MB(见小贴士)。既然内存并不能占据整个4GB地址,

那么其他地址主要被谁占据了呢?小贴士:相信不少非4GB用户会发现自己的内存同样被

偷吃了几MB,比如2GB内存用户通常在设备管理器中只能看到2047MB或者2046MB内

存等等。这是因为还有两块地址范围被占据,这两个区域分别是Legacy Address Range和

TSEG,他们会使用一部分内存(比如加载系统BIOS)。由于这两个区域都处于TOLUD以

下的地址范围内,包含了BIOS等底层部件的Legacy Address Range更是固定占据00000000h