王道计组笔记: 3.6高速缓冲存储器

高速缓冲存储器

1. Cache的工作原理

当在手机上打开微信时,微信的数据会从辅存中调入内存,但由于内存的存取速度很慢,CPU的存取速度很快,会出现卡顿现象。

如果把内存中的数据加入Cache之后,Cache的速度很快,CPU与内存的速度矛盾被缓和。

2.局部性原理

  • 空间局部性:在最近的未来要用到的信息(指令和数据),和可能与现在使用的信息在存储空间上时邻近的。
  • 时间局部性:在最近的未来要用到的信息,很可能是现在正在使用的信息。

总结:基于局部性原理,可以把CPU目前访问的地址”周围“的部分数据放到Cache中。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v31KDdo7-1636634253650)(C:\Users\ruisen\AppData\Roaming\Typora\typora-user-images\image-20211109220147090.png)]

3.性能分析

  • 命中率H: CPU欲访问的信息已在Cache中的比率
  • 未命中率:1-H
  • tc为访问一次Cache的时间
  • tm为访问一次主存所需时间
  • 平均访问时间 t = Htc+(1-H)(tc+tm) (先访问Cache,若Cache为命中在访问主存)
  • t = H tc+(1-H) tm (同时访问Cache和主存,若Cache命中则立即停止访问主存)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ElojW6D-1636634253653)(C:\Users\ruisen\AppData\Roaming\Typora\typora-user-images\image-20211109221321993.png)]

题目

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

  1. 先设周期,Cache的存取周期为t,主存的存取周期为5t
  2. 若Cache和主存同时访问,命中时访问时间为t,未命中访问时间为5t。
  3. 若先访问Cache在访问主存,命中时访问时间为t,为命中访问时间为5t。
  4. 列计算式

根据局部性原理,如何讲主存中的信息放入Cache中

  • 分块:将主存的存储空间分块,主存与Cache之间以”块“为单位进行数据交换。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lp20z7EE-1636634253656)(C:\Users\ruisen\AppData\Roaming\Typora\typora-user-images\image-20211109223112844.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6QGEHn3G-1636634253658)(C:\Users\ruisen\AppData\Roaming\Typora\typora-user-images\image-20211109223342239.png)]

思考

  • 如何区分Cache与主存的数据块的对应关系?
  • Cache很小,主存很大,如果Cache满了怎么办?
  • CPU修改了Cache中的数据副本,如何确保主存中数据母本的一致性?

总结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fCWFPf98-1636634253661)(C:\Users\ruisen\AppData\Roaming\Typora\typora-user-images\image-20211109223914709.png)]

4.映射(类比哈希)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1WoLS3w1-1636634253665)(C:\Users\ruisen\AppData\Roaming\Typora\typora-user-images\image-20211109224624330.png)]

  • 标记:为什么要有标记,因为需要记录Cache中记录的时主存中的哪一块地址
  • 有效位:如何Cache的某一行中有地址则记录主存的地址,没有的话则标记为0,0也相当与时一个地址,所以需要有一个有效位来证明此标记是否有效。1为有效,0为无效。

全相联映射

  • 主存块号:内存的大小除于Cache的大小,作为主存块的地址。
  • 块内地址:Cache块的大小决定,总共有多少个数据
  • 如何访存:先于Cache块中每一个标记进行对比,且有效位为1的话命中,否则未命中,未命中就访问主存。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NP82k8EU-1636634253673)(C:\Users\ruisen\AppData\Roaming\Typora\typora-user-images\image-20211110220407660.png)]

直接映射

  • 主存块在Cache中的位置=主存块号%Cache总块数。
  • 如何有两个主存块在Cache中的位置相同,则替换掉原来的数据。
  • 如何优化标记:将Cache的快数转化为2的n次方形式,那么只需要标记号末尾的n位就可以直接反映它在Cache中的位置。所以标记就可以减去这后面n位。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CVMU7G9I-1636634253675)(C:\Users\ruisen\AppData\Roaming\Typora\typora-user-images\image-20211110222528502.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JgiFNdIX-1636634253677)(C:\Users\ruisen\AppData\Roaming\Typora\typora-user-images\image-20211110222647888.png)]

级相联映射

  • 所属分组=主存块号%分组数
  • 如何访存:根据后n位确定所属组号,在看标记是否相同,在看有效位是否位1

对比

  1. 全相联映射:Cache存储空间利用充分,命中率高,查找”标记“最慢,有可能需要对比所有行的标记
  2. 直接映射:对于任意一个地址,只需对比一个”标记",速度最快,但是Cache存储空间利用不从分,命中率低
  3. 组相联映射:两种方式综合,效果最好。

5.Cache替换算法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5iFFRMu8-1636634253678)(C:\Users\ruisen\AppData\Roaming\Typora\typora-user-images\image-20211110223928299.png)]

需不需要替换算法

  • 全相联映射:只有当Cache完全满了之后才需要替换,需要在全局选择替换哪一块
  • 直接映射:如果对应位置非空,则毫无选择地直接替换
  • 只有当分组满了之后才需要替换,需要在分组内选择替换哪一块。

替换算法

  • 随机算法(Rand)
  • 先进先出算法(队列)
  • 近期最少使用(LRU)
  • 最近不经常使用(LFU)

随机算法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kOuyaB08-1636634253680)(C:\Users\ruisen\AppData\Roaming\Typora\typora-user-images\image-20211110224604695.png)]

先进先出

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z6SLrvZD-1636634253682)(C:\Users\ruisen\AppData\Roaming\Typora\typora-user-images\image-20211110225030751.png)]

==抖动现象:==频繁的换入换出现象(刚被替换的块很快又被调入)

近期最少使用算法

  • 命中时,所命中的行的计数器清零,比其低的计数器加1,其余不变
  • 未命中且还有空闲行时,新装入的行的计数器置0,其余非空闲行加1
  • 未命中且无空闲行时,计数值最大的行的信息块被淘汰,新装入的块的计数器置为0,其余全加1。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-quyMpJpp-1636634253683)(C:\Users\ruisen\AppData\Roaming\Typora\typora-user-images\image-20211110230456070.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WeNrFWOB-1636634253686)(C:\Users\ruisen\AppData\Roaming\Typora\typora-user-images\image-20211110230628290.png)]

最近不经常使用

  • 此算法没又近期最少使用算法好,加入说当前一直使用微信视频聊天的数据,之后不用的话数据会一直保存在Cache块中,不满足局部性原理。

请添加图片描述

6.Cache块写策略

写命中

  • 全写法:当CPU对Cache写命中时,必须把数据同时写入Cache和主存,一般使用写缓冲。访存次数增加,速度边慢,但更能保证数据一致性
  • 写缓冲:将需要写入主存的块放入写缓冲中,写缓存使用队列的形式,这样可以大大提高效率。

请添加图片描述

  • 写回法:当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存
    请添加图片描述

  • 脏位:当该Cache块被修改,就让该块的脏位标记为1,之后被替换时可以根据脏位来判断是否写回主存

写不命中

  • 写分配法:当CPU对Cache写不命中时,把主存中的块调入Cache,在Cache修改,所以适合写回法使用

请添加图片描述

  • 非写分配法:当CPU对Cache写不命中时只写入主存,不调入Cache,只有读未命中时才调入Cache中,所以配和全写法使用。
    请添加图片描述

多级Cache
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值