计算机组成原理-高速缓冲存储器


笔记📗

计算机组成原理-计算机硬件的基本组成
计算机组成原理-计算机的功能部件及层次结构
计算机组成原理-计算机性能指标
计算机组成原理-数制与编码(进制转换)
计算机组成原理-定点数的表示和运算
计算机组成原理-浮点数的表示与运算
计算机组成原理-算术逻辑单元ALU
计算机组成原理-存储系统

资源💾

计算机组成原理PPT:链接: https://pan.baidu.com/s/1EqL9NmQ-0glDNIFPBfUmVg 密码: sfwg
配套书籍:链接: https://pan.baidu.com/s/1cZx27Gfooj2uAhSP9sbrRA 密码: j5ms


局部性原理

可以参考:局部性原理——各类优化的基石

一个编写良好的程序,它们倾向于调用临近于最近引用过的数据或者该数据本身,我们称这种程序具有良好的局部性。局部性有两种形式上的表现:空间局部性时间局部性

空间局部性

在最近的未来要用到的信息(指令或数据),很可能与现在正在使用的数据信息在空间上是临近的。

时间局部性

在一个具有良好时间局部性的程序中,被访问过一次的存储器或者数据很有可能在不久的将来再次被使用。

应用

硬件层面
为了解决CPU、主存之间的运行速度差距,引入高速缓冲存储器,通常分为多级,离CPU最近的速度越快,但是容量越小。

软件层面
操作系统的虚拟地址空间技术,以及缓存磁盘文件系统中最近被使用磁盘块等。

性能分析

虽然一个好的程序具备良好的局部性,但是并不是所有的数据都可以从Cache中找到,因此也存在命中率这么一个名词。命中率高的情况下,可以减少CPU直接从内存中读取数据的情况,一旦命中,CPU将直接和Cache进行数据交换,提高了整个系统的运行效率。

例题

假设Cache的速度是主存的5倍,且Cache的命中率为95%,则采用Cache后,存储器性能提高多少(设Cache和主存同时被访问,若Cache命中则中断访问主存)

Cache的基本工作方式

地址映射方式

假设某个计算机的主存地址空间大小为256MB,按照字节编址,其数据Cache有8个Cache行,行长为64B。

每一个Cache行为一个Cache块,是Cache与主存间传输数据的基本单位。

Cache

行号Cache字块地址(8行,用3位表示)字块内地址(64B,用6位表示)
0000000000~111111
1001000000~111111
2010000000~111111
3011000000~111111
4100000000~111111
5101000000~111111
6110000000~111111
7111000000~111111

对于主存而言,可以根据Cache行的大小进行分块:

  1. 分成的块的数量:256MB/64B = 4M = 2 22 2^{22} 222
  2. 每块的地址一共有28位(因为是按照字节编址, 256 M B = 2 28 B 256MB = 2^{28}B 256MB=228B),将28位拆分成:19 + 3 + 6
    • 19:代表刚刚切分好的主存块地址,可以通过这个地址判断,数据在哪个地址块
    • 3:刚好和Cache块的字块地址对应
    • 6:代表具体的存储单元地址

分完块之后,每个主存块的大小和每个Cache的大小是一样的

全相联映射

对于全相联映射,遵循空位随意放的原则,Cache放满后再进行替换。
从主存块中将数据存入Cache块中,Cache块中的数据地址即字块内地址是没有被打乱的,所以这个地址是不需要存的。
为了辨识,这个Cache块的数据是从主存的哪个块中存储过来的,需要记录主存块中的高位地址,即主存字块标记进行记录,所需的空间为22(19 + 3)个比特。最终Cache中标记项为: 有效位 + 主存字块标记(除字块内地址),也就是说,通过23(1 + 22)个字节的数据,就可以区分出这个数据来自于主存中的哪里。

直接映射

直接映射方式遵循对号入座原则。
此时根据主存块号中的Cache字块地址,直接放置到对于的Cache行中。同样,字块内地址不需要作为标识存入到Cache中,和全相联映射不同的是,此时不需要讲Cache字块地址放入Cache中(因为是直接映射的方式,一一对应,Cache自身的块地址和主存中的Cache字块地址统一)。所以此时只需要将那19位地址存入Cache,外加一个有效位标记即可。最终Cache中存储的标记项为: 有效位 + 主存字块标记(除字块内地址、Cache字块地址)

组相联映射

