Upgrade to Pro — share decks privately, control downloads, hide ads and more …

仮想アドレスから物理アドレスにはどうやって変換するの?

 仮想アドレスから物理アドレスにはどうやって変換するの?

以下動画のテキストです。
https://youtu.be/QfeiGO6tiOs

Satoru Takeuchi

June 15, 2024
Tweet

More Decks by Satoru Takeuchi

Other Decks in Technology

Transcript

  1. はじめに • はなすこと ◦ 仮想記憶のしくみでは仮想アドレスから物理アドレスにどうやって変換しているか • 📝 見ておくといい動画 ◦ 仮想記憶

    ~概念編~ ◦ 仮想記憶 ~確認編~ ◦ Linuxのメモリ管理入門 プロセスごとに違う世界を見せる仮想記憶 2
  2. アドレス変換にはページテーブルという変換表を使う 3 仮想アドレス 0 200 物理メモリ 0 プロセスのメモリ 500 600

    100 200 300 400 700 仮想アドレス 物理アドレス 0-100 500-600 100-200 600-700 カーネルのメモリ ページサイズ ページテーブル 100 ページテーブルエントリ 仮想アドレス
  3. 現実世界のページテーブル: x86_64の場合 • 全プロセスについて256TiBの仮想アドレス空間がある ◦ ページサイズは4KiB ◦ ページテーブルエントリのサイズは 8バイト •

    全ページ用のページテーブルエントリの個数は256TiB/4KiB=700億個弱 ◦ 1つのプロセスごとに8GiBのページテーブルが必要 • 疑問 ◦ 無駄が多すぎでは? ◦ 1つのシステムに数百個のプロセスがあるとするとメモリ足りないのでは ? 5
  4. • 例: 2階層 階層型ページテーブルのイメージ 7 仮想アドレス present bit 下位のページテーブル 0-400

    o 400-800 o 800-1200 x 1200-1600 x 1600-2000 x 2000-2400 x 2400-2800 x 2800-3200 x 仮想アドレス present bit 物理アドレス 0-100 o 400-500 100-200 o 500-600 200-300 o 700-800 300-400 o 1000-1100 仮想アドレス present bit 物理アドレス 400-500 o 1200-1300 500-600 x 600-700 x 700-800 x
  5. 現実世界のページテーブル: x86_64の場合(続き) • ページテーブルは4階層 ◦ PML4 (Page Map Level 4)

    ◦ PDPT (Page Directory Pointer Table) ◦ PD (Page Directory) ◦ PT (Page Table) • ほとんどのプログラムのメモリ使用量は256TiBよりはるかに小さい ◦ ページテーブルの容量もそれほど大きくならない 8
  6. まとめ • 仮想記憶では仮想アドレスと物理アドレスはページテーブルで変換している ◦ ページテーブルはカーネルメモリに存在 ◦ カーネルがページテーブルを用意して、 CPUがアドレス変換する • 現実世界では仮想アドレス空間はすごく広いが、ページテーブルはそれほど大きく

    ならない ◦ ページテーブルの階層化、ページテーブルの present bitのおかげ • 📝 プロセスの仮想アドレスがどの物理アドレスに結びついているのかを実際に確 認する動画を後日公開予定 9