Slide 1

Slide 1 text

プロセスへのメモリ割り当て(3) 実際に使うときにメモリを獲得する デマンドページング Jul. 10th, 2024 Satoru Takeuchi X: satoru_takeuchi 1

Slide 2

Slide 2 text

はじめに ● 過去動画でmmapによってプロセスに物理メモリを割り当てると説明 ○ 📝 過去動画「プロセスへのメモリ割り当て (1) mmap」 ● デマンドページングという機能を使うと少し違った挙動をする ○ mmapは、新たにmapした領域にプロセスからアクセス可能にするだけ ○ 実際に物理メモリを割り当てるのは最初に使うとき ○ メモリ使用量をおさえられる ○ Linuxはデマンドページングを使っている ● むずかしいので例によって図解 2

Slide 3

Slide 3 text

今回出てくる概念 ● (おさらい) present bit ○ ページに物理メモリが割り当てられているかを示すフラグ ○ ページテーブルエントリごとに存在 ● vm_area_struct ○ mmapした領域ごとに存在するカーネルが管理するデータ構造 ○ ページテーブルとは別の領域 3

Slide 4

Slide 4 text

それぞれの関係 4 物理メモリ 仮想アドレス空間 0 100 200 プロセスのメモリ 500 600 700 未マップ領域 仮想アドレス present bit 物理アドレス 0-100 〇 500-600 100-200 〇 600-700 200-300 × vm_area_struct 範囲 0-200 ページテーブル

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

デマンドページングが無い場合 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

Slide 7

Slide 7 text

デマンドページングがある場合 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

Slide 8

Slide 8 text

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 ここへのアクセス

Slide 9

Slide 9 text

ここで物理メモリ割り当て 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 ここへの初回アクセス

Slide 10

Slide 10 text

まとめ ● デマンドページングによってメモリ使用量を抑えられる ○ マップしたものの、まだ使ってない領域には物理メモリは割り当てられない ● Linuxはデマンドページングを使っている ● 実例は別動画で紹介 ● 具体的にどのように実現しているのかも別動画で紹介 ○ カーネルとCPUの連携によって実現 10