按号分组,组内随意放。组相联映射方式,可以看成是全相联映射和直接映射的混合体。在组内是全相联,组间是直接映射。

如果组数为1组,则此时为全相联映射;
如果组数和Cache行数相同,则此时为直接映射。

此时Cache中的标记项内容为:有效位 + 主存字块标记(除字块内地址、组地址)

替换算法

近期最少使用算法(LRU)

Least Recently Used
依据程序访问的局部性原理选择近期内长久未访问过得存储行作为替换的行,平均命中率要比FIFO高,属于堆栈类算法。
LRU算法对每行设置一个计数器,Cache每命中一次,命中计数器清0,而其他各行计数器需要加1,需要替换的时候比较各特定行的计数值,将计数值最大的行换出

先进先出算法(FIFO)

First In First Out
选择最早调入的行进行替换。最容易实现,因为没有依据程序访问的局部性原理。可能会将一些经常使用的程序块(例如循环程序)也作为最早进入Cache的块替换掉

最不经常使用算法(LFU)

Lease Frequently Used
将一段时间内被访问次数最少的存储行换出。每行也设置一个计数器,新行建立后从0开始计数,没访问一次,被访问的行计数器加1,需要替换时,比较各特定行的计数值,将计数值最小的行换出

随机算法(RAND)

随机确定替换的Cache,实现比较简单,但是没有依据程序访问的局部性原理,所以命中率较低。

例题

对于不同替换算法下的替换过程就不写在这篇博客了,内容有点多~

给出主存地址块号:4,6,12…

因为此时已经根据Cache进行了分块,所以对于直接映射方式,主存地址块号的周期为8,每隔8个块,就需要循环作为Cache的标记出现。
0~7号主存地址块分别对应Cache 0~7
8~15号主存地址块分别对于主存Cache 0~7

如果给出主存地址,换算成十进制地址为78、626、79…这种具体地址。

因为主存块是根据Cache块进行划分的,所以地址0~15都属于Cache 0号块,16~31属于Cache 1号块。
主存地址的周期是根据Cache块大小来决定的。

Cache基本工作原理

基于局部性原理,Cache可以理解为是主存最活跃的若干块的副本。
当CPU发起请求,如果访存地址在Cache中命中,则直接将该地址转换成Cache地址,对Cache进行读操作,与主存无关;如果Cache不命中,则仍然需要访问主存,并将该字所在的块一次性从主存调入到Cache中。如果此时Cache已满,则需要根据某种算法,对原有的块数据进行替换。

注意:CPU与Cache之间的数据交换以字为单位,Cache与主存的数据交换以Cache块为单位。

image-20201224161214435

Cache写策略

由于Cache的内容是主存的副本,所以当Cache中的数据有变动,也需要维护Cache和主存中数据的一致性,此时就需要合适的写策略。

写命中

全写法

当CPU对Cache写命中时,需要将数据同时写入Cache和主存。如果某一块需要被替换,则该数据就不需要写入主存,直接用新的主存块将Cache块替换即可。
这种方式虽然简单,但是却增加的主存的访问次数,降低了Cache的效率。
因此,需要在Cache和主存之间加入一个写缓冲区,当CPU对Cache块进行写操作的同时,CPU也会将数据写入写缓冲区中,写缓冲再将数据写入主存中。写缓冲是一个FIFO结构。

写回法

当CPU对于Cache的数据写命中时,此时不立即将数据写入主存,而是当该Cache块需要被换出时,才将数据写回主存。这种方式虽然减少了访问主存的次数,单但也存在一定的隐患。使用这种策略时候,必须维护一个脏位,用来判断该Cache块是否被修改过。

二级缓存结构

写不命中

写分配法

此时CPU所需要的数据在Cache中没有找到,则加载主存中的块到Cache中,更新这个Cache块,利用了程序的局部性原理,但缺点是遇到写不命中方式,都需要从主存中读取一个块数据,通常搭配全写法

非写分配法

指写入主存中,不进行调块操作,通常搭配写回法

Cache容量

Cache中存储的内容包括:有效位 + 标记位 + 一致性维护位 + 替换算法位 + 数据

有效位:1位

标记位:不同的地址映射方式,标记位不同。

一致性维护位:写回法需要考虑1位脏位,全写法不用。

替换算法位数:等我学了操作系统补充,哈哈。

数据:Cache块数 × \times × Cache块大小

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YuanbaoQiang

你的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值