今さら聞けないマルチプロセッサの基礎教えます ――キャッシュの共有,割り込みの共有,OSによる制御
●○● Column ●○●
◆ライト・バック方式の場合のsnoop cashe利用法◆
ライト・バック方式の場合のsnoop cacheの利用法を,図A-1を使って説明します.
図A-1のキャッシュには,通常のライン情報(データが有効かどうか,データが修正されているかどうか)のほかに,データがほかのキャッシュと共有されているかどうかを表す情報が付加されています.この図の場合,はじめはCPU0とCPU1の両方のキャッシュに同じデータ「A」が共有されているので,両キャッシュとも該当するラインは「共有」の状態となっています.ここで,CPU0はAをA'に更新すると同時に,「Aを更新した」という情報をバスに流し,同時にラインの共有状態を取り下げます.CPU1のキャッシュはバスを監視しており,Aが更新されたことを検知して,自分の持っているAの乗っているラインを無効化し,かつラインの共有状態を取り下げます.
次にCPU1がAを読み出します.これはミス・ヒットとなるので,Aの読み出し要求がバスに送出されます.CPU0はA'のラインが修正済みかつ共有ではないという状態を示していることから最新のデータA'を持っていることになり,このA'の乗っているラインをCPU1のキャッシュに転送します.
このように,ライト・バック方式のキャッシュでsnoop cacheを構成する場合は,バスに対する処理要求(バス・トランザクション)として,通常の読み出し/書き込み要求のほかに,更新などの要求が加わります.また,キャッシュの制御に対しても,有効,修正のほかに,共有などの状態が各ラインに付加されます.これらのラインの状態が,通常のCPUからの読み出し/書き込み要求や,監視しているバスに送出された要求に応じて遷移していきます.これらのバス・トランザクションと状態遷移によって,キャッシュの一貫性を維持します.