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
Linuxのメモリ管理入門 プロセスごとに違う世界を見せる 仮想記憶
Search
Satoru Takeuchi
PRO
November 30, 2023
Technology
1
93
Linuxのメモリ管理入門 プロセスごとに違う世界を見せる 仮想記憶
以下動画のテキストです
https://youtu.be/hd08SJyrBgM
Satoru Takeuchi
PRO
November 30, 2023
Tweet
Share
More Decks by Satoru Takeuchi
See All by Satoru Takeuchi
KubeConにproposalを送りたい人へのアドバイス
sat
PRO
3
300
俺とキャンプ2
sat
PRO
1
110
俺とキャンプ3
sat
PRO
0
88
データ冗長化のしくみRAID 基礎概念とRAID1編
sat
PRO
2
42
RAIDの実現方法
sat
PRO
2
83
Linux環境のCPU上で10ミリ秒間に起こること
sat
PRO
3
130
HDDへのアクセス速度は位置によって変わる!??
sat
PRO
4
69
ボリュームマネージャLVM
sat
PRO
2
94
Best Practices of Production-Grade Rook/Ceph Cluster
sat
PRO
1
2.2k
Other Decks in Technology
See All in Technology
Platform Engineering on Serverless
_kensh
3
440
Oracle Database Technology Night #79 - Oracle Database 23ai 新機能 Oracle Advanced Cluster File System (ACFS)
oracle4engineer
PRO
1
130
GitHub Copilotと快適なユニットテストコード作成生活
bun913
8
3.5k
Building Static Websites with Sculpin
opdavies
0
1.3k
Databricksにおける生成AIの取り組み
taka_aki
1
150
JAWS-UGの楽しみ方
schwrzktz
1
260
その失敗から何を学ぶ?不確実性をマネジメントして目標達成するための心得 #webtan
aki_iinuma
7
2.2k
SONiCスイッチを商用サービスに入れてみた(三井情報株式会社)
sonic
0
190
オープンソースのロボットソフトウェア「ROS」で地図作成を試してみた
miura55
0
150
Mutation Testingを活用して テスト品質を考える /introduction to mutation testing
kakehashi
3
380
240524「開発生産性を、もっと誇れる組織へ」という方針を 9ヶ月前に掲げたCTOの振り返り
msykd
PRO
0
440
第34回 中国地方DB勉強会 in 広島_Why DBRE?
tomomo
7
1.7k
Featured
See All Featured
Designing for Performance
lara
603
67k
Robots, Beer and Maslow
schacon
PRO
155
8k
Fashionably flexible responsive web design (full day workshop)
malarkey
399
65k
Imperfection Machines: The Place of Print at Facebook
scottboms
261
12k
A Modern Web Designer's Workflow
chriscoyier
689
190k
Documentation Writing (for coders)
carmenintech
60
4k
Happy Clients
brianwarren
92
6.4k
Designing the Hi-DPI Web
ddemaree
276
33k
Building Applications with DynamoDB
mza
88
5.7k
Why Our Code Smells
bkeepers
PRO
331
56k
What the flash - Photography Introduction
edds
64
11k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
Transcript
Linuxのメモリ管理入門 プロセスごとに違う世界を見せる 仮想記憶 Nov. 30th, 2023 Satoru Takeuchi twitter: satoru_takeuchi
Linuxカーネルはメモリをページ単位で管理する • x86_64の場合は1ページ4KiB ◦ 📝 1ページ2MiBのhuge pageというものを使うこともある。いずれ触れるかも • メモリ32GiBのシステムだと800万個以上のページがある •
物理的に存在するメモリのことを物理メモリと呼ぶ 物理メモリ (32GiB) ページ ページ ページ 800万個以上のページ 4KiB 0 8KiB 32GiB
単純化すると、こんなかんじでメモリを共有 物理メモリ カーネル プロセスA プロセスB 空き領域 4KiB 0 8KiB 12KiB
16KiB 20KiB 32KiB 24KiB 28KiB
直接アクセスすると考えると… 物理メモリ カーネル プロセスA プロセスB 空き領域 4KiB 0 8KiB 12KiB
16KiB 20KiB 32KiB 24KiB 28KiB プロセスA プロセスB
直接アクセスすると考えると… 物理メモリ カーネル プロセスA プロセスB 空き領域 4KiB 0 8KiB 12KiB
16KiB 20KiB 32KiB 24KiB 28KiB プロセスA プロセスB 懸念点 • 他のプロセスとアドレスが重なるので扱うのが面倒では? • というか盗み見たり破壊したりできるのでは? • なんならカーネルもぶち壊せるのでは?
実はプロセスごとに違う世界が見えている • これが仮想記憶 ◦ の、ページング方式 物理メモリ カーネル プロセスA プロセスB 空き領域
4KiB 0 8KiB 12KiB 16KiB 20KiB 32KiB 24KiB 28KiB プロセスA プロセスB 4KiB 0 8KiB 4KiB 0 8KiB
ここで難しい用語がたくさん出てくる 物理メモリ カーネル プロセスA プロセスB 空き領域 4KiB 0 8KiB 12KiB
16KiB 20KiB 32KiB 24KiB 28KiB プロセスA プロセスB 4KiB 0 8KiB 4KiB 0 8KiB プロセスAの 仮想アドレス空間 プロセスBの 仮想アドレス空間 物理アドレス空間(*1) *1) 本当はここももうちょっと複雑
自分用以外のメモリにアクセスできない(させない) 物理メモリ カーネル プロセスA プロセスB 空き領域 4KiB 0 8KiB 12KiB
16KiB 20KiB 32KiB 24KiB 28KiB プロセスA 4KiB 0 8KiB プロセスAの 仮想アドレス空間 物理アドレス空間
物理アドレス空間 物理メモリ上のばらばらの領域を連続領域に見せられる 物理メモリ カーネル プロセスA プロセスB 空き領域 4KiB 0 8KiB
12KiB 16KiB 20KiB 32KiB 24KiB 28KiB プロセスA 4KiB 0 8KiB プロセスAの 仮想アドレス空間
まとめ • Linuxはページ単位でメモリを管理する • 仮想記憶という仕組みによってプロセスごとに別のメモリ空間を見せている • 仮想記憶によって以下のようなメリットがある ◦ プロセスが自分に与えられたもの以外のメモリに読み書きできなくなる ◦
物理メモリが断片化してもプロセスには連続領域として見せられる