次のような状況があるとします。書き込みバッファを備えた 2 つの CPU で、キャッシュ コヒーレンス プロトコルとして MESI が使用されています。そして、CPU 間に 1 つの共有キャッシュ ラインがあります。
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 (まだ変更されていない) に要求することによって古い値を保持している可能性がありますか?