假设我们有以下情况:2 个 CPU 和写入缓冲区,MESI 用作缓存一致性协议。我们在 CPU 之间有一个共享缓存线:
CPU1 缓存:|I|I|S|I|I|
CPU2缓存:|I|I|S|I|I|
现在 CPU1 决定修改共享线路。它将更改记录放入其写入缓冲区,并向 CPU2 发送无效消息。CPU2 接收到它并发送一个确认:
CPU1 缓存:|I|I|S|I|I|
,CPU1 写缓冲区:change for the 3rd cache line
CPU2缓存:|I|I|I|I|I|
CPU1 在收到确认后不必刷新写缓冲区并将高速缓存行状态更改为 M(modified) 是否正确?如果不是,让我们走得更远。
假设现在 CPU2 想要再次读取这个缓存行。侦听 CPU1 是否应该拦截此读取请求,并且flush buffer->flush cache line->send the last value of the cache line to CPU2
?或者它可能会忽略它并且 CPU2 通过询问 RAM(尚未更改)仍然具有旧值?