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
Linuxのメモリ管理入門 プロセスごとに違う世界を見せる 仮想記憶 Nov. 30th, 2023 Satoru Takeuchi twitter: satoru_takeuchi
Slide 2
Slide 2 text
Linuxカーネルはメモリをページ単位で管理する ● x86_64の場合は1ページ4KiB ○ 📝 1ページ2MiBのhuge pageというものを使うこともある。いずれ触れるかも ● メモリ32GiBのシステムだと800万個以上のページがある ● 物理的に存在するメモリのことを物理メモリと呼ぶ 物理メモリ (32GiB) ページ ページ ページ 800万個以上のページ 4KiB 0 8KiB 32GiB
Slide 3
Slide 3 text
単純化すると、こんなかんじでメモリを共有 物理メモリ カーネル プロセスA プロセスB 空き領域 4KiB 0 8KiB 12KiB 16KiB 20KiB 32KiB 24KiB 28KiB
Slide 4
Slide 4 text
直接アクセスすると考えると… 物理メモリ カーネル プロセスA プロセスB 空き領域 4KiB 0 8KiB 12KiB 16KiB 20KiB 32KiB 24KiB 28KiB プロセスA プロセスB
Slide 5
Slide 5 text
直接アクセスすると考えると… 物理メモリ カーネル プロセスA プロセスB 空き領域 4KiB 0 8KiB 12KiB 16KiB 20KiB 32KiB 24KiB 28KiB プロセスA プロセスB 懸念点 ● 他のプロセスとアドレスが重なるので扱うのが面倒では? ● というか盗み見たり破壊したりできるのでは? ● なんならカーネルもぶち壊せるのでは?
Slide 6
Slide 6 text
実はプロセスごとに違う世界が見えている ● これが仮想記憶 ○ の、ページング方式 物理メモリ カーネル プロセスA プロセスB 空き領域 4KiB 0 8KiB 12KiB 16KiB 20KiB 32KiB 24KiB 28KiB プロセスA プロセスB 4KiB 0 8KiB 4KiB 0 8KiB
Slide 7
Slide 7 text
ここで難しい用語がたくさん出てくる 物理メモリ カーネル プロセスA プロセスB 空き領域 4KiB 0 8KiB 12KiB 16KiB 20KiB 32KiB 24KiB 28KiB プロセスA プロセスB 4KiB 0 8KiB 4KiB 0 8KiB プロセスAの 仮想アドレス空間 プロセスBの 仮想アドレス空間 物理アドレス空間(*1) *1) 本当はここももうちょっと複雑
Slide 8
Slide 8 text
自分用以外のメモリにアクセスできない(させない) 物理メモリ カーネル プロセスA プロセスB 空き領域 4KiB 0 8KiB 12KiB 16KiB 20KiB 32KiB 24KiB 28KiB プロセスA 4KiB 0 8KiB プロセスAの 仮想アドレス空間 物理アドレス空間
Slide 9
Slide 9 text
物理アドレス空間 物理メモリ上のばらばらの領域を連続領域に見せられる 物理メモリ カーネル プロセスA プロセスB 空き領域 4KiB 0 8KiB 12KiB 16KiB 20KiB 32KiB 24KiB 28KiB プロセスA 4KiB 0 8KiB プロセスAの 仮想アドレス空間
Slide 10
Slide 10 text
まとめ ● Linuxはページ単位でメモリを管理する ● 仮想記憶という仕組みによってプロセスごとに別のメモリ空間を見せている ● 仮想記憶によって以下のようなメリットがある ○ プロセスが自分に与えられたもの以外のメモリに読み書きできなくなる ○ 物理メモリが断片化してもプロセスには連続領域として見せられる