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
メモリマップトファイル
Search
Satoru Takeuchi
PRO
October 18, 2025
260
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
メモリマップトファイル
以下動画のスライドです
https://youtu.be/x8oS9mSCZtI
Satoru Takeuchi
PRO
October 18, 2025
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
Machine Check Exception
sat
PRO
2
35
バイナリダンプの模様を読む
sat
PRO
0
68
cpコマンドはディスク上でデータを コピーしないことがある
sat
PRO
3
54
114-ファイルのshallow_copy.pdf
sat
PRO
2
38
113-Btrfsのスナップショット.pdf
sat
PRO
0
16
システム強制終了時にファイルシステムの整合性を保つ~ コピーオンライト編 ~
sat
PRO
0
59
システム強制終了時に ファイルシステムの整合性を保つ ~ ジャーナリング編 ~
sat
PRO
2
63
ファイルシステムの整合性を回復するfsck
sat
PRO
1
65
小学校5,6年生向けキャリア教育 大人になるまでの道
sat
PRO
8
5.3k
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
141
7.6k
Into the Great Unknown - MozCon
thekraken
41
2.6k
GitHub's CSS Performance
jonrohan
1033
470k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Code Review Best Practice
trishagee
74
20k
Evolving SEO for Evolving Search Engines
ryanjones
0
240
Faster Mobile Websites
deanohume
310
32k
Ruling the World: When Life Gets Gamed
codingconduct
0
280
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
340
Design in an AI World
tapps
1
260
Rails Girls Zürich Keynote
gr2m
96
14k
Balancing Empowerment & Direction
lara
6
1.2k
Transcript
メモリマップトファイル Oct. 18th, 2025 Satoru Takeuchi X: satoru_takeuchi 1
メモリマップトファイルとは • ファイルを読み書きする方法の一つ • read(),write()システムコールではなくmmap()システムコールを使う • 📝 mmapシステムコールといえば… ◦ 過去動画:
その75 プロセスへのメモリ割り当て (1) 2
mmap()を発行 3 仮想アドレス空間 物理メモリ ストレージデバイス プロセスのメモリ ファイルのデータ 仮想アドレス空間上の領域を ファイル上の領域と結びつける
読み出し 4 仮想アドレス空間 物理メモリ ストレージデバイス プロセスのメモリ ファイルのデータ ページキャッシュ 2. ページキャッシュに
コピー 1. メモリ読み出しアクセス 3. ページキャッシュ から読み出し
書き込み時 5 仮想アドレス空間 物理メモリ ストレージデバイス プロセスのメモリ ファイルのデータ ページキャッシュ 後で書き込み 1.メモリアドレスに書き込み
更新されたデータ 更新されたデータ 2.ページキャッシュに書き 込み
メモリマップトファイルの活用例 • 実行ファイルやライブラリは仮想アドレス空間にマップされている • デマンドページングによりメモリ使用量は最小限に抑えられる ◦ プログラム起動時、ライブラリ読み出し時は即座にメモリを消費するわけではない ◦ 実際にそれらにアクセスしたときにページキャッシュに読み出されてメモリを消費する 6
$ cat /proc/self/maps … 626927c4c000-626927c51000 r-xp 00002000 08:02 2492037 /usr/bin/cat … 7f9f59a28000-7f9f59bb0000 r-xp 00028000 08:02 2497229 /usr/lib/x86_64-linux-gnu/libc.so.6 …
cat起動時にmmap()を呼んでいる様子 • 📝 mmap()を呼んでいるのはcat本体ではなくld.soというライブラリ ◦ そのうち動画で説明するかも • 📝 catの実行ファイルをメモリマップする処理はカーネルが実施するのでstraceに は現れない
7 $ strace -o out.txt cat /proc/self/maps … $ cat log.txt … openat(AT_FDCWD, "/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3 … mmap(0x73acc0028000, 1605632, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x28000) = 0x73acc0028000 …
まとめ • mmap(): メモリアクセスによってファイルにアクセスする方法 ◦ read,write: 読み書きするごとにシステムコールを発行 • 実行ファイルやライブラリは仮想アドレス空間にマップされている 8