第三章 存储器

3.1 存储器概述

3.1.1、存储器分类

1.按存储介质分

  • 半导体存储器:存储元件由半导体器件组成的叫半导体存储器。其优点是体积小、功耗低、存取时间短。其缺点是当电源消失时,所存信息也随即丢失,它是一种易失性存储器。
  • 磁表面存储器:磁表面存储器是在金属或塑料基体的表面上涂一层磁性材料作为记录介质,工作时磁层随载磁体高速运转,用磁头在磁层上进行读写操作,故称为磁表面存储器。按载磁体形状的不同,可分为磁盘、磁带和磁鼓。这类存储器具有非易失性的特点
  • 磁芯存储器:磁芯是由硬磁材料做成的环状元件,在磁心中穿有驱动线(通电流)和读出线,这样便可进行读写操作。磁心属磁性材料,故它也是不易失的永久记忆存储器。不过,磁心存储器的体积过大、工艺复杂、功耗太大
  • 光盘存储器:光盘存储器是应用激光在记录介质(磁光材料)上进行读写的存储器,具有非易失性的特点。记录密度高、耐用性好、可靠性高和可互换性强。

2.按存取方式分

(1) 存取时间与物理地址无关(随机访问)

所谓「随机访问」,指的是当存储器中的讯息被读取或写入时,所需要的时间与这段信息所在的位置无关,可根据地址直接访问数据。

  • 随机存储器RAM:RAM是一种可读写存储器,根据地址访问数据,而不是根据顺序访问数据。
  • 只读存储器:ROM:只读存储器是能对其存储的内容读出,而不能对其重新写入的存储器。

(2) 存取时间与物理地址有关(串行访问)

所谓「串行访问」如果对存储单元进行读写操作时,需按其物理位置的先后顺序寻找地址,则这种存储器叫作串行访问存储器。这种存储器由于信息所在位置不同,存取顺序访问存储设备中的信息时,其所需要的时间与位置有关系。。

  • 顺序存取存储器:不论信息处在哪个位置,读写时必须从其介质的始端开始按顺序寻找,如磁带。
  • 直接存取存储器:读写时,首先直接指出该存储器中的某个小区域(磁道),然后再顺序寻访,直至找到位置。故其前段是直接访问,后段是串行访问,如磁盘

3.按在计算机中的作用分类

  • 主存储器:主存储器的主要特点是它可以和CPU直接交换信息
  • 辅助存储器:辅助存储器是主存储器的后援存储器,用来存放当前暂时不用的程序和数据,它不能与CPU直接交换信息。
  • 缓冲存储器:缓冲存储器用在两个速度不同的部件之中,如CPU与主存之间可设置一个快速缓冲存储器,起到缓冲作用
  • 主存速度快、容量小、每位价格高;辅存速度慢、容量大、每位价格低。

存储器分类

3.1.2 存储器的层次结构

存储器有三个主要特性:速度、容量和价格/位(简称位价)。一般来说,速度越高,位价就越高;容量越大,位价就越低;而且容量越大,速度必越低。

存储器分层结构图

主存用来存放将要参与运行的程序和数据,其速度与CPU速度差距较大,为了使它们之间速度更好匹配,在主存与CPU之间,插入了一种比主存速度更快、容量更小的高速缓冲存储器 Cache,显然其位价要高于主存。主存与缓存之间的数据调动是由硬件自动完成的,对程序员是透明的。辅助存储器其容量比主存大得多,大都用来存放暂时未用到的程序和数据文件。CPU不能直接访问辅存,辅存只能与主存交换信息,因此辅存的速度可以比主存慢得多。辅存与主存之间信息的调动,均由硬件和操作系统来实现。

CPU-缓存-主存-缓存层次图

3.2 主存储器

3.2.1 主存储器概述

