MESIプロトコルの概要
MESIプロトコルは、マルチプロセッサシステムにおける
キャッシュコヒーレンシとメモリの一貫性を維持するための重要なプロトコルであり、特にライトバックキャッシュと共に広く使用されています。このプロトコルは、
イリノイ大学アーバナ・シャンペーン校で開発されたことから、イリノイ・プロトコルとも呼ばれています。
MESIの状態
このプロトコルは、各キャッシュラインが以下の4つの状態(Modified、Exclusive、Shared、Invalid)のいずれかに設定されることにより、メモリの一貫性を構築します。これらの状態は、2
ビットで示されます。
- - M (Modified): キャッシュだけに存在し、主記憶の値とは異なる。その他のCPUがこのラインを読み取る前に、主記憶にデータを書き戻す必要があります。
- - E (Exclusive): キャッシュのみで存在し、主記憶上の値と一致しています。
- - S (Shared): 他のキャッシュにも同じラインが存在し、主記憶の値とも一致しています。
- - I (Invalid): このキャッシュラインは無効です。
動作の原理
一般的なシステムでは、複数のキャッシュが主メモリに接続されたバスを共有しており、各
CPUがリードやライトの要求を出す仕組みです。システム全体として、主記憶へのアクセスを減少させることを目的としています。Invalid状態以外のキャッシュラインに対してはリード要求が可能ですが、Invalid状態の場合は主メモリから新たにデータを読み込む必要があります。
ライト要求の実行は、ModifiedまたはExclusive状態のラインでのみ許可され、Shared状態の場合には他のキャッシュのラインをInvalidにするためにブロードキャストが必要です。この過程は「Read For Ownership (RFO)」と呼ばれています。
キャッシュラインの状態は動的であり、Modified状態やExclusive状態のラインは任意のタイミングで無効にされることが可能です。しかし、Modified状態のラインは必ず主記憶にデータを書き戻す必要があります。
さらに、Modified状態のキャッシュラインを持つキャッシュは、バス上のデータフローを監視して、主記憶のリード要求をインターセプトし、Shared状態へと変更します。Shared状態のラインも、他の
CPUによる無効化要求を受け取ることでInvalid状態に遷移します。
Read For Ownership (RFO)
RFOは
キャッシュコヒーレンシプロトコルの操作の一種で、リードと無効化ブロードキャストを統合したものです。これは、特定のキャッシュラインへ書き込みを行う際、当該ラインがSharedまたはInvalid状態である場合に発生します。この操作によって、他のすべてのプロセッサの該当ラインはInvalidに設定されます。
代替プロトコル
MESIプロトコルの他にも、MSI、MOSI、MOESIといった異なるキャッシュプロトコルが存在します。MSIプロトコルはExclusive状態を持たず、Invalid状態のラインにリードする際に他のキャッシュの状態を考慮しなければなりません。MOSIプロトコルはExclusive状態の代わりにOwned状態を持ち、最後にMOESIプロトコルはOwned状態を組み込んでいます。
これらのプロトコルは、それぞれ異なった設計哲学と動作原理を持ちながら、最終的な目的はキャッシュの一貫性を維持し、システムパフォーマンスを向上させることにあります。
まとめ
MESIプロトコルは、現代のマルチプロセッサシステムにおいて重要な役割を果たしています。このプロトコルは、キャッシュの状態を適切に管理することで、メモリの整合性を保ち、多くの
CPUが同時にデータにアクセスする際の競合を最小限に抑えることに貢献しています。