登录注册.
高级搜索  

作者 主题: 09--4GB内存问题 <2010-5-23>  (阅读 2070 次)

0 会员 以及 1 访客 正在阅读本主题.

gogochen

  • 访客
09--4GB内存问题 <2010-5-23>
« 于: 八月 08, 2014, 12:11:26 上午 »

4GB内存问题

dong-bei 发表于 2010-5-23

随着单条2GB内存的普及,配置4GB内存的用户越来越多。在32位操作系统下,不能使用全部4GB内存,系统属性显示出安装内存4GB,可用内存3GB。很多用户为此提出疑问。为何不能使用4GB内存?如何解决?
本文就这个问题做详细的解说。

一、计算机的内部存储器不单单是插在主板上的内存条

一提起内存,都认为内存就是插在主板上的内存条,其实计算机的内部存储器不单单是插在主板上的内存条,还有其他内存,比如存放BIOS的EEPROM芯片,芯片组内部的各种寄存器、输入/输出设备使用的地址寄存器和数据寄存器、显卡的显存、CPU内部的寄存器、缓存等等。这些内存预先安装在主板上,或者在芯片组、CPU内,不为用户熟悉罢了。


二、计算机系统要对所有的内部存储器编地址

这些内部存储器都是存放数据或地址的,CPU要在这些内存存储器存放数据/地址,或者读取数据/地址,就要找到这些内部存储器,为了能够寻找他们,就必须对这些内存存储器编上地址。就像我们现实生活中的对房屋编的邮政地址一样。
城市的邮政地址必须要有道路或通道连接这些房屋,以便人能够进出,计算机的内存编址也需要电子线路连通。
计算机的内存编址与邮政编址不同的就是地址总量在一个时期,或者在一种计算机架构中是固定的,不能随意增减。第二个不同之处就是除内存条的地址外,系统内部的其他地址是不能随意变动的。第三个不同之处就是考虑到计算机系统配置的发展变化,要保留一些地址供扩展用。

三、32位操作系统只能给4GB的内存编地址

计算机一般有2种地址系统:、
一种是硬件的地址系统,这是与硬件的地址总线密切相关的。比如32位的地址总线、36位的地址总线、40位的地址总线、64位的地址总线。地址总线与CPU、内存控制器、芯片组的设计密切相关。这些地址都是真实的物理地址。

还有一种是操作系统的地址系统,计算机用户不能直接使用计算机硬件的物理地址,是通过操作系统的逻辑地址系统使用计算机的内部存储器的。操作系统的地址系统将对计算机的硬件地址系统进行管理,并产生一个地址对照表,使操作系统的地址与硬件地址一一对应。

操作系统的地址系统与操作系统设计时的规定有关,比如32位的操作系统,地址编码是32位的,地址代码总量是4GB。64位操作系统的地址编码是64位的,其地址量是2的64次方。实际上现在64位操作系统的地址码用36位,地址量是64GB。这也足够计算机发展几十年。也就是说32位的操作系统智能管理4GB的内部存储器,这可包括内存条、以及BIOS ROM、PCI内存等等。64位操作系统可以管理64GB的内存。


从上面介绍的32位操作系统的内存编址可以看明白这样2点:
1、32位操作系统只能给4GB的内存编址。
2、去掉留给BIOSROM、APCI内存、PCI内存的地址代码,分配给内存条的地址代码数量就不足4GB了。这就是主板安装4GB内存,使用32位操作系统,显示可用内存不到4GB的原因。并不是内存少了,是地址代码不够了。

四、为何同是32位操作系统,显示的可用内存不一样

从第三段的说明已经知道,大约有750MB-1GB的地址分配给系统内部的存储器(BIOSROM、APIC内存、PCI内存),此外还要保留一部分地址。这些地址总量是不固定的。要看芯片组的设计,比如支持4个硬盘的和支持支持8个硬盘的,PCI内存就不一样,8个硬盘的占用地址就多一些。所以不同的芯片组,在32位操作系统下,显示的可用内存多少不一样。

