キャッシュ コヒーレンスプロトコルの文献では、Write-Onceが最初に定義されたMESI プロトコルです。これは、最初の書き込みでライトスルーを実行し、その後のすべての書き込みでライトバックを実行するという最適化により、コンピュータ メモリへの連続書き込みにおける全体的なバストラフィックを削減します。これは、(1983) でJames R. Goodmanによって初めて説明されました。 [1]キャッシュ コヒーレンス プロトコルは、各CPU がメモリの キャッシュを維持する対称型マルチプロセッシングシステムでは重要な問題です。
州
このプロトコルでは、ローカル キャッシュ内の各ブロックは次の 4 つの状態のいずれかになります。
- 無効: このブロックにはメモリの一貫性のないコピーがあります。
- 有効: このブロックにはメモリの一貫したコピーがあります。データは共有される可能性がありますが、その内容は変更されません。
- 予約済み: ブロックはメモリの唯一のコピーですが、一貫性は保たれています。ブロックが置き換えられても、書き戻しは必要ありません。
- ダーティ: ブロックはメモリの唯一のコピーであり、一貫性がありません。このコピーは 1 回以上書き込まれています。これは、ブロックがキャッシュ内で置き換えられたときにライトバックを生成する唯一の状態です。
これらの状態はMESI プロトコルの 4 つの状態とまったく同じ意味を持ちますが(単に逆の順序でリストされているだけです)、これは所有権の読み取り操作を回避する簡略化された形式です。代わりに、すべての無効化はメイン メモリへの書き込みによって行われます。
任意のキャッシュ ペアの場合、特定のキャッシュ ラインの許可される状態は次のとおりです (上記の順序で省略されています)。
トランジション
プロトコルは、各イベントに対していくつかの遷移ルールに従います。

- 読み取りヒット: 情報は現在のキャッシュから提供されます。状態は変化しません。
- 読み取りミス: データはメイン メモリから読み取られます。読み取りは他のキャッシュによってスヌープされます。いずれかのキャッシュのラインがダーティ状態の場合、読み取りは中断され、データがメモリに書き戻されてから続行が許可されます。ダーティ状態または予約状態のコピーはすべて有効状態に設定されます。
- 書き込みヒット: キャッシュ内の情報がDirtyまたはReserved状態の場合、キャッシュ ラインはインプレース更新され、メモリを更新せずに状態がDirtyに設定されます。情報が有効状態の場合、ライトスルー操作が実行され、ブロックとメモリが更新され、ブロックの状態がReservedに変更されます。他のキャッシュは書き込みをスヌープし、そのコピーをInvalidに設定します。
- 書き込みミス: 部分的なキャッシュ ライン書き込みは、読み取りミス (キャッシュ ラインの未書き込み部分をフェッチする必要がある場合) として処理され、その後に書き込みヒットが続きます。これにより、他のすべてのキャッシュは無効状態になり、現在のキャッシュは予約状態になります。
これは MESI プロトコルのバリエーションですが、メイン メモリへの書き込みを実行せずに排他状態でキャッシュにラインを入れるための明示的な所有権の読み取りやブロードキャスト無効化操作はありません。代わりに、有効な(別名Shared ) キャッシュ ラインへの最初の書き込みはメモリへの書き込みを実行し、他のキャッシュを暗黙的に無効化します。その後、ラインはReserved ( Exclusive ) 状態になり、メイン メモリを参照せずにさらに書き込みを実行できるため、キャッシュ ラインはDirty ( Modified ) 状態のままになります。
参考文献
- ^ Goodman, James R. (1983). 「キャッシュメモリを使用したプロセッサメモリトラフィックの削減」ACM Sigarch Computer Architecture News . 11 (3): 124–131. doi : 10.1145/1067651.801647 .
- Archibald, J.; Baer, JL (1986 年 11 月)。「キャッシュ コヒーレンス プロトコル: マルチプロセッサ シミュレーション モデルを使用した評価」。ACM Trans. Comput. Syst . 4 (4): 273–298. doi :10.1145/6513.6514. S2CID 713808。
- Goodman, JR (1983)。「キャッシュ メモリを使用したプロセッサ メモリ トラフィックの削減」。第 10 回国際コンピュータ アーキテクチャ シンポジウムの議事録 - ISCA '83 。国際コンピュータ アーキテクチャ シンポジウム: スウェーデン、ストックホルム、 1983年 6 月 13 ~ 17 日。pp. 124 ~ 131。doi : 10.1145 /800046.801647。ISBN 0-89791-101-6。
