Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
プロセスへのメモリ割り当て(3) 実際に使うときにメモリを獲得するデマンドページング
Search
Satoru Takeuchi
PRO
July 13, 2024
Technology
1
150
プロセスへのメモリ割り当て(3) 実際に使うときにメモリを獲得するデマンドページング
以下動画のテキストです。
https://youtu.be/3mpurVs_8Sc
Satoru Takeuchi
PRO
July 13, 2024
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
Rook: Intro and Deep Dive With Ceph
sat
PRO
1
110
会社員しながら本を書いてきた知見の共有
sat
PRO
3
790
デバイスにアクセスするデバイスファイル
sat
PRO
1
38
ファイルシステムのデータを ブロックデバイスへの操作で変更
sat
PRO
1
32
デバイスドライバ
sat
PRO
0
49
マルチスレッドの実現方法 ~カーネルスレッドとユーザスレッド~
sat
PRO
2
120
共有メモリ
sat
PRO
3
71
マルチスレッドプログラム
sat
PRO
3
59
Linuxのブートプロセス initramfs編
sat
PRO
2
89
Other Decks in Technology
See All in Technology
AI エージェントと考え直すデータ基盤
na0
13
3.5k
B2C&B2B&社内向けサービスを抱える開発組織におけるサービス価値を最大化するイニシアチブ管理
belongadmin
2
7.3k
Claude Code に プロジェクト管理やらせたみた
unson
6
4.5k
DatabricksにOLTPデータベース『Lakebase』がやってきた!
inoutk
0
120
United™️ Airlines®️ Customer®️ USA Contact Numbers: Complete 2025 Support Guide
flyunitedguide
0
250
What’s new in Android development tools
yanzm
0
340
IPA&AWSダブル全冠が明かす、人生を変えた勉強法のすべて
iwamot
PRO
2
180
AWS CDK 開発を成功に導くトラブルシューティングガイド
wandora58
2
110
自律的なスケーリング手法FASTにおけるVPoEとしてのアカウンタビリティ / dev-productivity-con-2025
yoshikiiida
2
17k
ゼロからはじめる採用広報
yutadayo
3
970
関数型プログラミングで 「脳がバグる」を乗り越える
manabeai
2
200
Glacierだからってコストあきらめてない? / JAWS Meet Glacier Cost
taishin
1
170
Featured
See All Featured
Making Projects Easy
brettharned
116
6.3k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
It's Worth the Effort
3n
185
28k
Designing for Performance
lara
610
69k
Designing for humans not robots
tammielis
253
25k
The Art of Programming - Codeland 2020
erikaheidi
54
13k
The Language of Interfaces
destraynor
158
25k
Documentation Writing (for coders)
carmenintech
72
4.9k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
8
690
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
970
Transcript
プロセスへのメモリ割り当て(3) 実際に使うときにメモリを獲得する デマンドページング Jul. 10th, 2024 Satoru Takeuchi X: satoru_takeuchi
1
はじめに • 過去動画でmmapによってプロセスに物理メモリを割り当てると説明 ◦ 📝 過去動画「プロセスへのメモリ割り当て (1) mmap」 • デマンドページングという機能を使うと少し違った挙動をする
◦ mmapは、新たにmapした領域にプロセスからアクセス可能にするだけ ◦ 実際に物理メモリを割り当てるのは最初に使うとき ◦ メモリ使用量をおさえられる ◦ Linuxはデマンドページングを使っている • むずかしいので例によって図解 2
今回出てくる概念 • (おさらい) present bit ◦ ページに物理メモリが割り当てられているかを示すフラグ ◦ ページテーブルエントリごとに存在 •
vm_area_struct ◦ mmapした領域ごとに存在するカーネルが管理するデータ構造 ◦ ページテーブルとは別の領域 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 ページテーブル
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
デマンドページングが無い場合 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
デマンドページングがある場合 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
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 ここへのアクセス
ここで物理メモリ割り当て 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 ここへの初回アクセス
まとめ • デマンドページングによってメモリ使用量を抑えられる ◦ マップしたものの、まだ使ってない領域には物理メモリは割り当てられない • Linuxはデマンドページングを使っている • 実例は別動画で紹介 •
具体的にどのように実現しているのかも別動画で紹介 ◦ カーネルとCPUの連携によって実現 10