资源简介 (共213张PPT)第4章 存 储 器 系 统4.1 存储器概述4.2 半导体存储器4.3 高速缓冲存储器4.4 虚拟存储器关联习题4.1 存 储 器 概 述4.1.1 存储器分类 随着计算机的发展,存储器进步较快,种类繁多,其分类方法也有多种。 1.按存储器在系统中的作用进行分类 1) 主存储器 主存储器用来存放当前运行的程序和数据,是可以被CPU直接访问的半导体存储器。它位于主机内部,又称内存储器,简称内存或主存。 2) 辅助存储器 辅助存储器是为解决主存容量不足而设置的存储器,用来存放CPU暂不执行的程序和数据,它可以是硬盘、U盘、光盘等,其特点是存储容量大。辅助存储器又称外存储器,简称外存或辅存。辅存是不能被CPU直接访问的,当需要运行存放在辅存中的程序时,必须将辅存中的程序调入内存,然后再由CPU去执行。近年来,大容量半导体存储器如FLASH存储器的价格迅速下降,用闪存制成的“优盘”成为了一种很受欢迎的外存。 3) 高速缓冲存储器 高速缓冲存储器是介于CPU与主存之间,用来解决CPU与主存之间的速度匹配问题而设置的高速小容量的存储器,简称Cache。它可位于CPU内部,称内部Cache,也可位于CPU之外,称为外部Cache。 2.按存取方式进行分类 1) 随机存储器 随机存储器简称RAM(Random Access Memory),是指存储单元既能被CPU读,又能被CPU写,CPU对存储单元的读、写都是随机的,且读、写时间与存储单元的物理位置无关。一般主存主要由RAM组成。 2) 只读存储器 只读存储器简称ROM(Read Only Memory),是指存储单元只能被CPU随机地进行读,而不能进行写。只读存储器可以作为主存的一部分,用来存放不变的程序和数据,例如计算机的加电诊断程序、系统引导程序等。 3) 顺序存储器 顺序存储器(Sequential Access Memory,SAM)是指存储器的内部信息排列有序,CPU对存储器的读或写是按顺序进行的,并且CPU对存储器读或写的时间与信息在存储器中的物理位置有关。 3.按存储介质进行分类 1) 半导体存储器 半导体存储器是一种利用半导体器件来存储二进制信息的存储器。计算机的内存一般是由半导体存储器组成的。根据半导体存储器的制造工艺不同,可以将半导体存储器分为双极型和MOS型。 2) 磁表面存储器磁表面存储器是利用涂在基体表面上的一层磁性材料来存储二进制信息的存储器,例如磁盘等。 3) 光存储器 光存储器是采用光学原理制成的存储器,它是通过能量高度集中的激光束照在基体表面而引起的物理或化学的变化来记忆二进制信息的。 4.1.2 存储器系统结构 不管计算机的主存容量有多大,总是无法满足人们的期望。为了解决存储器的容量大、速度快、价格低三方面的矛盾,计算机往往采用多级存储体系结构,如图4-1所示。最上层(即第一层)是CPU的内部寄存器,数量是有限的,其访问时间是几纳秒;第二层是Cache,存储容量在32 KB至几十兆字节,其访问时间是十几纳秒;第三层是主存,存储容量几十兆字节至几吉字节,其访问时间是几十纳秒;第四层是辅存,存储容量在几吉字节至几十吉字节,其访问时间是10 ms以上,如果是光盘,其驱动时间加上访问时间就需要用秒来衡量了。图4-1 多级存储体系结构4.1.3 主存储器的技术指标 主存储器一般是半导体存储器,主存储器的技术指标也是指半导体存储器的技术指标。半导体存储器的组成结构如图4-2所示。存储体是存储二进制信息的主体,由很多存储单元组成。为了区别不同的存储单元,就需要对存储体中的每一个存储单元进行统一编号,这个编号我们称之为存储单元的地址。于是,存储单元与其地址之间建立了一一对应的关系,一旦给出一个单元的地址就能唯一确定一个存储单元。存储单元所存储的二进制信息称之为存储单元的内容,由此可见,存储单元的地址与存储单元的内容是两个不同的概念,但两者又存在一定的关系,即存储单元的内容可以用存储单元的地址来表示。图4-2 半导体存储器的组成结构 1.存储容量 存储容量是存储器的主要性能指标,存储容量越大,所能存储的信息量就越多。存储容量的大小常用B、KB、MB、GB和TB为单位表示。其中,1 KB=210B=1024B;1 MB=1024 KB=220B;1 GB=1024 MB=230B;1 TB=1024 GB=240B。 2.存取时间 存取时间是指从启动一次存储器操作到完成该操作所经历的时间。例如,读出时间是指从CPU向存储器发出有效地址和读命令开始,直到将被选单元的内容读出为止所用的时间。显然,存取时间越小,存取速度越快。 3.存储周期 连续启动两次独立的存储器操作(如连续两次读操作)所需要的最短间隔时间称为存储周期。它是衡量主存储器工作速度的重要指标。一般情况下,存储周期略大于存取时间。 4.存储器带宽 存储器带宽是指在单位时间内从存储器中所存取的信息量,是衡量数据传输速率的重要技术指标,通常以位/秒或字节/秒作度量单位。 5.可靠性 可靠性一般指存储器对外界电磁场及温度等变化的抗干扰能力。存储器的可靠性用平均故障间隔时间(Mean Time Between Failures,MTBF)来衡量。MTBF可以理解为两次故障之间的平均时间间隔,MTBF越长,可靠性越高,存储器正常工作能力越强。 6.性能/价格比 性能/价格比(简称性价比)是衡量存储器经济性能好坏的综合指标,它关系到存储器的实用价值。性能包括前述的各项指标,其中存取时间、存储周期、存储器带宽都反映了主存速度的指标,而价格是指存储单元本身和外围电路的总价格。4.2 半导体存储器4.2.1 半导体存储器分类 半导体存储器是目前被广泛应用于主存的一种存储器,按其读写性能可分为随机读写存储器(RAM)和只读存储器(ROM)两大类,如图4-3所示。图4-3 半导体存储器分类 1.RAM RAM是可读、可写的存储器,又称为读/写存储器,其特点是:系统断电后会自动丢失其中存储的信息。根据制造工艺,RAM可分为双极型和MOS型两种,其中MOS型RAM按信息存放方式不同,可分为静态RAM(Static RAM,SRAM)和动态RAM(Dynamic RAM,DRAM)。 2.ROM 只读存储器ROM是非易失性存储器,其特点是:系统断电后其中所存储的信息不会丢失。只读存储器种类繁多,在此仅对以下几种作一简单介绍。 1) PROM PROM(Programmable ROM)称为可编程ROM,是由用户把要写入的信息“烧”入PROM中。对PROM的“烧”入操作,需要一个ROM编程器的特殊设备。 2) EPROM EPROM(Erasable PROM)称为紫外线擦除PROM,用紫外光照射EPROM,可实现对EPROM中信息的擦除,所有EPROM芯片都有一个窗口用于接收照射它的紫外线。 3) E2PROM E2PROM(Electrically EPROM)称为电擦除PROM。与EPROM相比,它存在很多优势:其一,它是采用电擦除,可以实现瞬间擦除,而EPROM需要20分钟左右的擦除时间;其二,用户可以对E2PROM进行有选择的擦除,而EPROM是对整个芯片所有内容进行擦除;其三,用户可以直接在电路板上对E2PROM进行擦除和编程,而不需要额外的设备。 4) FE2PROM FE2PROM(Flash EEPROM)称为闪烁可编程可擦除ROM,简称闪存,也是半导体存储器,它既吸收了EPROM结构简单、编程可靠的优点,又保留了E2PROM用隧道效应擦除快捷的特性,而且集成度可以做得很高。 4.2.2 存储元电路 存储元电路是指存储一位二进制信息“1”或“0”的电路,又称存储细胞或基本单元电路。结合半导体存储器的分类,下面分别介绍几种存储元电路。 1.六管静态存储元 六管静态存储元是由六只NMOS管(T1~T6)组成,如图4-4所示。其中T1与T2构成一个反相器,T3与T4构成另一个反相器,两个反相器的输入与输出交叉连接构成双稳态触发器,利用稳态来存储一位二进制信息“1”或“0”。当T1导通、T3截止时为0状态;当T3导通、T1截止时为1状态。在不掉电的情况下,存储元所存储的一位二进制信息是不会改变的。T5、T6是门控管(行选通管),由Xi线控制其导通或截止。当Xi=1时,T5、T6导通;当Xi=0时,T5、T6截止。T7、T8也是门控管(列选通管),其导通与截止受Yi线控制。当Yj=1时,T7、T8导通;当Yj=0时,T7、T8截止。T7、T8是用来控制位线与数据线之间连接状态的,并不是每个存储元都需要这两只管子,所以称为六管NMOS静态存储元。图4-4 六管静态存储元 只有当存储元所在的行、列对应的Xi、Yj线均为1时,该存储元才与数据线接通,才能对它进行读或写,这种状态称为选中状态。 2.单管动态存储元 单管动态存储元只由一个电容和一个MOS管组成,如图4-5所示。一位二进制信息存储依靠的是MOS管栅极与源极之间的极间电容。若极间电容有电荷,表示所储存的信息为“1”;否则,表示所储存的信息为“0”。在保持状态下,行选择信号线为低电平,V管截止,电容C不存在充放电回路(当然还有一定的泄漏),其上的电荷状态将保持不变(有电荷表示存“1”,无电荷表示存“0”)。图4-5 单管动态存储元 1) 读操作 在对存储元进行读操作时,行选择线为高电平,使V管导通,于是刷新放大器读取对应电容C上的电压值,只有当列选择信号有效时,存储元才可以输出信息。刷新放大器的灵敏度很高,放大倍数很大,并且能将读取电容上的电压值转换为逻辑“0”或者逻辑“1”。因此在读出的过程中,存储元中的电容将会受到影响,为了在读出信息之后存储元仍能保持原有的信息,刷新放大器在读取电容上的电压值之后又立即进行重写,使每次读出后电容C上的电荷保持不变,这就是所谓的“再生”或“刷新”。 2) 写操作 在对存储元进行写操作时,行选择线为高电平,使V管导通,如果列选择信号也为高电平,则存储元被选中,于是由数据输入/输出线送来的信息通过刷新放大器和T管送到电容C。 3) 刷新 由于晶体管V存在漏电流,平时电容C上的电荷将逐渐泄漏掉,不能长期保存,将使存入的信息消失。为此,需要周期性地对电容进行充电,以补充泄漏的电荷,通常把这种补充电荷的过程叫做刷新或再生。随着器件工作温度的增高,放电速度会变快。刷新时间间隔一般要求在1~100 ms。工作温度为70℃时,典型的刷新时间间隔为2 ms,因此,2 ms内必须对存储的信息刷新一遍。 3.只读存储器存储元 1) EPROM存储元 初期的EPROM存储元是浮栅雪崩注入MOS,记为FAMOS。它的集成度低,用户使用不方便,速度慢,因此很快被性能和结构更好的叠栅注入MOS(SIMOS)取代。 SIMOS管结构如图4-6(a)所示。它属于NMOS,与普通NMOS不同的是:它有两个栅极,一个是控制栅CG,另一个是浮栅FG。FG在CG的下面,被SiO2所包围,与四周绝缘。单个SIMOS管构成一个EPROM存储元,如图4-6(b)所示。图4-6 SIMOS型EPROM 与CG连接的线W称为字线,读出和编程时作选址用。漏极与位线D相连接,读出或编程时输出、输入信息。源极接VSS(接地)。当FG上没有电子驻留时,CG开启电压为正常值VCC,若W线上加高电平,源、漏间也加高电平,SIMOS形成沟道并导通,称此状态为“1”;当FG上有电子驻留,CG开启电压升高并超过VCC,这时若W线加高电平,源、漏极间仍加高电平,SIMOS不导通,称此状态为“0”。人们就是利用SIMOS管FG上有无电子驻留来存储二进制信息“1”或“0”。因FG上电子被绝缘材料包围,如果不获得足够能量就很难跑掉,所以可以长期保存信息,即使断电也不丢失。 SIMOS EPROM芯片出厂时FG上是没有电子的,即都是“1”信息。对它编程就是在CG和漏极都加高电压,向某些元件的FG注入一定数量的电子,把它们写为“0”。EPROM封装方法与一般集成电路不同,需要有一个能通过紫外线的石英窗口,擦除时将芯片放入擦除器的小盒中,用紫外灯照射约20分钟。若读出各单元内容均为FFH,说明原信息已被全部擦除,恢复到出厂状态。写好信息的EPROM为了防止光线长期照射而引起的信息破坏,常用遮光胶纸贴于石英窗口上。EPROM的擦除是对整个芯片进行的,不能只擦除个别单元或个别位,擦除时间较长,且擦和写均需离线操作,使用起来不方便,因此,能够在线擦写的E2PROM芯片近年来得到了广泛应用。 2) FE2PROM存储元 闪存是新一代电信号擦除的可编程ROM,它既吸收了EPROM结构简单、编程可靠的优点,又保留了E2PROM用隧道效应擦除快捷的特性,而且集成度可以做得很高。 图4-7(a)是闪存采用的叠栅MOS管示意图。其结构与EPROM中的SIMOS管相似,两者区别在于浮栅与衬底间氧化层的厚度不同。在EPROM中氧化层的厚度一般为30~40 nm,在闪存中仅为10~14 nm,而且浮栅和源区重叠的部分是源区的横向扩散形成的,面积极小,因而浮栅与源区之间的电容很小。当Gc和S之间加电压时,大部分电压将降在浮栅与源区之间的电容上,闪存的存储元就是用这样一只单管组成的,如图4-7(b)所示。图4-7 快闪存储器 闪存存储元的写入方法和EPROM相同,即利用雪崩注入的方法使浮栅充电。在读出状态下,字线加上+5 V。若浮栅上没有电荷,则叠栅MOS管导通,位线输出低电平;如果浮栅上充有电荷,则叠栅管截止,位线输出高电平。擦除方法是利用隧道效应进行的,类似于E2PROM的写0操作。在擦除状态下,控制栅处等于0电平,同时在源极加入幅度为12 V左右、宽度为100 ms的正脉冲,在浮栅和源区间极小的重叠部分产生隧道效应,使浮栅上的电荷经隧道释放,但由于片内所有叠栅MOS管的源极连在一起,所以擦除时是将全部存储单元同时擦除,这是不同于E2PROM的一个特点。4.2.3 存储器芯片 1.半导体存储器芯片的组成与结构 每一个存储器芯片都具有一定的存储容量,通常表示为N×m(bit),其中N是存储器芯片的字数,一般为2的n次幂(N=2n),m是存储器芯片的位数,一般为1、4、8等。由此可见,一个存储器芯片内部包含N×m个存储元电路,将N×m个存储元电路排列成矩阵,即构成存储矩阵,也称之为存储体。 存储体是存储器芯片的核心,它与外围电路(地址译码电路、读/写控制电路、输入/输出控制电路等)集成在一块硅片上,称为存储器组件。存储器组件经过各种形式的封装,引出地址线、数据线、控制线和电源与地线等,即制成了半导体存储器芯片。半导体存储器芯片基本结构如图4-8所示。半导体存储器芯片根据位数m的不同,可以将存储器芯片分为字片式结构(m≠1)和位片式结构(m=1)。图4-8 半导体存储器芯片基本结构 1) 字片式结构半导体存储器芯片 图4-9所示是16×8位的字片式结构半导体存储器芯片结构图。图中每一个小方块表示一个存储元电路,存储矩阵的每一行由8个存储元电路组成一个存储单元,存放一个8位的存储字。一行中所有存储元电路的字线连在一起,与地址译码器的某一个输出端相连;所有存储单元相同的位组成一列,一列中所有存储元电路的两条位线分别连在一起,并使用同一个读写放大电路,读写放大电路与双向数据线相连。若存储器芯片接到的地址信息为A3A2A1A0=1111时,A3A2A1A0经地址译码器译码后字线15有效,即选中15号字线相应的存储单元,从而实现对该单元中所有的存储元电路同时进行读/写。 这种对地址仅进行一个方向上的译码方式称为单译码方式或一维译码方式。由于字片式结构半导体存储器芯片采用单译码方式,芯片内有多少个存储单元就需要多少个译码驱动电路,所需译码驱动电路较多,电路复杂,因此大多数存储器芯片都采用双译码方式,即位片式结构。图4-9 字片式结构存储器芯片 2) 位片式半导体存储器芯片 图4-10所示是1 K×1位的位片式结构半导体存储器芯片结构图。采用多字1位结构,即1024个字排列成32×32的矩阵,中间的每一个小方块代表一个存储元电路。图4-10 位片式结构存储器芯片 为了方便存取,可以给它们编号,32行的编号为X0、X1、…、X31,32列的编号为Y0、Y1、…、Y31。这样每一个存储元电路便组成一个存储单元,都有一个唯一的固定编号(Xi行、Yj列),这个编号称为存储单元的地址。地址译码器是将地址信息转换成有效的行选信号(Xi)和列选信号(Yj),从而选中某一存储单元。 对于图4-10所示的双译码方式的存储器芯片,行地址译码器采用5∶32译码器,即5条地址线A0、A1、…、A4作为译码器的输入,译码器的输出为X0、X1、…、X31;列地址译码器也采用5∶32译码器,地址线A5、A6、…、A9作为译码器的输入,译码器输出为Y0、Y1、…、Y31,这样共有10条地址线用来寻址1K字(210 B=1K)。例如,输入地址为A9A8A7A6A5A4A3A2A1A0=0000000001,则行选信号X1=1和列选信号Y0=1,所以选中第X1行、第Y0列存储单元中的1个存储元电路,从而实现对该单元中的这个存储元电路的读/写。 2.半导体存储器芯片工作原理 1) 半导体存储器芯片内部控制电路 (1) 读/写控制。 对于被选中的存储单元,究竟是进行读操作还是写操作,是由读/写控制逻辑电路进行控制的。如果是读操作,则被选中存储单元中的数据经数据线、输入/输出线传送出去;如果是写操作,则将数据经过输入/输出线、数据线存入被选中单元中的各个存储元电路。 (2) 输入/输出控制。 被选中的存储单元通过输入/输出端进行交换数据,读出时它是输出端,写入时它是输入端,即一线二用,由读/写控制信号控制。图4-11给出了一个简单的输入/输出控制电路。 当选片信号CS=1时,G5、G4输出为0,三态门G1、G2、G3均处于高阻状态,输入/输出(I/O)端与存储器内部完全隔离,存储器禁止读/写操作,即不工作。图4-11 输入/输出控制电路 当选片信号CS=0时,芯片被选通,当R/W=1时,G5输出高电平,G3被打开,于是被选中单元中所存储的数据出现在I/O端,存储器执行读操作;当R/W=0时,G4输出高电平,G1、G2被打开,此时加在I/O端的数据以互补的形式出现在内部数据线上,并被存入到所选中的存储单元中,存储器执行写操作。 输入/输出端数据线的条数与被选中存储单元所存储的位数相同,例如1024×1位的位片式结构半导体存储器芯片,一个地址只能选中由1个存储元电路组成的存储单元,因此只有1条输入/输出线;对于256×4位的半导体存储器芯片,一个地址只能选中由4个存储元电路组成的存储单元,所以有4条输入/输出线。但也有半导体存储器芯片的数据输入线和输出线是分开的。 (3) 片选控制。 一个半导体存储器芯片的存储容量总是有限的,计算机的主存往往是由一定数量的半导体存储器芯片按某种方式进行连接组合而成的。当访问存储器时,一次只能访问主存中的某一片(或几片)半导体存储器芯片,为了方便实现对存储器芯片选择的控制,半导体存储器芯片往往设置有一条或几条片选信号(CS或CE)线。当芯片的片选信号有效时,该芯片被选中;当芯片的片选信号无效时,该芯片未被选中。存储器芯片的片选信号通常是由地址译码器的输出信号与一些控制信号(读写命令)来形成。 2) 半导体存储器芯片工作时序 (1) 读操作时序。 存储器读操作时序如图4-12所示。具体过程如下: ① 欲读出单元的地址送地址总线AB; ② 待地址稳定后形成有效的选片信号CS; ③ 在R/W线上加高电平,经过一段延时后,所选择单元的内容出现在I/O端; ④ 使选片信号CS无效,I/O端呈高阻态,本次读出过程结束。图4-12 存储器读操作时序 由于地址缓冲器、译码器及输入/输出电路存在延时,所以在地址信号加到存储器上之后,必须等待一段时间,数据才能稳定地传输到数据输出端,这段时间称为地址存取时间,记为tAA。如果在存储器芯片的地址输入端已经有稳定地址的条件下,加入选片信号,从选片信号有效到数据稳定输出,这段时间间隔记为tACS。显然在进行存储器读操作时,只有在地址和选片信号加入,且分别等待tAA和tACS后,被读单元的内容才能稳定地出现在数据输出端。图中tRC为读周期,它表示该芯片连续进行两次读操作必需的时间间隔。 (2) 写操作时序。 存储器写操作时序如图4-13所示。具体过程如下: ① 将欲写入单元的地址送地址总线AB; ② 在选片信号CS端加上有效电平,选中SRAM芯片; ③ 将待写入的数据加到数据输入端; ④ 在R/W线上加入低电平,进入写工作状态; ⑤ 使选片信号无效,数据输入线回到高阻状态。图4-13 存储器写操作时序 当地址改变时,新地址的稳定需要经过一段时间,如果在这段时间内加入写控制信号(即R/W变低),就可能将数据错误地写入其他单元。为防止这种情况出现,在写控制信号有效前,地址必须稳定一段时间,这段时间称为地址建立时间,记为tAS。同时在写信号失效后,地址信号至少还要维持一段写恢复时间(tWR),为了保证速度最慢的存储器芯片的写入,写信号的有效时间不得小于写脉冲宽度(tWP)。 此外,对于写入的数据,应在写信号的tDW时间内保持稳定,且在写信号失效后继续保持tDH时间。在时序图中还给出了写周期tWC,它反映了连续进行两次写操作所需要的最小时间间隔。对大多数静态半导体存储器来说,读周期和写周期是相等的,一般为十几到几十纳秒。 3.半导体存储器芯片实例 1) 静态存储器芯片(SRAM) Intel 2114 SRAM芯片的容量为1 K×4位,芯片内部结构如图4-14所示。该芯片采用18脚封装,+5 V电源,芯片的实际引脚图和逻辑符号如图4-15所示。图4-14 Intel 2114内部结构图4-15 Intel 2114引脚及逻辑符号 由于1K×4=4096,所以Intel 2114 SRAM芯片有4096个基本存储电路,将4096个基本存储电路排成64行、64列的存储矩阵,每根列选择线同时连接4位列线,对应于并行的4位(位于同一行的4位应作为同一单元的内容被同时选中),从而构成了64行16列=1K个存储单元,每个单元存储4位二进制信息。由于有1K个存储单元(210=1K),所以Intel 2114 SRAM芯片应有10条地址输入信号线A0…A9。由于芯片采用双译码方式,6条地址A3…A8作为行地址译码输入,经行译码后产生64条行选择线,其余4条A0、A1、A2和A9 用于列地址译码输入,经过列译码产生16条列选择线。 10条地址线A0…A9送来的地址信号分别送到行、列地址译码器,经译码后选中一个存储单元(有4个存储元电路)。当片选信号CS=0,WE=0时,数据输入三态门打开,I/O电路对被选中单元的4个存储元电路进行写入操作;当CS=0,WE=1时,数据输入三态门关闭,而数据输出三态门打开,I/O电路将被选中单元内的4个存储元电路所存储的4位信息读出并送数据线;当CS=1,即CS无效时,不论为何种状态,各三态门均为高阻状态,芯片不工作。 2) 动态存储器芯片(DRAM) DRAM芯片的结构大体与SRAM芯片相似,是由存储矩阵和外围电路构成的。不过DRAM芯片集成度高、存储容量大,导致芯片的地址引脚多,给制造芯片带来较大的难度。为此,DRAM芯片的地址采用分时复用技术,即地址分两次送的方法,从而将地址线减少一半;另外DRAM芯片还需要刷新电路。 (1) Intel 2164A DRAM芯片。 DRAM芯片Intel 2164A芯片的存储容量为64K×1位,采用单管动态存储元电路,每个存储单元只有一个存储元电路,即一个存储单元只能存储1位数据,其内部结构如图4-16所示。Intel 2164A芯片的存储体本应构成一个256×256的存储矩阵,为提高工作速度(需减少行列线上的分布电容),将存储矩阵分为4个128×128矩阵,每个128128矩阵配有128个读出放大器,各有一套I/O控制(读/写控制)电路。64K字(216=64K)容量本需16条地址线,由于采用分时复用技术,芯片的地址线只需8条A7…A0,其引脚如图4-17所示。在行地址选通信号控制下,先将8位行地址A7…A0送入行地址锁存器,经译码后产生图4-16 Intel 2164A芯片内部结构 两组行选择线,每组128根。然后在列地址选通信号控制下,将8位列地址A7…A0送入列地址锁存器,经译码后产生两组列选择线,每组128根。行地址与列地址选择4个128×128矩阵之一,因此,16位地址是分成两次送入芯片的,对于某一地址码,只有一个128×128矩阵和它的I/O控制电路被选中。A7~A0这8根地址线还用于在刷新时提供行地址,因为刷新是一行一行进行的。图4-17 Intel 2164A引脚与逻辑符号 Intel 2164A读/写操作由WE信号来控制。读操作时,WE为高电平,选中单元的内容经三态输出缓冲器从DOUT引脚输出;写操作时,WE为低电平,DIN引脚上的信息经数据输入缓冲器写入选中单元。Intel 2164A没有片选信号,实际上用行地址和列地址选通信号RAS和CAS作为片选信号,可见,片选信号已分解为行选信号与列选信号两部分。 (2) 动态存储器刷新方式。 动态存储器的刷新方式有集中式、分散式和异步式三种,如图4-18所示。图4-18 动态存储器刷新时间分配图 ① 集中式刷新。所谓集中式刷新,是指在允许的最大刷新周期内,根据存储容量的大小和存取周期的长短,集中安排一段刷新时间,在刷新时间内停止读写操作。例如,某一动态RAM由128×128存储矩阵组成,存取周期为0.5 μs,连续刷新128行,共需128个读周期,即一次刷新的总时间为64 μs。若刷新周期为2 ms,那么,2 ms内有4000个读写操作。在这4000个读写操作内,前面3872个周期用来进行读写或维持信息,后面128个周期用来刷新。 集中式刷新时间分配图如图4-18(a)所示,可以看出,在读写操作时,不进行刷新操作,因此读写操作不受刷新操作影响,读写速度较高。但在刷新时,必须停止读写操作。这段不能进行读写操作的时间称为“死区”。在本例中,这段“死区”占4000个周期中的128个,故死时间率为3.2%。“死区”随存储矩阵行数的增加而增加,对于256×256存储矩阵来说,死时间率增加一倍。为了减少“死区”的时间,对于大容量的动态RAM芯片,可以采用在一个刷新周期内同时刷新多行的方法,以减少刷新周期数。 ② 分散式刷新。分散式刷新是指把每行存储单元的刷新分散到每个读写周期内进行,即把系统对存储器的访问周期分为两段,前一段用来读写数据或使存储器处于保持状态,后一段用来对存储矩阵的一行进行刷新。分散式刷新时间分配图如图4-18(b)所示。这种刷新方式增加了系统对存储器的存储时间,如动态存储器芯片的存储时间为0.5 μs,则系统对存储器的存储时间为1μs。对于前述128×128存储矩阵的芯片来说,这个存储器刷新一遍需要128 μs,就是以128 μs作为间隔时间。这种刷新方法避免了“死区”,但加长了存储器的存储时间,降低了整机的处理速度。而且刷新时间过于频繁,没有充分利用所允许的最大刷新间隔时间。这种方式不适用于高速存储器。 ③ 异步式刷新。异步式刷新是上述两种方法的结合,它充分利用最大间隔时间并使“死区”缩短。对于128×128存储矩阵的芯片,每行的刷新间隔时间是2 ms/128,即每隔15.6 μs刷新一行。在2 ms内分散地对128行轮流刷新一遍,刷新一行时只停止一次读写操作时间。分散式刷新时间分配图如图4-18(c)所示。这样,对每一行来说,刷新时间仍为2 ms,而“死区”的长度则缩短为0.5 μs。 消除“死区”的方法,还可以采用不定期的刷新方法,即可以把刷新时间安排在CPU不访问内存的时间内进行。这种刷新方法没有单独占用CPU的时间,也没有“死区”,效率最高,但是刷新的控制线路较复杂。 (3) DRAM芯片的存取模式。 ① 标准模式的DRAM芯片。由Intel 2164A DRAM芯片可知,标准模式DRAM芯片的访问步骤为:先给出所要访问存储单元的行地址并保持稳定,然后给出有效的行地址选通信号RAS,将行地址锁存到行地址译码器,此后再给出所要访问存储单元的列地址并保持稳定,然后给出有效的列地址选通信号CAS,将列地址锁存到列地址译码器,通过行、列地址译码器的译码,找到相应的存储单元,在读/写控制信号R/W作用下,实现对该存储单元的读或写操作。 标准模式DRAM芯片的访问时间是指从芯片地址引脚上给出行地址开始,到可以使用出现在芯片数据引脚上的数据为止所需的时间。由于RAS信号失效后DRAM芯片尚需一个预充时间tRP,以便为下次访问做准备,所以DRAM芯片存取周期比访问时间要长至少tRP时间,这也是DRAM芯片与SRAM芯片的不同之处。为了消除DRAM芯片的预充时间所带来的负面影响,采用交错内存连接方法,即将两个内存条安排在一起使用,交替地访问两个内存条。当访问一个内存条的同时,另一个内存条执行预充操作,从而将预充时间隐藏在访问时间之中。 ② 页模式DRAM芯片。芯片内存储元电路组成的存储矩阵是芯片的核心,存储矩阵中的一行所包含的存储元电路的个数称为一页。由于绝大多数情况下对存储器的访问是连续的,所以没有必要像对标准模式DRAM芯片的访问时每次都要给出行地址和列地址。对页模式DRAM芯片的访问,如果所访问的存储元电路与上次访问的存储元电路在同一页中,只需给出列地址,行地址保持不变,便可以选中并访问该存储元电路。与标准模式DRAM芯片比较,可以看出,第二次访问时间要比第一次访问时间短许多。 ③ 静态列模式DRAM芯片。静态列模式DRAM芯片与页模式DRAM芯片相似,访问某一行的第一个存储元电路所需要的时间是标准的RAS访问时间。当给出所要访问存储单元的行地址并保持稳定,然后给出有效的行地址选通信号RAS,将行地址锁存到行地址译码器,行地址在访问本行中存储元电路的过程中保持不变,接着给出列地址,并给出有效的片选信号CS,然后,列地址在存储器芯片之外的一个增量寄存器中不断增量,并将每次增量后的地址信号送往存储器芯片。作为列地址译码器的输入,列地址译码器不断译码以确定要访问的存储单元。这样,只要RAS和CS始终保持低电平,同一行中各个存储元电路所存储的数据就连续地出现在静态列模式DRAM芯片的数据输出端,直到这一行中的最后一个存储元电路所存储的数据出现在数据输出端为止。 ④ 半字节模式DRAM芯片。在访问半字节模式DRAM芯片时,首先给出行地址,并辅以有效的RAS信号,将行地址锁存,再给出列地址,同时CAS信号有效,将第一个列地址锁存。然后,RAS信号保持有效,行地址不再变化,CAS信号在有效和无效之间不停地切换,从而连续读出一行中的四位。可见半字节模式DRAM芯片类似于页模式DRAM芯片,只是页模式DRAM芯片一次要连续读出一行中的所有位,而半字节模式DRAM芯片只读出一行中连续的4位。除此之外,半字节模式DRAM芯片与页模式DRAM芯片和静态列模式DRAM芯片的不同之处是:半字节模式DRAM芯片不需要设置列地址计数器电路。 ⑤ EDO DRAM芯片。EDO DRAM芯片是后期研发的一种高速存储器芯片,EDO DRAM(Extended Data-Out DRAM)称为扩展数据输出DRAM,也称为超级页模式DRAM。它是页模式DRAM的超级版本,是为解决页模式DRAM芯片的局限性而研制开发的。 ⑥ 同步DRAM芯片(SDRAM)。当CPU总线速度超过75 Hz时,即使是EDO DRAM芯片也不能满足CPU速度的要求,所以人们开发了同步DRAM。在所有传统DRAM芯片中(包括页模式DRAM芯片、EDO DRAM芯片),DRAM的时序与CPU的时序是不同步的,即CPU和DRAM芯片间没有一个公共的参考时钟。当CPU访问DRAM时,DRAM不能及时给出数据,它会发出NOT READY信号告知CPU,CPU通过在总线时序中插入等待周期来响应NOT READY信号。 而CPU与SDRAM芯片间存在一个公共时钟信号,任何操作都与公共时钟信号同步,CPU无需等待,从而实现了突发模式操作。突发模式既用于读操作,也用于写操作,为简便起见,在此只讨论突发模式的读操作。在突发读模式中,CPU像正常情况一样提供第一个欲访问单元的地址,先给出信号,接着给出信号。由于CPU读SDRAM的内容用于填充Cache,因此要一次读几个连续的单元(所读单元的个数取决于Cache的结构)。因此,CPU在给出第一个单元的地址后,后续单元的地址就无需再给出了,从而节省了建立地址和保持信息的时间。只需要简单地通过编程把SDRAM设置为突发模式,告诉它一次要连续读的单元个数就可以了。 每次突发读出的单元个数称为突发长度(Burst Length),可以是1、2、4、8、16、256(整页)。为了进一步提高性能,SDRAM芯片内部采用交错连接,即存储元电路的安排遵循交错方式,从而实现了在访问一组存储元电路的同时刷新另一组存储元电路。如果SDRAM芯片融合了突发模式和交错连接两种技术,那么由SDRAM芯片构成的内存可用于总线频率高达124 MHz的情况,若总线频率超过125 MHz,SDRAM则不能满足性能要求,只能采用速度更高的DDR SDRAM(Double Data Rate SDRAM)。由于篇幅的限制,在此不再讨论,感兴趣的读者可以参看相关书籍。 3) 只读存储器芯片 半导体只读存储器芯片种类较多,就EPROM芯片而言,即存在多种型号,常用的有2716(2K×8)、2732(4K×8)、2764(8K×8)、27128(16K×8)、27246(32K×8)等。 (1) Intel 2716 EPROM芯片。 ① Intel 2716芯片的内部结构和外部引脚。Intel 2716 EPROM芯片采用NMOS工艺制造,双列直插式24引脚封装,其引脚、逻辑符号及内部结构如图4-19所示。它有11条地址输入线A10…A0,其中7条用于行译码,4条用于列译码。图4-19 Intel 2716的引脚、逻辑符与及内部结构O7…O0:8位数据线。编程写入时是输入线,正常读出时是输出线。CS:片选信号。当CS=0时,允许2716读出。PD/PGM:待机/编程控制信号,输入。VPP:编程电源。在编程写入时,VPP =+25 V;正常读出时,VPP =+5 V。VCC:工作电源,+5 V。② Intel 2716芯片的工作方式。Intel 2716芯片的工作方式如表4-1所示。表4-1 Intel 2716工作方式 读出方式:当CS=0时,此方式可以将选中存储单元的内容读出。 未选中:当CS=1时,不论PD/PGM状态如何,Intel 2716芯片均未被选中,数据线呈高阻态。 待机(备用)方式:当PD/PGM=1时,Intel 2716芯片处于待机方式。这种方式和未选中方式类似,但其功耗由525 mW下降到132 mW,下降了75%,所以又称为功率下降方式,此时数据线呈高阻态。 编程方式:当VPP=+25 V,CS=1,并在PD/PGM端加上52 ms宽的正脉冲时,可以将数据线上的信息写入指定的地址单元。数据线为输入状态。 校验编程内容方式:此方式与读出方式基本相同,只是VPP=+25 V。在编程后,可将Intel 2716芯片中的信息读出,与写入的内容进行比较,以验证写入内容是否正确。数据线为输出状态。 禁止编程方式:此方式禁止将数据总线上的信息写入Intel 2716芯片。 (2) Intel 2816 E2PROM芯片。Intel 2816芯片是2K×8位的E2PROM芯片,有24条引脚,单一+5 V电源。其引脚如图4-20所示,工作方式如表4-2所示。图4-20 Intel 2816的引脚表4-2 2816的工作方式 读出方式:当CE=0,OE=0,并且VPP端加 +4~+6 V电压时,Intel 2816芯片处于正常的读工作方式,此时数据线为输出状态。 待机(备用)方式:当CE=1,OE为任意状态,且VPP端加4~6 V电压时,Intel 2816芯片处于待机状态。与Intel 2716芯片一样,待机状态下芯片的功耗将下降。 字节擦除方式:当CE=0,OE=1,数据线(I/O0~I/O7)都加高电平且VPP加幅度为+21 V、宽度为9~15 ms的脉冲时,Intel 2816芯片处于以字节为单位的擦除方式。 整片擦除方式:当CE=0,OE=1数据线(I/O0~I/O7)都为高电平,端加+9~+15 V电压及VPP加21 V、9~15 ms的脉冲时,约经10 ms可擦除整片的内容。 字节写入方式:当CE=0,OE=1,VPP加幅度为+21 V、宽度为9~15 ms的脉冲时,来自数据线(I/O1~I/O7)的数据字节可写入Intel 2816芯片的存储单元中。可见,字节写入和字节擦除方式实际是同一种操作,只是在字节擦除方式中,写入的信息全为“1”而已。 禁止方式:当CE=1,VPP为+4~+22 V时,不管OE是高电平还是低电平,Intel 2816芯片都将进入禁止状态,其数据线(I/O0~I/O7)呈高阻态,内部存储单元与外界隔离。4.2.4 存储器的扩展与应用 无论是哪种存储器芯片,CPU对存储器的访问,都首先通过地址总线给出所要访问存储单元的地址,经地址译码器译码后,选中所要访问的单元,然后发出相应的读/写控制信号,最后才是数据在数据总线上进行传送。所以,存储器芯片与CPU的连接主要是存储器芯片上地址信号线、数据信号线和控制信号线与系统总线(地址总线AB、数据总线DB、控制总线CB)的连接。由于一个存储器芯片的容量(N×M位)总是有限的,因此,内存总是由一定数量的存储器芯片构成的。面对种类繁多的存储器芯片,首先要考虑如何选择合理的芯片和需要多少芯片的问题,其次是如何把这些芯片连接起来,最后是与系统总线的连接问题。 存储器芯片的选择通常要考虑存储器芯片的存取速度、存储容量、电源电压、功耗及成本等多个因素。确定了某一存储器芯片后,根据内存容量大小,计算出所需存储器芯片的数量。假设存储器芯片的容量为N×M位,内存的容量为K×L位,由于内存容量要比一个存储器芯片的容量大得多,所以,K≥N、L≥M。所需存储器芯片的数量可按下式进行计算:(4-1) 式中,K和N分别是内存的字数(单元数)和芯片的字数(单元数),L和M分别是内存和芯片中一个字的位数。字数K和N一般为2的整次幂,且K≥N;内存中一个字的位数L与机器的字长相关,一般是字节的整数倍,而芯片中一个字的位数N可以是1、4、8等。因此使用存储器芯片构成内存时,需要在字、位两方面进行扩展,具体扩展方法分为位扩展、字扩展和字位扩展。 1.存储芯片的扩展 1) 位扩展 位扩展是指存储器芯片的字(单元)数满足要求而位数不够,即K=N、L>M,则需对每个存储单元的位数进行扩展。图4-21给出了使用8片8K×1位的RAM芯片位扩展构成8K×8位存储器系统的连线图。 图4-21 位扩展连接方式 由于存储器的字数与存储器芯片的字数一致,8K=213,故需13根地址线A12…A0对各芯片内的存储单元进行寻址。每一个芯片只有一条数据线,所以需要8个这样的芯片,将它们的数据线分别接到数据总线D7…D0上。因此,每一条地址线有8个负载,每一条数据线有一个负载。 位扩展法中,所有芯片都应同时被选中,各芯片CS端既可直接接地,又可并联在一起,根据地址范围的要求,与高位地址线译码产生的片选信号相连。若地址线A12…A0全为0,表示选中了存储器0号单元,该单元的8位信息是由各芯片0号单元的1位信息共同构成的。可以看出,位扩展的连接方式是将各芯片的地址线、片选CS、读/写控制线进行并联,而数据线分别接到数据总线D7…D0上。 2) 字扩展 字扩展用于存储芯片的位数满足要求而字数不够的情况,即K>N、L=M,需对存储单元的数量进行扩展。图4-22给出了用4个16K×8位的存储芯片构成一个64 K×8位存储器的连接图。图4-22 字扩展连接方式 图4-22中4个芯片的数据线与数据总线D7…D0相并连;地址总线的低位地址A13…A0与各芯片的14位地址线连接,用于进行片内寻址;为了区分4个芯片的地址范围,还需要2根高位地址线A14、A15,经2∶4译码器产生4个输出信号,分别与4个芯片的片选端相连。采用如此连接后,各芯片的地址范围如表4-3所示。表4-3 各个芯片的地址空间分配情况 从表4-3中可以看出,字扩展的连接方式是将各芯片的地址线、数据线、读/写控制线进行并联,将地址总线中的低位地址线直接与各芯片地址线相连,以选择片内的某个单元,即实现片内寻址;而剩余的高位地址线用来产生片选信号,连接到各芯片的片选端,以选择某一个芯片,即实现对芯片的寻址。剩余的高位地址线可以通过全译码法、部分译码法和线选法来产生片选信号。 (1) 全译码法。 所谓全译码法,是指剩余的所有高位地址线都作为译码器的输入,其输出作为片选信号。也就是说,除了已经连接到存储器芯片上的地址线外,其他高位的地址线都被送入译码电路,以产生片选信号。采用全译码法所构成的存储器,存储单元的地址将是唯一的,不会出现地址重叠。 (2) 部分译码法。 所谓部分译码法,是指把剩余的一部分高位地址线作为译码器的输入,其输出作为片选信号。由于有些地址线未参与译码,则该地址线是“0”或“1”将不影响芯片是否被选中。采用部分译码法构成的存储器,其存储单元的地址将不再是唯一的,会出现一定程度的地址重叠。 (3) 线选法。 所谓线选法,是指剩余的高位地址线直接作为芯片的片选信号。也就是说,不把存储器芯片上的高位地址线直接作为存储器芯片的片选信号。使用线选法的好处是译码电路简单,但线选不仅导致一个存储单元有多个地址,还有可能一个地址同时选种多个单元,会引起数据总线的冲突。 3) 字位扩展 在实际应用中,往往会遇到字数和位数都需要扩展的情况。若使用N×M位的存储器芯片构成一个容量为K×L位(K>N,L>M)的存储器,那么这个存储器共需要(N/K)×(M/L)个存储器芯片。连接时可将这些芯片分成N/K个组,每组有M/L个芯片。组内采用位扩展法,组间采用字扩展法。例如用Intel 2114 RAM芯片(1K×4)构成4K×8存储器,其存储器连接方法如图4-23所示。其中8片Intel 2114芯片分成4组(RAM1、RAM2、RAM3和RAM4),每组2片。 每组2片。组内采用位扩展法构成1K×8的存储模块,4个存储模块用字扩展法连接成4K×8的存储器。用10根地址线A9…A0对每组芯片进行片内寻址,同组芯片应被同时选中,因此,同组芯片的片选信号应并联在一起。2∶4译码器对两根高位地址线A11A10进行译码,产生4个输出信号分别与各组芯片的片选端相连。图4-23 字位扩展连接方式 4) 用不同规格的存储器芯片扩展存储器 用不同规格的存储器芯片扩展存储器,地址范围的分配问题较为复杂,除了考虑字扩展和位扩展外,还要考虑如何选择合理的芯片和采用怎样的结构,关于结构问题将在4.2.5节中讨论,在此以具体的例子来说明地址译码器和存储器片选信号的连接。 【例4-1】 试用现有存储器芯片EPROM(8K×8位)和SRAM(16K×1位、2K×8位、4K×8位、8K×8位)去构成主存储器,具体要求是:0~8191(8 KB)为系统程序区,由只读存储器芯片组成;8192~32767(24 KB)为用户程序区;最后2 KB地址空间为系统程序工作区。若系统的地址总线有16条(A15…A0),双向数据总线有8条(D7…D0),控制总线与主存有关的信号有MERQ、R/W。试从上述芯片中选择适当芯片设计该计算机主存储器,并画出主存储器逻辑框图。 解:根据主存储器的具体要求,8 KB的系统程序区可用1片8K×8位的EPROM芯片组成;24 KB的用户程序区可以用SRAM芯片组成,由于SRAM芯片种类较多,究竟选用哪一种芯片较合理,不仅要看芯片的位数与系统的数据总线是否匹配,还要看组成存储器的芯片所需的片选信号是否最少,只有这样,存储器的译码电路才能是最简单的,因此,这24 KB的用户程序区可选用3片8K×8位的SRAM芯片组成;最后2 KB的系统程序工作区可选用1片2K×8位的SRAM芯片组成。各个芯片的地址范围如表4-4所示。表4-4 存储器各个芯片地址范围 结合表4-4的地址分配情况,考虑到多数芯片是8K×8位的,所以选用地址总线中的低16位地址线A12…A0作为片内寻址,高3位地址线A15A14A13作为译码器的输入,其输出作为片选信号。对于2K×8的SRAM芯片片选信号,需要另加门电路来解决。主存储器连接图如图4-24所示。图4-24 36 KB主存储器 【例4-2】 试用4片4K×4位的芯片和3片8K×8位的芯片扩展32 KB主存储器。若系统的地址总线有16条(A15…A0),双向数据总线有8条(D7…D0),控制总线与主存有关的信号有MER1、R/W。 解:扩展32 KB的主存储器需要15条地址线A14…A0、8条数据线D7…D0和相关控制信号线。4片4K×4位的存储器芯片构成8 KB的主存,采用字位扩展法,每两片为一组,每组构成4 KB的主存;3片8K×8的存储器芯片构成24 KB的主存储器,采用字扩展法。这32 KB的主存储器的地址范围分配如表4-5所示。表4-5 32K×8位主存储器地址范围 存储器的具体连接要考虑控制线、数据线和地址线的连接。具体连接如下: 控制线的连接:控制线的连接较简单,只要将控制总线的读写控制信号WE与每一存储器芯片的读写控制线WE直接相连即可。 数据线的连接:3片8K×8位SRAM芯片为8位数据宽度,将对应的8位数据线与系统数据总线相连即可;4片4K×4位SRAM芯片分成两组,每组两片,每片数据宽度为4位,将每组其中一片4位数据线连接到系统数据总线D7…D4上,另一片连接到D3…D0上。 地址线的连接:不同规格芯片的连接,关键在于译码器输入与输出的选择。对于输入线来说,通常以容量最小的芯片为基础。因此容量大的芯片其片内高位地址线也要参加译码。 本例以最小容量4K×4位的存储器芯片为基础,32 KB是4 KB的8倍,故选用74LS138译码器。用3条地址线A14、A13、A12作为译码器的输入,其译码器的输出有8个信号,由上到下,000选择第一组芯片,001选择第二组芯片,第三组至第五组为8K×8位的芯片,有8 KB个单元,是第一、第二组芯片4 KB个单元的两倍,需用两条译码输出线选择,故各增加与门一个,由010和011共同选择第三组芯片,由100和101共同选择第四组芯片,110和111共同选择第五组芯片。 另外,由于系统地址总线有16条,而32 KB主存储器需要15条地址线A14…A0,A15地址线如果不参加译码,它可随机出现0、1两种情况,将其加于A14…A0决定的任何一个地址码上,可以出现两种不同的地址码,这种现象称为地址的重合,局部译码时必定会出现地址重合或覆盖现象。为避免地址重合或覆盖现象,必须采用全译码,在此只需将A15与74LS138的G1相连,此时A15为1;或将A15与74LS138的G2a或G2b相连,A15为0,本例采用后者连接,32 KB主存储器具体连接如图4-25所示。图4-25 32 KB主存储器4.2.5 并行存储器 随着软件规模的增大和系统性能要求的提高,对主存的要求是容量要大,速度要快。尽管主存的存取速度在不断地提高,但它的速度与CPU的速度相比,仍存在较大的差距,主存的存取速度是整个计算机系统速度的瓶颈。为了解决这个问题,存储器系统采用了层次结构,用虚拟存储器的方式扩大主存的存储容量,用高速缓冲存储器提高存取速度。除此以外,调整主存的组织结构来提高存取速度,也是一种行之有效的方法。在常规主存储器设计中,访问地址采用顺序方式,如图4-26(a)所示。图4-26 并行存储器 主存储器容量为32字,分成4个模块M0…M3,每个模块存储8个字。访问地址按顺序分配给一个模块后,接着再按顺序为下一个模块分配访问地址。由此可见,在对顺序方式中的某个模块进行访问时,其他模块是不工作的,一旦某一模块出现故障,不会对其他模块造成影响。但由于各个模块是一个接一个地串行工作,将会限制存储器的带宽。为了提高存储器的带宽,实现多模块流水式并行工作,访问地址采用交叉方式,如图4-26(b)所示。 地址的分配方法与顺序方式不同:先将4个线性地址0、1、2、3依次分配给M0、M1、M2、M3模块,再将线性地址4、5、6、7依次分配给M0、M1、M2、M3模块……直到全部线性地址分配完毕为止。可以看出,连续地址分布在相邻的不同模块内,而同一个模块内的地址都是不连续的,因此,对于连续字的块传送,交叉方式的存储器可以实现多模块流水式并行存取,从而大大提高了存储器的带宽。 1.多体顺序并行存储器 前面所讨论的存储器,一个存取周期只能访问一个存储单元,无法实现并行操作,要想进行对存储器的并行处理,必须改变存储器的组织结构,将大容量的存储器分成若干个存储体,每个存储体都有自己的读写线路、地址寄存器和数据寄存器,并能以同等的方式与CPU交换信息。另外,每个存储体容量相等,它们既能同时工作又能独立编址。图4-27是多体顺序并行存储器原理图。图4-27 多体顺序并行存储器原理图 主存由n个容量相等的存储体组成,其中MAR为存储体地址寄存器,MDR为存储体数据寄存器,主存地址寄存器的高位表示不同的存储体,低位表示存储体内单元地址,各体内地址寄存器指示存储单元的内容。这种结构使得各个存储体内相邻单元的地址是连续的,从而体现多体“顺序”这一特点,有利于并行处理,能够实现n个存储体的并行操作,即一次能访问并处理n个字 。 2.多体交叉并行存储器 多体交叉并行存储器类似于多体顺序并行存储器,都是由多个相对独立的存储体组成的,所不同的是,多体交叉并行存储器的主存地址的高位表示存储体内单元地址,低位用于选择不同的存储体,这种组织形式使得各个存储体内相邻单元的地址是不连续的,而相邻存储体之间相同位置的单元地址是连续的,从而体现了多体“交叉”这一特点。下面以一个四体交叉并行存储器为例,来说明多体交叉并行存储器的工作原理。如图4-28所示是一个四体交叉并行存储器,该存储器由4个独立的存储体M0、M1、M2、M3组成,低位地址用于选择不同的存储体,高位地址表示存储体内单元地址。图4-28 多体交叉并行存储器原理图 n体交叉并行存储器的编址规则如下: 规则1,地址连续的两个单元分布在相邻的两个存储体中,地址按存储体方向顺序编号。 规则2,同一存储体内相邻的两个单元地址之差等于n。例如在四体交叉并行存储器中,同一存储体内相邻的两个单元地址之差等于4。 规则3,任何一个存储单元地址编号的末lb n位正好指示该单元所属存储体的编号,访问主存时只要判断这几位就能决定访问的是哪个存储体。在四体交叉并行存储器中,M0存储体中每个单元地址的最后两位都是“00”,M1存储体中每个单元地址的最后两位都是“01”,M2存储体中每个单元地址的最后两位都是“10”,M3存储体中每个单元地址的最后两位都是“11”。 规则4,同一存储体中每个单元地址除去存储体编号后的高位地址正好是存储体中单元的顺序号,由此就可决定访问单元在存储体中的位置。 多体交叉并行存储器地址交叉排列的目的是为了便于各个存储体同时工作。假设CPU要取4条长度为一个字长的指令,这4条指令分别存放在地址为0、1、A、B的4个单元中,这4个单元分别在M0、M1、M2、M3四不同的存储体中。为了在一个存取周期内能访问4个指令字,在多体并行主存系统中采用了分时工作的方法,目前普遍采用的是分时读出法,即每个存储体每次读写一个字,各存储体分时启动,即每隔1/4存取周期启动一个存储体,其时序如图4-29所示,M0存储体在第一个主存周期开始读写,经过(1/4)TM启动M1存储体,M2和M3存储体分别在(1/2)TM、(3/4)TM时刻开始它们各自的读写操作,4个存储体以(1/4)TM的时间间隔进入并行工作状态。图4-29 四体交叉并行存储器工作时序4.3 高速缓冲存储器4.3.1 Cache基本原理 1.Cache与程序访问的局部性 虽然CPU主频的提升会带动系统性能的改善,但系统性能的提高不仅仅取决于CPU,还与系统架构、存储部件的存取速度、信息在各个部件之间的传送速度、指令结构等因素有关,特别是主存的存取速度。如果CPU工作速度较高,而主存的存取速度较低,必然会造成CPU的等待,从而降低了CPU的处理速度和效率。如400 MHz的PⅢ,一次指令执行时间为2 ns,与其相配的主存SDRAM存取时间为10 ns,比前者慢了5倍。 如何解决CPU与主存之间的速度匹配问题呢?一种方法是在基本总线周期中插入等待,尽管能处理好速度匹配问题,但无法保证CPU有较高的工作速度;另一种方法是采用存取速度较快的SRAM做主存,却又大幅度提升了系统成本。如何在不太增加系统成本的前提下又能保证系统性能的提升呢?人们开始对大量典型程序的运行情况进行分析,结果表明:在一个较短的时间间隔内,由程序产生的地址往往集中在存储器逻辑地址空间的很小范围内。指令地址的分布本来就是连续的,再加上循环程序段和子程序段要重复执行多次。 因此,对这些地址的访问自然就具有时间上集中分布的倾向。数据分布的集中倾向虽不如指令明显,但对数组的存储和访问以及工作单元的选择,都可以使存储器地址相对集中。这种对局部范围的存储器地址频繁访问,而对此范围以外的地址访问很少的现象,称之为程序访问的局部性。根据程序访问的局部性原理,在主存和CPU之间设置一个高速的、容量相对较小的存储器,该图4-30 Cache与主存的关系存储器包括管理在内的全部功能都由硬件实现,如图4-30所示。把正在执行的指令地址附近的一部分指令或数据从主存调入这个存储器,起到缓冲作用,以实现速度匹配。 这种方法既保证了系统成本增加不大,又保证了系统性能的有效提升,是目前计算机普遍采用的一种行之有效的技术。为此,我们把介于CPU和主存之间的高速、小容量、起缓冲作用的存储器称做高速缓冲存储器(Cache)。基于目前大规模集成电路技术和生产工艺,在CPU芯片内部制作一定容量的Cache,称之为一级(L1)Cache,CPU外部由SRAM构成的Cache称为二级(L2)Cache。最新的CPU内部已经出现二级甚至三级Cache。图4-30 Cache与主存的关系 2.Cache的工作原理 CPU与Cache之间的数据交换是以字为单位,而Cache与主存之间的数据交换是以块为单位,一个块由若干个字组成的。当CPU读取主存中的一个字时,便发出此字的内存地址到Cache和主存,Cache控制逻辑根据地址判断此字当前是否在Cache中。如果在Cache中,我们称之为命中,命中时CPU通过访问Cache把此字读出并送给CPU;如果不在Cache中,我们称之为不命中,不命中时CPU用主存读周期把此字从主存读出并送到CPU,与此同时,把含有这个字的整个数据块从主存读出并送到Cache中。 系统正是依据此原理,不断地把与当前指令集相关联的一个不太大的后继指令集从内存读到Cache,然后再与CPU高速传送,从而达到速度匹配。CPU对存储器进行数据请求时,通常先访问Cache,由于局部性原理不能保证所请求的数据100% 地在Cache中,这里便存在一个命中率,即CPU在任一时刻从Cache中获取数据的几率。命中率越高,从Cache中获取数据的可能性就越大,一般来说,Cache的存储容量比主存的容量小得多,但不能太小,太小会使命中率太低;也没有必要过大,过大不仅会增加成本,而且当容量超过一定值后,命中率随容量的增加将不会有明显的增长。 只要Cache的空间与主存空间在一定范围内保持适当比例的映射关系,Cache的命中率还是相当高的。一般规定Cache与主存空间比为4∶1000,即128 KB Cache可映射32 MB主存、256 KB Cache可映射64 MB主存,在这种情况下,命中率都在90%以上。至于没有命中的数据,CPU只好直接从主存获取,获取的同时,也把它拷贝到Cache,以备下次访问。4.3.2 Cache的结构 Cache通常由相联存储器实现。相联存储器的每一个存储块都具有额外的存储信息,称为标签Tag。当访问相联存储器时,将地址和每一个标签进行比较,从而对标签相同的存储块进行访问。为了说明Cache的结构,设块的大小为2b个连续的字,将整个主存按块的大小进行分块,共分为2m个块,其块号用j表示,其中j=0,1,2,…,2m-1;将Cache也按块的大小进行分块,共分为2c个块,其块号用i表示,其中i=0,1,2,…,2c-1。 地址映射是指把主存地址空间映射到Cache地址空间的规则,即主存块与Cache块之间的对应关系,此规则可以表示为i与j之间的函数关系,根据i与j之间的函数关系(映射方式)的不同,可以将Cache的结构分为全相联映射Cache、直接映射Cache、组相联映射Cache三种基本结构。不同结构的Cache必然有与之对应的地址变换方法,所谓地址变换是指程序在实际运行过程中,如何把主存地址变换成Cache地址的方法。 1.全相联映射 在全相联映射Cache中,地址映射函数关系为i=j,即主存中的任意一块j可以映射到Cache中任何一块位置上。全相联映射方式如图4-31所示。全相联映射方式的地址变换如图4-32所示。主存地址包括主存块号j和块内地址w。主存块号j作为相联查找的关键字段,与目录表中的主存块号字段进行比较,若找到一个与主存块号j相同的主存块号,并且有效位为1时,则取其Cache块号i与块内地址w拼接在一起,形成一个Cache地址。如果在相联查找中没有发现与主存块号j相同的主存块号,表明该主存块尚未装入Cache,则调该主存块到Cache中,并修改目录表。图4-31 全相联映射方式图4-32 全相联映射方式的地址变换 由于任何一个主存块可以存放在任何一个空闲Cache块的位置上,因此,全相联映射方式发生两个主存块争用一个Cache块位置的冲突概率较低,Cache的空间利用率也因此较高。但是由于全相联映射方式的地址变换需要容量为C个存储字的相联存储器来存放目录表,Cache越大,要求相联存储器的容量也越大,过大的相联存储器不仅价格昂贵,而且会降低地址变换的速度。 【例4-3】 假设某计算机系统中Cache容量为32 KB,块大小是16个字节,主存容量为1 MB,地址映射为全相联映射方式。 (1) 主存地址为多少位?如何分配? (2) Cache地址为多少位?如何分配? (3) 目录表的格式和容量各如何? 解:(1) 主存地址共20位,1 MB=220 B。主存可分为4 MB/16 B=216个块,主存地址为:块号(16位)、块内字地址(4位)。 (2) Cache地址为15位:块号(11位)、块内字地址(4位)。 (3) 目录表的格式为:主存块号(16位)+Cache块号(11位)+有效位(1位)。目录表容量为Cache的块数,即2 KB。 2.直接映射 直接映射Cache中,地址映射函数关系为i=j mod 2c,即主存中的任意一块j可以映射到Cache中满足i=j mod 2c的块位置上。C为Cache的块容量,将主存按Cache块容量大小进行分区,可分为P=M/C个区,其区号用k表示,k=0,1,…,P-1。在直接映射方式中,主存的一个区与整个Cache相对应,因此,Cache的地址与主存地址中除区号外的低位地址完全相同。 主存地址由区号k、块号j、块内地址w组成,用块号j去访问区表存储器,把从中读出的区号与主存地址中区号k进行比较。如果区号相同,并且有效位为1时,则命中,主存地址中块号j与块内地址w直接作为Cache地址,从而访问Cache;如果区号相同,但有效位为0时,则表示Cache中虽然已有要访问的块,但该块与已经被修改的主存副本块内容不一致,是一个作废的块,需要再从主存中调入并重写该块,并且重写后将有效位置1。如果区号不相同,并且有效位为1时,则表示没有命中,但该块为有效块,需要把该块调出,写入主存,并修改主存中相应的副本块;如果区号不相同,并且有效位为0时,则表示没有命中,可以直接调入所需要的新块。 直接映射方式的地址变换如图4-33所示。主存地址由三部分组成,末b位为字块内地址,中间c位为Cache字块地址,高t位(t=m-c)是主存字块标记,也就是记录在相应Cache字块标记中的内容。当有效位为“1”时,表明该数据块是主存中一块数据的副本。Cache在接收到CPU送来的主存地址和读/写命令后,用中间c位字段找到对应的Cache中字块,然后将其标记与主存地址的高t位比较:如果两者相等,而且有效位为“1”,则可根据b位块内地址,从Cache中取得所需的指令或数据;如果两者不相等,或者有效位为“0”,就从主存读出新的字块替换Cache中旧的字块,同时修改Cache中标记,并将数据送给CPU。 直接映射方式的映射函数简单,实现的硬件简单,地址变换速度快,一旦命中且有效,主存地址中除区号外的低位地址直接变换成Cache的地址。但也存在比较突出的缺点,Cache的利用率不高,其原因是,当两个以上的主存块映射到相同的Cache块位置而发生冲突时,即使其他Cache块位置空闲也不能被利用。图4-33 直接映射方式地址变换 【例4-4】 假设某计算机系统中Cache容量为64 KB,块大小是16 B,主存容量为4 MB,地址映射为直接映射方式。 (1) 主存地址为多少位?如何分配? (2) Cache地址为多少位?如何分配? (3) 目录表的格式和容量各如何? 解:(1) 主存地址共22位,4 MB = 222 B。主存可分为4 MB/64 KB = 64个区,每个区的块数为:64 KB/16 = 4 KB,因此,主存地址为:区号(6位)、块号(12位)、块内字地址(4位)。 (2) Cache地址为16位:块号(12位)、块内字地址(4位)。 (3) 目录表的格式为:区号(6位)+有效位(1位)。目录表容量与缓冲块容量相同,即4 KB。 3.组相联映射 组相联映射Cache是介于全相联映射Cache和直接映射Cache之间的一种结构,是目前采用较多的一种地址映射方式。组相联映射方式是把整个主存按Cache的容量C进行分区,区号为k,每个区和Cache再按同样大小划分成数量相等的组,组号为g,组内再划分成块,主存的组到Cache的组之间采用直接映射方式,对应组内各个块之间采用全相联映射方式。用于地址变换的块表容量与Cache的块容量相等,块表的字长包含主存地址的区号、组内块号、Cache地址的组内块号、1位有效位。组相联映射方式的地址变换如图4-34所示。 主存地址由区号k、组号g、组内块号j、块内地址w组成,用组号g去访问块表存储器,从中读出一组字,字数为组内的块容量。把这些字中的区号和块号与主存地址中的区号k和块号j进行相应比较,如果发现有相等的,则表示Cache中已有要访问的块,若有效位为1,则命中,从这个字中取出Cache的块号i与主存地址中的组号g与块内地址w拼接起来形成Cache地址;如果相联比较不等或有效位为0,则不命中,应调入新块。图4-34 组相联映射方式的地址变换 【例4-5】 假设某计算机系统中Cache容量为32 KB,块大小是64个字节,缓存共分128个组,主存容量为1 MB,地址映射为组相联映射方式。 (1) 主存地址为多少位?如何分配? (2) Cache地址为多少位?如何分配? (3) 块表的格式和容量各如何? 解:(1) 主存地址共20位,1 MB = 220 B。主存可分为1 MB/32 KB = 25个区,区号为5位;Cache共分128个组,组号为7位;块内地址w为6位;块号为32 KB/128/64 = 22,即2位。 (2) Cache地址为16位:组号(6位)、块号为(2位)、块内字地址(6位)。 (3) 目录表的格式为: 区号(5位) + 主存组内块号(2) + Cache组内块号 (2) + 有效位(1位)块表容量与Cache的块容量相同,即组数×组内块数 = 128 × 4 = 512。4.3.3 Cache的读/写过程 1.Cache的读过程 当CPU发出读请求时,如果Cache命中,通过地址变换,就可以直接对Cache进行读操作,不需要对主存进行读操作;如果Cache未命中,则CPU直接对主存进行读操作,同时将相应的块调入到Cache。若此时Cache已满,如何将Cache中的某块调出,把新块调入?这就需要替换策略。常用的替换算法有以下四种。 1) 随机算法(Random,RAND)随机算法是一种最简单的替换算法,不考虑Cache中块的过去、现在和将来的使用情况,随机地选择一块进行替换。 2) 先进先出算法(First-In First-Out,FIFO) 先进先出算法是按调入Cache的先后顺序,在需要替换时将最先调入Cache中的块替换掉。这种方法容易实现,而且系统开销较小。 3) 最近最少使用算法(Least Recently Used,LRU) 最近最少使用算法是根据块的使用情况,将CPU最近最少使用的块作为被替换的对象。这种替换方法需要随时记录Cache中各个块的使用情况,以便确定Cache中哪一个块是最近最少使用的块。LRU算法相对比较合理,但实现起来较为复杂。为此,有人提出最久未使用算法(Least Frequently Used,LFU),它将“使用的多少”问题转换为“有没有使用”,从而把算术问题转换成逻辑记录问题,简化了算法的实现过程,因而被广泛应用。 4) 最优化算法(OPTimization,OPT) 最优化算法是一种以将来使用最少作为替换目标的算法,该算法是一种理想化算法,现实中很少使用,它常被作为评价其他替换算法优劣的标准。 2.Cache的写过程 当CPU发出写请求时,如果Cache未命中,则CPU直接对主存进行写操作,与Cache无关;如果Cache命中,就会出现如何保持Cache中内容与主存中内容的一致性问题,一般的处理方法有如下两种。 1) 写直达法(Write-Through) CPU同时写主存和Cache,以保证主存的数据能同步更新。这种方法实现简单,但可能增加多次不必要的主存写入。 2) 回写法(Write-Back) 将CPU要写的信息暂时只写入Cache,并用标志将该块注明,直到该块从Cache中替换出去时才一次写回主存。这种方法操作速度快,但因主存中的字块未经随时修改而有可能出错。 4.4 虚 拟 存 储 器4.4.1 概述 1.虚拟存储器的概念 虚拟存储器(Virtual Memory)建立在主存—辅存的物理结构基础之上,它是不断发展完善并逐步形成的。早期具有辅存的存储系统并不是虚拟存储器,这是因为用户最多只允许使用主存容量,而实际上用户编程所用空间要比主存容量小得多。用户编程要想超出可使用的主存空间范围,就必须对程序进行对准分段。对于哪段存放在主存、哪段存放在辅存、何时从辅存调入主存、又何时从主存调出到辅存、存储空间如何分配、地址如何编写等一系列问题,都要求编程人员认真考虑并事先在程序中安排; 在多道程序和多用户分时系统的运行情况下,还往往会发生用户竞争存储空间的矛盾;随着计算机规模的扩大和复杂程度的增加,用户的负担日益加重。如何让用户从繁重的负担中解脱出来,不再去考虑主存空间大小、主存与辅存的差别等,用户编程可以随意使用存储空间呢?在用户心目中,计算机系统有一个大容量、高速度、可满足要求、使用方便的存储器,而没有主存、辅存之分,于是便产生了虚拟存储器的概念。所谓虚拟存储器是指主存—辅存层次,它以透明的方式给用户提供了一个比实际主存空间大得多的程序地址空间。 2.虚地址与实地址 用户编程时所用的地址称虚拟地址或逻辑地址,简称虚地址。虚地址的全部集合构成的地址空间称为虚拟地址空间或逻辑空间,实际的主存地址称为物理地址或实地址,实地址对应的空间为主存空间或物理空间,其容量为主存容量或实存容量。对于虚拟存储器,程序运行中每次访问主存时,都必须进行虚、实地址的变换。 3.虚拟存储器与Cache的比较 主存—辅存层次与Cache—主存层次是两种不同的层次,有很多相似之处,它们所采用的地址变换、地址映射方式、替换策略等,从原理上看是相同的,都基于程序局部性原理。而不同之处在于:Cache用于弥补主存与CPU之间的速度差距,而虚拟存储器用来弥补主存与辅存之间的容量差距;Cache与主存之间每次传送是以块为单位,块的大小只有几十个字节,而虚拟存储器的信息传送单位可以是页、段等,长度很大,为几百至几百字节;主存的访问速度比Cache慢5~10倍,而辅存比主存要慢上千倍,因此,CPU访问未命中时,系统的相对性能损失有很大不同,在虚拟存储器中未命中时的性能损失远远大于Cache中的。 4.虚拟存储器的管理方式 由于主存—辅存层次的基本信息传送单位可以采用段、页、段页几种不同方案,因此,虚拟存储器的存储管理方法也就相应存在段式管理、页式管理和段页式管理。 1) 段式管理 段式管理是把主存按段分配的存储管理方式。段是指逻辑结构相对独立的部分,例如子程序、数据表等。段作为独立的逻辑单位可以被其他程序段调用,形成规模较大的程序。因此,段作为基本信息单位在主存—辅存之间传送和定位是比较合理的。段的逻辑独立性易于编译、管理、修改和保护,也便于多道程序的共享;某些类型的段(堆栈、队列)具有动态可变长度,允许自由调度以便有效利用主存空间。但由于段的长度各不相同,段的起点和终点不定,给主存空间分配带来麻烦,而且容易在段间留下许多空余的零碎存储空间不易利用而造成浪费。各个段在主存的位置是由段表指示的,段表由段起址、段长和控制位组成。 2) 页式管理 针对段式管理会在主存中各个段之间留下一些不易利用的空余零碎空间,有人提出了页式管理方式。所谓页式管理,是指把主存的物理空间和辅存的逻辑空间按页(一定长度的区域)划分并进行管理。各个页在主存中的位置由页表指示,页表包括实页号和控制位组成。页作为主存—辅存之间基本信息传送单位,唯一可能造成浪费的是程序最后一页零头的页内空间。由于页不是逻辑上独立的实体,所以,处理、保护、共享都不及段式管理方便。 3) 段页式管理 段页式管理兼顾前两种管理方式的优点,是将程序按模块分段,段再分页,进入主存后仍以页为基本信息传送单位,用段表和页表进行两级定位的管理方式。4.4.2 页式虚拟存储器 在页式虚拟存储器中,设虚拟空间分成m个逻辑页,其逻辑页号为0,1,2,…,m-1;主存空间也按同样大小分成n个物理页,其物理页号为0,1,2,…,n-1。显然,m>n,由于页的大小都为2的整数幂个字,所以,页的起点都落在低位字段为零的地址上。因此,虚地址分为两个字段:高位字段为逻辑页号,低位字段为页内行地址。同样,实地址也分为两个字段:高位字段为物理页号,低位字段为页内行地址。由于页面大小相同,所以虚地址与实地址中页内行地址是相同的。 虚地址到实地址的变换是通过页表来实现的。在页表中,每一个逻辑页号都对应一个表目,表目内容包括该逻辑页所在主存的物理页号和一些控制位,用其中的物理页号与虚地址中的页内行地址拼接成实地址,据此来访问主存。页式虚拟存储器的地址变换如图4-35所示。图4-35 页式虚拟存储器的地址变换过程 通常页表中的一些控制位包括装入有效位、修改位、替换控制位等,其中如果装入的有效位为1,表示该逻辑页已在主存;如果装入的有效位为0,表示该逻辑页尚未调入主存,CPU如果访问该页,页面就会失效中断,启动输入/输出系统,将辅存中的逻辑页调入到主存;修改位用来指示主存页面中的内容是否被修改过,若修改位为1,表示该物理页修改过,在该物理页被替换时必须写回主存;替换控制位用来指出需替换的页。 假设页表已保存或已调入主存,在访问存储器时,首先要查页表,即使页表命中,也得先访问一次主存去查页表,形成实地址后再访问一次主存才能取出数据,相当于访问两次主存。如果页面失效,还要进行页面替换、页面修改,访问主存的次数将会更多。因此,把页表的最活跃部分存放在一个高速存储器中组成一个快表,这是减少时间开销的一种方法。一种由快表和慢表组合实现的地址变换如图4-36所示。快表由硬件组成,它比页表小得多,仅仅是慢表的一个小小副本。查表时,由逻辑页号同时去查快表和慢表,当在快表中找到此逻辑页号时,就能很快地形成实地址,并使慢表的查找作废;如果在快表中找不到此逻辑页号,那就要访问一次主存去查慢表,形成实地址,同时将此逻辑页号和对应的物理页号送入快表,替换快表中的内容,这也要用到替换算法。图4-36 快表和慢表组合实现地址变换4.4.3 段式虚拟存储器 在段式虚拟存储器中,段是按程序的逻辑结构划分的,各个段的长度因程序而异,因此虚地址是由段号和段内地址组成的。虚地址到实地址的变换是通过段表来实现的。在段表中,每一个段号都对应一个表目,表目内容包括段起址、段长和一些控制位,用其中段起址与虚地址中的段内地址相加便形成实地址,据此来访问主存。段式虚拟存储器的地址变换如图4-37所示。图4-37 段式虚拟存储器地址变换过程4.4.4 段页式虚拟存储器 段页式虚拟存储器是段式虚拟存储器和页式虚拟存储器的结合,是把程序按逻辑单位进行分段,再把每个段分成固定大小的页。程序对主存的调入调出是按页面进行的,但它又可以按段实现共享和保护。因此,它兼备了段式虚拟存储器和页式虚拟存储器的优点。其缺点是地址变换过程中需要多次查表。在段页式虚拟存储器中,每道程序是通过一个段表和一组页表来进行定位的。段表中的每一个表目对应一个段,表目的内容包括该段的页表起始地址和该段的控制保护信息。由页表指明该段的各个页在主存中的位置以及是否装入、已修改等状态信息。 多道程序的每一道程序需要一个基号(用户标志号、程序标志号),由它指明该道程序的段表起始地址(存放在基址寄存器中),因此,虚地址由基号、段号、页号、页内地址组成。下面通过举例来说明虚地址到实地址的变换过程。【例4-6】 假设有三道程序(用户标志号为A、B、C),其基址寄存器内容分别为SA、SB、SC,虚地址到实地址的变换过程如图4-38所示。在主存中每道程序都有一张段表,A程序有4段,C程序有3段。每段应有一张页表,段表的每行就表示页表的起始位置,而页表的每行为相应的物理页号。图4-38 段页式虚拟存储器地址变换过程 解:① 根据基号C,执行SC+段号(1)操作,得到段表相应的行地址,其内容为页表的起始地址b; ② 执行b+页号(2),得到物理页号的地址,其内容为物理页号(10); ③ 物理页号与页内地址拼接成物理地址。 由此可见,段页式虚拟存储器由虚地址到实地址的变换至少需要查两次表,即一次段表和一次页表。段、页表构成表层次,表层次并不只是段页式存在,页表也存在,这是因为整个页表是连续存储的,当一个页表的大小超过一个页面大小时,页表就可能分成几个表,分存于几个不连续的主存页面中,然后将这些页表的起始地址又放入一个新的页表中,从而形成了二级表层次。一个大的程序可能需要多级页表层次。对于多级页表层次,在程序运行时,除了第一级页表需驻留在主存外,整个页表中只需有一部分是在主存中,大部分可存于外存,需要时再由第一级页表调入,从而减少每道程序占用的主存空间。4.4.5 替换算法 在Cache中我们讨论过替换算法,在虚拟存储器中仍然存在替换问题,当CPU访问主存而产生页面失效(缺页)时,若主存页面已全部被占满,必须采用替换算法将主存中的某页进行替换。虚拟存储器中的替换与Cache中的替换有很多相似之处,但也存在明显的不同,主要表现在两个方面,一是缺页至少要涉及一次磁盘存取,以读取所缺的页,因此缺页使系统蒙受的损失比Cache未命中大得多;二是页面替换的选择余地大,属于一个进程的页面都可替换。为了换取更高的命中率,虚拟存储器中的替换策略一般采用LRU算法、LFU算法、FIFO算法。 将被替换出去的页面是否要进行某些处理呢?由于主存中的每一个页在辅存中都留有副本,假如该页调入主存后没有被修改过,那么就不必进行处理,否则,应该把该页重新写入辅存,以保证辅存中数据的正确性。为此,页表中专门设置有修改控制位,当该页刚调入主存时,此控制位为0;当对该页进行写操作时,此控制位置1。在该页被替换时,检查其修改控制位是否为1;如果为1,则先将该页从主存写入辅存,然后再从辅存接收新的一页;如果为0,直接从辅存接收新的一页。 在虚拟存储器中,为了实现逻辑地址到物理地址的转换,并在页面失效时进行合理有效的管理,专门设置了由硬件实现的存储器管理部件MMU。关 联习 题 4.1 判断题。 (1) 外存比内存的存储容量大、存取速度快。( ) (2) 动态RAM和静态RAM都是易失性半导体存储器。( ) (3) Cache是内存的一部分,它可由指令直接访问。( ) (4) 引入虚拟存储系统的目的,是为了加快外存的存取速度。( ) (5) 多体交叉存储器主要是为了解决容量扩充问题。( ) (6) 数据引脚和地址引脚越多,芯片的容量越大。( ) (7) 存储芯片的价格取决于芯片的容量和速度。( ) (8) 要访问DRAM,应首先给出RAS地址,之后再给出CAS地址。( )4.2 选择题。(1) 内存储器用来存放( )。 A. 程序 B. 数据 C. 微程序 D. 程序和数据(2) 某一静态RAM芯片,其容量为64K×1位,则其地址线有( )。 A. 64条 B. 64 000条 C. 16条 D. 64 436条(3) 需要定期刷新的存储芯片是( )。 A. EPROM B. DRAM C. SRAM D. EEPROM(4) ( )存储芯片是易失性的。A.SRAM B. UV-EPROMC. NV-RAM D. EEPROM (5) 有RAS和CAS引脚的存储芯片是( )。 A. EPROM B. DRAM C. SRAM D. 三者都不是 (6) 下面叙述中不正确的是( )。 A.半导体随机存储器可随时存取信息,掉电后信息丢失 B.在访问随机存储器时,访问时间与单元的物理位置无关 C.内存储器中存储的信息均是不可改变的 D.随机存储器和只读存储器可以统一编址 (7) 动态RAM与静态RAM相比,其优点是( )。 A.动态RAM的存储速度快 B.动态RAM不易丢失数据 C.在工艺上,比静态RAM的存储密度高 D.控制比静态RAM简单 (8) 某512×8位RAM芯片采用一位读/写线控制读写,该芯片的引脚至少有( )。 A. 17条 B. 19条 C. 21条 D. 22条 (10) 在主存储器和CPU之间增加Cache的主要目的是( )。 A.降低整机系统的成本 B. 解决CPU和主存之间的速度匹配问题 C. 扩大主存容量D. 替代CPU中的寄存器工作 (11) 采用虚拟存储器的主要目的是( )。 A. 提高主存储器的存取速度 B. 扩大主存储器的存储空间,并能进行自动管理和调度 C. 提高外存储器的存取速度 D. 扩大外存储器的存储空间 (12) 某计算机的字长是32位,其存储容量是32 MB,若按字编址,它的寻址范围是( )。 A.0~8 MB B. 0~32 M C. 0~32 MB D. 0~8 M (13) 在Cache的地址映射中,若主存储器中的任意一块均可映射到Cache内的任意一块的位置上,则这种方法称为( )。 A.直接映射 B. 组相联映射 C.全相联映射 D. 混合映射 4.3 填空题。 (1) 采用4K×4位的静态RAM存储芯片扩展32 KB的存储模块,需要存储芯片数为_______片。 (2) 存储器的技术指标有________、________、________和________等。 (3) CPU能直接访问_______和_______,但不能直接访问_______。 (4) Cache存储器的主要作用是解决_______。 (5) 存储器的取数时间是衡量主存________的重要指标,它是从________到_______的时间。 (6) 某存储器数据总线宽度为32位,存取周期为250 ns,则其带宽是_______。 (7) Cache的地址映像方式有_______、_______和_______三种。 (8) 虚拟存储器处于_______层次,它给用户提供了一个比实际_______空间大得多的_______空间。 4.4 静态MOS存储器与动态MOS存储器存储信息的原理有何不同?为什么动态MOS存储器需要刷新?一般有哪几种刷新方式? 4.5 某一动态RAM芯片(64K×1位),采用地址复用技术,则除了电源和地引脚外,该芯片还有哪些引脚?各为多少位? 4.6 在页模式DRAM中,“打开一页”指什么?在打开一页的操作中,信号和的作用是什么? 4.7 DRAM的tRC和tRAC指什么?两者有何不同? 4.8 假设某存储器地址为22位,存储器字长为16位,试问: (1) 该存储器能存储多少字节信息? (2) 若用64K×4位的DRAM芯片组成该存储器,则需多少片芯片? (3) 在该存储器的22位地址中,多少位用于片间寻址?多少位用于片内寻址? 4.9 某8位计算机采用单总线结构,地址总线17根(A16…A0),数据总线8根(双向) (D7…D0),控制信号R/(高电平为读,低电平为写)。已知该机存储器地址空间从0连续编址,其地址空间分配如下:最低8 KB为系统程序区,由ROM芯片组成;紧接着40 KB为备用区,暂不连接芯片;而后78 KB为用户程序和数据空间,由静态RAM芯片组成;最后2 KB用于I/O设备(与主存统一编址)。现有芯片如题4.9图所示。题4.9图 SRAM:16K×8位,其中为片选信号,低电平有效;为写控制信号,低电平写,高电平读。 ROM:8K×8位,其中为片选信号,低电平有效;为读出控制,低电平读出有效。 译码器:3∶8译码器,输出低电平有效;为使能信号,低电平时译码器功能有效。其他与、或等逻辑门电路自选。 (1) 该主存需多少SRAM芯片? (2) 试画出主存芯片与CPU的连接逻辑图。 (3) 写出各芯片的地址分配表。 4.10 已知某8位机的主存采用4K×4位的SRAM芯片构成该机所允许的最大主存空间,并选用模块板结构形式,该机地址总线为18位,问: (1) 若每个模块板为32K×8位,共需几个模块板? (2) 每个模块板内共有多少块4K×4位的RAM芯片?画出一个模块板内各芯片连接的逻辑框图。 (3) 该主存共需要多少4K×4位的RAM芯片?CPU如何选择各个模块板? 4.11 64K×1位DRAM芯片通常制成两个独立的128×256阵列。若存储器的读/写周期为0.5 ms,则对集中式刷新而言,其“死区”时间是多少?如果是一个256K×1位的DRAM芯片,希望能与上述64K×1位DRAM芯片有相同的刷新延时,则存储阵列应如何安排? 4.12 访问主存的地址是20位(A19…A0),数据总线为8位,分别计算下列各种情况下标识Cache和数据Cache的大小,并画出对应的结构框图。 (1) 全相联映射,内容cache大小为1024; (2) 直接映射,A15…A0作为索引; (3) 2路组相联映射,A14…A0作为索引; (4) 4路组相联映射,A13…A0作为索引; (5) 8路组相联映射,A12…A0作为索引。 展开更多...... 收起↑ 资源预览