根据MAR中的地址访问某个存储单元时,还需经过地址译码、驱动等电路,才能找到所需访问的单元。读出时,需经过读出放大器,才能将被选中单元的存储字送到MDR。写入时,MDR中的数据也必须经过写入电路才能真正写入到被选中的单元中。

主存的基本组成

现代计算机的主存都由半导体集成电路构成,图中的驱动器、译码器和读写电路均制作在存储芯片中,而MAR和MDR制作在CPU芯片内。存储芯片和CPU芯片可通过总线连接。

当要从存储器读出某一信息字时,首先由CPU将该字的地址送到MAR,经地址总线送至主存,然后发读命令。主存接到读命令后,得知需将该地址单元的内容读出,便完成读操作,将该单元的内容读至数据总线上,至于该信息由MDR送至什么地方,这已不是主存的任务,而是由CPU决定的。若要向主存存入一个信息字时,首先CPU将该字所在主存单元的地址经MAR送到地址总线,并将信息字送入MDR,然后向主存发写命令,主存接到写命令后,便将数据线上的信息写入到对应地址线指出的主存单元中。

主存和CPU的关系

  • 大端存储与小端存储
    • 大端(存储)模式:是指一个数据的低位字节的内容放在高地址处,高位字节存的内容放在低地址处。
    • 小端(存储)模式:是指一个数据的低位字节内容存放在低地址处,高位字节的内容存放在高地址处。
  • 主存中存储单元地址的分配

什么是寻址?

寻址指当CPU请求数据时获得该数据在内存上的位置的过程。内存上存储的所有数据都会有一个可以区分的地址,这与其存放的位置相对应,当CPU请求数据时,内存中的电路会根据CPU的地址线上的信号利用数据总线向CPU返回数据。

地址线是用于传输地址信息的数据线,一根地址线可以通过高电平或低电平来区分1或0,因此一根地址线有两个状态:1或0,那么N根地址线可以表示2^n个不同的状态。

主存各存储单元的空间位置是由单元地址号来表示的,而地址总线是用来指出存储单元地址号的,根据该地址可读出一个存储字。不同的机器存储字长也不同,为了满足字符处理的需要,常用8位二进制数表示一个字节,因此存储字长都取8的倍数。通常计算机系统既可按字寻址,也可按字节寻址,字地址是用该字在内存中首个字节的地址来表示。32位字长,8条地址线主存地址如下:

主存寻址图

1.按字节寻址

按字节寻址指一个地址线表示的数(即状态)与一个字节地址相对应。比如一台机器有30根地址线,如果按字节寻址,其寻址范围是2^{30}=1GB。注意这里用的单位是B,原因如上文所述,30根地址线对应的是磁盘中的存储空间的基本单位,即1B,8个位。

主存就像一个小区,每个字就像小区里的一栋楼,而每个字节就像每栋楼里的一套房子。按字节寻址就像是对小区里每栋楼里所有的房子放在一起进行编号。而地址线有0/1状态,按照地址线的条数地址线可以编号的范围为(2^地址线数)。

一台 IBM370 字长为32位,主存的地址线为24位,如果按照字节寻址,那么按照字节寻址的范围为2^24=16MB。

一台 PDP-11 字长为16位,主存的地址线为24位,如果按照字节寻址,那么按照字节寻址的范围为2^24=16MB。

2.按字寻址

计算机以此方式寻址时,每一个地址值指向了一个字,这里指向的便不是按字节寻址中的字节了。如前文所述对字的定义,一个字里面有任意个字节,那么计算机如何知道其地址指向的到底是字中的第几个字节呢?这便需要地址线中分出一部分标出其所指的到底是字中的第一个字节,还是第二个,亦或是其他。比如一个计算机有30根地址线,如果按字寻址,其字的字长为32位的话,那么每个字长有4个字节,4个字节用二进制编码需要两位来区分(比如第1、2、3、4个字节分别为00,01,10,11)因此真正用来表示字的位置的地址线有30-2=28根,其寻址范围是2^28=256MW。注意这里单位为W表示一个字。

