万字长文!计算机组成原理【存储系统】

在这里插入图片描述

在这里插入图片描述

🌈个人主页:godspeed_lucip
🔥 系列专栏:计算机组成与原理基础



1 主存的模型、寻址

1.1 总览

1.2 存储器的层次化结构

image1

1.3 存储器的分类

1.3.1 按层次

image2

1.3.2 按照介质

(1)半导体存储器:主存、Cache
(2)以磁性材料存储信息(磁表面存储器)

1.3.3 按照访问方式

①随机存取存储器(RAM)
image3
②顺序存取存储器(SAM)
image4
③直接存取存储器
image5
其中,②和③在读写某个存储单元所需时间与存储单元的物理位置有关,可以归为串行访问存储器
④相联存储器
image6
它是按照内容检索,而之前的几种都是按照地址检索

1.3.4 按照信息的可更改性

image7

1.3.5 按照信息的可保存性

image8

1.4 存储器的性能指标

image9
存储周期的概念
image10

1.5 总结

2 主存储器的基本构成

2.1 总览

image1

2.2 基本的半导体元件

2.2.1 构成

image2
电容可以存储电荷,将电容有电荷视为1,无电荷视为0,mos管可以理解为一种电控开关,当输入电压达到某个阈值时,MOS管就可以接通

2.2.2 读出数据

假设现在电容状态为1,那么只要发出一个读出信号(MOS管接入一个阈值电压),MOS管接通,最右边检测到电流,于是认为二进制1被读出

2.2.3 写入数据

将元件右边的电路与MOS管都接入一个高电平,MOS管被接通同时电容上下两侧产生电压差,于是电荷开始移动,达到存储电荷的效果。于是二进制1被写入,同时将MOS管断开,这样电荷就跑不出去了。

2.2.4 示例

image3
将多个元件组合起来,图中红色的线连接了元件的MOS管,每个元件都存储了比特1或比特0。

图中的八个元件构成了一个存储单元(也就是一个存储字),图中的两个存储单元构成了一个存储体(存储矩阵)。

一次可以读出的字节代表了计算机的存储字长(MOS管被同时接通,所以存储单元是一次性被全部读出的,同时被读出、同时被写入),也被称为字

存储单元的字节数代表机器的存储字长,图中为八个比特,如果同时连接16个元件,则存储字长为16位。

注意字节(Byte)与字的区别。一个字节一定是八个比特,但是字在不同的计算机中可能是不同的。

2.2.5 对存储体的复习

image4
这几个元件就构成了主存,它们通过时序逻辑电路连接,如图。
image5

2.3 存储器芯片的基本原理

2.3.1 译码的原理

如何根据地址找到数据?
当CPU通过地址总线向MAR传送了地址,MAR将此地址输送到译码器,译码器根据地址决定要接通哪一条字选线(接通了存储单元的MOS管),比如图中地址000对应十进制的第0条字选线。字选线被接通后,通过数据线(图中绿色的线)将每一位的数据传送到MDR中,CPU再通过数据总线从MDR中读出数据。

此时也可以推断出数据总线的宽度与存储字长是相同的
image6
image7

2.3.2 控制电路

(1)控制信号传输
芯片数据传输是以电信号为媒介,在传输过程中难免会有损失,比如将地址信号传入到MAR中。此时控制电路在MAR中的信号稳定之后才会让MAR将地址传送给译码器。同样的,在数据输出时只有当MDR中的电信号稳定后才会控制MDR将输入传给数据总线
(2)对外提供接口
① 片选线。即选择哪块芯片进行工作。芯片选择(chip-select,CS),芯片使能(chip-enable,CE)
image8

②读写控制线。
1. 将读控制线、写控制线分开。当读控制线是低电平时说明此时应该进行读操作。
image9
2. 将读控制线、写控制线作为同一根线
image10

芯片的简单构成

image11

2.3.4 芯片的逻辑构成

image12
驱动器:保证译码器输出的电信号是稳定的

2.3.5 关于一个芯片有多少个引脚的题目

结合芯片的逻辑构成理解引脚。其中片选线、读/写控制线通常来说是固定的。只需求解地址线、数据线
image13

2.4 寻址

假设下图中字长为4B(一个存储单元有4个元件),且总容量为1KB(该存储体有1024个元件或256个字,地址线为2^10=1024,共10条地址线)。寻址方式有以下几种,如果是按字寻址,则1KB总共有256个单元,每个单元占4B。
image14

