抓取在直写缓存中有什么作用?

What does fetching do in write through cache?

假设您有一个 32 字节直接映射缓存,每个块 16 字节,它读取地址 0xd。缓存的内容是什么?我原以为 fetcher 会将 0xd 添加到 set 1(所以是第二个)的缓存中,字节 6。但是在我的模拟器中,0xc 是一个命中,所以显然这是错误的!感谢您的帮助。

要确定在哪个集合中找到地址,您使用:

(addr >> log2(block size)) & (number of sets - 1)

(假设块大小和集合数量都是 2 的幂,它们几乎总是这样,所以 &(n-1)%n 相同,一个模数)

对于你的情况,它将是:(0xd >> 4) & 1,即 0。

集合 0 中的块包含字节 0x0 到 0xf,因此对 0xc 的引用是命中。

它包含字节 0x0 到 0xf 的原因是计算机内存系统通常被设计为比非对齐数据更快地处理自然对齐数据。如果起始块的地址在地址的低 log2(N) 位中为零,则大小为 N 的块自然对齐。因此,当引用地址 0xd 时,包含它的对齐块(起始地址为 0x0)被加载到缓存中。