在使用MESI协议的缓存中是否存在这种情况(使用了l1和l2包含性),其中l2可以向l1中已经无效的行发送无效指令。
答案 0 :(得分:1)
“无效请求”,你的意思是?
我想是的,如果L2没有根据它对L1的了解过滤它的请求,它可能总是在每次驱逐一行时向IN发送一个INVD。不知道这对于真正的设计是否合理。 (从L2驱逐可能是由于硬件或软件预取到L2中,而不是响应L1写回。)
或者,如果CPU核心在L2发送无效的同时使L1中的线路无效,则INVD可能在线路已经无效后到达L1。
答案 1 :(得分:1)
可能存在L2根本不知道L1是否具有该行的情况,因为允许L1静默地丢弃它。
事实上,如果L2是包容性的,那么在从L1(容量驱逐)中驱逐未修改的行时几乎没有理由浪费带宽,因为L2已经有副本并且没有变化。因此,很可能L2中的许多线路在从L1被驱逐后仍然存在很长时间。当它终于到来时(稍后,因为它更大)从L2中驱逐将不得不发回一个窥探以强制包容性,因为它无法确定该线是否仍然在L1中。