Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

プロセスへのメモリ割り当て(3) 実際に使うときにメモリを獲得するデマンドページング

プロセスへのメモリ割り当て(3) 実際に使うときにメモリを獲得するデマンドページング

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

Satoru Takeuchi

July 13, 2024
Tweet

More Decks by Satoru Takeuchi

Other Decks in Technology

Transcript

  1. はじめに • 過去動画でmmapによってプロセスに物理メモリを割り当てると説明 ◦ 📝 過去動画「プロセスへのメモリ割り当て (1) mmap」 • デマンドページングという機能を使うと少し違った挙動をする

    ◦ mmapは、新たにmapした領域にプロセスからアクセス可能にするだけ ◦ 実際に物理メモリを割り当てるのは最初に使うとき ◦ メモリ使用量をおさえられる ◦ Linuxはデマンドページングを使っている • むずかしいので例によって図解 2
  2. 今回出てくる概念 • (おさらい) present bit ◦ ページに物理メモリが割り当てられているかを示すフラグ ◦ ページテーブルエントリごとに存在 •

    vm_area_struct ◦ mmapした領域ごとに存在するカーネルが管理するデータ構造 ◦ ページテーブルとは別の領域 3
  3. それぞれの関係 4 物理メモリ 仮想アドレス空間 0 100 200 プロセスのメモリ 500 600

    700 未マップ領域 仮想アドレス present bit 物理アドレス 0-100 〇 500-600 100-200 〇 600-700 200-300 × vm_area_struct 範囲 0-200 ページテーブル
  4. mmapを発行すると… 5 物理メモリ 仮想アドレス空間 0 100 200 プロセスのメモリ 500 600

    700 未マップ領域 仮想アドレス present bit 物理アドレス 0-100 〇 500-600 100-200 〇 600-700 200-300 × vm_area_struct 範囲 0-200 ページテーブル ここを新たにマップしたとする 300
  5. デマンドページングが無い場合 mmap時にメモリマップ更新&物理メモリ割り当て 6 物理メモリ 仮想アドレス空間 0 100 200 プロセスのメモリ 500

    600 700 未マップ領域 仮想アドレス present bit 物理アドレス 0-100 〇 500-600 100-200 〇 600-700 200-300 〇 800-900 vm_area_struct 範囲 0-300 ページテーブル プロセスのメモリ 800 900 300
  6. デマンドページングがある場合 mmap時にメモリマップ更新&物理メモリは割り当てない 7 物理メモリ 仮想アドレス空間 0 100 200 プロセスのメモリ 500

    600 700 未マップ領域 仮想アドレス present bit 物理アドレス 0-100 〇 500-600 100-200 〇 600-700 200-300 × - vm_area_struct 範囲 0-300 ページテーブル 300
  7. mmapした領域への初回アクセス時 8 物理メモリ 仮想アドレス空間 0 100 200 プロセスのメモリ 500 600

    700 未マップ領域 仮想アドレス present bit 物理アドレス 0-100 〇 500-600 100-200 〇 600-700 200-300 × - vm_area_struct 範囲 0-300 ページテーブル 300 ここへのアクセス
  8. ここで物理メモリ割り当て 9 物理メモリ 仮想アドレス空間 0 100 200 プロセスのメモリ 500 600

    700 未マップ領域 仮想アドレス present bit 物理アドレス 0-100 〇 500-600 100-200 〇 600-700 200-300 〇 800-900 vm_area_struct 範囲 0-300 ページテーブル プロセスのメモリ 800 900 300 ここへの初回アクセス