CPU Cache 之 直接映射缓存
直接映射缓存由若干缓存块(Cache Block,或Cache Line)构成
单个缓存块结构
这里假设一个缓存块的大小为
16字节
每个缓存块还会有有效位(valid bit)、脏位(dirty bit)、使用位(use bit)
等,序号
和TAG
所占的位数和整个Cache大小,以及处理器的内存寻址方式。
缓存结构
假设整个缓存的大小为
128字节
,单个缓存块的大小为16字节
由于有8
个缓存块,所以序号需要至少有3bit
的空间
检查缓存是否命中
图片来自[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cMtkjnnQ-1610702505423)(https://bk.tw.lvfukeji.com/baike-CPU%E7%BC%93%E5%AD%98)]
可以看出序号
其实就是地址的低位,TAG
是地址的高位。判断缓存是否命中就是先用低位地址
定位到缓存块
,然后再判断高位地址
和TAG
是否一致。
直接映射的各种计算
注:i5-6500采用的是
组相联映射模式
,这里采用直接映射方式
计算各种数据
- 查看
CPU L1 Cache
大小
$ cat /sys/devices/system/cpu/cpu0/cache/index0/size
32K
可以看出我的i5-6500
的L1
大小为32K
- 查看
缓存块
大小
# 这里我进入了/sys/devices/system/cpu/cpu0/cache/index0/
$ cat coherency_line_size
64
这里可以计算出有 :注:6500其实是组相联合的映射方式,这里只是为了展示计算过程
$ 2^5 * 2^{10}/ 2^6 = 2^9 $ 个缓存块
所以,如果使用直接映射的话,序号位置需要占用9bit