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