主存就像一个小区,每个字就像小区里的一栋楼,而每个字节就像每栋楼里的一套房子。按字寻址就像将小区里的每栋楼进行二进制编号,但是每栋楼里还有若干套房子,如果相定位到相应的房子还需要对每栋楼里的房子进行编号,假设每栋楼里有N套房子,则需要⌈logN⌉位二进制编码。地址总线有X条,本来可以表示2^X栋楼,但是还需要⌈logN⌉条表示房子,则只剩X-⌈logN⌉条地址线表示楼,可以表示楼的范围则为2^(X-⌈logN⌉).

一台 IBM370 字长为32位,主存的地址线为24位,如果按照字寻址,那么按照字寻址的范围为2^(24-log4)=2^22=4MW。

一台 PDP-11 字长为16位,主存的地址线为24位,如果按照字寻址,那么按照字寻址的范围为2^(24-log2)=2^23=8MW。

  • 主存的技术指标

(1)存储容量

存储容量是指主存能存放二进制代码的总数:存储容量=存储单元个数×存储字长
存储容量也可用字节总数来表示:存储容量=存储单元个数×存储字长/8

(2)存储速度

存储速度是由存取时间和存取周期来表示的。

存取时间又叫存储器的访问时间( Memory Access Time),它是指启动次存储器操作(读或写)到完成该操作所需的全部时间。存取时间分读出时间和写入时间两种。读出时间是从存储器接收到有效地址开始,到产生有效输出所需的全部时间。写入时间是从存储器接收到有效地址开始,到数据写入被选中单元为止所需的全部时间

存取周期( Memory Cycle Time)是指存储器进行连续两次独立的存储器操作(如连续两次读操作)所需的最小间隔时间,通常存取周期大于存取时间。

3.2.2 半导体存储芯片简介

1.半导体存储芯片的基本结构

半导体存储芯片基本结构

片选线用来选择存储芯片。由于存储器是由许多芯片组成,需用片选信号来确定哪个芯片被选中。例如,一个64K×8位的存储器可用32片16K×1位存储芯片组成,如图所示。但每次读出一个存储字时,只需选中8片。

存储芯片片选线

2.半导体存储芯片的译码驱动方式

(1)线选法

16×1字节线选法内存结构示意图

上图是16×1字节线选法内存结构示意图,它的特点是用一根字选择线(字线),直接选中一个存储单元的各位(如一个字节)。共有4条地址线$A_{0}$、$A_{1}$、$A_{2}$、$A_{3}$,经地址译码器后共有16种输出。如当地址线$A_{3}A_{2}A_{1}A_{0}$为1111时则第15根字线被选中,对应图中的最后一行八位代码便可直接读出或写.

结构较简单,但如果有一个1M×1字节的芯片,有20条地址线,这20条地址线译码后会有大约100w条线,但是这100w条线同时只有一条生效,就会造成芯片内线密集且利用率不高,只适于容量不大的存储芯片。

(2)重合法

1K×1位重合法结构示意图

上图是一个1K×1位重合法结构示意图。显然,只要用64根选择线(XY两个方向各32根),便可选择32×32矩阵中的任一位。例如当地址线为全0时,译码输出X0和Y0有效,选中矩阵中的第0行、第0列那位。由于被选单元是由X、Y两个方向的地址决定的,故称重合法。当欲构成1K×1字节的存储器时,只需用8片上图所示的芯片即可。

因此想构成1M×1字节的存储器需要8片1M×1的重合法芯片,每片重合法芯片行列各有10条地址线,经译码后,行列各有1k条地址线,所以每片芯片共有2k条地址线,线密度大大降低。

3.2.3 随机存取存储器RAM

静态RAM(SRAM)

(1)静态RAM基本单元电路

静态RAM基本电路

