キャッシュコヒーレンシとは?きゃっしゅこひーれんし
キャッシュコヒーレンシとは、複数のプロセッサがそれぞれキャッシュを持ちながら主記憶を共有するとき、同じアドレスに対して各キャッシュが矛盾した値を持たないよう保つこと。MESIなどのプロトコルがハードウェアで無効化または更新を行い、他コアが書いた最新値を読ませる。
最終更新:2026-10-06
この語が出る過去問を解く →背景
キャッシュは各コアが自分専用に持つ写しであり、写しが増えれば原本との食い違いが必ず起きる。単一コアなら書き戻しの順序を守るだけで済んだ問題が、コアが増えた途端に「誰の写しが正しいか」という調停の問題に変わった。組込みでマルチコアやDMAを使う設計では、この調停をハードウェアがどこまで面倒を見るかが製品ごとに違う。見てくれない範囲を把握していないと、単体では動くのに実機で稀に値が古いという再現困難な不具合を抱え込む。
具体例
STM32H7のようにD-Cacheを持つマイコンでDMA転送を使う場合、DMAが書き込んだ領域は読む前にキャッシュを無効化し、DMAに読ませる領域は転送前にキャッシュをクリーンする必要がある。CMSISのSCB_InvalidateDCacheやSCB_CleanDCacheを、転送の前後に正しい向きで置くのが定石になる。
試験での引っ掛け
一貫性の破壊要因はマルチコアだけではなく、DMAや外部バスマスタも同じ問題を起こす。無効化とクリーンは向きが逆で、取り違えると書いたデータを捨てるか古いデータを読むかのどちらかになる。コヒーレンシが保たれることとメモリ順序(アクセスの見える順番)が保証されることは別で、後者にはメモリバリアが要る。
関連用語
出た過去問
出典:平成28年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問1(IPA)解説で登場
図に示すマルチプロセッサシステムにおいて、各MPUのキャッシュメモリの内容を正しく保つために、共有する主記憶の内容が変化したかどうかを監視する動作はどれか。
正解:バススヌープ
要点:バススヌープは共有バス監視でキャッシュ一貫性を保つ
複数のプロセッサがそれぞれキャッシュを持って主記憶を共有すると、あるプロセッサが書き換えた内容が他方の古いキャッシュに残り、内容が食い違うおそれがある。そこで各キャッシュ制御部が共有バス上のアドレスやトランザクションを常時見張り、自分が保持している行に関わる書込みを検知したら無効化や更新を行う。この監視動作がバススヌープで、キャッシュコヒーレンシを保つ基本的な手法である。
出典:平成30年度 春期 エンベデッドシステムスペシャリスト試験 午前Ⅱ 問2(IPA)解説で登場
図に示すマルチプロセッサシステムにおいて、各MPUのキャッシュメモリの内容を正しく保つために、共有する主記憶の内容が変化したかどうかを監視する動作はどれか。
正解:バススヌープ
要点:バススヌープはバス監視でキャッシュ整合性を保つ動作
複数のMPUがそれぞれキャッシュをもって主記憶を共有すると、あるMPUが書き換えたデータが他方のキャッシュに古いまま残るキャッシュコヒーレンシの問題が起きる。これを防ぐため、各キャッシュ制御回路が共有バス上のアドレスとアクセス種別を常時監視し、自分が保持する行に関係する書込みを見つけたら該当行を無効化または更新する。この監視動作をバススヌープ(スヌーピング)と呼ぶ。
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。