set 包含的 cache line 行数不同,cache 会被分为不同的类

注意:这句话不是说,一个 cache 里的 set,可能有多种行的组合,比如 set 0 有两行,set 1 有 4 行,而是,这个 cache 中的所有 set 每个 1 行,这个 cache 被分为一类,另一个 cache 中的所有 set 每个 4 行,被分为另一类

直接映射

将 E=1 的 cache 称之为直接映射,也就是每个 set 只有一个 cache line

假设的模型:

一个 cpu 一个寄存器一个 L 1 和一个内存

set Index 组索引位

确定这个目标数据属于哪个 set

这里的组索引位的长度是 5,这些二进制位被解释乘一个无符号数

这里的 5 就是 ,也就是可以检索 32 个 set

如何进行的检索:

当 s 为 0 时,选择的结果是 set 0

set index 是二进制表示的数,它的十进制结果就是对应的第几个

最大的 11111 也就是最后一个

确定了组以后,就要开始进行 line(行)匹配

  • 确认 cache line 的地址标记为和我们要搜的地址是否一致

    图中这里中间的 set index 已经用过了,所以不标了,用了 set index 后就该用 tag 了

  • 如果一致,表示目标数据一定在当前的 cache line 中,如果不一致,或者有效位为 0,说明目标数据不在当前的 cache line 中

  • 字抽取,使用 block offset,根据偏移量确定目标数据的确切位置,图中数据块的大小为 8 个字节,当 block offset 为 100,也就是 也就是 4,从第四个位置后开始算

    现在就通过目标地址,找到了目标数据,我们就可以获取到目标数据的副本了

如果发生了不命中,那么 cache 需要从存储器层级结构的下一层取出被请求的块

具体例子

在这个例子中,m 为 4,这个 m,表示我们的一个 line 是 4 位的,有 16 个字节,这 16 个字节可能被表示为 M=16 给出

看下面这个图,就说明了这个问题,1 行包括 tag index 和 offset,这里一共是 4 个数,也就是 4 位的

地址空间可以用编号 0~15 来表示,因为 4 位 2 进制最大是 1111,也就是 15

每一个内存块依靠标记位和索引位共同作用, 唯一确认

每个地址块包含两个字节(为什么?)

因为这里的 那么 set 就被分为了   也就是 8 个 set,自然每个 set 是两个字节

上面我这个是错误言论,具体看视频

这里只有 4 个 set,有两个内存块映射到同一个 set 的情况,上面这个图好像是内存中存储图,现在说的是,内存到 cache 的映射

如何自己计算 s t b 各有多少位

考试的时候给这个, 也就是字地址

具体看视频

给地址的总长度为 16 字节,有 8 组, b 这里这个位给的是 64 B

是因为这个是 8,对应 8 组

是因为这个是 64