キャッシュが扱うアドレスは物理アドレスか仮想アドレスか
仮想アドレス方式(仮想キャッシュ)
- ヒット時はTLBを通さなくていい
- ミスすると主記憶のアドレスを得るためにTLBを利用する
- CPUが実行するプロセスを切り替えると仮想アドレス空間が切り替わってしまうのでキャッシュの内容が無意味になる
- →ヒットしないとかなり効率が落ちる
物理アドレス方式(物理キャッシュ)
- 物理アドレスの方が一般的
- アクセスは必ずTLBを通してアドレス変換した上で行う
- →命令やデータがキャッシュにあってもTLBミスによって主記憶へのアクセスが起きることがある
構成その1(PIPT:直列構成)
仮想アドレス→TLBで変換→物理アドレス→キャッシュ
TLBの結果を待ってからキャッシュを引くのでレイテンシが増える
構成その2(VIPT:並列構成)
ページ内オフセット(アドレス変換の対象外)の中にキャッシュのライン番号とライン内オフセットが収まるように設計する
→キャッシュのライン番号だけ先に索引を開始しつつ、同時にTLBも引く
TLBから物理ページ番号が返ってきたら、キャッシュから読み出したタグと比較する
TLB待ちを隠蔽できるのでL1キャッシュでよく使われる
仮想記憶の他の機能として別プロセスからメモリを隠蔽する保護機能や仮想メモリ>物理メモリを実現する機能を実現する
ハードディスク時代にはスラッシングが深刻だった
基本的にはハーバード・アーキテクチャやキャッシュ内に命令を読み出す部分がある想定、アウトオブオーダーは想定しないでいい
TLBに関する問題も出るかも(その2の方)
分岐の遅延スロットは2つらしい
命令スケジューリングとかなら1かも
データハザードは最小限になるように配置しないといけない
フォワーディングは次のクロックでのみ可能(レジスタを経由する場合はその限りではない)
フォワーディング
EXEX
MAEX
MAMA
キャッシュミスの効果の例
多段ページテーブル
- パイプライン
- キャッシュ
- 仮想子奥