内存条价格的降低,1GB/2GB内存条的上市,安装4GB内存的时代到来了。然而很多用户安装了4GB的内存后,出现某些主板的BIOS里不能识别出4GB内存,以及XP系统的属性里显示3GB左右的物理内存。这就是说,4GB内存带来新的技术问题:哪些芯片组的主板和操作系统可以使用4GB内存,哪些不能使用。使用4GB内存的技术原理以及BIOS如何设置。本文将作一一介绍。
一、4GB地址空间的局限
用户安装了4GB内存,自然希望这4GB内存全部被操作系统使用。其实PC系统的物理存储器不仅仅是我们安装的内存条,还有其他物理内存。这些物理内存还必须进行编址才可以使用。
我们先要搞清楚有关内存的二个概念:第一个概念是物理内存,物理内存既包括安装在主板上的内存条(RAM),还包括主板上BIOS芯片的ROM,显示卡上的显存(RAM)和BIOS(ROM),PCI、PCI-E设备的RAM和ROM。第二个概念是地址空间,地址空间就是对物理内存编码(地址编码)的范围。所谓编码就是对每一个物理存储单元(一个字节)分配一个唯一的地址号码,通常叫做“编址”,也可以称之为“地址映射”。分配一个地址号码给一个存储单元的目的是为了便于找到它,完成数据的读写,这就是所谓的“寻址”,地址空间也叫寻址空间。系统不仅要给主板上安装的内存条编址,还要给上述的其他物理内存编址,它们都被编在同一地址空间内。编址后的物理内存就可以为系统资源使用或占用。
从Pentium Pro开始,CPU的地址总线已经是36位,寻址能力达到64GB,支持4GB内存是没有问题的。芯片组(北桥—MCH)地址总线数量决定了系统地址空间的大小。Intel945和945以前的芯片组,nForce550和550以前的芯片组有32条地址线,为系统提供4GB的地址空间。4GB的地址空间可以安装最高4GB的内存条。
表1列出了4GB地址空间的PC系统资源占用内存的详细情况:
表1:系统资源占用内存一览
系统资源 容量 2GB内存条
的内存占用 4GB内存条
的内存占用
1 固件HUB闪存(BIOS) 1MB 2.00 3.99
2 本地高级可编程控制器(APIC) 4KB
3 芯片组使用区 2MB
4 IO高级可编程控制器(APIC) 4KB
5 PCI列举区1 256MB 2.00 3.76
6 PCI-E区 256MB 2.00 3.51
7 PCI列举区2(如果需要)
(256MB为单位) 512MB 2.00 3.01
8 VGA内存 16MB 1.85 2.85
9 TESG 1MB 2.84 1.84
10 BIOS、OS、应用程序
可获得的内存 1.84 2.84
从表中可以看出安装2GB内存条时1-7项没有占用内存条的地址空间,只有 8、9项占用内存。安装4GB内存条时1-7项的地址空间与4GB内存冲突,导致内存条的这部分存储单元不能编址而不可使用,可以编址使用的内存就少于4GB。
下面的系统地址空间和物理内存分配示意图更形象地说明地址空间占用情况:
从上图可以看到4GB的地址空间可以分为两大部分,0MB-物理内存顶端的地址分配给主板上安装的物理内存,4GB到物理内存顶端的地址分配给BIOS(ROM)和PCI/PCI-E设备的存储器。由于这些存储器基本上是用于系统的输入和输出,Intel把这段地址空间称之为MMIO(Memory-Mapped I/O—I/O存储器映射)。当系统安装3GB以下的内存条时,MMIO不会与物理内存条的地址空间重叠,操作系统可以访问几乎全部的物理内存,操作系统属性里显示的物理内存基本接近实际内存的容量。
当系统安装4GB内存条时,由于位于4GB下面的地址空间优先分配给MMIO,内存条的这段区间就不能编址,操作系统就不能使用。
从表1看到即使安装2GB内存,操作系统也不能使用安装的内存条全部容量,因为还有很少的系统资源占用内存条,比如传统DOS的UMA区就有部分被占用的地址空间,因为很少,一般就忽略了。MMIO占用的地址空间在256MB—1GB,造成4GB内存条的资源浪费较大。
是否可以把MMIO占用的地址移动到地址空间的其他地方?在4GB芯片组建立的PC系统内是不可以的,一是芯片组的4GB地址空间限制,没有剩余空间;二是物理内存的编址必须是连续的,不能割断;三是系统开机首先是从4GB的顶端地址FFFF_FFFFh读取BIOS。这是IA32架构和4GB地址空间的局限。所以使用4GB芯片组主板的用户不要安装4GB内存。解决4GB内存问题的唯一办法是扩展地址空间。
二、支持大于4GB内存的芯片组
面对4GB时代的到来,Intel已经做好技术准备,并且推出支持大于4GB内存的芯片组,就是P965系列和975X,NVIDIA也推出nForce570/590以及680系列。
表2:支持4GB以上内存的芯片组
芯片组(MCH) 地址线 最大地址空间 最大内存
Intel平台 Intel 975X 36bit 64GB 8GB
Intel P965 36bit 64GB 8GB
Intel G965 36bit 64GB 8GB
Intel Q965 36bit 64GB 8GB
nForce 680i SLI 36bit 64GB 16GB
nForce 650i 36bit 64GB 8GB
AMD平台 nForce590 36bit 64GB 8GB
nForce570 36bit 64GB 8GB
AMD CrossFire 580X 36bit 64GB 8GB
从上面列出的芯片组来看,地址总线从32位提升到36位,地址空间达到64GB,支持安装8GB的物理内存。但由于IA32架构的规则是开机必须从4GB的FFFF_FFFFh地址读取BIOS,MMIO地址仍然是在4GB—3GB之间,尽管地址空间增大,支持物理内存量增大还是不能解决MMIO地址占用4GB内存编址的问题。但是64GB的地址空间为移动MMIO地址区提供了条件。
移动MMIO地址区的办法就是“内存重映射”技术。这项技术就是在IA32架构基础上,把BIOS(ROM)和PCI/PCI-E设备占用的MMIO地址区段重新映射到内存条顶端地址以上(例如4GB以上)的地址空间,从而把IA32架构规定的这一段操作系统不可使用的,位于4GB下面的MMIO地址空间回收给物理内存,使操作系统可以使用。
我们看看P965主板安装4GB内存条的“内存重映射”基本原理。请参看图2。
图2所示的OS可视内存是操作系统可以使用的,3.2GB,OS不可视的内存就是前面说的被MMIO地址空间占用而不能编址的,这段空间有800MB。
MMIO地址空间回收的第一步是在系统地址空间建立一个回收区,从上图看到回收区的下边界是“回收区基地址”,回收区基地址=物理内存的顶端地址,在本例中是4GB。回收区的上边界是“回收区上限地址”,回收区上限地址=回收区基地址+X,X就是MMIO占用的地址空间量,在本例中是800MB,上边界的地址是4GB+800MB=4.8GB,重映射就是把MMIO占用的4GB-3.2GB的地址空间移到4.8GB-4GB的位置。然后把4GB-3.2GB的地址空间回收给物理内存。
第二步是“可用内存顶端地址”和“物理内存顶端地址”界定了一个侦测窗口。本例中的可用内存顶端地址=3.2GB,物理内存顶端地址=4GB,构成800MB大小的侦测窗口。当系统I/O寻址的地址落在这个侦测窗口内,就加上4GB的偏移地址转到回收区。如果地址落在侦测窗口内但不是系统I/O寻址,就不会把这个寻址转到回收区,而是直接访问物理内存。
安装8GB内存也存在4GB的MMIO地址占用问题,也需要内存重映射解决。下面是8GB内存的MMIO地址回收示意图:
回收的原理与安装4GB内存的一样。
上面说的回收区和侦测窗口的边界地址是BIOS依据用户的硬件配置和设置经过计算得出,并存放到芯片组(MCH)的相关地址寄存器中。因此BIOS必须具有支持内存重映射的功能模块,以便用户根据安装的内存量确定是否需要内存重映射。同时BIOS内要显示出Memory Re-Mapping设置选项。当用户安装4GB或4GB以上的内存时要设置为Enabled。参见图4。
三、 解决4GB内存问题还需要操作系统支持
我们常使用的桌面操作系统是32位的,支持4GB的地址空间。前面我们介绍了解决4GB问题的芯片组是支持64GB地址空间的,在这样的芯片组主板上安装32位的操作系统,就只能使用4GB的地址空间,因此安装4GB内存不能使用仅支持4GB地址空间的32位的操作系统。应该使用支持大于4GB地址空间的32位操作系统或64位的操作系统。
表3:可以解决4GB问题的操作系统
操作系统 支持最大的寻址空间
Windows2000 Advanced Server 8GB
Windows2000 Datacenter Server 32GB
Windows XP 64 bit Edition 32GB
Windows Server 2003 Enterprise 32GB
Windows Server 2003 Datacenter 64GB
Windows Server 2003 Enterprise 64-bit Edition 64GB
Windows Server 2003 Datacenter 64-bit Edition 512GB
Windows Vista Home Basic 64-bit Edition 8GB
Windows Vista Ultimate 64-bit Edition 128GB
四、小结
1、由于iA32架构要求BIOS(ROM)芯片的地址, PCI、PCI-E存储器地址、APCI中断路由地址等必须占用从4GB开始以下的256M-1GB空间。这段MMIO地址区不能分配给内存条。4GB的内存条有256MB-1GB的容量不能编址而浪费。
2、使用4GB以上的内存条,必须使用地址(编址)空间64GB的芯片组主板(见表2)。
3、内存重映射就是把被MMIO占用的地址移到内存条容量以上的地址空间。
4、BIOS应具有支持“内存重映射”功能,设置项里有 Memory Remap Feature 选项,并设置为Enable。
5、必须安装寻址空间大于4GB的操作系统。比如Windows 2000高级服务器版,以及64位操作系统(表3)。
6、所有地址空间为4GB的芯片组(Intel945和nForce550之前的),和32位操作系统均不能利用“内存重映射”技术解决4GB内存问题。
4g内存 openstack 4G内存条
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
合宙4G模组Air780E开发板使用手册
合宙Air780E开发板使用说明
开发板 物联网 嵌入式 硬件开发 硬件设计