MOSIプロトコルは、基本的なMSI キャッシュ コヒーレンス プロトコルの拡張です。現在のプロセッサがこのブロックを所有していることを示す Owned 状態が追加され、ブロックに対する他のプロセッサからの要求にサービスを提供します。
州の概要
特定のキャッシュ ラインで許可される状態は次のとおりです。
変更済み (M) - ブロックの有効なコピーを持つキャッシュは 1 つだけであり、その値はメイン メモリの値と異なる可能性があります。変更済み状態はブロックの排他的所有権も意味するという点を除けば、ライトバック キャッシュのダーティ状態とほぼ同じ意味を持ちます。ダーティ状態はブロックの値がメイン メモリの値と異なることを意味しますが、変更済みは値がメイン メモリの値と異なり、1 つの場所にのみキャッシュされていることを意味します。
所有 (O) - 複数のキャッシュがブロックの最新かつ正しい値を保持し、メインメモリの値が正しいかどうかはわかりません。一度に 1 つのキャッシュのみがブロックの所有状態を持つことができます。同じブロックを持つ他のすべてのキャッシュは共有状態である必要があります。[1]
共有 (S) - キャッシュ ブロックは有効で、複数のキャッシュで共有できます。メイン メモリと同じ値を持つ場合とそうでない場合があります。他のプロセッサはここから読み取ることができますが、書き込み権限はありません。
無効 (I) - キャッシュ ブロックが無効です。
任意のキャッシュ ペアの場合、特定のキャッシュ ラインの許可される状態は次のとおりです。
オペレーション

MOSI プロトコルでは、各キャッシュには次の要求があります。
- PrRd - キャッシュ ブロックを読み取るためのプロセッサ要求。
- PrWr - キャッシュ ブロックに書き込むプロセッサ要求。
- BusRd -別のプロセッサによってキャッシュ ブロックへの読み取り要求があったことを示すスヌープ要求。
- BusRdX - ブロックを持たない別のプロセッサによってキャッシュ ブロックへの書き込み要求があったことを示すスヌープ要求。
- BusUpgr - すでにキャッシュ内にブロックを持っている別のプロセッサによって行われたキャッシュ ブロックへの書き込み要求があることを示すスヌープされた要求。
- フラッシュ- スヌープされた要求の後にキャッシュブロックがバス上に配置され、キャッシュ間転送が行われる。[2]
プロセッサトランザクション
プロセッサ トランザクションの場合、ブロックが無効 (I)状態にあるときは、キャッシュ ブロックがメモリからフェッチされなかったか、無効化されています。プロセッサ読み取り ( PrRd ) がある場合、状態は無効 (I) から共有 (S) に変わり、バス読み取り ( BusRd ) が生成されます。同時に、プロセッサ書き込み要求 ( PrWr ) の場合、スヌープ書き込み要求 ( BusRdX )とともにブロックの状態が変更 (M) に変わります。
ブロックが所有(O)状態になると、プロセッサ読み取り(PrRd)はスヌープ信号を生成せず、ブロックは同じ状態のままになります。一方、プロセッサ(PrWr)からの書き込み要求は、ブロックの状態を所有(O)から変更(M)に変更し、スヌープ書き込み要求(BusUpgr)を生成します。[3]
ブロックが変更 (M)状態にある場合、ブロックは最新の正しい値がそのキャッシュにのみ存在することをすでに示しているため、プロセッサ読み取り (PrRd) 要求もプロセッサ書き込み (PrWr) 要求もスヌープ信号を生成しません。したがって、状態は変更されず、変更 (M) 状態のままになります。

