Basic of virtual memory of Linux | PDF
Recommended
PDF
PDF
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
PDF
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
PPTX
PDF
PPTX
PDF
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
PDF
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
PPTX
PDF
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
PDF
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
PDF
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
PDF
OpenStack検証環境構築・トラブルシューティング入門 - OpenStack最新情報セミナー 2014年8月
PDF
PDF
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
PDF
俺のTerraform CI/CD ライフサイクル
PDF
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
ODP
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
PDF
AWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
PDF
PDF
PDF
PPTX
PDF
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
PDF
PDF
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
PDF
PPTX
Linux MMAP & Ioremap introduction
More Related Content
PDF
PDF
CyberAgentのプライベートクラウド Cycloudの運用及びモニタリングについて #CODT2020 / Administration and M...
PDF
忙しい人の5分で分かるMesos入門 - Mesos って何だ?
PPTX
PDF
PPTX
PDF
PDF
ネットワーク ゲームにおけるTCPとUDPの使い分け
What's hot
PDF
Docker入門-基礎編 いまから始めるDocker管理【2nd Edition】
PPTX
PDF
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
PDF
GKE に飛んでくるトラフィックを 自由自在に操る力 | 第 10 回 Google Cloud INSIDE Games & Apps Online
PDF
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
PDF
OpenStack検証環境構築・トラブルシューティング入門 - OpenStack最新情報セミナー 2014年8月
PDF
PDF
ゲームアーキテクチャパターン (Aurora Serverless / DynamoDB)
PPTX
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
PDF
俺のTerraform CI/CD ライフサイクル
PDF
macOSの仮想化技術について ~Virtualization-rs Rust bindings for virtualization.framework ~
ODP
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
PDF
AWS Black Belt Online Seminar 2016 Amazon EC2 Container Service
PDF
PDF
PDF
PPTX
PDF
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
PDF
PDF
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Viewers also liked
PDF
PPTX
Linux MMAP & Ioremap introduction
PDF
Simple and efficient way to get the last log using MMAP
PDF
Tricky implementation of Go ARM soft float
PDF
LinuxのFull ticklessを試してみた
PDF
Linuxのプロセススケジューラ(Reading the Linux process scheduler)
PDF
Using QEMU for cross development
PDF
PDF
PPTX
x86-64/Linuxに独自メモリ空間を勝手増設
PDF
Cpu Cache and Memory Ordering——并发程序设计入门
KEY
PDF
ADB(Android Debug Bridge): How it works?
PDF
PDF
0章 Linuxカーネルを読む前に最低限知っておくべきこと
ODP
PDF
PPTX
15 Common Myths you were taught to believe about Cars
Similar to Basic of virtual memory of Linux
PDF
PPTX
TechEd2010_T2-401_EffectiveHyper-V
PPTX
x86-64/Linuxに独自メモリ空間を勝手増設
PDF
PDF
PDF
PDF
PDF
PDF
PDF
MeeGo Seminar Winter Porting 20101209
PDF
【学習メモ#3rd】12ステップで作る組込みOS自作入門
PDF
[Basic 7] OS の基本 / 割り込み / システム コール / メモリ管理
PDF
PPTX
Effective Hyper-V - 久しぶりエディション
PPT
PPTX
PDF
リナックスに置ける様々なリモートエキスプロイト手法 by スクハー・リー
PDF
2011.09.18 v7から始めるunix まとめ
PPT
PDF
ステルスルートキット : 悪いヤツはどうライブメモリフォレンジックをすり抜ける? - PacSec 2009
More from Tetsuyuki Kobayashi
PDF
PDF
PDF
Try new transport protocol SRT (ver. 2)
PDF
Try new transport protocol SRT
PDF
Raspberry Pi Zero とカメラモジュールで作るライブ配信実験機
PDF
WebOS Open Source Edition を試してみた
PDF
Linuxのユーザーランドをinitから全てまるごとgolangで書く
PDF
組み込みLinuxでのGolangのススメ(Go con版)
PDF
PDF
Virtual memory 20070222-en
PDF
PDF
Tweaking Google TV emulator
ODP
Inter-process communication of Android
PDF
Android is NOT just 'Java on Linux'
PDF
PDF
Android On Ubuntu for developer
PDF
Reusing your existing software on Android
PDF
Logging system of Android
PDF
Logging system of Android
PDF
Recently uploaded
PPTX
How to buy a used computer and use it with Windows 11
PDF
DX人材育成 サービスデザインで実現する「巻き込み力」の育て方 by Graat
PPTX
FOSS4G Japan 2025 - QGISでスムーズに地図を比較 - QMapCompareプラグインの紹介
PDF
「似ているようで微妙に違う言葉」2025/10/17の勉強会で発表されたものです。
PDF
FOSS4G Japan 2024 ハザードマップゲームの作り方 Hazard Map Game QGIS Plugin
PDF
技育祭2025秋 サボろうとする生成AIの傾向と対策 登壇資料(フューチャー渋川)
PDF
FOSS4G Hokkaido - QFieldをランナーのために活用した - QField for runners
PPTX
「Drupal SDCについて紹介」2025/10/17の勉強会で発表されたものです。
Basic of virtual memory of Linux 1. 2. 注釈
• このスライドは2007年に作成して、CELFテク
ニカルジャンボリーで発表したものです。
• http://tree.celinuxforum.org/CelfPubWiki/JapanTechnicalJamboree13
• 内容的には現在でもほぼ通用するので再演
します。
2
3. 4. 5. まず基本の概念から
• 仮想~、論理~ virtual, logical
– 仮想アドレス、論理デバイス、論理セ
クタ、仮想マシン
– あたかも ... のように扱う
• 実~、物理~ real, physical
– 実アドレス、物理デバイス、物理セクタ
– そのもの、そのまんま
5
6. 仮想化: あたかも・・・ 実は
• あたかも巨大のようだが、実は少ない。
• あたかも平らのようだが、実は凸凹。
• あたかもたくさんのようだが、実はひとつ。
• あたかも占有しているようだが、実は共有。
仮想化は複雑さや個々に依存することを
隠蔽するマジック。
マジックなので種も仕掛けもある。
= 実と仮想の対応付け(マッピング)
あたかもそう見えるように変換している。
6
7. 8. 物理メモリと仮想メモリ
• いままでの大抵の組込み機器プロジェクトで
は物理メモリしか扱うことがなかった。
• 最近は組み込みシステムの規模の増大化に
伴ってLinuxやWindow CEなどPC向けOSの
流れを持つOSを使用することが多くなってき
た。これらのOSは仮想メモリシステムを備え
ている。
• このスライドではLinuxについて説明する。
8
9. 10. 仮想メモリ
• 利点
– ユーザープログラムは実際のメモリマップ(実装アドレス、
実装サイズ)に依存しなくなる。
– 不連続な物理メモリの断片を連続する仮想メモリとして利
用できる。
– メモリ保護:バグによって無関係の部分のメモリが破壊さ
れることを防止できる。
• 新しい概念の導入
– アドレス変換
– 多重メモリ空間
– デマンドページング
10
11. 12. アドレス変換
仮想アドレス空間 物理アドレス空間
ROM
アドレスy
RAM
MMU
I/O
アドレスx
Linux kernel
I/O
がコントロー
ル I/O
12
13. 仮想メモリはCPUの中だけ
仮想アドレス空間
物理アドレス空間
ROM
アドレスy
RAM
MMU
アドレスx I/O
I/O
CPU I/O
CPUから外にでてくるアドレスバスにのるのは物理アドレスだけ。
ロジアナでは仮想アドレスは観測できない。 13
14. 15. MMUでのアドレス変換
31 22 21 12 11 0
仮想アドレス Directory Index Page Table Index Page Offset
Page Directory
Base Register
Page Directory
Directory Page Table
Entry No page! ... page fault
Page Table Page
Entry
物理アドレス
15
16. TLB
仮想アドレスページ 物理アドレスページ
...
• Translation Lookaside Buffers
• 仮想アドレスをkeyとして物理アドレスを得る
ハッシュテーブルのようなもの
• 大抵のアドレス変換はTLBにヒットするので
実際にPage Directory, Page Tableをアクセ
スせずに済む。
16
17. 18. デマンドページング
• ページ単位でマッピングされる
– ページのサイズはたいていは4Kbytes
• 2段階で行われる
1. 仮想メモリの割り当て(mmap)
管理台帳に登録するだけ
2. 実際にアクセスがあったときに初めて
そのページに物理メモリが割り当てられる
アクセスのないページには物理メモリが割り当てられないので
仮想メモリサイズ >= 実際に必要な物理メモリサイズ
18
19. デマンドページングの動作例
(1)
仮想アドレス空間 物理アドレス空間
read access
対応する
物理ページが
ない!
ページフォールト発生
カーネルモードへ
19
20. 21. デマンドページングの動作例(続)
(3)
仮想アドレス空間 物理アドレス空間
data
ユーザーモードに復帰。
ユーザープログラムからは何事もなかったように
データが読める。 ... でも実際に時間はかかっている。
21
22. ページキャッシュ
物理アドレス空間
ディスクからの読んだ内容はメモリに余裕がある限り保持しておく。
シーケンシャルにアクセスされる場合が多いので数ページ分を
まとめて先読みを行う。
そのため(2)では毎回ディスクアクセスが発生するとは限らない。
22
23. 24. 25. 26. コピーオンライト
プロセスA
Write可でプライベートのページに
書き込みが発生すると・・・
write
access r/w private
ページフォルト
発生
read only
プロセスB
26
27. コピーオンライト(続)
プロセスA
write
access
read/write
copy
read only
カーネルはコピーしてページの設定を
プロセスB
read/writeに変更する
27
28. プロセスのメモリ空間
process A B C
0x00000000
user space ...
1プロセスあたり約3GBのユーザメモリ空間
TASK_SIZE
kernel
カーネルの空間は各プロセスで共通。
space カーネルの空間はユーザーモードでは
0xffffffff Read/Write/Execute不可。
TASK_SIZEはi386では0xc0000000 プロセス切り替えに伴ってユーザーメモリ
ARMでは 0xbf000000 空間が切り替わる。 28
29. ユーザプロセスのメモリ空間の実例
cat /proc/<PROCESS_ID>/maps
00101000-0011a000 r-xp 00000000 fd:00 15172739 /lib/ld-2.4.so
0011a000-0011b000 r-xp 00018000 fd:00 15172739 /lib/ld-2.4.so
0011b000-0011c000 rwxp 00019000 fd:00 15172739 /lib/ld-2.4.so
0011e000-0024a000 r-xp 00000000 fd:00 15172740 /lib/libc-2.4.so
0024a000-0024d000 r-xp 0012b000 fd:00 15172740 /lib/libc-2.4.so
0024d000-0024e000 rwxp 0012e000 fd:00 15172740 /lib/libc-2.4.so
0024e000-00251000 rwxp 0024e000 00:00 0
08048000-08049000 r-xp 00000000 fd:00 11666681 /home/koba/lab/loop/a.out
08049000-0804a000 rw-p 00000000 fd:00 11666681 /home/koba/lab/loop/a.out
b7fef000-b7ff1000 rw-p b7fef000 00:00 0
b7fff000-b8000000 rw-p b7fff000 00:00 0
bffeb000-c0000000 rw-p bffeb000 00:00 0 [stack]
アドレス範囲 file offset inode file name
r: read device
w: write major:minor
x: execute
s: shared
29
p: private (copy on write)
30. ユーザプロセスのメモリ空間の実例
(詳細)
cat /proc/<PROCESS_ID>/smaps
....
0011e000-0024a000 r-xp 00000000 fd:00 15172740 /lib/libc-2.4.so
Size: 1200 kB
Rss: 136 kB RSS = 物理メモリサイズ
Shared_Clean: 136 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
0024a000-0024d000 r-xp 0012b000 fd:00 15172740 /lib/libc-2.4.so
Size: 12 kB
Rss: 8 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 8 kB
0024d000-0024e000 rwxp 0012e000 fd:00 15172740 /lib/libc-2.4.so
Size: 4 kB
Rss: 4 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4 kB 30
....
31. システムコールmmap
#include <sys/mman.h>
void *mmap(void *start, size_t length, int prot, int flags,
int fd, off_t offset);
int munmap(void *start, sizt_t length);
• ファイルやデバイスをメモリにマップ/アンマップする
• 引数 prot
– PROT_NONE または PROT_EXEC, PROT_READ,
PROT_WRITEのOR演算
• 引数 flags
– MAP_FIXED, MAP_SHARED, MAP_PRIVATE,
MAP_ANONYMOUS, ...
31
32. mmapのtips
• MAP_FIXEDを指定しなければカーネルが空
いているページをさがしてくれる。
• MAP_FIXEDを指定したときに既存のページ
と重なっていたら、そのページは内部的に
munmapされる。
– なのでこのオプションは通常は使用しない。
• ファイルのオフセットはページサイズの整数
倍でなければならない。
• mmapとmunmapのアドレス、サイズは一致
していなくてもよい。
32
33. mmapの使い方(1)
• 巨大サイズのmallocの代用
– コンパクションなどデータのコピーが発生しない。
– malloc/freeと違ってmunmapするときのaddr, size
はmmapで確保したときと異なっていてもよい。
• まとめて1回のmmapで確保して少しづつ分割し
てmunmapで返却するのもあり。
– glibcのmallocの実装ではある一定以上のサイズ
のmallocはmmapを呼び出す。
• DEFAULT_MMAP_THRESHOLD = (128*1024)
33
34. mmapの使い方(2)
• 高速なファイルアクセス
– read, writeのシステムコールでは内部で物
理ページにバッファリングしている。そこか
らユーザの指定した配列にコピーしている
。
– mmapを使うことで直接ページにアクセス
できるようになるのでデータのコピーを減ら
すことができる。
– Java1.4の java.nio.MappedByteBuffer
34
35. 36. 37. まとめ
• 仮想メモリの使用量と物理メモリの使用
量は異なる。実際に問題になるのは物
理メモリの使用量。
• 仮想メモリのオーバーヘッドはいつ発生
するのかを意識する。
– TLBミス
– ページフォルト
• システムコールmmapの活用。
37
38. 参考文献
• Linux kernel ソース
http://www.kernel.org/
• GNU C ライブラリのソース
http://www.gnu.org/software/libc/
• “詳解LINUXカーネル 第2版”
オライリージャパン
• “Linuxカーネル2.6解読室”
SoftBank Creative
• Linux manコマンド
• その他たくさんのWEB検索結果
38
39. 2007年当時
おまけ:最近の話題
• CELFのBootTimeResourcesより
– KernelXIP
NORフラッシュが
– ApplicationXIP 使われなくなったため
あまり聞かなくなった。
– (DataReadInPlace)
• CELFのMemoryManagementResoucesより
– Huge/large/superpages
– Page cache compression → zramの名前でメインライン
化。
3.8ではstaging卒業の見込
み。
39