图中$T_{1}$~$T_{4}$是一个由MOS管组成的触发器基本电路,$T_{5}$、$T_{6}$尤如一个开关,受行地址选择信号控制。由$T_{1}$~$T_{6}$共同构成一个六管MOS基本单元电路。$T_{7}$、$T_{8}$受列地址选择控制,分别与位线A和A′相连,它们并不包含在基本单元电路内,而是芯片内同一列的各个基本单元电路所共有的。

(2)静态RAM基本电路的读操作

静态RAM基本电路的读操作

假设触发器已存有“1”信号,即A点为高电平。当需读出时,只要使行列地址选择信号均为有效,则使$T_{5}$、$T_{6}$、$T_{7}$、$T_{8}$均导通,A点高电平通过$T_{6}$后,再由位线A通过T$T_{8}$作为读出放大器的输入信号,在读选择有效时,将“1”信号读出。

(3)静态RAM基本电路的写操作

静态RAM基本电路的写操作

写入时可以不管触发器原状态如何,只要将写入代吗送至图中的$D_{IN}$端,在写选择有效时,经两个写放大器,使两端输出为相反电平。当行、列地址选择有效时,使$T_{5}$、$T_{6}$、$T_{7}$、$T_{8}$导通,并使A与A’点置成完全相反的电平。这样,就把欲写入的信号写入到该单元电路中。如欲写入“1”,即$D_{IN}$=1,经两个写放大器使位线A为高电平,位线A为低电平,结果使A点为高,A’点为低,即写入了“1”信息。

(4) Intel 2114 RAM 芯片

  • Intel 2114外部特征

Intel2114外部特征

  • Intel 2114 读操作

Intel2114读

  • Intel 2114 写操作

Intel2114写

动态RAM(DRAM)

常见的动态RAM基本单元电路有三管式和单管式两种,它们的共同特点都是靠电容存储电荷的原理来寄存信息的。若电容上存有足够多的电荷表示存“1”,电容上无电荷表示存“0”。电容上的电荷一般只能维持1~2ms,因此即使电源不掉电,信息也会自动消失。为此,必须在2ms内对其所有存储单元恢复一次原状态,这个过程叫再生或刷新。

(1)动态RAM基本单元电路

  • 三管MOS动态RAM基本电路

三管MOS动态RAM基本电路

读出时,先对预充电管$T_{4}$置一预充电信号(在存储矩阵中,每一列共用个4管),使读数据线达高电平$V_{DD}$。然后由读选择线打开$T_{2}$,若$T_{1}$的极间电荷$C_{g}$存有足够多的电荷(被认为原存“1”),使$T_{1}$导通,则因$T_{2}$、$T_{1}$导通接地,’使读数据线降为零电平,读出“0”信息。若$C_{g}$没足够电荷(原存“0”),则$T_{1}$截止,读数据线为高电平不变,读出“1”信息。可见,由读出线的高低电平可区分其是读“1”,还是读“0”,只是它与原存信息反相。

写入时,将写入信号加到写数据线上,然后由写选择线打开$T_{3}$,这样,$C_{g}$便能随输入信息充电(写“1”)或放电(写“0”)。

  • 单管MOS动态RAM基本电路

单管MOS动态RAM基本电路

读出时,字线上的高电平使T导通,若$C_{s}$有电荷,经T管在数据线上产生电流,可视为读出“1”。若$C_{s}$无电荷,则数据线上无电流,可视为读出“0”。读操作结束时,$C_{s}$的电荷已泄放完毕,故是破坏性读出,必须再生。

写入时,字线为高电平使T导通,若数据线上为高电平,经T管对$C_{s}$充电,使其存“1”:若数据线为低电平,则$C_{s}$经T放电,使其无电荷而存“0”。

(2)动态RAM芯片

  • 三管动态RAMIntel 1103

Intel1103

  • 单管动态 RAM 4116 (16K × 1位)

单管动态 RAM 4116 (16K × 1位) 外特性

