キャッシュ方式 3つのマッピングまとめ
主記憶アドレスは各方式で以下の3つに分割される:
アドレス = タグ + ライン番号(またはセット番号) + オフセット
| 方式 | 連想度 | セット数 | 1セットあたりのライン数 |
|---|---|---|---|
| ダイレクトマップ | 1 | 総ライン数 | 1 |
| N-wayセットAS | N | 総ライン数÷N | N |
| フルアソシアティブ | 総ライン数 | 1 | 総ライン数 |
ダイレクトマップ方式
- アドレス:
| タグ | ライン番号 | オフセット | - ライン番号でキャッシュ上の格納先が固定1対1で決まる
- そのラインに保存されたタグとアドレスのタグ部を比較 → 一致ならヒット
- 欠点: キャッシュの1ラインが複数の主記憶ラインで固定的に共有されるため、空いていても使えないケースがある
- 利点: HW構成が単純・高速
フルアソシアティブ方式
- アドレス:
| タグ | オフセット | - タグにライン番号全体を格納(ライン番号による絞り込みなし)
- キャッシュの全タグを並列に同時比較 → 一致すればヒット
- 使用効率は高いが、全タグを並列検索する回路が必要(HWコストが高い)
セットアソシアティブ方式(Nウェイ)
- アドレス:
| タグ | セット番号 | オフセット | - セット番号で該当セットを特定 → セット内のN本のタグを並列比較
- ダイレクトマップとフルアソシアティブの折衷案、最もよく使われる
- セット数=1 ならフルAS、1ウェイならダイレクトマップ
メモリへの書き込み
今までは読み出しについて考えていた
読み出しではメモリの内容をコピーするだけだからキャッシュが消えても問題ない
書き込みを行うときにキャッシュか主記憶の一方にのみ書き込むと1つのアドレスに対して2つの値が存在することに
→古い値を使ったりキャッシュの追い出しで最新の値を失う可能性
ライトスルー
- キャッシュと主記憶の療法に書き込む
- キャッシュミスした場合には直接主記憶(L2)に書き込む
→主記憶(L2)に必ず最新の値が存在する
ラインを追い出すときにその内容は直ちに破棄する
書き込みが書き込みがすごく遅くなるがライトバッファ(専用HW)によって改善する
書き込みが終わる前にそのデータがまた欲しくなったらライトバッファに直接アクセスする
バッファがいっぱいになったらストールしてしまう
ライトバック
- キャッシュの各ラインにダーティビットを置く
- キャッシュヒットした書き込みはキャッシュに書き込んでダーティビットを1にする
- ミスした場合は一般に主記憶をキャッシュに転送したあとキャッシュにのみ書き込んでダーティビットを1にして置く
- ダーティビットが1のラインを追い出すときには内容を主記憶に書き戻す
→複数回書き込んだとしても主記憶への書き込みは追い出されるときだけ
ハードは比較的複雑
ラインの置き換え
主記憶からキャッシュへラインを転送したり格納したりするとき、利用できる空きラインがあればそれを使うが、空きがない場合はどれかを追い出して新しいライン内容で置き換える
- ダイレクトマップの場合主記憶とキャッシュラインの対応が1対1なので追い出すものは確定
- フルアソシアティブの場合は全ラインが追い出し候補
- セットアソシアティブの場合はセット内すべてのラインが追い出し候補
何を置き換えるか?
- ランダム
- FIFO(First-in First-out)
- 比較的簡単な回路、順番にラインを使用すればいい
- LEU(Least Reasently Used)
- 時間的局所性に従っている
- 2~4ウェイを超えると急に複雑になってしまう
- 近似LRU
- 使用ビットを書くラインに置いてアクセスがあったら1にする
- 使用ビットが0のものからランダムに選択
L1やL2はコアごとに置いてL3は共有するs
仮想記憶
仮想記憶がないとメモリ領域を切り分けるのは大変
また、他のプロセスのメモリが見えて危ない、OSレベルのプログラムも改ざんされるかも
仮想記憶の構成
- 物理アドレス空間
- マシンに1つ
- プログラムからは隠蔽される
- 仮想アドレス空間
- プログラムごとに1つ
- アドレス変換
- 物理アドレスと仮想アドレスを変換
変換テーブルを持っておくことででのメモリアクセスを可能にする
メモリ管理ユニットMMUをCPUとキャッシュ/主記憶の間に置いておく
ページング方式
仮想記憶の実現方法
仮想メモリと物理メモリの対応付はページ単位で行う(キャッシュのラインみたいな)
サイズは4KBとか256KBとか
→ある程度まとめてアクセスした方が空間的局所性の恩恵を受けられる
ページと物理メモリのアドレスを対応付けたページテーブルを用意する