2.5 总结

image15

3 SRAM和DRAM

3.1 总览

image1

3.2 栅极电容、双稳态触发器

3.2.1 基本组成

image2

3.2.2 两者的不同

(1)栅极电容
image3
因为需要重写,所以读写速度更慢。且每个元件的面积较小,所以它的集成度高,结构简单所以成本低,功耗低

(2)双稳态触发器
image4
无须重写,所以读写速度更快。且每个元件的面积较大,所以它的集成度小,结构复杂所以成本高、功耗高

3.3 DRAM的刷新

3.3.1 原因

电容中的电荷即使不断电,在2ms内也会自动流失。而双稳态电路只要不断电其电荷就不会流失。所以在2ms内必须刷新电容,使其恢复之前的电荷

3.3.2 在刷新中为什么要使用行列地址?

(1)原因
在之前的介绍中,一个存储单元占一行,一行存储单元需要使用一根自选线,很容易使译码器上接入的线路过多。而如果使用行列地址,如下图所示,这样,当地址位数为20时,行地址译码器、列地址译码器只需要接入210根线。而如果不采用行列地址,则译码器要接入220根线。
image5

(2)根据地址寻找存储单元
假如地址码为00000000,则前四位0000作为行地址,后四位0000作为列地址,分别进行寻址,当行地址寻找到时其对应的选通线连通,当列地址寻找到时其对应的选通线连通,此时可以将该存储单元中的数据输出。

3.3.3 刷新的过程

(1)过程
以行为单位,每次刷新一行的存储单元,刷新是由硬件完成的,硬件在读出一行的信息后重新写入,占用一个读/写周期。
该过程是由存储器自动完成的,无须CPU的介入
(2)刷新的时间点
假设:
image6
①分散刷新
image7
②集中刷新
image8
③异步刷新
image9
可在CPU无须访问主存的时候进行刷新,比如译码阶段。集中刷新、异步刷新都是有”死时间“的

3.4 DRAM地址线的复用

正常来说行地址、列地址分别需要有行地址线、列地址线。也可以将它们和为一条线,并另外接一个地址缓冲器,第一次先将行地址送入,第二次再将列地址送入。如图
image10

这样做可以使地址线减半,同时芯片的引脚数也要减半

3.5 总结

SRAM常用作Cache,DRAM常用作主存。DRAM采用的是地址线复用技术,因此送行列地址只需要一次。
image11

4 只读存储器ROM

4.1 总览

image1

4.2 各种ROM

image2
注意:虽然闪存既可以读也可以写,但是它还是属于ROM

4.3 计算机内部重要的ROM

计算机主机的结构如图所示
image3
在关机后,主存中RAM的数据全部被清除,那么如果不采取其他措施,CPU就无法读取指令。

操作系统实际上是安装在辅存中,CPU需要读取主板上BIOS(属于ROM)芯片上的“自举装入程序”,它负责引导操作系统的装入(开机)。

逻辑上,我们应该将主存视为RAM+ROM的组成。CPU将二者统一编码,比如说,ROM占1KB,则ROM存储单元编号为1-1023,而RAM存储单元的编号起始位为1024。

4.4 总结

image4
ROM也具有“随机存取”的特点

5 主存储器与CPU的连接

5.1 总览

image1

5.2 芯片输入输出信号的常用缩写

image2

字扩展:字扩展就是要增加存储字的数量
位扩展:增大数据的范围

5.3 位扩展

5.3.1 单块芯片的连接

image3

5.3.2 两块芯片的位扩展

image4

5.3.3 多块芯片的位扩展

image5

5.4 字拓展

5.4.1 译码器片选法

(1)两块芯片的字拓展
image6
与之前一样,两块芯片接入同样的电信号、同时并联接入数据总线,这就要求同一时间只有一块芯片可以工作,使用A13位控制芯片的片选信号(称为1-2译码器)。这样,可表示地址范围从212变为213。

(2)多块芯片的字扩展
使用上文的思路,只要片选信号足够多,就可以连接多块芯片(由1-2译码器变为2-4译码器、3-8译码器)
image7
如图所示的电路,地址范围由一块芯片的213变为215

5.4.2 线选法

(1)基本思路与译码器片选法一致,但是它不是采用译码器。假设有两块芯片,则A13、A14直接与芯片连接,可想而知,只有当A13、A14位01或10时芯片才单独工作,输出的信号才有效。这样就使地址空间不连续。而采用译码器片选法得到的地址空间是连续的。

