キャッシュフラッシュ/無効化とは?きゃっしゅふらっしゅむこうか
キャッシュフラッシュ/無効化とは、キャッシュ上の更新分を主記憶へ書き戻す操作(クリーン、フラッシュ)と、キャッシュ行を無効にして次回は主記憶から読み直させる操作(インバリデート)の総称。DMAや他のバスマスタが主記憶を直接読み書きする構成で、CPUの見ている値と実メモリの値をそろえるためにソフトウェアから明示的に発行する。
最終更新:2026-10-06
エンベデッドSPを最短で暗記・合格する →背景
コヒーレンシを保つ回路を持たないMCUでは、DMAが主記憶を書き換えてもキャッシュには何も伝わらない。そのため送信前はクリーン、受信後はインバリデートを自分で入れないと、ビルド構成や実行タイミングによって動いたり動かなかったりする、最も追いにくい種類の不具合になる。ハードでコヒーレンシを取る回路を積むか、ソフトで明示操作するか、バッファ領域を非キャッシュ属性にして最初から対象外にするか——面積・電力と手間のトレードオフとして設計時に決めておく話であり、後から場当たりに入れる話ではない。
具体例
STM32H7のようなDキャッシュ付きCortex-M7では、イーサネットDMAへ送信バッファを渡す直前にSCB_CleanDCache_by_Addrを呼び、受信完了割込みの中でSCB_InvalidateDCache_by_Addrを呼ぶ。記述子領域のように頻繁に書き換わる小さな構造体は、MPUで非キャッシュ属性にして操作自体を要らなくする設計も広く採られる。
試験での引っ掛け
クリーンとインバリデートを取り違えると、送信で古いデータが出る/受信で古い値を読む、と症状が逆になる。インバリデートはキャッシュライン単位で効くため、ラインの一部にしかDMAが書かない配置だと同じライン上の隣接変数まで巻き添えで捨てられる——バッファはライン境界に整列させ、ライン長の倍数で確保する。ライトスルー構成なら書き戻しは不要でも、受信側の無効化は依然として必要。
関連用語
出典・参考
解説は資格暗記が独自に作成しています。過去問の出典は各問題に記載のとおりです。