选择显示字体大小

深入了解内存(七)


  在本站前一段时间推出了一系列的关于内存技术的文章,其中对于dram内存的基本原理都做了介绍,特别详细的介绍了sdram的工作情况。相信能够帮助读者们了解内存的基本工作原理。今天介绍给大家的这篇文章是aceshardware所写的关于sdram基本工作原理的文章,这篇文章的同我们前面所写的文章可以说能够相互补充。 它首先介绍了dram基本存储单元的结构,然后结合芯片组来介绍了内存工作的时序,相对于原来比较微观的介绍,这篇文章的是从整体的概念上入手的。 dram基本存储单元结构 不管你相信不相信,目前主流内存中的rdram(rambus)、ddr sdram、sdram甚至是edo ram的基本结构都是相同的,它们都是属于dram(dynamic ram:动态随机访问存储器)。所有的dram基本存储单元都是由一个晶体管和一个电容组成。

这样的基本存储单元的架构是目前最经济的方式,电容的状态决定着内存基本存储单元的逻辑状态是“0”还是“1”--充满电荷的电容器代表逻辑“1”,“空”的电容器代表逻辑“0”,不过正是因为使用了电容器所以产生了一些局限性。电容的内存储的电荷一般是会慢慢泄漏的,这也就是为什么内存需要不时的刷新的缘故。电容需要电流进行充电,而电流充电的过程也是需要一定时间的,一般是0.2-0.18微秒(由于内存工作环境所限制,不可能无限制的提高电流的强度),在这个充电的过程中内存是不能被访问的。 从技术上讲,实现内存的定时刷新并不是什么难事,dram厂商指出这种刷新操作必须每64ms进行一次,这也就意味着dram基本存储单元大约有1%的时间用在了刷新上。对于dram来说最大的问题是,读取内存会造成内存基本存储单元中的电荷丢失,所以每当dram被访问之后都要进行刷新,以维持访问之前的状态,否则就会造成数据丢失。当然拿出专门的时间进行刷新,也就增加了访问时间,提高了延迟。 sram(static ram)则不存在刷新的问题。一个sram基本存储单元由4个晶体管和两个电阻器构成,它并不利用电容器来存储数据,而是通过切换晶体管的状态来实现的,如同cpu中的晶体管通过切换不同的状态也能够分别代表0和1这两个状态。正是因为这种结构,所以sram的读取过程并不会造成sram内存储的的信息的丢失,当然也就不存在什么刷新的问题了。 sram可以比dram高的频率来运行,主要是因为获取前8个字节的时间延迟大大缩短了。sram需要2-3个时钟周期来得到想要的数据(这里我们暂时忽略cpu、芯片组和内存dimm控制电路之间的延迟),不过同样的过程dram需要大约3-9个时钟周期。当然因为构造不同,sram和dram存储1bit数据的成本是不同的,前者大约是后者的4倍--因为它的所需要的晶体管数目是后者的4倍以上。sram因为存取延迟时间非常的短,所以它的工作频率能够达到很高,因此可以带来更高的带宽。 前面我们已经提到获取第一个字大约需要3-9个时钟周期的延迟时间。为什么?在我们讨论不同的dram之间的性能差异之前,我们应该首先了解dram dimm的内部架构。 sdram基本结构 基本存储单元是内存芯片中储存信息的最小的单位,每个存储单元可以存储1个bit的信息,并且有一个由行地址和列地址共同定义的唯一的地址。我们都知道8个bit可以在一起组成一个byte(这也就意味着1byte具有28种可能的数值),而byte是内存中最小的可寻址的单元。虽然内存基本存储单元具有唯一的地址,但是并不能进行独立的寻址——这将要求内存芯片有数以百计的引脚同计算机通讯,显然这是不可能的。现在内存架构是处于同一列的基本存储单元共用一条列地址线,而处于同一行的基本存储单元共用一条行地址线,组成一个基本存储单元构成的矩阵架构。而这些矩阵架构构成一个内存bank。 大多数的sdram芯片具有这样的4个bank,一个sdram dimm (dual inline memory module)可以包括8或者16片芯片。sdram dimm具有14条地址线和64bit数据线。如果一条dimm使用8bit sdram芯片,那么在dimm上可以发现8片芯片,如果dimm使用了4bit sdram芯片,那么你可以在dimm上找到16片这样的芯片。
现在就让我们仔细的看看内存bank,上图所示的就是内存bank的示意图,每个bank中包含一个内存阵列、传感放大器、行地址解码器和列地址解码器。为了理解内存bank内部工作情况,让我们当cpu需要的数据没有调入处理器缓存,处理器从内存中调用数据的过程:   如果你想要计算cpu所等待的延迟时间,只要用这个内存子系统延迟时间乘以cpu倍频。这样一个500mhz(5x100mhz)处理器将要有5x9个时钟周期。也就是说,当cpu不能在二级缓存中找到需要的数据的话,至少要等待45个时钟周期才能调用到正确的数据。 本文到这里可以让你了解基本的dram工作情况了,下面让我们看看影响ram技术速度的主要因素。 延迟时间 究竟是什么影响了dram的速度?因为sdram是一个多bank架构,当芯片组访问过某一bank的某一行之后,这一行处于一个“开”的状态。如果下一次访问请求还是同一个行,芯片组不必等待传感放大器充电,这样的情况就叫做页命中。这种情况下ras到cas延迟将成为0个时钟周期,只要经过cas延迟时间之后数据就可以被送到输出缓存中了。换句话说,在页命中的情况下我们仅仅等待寻找正确的列的时间就可以了。 当然还有其它的可能性,就是所请求的行并不是已经打开的行,这种情况叫做页面失效(page miss)。在这种情况下,ras到cas延迟将是2-3个时钟周期,这根据sdram内存的质量不同而不同。这种情况就是前面我们详细讨论的情况。 如果芯片组已经打开了某个bank中的某一行,而请求的数据在同一bank中的另外的行中,情况就会变得更糟了。这意味着传感放大器必须在选择新的行之前回写已经打开的旧的行。这个过程叫做预充电时间(precharge time,简称trp),这是所有情况中最糟糕的情况。 内存实际带宽 为了便于大家理解延迟和带宽之间的关系,我们以一个pc100 sdram-222内存为例来论述这个问题,这里的第一个2表示cas延迟时间等于2,第二个数字表示ras到cas延迟时间,第三个数据表示预充电时间。 请看下表,它所显示的是在各种情况的下的延迟时间的。其中第三列所示的dram延迟是得到第一个列地址所需要的时间。比如在页面失效的情况下,我们必须等到2个时钟周期的预充电时间(row to cas delay, rcd),然后继续等待2个时钟周期(也就是cas延迟时间)这样就是能找到需要找的列地址了。而在表格中把2个时钟周期的预充电时间和cas延迟时间合称为dram延迟时间。 在第四列我们看到时间都比前面的延迟时间多了5个时钟周期,这5个时钟周期中,前2两个时钟周期是地址数据从cpu经过芯片组传输到dimm模组的时间,中间1个时钟周期是数据传输到输出缓存的时间,另外两个时钟周期是找到的数据经过芯片组传回到cpu的时间。   倒数第二列显示的就是传送全部的32个字节所需要的时间,最后一列显示的就是在这种情况下内存所能够达到的最大带宽。我们看到即使在最理想的情况下,也就是在页面100%命中的情况下,实际所能达到的带宽也只有320mb/s(对于cas=2的pc100 sdram来说,可以在10个时钟周期中得到32个字节的数据,也就是说需要100纳秒的时间得到32字节的数据,这样当然就能估算中实际带宽是320mb/s--当然这样也是理想状态,平时我们所需要的数据不可能都是每32个字节连续的)。 从上面计算出来的数据我们可以看出,即使对于最好的pc100 sdrams (222)内存,在最理想的状态下(页面命中率100%的情况下),实际所能达到的带宽也不过是理论带宽(800 mb/s)的40%。对于pentium iii缓存所使用的sram传送32个字节所需要的时间延迟为3-1-1-1,也就是6个时钟周期(注意它的频率可以达到300mb/s以上),这样它的带宽至少是1600mb/s。那么对于我们现在所普遍使用的pc133的情况是怎么样的呢?请看下表所示的是pc133 cas2、pc133 cas3、pc100 cas2的情况: 这里我们看到得到前8个字节的数据,pc133 cas3需要8个时钟周期而pc100 cas2却仅仅需要7个时钟周期,如果这样就觉得pc100 cas2的性能就比pc133 cas3好了,应该说是不全面的。对于系统总线分别为100mhz和133mhz的系统,如果分别使用pc100 cas2和pc133 cas3,虽然后者得到前8个字节所需的时间比前者多1个时钟周期,但是考虑到系统总线速度依然比较快,所以计算起来依然是pc133系统快一些,但是对于都是pc100的系统,即使使用pc 133 cas3的内存条,它的性能也不可能超过pc 100 cas2的内存条--不过好在一般的pc133 cas3内存都能在pc100 cas2上稳定的运行,所以如果你遇到这个情况应该知道怎么解决了。 异步和同步芯片组的相关问题 对于这些问题有了基本的概念之后,我们一起讨论bx时代的芯片组的相关问题,现在很用用户一定还在使用bx芯片组主板或者via apollo pro133a、amd750等芯片组。我们知道via apollo pro133a可以支持133外频,但是它的内存子系统的性能相对于超频到133mhz是略低的。为什么会这样,这就涉及到一个芯片组采用的异步内存或者同步的内存的问题。bx/amd750芯片组是同fsb时钟频率一致的,而via apollo pro133a芯片组的采用的是异步解决方案--因为它的可以支持pc66、pc100和pc133 sdram芯片组,所以必须采用这种解决方案。 现在让我们比较以下三种系统的情况:超频到133mhz的bx芯片组、使用异步内存的via apollo pro133a芯片组和运行在100mhz额定频率下的芯片组--每种芯片组都采用了相应频率的sdram内存。如果内存运行的频率不同于系统的总线频率,那么至少一个时钟周期用于同步。因为133 mhz总线的时钟周期是7.5纳秒,而100 mhz总线的时钟周期是10纳秒,如下图所示,在某一个时间两种频率的波同时达到上升沿,当7.5纳秒的的某个时钟周期结束的时候,10纳秒的时钟周期才进行到某一个地方。如果让这两个不同的频率的波同时达到上升沿至少需要一个时钟周期的延迟。
下面让我们看看各种情况下的延迟情况: 一个133 mhz异步内存系统得到前8个字节的延迟时间高于同步内存子系统大约15%,这也就意味着它的带宽比同步内存子系统低大约10%。 上面我们仅仅假设异步内存系统之间需要一个时钟周期来进行同步,如果需要更多的时钟周期来同步,那么异步内存系统的实际带宽将会更低。 结论 从以上的内容我们可以看到,dram内存为了保持其内的内容需要经常的刷新,这种特性限制了这种内存不可能达到太高的工作频率,在实际工作中得到需要的数据也是必须经过一定的延迟时间才能够得到的。一般的sdram的带宽在800-1066 mb/s之间,但是实际的带宽也不过是它的理论带宽的40%左右(这是在100%命中的情况的下的结果)。 在今天文章所介绍的东西涉及到bx这个基本的芯片组,这些产品正在快速的退出市场,让位给我们现在主流使用的东西。但是对于我进一步了解内存的工作原理依然有相当的帮助。不过目前的athlon、ahtlon xp系统配置的都是ddr sdram内存,而pentium 4也从rdram逐渐的过渡到了ddr sdram,所以下一篇文章我们依然从这样的角度来了解rdram和ddr sdram的工作原理和特点。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons