コンピューティングでは、基本的なキャッシュ コヒーレンス プロトコルであるMSI プロトコルがマルチプロセッサ システムで動作します。他のキャッシュ コヒーレンス プロトコルと同様に、プロトコル名の文字はキャッシュ ラインが取り得る状態を識別します。
概要
MSI では、キャッシュ内に含まれる各ブロックは次の 3 つの状態のいずれかになります。
- 変更済み: ブロックはキャッシュ内で変更されています。キャッシュ内のデータは、バッキング ストア (メモリなど) と一致しません。ブロックが「M」状態のキャッシュは、ブロックが削除されたときに、そのブロックをバッキング ストアに書き込む責任があります。
- 共有: このブロックは変更されておらず、少なくとも 1 つのキャッシュに読み取り専用状態で存在します。キャッシュは、データをバッキング ストアに書き込まずに削除できます。
- 無効: このブロックは現在のキャッシュに存在しないか、バス要求によって無効化されており、このキャッシュにブロックを格納するにはメモリまたは別のキャッシュから取得する必要があります。 [1]
これらの一貫性状態は、キャッシュとバッキング ストア間の通信を通じて維持されます。ブロックが読み取られたり書き込まれたりする場合、または他のキャッシュがブロックの読み取りまたは書き込みを発行していることを認識すると、キャッシュは異なる責任を負います。
ブロックが「M」または「S」状態にある場合、キャッシュはデータを供給します。ブロックがキャッシュ内にない場合 (「I」状態)、キャッシュはブロックが他のキャッシュ内で「M」状態になっていないことを確認する必要があります。キャッシュ アーキテクチャによって、この処理方法は異なります。たとえば、バス アーキテクチャでは、読み取り要求がすべてのキャッシュにブロードキャストされるスヌーピングが頻繁に実行されます。他のアーキテクチャには、特定のキャッシュ ブロックのコピーが最後にどのキャッシュに含まれていたかを把握するエージェント (ディレクトリ) を持つキャッシュ ディレクトリが含まれます。別のキャッシュに「M」状態のブロックがある場合、そのデータをバックアップ ストアに書き戻して、「S」または「I」状態に移行する必要があります。いずれかの「M」ラインが書き戻されると、キャッシュはバックアップ ストアまたは「S」状態のデータを持つ別のキャッシュからブロックを取得します。その後、キャッシュは要求元にデータを供給できます。データを供給した後、キャッシュ ブロックは「S」状態になります。
ブロックが「M」状態にある場合、キャッシュはデータをローカルで変更します。ブロックが「S」状態にある場合、キャッシュは「S」状態のブロックを含む可能性のある他のキャッシュに、ブロックを削除する必要があることを通知する必要があります。この通知は、前述のように、バス スヌーピングまたはディレクトリを介して行われます。その後、データがローカルで変更される可能性があります。ブロックが「I」状態にある場合、キャッシュは「S」状態または「M」状態のブロックを含む可能性のある他のキャッシュに、ブロックを削除する必要があることを通知する必要があります。ブロックが「M」状態の別のキャッシュにある場合、そのキャッシュはデータをバックアップ ストアに書き込むか、要求元のキャッシュにデータを提供する必要があります。この時点でキャッシュにブロックがローカルにない場合は、キャッシュで変更される前に、ブロックがバックアップ ストアから読み取られます。データが変更されると、キャッシュ ブロックは「M」状態になります。
任意のキャッシュ ペアの場合、特定のキャッシュ ラインの許可される状態は次のとおりです。
ステートマシン

キャッシュへのプロセッサ要求には次のものがあります。
- PrRd: キャッシュ ブロックを読み取るためのプロセッサ要求。
- PrWr: キャッシュ ブロックを書き込むプロセッサ要求。

さらに、バス側のリクエストもあります。これには次のものが含まれます。
- BusRd: プロセッサのキャッシュで読み取りミスが発生すると、プロセッサはバス上で BusRd 要求を送信し、その返答としてキャッシュ ブロックを受信することを期待します。
- BusRdX: プロセッサのキャッシュで書き込みミスが発生すると、バス上で BusRdX 要求が送信され、キャッシュ ブロックが返され、他のプロセッサのキャッシュ内のブロックが無効になります。
- BusUpgr: プロセッサのキャッシュに書き込みヒットが発生すると、バス上で BusUpgr 要求が送信され、他のプロセッサのキャッシュ内のブロックが無効になります。
- フラッシュ: キャッシュブロック全体がメモリに書き戻されることを示す要求。[2]
状態遷移:
- 無効:
- PrRd では、BusRd が発行され、状態がSharedに変わります。
- PrWr では、BusRdX が発行され、状態がModifiedに変わります。
- BusRd、BusRdX、または BusUpgr では、無効なブロックはInvalid のままになります。
- 共有:
- PrRd では、ブロックはShared状態のままになります。
- PrWr では、BusUpgr が発行され、状態がModifiedに変わります。
- BusRd では、ブロックはShared状態のままになります。
- BusRdX または BusUpgr では、ブロックはInvalidに遷移します。
- 変更:
- PrRd または PrWr の場合、ブロックは変更された状態のままになります。
- BusRd では、キャッシュ ブロックがバスにフラッシュされ、状態がSharedに変わります。
- BusRdXでは、キャッシュブロックがバス上にフラッシュされ、状態がInvalidに変わります。[2]
- BusUpgr は不可能です。Modified 状態はどのプロセッサでも許可されないか、1 つのプロセッサのみで許可されるため、キャッシュ ブロックが特定のプロセッサで Modified 状態にある場合、他のすべてのプロセッサでは Invalid 状態である必要があります。これにより、バス上の BusUpgr の可能性が実質的に否定されます。BusUpgr では、上記のように PrWr を発行するプロセッサの 1 つでこのブロックがShared状態である必要があります。
使用法
このプロトコルはSGI 4Dマシンで使用されているプロトコルに似ています。[3]
バリエーション
最新のシステムでは、コヒーレンシ相互接続のトラフィック量を削減するために、MSI プロトコルのバリアントを使用しています。MESIプロトコルは、「排他」状態を追加して、1 つのキャッシュにのみ存在するブロックの書き込みによって発生するトラフィックを削減します。MOSIプロトコルは、「所有」状態を追加して、他のキャッシュによって読み取られるブロックの書き戻しによって発生するトラフィックを削減します。MOESIプロトコルは、これら両方のことを行います。
参照
参考文献
- ^ Fuchsen, R. (2010-10-01). 「マルチコアベースの IMA プラットフォームの認証への対応方法: 現状と潜在的な解決策」.第 29 回デジタル アビオニクス システム カンファレンス. pp. 5.E.3–1-5.E.3-11. doi :10.1109/DASC.2010.5655461. ISBN 978-1-4244-6616-0.S2CID 16461614 。
- ^ ab Solihin, Yan (2016).並列マルチコアアーキテクチャの基礎。Chapman & Hall/CRC 計算科学シリーズ。
- ^ Suh, Taeweon (2006 年 12 月)。「マルチプロセッサ SoC 向けキャッシュ コヒーレンス プロトコルの統合と評価」(PDF)。