5.5 字位同时扩展

image8

5.6 总结

image9

5.7 关于译码器的补充

image10
一般来说,CPU与主存之间是如此连接的,CPU在将地址电信号发出后,会等信号稳定后再发出主存请求信号,译码器才工作,这样主存得到的就是一个稳定的信号。

6 双口RAM与多模块存储器

6.1 知识总览

image1

6.2 双端口RAM

6.2.1 示意图

image2
它的作用是优化多核CPU访问一根内存条的速度。同时它需要两组完全独立的数据线、地址线、控制线。CPU、RAM中也要有更复杂的控制电路。

6.2.2 访问情况

image3
解决办法:
image4

6.3 多体并行器

1. 假设电脑中有四个内存条,每个内存条中有八个存储单元。在给存储单元编号时,可以先将内存条编号,再将存储单元编号。有高位交叉编址及低位交叉编址。如图所示。
image5

2. 将各存储单元的编号写为十进制,分别为
高位编址:

081624
191725
7152331

低位编址:

0123
4567
28293031

6.3.1 访问时间

(1)我们知道,主存在一次读写操作后(假设时间为r),需要一定时间进行恢复(一般较长,这里假设为3r)。
(2)当使用高位交叉编址时,CPU按序访问主存,由于0-8号存储单元连续的分布在一条主存内,则每访问一个存储单元都要花费4r的时间,如图所示
image6
(3)当使用低位交叉编址时,CPU按序访问主存,由于0-4号存储单元是一次分布在M0-M4中,读写操作完成后主存立即进行恢复(这个操作无须CPU介入)。所以当访问完第4个存储单元后,第1个存储单元已经恢复并可以立即访问,如图所示。
image7
可以看出低位编址的性能大大超过高位编址
(4)可以看出,
image8

6.4 多模块存储器

分为多体并行存储器、单体多字存储器
image9
可以看出,单体多字存储器的灵活性较差,特别是当目的数据不是连续的4个单元时,单体存储器会读入较多的无用数据。

6.5 总结

image10

7 外存储器

7.1 总览

image1

7.2 磁盘存储器

7.2.1 磁盘设备的组成

image2
此外,一个盘面的正面、反面都可以进行读写,如图
image3

7.2.2 磁盘的性能指标

(1)磁盘容量与记录密度
image4
有一点要注意到:不同磁道所能记录的比特位数是一定的。
(2)平均存取时间
image5
有时候还需要考虑磁盘控制器发出命令的延迟时间
(3)数据传输率
image6

7.2.3 磁盘的地址

image7

7.2.4 磁盘的工作过程

image8移位磁盘是串行工作的,所以在CPU使用磁盘时一定要添加一个并-串交换电路

7.3 磁盘阵列

7.3.1 解释

使用某些手段将磁盘组成磁盘阵列,再结合相应的算法与机制提高磁盘的访问速度、安全性等等。
image9

7.3.2 分类

(1)RAID0:无冗余和无校验的磁盘阵列
无校验:无法得知读出的数据是否出错
无冗余:无法保证磁盘上的数据不会丢失
多个磁盘连接在一起:不同磁盘的读写速度不一样,而访问磁盘一般来说是要访问多个连续的数据,联系“低位交叉编址”,这样做可以提高访问速度
image10

(2)RAID1:镜像磁盘阵列
镜像:相同的数据存两份
有冗余:备份了一份数据
有校验:只需查看两个磁盘相同位置上的数据是否一致就可以判断书是否发送错误
image11

(3)RAID2:采用纠错的海明码的磁盘阵列
纠错:即使一个磁盘发送损坏,也可以根据海明码进行恢复
image12
(4)RAID3:位交叉奇偶校验的磁盘阵列
(5)RAID4:块交叉奇偶校验的磁盘阵列
(6)RAID5:无独立校验的奇偶校验磁盘阵列
4、5、6不做介绍,它们都与RAID2类似,但是磁盘的可靠性是越来越高
(7)注意:
image13

7.4 总结

image14

8 固态硬盘

8.1 总览

image1

8.2 硬盘的结构

image2
对于磁盘而言,I/O总线发出的读/写逻辑块号应该包括磁盘号、扇区号等。而对于固态硬盘,其块对应磁盘的磁道,块中包含了许多页,这些页与扇区对应(一个磁道包含了很多扇区)。
需要注意的是,固态硬盘在进行读取时是以“页”为基本单位。