即使相同的芯片组,由于BIOS工程师的做法不同,也会显示不同数量的可用内存。因为从整体系统来说,AMI的原始BIOS 按规定给系统内部的存储器(BIOSROM、APIC内存、PCI内存)留足了地址(P55一般是1GB),实际上用户不可能连接了所有的PCI设备,比如硬盘,不会连接6个。这样BIOS工程师就修改BIOS,把暂时不用的地址代码收回来,分配给内存条,这样32位操作系统就会显示较多一点可用内存。比如P55主板,标准AMI BIOS是3GB可用内存,经过“修改”的BIOS可以显示3.25GB可用内存,这就是收回250MB的内存地址给内存条。
这250MB的内存地址,对系统性能的影响微乎其微。但是可以满足部分用户的心理安慰,以为多了250MB内存可用了。

其实,操作系统根本看不上这250MB,它看中的是虚拟内存,也叫页面文件,这个虚拟内存的数量是内存条的2-4倍。
因此,32位操作系统下安装4GB内存,最好用RAMDISK软件,把1GB的内存设置为RAM磁盘,然后把这个RAM磁盘用于Windows的虚拟内存(页面文件)。这样比从系统内存挤出250MB的性能提高更大,而且真正使用了全部4GB内存条。

五、64位操作系统的内存地址重映射

现在的CPU、芯片组都是集合了32位/64位二种架构,可以使用32位操作系统,也可以使用64位操作系统。这就要求硬件的地址编码系统兼容32位和64位架构。“内存地址重映射”就是解决兼容的方案。

32位系统的地总线是32位,最大地址量是4GB,64位系统理论上是64位地址总线,实际上采用40位地址总线,地址范围是1024GB。但是内存控制器是实实在在的硬件,要考虑当前的内存条容量和成本,所以内存控制器一般用是每通道33位,支持8GB内存条,双通道支持16GB内存条。从64位操作系统来讲,一般是36位地址编码,地址量是64GB。

在目前的32位的X86和64位的X64共存于同一架构的计算机体系中,就要有一种兼容32位和64位的地址转换系统,这就是“内存地址重映射”。也就是说,转成64位系统时,通过“内存地址重映射”解决支持4GB以上的内存问题。
“内存地址重映射”其实就是把32位地址体系分配给系统内部存储器(BIOSROM、APIC内存、PCI内存)的这一段地址移到4GB以上的空间,因为64位系统的地址编码空间是64GB,地址量是64GB。注意是逻辑地址,不是实际的内存,然后把原来分配给系统内部存储器(BIOSROM、APIC内存、PCI内存)的这一段地址收回,重新分配给主板上安装的内存条。

“内存地址重映射”的原理如下图。


从“内存地址重映射”的原理可以看出“内存地址重映射”是给64位系统用的,不是给32位系统用的。也就是说用户使用64位操作系统时需要启用“内存地址重映射”,使用32位操作系统可以关闭“内存地址重映射”。

开启/关闭“内存地址重映射”这个任务交给了BIOS,最开始BIOS公示“内存地址重映射”选项,用户在使用32位操作系统时关闭“内存地址映射”,使用64位操作系统时开启“内存地址重映射”。不过现在的BIOS不再把这个选项公开显示,默认就是开启,并自动依据用户安装的操作系统自动开启/关闭“内存地址重映射”。只有不能自动设置的BIOS才公示这个选项,让用户自己去设定。如果用户把“内存地址重映射”关闭,安装64位操作系统就不能支持4GB以上的内存。

网友问题回答
问:是不是不论32 位和64系统 所支持内存的总量是固定的,而且算内存总量不单单是物理内存还要包括一些寄存器内的存储器ROM的和,如果超过了这个总合多出的部分就不会显示出来?

