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

- 読み取りヒット: 情報は現在のキャッシュから提供されます。状態は変化しません。
- リードミス:データはメインメモリから読み出されます。このリードは他のキャッシュによってスヌープされます。もし他のキャッシュの該当ラインがダーティ状態にある場合、リードは中断され、データがメモリに書き戻されるまではリードを続行できません。ダーティ状態または予約状態にあるコピーはすべて有効状態に設定されます。
- 書き込みヒット: キャッシュ内の情報がDirtyまたはReserved状態の場合、キャッシュラインはインプレース更新され、メモリを更新せずに状態をDirtyに設定します。情報が有効状態の場合、ライトスルー操作が実行され、ブロックとメモリが更新され、ブロックの状態がReservedに変更されます。他のキャッシュは書き込みをスヌープし、自身のコピーをInvalidに設定します。
- 書き込みミス:キャッシュラインの一部への書き込みは、(キャッシュラインの未書き込み部分をフェッチする必要がある場合)読み取りミスとして処理され、その後書き込みヒットが続きます。これにより、他のすべてのキャッシュは無効状態になり、現在のキャッシュは予約状態になります。
これはMESIプロトコルのバリエーションですが、メインメモリへの書き込みを実行せずにキャッシュラインを排他状態にするための明示的な所有権取得操作やブロードキャスト無効化操作はありません。代わりに、有効な(別名Shared)キャッシュラインへの最初の書き込みはメモリへのライトスルーを実行し、これにより他のキャッシュが暗黙的に無効化されます。その後、ラインは予約済み(排他的)状態になり、その後の書き込みはメインメモリを参照せずに実行でき、キャッシュラインはダーティ(変更済み)状態になります。
参考文献
- ^ 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。