8.3 读写特性

1. 如果只需要对一个块中某个页的数据进行修改,那么SSD会首先将这一块的数据全部复制到另外一个块中,此时SSD还会改变这些数据的逻辑映射。接着,SSD擦除该块的数据重新写入

2. 在访问数据时,相比于磁盘每次移动机器臂、定位磁道的操作,SSD可以根据电路直接进行访问,具有随机访问的特点

8.4 磨损均衡

1. 当SSD中某个块的擦写次数过多时,可以将该块的数据迁移到其他快,并改变该数据的逻辑映射,即可。(较为方便)

9 Cache概述

9.1 局部性原理

9.1.1 空间局部性

(1)解释
image1
(2)说明
比如说一个数组,当我们访问a[0][0]时,其接下来的a[0][1]、a[0][2]也很有可能被接着访问,这就是局部性原理
image2
而对于指令也是一样,一个程序中的指令通常是被顺序存放的,CPU访问了一条指令后,对于其周围的指令是很有可能接着去访问的

9.1.2 时间局部性

(1)解释
image3
(2)说明
对于一条循环指令来说(for(int i=1,i<10,i++)),i=1的加法,在未来的i=2的时候也要用到。这就是时间局部性

3. 基于局部性原理,可以将CPU目前访问的地址“周围”的部分数据放进Cache中,这样可以大幅提升CPU的运行速度

9.2 性能指标

9.2.1 解释

image4
上述的命中率是CPU分别在Cache、主存中找数据的情况,CPU也可以同时在Cache、主存中寻找数据,此时的平均访问时间就是
image5

9.2.2 例题

image6

9.2.3 待解决的问题

Cache是取目前访问的地址的“周围”的数据,那么如何界定周围?
image7
image8
注意:
image9

9.3 知识总结

image10

10 Cache与主存的映射

10.1 知识总览

解决Cache与主存的数据块的对应关系的问题image1

10.2 全相联映射(随便放)

10.2.1 要点

(1)主存块可以放在Cache的任何一块上
(2)Cache中的每块都设置了一个标记位记录该主存块的地址,对于未存放数据的Cache块标记位已全0展示
(3)但是地址位为全0的主存块实际上是有资源的,所以还需要设置一个有效位(1代表有数据,0代表无数据)

10.2.2 CPU访问主存

(1)前提:主存地址空间为256MB,每块行长为64kb,则:

image2
假设CPU访问地址为:1…1101 001110
image3

10.3 直接映射(只可以放在固定位置)

10.3.1 要点

(1)使主存地址对Cache内存块个数取余,得到的数字就是该主存块应该存放的Cache块编号
image4
(2)设置了标记位与有效位,与全相联映射一致。

10.3.2 改进

考虑到该方法需要将主存地址对Cache总块数取余,即地址的后三位实际上对应的是Cache块的编号,那么在Cache的标记位上,可以直接截取主存地址的前19位,因为后3位分别为000-111。
image5

10.3.3 缺点

对于一个特定的主存块来说,假如其对应的Cache内存块没有空间,那么即使其他Cache块有空间,该主存块也不可以放到有空间的Cache块中去。

10.3.4 CPU访存

image6

10.4 组相联映射(可放到特定分组)

10.4.1 要点

(1)将Cache块分组,主存块需要对组数进行取余,根据结果决定改主存块要放在那个Cache块组中。
(2)设定标记位与有效位
(3)标记位的改进方法与直接映射类似,对于一个块数为8的Cache,对地址位为22位的主存地址只需要保存前20位就可以了。(222/22)

10.4.2 CPU的访存

image7

10.5 总结

11 Cache替换算法

11.1 总览

image1

11.2 随机算法(RAND)

11.2.1 解释

image2

11.2.2 缺点

image3

11.2.3 优点

实现简单,原理简单

11.2.4 示例

image4
注意:当CPU在Cache中未访问到目标数据而去主存寻找时,找到的数据要立即放入Cache中去

11.3 先进先出(FIFO)

11.3.1 解释

image5

11.3.2 实例

image6

11.3.3 优点

image7

11.3.4 缺点

image8
且容易出现抖动现象
image9

11.4 近期最少使用算法(LRU)

11.4.1 解释

image10
image11
对于第一条,我们当然也可以使其加1,但是不加1其实也可以达到效果。

11.4.2 实例

image12

