CSAPP第六章学习笔记——存储器层次结构

前面的各种存储器大概看了一下,DRAM和SRAM是理解的,其他的存储器就朦朦胧胧知道是怎么回事,就不深入了,这里主要做一下Cache的笔记。我感觉Cache方面的知识其实逻辑是很清晰的,就是利用程序总是存在的空间局部性和时间局部性(其实就是写出的程序往往存在的规律。时间局部性就是之前访问的数据或指令往往在之后还会访问,空间局部性就是之前访问的数据或指令附近的地址往往在之后还会访问)但就是各种术语如set组,block块,line行,总是不知道确切指的是什么,因而在这里准确地记录一下。文章目录一、何为Ca
摘要由CSDN通过智能技术生成

前面的各种存储器大概看了一下,DRAM和SRAM是理解的,其他的存储器就朦朦胧胧知道是怎么回事,就不深入了,这里主要做一下Cache的笔记。

一、何为Cache

一个Cache,由S组(sets)组成,每组都有E块(blocks)数据块,每个数据块都有B个字节(bytes),所以总缓存大小C=S*E*B data bytes.
这里的块也就Cache中的一行嘛,每次传输一整块的数据。

注2:!!!block和line是同个意思!!!
看CSAPP的时候困惑了好久,一会block一会line,原来是一样的。那么这里就统一用block来表示

1.直接映射缓存(Direct-Mapped Cache)

最简单的情况,S=2^s sets,E=1blocks per set,B=2^b 字节 per block,且地址位数为t+s+b,那么得到的一个地址可以如下图这样划分:
在这里插入图片描述
所以找某个地址的数据的时候,传入地址,将地址上面的方式切分成tag标记位,set index组号,和block offset块内偏移。
在这里插入图片描述
如上图,就是E=1的一个示例。每次进来一个地址,都剥离出tag,set index 和 block offset,先根据set index找到那一组,由于每个组只有一块,所以只需要比对找到的那一块记录的标志位是否与传入的tag相等,若相等且valid=1,则表示该数据在缓存中,直接从缓存中取走数据即可,否则表示没在缓存中。

这叫直接映射缓存,因为每次来,根据set就直接找到那个block了(因为one set 就只有 one block),然后直接和那个比对即可。
这种缓存有个明显的缺点,就是如果AB的set index相同,然后程序的特点是ABABAB这样交错地访问的话,那么一次都不会命中。
所以更好的办法是增加E,使得每一组可以并行放好几个相同set index的block,在下面介绍。

2.组相联映射(E-way Set Associative CacheE路相联缓存)

E>1时,每组都有E块可供缓存,也就是说,相同set index的地址可以不用争夺那仅有的一个块了,现在有很多块可供大家选用。由于有选择的空间了,也就能够选择进来一个的时候覆盖在哪个旧数据块上了,也就开始需要淘汰算法了。
下面有一个2-Way 的例子。

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值