单管动态RAM4116外特性

4116读操作

4116读

读放大器实质上是个触发器,其左右两侧电平相反。例如,选中第63行、第0列的单管MOS电路,其$C_{s}$有电荷为“1”状态,则反映到第0列读放的左侧为“1”,右侧为“0”,经列地址选择管输出至$D_{out}$为0,与原存信息反相。同理,第0~62行经读放至输出线$D_{out}$的信息与原存信息均反相。而读出第64~127行时,因它们的电容$C_{s}$上的电荷均反映到读放的右侧,故经列地址选择管输出至$D_{out}$的信息为同相。

4116写操作

4116写

(3)动态RAM刷新

刷新的过程实质上是先将原存信息读出,再由刷新放大器形成原信息并重新写入的再生过程。

由于存储单元被访问是随机的,有可能某些存储单元长期得不到访问,无读出也就无重写,其原信息必然消失。为此,必须采用定时刷新的方法,它规定在一定的时间内,对动态RAM的全部基本单元电路必作一次刷新,一般取2ms,这个时间叫做刷新周期,或叫再生周期。在刷新周期内,由专用的刷新电路来完成对基本单元电路的逐行刷新。

  • 集中刷新

集中刷新是在规定的一个刷新周期内,对全部存储单元集中一段时间逐行进行刷新,此刻必须停止读/写操作。如 Intel1103动态RAM芯片内排列成32×32矩阵,读/写周期为0.5μs,连续刷新32行需16μs(占32个读/写周期)。在刷新周期2ms内含4000个读/写周期,实际分配是前3968个周期用于读写操作或维持,后32个周期用于刷新。这种刷新方式缺点在于出现了访存“死区”,其占比例为32/4000×100%=0.8%,显然对高速高效的计算机系统工作是不利的。

集中刷新

  • 分散刷新

分散刷新是指对每行存储单元的刷新分散到每个读/写周期内完成。把存取周期分成两段,前半段用来读写或维持,后半段用来刷新。

分散刷新

  • 分散刷新与集中刷新相结合(异步刷新)

采用集中与分散相结合的方式,既克服出现“死区”,又充分利用最大刷新间隔为2ms的特点。例如,对于128×128的存储芯片,可采取在2ms内对128行各刷新一遍,即每隔15.6us刷新一行,而每行刷新的时间仍为读写周期0.5μs。这样,刷新一行只停止一个读/写周期即对每行来说,刷新时间仍为2ms,而“死区”缩短为0.5μs然而,我们何可以利用CPU对指令的译码阶段,即不访问主存的这段时间,安排动态RAM的刷新操作。这样,既不会出现集中刷新的“死区”问题,又解决了分散刷新独立占据0.5μs的读/写周期问题,因此,从根本上提高了整机的工作效率。

动态 RAM 和静态 RAM 的比较

目前,动态RAM的应用比静态RAM要广泛得多。其原因是:①在同样大小的芯片中,动态RAM的集成度远高于静态RAM,如动态RAM的基本单元电路为一个MOS管,静态RAM的基本单元电路为六个MOS管;②动态RAM行、列地址按先后顺序输送,减少了芯片引脚,封装尺寸也减少;③动态RAM的功耗仅为静态RAM的16;④动态RAM的价格仅为静态RA的1/4。因此,随着动态RAM容量不断扩大,速度不断提高,它被广泛应用于计算机的主存。

动态RAM也有缺点:①由于使用动态元件(电容),因此它的速度比静态RAM低;②动态RAM需要再生,故需配置再生电路,也需要消耗一部分功率。通常,容量不大的高速存储器大多用静态RAM实现。

3.2.4 存储器与CPU的连接

存储容量的扩展

1.位扩展

位扩展

2.字扩展

字扩展

3.同时扩展

位-字同时扩展

存储器与CPU的连接

1.地址线的连接

