キャッシュの更新
次のシステムのメモリアクセスを考える。
- 1次キャッシュ (命令キャッシュとデータキャッシュ)
- 2次キャッシュ (命令とデータの区別無し)
- 外部メモリ
1次データキャッシュに存在する場合、その値をCPUに返す。
1次データキャッシュに存在せず、2次キャッシュに存在する場合、その値をCPUに返し、1次データキャッシュにコピーする。
1次データキャッシュと2次キャッシュに存在せず、外部メモリに存在する場合、その値をCPUに返し、1次データキャッシュと2次キャッシュにコピーする。
ライトスルーとライトバック
キャッシュラインにコピーするアロケーションと、削除するエビクションがある。
エビクションには、ランダムに削除、順番に削除、最古のデータを削除する方法がある。
キャッシュに書き込む時、外部メモリにも書き込む方式をライトスルーと呼ぶ。
回路は単純だが、メモリアクセスが多発すると性能が著しく低下する。
キャッシュを削除する時、外部メモリに書き込む方式をライトバックと呼ぶ。
回路は複雑だが、メモリアクセスが多発しても性能は殆ど低下しない。
キャッシュの性質と弱点
投機的プリフェッチは、近い将来アクセスする確率の高いデータを事前に読み込む。
例えば、0x8000、0x8020、0x8040にアクセスした場合、0x8060にアクセスする確率は非常に高い。
また、memsetなどのキャッシュを汚染する関数を検知し、キャッシュの更新を一時的に止める。
キャッシュを支えるのは時間的局所性と空間的局所性であり、局所性の低いアプリケーションには効果が薄い。
キャッシュミスが多発する場合は、性能を低下させることもある。
仮想メモリ
アプリケーションは仮想メモリを使用し、物理メモリを認識しない。
物理メモリが3GBで仮想メモリが4GBの場合、不足分はHDDに割り当てられる。
ハイパーバイザーが複数のゲストOSを管理する場合、独自のページテーブルを使用し異なるアドレス空間を提供する。
ゲストOSのページテーブル、ハイパーバイザーのページテーブルの2段階変換を行い、真の物理アドレスを得る。