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)个标记位指明这个行是否包含有意义的信息
物理地址为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
灵活性好,一个块可以缓存在任意位置,缺点是查询复杂且昂贵