Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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