MESIプロトコル
MOESIプロトコルはMESIプロトコルに Owned状態を加えたキャッシュプロトコル。AMD64で採用されている。
任意の2つのキャッシュがあるとき、それぞれの対応するキャッシュラインがとりうる状態の組合せは次のようになる。
MESIプロトコルに比べると、dirtyなキャッシュラインを持っている状態で他のキャッシュからリード要求があっても主記憶に書き戻す必要がないという点が優れている。代わりにOwned状態のキャッシュラインは他のプロセッサに直接変更の加わったデータを送ることができる。これは、キャッシュ間のやりとりが主記憶とのやりとりよりも高速な場合に有利で、例えばマルチコアCPUでCPU毎にL2キャッシュがある場合などが相当する。
しかし、キャッシュラインが clean な場合、Invalid状態のキャッシュがリード要求したとき応答するのは主記憶であり、Shared状態やExclusive状態のキャッシュラインは応答しない。
典型的システムでは、複数のキャッシュがメインメモリの接続されたバスを共有している。それぞれのキャッシュにはCPUが接続されており、それがリード要求やライト要求を発行する。このようなシステムで全体として共有している主記憶へのアクセスを最小にすることが目的である。
Invalid状態以外のキャッシュラインはリード要求を満たすことができる。Invalid状態のラインにリード要求が来た場合、主記憶から内容を読み込む必要がある(Shared か Exclusive 状態に遷移する)。
ライト要求を実行できるのは、Modified状態かExclusive状態の場合のみである。Shared状態なら、書き込みを行う前にシステム内の他のキャッシュ(の該当するキャッシュライン)を Invalid 状態にしなければならない。これは、通常ブロードキャスト操作で実行され、その操作を Read For Ownership (RFO) と呼ぶ。
キャッシュ機構は Modified状態以外のキャッシュラインをいつでも捨てて Invalid状態にすることができる。Modified状態のラインは必ず主記憶に書き戻さなければならない。
Modified状態のキャッシュラインを持つキャッシュ機構は、バス上の流れを監視して(バススヌープ)、対応する主記憶上の位置へのリード要求をインターセプトして、それを再試行状態にする。