26考研 | 王道 | 计算机组成原理 | 三、存储系统

3.1 存储系统基本概念

image-20250601163809904

相联存储器的基本原理是指把存储单元所存的内容的某一部分作为检索项去检索该存储器,并把存储器中与该检索项符号的存储单元内容进行读出和写入。所以是按内容或者地址进行寻址的,价格比较昂贵

一般用来制作TLB,相联Cache等

存储器的层次化结构

image-20250601154010601

主存和辅存之间的数据调动是由硬件和操作系统共同完成的,仅对应用级程序员透明

存储器的分类–层次

image-20250601154320686

存储器的分类–存储介质

  • 半导体存储器:主存、Cache
  • 磁表面存储器:磁盘、磁带(以磁性材料存储信息)
  • 光存储器:光盘(以光介质存储信息)

image-20250601154402778

存储器的分类–存取方式

image-20250601154641494

相联存储器既可以按地址又可以按内容寻址。

存储器的分类–信息的可更改性

image-20250601154746479

CD-ROM是只读型光盘存储器,不属于只读存储器ROM

存储器的分类–信息的可保存性

image-20250601154850604

RAM都是易失性存储器;

ROM都是非易失性存储器;

存储器的性能指标

image-20250601163732877

3.2 主存储器

1. 主存储器的基本组成

image-20250601165951634

基本的半导体元件及原理

在这里插入图片描述

注:MOS管可理解为一种电控开关,输入电压达到某个阈值时,MOS管就可以接通。

存储器芯片的基本原理

image-20250601164552496

image-20250601164840269

image-20250601165149162

片选线作用:一个内存条可能包含多块存储芯片,比如一共8块,而我们想要的数据存在第5块芯片里面,那么我们拿数据的时候就要让第5块芯片工作而其他的不工作。CS给予低电平,其他芯片为高电平。

译码驱动:其实就是在译码器和存储矩阵中间加了一个驱动,让译码器传过来的电信号更加稳定的

image-20250601165640202

寻址

字节地址左移两位就是对应的字的地址

比如1号字节是 1,左移两位就是100,就是4,而按字寻址的编号2对应的就是字节寻址的编号4

2. SRAM与DRAM

image-20250601170332933

SDRAM依旧是DRAM,所以依旧要刷新的

1.DRAM和SRAM对比

3.2.1 的主存储器的基本组成部分就是那DRAM举例子的,可以回看一下

RAM属于易失性半导体,SRAM和DRAM区别在于是否需要动态刷新

image-20250601170434704

DRAM芯片:使用栅极电容存储信息

SRAM芯片:使用双稳态触发器存储信息

双稳态触发器这个图做个了解就行

image-20250601170908072

image-20250601170940974

image-20250601172524778

SDRAM是同步DRAM芯片,与传统的异步DRAM不同。SDRAM与CPU的数据交换同步与时钟信号,并且以CPU-主存总线的最高速度运行,而不需要等待插入状态

而传统的DRAM中,CPU将地址和控制信号送入存储器后,需要经过一段延迟时间数据才能读出或者写入。在此期间,CPU不断采样DRAM的完成信号,在读写完成前,CPU不能干别的,降低了CPU的执行速度

而SDRAM在系统时钟控制下进行数据的读出和写入,它将CPU发出的地址和控制信号锁存起来,经过指定的时钟周期后再响应,此时CPU可以执行别的操作

2.DRAM的刷新

image-20250601171147143

image-20250601171402480

为什么要用行列地址(二维)?而不是用行地址或者列地址(一维)?

如果是一维的话,加入地址线有20位,那就需要2^20^这么多个选通线才能连接到对应的存储单元

但如果是二维的话,即有行和列来确定一个存储单元,那行和列分别只需要2^10^个选通线即可

即可以减少选通线的数量,使得电路变得简单和清晰

image-20250601171739449

image-20250601172123184

分散刷新不存在死区,因为把刷新时间算到存取周期里面去了,所以存取周期会变长。

异步刷新虽然缩短了死时间,但是死时间依然存在

CPU可以在死区时间的时候去做运算(比如译码阶段),然后不是死区的时间来读写

一次完整的刷新过程只需要占用一个存取周期(书上P93页15题)

3.DRAM的地址线复用技术

image-20250601172347484

行/列缓冲器通常使用SRAM实现

同时送行列地址,需要8根地址线。两次送只需要4根地址线。

地址线复用技术:地址线是原来的1/2(行和列相等)且地址线分行、列两次传送。第一次送行地址到行地址缓冲器,第二次送列地址到列地址缓冲器,然后分别送到对应的译码器。

突发传输方式:在寻址阶段给出数据的首地址,在传输阶段可传送多个连续存储单元的数据

3. 只读存储器ROM

RAM和ROM可以统一编址。比如主存就是

image-20250601173735085

易失性说的是断电后数据会消失

EPROM不能作为随机存储器。

UVEPROM要擦除只能选择全部擦除或者不擦除,不能擦一部分剩下的不擦除