存储芯片容量不同,其地址线数也不同,而CPU的地址线数往往比存储芯片的地址线数要多。通常总是将CPU地址线的低位与存储芯片的地址线相连。CPU地址线的高位或作存储芯片扩充时用,或作其他用法,如作片选信号等

2.数据线的连接

CPU的数据线数与存储芯片的数据线数也不一定相等。此时,必须对存储芯片扩位,使其数据位数与CPU的数据线数相等。

3.读/写命令线的连接

CPU读/写命令线一般可直接与存储芯片的读/写控制端相连,通常高电平为读,低电平为写

4.片选线的连接

片选有效信号与CPU的访存控制信号MREQ(低电平有效)有关,因为只有当CPU要求访存时,才要求选择存储芯片。若CPU访问I/O,则MRFQ(低电平有效)为高,表示不要求存储器工作。此外,片选有效信号还和地址有关,因为CPU给出的存储单元地址的位数往往大于存储芯片的地址线数,故那些未与存储芯片连上的高位地址必须和访存控制信号共同作用,产生存储器的片选信号。

3.2.5 提高访存速度的措施

  • 采用高速器件
  • 采用层次结构 Cache –主存
  • 调整主存结构

调整主存结构

1.单体多字系统

由于程序和数据在存储体内是连续存放的,因此CPU访存取出的信息也是连续的,如果可以在一个存取周期内,从同一地址取出4条指令,然后再逐条将指令送至CPU执行,也即每隔四分之一存取周期,主存向CPU送一条指令,这样显然增大了存储器的带宽,提高了单体存储器的工作速度。

单体多字系统

2.多体并行系统

多体并行系统就是采用多体模块组成的存储器。每个模块有相同的容量和存取速度,各模块各自都有独立的地址寄存器、地址译码器、驱动电路和读写电路,它们能并行工作,又能交叉工作。

(1)高位交叉

图中地址顺序编码,程序按体内地址存放,一个体存满后,再存入下一个体。显然,高位地址可表示体号。按这种编址方式,只要合理调动,便可提高存储器的宽带。例如,当第一个体用以执行程序时,另一个体可用来与外部设备进行直接存储器访问,实现两个体并行工作。但是程序是顺序存储的可能会造成一个存储体频繁访问但其他存储体空闲。

高位交叉

(2)低位交叉

低位交叉地址横向编码,每个存储体低位不同,用来表示体号,高位地址为体内地址,可以均衡访问。

3.3 高速缓冲存储器

3.3.1 Cache 的工作原理

1.主存和缓存的编址

将主存储器和Cache分成大小相等的块,主存中一共有M个块,Cache中一共有C个块,其中$M\gg C$。主存和Cache编址都有块号和块内地址,块号用来标识主存或Cache中的哪一个块,块地址的位数决定了块的数量,m位地址表示有$2^{m}$个块。块内地址用来标识一个块内的地址,块内地址的位数决定了块内地址的大小,b位地址大小为$2^{b}$。

内存块和Cache块是大小相同的,所以块内地址位数相同。一个块在内存和Cache之间是整体传送的,块内字节的顺序不会发生变化,所以内存和Cache块内地址完全相同。

Cache标记标记了主存块和Cache块之间的对应关系,如果一个主存块调入到Cache中,就可以将主存块号写到标记中。如果CPU给出一个内存地址并希望在Cache中访问到这个数据,首先就要确定块是否送到Cache中,此时就可以用给出地址的主存块号和Cache标记中的块号做对比,如果和某个标记正好相等且此Cache块有效,这个块就保存了CPU要访问的内存中的信息,CPU可以直接从Cache中获取。

Cache-主存存储空间的基本结构

2.命中与未命中

  • CPU访问 Cache命中:一种是所需要的数已在缓存中,即可直接访问 Cache(CPU与 Cache之间通常一次传送一个字);
  • CPU访问 Cache不命中:所需的数不在 Cache内,此时需将该数所在的主存整个字块一次调入 Cache中。如果主存块已调入缓存块,则称该主存块与缓存块建立了对应关系。

