MOESI protocol とは

計算において、MOESIは、他のプロトコルで一般に使用される可能性のある状態のすべてを包含する完全なキャッシュコヒーレンシプロトコルである。 4つの一般的なMESIプロトコル状態に加えて、変更され共有されるデータを表す第5の「所有」状態が存在する。これにより、変更されたデータを共有する前にメインメモリに書き戻す必要がなくなります。データは最終的に書き戻されなければならないが、ライトバックは延期される可能性がある。
これを可能にするには、データのキャッシュからキャッシュへの直接の転送が可能でなければならないため、変更された状態のデータを持つキャッシュはそのデータをメモリに転送せずに別のリーダーに供給することができます。
AMD64アーキテクチャー・プログラマーズ・マニュアル第2巻「システム・プログラミング」で説明したように、各キャッシュ・ラインは5つの状態の1つにあります。
変更された
 このキャッシュはキャッシュラインの唯一の有効なコピーを持ち、そのコピーを変更しました。
所有
 このキャッシュは、キャッシュラインの有効なコピーを持ついくつかのキャッシュの1つですが、それを変更する排他的な権利があります。これらの変更を、回線を共有する他のすべてのキャッシュにブロードキャストする必要があります。所有状態の導入は、データの不正な共有を可能にする。すなわち、修正されたキャッシュブロックは、メインメモリを更新することなく、様々なキャッシュの周りを移動することができる。キャッシュラインは、すべての共有コピーを無効化した後に変更状態に変更することができ、または変更をメインメモリに書き戻すことによって共有状態に変更することができる。所有されているキャッシュラインは、スヌープ要求にデータで応答する必要があります。
排他的
 このキャッシュには行の唯一のコピーがありますが、行はクリーンで(変更されていません)。
共有
 この行は、システム内のいくつかのコピーの1つです。このキャッシュにはコピーを変更する権限がありません。システム内の他のプロセッサは、共有状態のデータのコピーを保持することもできる。 MESIプロトコルとは異なり、共有キャッシュラインはメモリに対してダーティである可能性があります。そうであれば、あるキャッシュは所有状態のコピーを有し、そのキャッシュは最終的にメインメモリを更新する責任がある。キャッシュが所有状態のラインを保持しない場合、メモリコピーは最新である。キャッシュラインは書き込まれない場合がありますが、すべての共有コピーを無効にした後に、排他または変更された状態に変更される可能性があります。 (キャッシュラインが以前に所有されていた場合、無効化レスポンスはこれを示し、状態は変更されるため、最終的にデータをメモリに書き戻す義務は忘れられません)。また、破棄することもできます) いつでも。共有キャッシュラインは、データを伴うスヌープ要求に応答しないことがある。
無効
 このブロックは無効です。試行されたアクセスを満たすためにフェッチする必要があります。
与えられたキャッシュ・ペアに対して、与えられたキャッシュ・ラインの許可される状態は以下のとおりです。
(州が通常記載されている順番は、頭字語「MOESI」を発音可能にするためだけに役立つ)。
このプロトコルは、よりシンプルなMESIプロトコルのより洗練されたバージョンです(拡張MESIでは不可能 – キャッシュコヒーレンシ参照)ので、別のプロセッサがリードしようとしたときにダーティキャッシュラインをメインメモリに書き戻す必要がありません。代わりに、所有状態は、プロセッサが変更されたデータを他のプロセッサに直接供給することを可能にする。これは、2つのCPU間の通信レイテンシと帯域幅が主メモリよりも大幅に優れている場合に有益です。一例として、コア単位のL2キャッシュを備えたマルチコアCPUがあります。
MOESIはキャッシュから汚れたキャッシュラインを迅速に共有できますが、クリーンラインをキャッシュからすばやく共有することはできません。キャッシュラインがメモリおよび共有状態でクリーンである場合、そのキャッシュラインへの任意のスヌープ要求は、キャッシュではなくメモリから充填される。
プロセッサがOwnedキャッシュラインに書き込む場合、プロセッサはそのキャッシュラインを共有している他のプロセッサに通知する必要があります。実装によっては、コピーを無効にする(独自のコピーをModified状態に移行する)ように指示することも、コピーを新しい内容で更新する(Owned状態でコピーを残す)こともできます。