高速缓存的行匹配与字选择


问题假设

    存储器是字节寻址的;

    存储器访问的是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,具体分析同上。记住一点:如果有效位没有设置或者标记不相匹配,那么我们就得到一个缓存不命中。