闪存存储元件由MOS管组成,是一种半导体存储器,采用随机访问方式,可替代计算机外部存储器

image-20250601173604671

image-20250601173630401

说主存不是光有内存条这个RAM,还有主板上的ROM芯片,也是主存的一部分

4.双端口RAM和多模块存储器

image-20250601202437306

单纯的扩容的意思是说,高位交叉编制没有加快访存的速度,即CPU在恢复时间内不能访问正在恢复的内存条的情况没有被改善,而低位却有效改善了这个问题,加快了访存速度

image-20250601173956007

image-20250601200007328

image-20250601200333877

image-20250601201003341

连续访问者五个地址的数,分别是编号0,1,2,3,4

对于高位编址来说,这五个数据都在M0内存条上,而读或写完一个数据以后就要等待恢复时间,所以花费的时间就长很多

而对于低位编址来说,0在M0,1在M1,2在M2,3在M3,4在M1。那我们花r的时间读完M0上面的0就可以立马去读M1上的1,而不需要等M0恢复,从而节省了很多的时间。

为什么讨论的是连续访问(连续地址)的情况?因为很多情况下就是访问连续的地址比如数组

image-20250601201618658

m=T/r的时候就是完美衔接,这个时候就是最好的情况,没有闲置也不用等待,而且存储体的个数也最少,成本就低

image-20250601202410484

对于灵活性来说,多体比单体好一些,比如读取,2,3,4,5这四个存储单元的数据

多体会直接读取这四个,而单体就会把第一行和第二行全给读下来,那么0,1,6,7这四个就是多读的,其实不太需要这四个

对于速度而言,两者相差不大

对于上面的多体,有m个存储体,而m=T/r的时候最好,在一个存取周期T内也是读出m个字

对于下面的单体,每个存储单元有m个字,在一个存取周期T内一次也是读出m个字

image-20250601203253718

相同主频:主频不一样的话,高的主频会向下兼容,和低的主频保持一致,这样其实就相当于白花了很多钱

相同容量:在两者容量相同的地方,还是双通道,但是在低容量没有了的地方,而高容量内存条还有内存的地方,那其实就相当于单通道了。用游戏来说的话,如果正好放在了低地址的地方,即双通道的地方,那运行速度就快,但是如果不巧被放到了高地址的地方,那就还是单通道,性能会很不稳定

如图:左边只有三个存储单元,右边有8个,就会出现上面的情况

image-20250601203656539

3.3 主存储器与CPU的连接

image-20250601211550983

image-20250601204050951

现在的计算机MAR、MDR都在CPU中,而不再主存中

8K*8位含义

8K是存储单元数量,是2^13^,需要13根地址线

8位是每个存储单元存储的bit位数

image-20250601204206712

image-20250601204446033

1.位扩展

image-20250601204934248

image-20250601205036480

2.字扩展

image-20250601205322533

用这种方法,CPU有n条多余的地址线,只能有n个片选信号

并且把两块芯片看做一个整体的话,那么开头的地址只能为01或者10,不能用00或者11

可以做如下的优化(译码片选法),就是在第二块的片选线上加个非门,这样的话地址空间就是连续的了,从全0到全1都可以用了

image-20250601205954293

image-20250601210246620

考试可能不选A13和A14这两个连着的,可能选A13和A15作为译码器的输入,那么A14是多少就无关紧要了

那么就会发现多出来了一倍的地址,全都映射到这四块芯片中了,而四块芯片肯定装不下,所以实际中不可能用这种设计

image-20250601210311001

image-20250601210553156

3.字位同时扩展

image-20250601210911202

一共四组芯片,一组2个芯片。

1.原来是一块芯片,16K*4位

2.位扩展得到每组的芯片个数,就是目标位数除以单个芯片的位数,8/4=2,所以每组是2个新盘

经过位扩展后,变成一组芯片,16K*8位

3.字扩展得到一共要几组,就是目标存储单元数量除以一组的单元数量,64K/16K=4,那么一共需要4组

经过字扩展后,把16K*8位变成64K*8位的

image-20250601211856723

image-20250601212032748

有3个使能信号,那么必须同时满足才可以工作,有一个不满足就不可以工作
也就是只有100才会正常工作,而其他的001,101之类的都是非法信号,会让所有的结果都为0,再取反那就都是1然后输出出去了

这样可以让CPU使用使能端控制片选信号的生效时间

image-20250601212414832

MREQ,低电平有效,主存请求信号, 当CPU想要访问主存的时候就会让它有效

它有效才会让译码器使能,也就是让译码器有效

CPU访存是这样的:

1.先发送出去地址信号,由于地址信号都是电信号,所以要先等一下让它稳定

2.等到地址信号稳定以后让MREQ有效,然后片选线才会有效

这样保证了主存收到的地址信号一定是稳定的

对于左下角的图,中间有上上下下的,那说明传过去的电信号有1有0,就是有高电平也有低电平

