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
98
会社員しながら本を書いてきた知見の共有
sat
PRO
3
770
デバイスにアクセスするデバイスファイル
sat
PRO
1
33
ファイルシステムのデータを ブロックデバイスへの操作で変更
sat
PRO
1
29
デバイスドライバ
sat
PRO
0
45
マルチスレッドの実現方法 ~カーネルスレッドとユーザスレッド~
sat
PRO
2
120
共有メモリ
sat
PRO
3
67
マルチスレッドプログラム
sat
PRO
3
56
Linuxのブートプロセス initramfs編
sat
PRO
2
79
Other Decks in Technology
See All in Technology
AWS テクニカルサポートとエンドカスタマーの中間地点から見えるより良いサポートの活用方法
kazzpapa3
2
560
Welcome to the LLM Club
koic
0
190
Github Copilot エージェントモードで試してみた
ochtum
0
110
AWS アーキテクチャ作図入門/aws-architecture-diagram-101
ma2shita
30
11k
PHPでWebブラウザのレンダリングエンジンを実装する
dip_tech
PRO
0
210
解析の定理証明実践@Lean 4
dec9ue
0
180
2年でここまで成長!AWSで育てたAI Slack botの軌跡
iwamot
PRO
4
770
フィンテック養成勉強会#54
finengine
0
180
Amazon S3標準/ S3 Tables/S3 Express One Zoneを使ったログ分析
shigeruoda
4
550
低レイヤを知りたいPHPerのためのCコンパイラ作成入門 完全版 / Building a C Compiler for PHPers Who Want to Dive into Low-Level Programming - Expanded
tomzoh
4
3.3k
米国国防総省のDevSecOpsライフサイクルをAWSのセキュリティサービスとOSSで実現
syoshie
2
1.2k
AWS Organizations 新機能!マルチパーティ承認の紹介
yhana
1
110
Featured
See All Featured
How GitHub (no longer) Works
holman
314
140k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Typedesign – Prime Four
hannesfritz
42
2.7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
BBQ
matthewcrist
89
9.7k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Designing for Performance
lara
609
69k
Writing Fast Ruby
sferik
628
62k
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