0

在使用 MESI 协议(使用 l1 和 l2 包容性)的缓存中是否存在这样的情况,其中 l2 可以将无效指令发送到 l1 中已经无效的行。

4

2 回答 2

1

可能存在 L2 根本不知道 L1 是否有线路的情况,因为允许 L1 静默丢弃它。

事实上,如果 L2 是包容性的,那么在从 L1 驱逐未修改的线路(容量驱逐)时几乎没有任何理由浪费带宽,因为 L2 已经有一个副本并且没有任何更改。因此,L2 中的许多线路很可能在它们被从 L1 驱逐之后很长时间仍然存在。当它最终到达时(后来,因为它更大)从 L2 驱逐将不得不发送回一个窥探以强制执行包容性,因为它无法确定该线路是否仍在 L1 中。

于 2017-12-07T13:16:21.590 回答
1

“无效请求”,你的意思是?

我猜是这样,如果 L2 没有根据它对 L1 的了解过滤它的请求,它可能只是在每次驱逐一行时总是向 L1 发送一个 INVD。不知道这对于真正的设计是否合理。(从 L2 驱逐可能是由硬件或软件预取到 L2 引起的,而不是响应 L1 回写。)

或者,如果 CPU 内核可以在 L2 发送无效的同时使 L1 中的一条线无效,则 INVD 可能在它已经使该线无效之后到达 L1。

于 2017-12-07T01:46:33.217 回答