MSIプロトコル

ライトバックキャッシュの場合、あるプロセサがキャッシュミスでメインメモリをアクセスした時に、そのアドレスの最新のデータはメインメモリには無く、最後に書き込みを行った別のプロセサのキャッシュに存在するという場合がある。

その場合は、キャッシュミスをしたプロセサがメインメモリからデータを読み込むと古いデータを読んでしまい矛盾が生じることになる。したがって、キャッシュミスが発生したプロセサはアクセスするメモリアドレスを他のすべてのプロセサにブロードキャスト(放送)し、そのアドレスのキャッシュラインを持っているかどうかを確認する(この手順をSnoop:スヌープという)必要がある。

また、マルチプロセサのコヒーレンシ維持のために、キャッシュラインの状態としてSharedという状態を追加する。Shared状態は、キャッシュの内容がメインメモリから読まれたままで変更されていないことを示す。つまり、先ず、メインメモリから読み込まれたキャッシュラインは、Shared状態となり、これを書き換えると、Modified状態になる。この方法では、キャッシュラインにはModified、SharedとInvalidの3つの状態があるので、これらの頭文字を並べてMSIプロトコルと呼ばれる。なお、プロトコルは外交儀礼という意味であるが、外交的な手続きから転じて、コンピュータなどのデータのやり取り手続きの規則の意味で使われている。

MSIプロトコルでは、Modified状態のキャッシュラインは、1つのプロセサのキャッシュの中にしか存在させない。ただし、これは1つのキャッシュラインアドレスに関してであり、アドレスAのModifiedのキャッシュラインがプロセサ0にある場合は、アドレスAのInvalid以外のキャッシュラインは他のプロセサのキャッシュには存在しないという意味であり、異なるアドレスBのModifiedのキャッシュラインが別のプロセサ1に存在することは差し支えない。

図9.5に示すように、MSIプロトコルでは、キャッシュラインにデータを書き込む場合は、(1)でそのキャッシュラインのデータをメモリから読み込み(すでにキャッシュに入っている場合は読み込みは不要)、次に、(2)で書き込みを行うキャッシュラインアドレスを他のプロセサにブロードキャストして、Shared状態のキャッシュラインを持っているプロセサにそのキャッシュラインの無効化を依頼する。

そして、(3)で他のプロセサから無効化が完了した(あるいは、そのキャッシュラインを持っていないので問題なし)という応答を受け取ってから、(4)で自分のキャッシュにデータを書き込んでModified状態とする。このように書き込みの前に、他のプロセサのキャッシュラインの状態をInvalidに変更するのでModified状態のキャッシュラインを持つプロセサは1つになる。

図9.5 MSIプロトコルでのデータの書き込み手順

そして、ロード命令でキャッシュミスした場合は、読み込むアドレスをブロードキャストし、他のプロセサに最新の書き換えられた状態のキャッシュラインが存在しないかどうかを確認する。そして、他のプロセサにModified状態のキャッシュラインが存在しない場合は、メモリからキャッシュにデータを読み込む。この場合、読み込んだキャッシュラインの内容はメモリの内容と同じであるので、Shared状態とする。

一方、Modified状態のキャッシュラインが他のプロセサに存在する場合は、メモリからデータを読んでしまうと古いデータを読むことになってしまう。このため、図9.6に示すようにMSIプロトコルでは、スヌープに続いて(2)でModifiedのキャッシュラインを持つプロセサがそのキャッシュラインの内容をメモリに書きだし、続いて、ロード命令でキャッシュミスを起こしたプロセサにメモリからの読み込みを指示して、(3)で読み込みを行わせる。このようにすると、キャッシュミスを起こしたプロセサは正しい最新の値を読むことができる。

この場合は、メモリに書きだしたキャッシュラインはメモリと内容が一致するので、その状態をModifiedからSharedに変更し、また、ロード命令に対してメモリから最新のデータを読んだプロセサのキャッシュラインもShared状態となり、同じキャッシュラインアドレスのShared状態のキャッシュラインが複数のプロセサに存在する状態になる。

図9.6 キャッシュミスに対してModifiedのキャッシュラインからメモリ経由でデータを転送

なお、MSIプロトコルの場合、Modifiedのキャッシュラインに書き込みを行う場合はそのアドレスのキャッシュラインは他のプロセサのキャッシュには存在しないことが保証されているので、この場合は、他のプロセサのキャッシュへのスヌープを省略して書き込みを行うことができる。