答:系统内部的存储器(比如BIOS ROM芯片,PCI内存`),一般不需要用户了解。主板上安装的DRAM内存总量是固定的,这是设计内存控制器时规定好的,而且随时代的进步,这个DRAM内存量也增大。所以“支持内存的总量是固定的”说法不是准确。应该说系统的内存地址总量是固定的,32位系统是4GB,64位系统是64GB,一定要明确这一点,地址总量是固定的。
32位系统下,如果安装4GB内存,加上系统内部的存储器,超过4GB,地址不够用了,必须先保证给系统内部的存储器分配地址,剩下的才分配给用户安装DRAM内存,这样就不能满足4GBDRAM内存,有一部分DRAM内存分配不到地址而不能使用。
如果64位系统不与现在的32位X86系统兼容,是单独的系统(比如苹果计算机的RISC(精简指令集)系统),也就不存在“4GB内存问题”。我们现在的X64系统还是属于SISC(复杂指令集)系统,要与32位的X86兼容,才出现4GB内存问题。

问:通过修改BIOS即便可以显示出来隐藏的部分也不能被使用?

答:“隐藏”这个词不太合适,因为不存在系统把一部分DRAM内存隐藏起来。还是要从32位系统和64位系统考虑。4GB内存问题是由于X64系统和X86系统兼容而出现的。“内存地址重映射”是解决X64和X86兼容而出诞生的。BIOS的责任只是“开启”或“关闭”“内存地址重映射”,在32位的X86系统下,即使开启“内存地址重映射”也不能给安装的4GB DRAM内存全部分配到地址。因为地址总量是4GB。64位系统的地址总量是64GB,目前还不存在地址总量不够的问题。64位系统不应该存在不能给4GB内存分配地址的问题,出现这个问题是要和32位系统兼容,所以才会有“内存地址重映射”这个技术解决兼容。用户使用64位操作系统时,只要在BIOS开启“内存地址重映射”,就可以使用全部4GB内存,或者6GB、8GB、16GB等等。

问:请再详细介绍一下PCI内存?

答:PCI内存也叫做I/O内存。是连接在PCI、PCI-E总线上的各种设备使用的内存,这种内存一般都在功能芯片内,基本上是寄存器的形式。
比如硬盘,CPU读写硬盘时不会直接访问到硬盘里面的磁道/扇区,只是把要写的数据放在硬盘的数据寄存器里,然后通过写硬盘指令把数据从数据寄存器写到硬盘的扇区里。从硬盘读数据也是先把数据从硬盘送到数据寄存器。如果SATA(IDE)控制器可以管理8个硬盘,就要有8个硬盘的数据寄存器。
比如大家经常提到的CPU温度,这些温度数据就放在Supper I/O芯片的温度寄存器内。
比如PCI-E也有大量的寄存器存放PCI-E设备的临时数据,包括显卡的数据。
再比如大家知道的清CMOS,CMOS也是一种寄存器,存放BIOS设置,也属于PCI内存。CMOS是在南桥里。

上述寄存器都是PCI内存,它们都要有地址才可以让CPU能够找到它们。它们的地址都是由系统统一分配的,而且不论是386,还是586,乃至现在的PII/PIII,酷睿,这些PCI内存地址都是相同的,以便兼容。

问:我还有个问题不明白 为什么用2GB内存的时候就可以完全识别呢 这个时候的PCI内存跑哪儿去了?

答:有这个问题的用户还是没有理解,系统是分配给PCI内存和内存条地址。PCI内存和内存条是客观存在的实物,但是系统要使用它必须分配给它地址。
系统先把地址分配给PCI内存后,再把剩下的地址分配给内存条。32位系统一共有4GB内存地址量,先分配给PCI内存后,还剩2G多地址,如果主板上安装2GB内存条,这剩余的2GB多地址正好可以够分配给2GB内存条,有了地址,这2GB内存就可以使用,也就是“识别”出2G。如果安装4GB内存条,就不够了,就有1GB左右的内存单元得不到地址,没有得到地址的内存单元是不能使用的,所以就显示出“识别”2G-3G多内存,还有1G左右内存没有“识别”出来。

问:X58 Pro-E,如何让WINDOWS 2003企业版 32位使用6GB内存?

答:必须安装WINDOWS SERVER 2003企业版。
1、BIOS里面必需把Execute Bit Support设置为Enabled。
   Execute Bit Support一般在BIOS的Advanced BIOS Features/CPU Feature里
2、2003必须启动物理地址扩展(PAE)。
   就是Boot.ini 文件启用PAE开关,实例如下:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINDOWS="Windows Server 2003, Enterprise" /fastdetect /PAE
« 最后编辑时间: 十一月 17, 2014, 03:51:57 下午 作者 Superman »
已记录