3.Cache 的命中率

Cache的容量与块长是影响 Cache效率的重要因素,通常用“命中率”来衡量Cache的效率。命中率是指CPU要访问的信息已在 Cache内的比率,例如CPU访问数据$n_{1}$次在Cache中找到,$n_{2}$次在主存中找到,命中率为$\dfrac{n_{1}}{n_{1}+n_{2}}$。一般而言, Cache容量越大,其CPU的命中率就越高。当然也没必要太大,太大会增加成本,而且当Cahe容量达到一定值时,命中率已不因容量增大而有明显提高。一般选成本与容量折衷值。

4.Cache –主存系统的效率

效率 e 与 命中率 有关

\[e=\frac{访问Cache的时间}{平均访问时间}\times 100\%\]

设Cache命中率为h,访问Cache的时间为$t_{c}$,访问主存的时间为$t_{m}$

\[e=\frac{t_{c} }{h\times t_{c} +(1-h)\times t_{m}} \times 100\%\]

3.3.2 Cache的基本结构

Cache的基本结构

  • 主存Cache地址映射变换机构

它是将CPU送来的主存地址转换为 Cache地址。由于主存和 Cache的块大小相同,块内地址都是相对于块的起始地址的偏移量(即低位地址相同),因此地址变换主要是主存的块号(高位地址)与 Cache块号间的转换。而地址变换又与主存地址以什么样的函数关系映象到 Cache中(称作地址映象)有关。

如果转换后的 Cache块与CPU欲访向的主存块建立了对应关系,即已命中,则CPU可直接访问 Cache存储体。如果转换后的 Cache块与CPU欲访问的主存块未建立对应关系,即不命中。此刻CPU在访问主存时,不仅将该字从主存取出,同时将它所在的主存块一并调入 Cache,供CPU使用。当然此刻能将主存块调入 Cache内,也是由于 Cache原来处于未被装满的状态。反之,倘若 Cache原来已被装满,即已无法将主存块调入 Cache内时,就得采用替换策略。

  • Cache替换机构

当 Cache内容已满,无法接受来自主存块的信息时,就由 Cache内的替换机构按一定的替换算法来确定应从 Cache内移出哪个块返回主存,而把新的主存块调入 Cache。

3.3.3 Cache的读写操作

1.Cache读操作

Cache读操作

2.Cache写操作

Cache写操作需要保证主存和Cache数据的一致性

  • 写直达法(Write – through)

写操作时数据既写入Cache又写入主存。写操作时间就是访问主存的时间,Cache块退出时, 不需要对主存执行写操作,更新策略比较容易实现

  • 写回法(Write – back)

写操作时只把数据写入Cache而不写入主存。当Cache数据被替换出去时才写回主存,写操作时间就是访问 Cache 的时间, Cache块退出时,被替换的块需写回主存,增加了 Cache 的复杂性

  • 其他方法

信息只写入主存,同时将相应的 Cache块有效位置“0”,表明此 Cache块已失效,需要时从主存调入。还有一种可能,被修改的单元根本不在 Cache内,因此写操作只对主存进行。

3.3.4 Cache-主存的地址映射

1.直接映射

直接映射

直接映射按照Cache中块的数量分组,并对每个分组独立编号,将编号与Cache中的块一一映射。

CPU给出的地址被分为三块,块内地址、Cache块地址、主存字块标记。低b位作为块内地址,剩下的m位作为主存的块地址,在这里,m位块地址被分为两部分。c位作为Cache快地址,剩下m-c位作为主存块标记用来标记Cache中的块来自主存的那个分组。

直接映象方式的缺点是不够灵活,因每个主存块只能固定地对应某个缓存块,即使缓存内还空着许多位置也不能占用,使缓存的存储空间得不到充分的利用。此外,如果程序恰好要重复访问对应同一缓存位置的不同主存块,就要不停地进行替换,从而降低了命中率

