本系列文章为哈尔滨工业大学刘宏伟计算机组成原理学习笔记,前面的系列文章链接如下:
计算机组成原理:P1-计算机系统概述
计算机组成原理:P2-系统总线
计算机组成原理:P3-存储器(上)
计算机组成原理:P4-存储器(中)
文章目录
一、高速缓冲存储器(Cache)
1.1 Cache概述
为什么需要高速缓冲存储器
CPU的速度比存储器的速度快很多,而CPU执行程序时要对存储器进行数据、指令等信息的读取和写入,这就导致了不管CPU速度有多快都只能空等。因此,在主存和CPU之间加上一个Cache,存放经常要读写的数据和指令。对于哪些是经常要使用的数据和指令,这就涉及程序结构设计中的程序访问的局部性原理。
程序访问的局部性原理
时间的局部性:
当前正在使用的数据和指令在不久的将来还会被使用到,我们就应该将它们放到Cache中去
空间的局部性:
当前正在使用的数据和指令在不久的将来,相邻的指令和数据就可能会被用到,我们就将它们和相邻的数据与指令放到Cache中去
数据交换单位:
Cache和主存之间数据交换的单位是块,这个块既包括了正在使用的数据和指令,也包括了相邻的指令和数据。块的大小要通过实验的方式来确定
1.2 Cache的工作原理
主存和缓存的编址
左边是主存,将其划分为M个块。右边是Cache,将其划分为C个块,C远小于M。
主存:
当我们将主存分成若干块后,CPU给出的内存地址可以分成两部分,一部分是块内偏移地址,它的位数决定了块的大小。比如说一个块包含了16个字节,并且内存的编址单位是字节,那么块内地址部分就是4位。剩余的部分就是主存的块编号。
Cache:
Cache的地址也分成了块内地址和缓存块号,但是在实际应用中,Cache的地址意义不大,也不需要真正形成Cache的地址。Cache中还有标号,标记了主存块和Cache块之间的对应关系。当主存将块送入到Cache中时,就可以把主存块号写到标记中。将来CPU给出一个内存地址,希望在Cache中访问到这个数据,首先要确定这个块是否已经被送到Cache中,于是就将主存块号和Cache中的标记进行对比。如果对比成功且这个块是有效的,就可以直接获取这些信息,速度就得到极大的提高。
注:
主存和缓存按块存储和传输,块的大小相同,块内地址也完全一样不需要任何转化。
命中和未命中
缓存共有
CC
C
块,主存共有
MM
M
块,
M>
>
C
M >> C
M
>
>
C
。所以不是每次CPU到主存中访问的数据都能在Cache中找到,这就引出了命中和未命中的概念。
在CPU访问主存时,如果要访问的块已经放到了Cache中,我们就称为命中,主存块和缓存块就建立了联系,用标记记录与某缓存块建立了对应关系的主存块号。反之,如果没有放到Cache中并必须去主存中获取数据,就叫未命中
命中率
计算方式
:我们用命中率来评测命中指标,命中率就是CPU欲访问的信息在Cache中的比率。比如访问Cache 40次,访问主存10次,那么命中率就是40/(40+10)=80%。
影响因素
:命中率与许多因素有关,我们主要讨论Cache的容量与块长这两个因素。
—-不难理解,如果Cache容量足够大,和主存大小相等,那么可能第一次要访问的数据没在Cache中,以后访问的所有数据都会被命中。
—-块的长度过小的话,我们把一个块取到Cache中,计算机没执行几条指令这个块里的信息就被用光了,Cache还要从内存中将下一个块取出来,这就没有充分利用程序的局部性原理。块太大也不行,因为Cache大小是有限的,块太大说明Cache中容纳的块的个数就太少。在程序执行过程中,可能一个很大的块里面只有部分信息是有用的,以后需要有用的信息又要去内存中取,这也会影响Cache的命中率。
实际情况:
一般来说,Cache块的大小取4~8个字,实际上块的大小和一个存取周期内从主存调出的信息长度是有关系的。
CRAY_1 16体交叉 块长取 16 个存储字
IBM 370/168 4体交叉 块长取 4 个存储字
Cache-主存系统的效率
Cache-主存系统的效率又叫Cache和主存访问效率,用
ee
e
来表示,与命中率有关。
CPU对主存的访问命中时是从Cache中取到数据和指令,不命中时是从主存中取到数据和指令,平均访问时间就是平均CPU取到一次指令和数据的时间。设Cache命中率为
hh
h
,访问Cache的时间为
tc
t_c
t
c
,访问主存的时间为
tm
t_m
t
m
ee
e
的最小值:命中率为0,结果为
tc
/
t
m
t_c/t_m
t
c
/
t
m
ee
e
的最大值:命中率为1,结果为
11
1
1.3 Cache的基本结构
Cache的基本结构
Cache的使用流程
:CPU要访问内存,通过地址总线给出地址,这个地址包括块号和块内地址。由于Cache和主存都采用块进行存储,于是块内地址就直接送到Cache中去。然后将块号送到主存Cache地址映射变换机构,确认是否命中。如果命中,给出当前块保存在Cache中哪个块内。如果没有命中,就去查看Cache中是否还有空间装入这个主存块。如果有,访问主存块,将其放入Cache中。如果没有,Cache替换机构决定哪一块需要退回到主存中,然后将主存中我们要使用的这一块放到Cache中去。
其中
:
—-主存Cache地址映射变换机构有两个功能:①地址映射。实际上就是一个规则,规定了主存中的一个块如果要放到Cache中,它可以放到Cache中的哪些块中。②变换。实际上就是把主存的块号转换成相应的Cache块号。
—-在主存和Cache中有一条直接通路,完成信息交换。
—-发生未命中时,主存先将CPU需要的数据指令通过数据总线送到CPU去,然后再通过直接通路送到Cache中去。
1.4 Cache的读写操作
读操作
读操作的流程图如下。CPU发出访问地址,由主存Cache地址映射变换机构来确定是否命中。如果命中,从Cache中直接取出信息送到CPU去。如果没有命中,有两条路需要走。其一是将相应信息从主存取出来送到CPU,其二是看Cache是否满,如果满了,就启用替换算法,腾出一个块,让这个主存块放进去,如果没满就直接将主存块放进去。
写操作
Cache是内存中某些块的缓存,Cache中有的信息再内存中也有。读操作不对Cache中任何信息进行修改,主存和Cache信息保持一致。写操作会造成Cache和主存信息不一致,比如只对Cache写,不对主存写。
①
写直达法(Write–through)
写操作时数据既写入Cache又写入主存,写操作时间就是访问主存的时间。
优点:这种策略保证主存和Cache数据一致,所以当Cache块退出时,不需要对主存执行写操作,更新策略比较容易实现。
缺点:可能会导致CPU对同一个内存单元进行反复写。比如说我们执行一个求和程序,这个和保存在某一个内存单元中。执行过程中可能要多次对这个和进行累加,每次累加都要访问相同的存储单元,造成Cache和内存频繁的信息交互。
②
写回法(Write–back)
写回法允许在一段时间中,Cache内容和主存内容不一致。CPU对某一个内存单元执行写操作时,如果内存单元所在的块已经被取入到Cache中,它就只对Cache进行写,对内存内容不进行更新,直到这个Cache块退出Cache后才对内存进行写操作。写操作时间就是访问Cache的时间。Cache块退出时,被替换的块需写回主存,增加了Cache 的复杂性。这种方法保证不了主存和Cache数据的实时一致性。对于一些多处理器的计算机,每个处理器都有自己的Cache,内存的一个块在各个处理器的Cache中都有副本,这就会导致各个副本间的一致性问题。
1.5 Cache的改进
①
增加Cache的级数
—-可以将一些离CPU近的Cache直接做到CPU内,形成片载(片内)Cache
—-在CPU外部的主板上增加一些大容量的片外Cache
现代处理器都是多核的,每一个核都有自己的Cache,多个核也还有共用的Cache.
②
统一缓存和分立缓存
冯诺依曼结构是将数据和指令以同等的方式保存在存储器中。如果将数据和指令统一放到Cache中,就叫统一缓存。现代计算机有时候将指令Cache和数据Cache分开,这个与指令执行的控制方式有关。对于流水线的机器就将指令Cache和数据Cache分开,避免在流水过程中造成资源冲突。
Pentium(奔腾) 8K 指令 Cache 8K 数据 Cache
PowerPC620 32K 指令 Cache 32K 数据 Cache
二、Cache – 主存的地址映射
所以地址映射就是主存中的任意一块如果要加载到Cache中,可以加载到Cache中的哪些块。根据映射方法不同,可以分为直接映射、全相联映射、组相联映射。
2.1 直接相联映射
直接相联映射
:主存中任意一个给定块只能装载到某一个指定的Cache块中。
操作流程:
拿Cache作为一个尺子去度量主存,将主存划分为若干个与Cache容量相等的区域。这样每个区域中的字块编号时都可以从0开始编起,一直编到
2c
−
1
2^c-1
2
c
−
1
。这样主存中任何区域的第0块只能放到Cache存储体字块0中、任何区域的第1块只能放到Cache存储体字块1中
…
当CPU给出地址时,就分成三部分:区域号+块号+块内偏移地址。除此之外,由于Cache的第0块装载的可能是主存中任何一个区域的第0块,所以我们要将区域号写到每个Cache字块前面的标记中。主存给出了一个地址,我们要确认这个地址所在的区域相应的块是否已经被加载到Cache,根据这个块号我们就可以找到如果这个块已经被加载到Cache中了,那么它一定在一个给定的Cache字块中,我们可以直接定位到这个字块。最后对比主存中这个字块的区域号和Cache中这个字块的区域号,如果相同就命中。
优点:
这种映射方式结构非常简单,速度也快。
缺点:
Cache利用率可能会很低,Cache块进行调入时冲突的概率很大。比如说,假如第0区域的第0块已经被调入Cache中,Cache第0块的标记位就是0,Cache第1到第c块都是空的。在程序执行过程中,如果发生程序指令跳转或者需要读入数据,要用到主存
2c
2^c
2
c
这个块,也就是第1个区域的第0块,需要将其调入Cache。那么只能将其调入Cache的第0块,尽管其它块都是空的。那么第0区域的第0块就只能从Cache中退出
2.2 全相联映射
全相联映射
:主存中任何一个块可以被放入Cache中任何一个块的位置,只要Cache还有空隙位置
操作流程
:CPU要访问一个主存地址,首先要确认对应的主存块是否被调入Cache中。如果已经调入,它可能在Cache中任意一个块中,所以主存地址前面部分的主存字块标记要和Cache中所有字块的标记进行对比。如果有相等,就命中,否则就没命中,就有可能发生替换操作。
优点:
Cache的利用率高
缺点:
①这个比较时需要同时进行,电路比较复杂,速度较慢②参加比较的位数也比较长,Cache每个字块相应的标记都要保存区域号和块号,共t+c位,比较器长度较长。
2.3 组相联映射
组相联映射:
将Cache的块分成若干个组,每个组可以包含2、4、8、16…块。
操作流程:
具体做法与直接相联映射相似,把主存储器中的字块也进行分区,每个区的大小和Cache中的组数相等。即Cache被分成了多少组,主存储器的每个区就包含了多少个块。主存中每个区的第0块可以放到Cache中第0组的任何地方。
优点:
和直接相联映射相比,一个块有多个位置,即使其中一个位置被占用,另外的位置是空的也可以放进去。和全相联相比,如果找某一个内存块是否被调入到Cache中,我们只需要确定它的区号,然后去对应的组比较那几个块的标记。
总结:
i=
j
%
Q
i = j\%Q
i
=
j
%
Q
,某一主存块
jj
j
按模
QQ
Q
映射到缓存的第
ii
i
组中的任一块
2.4 总结与应用
总结
直接:某一主存块只能固定映射到某一缓存块(不灵活)
全相联:某一主存块能映射到任一缓存块(成本高)
组相联:某一主存块只能映射到某一缓存组中的任一块(折中)
应用
①靠近CPU的地方,我们要求Cache是高速度,在这一层次就可以采用直接相联或者路数较少的组相联。
②中间的一些层次可以采用组相联的层次,如2路、4路、8路组相联
③距离CPU最远的那些Cache层次可以采用全相联的方式,因为对速度要求就较低,对利用率要求较高
三、替换算法
前面介绍了Cache的映射,给出了一个内存块被放入Cache可以放入到哪些位置。如果发现所有可以放入的地方都满了,必须有一个位置的字块被替换出来,让我们需要的内存块放进去。相应的替换算法常常有以下两种:
①
先进先出(FIFO)算法
最先被放入Cache中的那个块它的内容可能被CPU用完了,或者在不久的将来不会用这个块,就让这个块被替换出去。但是这个算法是有问题的,比如说我们看书,大量的书籍我们放在书房,这相当于计算机的内存。有一些常看的书就放在床头柜,这个柜子的容量是有限的,它就相当于我们的Cache。比如说我们看一本书,刚好不在床头柜,于是去书房拿过来放入床头柜。而床头柜已经满了,按照FIFO算法,最早被放入的书被替换,但是可能这本书可能是你很喜欢的书,不久的将来你又会用。
②
近期最少使用(LRU)算法
认为在最近一段时间内使用最少的块将来可能不用或隔很久采用,这就比较好的体现了程序的局部性原理。
四、辅助存储器
4.1 概述
辅助存储器知识用来存储数据,不直接与CPU交换信息。当需要这些数据时,需要将数据送入到主存中。最常用的存储器就是磁表面存储器,它的技术指标有下面这些:
①记录密度:包括道密度
Dt
D_t
D
t
(磁盘镜像方向上单位长度上有多少个磁道)和位密度
Db
D_b
D
b
(单位长度的磁道保存了多少位二进制信息)。
②存储容量:
C=
n
×
k
×
s
C = n × k × s
C
=
n
×
k
×
s
(
nn
n
、
kk
k
、
ss
s
分别为盘面、磁道、二进制信息位数)
③平均寻址时间:寻道时间 + 等待时间。辅存的速度等于寻址时间加磁头读写时间。
④数据传输率:
Dr
=
D
b
×
V
D_r = D_b × V
D
r
=
D
b
×
V
(
VV
V
是旋转速度)
⑤误码率:出错信息位数与读出信息的总位数之比
4.2 磁记录原理和记录方式
写操作
在写线圈同上不同方向的电流,铁芯内部就会产生不同方向的磁通,就会对磁层表面进行磁化。磁化方向不同就可以区分写入0还是1。
读操作
前面写操作已经将磁层进行了磁化,在读的过程中,磁层是在运动的,硬盘是在旋转的,下面的磁场经过读写头就能切割磁场线,在读线圈产生电流。磁通发生变化,电势就发生变化,根据电势的变化,就能确定保存的是0还是1
4.3 硬磁盘存储器
硬磁盘存储器的类型
①固定磁头和移动磁头(从磁头是否旋转来划分):固定磁头将磁头进行固定,盘片旋转,这样的话每个磁道都需要一个磁头,磁头数量就很庞大,这种盘的速度很快,但是结构复杂。移动磁头就是每个盘面上有个磁头,磁头可以沿着磁盘的镜像进行移动。
②可换盘和固定盘(从硬盘盘片是否可更换):常用的是固定盘,因为一旦盘片取出沾上灰尘就报废了。
硬磁盘存储器结构
磁盘驱动器
信息表存在磁盘组,固定在一个主轴上,下面有一个传动机构。传动机构带动主轴带动磁盘组上各个盘面旋转。磁盘的表面是磁头,一旦磁盘高速旋转起来,磁头就会悬浮在磁头表面,磁头可以沿着磁盘的镜像进行移动,移动是由读写臂右半边的小车来控制的。小车的移动推动磁头在磁盘表面进行移动,小车由音圈电机来控制。磁盘控制器会送来目标磁道的信息,控制磁头到底该移动到哪个磁道。音圈电机还会测量小车的移动速度送回到控制端,同时对读写头也有位置的控制。
磁盘控制器
①接收主机发来的命令,转换成磁盘驱动器的控制命令
②实现主机和驱动器之间的数据格式转换
③控制磁盘驱动器读写
总结:磁盘控制器是主机与磁盘驱动器之间的接口。对主机通过总线进行连接,对硬盘直接进行控制
盘片
由硬质铝合金材料制成
4.4 软磁盘存储器
软盘由于容易损、速度慢等原因已经退出了市场,现在已经买不到了。
软盘片
4.5 光盘存储器
概述
采用光存储技术—-利用激光写入和读出
第一代光存储技术—-采用非磁性介质—-不可擦写
第二代光存储技术—-采用磁性介质—-可擦写
光盘的存储原理
只读型和只写一次型—-热作用(物理或化学变化)
可擦写光盘—-热磁效应