电脑内存的单面与双面,单Bank与双Bank有啥区别?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了电脑内存的单面与双面,单Bank与双Bank有啥区别?相关的知识,希望对你有一定的参考价值。
同题
何谓内存BANK一般而言,各位注意了,是一般而言,单面内存每条拥有一组BANK,而双面的内存则每条提供了两组的BANK,之所以要强调一般而言我会在文中加以阐明。……什么?不知道BANK为何物?好!那我就来解释一下BANK先。 内存的BANK其实分为两部分,逻辑BANK和物理BANK。
先来讲讲逻辑BANK。芯片的内部,内存的数据是以位(bit)为单位写入一张大的矩阵中,每个单元格我们称为CELL,只要指定一个行(Row),再指定一个列(Column),就可以准确地定位到某个CELL,这就是内存芯片寻址的基本原理。这样的一个阵列我们就叫它内存的逻辑BANK(Logical BANK)。
再来说说物理BANK。通常主板上的每个内存插槽分为两段,这个大家从VIA主板Bios设置中的BANK 0/1 DRAM Timing选项很容易推理得到,实际上也就是两个BANK,不过这里的BANK概念与我们前面分析芯片内部结构时提到的BANK可不一样。
简单地说这个BANK就是内存和主板上的北桥芯片之间用来交换数据的通道,目前以SDRAM系统为例,CPU与内存之间(就是CPU到DIMM槽)的接口位宽是64bit,也就意味着CPU一次会向内存发送或从内存读取64bit的数据,那么这一个64bit的数据集合就是一个内存条BANK,很多厂家的产品说明里称之为物理BANK(Physical BANK)。
目前绝大多数的芯片组都只能支持一根内存包含两个物理BANK,但是针对某个具体的条子,很多人想当然,认为每个DIMM插槽使用内存条的面数来区分占用几个BANK通道,单面的(16M,64M)只占用一个物理BANK,而双面的(32M,128M)则需占用两个物理BANK。实际上物理BANK与面数是无关的,PCB电路可以设计成双面和单面,也可把全部芯片(16颗)放在一面上(至少从理论上是完全可能)。
有些内存条单面就是一个物理BANK,但有些双面才是一个物理BANK,所以不能一概而论。256MB内存条就是一个典型的例子,虽然是双面并多达16枚芯片,但仍然是单个物理BANK的。要准确知道内存条实际物理BANK数量,我们只要将单个芯片的逻辑BANK数量和位宽以及内存条上芯片个数搞清楚。各个芯片位宽之和为64就是单物理BANK,如果是128就是双物理BANK。
CPU工作时与BANK的关系
CPU工作时,每次只访问一个物理BANK,这是因为一个物理BANK的位宽是64Bit。CPU访问的数据是存放在内存条的内存颗粒上的,现在的芯片组设计时都是要求内存条上每个芯片均承担提供数据的任务,即内存条上的每个颗粒都要负担这64bit数据的一部分。
这就要牵扯到我们上文所说得位宽的问题了,如果内存芯片的位宽是8位,那么用这个芯片组成内存条只需要8颗芯片即完成了64位数据并发任务,如果是4位,那么就需要16颗芯片才能达到64bit的要求。当内存条颗粒设计为位宽为8位,16颗内存颗粒的时候,内存条的位宽就变为6 x 16=128bit。所以就要设计为双BANK。这是由于CPU一次只能处理64bit的数据所造成的。
以后随着技术的进步,128bit,256bit都是可以实现的。以上就是所谓的逻辑BANK和物理BANK。 虽然这些区别不是很大,但是却往往造成不小的问题,让人头痛。举一个较古老的例子:曾经有一款大度256M内存采用单面了设计,仅有一组物理BANK。但是由于INTEL(Intel440BX,i815)芯片组只能正确识别单物理BANK最高容量为128M,这种情况造成大部分INTEL主板就无法完全使用大度256M内存的全部容量,只可以使用一半128M。
事实上很多类似的大容量内存不能为一些旧型号主板支持的主要原因就是芯片组对内存芯片的逻辑BANK数据深度有一定限制。我们知道芯片的容量主要由三个参数决定,首先是逻辑BANK的单元格数(数据深度),其次是逻辑BANK的位数。最后是逻辑BANK的个数。三者相乘得到芯片的容量。
大度内存256MB之所以不能在440BX上用,就是由于BX芯片组只支持内存芯片的数据深度为4M,而不是8M,所以大度条子的内存芯片在BX板上被识别成4×4×4=64Mbit(8MB),而不是本来的8×4×4=128Mbit(16MB),现在很多大容量的内存没有在BANK数和位宽上提高多少,基本都是增加芯片的数据深度,而这是需要芯片组支持的,象INTEL的LX/BX/810/815等老主板都只能支持最大4M,所以出问题再所难免。
单、双面内存孰好孰坏
那这是不是意味着单面内存不好呢?答案是否定的,上述问题的罪魁祸首应该是INTEL芯片的SDRAM识别技术,VIA、ALI、SIS大部分芯片的主板就没有问题。不过现在内存厂商考虑兼容性的问题,已经不生产单面256M的产品了,所以用户一般不用考虑此环节。
另外如果在INTEL815芯片组的主板(如ASUS CUSL2)上插三条现代双面128M的内存,系统就会自动把内存的时钟频率降到PC100来使用,而且使用过程中很不稳定,经常死机。出现这种情况是因为,INTEL815E芯片虽然有三个DIMM槽,但最多同时支持4组Bank运行在PC133状态下,如果超过四组就会自动降至PC100。所以上述问题如果换用三条单面128M的内存就迎刃而解。
我们再以kingmax为例。对比KingMax PC150 128M两个版本的产品(MPGA83S-68KX3 单面128M和MPGA83S-88KX3 双面128M),从外形上不难发现,凡1.0版的内存采用的都是16M×8,即单面八片结构的,而1.2版本的则是8MB×8即双面十六片结构。
MPGA83S-68KX3
其实说了半天,也不是说单面内存就一定比双面内存好,或者一定要在两者之间区分伯仲。单、双面内存它们的本身没有好坏,区别也很小,只不过看哪种封装被主板芯片组支持的更好罢了。不可否认的一点是,同等容量的内存,单面比双面的集成度要高,生产日期要靠后,所以工作起来就更稳定。
但是升级内存的用户请注意,一定要尽量保证升级前后,内存单、双面的统一性,这样可以最大程度的保证你系统的稳定。同时,对于广大想要对老主板升级的用户来说,分清楚自己主板所支持的范围是最重要的,当然喽,有些问题我们也可以通过升级新的主板bios达到支持的目的,但是这样做的可操作性就不是很强了,要因人而异,因板而异了。 参考技术A 1. 内存的单面与双面,单Bank与双Bank的区别?
单面内存与双面内存的区别在于单面内存的内存芯片都在同一面上,而双面内存的内存芯片分布在两面。而单Bank与双Bank的区别就不同了。Bank从物理上理解为北桥芯片到内存的通道,通常每个通道为64bit。一块主板的性能优劣主要取决于它的芯片组。不同的芯片组所支持的Bank是不同的。如Intel 82845系列芯片组支持4个Bank,而SiS的645系列芯片组则能支持6个Bank。如果主板只支持4个Bank,而我们却用6个Bank的话,那多余的2个Bank就白白地浪费了。双面不一定是双Bank,也有可能是单Bank,这一点要注意。
2. 内存的2-2-3通常是什么意思?
这些电脑硬件文章经常出现的参数就是在主板的BIOS里面关于内存参数的设置了。通常说的2-2-3按顺序说的是tRP(Time of Row Precharge),tRCD(Time of RAS to CAS Delay)和CL(CAS Latency)。tRP为RAS预充电时间,数值越小越好;tRCD是RAS到CAS的延迟,数值越小越好;CL(CAS Latency)为CAS的延迟时间,这是纵向地址脉冲的反应时间,也是在一定频率下衡量支持不同规范的内存的重要标志之一。
3.内存的双通道技术和单通道有什么不同?
什么是双通道DDR技术呢?需要说明的是,它并非我前面提到的D D R I I,而是一种可以让2条D D R内存共同使用,数据并行传输的技术。双通道DDR技术的优势在于,它可以让内存带宽在原来的基础上增加一倍,这对于P 4处理器的好处可谓不言而喻。400M H z 前端总线的P 4 A处理器和主板传输数据的带宽为3.2G B /s,而533 M Hz 前端总线的P4B处理器更是达到了4.3G B/s,而P4C处理器更是达到了800MHZ 前端总线从而需要6. 4 G的内存带宽。但是目前除了I850E支持的R ambus P C10 66规范外,根本没有内存可以满足处理器的需要,我们最常用的DDR333本身仅具有2.7G B/s的带宽。DDR400也只能提供3.2G /s的带宽。也就是说,如果我们搭建双通道DDR400的内存,理论上提供2倍DDR400的带宽。将从而根本的解决了CPU和内存之间的瓶颈问题。
4.DDR-Ⅱ和现在的DDR内存有什么不同?
DDR-II内存是相对于现在主流的DDR-I内存而言的,它们的工作时钟预计将为400MHz或更高。主流内存市场将从现在的DDR-400产品直接过渡到DDR-II。目前DDR-II内存将采用0.13微米工艺,将来会过度到90纳米,工作频率也会超过800MHZ。 参考技术B 双面兼容性好一些 颗粒多 使用上区别不大
SoC嵌入式软件架构设计之三:代码分块(Bank)设计原则
上一节讲述了在没有MMU的CPU(如80251、MIPS M控制器系列、ARM cortex m系列)上实现虚拟内存管理的集成硬件设计方法。新设计的内存管理管理单元要实现虚拟内存管理还须要操作系统、代码分块(Bank)的支持。详见SoC嵌入式软件架构设计之二:没有MMU的CPU实现虚拟内存管理的设计方法。这里要阐述Bank设计的一些原则。
Bank设计是为了实现不同一时候刻执行的Bank(代码块)执行在同一块内存上,所以在执行之前操作系统须要将已存在内存的代码/数据进行缓存处理,并载入将要执行的Bank到该内存上。为了实现这个目的,须要明白下面要点:
1.为了提高效率。我们觉得代码是不会自改动的,即代码是仅仅读的,则在Bank切换的时候能够直接将已经存在内存的Bank代码丢弃。
我们仅仅须要将当前已经存在内存的Bank代码的Bank号入栈就可以。新载入的代码能够直接覆盖该块内存。
不同的Bank有不同的虚拟地址,为什么能够放到相同的物理内存?事实上是新设计的内存管理单元的电路决定的。參考前一节的文章(SoC嵌入式软件架构设计之二:没有MMU的CPU实现虚拟内存管理的设计方法)介绍,关键是同一个Bank组的不同虚拟地址信号相应的物理输出信号是一样的。
2.程序调用后返回到一个Bank的某一行时相同须要载入该Bank代码,这时操作系统会将之前的Bank号出栈,并依据Bank号将相应的代码载入到该块内存。从1和2来看,调用Bank代码和返回一个Bank设计到Bank号的入栈和出栈,假设设计的Bank代码中的函数的虚拟执行地址带有明白的Bank号信息,那函数的调用和返回就是一个入栈和出栈过程。这样操作系统能够降低出入栈的工作,代码执行也更顺畅。
3.Bank代码中的变量数据处理:
1)全局变量。
假设全局变量定义在公共区域。那Bank代码切换过程中不需对其进行处理。
假设全局变量定义在Bank内存区域,则Bank切换时须要对这部分全局变量进行缓存处理。即在Bank号入栈之后,将Bank中的数据存到堆中。在Bank返回时除了从外存储设备载入相应的代码时,还要将其相应的数据从堆中恢复到Bank内存。为了加快数据的恢复。往往默认一个Bank数据空间的最大值。这样就不须要记录每一个Bank的数据空间的大小。
2)静态变量。跟全局变量一样。
3)常量段。其是仅仅读,跟代码一块处理。
4)局部变量。局部变量是在栈中分配空间的,所以不须要进行缓存。
5)buffer。假如该Buffer仅仅是某个Bank调用,而该Bank除了代码还有剩余空间大于buffer大小,那将buffer设置在代码段之后,并定义一个指针局部变量,程序中直接指向该buffer的首地址。
假设我们将Bank内的全局变量所有转为局部变量,那操作系统就不须要对数据进行缓存管理,就不须要堆空间。可是局部变量相应的栈空间就加大了。一个Bank可能有多个函数。而多个函数是可能会用到相同的全局变量的。但这样的情况须要的全局变量往往不大,能够考虑都转为局部变量。
假设不须要进行数据缓存。那系统管理将会很easy。
4.中断处理不能进行Bank切换。Bank切换须要进行读写外存储设备,会造成非常大的延时,所以在中断里面不应该产生Bank切换。
5.操作系统、驱动、应用各层次频繁调用的代码应设置为常驻代码,假设发生切换会损失效率。
假设频繁调用的代码非常固定,如操作系统的调度管理等代码能够固化到ROM中,以降低成本。
6.Bank内存分块大小要适中。在保持切换性能的基础上选择较小的内存块。
Bank块设置过小,就会导致Bank切换频繁,损失效率,Bank设置过大会造成内存浪费。
7.Bank内存的起始地址应该对齐扇区(512字节)。这样读外存储设备可以达到最好的性能。
请关注SoC嵌入式软件架构设计(控制器SoC固件架构)系列博文:
SoC嵌入式软件架构设计之二:没有MMU的CPU实现虚拟内存管理的设计方法
以上是关于电脑内存的单面与双面,单Bank与双Bank有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章