高速缓存的行匹配与字选择
问题假设
存储器是字节寻址的;
存储器访问的是1字节的字;
地址的宽度为13位;
高速缓存内容
高速缓存是2路组相联的(E=2),块大小为4字节(B=4),有8个组
内容如下所示:
行0:
(表中所有的数字都是以十六进制来表示的)
组索引
|
标记位
|
有效位
|
字节0
|
字节1
|
字节2
|
字节3
|
0 | 09 | 1 | 86 | 30 | 3F | 10 |
1 | 45 | 1 | 60 | 4F | E0 | 23 |
2 | EB | 0 | – | – | – | – |
3 | 06 | 0 | – | – | – | – |
4 | C7 | 1 | 06 | 78 | 07 | C5 |
5 | 71 | 1 | 0B | DE | 18 | 4B |
6 | 91 | 1 | A0 | B7 | 26 | 2D |
7 | 46 | 0 | – | – | – | – |
行1的高速缓存内容我就不列举了,类似上表的形式。
地址内容
现在假设一个程序运行在上述的机器上面,并且它引用地址0x0E34处的1个字节的字。则该地址格式应该如下表所示:
0 1 1 1 0 0 0 1
|
1 0 1
|
0 0
|
其中最左边一栏是高速缓存标记位(CT),中间一栏是高速缓存组索引(CI),最右边一栏是高速缓存块偏移(CO),它们的值分别为0x71,0x5,0x0。
是否命中
根据表中数据可知,标记位为0x71的刚好在行0的组索引为0x5中,并且其有效位已经设置为1,因此表明标记和块中的位是有意义的。所以这次高速缓存命中了,根据块偏移为0,所以返回的高速缓存字节为0xB。
总结
本案例帮助我加强理解了高速缓存是如何工作的,关于缓存不命中的例子这里可以介绍一个地址为0x0DD5,具体分析同上。记住一点:如果有效位没有设置或者标记不相匹配,那么我们就得到一个缓存不命中。