这张图中划分中更为细致,共分了六级,从0到5。从上到下依次是寄存器,L1 cache,L2 cache,主存,磁盘,远端存储介质。这张图呈现了存储器的金字塔型构造。左侧的箭头表明,处于金字塔高端的存储器具有较高的访问速度以及较贵的价格,而处于金字塔低端的存储器具有较低的访问速度以及较便宜的价格。在这两个因素的平衡下,在单个系统中,高级存储器容量一般较小,而低级存储器容量较大。
下表是各级存储器的访问速度。
存储器类型 | 访问速度(以时钟周期计) |
寄存器 | 0 |
高速缓存 | 1~10 |
主存 | 50~100 |
磁盘 | 20,000,000 |
远端存储介质 | ~=20,000,000 |
由上表可以看出,前面几级的速度基本差不多,差距最大的是磁盘,其速度与前面差了N个数量级。这是存储器层次结构必须存在的原因之一。
下面从其本质来看。寄存器与CPU紧密相连,在此不讨论。从高速缓存到主存都属于随机访问存储器(Random-Access Memory, RAM)。RAM分为两类,静态RAM(SRAM)和动态RAM(DRAM)。这里的静态和动态之分,是看存储内容是否需要动态刷新。在通电情况下,SRAM不用刷新,而DRAM需要以某种策略来刷新数据。(有意思的是,其内部刚好相反,由于SRAM中采用触发器来存储,其内部一直有电流流动,故实际上是动态的,而DRAM采用电容来存储,故实际上是静态的。从这个意义上来说,SRAM比DRAM耗能要多)DRAM不断的发展变化,产生新的产品,我就不一一举例了。从我开始使用电脑时,只见过SDRAM以及后来的DDR了。SDRAM的S表示Synchronous,即同步。该技术比它的先趋所采用的异步技术,在访问速度上有了提高。DDR,全称Double Data-Rate Synchronous DRAM,即双倍速率的SDRAM。其利用时钟触发的上升沿和下降沿来访问数据,使其速率比SDRAM快了一倍。至于再往后的DDR2,DDR3除了升频之外,不知道还有没有结构上的变化。另外,显存与通常的主存还是不一样的。本来嘛,它的应用需求就不同。显卡要求显存具有更大的数据吞吐率,因此显存一般都支持并发的读/写操作。
前面讲述的RAM都属于易失性存储器,即数据的保持需要电源供应。下面介绍非易失性存储器。通常称为ROM(Read-Only Memory),字面译为只读存储器。由于历史原因一直沿用至今。现在的ROM不仅可读也可写。ROM常用于主板上的固存,用于存储BIOS以及开机自检等基本程序。后来发展有EPROM,称为可擦写ROM,实际上是光可擦写,一般可反复存储1000次左右。近来有EEPROM,即俗称的E平方PROM,称作电可擦写ROM。现在广泛使用的U盘就是采用这一存储技术。
再来看一下磁盘,其结构示意图如下所示。
存储器层次结构(即缓存结构)存在的原因之二,是由于数据访问的时间和空间局部性原理,即数据访问在时间和空间上都趋于相同或相近的数据。但是时空特性的好坏因程序的不同而不同(人为写出时空特性狂差的程序还是很有可能地),所以必须要强调这一局部性原理。由于这一原理的存在,可将最近最常使用的数据或代码放在离CPU较近的缓存中,以提高访问速率。关于具体的编程需要注意的细节,还是即时查书的好,作为总结不必要了。