仮想記憶:論理アドレスが物理に化ける
論理アドレスを ページ番号 + オフセット に分解し、ページテーブル(と TLB)を通して物理アドレスへ変換する流れを、手で動かして追います。
421
64 B
論理アドレスのビット分解(全 10 bit = 1 KiB 仮想空間)
■ ページ番号(上位ビット)と
■ オフセット(下位 6 bit)に分かれます。
ページ番号 p
—
オフセット d
—
物理フレーム f
—
物理アドレス
—
TLB 判定
—
アクセス時間(相対)
—
TLB(変換ルックアサイドバッファ)
アドレス変換の流れ(赤い経路が今回たどった道)
プログラムが触る論理アドレスは、そのままメモリ番地になるわけではありません。CPU はアドレスを上位の
ページ番号 p と下位のオフセット d に切り分け、ページテーブルで
「ページ p は物理フレーム f にある」と引き直してから、
毎回テーブルを引くと遅いので、直近の変換を覚えておく小さなキャッシュが TLB です。 TLB ヒットなら一瞬で、TLB ミスならテーブルまで降りて変換します。 スライダーでアドレスとページサイズを変え、どこで「化ける」かを追ってみましょう。
物理 = f × ページサイズ + d を組み立てます。毎回テーブルを引くと遅いので、直近の変換を覚えておく小さなキャッシュが TLB です。 TLB ヒットなら一瞬で、TLB ミスならテーブルまで降りて変換します。 スライダーでアドレスとページサイズを変え、どこで「化ける」かを追ってみましょう。
いま何が起きている?
ここがポイント
- p = ⌊論理 ÷ ページサイズ⌋, d = 論理 mod ページサイズ ── 上位=ページ番号、下位=オフセット。
- オフセット d は変換で変わらない。化けるのはページ番号 p → フレーム f の部分だけ。
- 物理 = f × ページサイズ + d。テーブルが p ごとに f を対応づける。
- TLB ヒットは速くミスは遅い。よく使うページほどヒットし、変換コストが下がる。