OSとハードウェア
キャッシュの一貫性をハードウェアが保たない(非コヒーレントな)システムで、装置がDMAで主記憶に書き込んだデータをCPUが読む前に、ソフトウェアが行う必要のある処理はどれか。
- ACPUのクロック周波数を一時的に下げる
- B該当する範囲のキャッシュの内容を無効にして、主記憶から読み直すようにする
- Cキャッシュの内容をすべて主記憶に書き戻してから、DMAで届いた結果を破棄する
答えと解説を見る
正解:B. 該当する範囲のキャッシュの内容を無効にして、主記憶から読み直すようにする
DMAはCPUを通さずに装置と主記憶の間でデータを転送するため、ハードウェアが一貫性を保たないシステムでは、CPUのキャッシュにはその範囲の古いデータが残っていることがあります。そのまま読むと、DMAで届いた新しいデータではなく古い値を読んでしまいます。そこでドライバは、読む前にその範囲のキャッシュを無効にして、主記憶から新しい値を読ませます。逆に装置に送るデータは、DMAを始める前にキャッシュから書き戻しておきます。
- A. クロック周波数は一貫性と関係ありません。
- B. 正しい。古いキャッシュの内容を無効にして、新しいデータを読ませます。
- C. DMAの結果を破棄してしまっては意味がありません。