2.全相联映射

全相联映射

全相联映象允许主存中每一字块映象到 Cache中的任何一块位置上。这种映象方式可以从已被占满的 Cache中替换出任一旧字块。显然,这种方式灵活,命中率也更高,缩小了块冲突率。与直接映象相比,它的主存字块标记从t位增加到t+c位,这就使 Cache“标记”的位数增多,而且访问Cache时需要和 Cache的全部“标记”位进行比较,才能判断出所访问主存地址的内容是否已在Cahe内。这种比较通常采用“按内容寻址”的相联存储器。

3.组相联映射

组相联映射

组相联映射包含了直接映射和全相联映射的思想,介于两者之间,当r=0时就变成了直接映射,当r=c时就变成了全映射,所不同的是:组相联映射首先把Cache块分为Q个组,每组中的Cache块数可以设置,这里以每组两个Cache块为例。将Cache中的分组编号,将主存中的字块按照Cache字块分组数进行分区,每个区包含Q个字块并按分组数编号,每个区的Q个块就和Cache中的字块分组按照序号形成了映射。

3.3.5 替换算法

1.先进先出 ( FIFO )算法

FIFO算法的原则总是将最先调入 Cache的字块替换出来,它不需要随时记录各字块的使用情况,所以容易实现、开锁小。但其缺点是可能把一些需要经常使用的程序(如循环程序)块也作为最早进入 Cache的块而被替换出去。

2.近期最少使用( LRU)算法

LRU算法是将近期最少使用的块替换出来。它需要随时记录 Cache中各个字块的使用情况,以便确定哪个字块是近期最少使用的字块。LRU算法的平均命中率比FIFO高,尤其是当分组容量加大时(组相联映象)更能提高LRU算法的命中率

3.4 辅助存储器

3.4.1 概述

  1. 特点 不直接与 CPU 交换信息
  2. 磁表面存储器的技术指标
    (1) 记录密度    道密度$D_{t}$位密度$D_{b}$
    (2) 存储容量    C = n × k × s
    (3) 平均寻址时间;    寻道时间 + 等待时间
    (4) 数据传输率     $D_{r} = D_{b} \times V$
    (5) 误码率      出错信息位数与读出信息的总位数之比

3.4.2 磁记录原理和记录方式

磁盘写

写入时,记录介质在磁头下方匀速通过,根据写入代码的要求,对写入线圈输入一定方向和大小的电流,使磁头导磁体磁化,产生一定方向和强度的磁场。由于磁头与磁层表面间距非常小,磁力线直接穿透到磁层表面,将对应磁头下方的微小区域磁化(叫作磁化单元)。可以根据写入驱动电流的不同方向使磁层表面被磁化的极性方向不同,以区别记录“0”或“1”。

磁盘读

读出时,记录介质在磁头下方匀速通过,磁头相对于一个个被读出的磁化单元作切割磁力线的运动,从而在磁头读线圈中产生感应电势e,且$e=-n\frac{\mathrm{d} \varphi }{\mathrm{d} t} $(n为读出线圈匝数),其方向正好和磁通的变化方向相反。由于原来磁化单元的剩磁通的方向不同,感应电势方向也不同,便可读出“1”或两种不同信息。

3.4.3 硬磁盘存储器

  1. 硬磁盘存储器的类型
    (1) 固定磁头和移动磁头
    (2) 可换盘和固定盘
  2. 硬磁盘存储器结构
    磁盘存储器结构
    (1) 磁盘驱动器
    磁盘驱动器
    (2) 磁盘控制器:磁盘控制器是主机与磁盘驱动器之间的接口
    • 接收主机发来的命令,转换成磁盘驱动器的控制命令
    • 实现主机和驱动器之间的数据格式转换
    • 控制磁盘驱动器读写