第5章存储系统和结构存储系统是由几个容量、速度和价格各不相同的存储器构成的系统。设计一个容量大、速度快、成本低的存储系统是计算机发展的一个重要课题。本章**讨论主存储器的工作原理、组成方式以及运用半导体存储芯片组成主存储器的一般原则和方法,此外还将介绍高速缓冲存储器和虚拟存储器的基本原理。
5.1存储系统的组成
存储系统和存储器是两个不同的概念。本节首先介绍各种不同用途的存储器,然后介绍它们是如何构成一个存储系统的。
5.1.1存储器分类
随着计算机系统结构和存储技术的发展,存储器的种类日益繁多,根据不同的特征可对存储器进行分类。
1. 按存储器在计算机系统中的作用分类
(1) 高速缓冲存储器
高速缓冲存储器(Cache)位于主存和CPU之间,用来存放正在执行的程序段和数据,以便CPU能高速地使用它们。高速缓冲存储器的存取速度可以与CPU的速度相匹配,但存储容���较小,价格较高。目前的**微机通常将它们或它们的一部分制作在CPU芯片中。
(2) 主存储器
主存用来存放计算机运行期间所需要的程序和数据,CPU可直接随机地进行读/写访问。主存具有一定容量,存取速度较高。由于CPU要频繁地访问主存,所以主存的性能在很大程度上影响了整个计算机系统的性能。
(3) 辅助存储器
辅助存储器又称外存储器或后援存储器,它用来存放当前暂不参与运行的程序和数据以及一些需要**性保存的信息。辅存设在主机外部,容量极大且成本很低,但存取速度较低,而且CPU不能直接访问它。辅存中的信息必须调入主存之后,CPU才能使用。2. 按存取方式分类
(1) 随机存取存储器(Random Access Memory,RAM)
存储系统和结构第 5 章计算机组成原理(第4版)所谓随机存取是指CPU可以对存储器中的内容随机地存取,CPU对任何一个存储单元的写入和读出时间是一样的,即存取时间相同,与其所处的物理位置无关。RAM读/写方便,使用灵活,主要用作主存,也可用作高速缓冲存储器。
(2) 只读存储器(Read Only Memory,ROM)
ROM可以看作RAM的一种特殊形式,其特点是: 存储器的内容只能随机读出而不能写入。这类存储器常用来存放那些不能改变的信息。由于信息一旦写入存储器就固化了,即使断电,其写入的内容也不会丢失,所以ROM又称为固定存储器。ROM除了存放某些系统程序(如BIOS程序)外,还用来存放专用的子程序,或用作函数发生器、字符发生器及微程序控制器中的控制存储器。
(3) 顺序存取存储器(Sequential Access Memory,SAM)
SAM的存取方式与前两种存储器完全不同。SAM的内容只能按某种顺序存取,存取时间的长短与信息在存储体上的物理位置有关,所以SAM只能用平均存取时间作为衡量存取速度的指标。磁带机就是这样一类存储器。
(4) 直接存取存储器(Direct Access Memory,DAM)
DAM既不像RAM那样能随机地访问任一个存储单元,也不像SAM那样完全按顺序存取,而是介于两者之间。当要存取所需的信息时,**步直接指向整个存储器中的某个小区域(如磁盘上的磁道);第二步在小区域内顺序检索或等待,直至找到目的地后再进行读/写操作。这种存储器的存取时间也是与信息所在的物理位置有关的,但比SAM的存取时间要短。磁盘机就属于这类存储器。
由于SAM和DAM的存取时间都与存储体的物理位置有关,所以又可以把它们统称为串行访问存储器。
3. 按存储介质分类
(1) 磁芯存储器
采用具有矩形磁滞回线的铁氧体磁性材料,利用两种不同的剩磁状态表示“1”或“0”。一颗磁芯存放一个二进制位,成千上万颗磁芯组成磁芯体。磁芯存储器的特点是信息可以长期存储,不会因断电而丢失;但磁芯存储器的读出是破坏性读出,即不论磁芯原存的内容为“0”还是“1”,读出之后磁芯的内容一律变为“0”,因此需要再重写一次,这就额外地增加了操作时间。从20世纪50年代开始,磁芯存储器曾一度成为主存的主要存储介质,但因磁芯存储器容量小、速度慢、体积大、可靠性低,从20世纪70年代开始,已经被半导体存储器逐渐取代。
(2) 半导体存储器
采用半导体器件制造的存储器,主要有MOS型存储器和双极型(TTL电路或ECL电路)存储器两类。MOS型存储器具有集成度高、功耗低、价格便宜、存取速度较慢等特点;双极型存储器具有存取速度快、集成度较低、功耗较大、成本较高等特点。半导体RAM存储的信息会因为断电而丢失。
(3) 磁表面存储器
在金属或塑料基体上,涂覆一层磁性材料,用磁层存储信息,常见的有磁盘、磁带等。由于它的容量大、价格低、存取速度慢,故多用作辅助存储器。
(4) 光存储器
采用激光技术控制访问的存储器,一般分为只读式、一次写入式、可改写式3种,它们的存储容量都很大,是目前使用非常广泛的辅助存储器。
4. 按信息的可保存性分类
断电后存储信息即消失的存储器称为易失性存储器,例如半导体RAM。断电后信息仍然保存的存储器称为非易失性存储器,例如ROM、磁芯存储器、磁表面存储器和光存储器。
如果某个存储单元所存储的信息被读出时,原存信息将被破坏,则称破坏性读出;如果读出时,被读单元原存信息不被破坏,则称非破坏性读出。具有破坏性读出性能的存储器,每当一次读出操作之后,必须紧接一个重写(再生)的操作,以便恢复被破坏的信息。
从原理上讲,只要具有两种明显稳定的物理状态的器件和介质都能用来存储二进制信息,但真正能用来做存储器的器件和介质还需要满足各类存储器技术指标的要求。
5.1.2存储系统层次结构
为了解决存储容量、存取速度和价格之间的矛盾,通常把各种不同存储容量、不同存取速度的存储器按一定的体系结构组织起来,形成一个统一整体的存储系统。
多级存储层次如图51所示。从CPU的角度来看,n种不同的存储器(M1~Mn)在逻辑上是一个整体。其中,M1速度*快、容量*小、位价格*高;Mn速度*慢、容量*大、位价格*低。整个存储系统具有接近于M1的速度,相等或接近Mn的容量,接近于Mn的位价格。在多级存储层次中,*常用的数据在M1中,次常用的在M2中,*少使用的在Mn中。
图51多级存储层次
对于由M1和M2构成的两级存储层次结构,假设M1、M2访问时间分别为TA1、TA2。
命中率H定义为CPU产生的逻辑地址能在M1中访问到的概率。在一个程序执行期间,设N1为访问M1的次数,N2为访问M2的次数,则命中率H为:H=N1N1 N2不命中率或失效率是指由CPU产生的逻辑地址在M1中访问不到的概率。对于两级存储层次,失效率为1-H。
两级存储层次的等效访问时间TA根据M2的启动时间有:
假设M1访问和M2访问是同时启动的,TA=H×TA1 (1-H)×TA2。
假设M1不命中时才启动M2,TA=H×TA1 (1-H)×(TA1 TA2)=TA1 (1-H)×TA2。
存储层次的访问效率:e=TA1TA由高速缓冲存储器、主存储器、辅助存储器构成的三级存储系统可以分为两个层次,其中高速缓存和主存间称为Cache主存存储层次(Cache存储系统),如图52(a)所示;主存和辅存间称为主存辅存存储层次(虚拟存储系统),如图52(b)所示。
图52两种存储层次
Cache存储系统是为解决主存速度不足而提出来的。在Cache和主存之间,增加辅助硬件,让它们构成一个整体。从CPU看,速度接近Cache的速度,容量是主存的容量,每位价格接近于主存的价格。由于Cache存储系统全部用硬件来调度,因此它对系统程序员和应用程序员都是透明的。
虚拟存储系统是为解决主存容量不足而提出来的。在主存和辅存之间,增加辅助的软硬件,让它们构成一个整体。从CPU看,速度接近主存的速度,容量是虚拟的地址空间,每位价格接近于辅存的价格。由于虚拟存储系统需要通过操作系统来调度,因此对系统程序员是不透明的,但对应用程序员是透明的。
5.2主存储器的组织
主存储器是整个存储系统的核心,它用来存放计算机运行期间所需要的程序和数据,CPU可直接随机地对它进行访问。
5.2.1主存储器的基本结构
主存通常由存储体、地址译码(address decoding)驱动电路、I/O和读写电路组成,其组成框图如图53所示。
图53主存的组成框图存储体是主存储器的核心,程序和数据都存放在存储体中。
地址译码驱动电路实际上包含译码器和驱动器两部分。译码器将地址总线输入的地址码转换成与之对应的译码输出线上的有效电平,以表示选中了某一存储单元,然后由驱动器提供驱动电流去驱动相应的读写电路,完成对被选中存储单元的读写操作。
I/O和读写电路包括读出放大器、写入电路和读写控制电路,用以完成被选中存储单元中各位的读出和写入操作。
主存的读写操作是在控制器的控制下进行的,只有接收到来自控制器的读写命令或写允许信号后,才能实现正确的读写操作。
5.2.2主存储器的存储单元
位是二进制数的*基本单位,也是存储器存储信息的*小单位。一个二进制数由若干位组成,当这个二进制数作为一个整体存入或取出时,这个数称为存储字。存放存储字或存储字节的主存空间称为存储单元或主存单元,大量存储单元的集合构成一个存储体,为了区别存储体中的各个存储单元,必须将它们逐一编号。存储单元的编号称为地址,地址和存储单元之间有一对一的对应关系,就像一座大楼的每个房间都有房间号一样。
一个存储单元可能存放一个字,也可能存放一个字节,这是由计算机的结构确定的。对于字节编址的计算机,*小寻址单位是一个字节,相邻的存储单元地址指向相邻的存储字节;对于字编址的计算机,*小寻址单位是一个字,相邻的存储单元地址指向相邻的存储字。所以,存储单元是CPU对主存可访问操作的*小存储单位。
例如,IBM 370机是字长为32位的计算机,主存按字节编址,每一个存储字包含4个单独编址的存储字节,其地址安排如图54(a)所示。它被称为大端(bigendian)方案,即字地址等于*高有效字节地址,且字地址总是等于4的整数倍,正好用地址码的*末两位来区分同一个字的4个字节。PDP11机是字长为16位的计算机,主存也按字节编址,每一个存储字包含2个单独编址的存储字节,其地址安排如图54(b)所示。它被称为小端(littleendian)方案,即字地址等于*低有效字节地址,且字地址总是等于2的整数倍,正好用地址码的*末一位来区分同一个字的2个字节。从图54可以看出,大端方案从*高有效字节向*低有效字节进行字节地址编号,小端方案从*低有效字节向*高有效字节进行字节地址编号。
图54字节编址计算机的地址安排方案
采用大、小端方案对数据进行存放的主要区别在于存放的字节顺序,如果将一个32位的整数0x12345678存放到一个整型变量(int)中,这个整型变量采用大端或者小端方案在主存中的存放如表51所示(假设从地址0x4000开始存放)。表5132位整型变量存放方案
主存地址大端方案小端方案0x400012(MSB)78(LSB)0x400134560x400256340x400378(LSB)12(MSB)从表51可以看出,大端方案将高字节(MSB)存放在低地址,小端方案将高字节存放在高地址。采用大端方案进行数据存放符合人类的正常思维,而采用小端方案进行数据存放利于计算机处理。到目前为止,采用大端或者小端进行数据存放,其孰优孰劣也没有定论。大端方案与小端方案的差别体现在一个处理器的寄存器、指令集、数据总线等各个层次中。
Intel 80x86采用小端方案,IBM 370、Motorola 680x0和大多数RISC机器则采用大端方案。有些微处理器,如Power PC,既支持大端方案又支持小端方案,在芯片加电启动时只要选择确定即可(默认为大端方案,可选择小端方案)。
在排序顺序不同的系统之间进行数据通信时,需要进行顺序转换。了解字节顺序的好处在于调试底层机器级程序时,能够清楚每个数据的字节顺序,以便将一个机器数正确转化为真值。
5.2.3主存储器的主要技术指标〖*2〗1. 存储容量对于字节编址的计算机,以字节数来表示存储容量;对于字编址的计算机,以字数与其字长的乘积来表示存储容量。例如,某计算机的主存容量为64K×16,表示它有64K个存储单元,每个存储单元的字长为16位,若改用字节数表示,则可记为128K字节(即128KB)。
2. 存取速度
主存的存取速度通常由存取时间Ta、存取周期Tm和主存带宽Bm等参数来描述。
(1) 存取时间Ta
存取时间又称为访问时间或读写时间,它是指从启动一次存储器操作到完成该操作所经历的时间。例如,读出时间是指从CPU向主存发出有效地址和读命令开始,直到将被选单元的内容读出为止所用的时间;写入时间是指从CPU向主存发出有效地址和写命令开始,直到信息写入被选中单元为止所用的时间。显然,Ta越小,存取速度越快。
(2) 存取周期Tm
存取周期又称读写周期、访存周期,是指主存进行一次完整的读写操作所需的全部时间,即连续两次访问存储器操作之间所需要的*短时间。显然,一般情况下,Tm>Ta。这是因为对于任何一种存储器,在读写操作之后,总要有一段恢复内部状态的复原时间。对于破坏性读出的RAM,存取周期往往比存取时间要大得多,甚至可以达到Tm=2Ta,这是因为存储器中的信息读出后需要马上进行重写(再生)。
(3) 主存带宽Bm
与存取周期密切相关的指标是主存的带宽,它又称为数据传输率,表示每秒从主存进出信息的*大数量,单位为字每秒或字节每秒或位每秒。主存带宽与主存的等效工作频率及主存位宽有关系,若单位为字节每秒,则有:
Bm=主存等效工作频率×主存位宽÷8
目前,主存提供信息的速度还跟不上CPU处理指令和数据的速度,所以,主存的带宽是改善计算机系统瓶颈的一个关键因素。为了提高主存的带宽,可以采取的措施有:
●缩短存取周期。
●增加存储字长。
●增加存储体。
3. 可靠性
可靠性是指在规定的时间内,存储器无故障读写的概率。通常,用平均故障间隔时间(Mean Time Between Failures,MTBF)来衡量可靠性。MTBF越长,说明存储器的可靠性越高。
4. 功耗
功耗是一个不可忽视的问题,它反映了存储器件耗电的多少,同时也反映了其发热的程度。通常希望功耗要小,这对存储器件的工作稳定性有好处。大多数半导体存储器的工作功耗与维持功耗是不同的,后者大大地小于前者。
5.2.4数据在主存中的存放
目前,大多数存储器采用字节编址,数据在主存中有3种不同存放方法,如图55所示。设存储字长为64位(8个字节),即一个存取周期*多能够从主存读或写64位数据。图55中*左边一列表示字地址(十六进制),字地址的*末3个二进制位必定为000。假设读写的数据有4种不同长度,它们分别是字节(8位)、半字(16位)、单字(32位)和双字(64位)。
图55字节编址的主存储器的各种存放方法
注意: 此例中数据字长(32位)不等于存储字长(64位)。
图55(a)是一种不浪费存储器资源的存放方法,4种不同长度的数据一个紧接着上一个存放。这种数据存放方式的优点是不浪费宝贵的主存资源。但是存在问题,主要问题有两个: 一是除了访问一个字节以外,当要访问一个双字、一个单字或一个半字时都有可能需要花费两个存取周期,因为从图55(a)中可以看出,一个双字、一个单字或一个半字都有可能跨越两个存储字存放,这使存储器的工作速度降低了一半;二是存储器的读写控制比较复杂。
为了克服上述两个缺点,出现了图55(b)所示的另一种数据存放方法。这种存放方法规定,无论要存放的是字节、半字、单字或双字,都必须从一个存储字的起始位置开始存放(在图55(b)中是从*左边放起),而多余的部分浪费不用。这种数据存放方法的优点是: 无论访问一个字节、一个半字���一个单字或一个双字都可以在一个存储周期内完成,读写数据的控制比较简单。但它的主要缺点是浪费了宝贵的存储器资源,如果双字、单字、半字、字节4种不同长度的数据出现的概率相同的话,那么主存的实际利用率只有约50%,即有一半的存储空间被浪费。
综合前两种数据存放方法的优缺点,出现了如图55(c)所示的折中方案。图55(c)所示的存放方法规定,双字数据(8个字节)的起始地址的*末3个二进制位必须为000(8的整倍数),单字数据(4个字节)的起始地址的*末两位必须为00(4的整倍数),半字数据(2个字节)的起始地址的*末一位必须为0(偶数)。这种存储方式能够保证无论访问双字、单字、半字或字节,都能在一个存取周期内完成,尽管存储器资源仍然有浪费,但是比图55(b)所示的存放方法要好得多。这种存放方法被称为边界对齐的数据存放方法。
5.3半导体随机存储器和只读存储器
主存储器通常分为RAM和ROM两大部分。RAM可读可写,ROM只能读不能写。下面**介绍RAM的工作原理与结构,以及ROM的基本类型。
5.3.1RAM记忆单元电路
通常把存放一个二进制位的物理器件称为记忆单元,它是存储器的*基本构件,地址码相同的多个记忆单元构成一个存储单元。记忆单元可以由各种材料制成,但*常见的由MOS电路组成。RAM又可分为静态RAM(Static RAM,SRAM)和动态RAM(Dynamic RAM,DRAM)两种。
1. 6管SRAM记忆单元电路
6管SRAM记忆单元电路如图56所示。
图566管SRAM记忆单元电路
SRAM记忆单元是用双稳态触发器来记忆信息的,从图56中可以看出,T1~T6管构成一个记忆单元的主体,能存放一位二进制信息。其中,T1和T2管构成存储信息的双稳态触发器;T3和T4管构成门控电路,控制读写操作;T5和T6是T1和T2管的负载管。电路中有一条字线,用来选择这个记忆单元,还有两条位线,用来传送读写信号。
假定: T1管截止、T2管导通(A=1、B=0)表示该记忆单元中存储的是“1”信息;T1管导通、T2管截止(A=0、B=1)表示该记忆单元中存储的是“0”信息。
当字线为低电平时,该记忆单元未被选中,T3和T4管截止,触发器与位线隔开,原存信息不会改变,称为保持状态。
当字线为高电平时,该记忆单元被选中,T3和T4管导通,可进行读写操作。位线I/O被称为读写“1”线,位线I/O被称为读写“0”线。
读操作: 因为T3和T4管导通,相当于A点和B点分别与位线I/O和I/O相连。若记忆单元原存“1”,则I/O线输出高电平,I/O线输出低电平,完成读“1”操作;若记忆单元原存“0”,则I/O线输出低电平,I/O线输出高电平,完成读“0”操作。
写操作: 如果要写入“1”,则在I/O线上输入高电平,I/O线上输入低电平,它们将分别通过T3和T4管迫使T1管截止、T2管导通,该记忆单元内容成为“1”,完成写“1”操作;如果要写入“0”,则在I/O线上输入低电平,I/O线输入高电平,经过同样的路径迫使T1管导通、T2管截止,该记忆单元内容成为“0”,完成写“0”操作。
在该记忆单元未被选中或读出时,电路处于双稳态触发器工作状态,由电源VCC不断给T1和T2管供电,以保存信息。但是,只要电源被切断,原来的保存信息便会丢失,这就是半导体存储器的易失性。
SRAM的存取速度快,但集成度低,功耗也较大,所以一般用来组成高速缓冲存储器和小容量主存系统。
2. 4管DRAM记忆单元电路
如果将前述6管SRAM记忆单元电路中的两个负载管(T5和T6)去掉,便形成4管DRAM记忆单元电路,如图57所示。负载回路断开后,保持状态时没有外加电源供电,因而T1和T2管不再构成双稳态触发器,所以动态MOS记忆单元是靠MOS电路中的栅极电容C1和C2来存储信息的。
图574管DRAM记忆单元电路
图57中虚线框外的两个MOS管是公用的预充管,不算在记忆单元电路中。
假定: C2上有电荷(高电平)、C1上无电荷(低电平)时,表示存储“1”信息;C2上无电荷(低电平)、C1上有电荷(高电平)时,表示存储“0”信息。由于MOS管栅极的输入电阻很大,所以栅极泄漏电流很小,即使没有负载管的供电,栅极电容上的电荷也能保存相当一段时间。然而,栅极电容上的电荷数目毕竟是有限的,虽然释放速度很慢,但经过一段时间后仍然会使记忆单元中存储的信息丢失,因此每隔一定的时间必须向栅极电容补充一次电荷,这个过程称为“刷新”。
平时记忆单元处于保持状态,字线为低电平,原存的信息被存储在T1和T2管的栅极分布电容C1或C2上,栅极的泄漏电流使存储的信息能保留几毫秒。
写入时,字线为高电平,打开选通门T3和T4。如果写“1”,在I/O线上输入高电平,I/O线上输入低电平,使C2充电、C1放电;如果写“0”,在I/O线上输入低电平,I/O线上输入高电平,使C1充电、C2放电。
读出时,预充电信号先打开预充管,使位线I/O和I/O均成为高电平。当选中记忆单元后,选通门被打开,若原存“1”,则C2上有电荷,T2导通,使I/O线上有负脉冲输出,读出“1”;若原存“0”,则C1上有电荷,T1导通,使I/O线上有负脉冲输出,读出“0”。在读出过程中,电源还通过I/O或I/O线分别向C2或C1补充电荷。
4管DRAM记忆单元的刷新过程也是对栅极电容C1或C2补充电荷的过程,因此刷新过程也就是读出过程,只是这种读出的目的不是为了从I/O线或I/O线上得到读出信息,而是为了对记忆单元进行刷新操作,常将其称作“假读”。
DRAM集成度高,功耗小,但存取速度慢,一般用来组成大容量主存系统。
3. 单管DRAM记忆单元电路
进一步减少记忆单元中MOS管的数目可形成更简单的3管DRAM记忆单元或单管DRAM记忆单元。这里仅介绍单管DRAM记忆单元,图58单管DRAM记忆
单元电路其电路结构如图58所示。
从图58中可看出,单管动态记忆单元由一个MOS管T1和一个存储电容C构成。
当字线为高电平时,该电路被选中。
写入时,若写入“1”,位线为高电平,对电容C充电;若写入“0”,位线为低电平,C上的电荷经位线泄放。
读出时,若原存“1”,C上有电荷,经T1管在位线上产生读电流,完成读“1”操作;若原存“0”,C上无电荷,在位线上不产生读电流,完成读“0”操作。当读操作完毕,存储电容C上的电荷已被泄放完,故是破坏性读出,必须采取重写(再生)的措施。
存储电容C的容量不可能做得很大,一般比位线上的寄生电