11.5 最不经常使用算法(LFU)

11.5.1 解释

image13

11.5.2 实例

image14

11.5.3 缺点

image15

11.6 总结

image16
LRU的Cache的命中率最大,效果最好

12 Cache写策略

12.1 总览

image1

12.2 写命中

解释

CPU要对一个地址进行写操作,而且这个地址已经被调入了Cache,发生了命中的情况

12.2.1 写回法

  1. 解释

image2
这样做避免了每次写都将数据写回主存,节省了一些写的时间

  1. 注意

为了让CPU知道Cache是否发生了写操作,还需要对每个Cache块增加一个“脏位”,该位数值为1代表已经修改,为0代表没有修改

  1. 示意图

image3

缺点

存在数据不一致的隐患

12.2.2 全写法

  1. 解释

image4

  1. 注意

为了增加CPU将数据写入主存的速度,可以增加一个由SRAM(速度较快)实现的缓冲队列,CPU先将数据放入缓冲队列,当CPU暂时不再进行写操作时,缓冲队列在专门的控制电路下将数据写入主存

  1. 示意图

image5

  1. 缺点

image6

12.3 写不命中

12.3.1 解释

当CPU需要对一个地址进行写操作,且这个数据不在Cache中的时候,CPU回将数据调入Cache中

12.3.2 写分配法

  1. 解释
    image7

  2. 示意图
    image8

12.3.3 非写分配法

  1. 解释
    image9

  2. 也就是说,当不命中时,CPU对某个地址进行写操作时不讲数据调入Cache,只有在进行读操作时才将数据调入Cache。因为具备全写法中直接对主存进行修改的特性,所以通常搭配全写法使用

  3. 示意图
    image10

12.4 多级Cache

12.4.1 解释

image11

12.4.2 注意

低级Cache中保存的是主存的副本,而高级Cache保存的是低级Cache的副本,所以多级Cache中也存在数据同步的问题。一般来说:
image12

12.5 总结

image13

13 页式存储器

13.1 虚地址与实地址

1. 假设有一个大小为4kb的应用程序,主存大小为4MB,每块的大小为1KB,则在实际的存储过程中,4KB的应用程序被分成4页,每页大小为1KB,离散的分布在实际存储空间中。
image1

2. 我们使用2bit表示页的序号,即00、01、10、11表示第1、2、3、4个页。使用10位bit表示程序的页内地址(2^10 = 1KB).则每一个变量都可以使用这12位地址表示。
image2

3. 对于管理员来说,该程序的地址组成是这样的:
image3
这是一个逻辑地址,因为实际的物理地址往往不是这样,如图
image4
但是对于管理员来说,记住物理地址是很苦难的,所以呈现在管理员面前的都是逻辑地址,比如说进行以下操作
image5
使用的就是逻辑地址,这样更加方便。

4. CPU在执行机器指令时,使用的是“逻辑地址”,此时我们就需要一个逻辑地址与物理地址的对应关系,页表就实现了这样的功能。它的作用是记录每个逻辑页面存放在哪些主存块中。
image6

13.2 地址的变换过程

13.2.1 示意图

image7
注意到页表在计算机中是存储在主存中的,并且使用DRAM实现,所以访问速度较慢。

13.2.2 注意

我们知道程序的执行具有很强的局部性,即:一个被访问的变量在接下来很有可能会再次被访问。因此可以将被访问的变量放入一个类似于Cache的速度更快的存储表中,这就是快表(TLB),它使用SRAM实现,速度更快。此时的地址变换过程如图所示
image8
由此可知,TLB与Cache的作用其实类似,TLB也会遇到空间满的问题,采取的替换方式与Cache类似。

13.3 知识总结

image9

14 总结

计算机组成原理如一座精密的交响乐团,微观中展现着电子的舞蹈,宏观中奏响着科技的交响曲。

它拆解复杂问题为简单指令,通过微处理器的默契协作,创造出无尽可能。

存储单元如记忆的灯塔,指引信息的航程。

总线是信息的大道,连接着各个功能模块,使计算机成为无比高效的智慧之器。

在计算机组成原理的魔法指导下,世界逐渐变得更加智能、便捷、创新。

渴望挑战计算机组成与原理的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多CO的奇迹吧。我们推出了引领趋势的💻CO专栏:《计算机组成原理基础》 ,旨在深度探索CO的实际应用和创新。🌐🔍

在这里插入图片描述

在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值