论文部分内容阅读
《微型计算机》今年五月下刊刊登的《谁动了我的内存?》一文是依据英特尔的《Intel Chlpset 4GB Systern Memory Sppost》白皮书和《Intel 965Exptess Chipset Family》数据说明书这两个文件来编写的,这两个文件中对Intel平台4GB内存支持问题的来源、解决疗法等问题有非常详细的的阐述。而对于AMD平台来说,AMD公司以及参与AMD平台配套芯片组设计的公司都没有正式的关于4GB内存支持问题的文件,所以很难界定AMD平台与4GB内存问题的界限。
表现:寻址能力取决于系统总线
很多朋友会存在内存控制器的疑惑,但系统的寻址能力不是由内存控制器来决定的,更准确的说法应该是系统总线决定了平台的寻址能力——因为无沦是CPU、内存控制器还是各种I/0设备都是需要挂在系统总线上的。
Athlon 64处理器拥有48位逻辑地址和40位的物理地址寻址能力,理论上对物理内存的寻址空间可以达到lTB,而且Athlon64所使用的HyDe rTranspon“前端总线”也是64位的,所以也为Athlon 64处理器支持4GB内存提供了条件。但从严格意义上来说,HyperTrans口ort不能算作是系统总线,它只是负责从CPu到系统桥之间的局部通讯总线。虽然HyperTransport也有与其它I/O设备连接的总线规范(要求),但是还没有成为必须遵守的标准。CPU与I/O设备的连接总线还要取决于芯片组厂商的设计,举个例子来说——如果按照64位的HyperTransport I/O规范设计(如nForce 5系列),一般来说是没有问题的;但如果按照32位总线的设计,那么I/O设备的32位地址就不能正确地转换为64位地址,在处理MMIO(I/O存储器映射)时就会出现问题。目前AMD的x86-64架构还没有形成完整的系统总线。
举另外一个例子,英特尔的PCI-E总线也属于系统总线的一种(现在在业界已经成为一种标准)。早在英特尔推出i915芯片组的时候,PCI-E,总线就出现在主板上。但当时的PCI-E总线还不能解决32位与64位兼容的问题,英特尔就专门发布了“Intel Chlpset 4 GB System Memory Support”白皮书声明将在以后的PCI-E架构的芯片组中解决4GB问题,到965这一代产品时他们声明已经正式解决了系统在32位模式下和在64位位模式下的寻址空间兼容问题。至此PCI-E总线才上升到系统总线的高度,也就是说从965芯片组开始,基于英特尔芯片组的主板在32位模式下寻址空间是4GB,在64位模式下寻址空间是64GB。
设计:AMD64架构和串行总线
为了更清楚的解释这个问题,我们再来详细关注一下Athlon处理器的设计与工作方式。
我们知道CPU指令,地址数据以及各种信息都是用过总线来传输的,在传输过程中这些信息会以不同的ID来标识,以便区别。而传输过程中,这些信息的位宽(有时候有用bit来表示)则取决于系统总线上的寄存器一64位系统的寄存器是64位的,32位系统的寄存器是32位的,如果想实现32位与64位之间的通讯,那就需要使用“桥”来把32位的地址信息转换为64位的地址。 Athlon 64处理器的x86—64技术就是在原有x86的基础上将通用寄存器与S1MD寄存器的数量增加了一倍,同时将原有的EAX等寄存器扩展到64位的RAX。这些通用寄存器部工作在64位模式下,而在32位环境下则不完全使用这些寄存器。为了使处理器能够兼容32位与64位,x86-64架构允许处理器工作在名两种模式下——长模式(Loilg M0de)和传统模式(Legacy Model。Athlon 64(包括后续的Athlon 64 x2)处理器最常使用的模式就是将32位地址和指令替换为64位,然后按照64位来进行运算,也就是传统模式。
AMD的64位技术采用了64位地址寄存器的设计,提供了52位物理地址(寄存器的51-0位),其中的51-12位是基本物理地址,与CPU的40位物理地址相对应,由此可以得出其支持lTB(1TB=1024GB)的寻址能力。但如果要让64位的处理器兼容32位的x86那也同样会遇到4GB限制的问题。AMD的解决方案与英特尔类似,也是把位于4GB处的MMIO映射到内存地址的高位,然后把这部分空间地址还给物理内存使用。
就笔者个人的感觉,这些设计多少有点“一厢情愿”的意思:理论上非常先进,而且无懈可击;但如果芯片组与主板的设计没有配合好,同样可能出现问题。
总线,并行总线与串行总线
总线,简而言之就是负责计算机内部各 部件之间信息交换的通道。以前由于电子器件速度的限制基本上都以并行总线居多,如内存总线PCI线等等,随着技术的发展,串行总线越来越多,而且速度上逐渐超过了传统的并行总线,如PCI-E以及HypeTansporl都是串行总线的代表。串行总线不仅传输速度更快,而且简化了硬件之间的连接。
迷惑:AMD平台的不确定性
从周边环境来讲,为AMD平台设计芯片组的多为第三方厂商,如NvIDIA、vlA、SiS、ATI(现已被AMD收购以及ULI(已被NVIDIA收购)等。这就造成了芯片组种类繁多,而就算是同一个芯片组也会分为众多的版本,这种复杂性就给AMD平台支持4GB内存带来很大的不确定性。
内存颗粒的技术进步
内存芯片能够达到的容量,取决于内存集成电路的生产技术,技术水平越先进,内存芯片的容量越大,所以一般以内存芯片的容量界定内存生产技术。内存芯片技术可以分为64Mb、128Mb 256Mb、512Mb 1Gb、2Gb和4Gb,在DDR时代很多内存厂商都在使用1Gb的颗粒,但那嘣512Mb技术最成熟、最稳定,DDR2时代(现阶段)主流颗粒达到了2Gb,至于4Gb的颗粒就要等到DDR3普及以后了。
内存条的规格是每面可以安装8颗芯片,双面是16颗芯片(台式机内存)。这样同样容量的内存条,采用不同技术的芯片,用的芯片数量也不致,比如1GB的内存条,用512M0b芯片的是16颗(双面),用1GB芯片是8颗(单面)。主板内存槽支持的容量也取决于所支BIOS里面有“内存重映射”功能,但由于AMD平台支持内存的复杂,套用的BIOS在执行“内存重映射”时往往对MMIO地址的赋值不准确而不能支持4GB内存。
因为现在大多数用户仍然在使用WindOWS XP 32位的版本,而且用到4GB内存的用户也很少购买比较低端的廉价主板,所以这个问题在目前看来并不是非常突出。也正是基于这一点,很多厂商对待4GB问题的态度也是比较模糊的。
疑问:pCB上CPU到内存插槽的布线是不是地址总线?
很多朋友会在AMD平台的主板上看到内存的信号引线都走向了CPU,而没有琏接到芯片组上面,以此证明内存与芯片组没有关系。其实这些走线是连接到内存控制器的,包括内存数据的信号线、地址线和控制线,其中地址线包括Bank选择线、行地址线、列地址线等等,但它们与“地址总线”之间并不能划上等号。
真正的地址总线是CPu与芯片组,芯片组与芯片组以及芯片组内部的总线,在AMD平台上,各位可以简单地将其理解为负责CPU内核与内存控制器之间通讯的HyperTransport总线。而且串行总线是没有专门地址线的,它们只是在总线内传输地址信息,而这些地址信息会被送到相应的地址寄存器内,以此来实现对设备的访问。试想一下,如果没有地址总线与芯片组连接,那么CPU如何来访问BIOS,硬盘等设备,键盘输入的信息和指令又是如何送到CPU中去呢?计算机内部的所有I/O设备都有地址,而它们都是挂在地址总线上的。
结论
通过上一篇文章的介绍和此篇文章的补全,我们可以对4GB内存的支持问题总结如下:
1.只有使用64位操作系统或寻址空间大于4GB的服务器版操作系统的用户才可以在x86。64平台上使用4GB及4GB以上的内存。
2.对于英特尔平台来说,要使用4GB以上的内存,必须用英特尔明确说明支持4GB内存重映射的芯片组的主板。对于AMD64处理器的用户来说,要使用4GB以上的内存最好选用高端的芯片组主板,低端芯片组的主板不能保证全部支持(如果需要使用,用户最好能够测试一下)。
3.目前支持内存重映射的英特尔和AMD平台主板B10S一般都会支持内存重映射功能,默认设置一般是开启的,所以有些时候并不会显示出相关的设置项。而使用32位操作系统(支持PAE的服务器版除外)时,由于操作系统的4GB寻址限制,不能使用全部内存。也就是对于现在多数使用Windows XP/2000的用户来说,4GB内存没有用武之地,选择3GB以下的容量足矣。
表现:寻址能力取决于系统总线
很多朋友会存在内存控制器的疑惑,但系统的寻址能力不是由内存控制器来决定的,更准确的说法应该是系统总线决定了平台的寻址能力——因为无沦是CPU、内存控制器还是各种I/0设备都是需要挂在系统总线上的。
Athlon 64处理器拥有48位逻辑地址和40位的物理地址寻址能力,理论上对物理内存的寻址空间可以达到lTB,而且Athlon64所使用的HyDe rTranspon“前端总线”也是64位的,所以也为Athlon 64处理器支持4GB内存提供了条件。但从严格意义上来说,HyperTrans口ort不能算作是系统总线,它只是负责从CPu到系统桥之间的局部通讯总线。虽然HyperTransport也有与其它I/O设备连接的总线规范(要求),但是还没有成为必须遵守的标准。CPU与I/O设备的连接总线还要取决于芯片组厂商的设计,举个例子来说——如果按照64位的HyperTransport I/O规范设计(如nForce 5系列),一般来说是没有问题的;但如果按照32位总线的设计,那么I/O设备的32位地址就不能正确地转换为64位地址,在处理MMIO(I/O存储器映射)时就会出现问题。目前AMD的x86-64架构还没有形成完整的系统总线。
举另外一个例子,英特尔的PCI-E总线也属于系统总线的一种(现在在业界已经成为一种标准)。早在英特尔推出i915芯片组的时候,PCI-E,总线就出现在主板上。但当时的PCI-E总线还不能解决32位与64位兼容的问题,英特尔就专门发布了“Intel Chlpset 4 GB System Memory Support”白皮书声明将在以后的PCI-E架构的芯片组中解决4GB问题,到965这一代产品时他们声明已经正式解决了系统在32位模式下和在64位位模式下的寻址空间兼容问题。至此PCI-E总线才上升到系统总线的高度,也就是说从965芯片组开始,基于英特尔芯片组的主板在32位模式下寻址空间是4GB,在64位模式下寻址空间是64GB。
设计:AMD64架构和串行总线
为了更清楚的解释这个问题,我们再来详细关注一下Athlon处理器的设计与工作方式。
我们知道CPU指令,地址数据以及各种信息都是用过总线来传输的,在传输过程中这些信息会以不同的ID来标识,以便区别。而传输过程中,这些信息的位宽(有时候有用bit来表示)则取决于系统总线上的寄存器一64位系统的寄存器是64位的,32位系统的寄存器是32位的,如果想实现32位与64位之间的通讯,那就需要使用“桥”来把32位的地址信息转换为64位的地址。 Athlon 64处理器的x86—64技术就是在原有x86的基础上将通用寄存器与S1MD寄存器的数量增加了一倍,同时将原有的EAX等寄存器扩展到64位的RAX。这些通用寄存器部工作在64位模式下,而在32位环境下则不完全使用这些寄存器。为了使处理器能够兼容32位与64位,x86-64架构允许处理器工作在名两种模式下——长模式(Loilg M0de)和传统模式(Legacy Model。Athlon 64(包括后续的Athlon 64 x2)处理器最常使用的模式就是将32位地址和指令替换为64位,然后按照64位来进行运算,也就是传统模式。
AMD的64位技术采用了64位地址寄存器的设计,提供了52位物理地址(寄存器的51-0位),其中的51-12位是基本物理地址,与CPU的40位物理地址相对应,由此可以得出其支持lTB(1TB=1024GB)的寻址能力。但如果要让64位的处理器兼容32位的x86那也同样会遇到4GB限制的问题。AMD的解决方案与英特尔类似,也是把位于4GB处的MMIO映射到内存地址的高位,然后把这部分空间地址还给物理内存使用。
就笔者个人的感觉,这些设计多少有点“一厢情愿”的意思:理论上非常先进,而且无懈可击;但如果芯片组与主板的设计没有配合好,同样可能出现问题。
总线,并行总线与串行总线
总线,简而言之就是负责计算机内部各 部件之间信息交换的通道。以前由于电子器件速度的限制基本上都以并行总线居多,如内存总线PCI线等等,随着技术的发展,串行总线越来越多,而且速度上逐渐超过了传统的并行总线,如PCI-E以及HypeTansporl都是串行总线的代表。串行总线不仅传输速度更快,而且简化了硬件之间的连接。
迷惑:AMD平台的不确定性
从周边环境来讲,为AMD平台设计芯片组的多为第三方厂商,如NvIDIA、vlA、SiS、ATI(现已被AMD收购以及ULI(已被NVIDIA收购)等。这就造成了芯片组种类繁多,而就算是同一个芯片组也会分为众多的版本,这种复杂性就给AMD平台支持4GB内存带来很大的不确定性。
内存颗粒的技术进步
内存芯片能够达到的容量,取决于内存集成电路的生产技术,技术水平越先进,内存芯片的容量越大,所以一般以内存芯片的容量界定内存生产技术。内存芯片技术可以分为64Mb、128Mb 256Mb、512Mb 1Gb、2Gb和4Gb,在DDR时代很多内存厂商都在使用1Gb的颗粒,但那嘣512Mb技术最成熟、最稳定,DDR2时代(现阶段)主流颗粒达到了2Gb,至于4Gb的颗粒就要等到DDR3普及以后了。
内存条的规格是每面可以安装8颗芯片,双面是16颗芯片(台式机内存)。这样同样容量的内存条,采用不同技术的芯片,用的芯片数量也不致,比如1GB的内存条,用512M0b芯片的是16颗(双面),用1GB芯片是8颗(单面)。主板内存槽支持的容量也取决于所支BIOS里面有“内存重映射”功能,但由于AMD平台支持内存的复杂,套用的BIOS在执行“内存重映射”时往往对MMIO地址的赋值不准确而不能支持4GB内存。
因为现在大多数用户仍然在使用WindOWS XP 32位的版本,而且用到4GB内存的用户也很少购买比较低端的廉价主板,所以这个问题在目前看来并不是非常突出。也正是基于这一点,很多厂商对待4GB问题的态度也是比较模糊的。
疑问:pCB上CPU到内存插槽的布线是不是地址总线?
很多朋友会在AMD平台的主板上看到内存的信号引线都走向了CPU,而没有琏接到芯片组上面,以此证明内存与芯片组没有关系。其实这些走线是连接到内存控制器的,包括内存数据的信号线、地址线和控制线,其中地址线包括Bank选择线、行地址线、列地址线等等,但它们与“地址总线”之间并不能划上等号。
真正的地址总线是CPu与芯片组,芯片组与芯片组以及芯片组内部的总线,在AMD平台上,各位可以简单地将其理解为负责CPU内核与内存控制器之间通讯的HyperTransport总线。而且串行总线是没有专门地址线的,它们只是在总线内传输地址信息,而这些地址信息会被送到相应的地址寄存器内,以此来实现对设备的访问。试想一下,如果没有地址总线与芯片组连接,那么CPU如何来访问BIOS,硬盘等设备,键盘输入的信息和指令又是如何送到CPU中去呢?计算机内部的所有I/O设备都有地址,而它们都是挂在地址总线上的。
结论
通过上一篇文章的介绍和此篇文章的补全,我们可以对4GB内存的支持问题总结如下:
1.只有使用64位操作系统或寻址空间大于4GB的服务器版操作系统的用户才可以在x86。64平台上使用4GB及4GB以上的内存。
2.对于英特尔平台来说,要使用4GB以上的内存,必须用英特尔明确说明支持4GB内存重映射的芯片组的主板。对于AMD64处理器的用户来说,要使用4GB以上的内存最好选用高端的芯片组主板,低端芯片组的主板不能保证全部支持(如果需要使用,用户最好能够测试一下)。
3.目前支持内存重映射的英特尔和AMD平台主板B10S一般都会支持内存重映射功能,默认设置一般是开启的,所以有些时候并不会显示出相关的设置项。而使用32位操作系统(支持PAE的服务器版除外)时,由于操作系统的4GB寻址限制,不能使用全部内存。也就是对于现在多数使用Windows XP/2000的用户来说,4GB内存没有用武之地,选择3GB以下的容量足矣。