跳转至

CSAPP - 6. 存储器层次结构

d-cache 数据缓存 i-cache 指令缓存

6.4 高速缓存存储器

CPU寄存器文件和主存之间插入的小的SRAM高速缓存存储器

类型 缓存对象 被缓存位置 延迟(周期数) 由谁管理
CPU寄存器 4/8字节 芯片上的CPU寄存器 0 编译器
TLB 地址翻译 芯片上的TLB 0 硬件MMU
L1高速缓存 64字节块 芯片上的L1高速缓存 4 硬件
L2高速缓存 64字节块 芯片上的L2高速缓存 10 硬件
L3高速缓存 64字节块 芯片上的L3高速缓存 50 硬件
虚拟内存 4KB页 主存 200 硬件+OS

6.4.1 通用高速缓存存储器组织结构

如图6-25所示

高速缓存被组织成一个有S=2^s高速缓存组的数组

每个组包含E个高速缓存行,每个行包括

  • B=2^b个字节的数据块
  • 有效位指明这个行是否包含有意义的信息
  • m-(b+s)个标记位指明这个行是否包含有意义的信息

6-25

物理地址m位,如6-25(b)所示

  • 最后b位是偏移位,表示对象是一个缓存行里面第几个字节
  • 中间s位是组索引,是S个组的组索引,被解释为一个无符号整数
  • 最前面m-b-s位是标记位,和缓存行中的标记对比,只有缓存行设置了有效位并且标记位和地址标记位匹配,这一行才包含这个地址对应的字节

用中间位而不是高位索引,是因为高位索引会将连续的内存块映射到相同的高速缓存块,导致高速缓存使用效率低

根据E的大小不同,高速缓存被分为三类

6.4.2 直接映射高速缓存

E=1的高速缓存被成为直接映射

缺点是换出频繁,灵活性差

6.4.3 组相联高速缓存

1<E<C/B的高速缓存成为E路组相联高速缓存

在匹配时高速缓存必须搜索组中的每一行

6.4.4 全相联高速缓存

E=C/B,一个组包含所有高速缓存行

高速缓存电路必须并行搜索许多相匹配的标记,构造一个又大又快的相联高速缓存很困难且很昂贵,因此,全相联高速缓存只适合做小的高速缓存,例如TLB

灵活性好,一个块可以缓存在任意位置,缺点是查询复杂且昂贵