上面提到,发送出去地址信号以后会等一段时间。所以图中地址有效的时候CS并不是立马开始有效,而是中间间隔了一段时间才开始有效,这中间这段时间就是等待的时间。然后在地址有效时间Tco内把数据输出出去。

注:灰色的部分是无效的地方,白色的地方才是有效的地方

3.4 外部存储器

1. 磁盘存储器

image-20250602173738027

image-20250602170248404

image-20250602170448167

1、磁盘设备的组成

image-20250602170927901

2、磁盘的性能指标

image-20250602172157476

rN是一个理论最大值

image-20250602171459462

格式化容量会有一部分容量用于别的用途,而非格式化容量是该磁盘的二进制bit存储上限,所以格式化容量比非格式化容量要小

每个磁道记录信息的信息量是相同的,并不是圆的半径越大信息量越多

image-20250602172039873

磁盘控制器延迟:(有的题有,有的题没有)电子部件接收主机信号,然后向磁盘发出读写信号的时间

image-20250602172537266

如果数据是并行传给磁盘的,那在这之前还要经过一个串并行转换电路才行,因为磁盘只能串行的工作

磁盘阵列

image-20250602173626699

越后面的磁盘阵列信息冗余越少,安全性和可靠性越高,成本也越低

image-20250602173237775

RAID0:就是RAID0是一个逻辑盘,是通过磁盘1和磁盘2映射而来,比如RAID0的第一个存储单元的数据存放在磁盘1的第一个单元和磁盘2第一个单元,那我们读取逻辑盘的时候就相当于有两个磁盘同时为我们工作,可以实现并行访问,提高速度

但如果物理磁盘有比特跳变之类的错误的话,RAID0也发现不了

RAID1:存了两份一样的数据,那就是有冗余了,两份可以对比着看,有错误可以发现,所以是有校验的。也实现了并行访问,但是存储空间有些浪费

image-20250602173433649

0-3只存储比特数据,4-6存储校验数据

这样的话浪费的空间没有RAID1那么多

2. 固态硬盘SSD

image-20250602175002356

image-20250602174707438

image-20250602174135625

闪存芯片可以分为很多块,每个块可以分为很多页

每个块相当于磁盘中的磁道,每个页相当于磁盘中的块/扇区

也就是说SSD的读写的基本单位是页也不是块

image-20250602174945174

3.5 高速缓冲存储器

1.Cache里面存储的是主存的副本。所以如果Cache有40KB,主存有200MB

那存储系统的容量还是200MB,而不是200MB+40KB,因为Cache存的仅仅是副本而已

2.Cache访问失效的时候,通常不仅要像CPU传递消息,还要将信息写入Cache,传递消息的数据宽度是字,写入信息的数据宽度是块。

CPU与cache或者主存信息信息交互的单位是字,而Cache与主存间信息交互的单位是块

3.Cache的功能全部由硬件实现

4.多级cache中,算缺失率的时候,只需要看到最低一级的cache的时候还有多少没有命中

5.Cache中地址映射表的大小就是(有效位+标记位)*块数

6.逻辑地址的页和物理地址的块对应,映射的话就是逻辑的页映射到物理的块上面去

7.对于有高速缓存,主存,硬盘构成的三级存储体系,CPU直接根据主存物理地址进行访问

8.image-20250605201050911

标记位前面可能还有有效位、脏位、替换控制位,通过这四个位来算Cache除了数据部分还有得有多少的容量

不管什么方法都会有有效位,写回法一定会有脏a位。替换控制位很少见

9.组相联映射中,是几路组相联就有几个比较器。这个比较器是来看给出的主存地址具体在组内的哪个块

所以 比较器里面存的就是标记位(不包含组号),因为一组有 的块数和路数相同,所以比较器的个数就是和路数相同的,一共要比较的次数也和路数一样

1.基本原理

image-20250602211304010

image-20250602205157410

image-20250602210202690

按照行优先存储的,如果循环体按照列优先进行访问的话,那么会比按照行优先进行访问的慢很多,因为按照行优先会有很多地址可以映射到cache中

image-20250602210641791

image-20250602210823148

image-20250602211058779

image-20250602211220115

2.Cache和主存间的映射方式

image-20250602213029735

image-20250602212126065

image-20250602212416219

image-20250602212711225

其实就是主存容量是Cache的多少倍,如果主存容量是cache的4096=2^12^倍,那么标记位数就是 12

也就是得标记4096个位置才行

比如图中的标记位数就是 256MB/(8*64B)=2^19^次

有效位和标记位组成地址映射表,其大小就是(有效位数+标记位数)* cache块数

image-20250602212802971

image-20250602212923576

image-20250602213002984

3. Cache的替换算法

image-20250602214715709

image-20250602213420788

image-20250602213550902

image-20250602214014188

image-20250602214051651

image-20250602214125073

image-20250602214237061

image-20250602214305898

image-20250602214551003

4. Cache写策略

image-20250602224028486

image-20250602223356639

image-20250602223601159

image-20250602223515516

阻塞的意思是cpu必须阻塞等待

image-20250602223734924

image-20250602223805693

image-20250602223854440