ブロックが共有 (S)状態にあり、プロセッサ読み取り (PrRd) 要求がある場合、キャッシュ ブロックの値は他のすべてのプロセッサとメイン メモリで同じであるため、プロセッサ読み取り (PrRd) 後に生成されるバス信号はありません。共有 (S) 状態のブロックに対するプロセッサ書き込み (PrWr) 要求があると、キャッシュ ブロックが他のすべてのキャッシュで無効になり、ブロックの状態が共有 (S) から変更中 (M) に変わるため、バス書き込み要求 (BusUpgr) が生成されます。
バス取引
スヌープされたバス トランザクションに対する有限状態マシンの動作を考慮すると、キャッシュ ブロックが無効 (I)状態の場合、スヌープされたバス要求はブロックにまったく影響を与えません。そのため、ブロックを持つプロセッサまたは持たないプロセッサからのバス読み取り(BusRd)またはバス書き込み要求(BusRdX または BusUpgr)であっても、ブロックは同じ無効 (I) 状態のままとなり、それ以上のアクションは生成されません。
キャッシュ ブロックが共有 (S)状態にあり、スヌープされたバス読み取り (BusRd) トランザクションがある場合、ブロックは同じ状態のままとなり、それ以上のトランザクションは生成されません。これは、メイン メモリを含むすべてのキャッシュ ブロックが同じ値を持ち、読み取りのみが行われ、書き込みは行われないためです。スヌープされた書き込み要求 (BusRdX または BusUpgr) がある場合、ブロックの値が他のキャッシュ ブロックの 1 つで変更され、他のすべてのコピーを無効にする必要があるため、ブロックの状態は共有 (S) から無効 (I) に変わります。
キャッシュ ブロックが変更済み (M)状態にあり、バス読み取り (BusRd) 要求があると、ブロックは変更されたデータをフラッシュ(Flush)し、状態を所有済み (O) に変更して、その特定のキャッシュ ブロックの唯一の所有者になります。同時に、変更済み (M) 状態にあるときは、キャッシュ ブロックがないため、別のプロセッサからのバス書き込み要求 (BusUpgr) が発生することはありません。ブロックを持たない別のプロセッサからの書き込み要求 (BusRdX) があると、別のプロセッサがブロックに書き込み中であるため、ブロックの状態が無効 (I) に変更され、そのブロックの所有権が別のプロセッサに渡されます。
キャッシュ ブロックが変更状態にある間は、どのプロセッサもそのブロックを持たないため、他のプロセッサからの BusUpgr 要求は発生しません。変更 (M) 状態の定義により、そのプロセッサのみがブロックを持ち、残りはすべて無効化されるため、BusUpgr 要求を開始できません。
所有者 (O)状態でスヌープされた読み取り要求 (BusRd) がある場合、ブロックは同じ状態のままで、他のプロセッサが読み取れるようにデータをフラッシュ (Flush) します。スヌープされた書き込み要求 (BusRdX) では、他のプロセッサが書き込んでいるため、ブロックの状態は無効 (I) に変わり、データがフラッシュ (Flush) されるため、そのブロックの所有権は失われます。他のプロセッサがそのブロックにアクセスしようとすると、メモリにアクセスするのではなく、プロセッサは既に所有 (O) 状態のブロックを持っている他のキャッシュからそのブロックを取得します。BusUpgr では、状態が所有者 (O) から無効 (I) に変更されるだけです。[3]
MSIプロトコルとの比較
MSIプロトコルとMOSIプロトコル(バークレープロトコル[4]としても知られる)の明らかな違いは、 MOSIには変更された(M)状態に加えて、追加の状態(所有)が存在することです。
MSI プロトコルでは、変更済み (M) 状態のブロックへの読み取りミス要求があるたびに、ブロックの状態を共有済み (S) に変更しながらメイン メモリに書き戻します。ただし、追加の状態 (所有者) がある MOSI プロトコルの場合、別のプロセッサが読み取り操作を要求するたびに、ブロックは変更済みから所有済み (O) 状態に変わり、キャッシュのダーティ ブロックが保持されるため、すぐにメイン メモリに書き戻す必要がなくなります。
この遅延により、特定のトランザクション シーケンスでバス トラフィックとメイン メモリの書き込みを節約できます。たとえば、プロセッサ 1 のキャッシュが M で、プロセッサ 2 がそこから読み取り、プロセッサ 1 が再び書き込みを行う場合を考えてみましょう。MSI では、読み取りからのプロセッサ 1 の MS 遷移によって 1 つのメモリ書き込みが発生し、その後 SM 遷移によって BusUpgr が発生します。MOSI では、MO 遷移によってトラフィックは発生せず、OM 遷移によっても以前と同様に 1 つの BusUpgr が発生します。したがって、MOSI では、MSI が行う初期のメモリ書き戻しとそれに関連するバス トラフィックが不要になりました。
MESIプロトコルとの比較
MESI(イリノイとも呼ばれる)[4]とMOSIプロトコルはどちらも、異なる機能を改善するためのMSIプロトコルの拡張です。MOSIはライトバックの削減に重点を置き、MESIは他のプロセッサからの読み取りおよび書き込み要求後に必要となるバストランザクションの数を削減しようとします。MESIプロトコルの排他(E)状態は、キャッシュブロックが有効でクリーン(メインメモリと同じ値)であり、1つのキャッシュにのみキャッシュされていることを意味します。一方、MOSIプロトコルの所有(O)状態は、キャッシュブロックが有効で、潜在的にダーティで、書き込み可能であり、複数のキャッシュに存在する可能性がある(すべてのキャッシュが同じ値を持つ)ことを意味します。
参考文献
- ^ ソリン、ダニエル、ヒル、マーク、ウッド、デビッド (2011)。メモリの一貫性とキャッシュの一貫性の入門書。モーガン&クレイプール。pp. 119–122。ISBN 9781608455645。
- ^ Solihin, Yan (2016).並列マルチコアアーキテクチャの基礎。RC Press 、 Taylor & Francis Group。ISBN 9781482211184。
- ^ ab 「スヌープベースのキャッシュ一貫性プロトコルの評価」(PDF)。
- ^ ab Yang, Q.; Bhuyan, LN; Liu, B.-C. (1989). 「パケット交換マルチプロセッサのキャッシュコヒーレンスプロトコルの分析と比較」. IEEE Transactions on Computers . 38 (8): 1143–1153. doi :10.1109/12.30868.
