我在运动方面有问题:
缓存 DM。缓存大小 - 64kB,单行大小 - 64B。开机后,程序已读取地址:
- 0x00000
- 0x0003C
- 0x0013C
- 0xF0038
- 0x00015
- 0x00130
不得不说,什么时候会错过,什么时候会被击中。我找到了一些与此类似的练习示例,但我不知道如何处理十六进制中的地址。我知道:Cache address = Memory Address **mod** Cache Size
,但我不知道如何解决这个练习。 提前谢谢你。
回答这些问题的一种方法是找到给定缓存设计的tag
、index
和offset
位。然后将地址访问模式映射到相应的标签中,索引以获取命中/未命中信息。
例如,考虑访问地址0xF0038
:
Cache Size = 64kB
Line Size = 64B
Offset bits = log2(64) = 6
Index bits = log2(6kB/64B) = 10
Considering 20-bit address line
Tag bits = 20 - 10 - 6 = 4
Address accessed - 0xF0038
Converting into bits -
1111_0000_0000_0011_1000
Tag - 1111
Index - 0000_0000_00
Offset - 11_1000
现在,您知道访问是将标记0x0
索引为0xF
。根据较早的访问,这将是未命中或命中。同样,您可以对所有其他地址执行此操作。