“记忆才是我们真正拥有的。”
——elias lieberman
“逝者活在人们的记忆里。”
——cicero
“虽然太阳系以每小时四万三千英里的速度向武仙座球状星团m13靠近,但仍有些人坚持不承认这个过程。”
——kurt vonnegut,泰坦的警报
“计算机应该由玻璃构成,因为它到处都是瓶颈。”
——alan clements,2001.03
“在这个世界上,我们身处何地并不重要,我们朝着什么方向前行才重要。”
——oliver wendell holmes
“瞄准是不够的,你必须命中。”
——德国谚语
“……计算机硬件发展十分迅速。人类有史以来没有其他技术能够在30年中获得6个数量级的性能–价格收益。”
——fred brooks jr
本章将介绍的计算机存储器和i/o系统是其主存储器(main memory)和直接访问存储器(immediate access store)。从许多方面看,这是计算机最乏味的部分,其作用就是负责为处理器芯片存储数据。存储器似乎没有什么可以炫耀的,从来没有听到电脑爱好者像谈论超频或多处理器那样兴奋地谈论它。简而言之,主存储器保存了一些数据直到cache需要这些数据或者关闭了计算机电源。但是,本章将要介绍一些多年来在存储技术上取得的显著进步。将研究那些出现和已克服的问题,并介绍一些正在研发的新技术和物理器件。
在这一章中,将介绍直接访问存储器的工作原理,静态(static)和动态(dynamic)存储器之间的差异,易失性(volatile)和非易失性(nonvolatile)存储器之间的差异。此外还介绍一些开始在存储系统中发挥重要作用的新技术。本章还将讨论包括存储设备特点在内的存储系统设计者必须考虑的问题。本书的大多数读者都不可能设计一个cpu,但可能会为嵌入式计算机或类似装置设计一个存储系统。从计算机摄像头到手机这样的数字系统,其存储系统往往由现成的组件构成。
原理上,计算机存储器是最容易理解的部件;它是保存程序和数据的地方。在实践中,存储系统总由从dram到硬盘这样的各种设备构成,这些设备又是由多种技术制造的。事实上,存储设备性能的差异比计算机系统中的其他部件都要大。存储部件可能保持几个字或几百gb的数据;其读取时间最短为1ns最长为几秒;其价格可能从几美分到一千美元。
因为存储器涉及的内容很多,涵盖不同的存储技术,本书将存储部分分为两章。本章着眼于程序运行时所在的直接访问存储器(immediate access store)或主存储器(primary storage)。下一章将介绍用来保存当前没有执行的程序和数据的二级存储(secondary storage)系统。虽然现在有的二级存储器采用了固态硬盘,一般情况下,主存储器采用半导体技术、而二级存储采用磁性或光学技术实现。
存储器的性能提升迅速,在过去的20年中每年约提升7%,如图2-1所示。另一方面,处理器的性能提升更了不起,每年提高60%,比存储器性能提升快很多,这使得存储器系统成为现代处理器的一大瓶颈。
本章将介绍静态和动态半导体存储器的工作原理,以及它们是如何与处理器连接的。特别是将介绍存储器的时序,给出数据传送过程中操作的序列。这部分内容将帮助读者理解在第4章中将介绍的一些概念,第4章主要介绍输入/输出技术。本章有一节是专门介绍dram的,它具有复杂的接口要求,近年来已经出现了几种形式的dram。
人们期望存储设备能够完成其预期工作——记住数据。可以利用任何一种材料来实现存储器,只要该材料的某种性质可以改变,而后又可以检测这种变化即可。大多数计算机教材认为,第一个存储系统是hollerith发明的制表机上的打孔卡片或者是jacquard织布机上的木制卡。当然,从广义上讲,所有包括从埃及象形文字到纸笔系统等在内的各种书写系统都是存储系统。
可以用来存储数据的物理性质的范围相当广泛。虽然人们都听到过山谷的回声,但很少有人会想到使用回声作为存储系统的基础。20世纪40年代后期,人们利用声波在水银管内的传播来存储数据(水银延迟线存储器)。在该管的一端,以一系列超声波脉冲的形式将数据传输到管中(声音在水银中的传输速度为1450m/s)。当声音到达管子的另一端,它由声电转换器接收并放大,并反馈到管子的前一端。这是一种动态存储器,因为数据总是以物理运动的形式存在。即使在今天,玻璃延迟线仍然用在一些电视信号处理中,用来将信号延迟一段固定的时间。
20世纪50年代至70年代,数据被存储在由铁氧体磁芯(ferrite core)构成的小珠子(或环)的磁场中(因此计算机文献中通常将其称为磁芯存储器)。今天的硬盘仍然使用相同的磁性质来存储数据。正是由于其重要性,本书将在下一章详细讨论磁记录方式。
从20世纪70年代中期开始,半导体存储器已经成为主存储器的标准形式,即静态ram(sram)或动态ram(dram)。今天只有小型嵌入式系统使用静态ram,而pc使用大约2~48gb的dram。如果dram是本章的主题(theme)的话,那么变化(variation)则是由一些半导体存储器的新形式,如铁电(ferroelectric)半导体存储器,它用晶体中原子的位置来存储数据;或者双向开关(ovonic)存储器,它通过硫系(chalcogenide)玻璃在非晶态(amorphous)和晶态(polycrystalline)之间的转换来存储数据。下面引入一些词汇来对存储器系统和技术进行描述。
计算机所使用的不同存储技术之间的根本区别在于数据的访问方式:直接(directly)访问或顺序(sequentially)访问。可以直接访问的存储器被称为随机访问存储器(random access memory,ram),这是由于可以随机地访问任何数据元素,且所花费的时间是固定的,与数据的物理位置无关。这种存储器也被称为直接访问存储器(immediate access memory,ias)。当然,这些存储器肯定不是立即访问的——没有哪种存储器可以立即得到访问结果,只是它们比其他类型存储器的速度要快罢了。
顺序访问存储器需要依次访问每个存储单元直到找到所需的元素。顺序访问存储器的例子是磁带存储器,需要一直读磁带直到找到所要的数据。前面提到的水银延迟线(acoustic mercury delay line)存储器就是顺序访问存储器。随机访问存储器比顺序访问存储器要快,但它们也更贵。大多数半导体存储器如dram或闪存都是随机访问的。而移位寄存器是一种顺序访问存储器。
人们常说存储器的速度或者说其是如何快或如何慢。这些术语指的是需要多长的时间来访问数据。存储器的关键参数为访问时间tacc。
在理想的存储器中,数据将一直保持不变直到修改它。这种存储器被称为非易失性(nonvolatile)存储器。例如,写数据到硬盘,这些数据将一直保存在硬盘上。有些存储器技术只在加电的时候才能保留数据,拔掉电源插头数据就丢失了。这些存储器被称为易失性(volatile)存储器,因为断电后数据将丢失。大多数pc和工作站的主存都由易失性的dram构成。如果采用非易失性存储器,就没有必要在每次打开电源开关后重新启动计算机(即将操作系统从非易失性的磁盘存储器装载到计算机的易失性存储器中)。稍后将介绍一类非易失性存储器——闪存(flash memory),它是目前的一种主流技术,是非易失性存储器的新形式。
如果可以向存储器写或者从存储器读数据,而且可以完成的读操作与写操作的次数相近,这种存储器就是读/写(read/write)存储器。计算机的主存当然是由读/写存储器组成。如果可以很容易地读存储器,但其内容不能修改,则为只读(read-only)存储器。只读存储器总是非易失性存储器。
当然,没有真正的只读存储器。如果有,就不可能首先把数据放入其中。完全意义上的只读存储器正如王水的地位一样,除非被分解,否则没有任何容器能够容纳它。在掩模编程(mask-programmed)rom被生产的时候数据就完成了加载,因为每个存储单元的物理结构决定了它保存的是1还是0。掩模编程rom价格便宜,但以后不能修改。它曾经用来保存引导程序、操作系统以及bios。今天它已过时,被闪存替代了。
实际的只读存储器更应该描述为大部时间为读(read-mostly)的存储器,它可以进行有限次数的修改。此外,它的写操作要比读操作更复杂且更缓慢。这类存储器的例子包括eprom、eeprom和闪存。eprom表示电可编程只读存储器(electronically programmable read-only memory),eeprom表示可擦除和电可编程只读存储器(erasable and electronically programmable read-only memory)。后文将更详细地介绍这些技术。
随机访问、读写以及易失性存储器可以分为两类:静态(static)和动态(dynamic)。它是通过半导体存储单元的结构及其性质来进行分类的。静态存储器利用交叉耦合的晶体管来构造一个rs触发器,用触发器的状态来存储数据。动态存储器(dram)采用半导体技术将数据表示为存储在电容中的电荷。相比于动态存储器,静态存储器的速度较快、价格较昂贵、芯片密度(位/芯片)较低。动态存储器更便宜,但相比静态存储器在实际电路中使用更难。今天这种情况在逐渐好转。如今,通过cpu、主板桥芯片和dram自己来完成对dram的控制。20世纪80年代,在计算机中实现dram控制器是一项艰巨的任务。
动态存储单元中数据将在几毫秒后丢失,除非它通过不断的刷新(refreshing)操作重写。动态存储器中读与写的访问时间不同,典型的dram并不能真正地随机访问,这是因为相邻存储单元要比随机选择单元的访问速度更快。
由于dram组成了大多数pc和工作站的存储器,dram的性能和特点对计算机的整体性能有重要影响。后文将详细介绍dram。
存储器的最小单元就是存储一位的存储位元(memory cell)。半导体存储器被组织为一个n行m列的数组;即它含有n×m个位元。存储器的宽度(width)m,就是存储器中每个字包含的比特(位)数。当执行读或写操作时,一个字的所有m位同时进行相同的操作。存储器的长度(length)n,定义为地址的数目(即存储器使用log2 n位地址线来访问n个位置。
存储部件的宽度并不一定与计算机中总线或基本数据单元的宽度相同。例如,计算机可能具有64位的数据总线,但使用4位宽度的存储部件。因为每个存储部件只提供4位数据,这就需要64/4=16个存储部件并排工作以满足64位数据总线的需求。如果每个4位存储部件具有4m个可寻址位置,则存储部件的容量为4b×4m=16mb=224b=2mb,整个存储器的容量为16片×16mb=228b=32mb。
图2-2说明了3种宽度之间的关系。该cpu具有64位的寄存器,因此被称为64位机;即它是64位体系结构的。cpu和存储器之间的总线为32位宽,64位的数据元素必须连续两次通过总线操作从存储器中取出。此时可以说,64位体系结构(architecture)用32位组织形式(organization)实现。该存储器阵列由4个8位芯片构成。这些芯片在每个读周期贡献8位数据,即芯片是并行访问的。
存储器的主要时间参数是其读访问时间(read access time)、写访问时间(write access time)和周期时间(cycle time)。读访问时间就是访问存储器位置并获取其内容的时间。写访问时间就是将数据写到存储设备中的时间。周期时间是两个连续的存储器访问之间的最小间隔时间。
理想情况下,存储器的读、写和周期时间都应该相同,这在半导体静态ram中是正确的。有些存储器(例如,dram)的周期时间比读或写访问时间要长,这是因为在连续访问之间需要完成某些内部操作。前文已经指出,大部时间为读的存储器,如flash eprom,写访问时间要比读访问时间长得多。
一个特别重要的存储器参数是功耗(power consumption)。半导体读/写存储器需要能量来操作和存储数据。功耗对于由电池供电的便携式设备设计来说是十分重要的;这是当今泛在计算和个人计算关注的一个重要问题。
存储设备(或任意其他部件)消耗的能量最终表现为热量,必须被扩散到周围的环境中。由于散热量决定了存储器(或cpu)的操作温度,因此散热非常重要。当某个设备对象的温度高于环境温度,散热量与该设备的散热面积、散热表面的效率、环境温度和设备温度之间的差值等有关。某设备的散热量pdissipate由下式给出:
<code>pdissipate=k?a?(tdevice-tambient)</code>
其中:k为常数,a为散热面面积。
因为部件失效的概率是温度的指数函数(每增加15℃,故障率增加一倍),因此功耗应尽可能地小。具有较大散热量的芯片,如处理器,需要配备散热片(heat sink)来增加其表面积;如果散热面积a增加了,散热需要的温度差(tdevice-tambient)就可以减小。
表2-1总结了本章中讨论的几种存储设备的典型特性。
虽然已经在第1章中介绍了存储层次(memory hierarchy),图2-3提醒人们,该概念是理解计算机存储系统组织的关键。本章讨论随机访问存储器(random access memory),包括静态和动态存储器。在介绍读/写存储器(read/write memory)后,将介绍包括闪存在内的大部分时间为读(read-mostly)的存储器系列。如果说低成本、高速随机访问存储器将改进计算机的性能,使它们更快、更能实时处理视频信息,那么闪存的应用已经带来了从手持设备到mp3播放器等新一代个人数字系统。