1 組込みエンジニアのための Linux 入門 仮想メモリ編 2007.2.22 株式会社アプリックス 小林哲之.

Slides:



Advertisements
Similar presentations
メモリマップドファイル オペレーティングシステム. 今日の流れ (12/10) ディスクの話の残り  ディスクを高速に使う工夫 メモリとディスクの簡単なまとめ メモリマップト・ファイル (mmap)
Advertisements

1 広島大学 理学研究科 尾崎 裕介 石川 健一. 1. Graphic Processing Unit (GPU) とは? 2. Nvidia CUDA programming model 3. GPU の高速化 4. QCD with CUDA 5. 結果 6. まとめ 2.
メモリマップドファイル オペレーティングシステム. 今日の流れ (12/10) ディスクの話の残り  ディスクを高速に使う工夫 メモリとディスクの簡単なまとめ メモリマップト・ファイル (mmap)
Linuxを組み込んだマイコンによる 遠隔監視システムの開発
07. 値予測 五島 正裕.
■ディレクトリエントリキャッシュ linuxではdentryという構造体に、ファイルパス名の情報を格納しメモリ上にキャッシングしている。
計算機工学III オペレーティングシステム #14 ファイル: より進んだファイルシステム 2006/07/21 津邑 公暁
07. 値予測 五島 正裕.
ファイルキャッシュを考慮したディスク監視のオフロード
Chapter11-4(前半) 加藤健.
Ibaraki Univ. Dept of Electrical & Electronic Eng.
セキュリティ機構のオフロードを考慮した仮想マシンへの動的メモリ割当
Android端末の盗難対策のためのページキャッシュ暗号化
第6回 仮想記憶とページング ページング ページ取り出し方式 ページ置き換え方式 中間テスト(40分)
メモリ管理(1).
オペレーティングシステム 第10回 仮想記憶管理(1)
システムソフトウェア講義の概要 計算機システムの復習:中央演算処理装置(CPU),プログラムの実行,主記憶装置,補助記憶装置
計算機工学III オペレーティングシステム #9 主記憶管理:ページング 2006/06/09 津邑 公暁
榮樂 英樹 LilyVM と仮想化技術 榮樂 英樹
Linux インストール      のための基礎知識 物理実験 I 情報実験第9回 2003/12/12 中神 雄一.
組み込み環境における ユーザレベル・デバイスドライバの検討 (進捗報告)
オペレーティングシステム 第11回 仮想記憶管理(2)
中村孝介(九州工業大学) 光来健一(九州工業大学/JST CREST)
KVMにおけるIDSオフロードのための仮想マシン監視機構
ファイルシステムAPIと メモリマップドファイル
オペレーティングシステム (OSの機能と構造)
記 憶 管 理(2) オペレーティングシステム 第10回.
ファイルシステムキャッシュを 考慮した仮想マシン監視機構
メモリ暗号化による Android端末の盗難対策
App. A アセンブラ、リンカ、 SPIMシミュレータ
OSが乗っ取られた場合にも機能するファイルアクセス制御システム
担当:青木義満 情報工学科 3年生対象 専門科目 システムプログラミング システムプログラミング プロセス間通信(パイプ) 担当:青木義満
第7章 データベース管理システム 7.1 データベース管理システムの概要 7.2 データベースの格納方式 7.3 問合せ処理.
LogStructuredFileSystem Servey
Linuxカーネルについて 2014/01.
オペレーティングシステム i386アーキテクチャ(2)
ネストした仮想化を用いた VMの安全な帯域外リモート管理
メモリ管理 4.3, 4.4 章 さだ.
Flyingware : バイトコード変換による 安全なエージェントの実行
オペレーティングシステム2005 デバイス管理 (1)
ファイルシステムAPIと メモリマップドファイル
型付きアセンブリ言語を用いた安全なカーネル拡張
Lazy Release Consistency
全体ミーティング 金田憲二.
仮想計算機を用いて OSを介さずに行う安全な ファイルアクセス制御
VM専用仮想メモリとの連携による VMマイグレーションの高速化
IaaS型クラウドにおける インスタンス構成の動的最適化手法
コンピュータ系実験Ⅲ 「ワンチップマイコンの応用」 第1週目 アセンブリ言語講座
アルゴリズムとデータ構造 補足資料11-1 「mallocとfree」
仮想メモリを用いた VMマイグレーションの高速化
オペレーティングシステム イントロダクション
仮想計算機を用いたサーバ統合に おける高速なリブートリカバリ
アルゴリズムとデータ構造 補足資料5-1 「メモリとポインタ」
第7回 授業計画の修正 中間テストの解説・復習 前回の補足(クロックアルゴリズム・PFF) 仮想記憶方式のまとめ 特別課題について
IaaS環境におけるVMのメモリ暗号化による情報漏洩の防止
未使用メモリに着目した 複数ホストにまたがる 仮想マシンの高速化
Intel SGXを用いた仮想マシンの 安全な監視機構
複数ホストにまたがって動作する仮想マシンの障害対策
オペレーティングシステム i386アーキテクチャ(1)
第5回 メモリ管理(2) オーバレイ方式 論理アドレスとプログラムの再配置 静的再配置と動的再配置 仮想記憶とメモリ階層 セグメンテーション
オペレーティングシステム (OSの機能と構造)
実装について 前田俊行.
全体ミーティング (5/23) 村田雅之.
オペレーティングシステムJ/K 2004年10月4日
仮想マシンに対する 高いサービス可用性を実現する パケットフィルタリング
Mondriaan Memory Protection の調査
強制パススルー機構を用いた VMの安全な帯域外リモート管理
オペレーティングシステム (OSの機能と構造)
L4-Linux のメモリ管理における問題点とその解決策
Ibaraki Univ. Dept of Electrical & Electronic Eng.
Presentation transcript:

1 組込みエンジニアのための Linux 入門 仮想メモリ編 株式会社アプリックス 小林哲之

2 このスライドの対象とする方 今までずっと組込み機器のプロジェ クトに携わってきて最近は OS に Linux を使っている方々

3 このスライドの目的 Linux の仮想メモリの仕組みを理解し 現在のプロジェクトに役立てる。 – 仕組みを知らなくてもプログラムは動 くが、性能を引き出すためには仕組み の理解が重要。

4 まず基本の概念から 仮想~、論理~ virtual, logical – 仮想アドレス、論理デバイス、論 理セクタ、仮想マシン – あたかも... のように扱う 実~、物理~ real, physical – 実アドレス、物理デバイス、物理 セクタ – そのもの、そのまんま

5 仮想化: あたかも・・・ 実は あたかも巨大のようだが、実は少ない。 あたかも平らのようだが、実は凸凹。 あたかもたくさんのようだが、実はひと つ。 あたかも占有しているようだが、実は共 有。 仮想化は複雑さや個々に依存することを 隠蔽するマジック。 マジックなので種も仕掛けもある。 = 実と仮想の対応付け(マッピング) あたかもそう見えるように変換している。

6 仮想化の代償 マイナス面よりもプラス面が勝って いるから仮想化を行うわけだが、常 にプラスとは限らない。

7 物理メモリと仮想メモリ いままでの大抵の組込み機器プロジェク トでは物理メモリしか扱うことがなかっ た。 最近は組み込みシステムの規模の増大化 に伴って Linux や Window CE など PC 向け OS の流れを持つ OS を使用することが多く なってきた。これらの OS は仮想メモリシ ステムを備えている。 このスライドでは Linux について説明する。

8 物理メモリ 単一のメモリ空間 機器ごとに ROM,RAM,I/O の 実装アドレスが異なるので それを意識してプログラムする ROM RAM I/O

9 仮想メモリ 利点 – ユーザープログラムは実際のメモリマップ(実装ア ドレス、実装サイズ)に依存しなくなる。 – 不連続な物理メモリの断片を連続する仮想メモリと して利用できる。 – メモリ保護:バグによって無関係の部分のメモリが 破壊されることを防止できる。 新しい概念の導入 – アドレス変換 – 多重メモリ空間 – デマンドページング

10 仮想メモリの概念図 出典 : フリー百科事典『ウィキペディア ( Wikipedia )』

11 アドレス変換 ROM RAM I/O アドレス x 物理アドレス空間 仮想アドレス空間 アドレス y MMU Linux kernel がコントロー ル

12 仮想メモリは CPU の中だけ ROM RAM I/O アドレス x 物理アドレス空間 仮想アドレス空間 アドレス y MMU CPU CPU から外にでてくるアドレスバスにのるのは物理アドレスだけ。 ロジアナでは仮想アドレスは観測できない。

13 ユーザープログラムは仮想アドレス だけ ROM RAM I/O アドレス x 物理アドレス空間 仮想アドレス空間 アドレス y MMU CPU 物理アドレスを扱うのはカーネルモードだけ。 つまりカーネル本体とデバイスドライバ。

14 MMU でのアドレス変換 Directory Entry Page Table Entry 物理アドレス Page Directory Page Table Page Page Offset Page Table Index Directory Index 仮想アドレス Page Directory Base Register No page!... page fault

15 TLB Translation Lookaside Buffers 仮想アドレスを key として物理アドレスを 得るハッシュテーブルのようなもの 大抵のアドレス変換は TLB にヒットするの で 実際に Page Directory, Page Table をアク セスせずに済む。... 仮想アドレスページ 物理アドレスページ

16 多重メモリ空間 ROM I/O 物理アドレス空間 プロセスごとに独立した仮想メモリ空間 RAM

17 デマンドページング ページ単位でマッピングされる – ページのサイズはたいていは 4Kbytes 2 段階で行われる 1. 仮想メモリの割り当て (mmap) 管理台帳に登録するだけ 2. 実際にアクセスがあったときに初めて そのページに物理メモリが割り当てられる アクセスのないページには物理メモリが割り当てられないので 仮想メモリサイズ >= 実際に必要な物理メモリサイズ

18 デマンドページングの動作例 仮想アドレス空間 物理アドレス空間 read access 対応する 物理ページが ない! ページフォールト発生 カーネルモードへ (1)

19 デマンドページングの動作例 (続) DMA 転送 マッピング 仮想アドレス空間 物理アドレス空間 カーネルがデータをロードして物理アドレスをマッピングする。 (2)

20 デマンドページングの動作例 (続) 仮想アドレス空間 物理アドレス空間 ユーザーモードに復帰。 ユーザープログラムからは何事もなかったように データが読める。... でも実際に時間はかかっている。 (3) data

21 ページキャッシュ 物理アドレス空間 ディスクからの読んだ内容はメモリに余裕がある限り保持しておく。 シーケンシャルにアクセスされる場合が多いので数ページ分を まとめて先読みを行う。 そのため (2) では毎回ディスクアクセスが発生するとは限らない。

22 ページアウト (2) で物理メモリの空きがなかった場合、使用頻度の低いと思われるページを 解放する。そのページの内容が変更されていなければそのまま破棄。 変更されていればスワップデバイスに掃きだす。 仮想アドレス空間 物理アドレス空間 swap device ただし組込み Linux では swap device を装備していない ことが多い。 掃きだす ページ

23 ページアウト(続) 解放した分のページを使って要求されたページの割り当てを行う。 このような「お手玉」をすることで実際に搭載されている物理メモリサイズ よりも大きなサイズの仮想メモリを扱うことができる。 DMA 転送 仮想アドレス空間 物理アドレス空間 no page

24 ページの共有 仮想アドレス空間 物理アドレス空間 プロセス A プロセス B 同じファイルの同じページは複数の プロセスから共有される。 Read only のページだけでなく write 可のページも。

25 コピーオンライト プロセス A プロセス B write access read only ページフォルト 発生 r/w private Write 可でプライベートのページに 書き込みが発生すると・・・

26 コピーオンライト(続) プロセス A プロセス B write access read only カーネルはコピーしてページの設定を read/write に変更する read/write copy

27 プロセスのメモリ空間 0x xffffffff TASK_SIZE process ABC... user space kernel space カーネルの空間は各プロセスで共通。 カーネルの空間はユーザーモードでは Read/Write/Execute 不可。 プロセス切り替えに伴ってユーザーメモリ 空間が切り替わる。 1 プロセスあたり約 3GB のユーザメモリ空間 TASK_SIZE は i386 では 0xc ARM では 0xbf000000

28 ユーザプロセスのメモリ空間の実 例 a000 r-xp fd: /lib/ld-2.4.so 0011a b000 r-xp fd: /lib/ld-2.4.so 0011b c000 rwxp fd: /lib/ld-2.4.so 0011e a000 r-xp fd: /lib/libc-2.4.so 0024a d000 r-xp 0012b000 fd: /lib/libc-2.4.so 0024d e000 rwxp 0012e000 fd: /lib/libc-2.4.so 0024e rwxp 0024e000 00: r-xp fd: /home/koba/lab/loop/a.out a000 rw-p fd: /home/koba/lab/loop/a.out b7fef000-b7ff1000 rw-p b7fef000 00:00 0 b7fff000-b rw-p b7fff000 00:00 0 bffeb000-c rw-p bffeb000 00:00 0 [stack] cat /proc/ /maps file name inode device major:minor アドレス範囲 file offset r: read w: write x: execute s: shared p: private (copy on write)

29 ユーザプロセスのメモリ空間の実 例 ( 詳細 ) e a000 r-xp fd: /lib/libc-2.4.so Size: 1200 kB Rss: 136 kB Shared_Clean: 136 kB Shared_Dirty: 0 kB Private_Clean: 0 kB Private_Dirty: 0 kB 0024a d000 r-xp 0012b000 fd: /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 0024d e000 rwxp 0012e000 fd: /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.... cat /proc/ /smaps RSS = 物理メモリサイズ

30 システムコール mmap ファイルやデバイスをメモリにマップ / アンマッ プする 引数 prot –PROT_NONE または PROT_EXEC, PROT_READ, PROT_WRITE の OR 演算 引数 flags –MAP_FIXED, MAP_SHARED, MAP_PRIVATE, MAP_ANONYMOUS,... #include void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset); int munmap(void *start, sizt_t length);

31 mmap の tips MAP_FIXED を指定しなければカーネルが 空いているページをさがしてくれる。 MAP_FIXED を指定したときに既存のペー ジと重なっていたら、そのページは内部 的に munmap される。 – なのでこのオプションは通常は使用しない。 ファイルのオフセットはページサイズの 整数倍でなければならない。 mmap と munmap のアドレス、サイズは一 致していなくてもよい。

32 mmap の使い方 (1) 巨大サイズの malloc の代用 – コンパクションなどデータのコピーが発生しな い。 –malloc/free と違って munmap するときの addr, size は mmap で確保したときと異なっていても よい。 まとめて 1 回の mmap で確保して少しづつ分 割して munmap で返却するのもあり。 –glibc の malloc の実装ではある一定以上のサイズ の malloc は mmap を呼び出す。 DEFAULT_MMAP_THRESHOLD = (128*1024)

33 mmap の使い方 (2) 高速なファイルアクセス –read, write のシステムコールでは内部で 物理ページにバッファリングしている。 そこからユーザの指定した配列にコ ピーしている。 –mmap を使うことで直接ページにアクセ スできるようになるのでデータのコ ピーを減らすことができる。 –Java1.4 の java.nio.MappedByteBuffer

34 mmap の使い方 (3) プロセス間の共有メモリ – 複数のプロセスから同じファイルを R/W 可 shared でマッピングする。 –IPC の共有メモリのシステムコール (shmget, shmat,..) は内部で同様のこと を行っている。

35 mmap の使い方 (4) 物理メモリ、 I/O ポートのアクセス – デバイスファイル /dev/mem をマッピン グすることでユーザーモードで物理メ モリ空間を read/write することが可能。 –/dev/mem をアクセスするには root の権 限が必要。

36 まとめ 仮想メモリの使用量と物理メモリの 使用量は異なる。実際に問題になる のは物理メモリの使用量。 仮想メモリのオーバーヘッドはいつ 発生するのかを意識する。 –TLB ミス – ページフォルト システムコール mmap の活用。

37 参考文献 Linux kernel ソース GNU C ライブラリのソース “ 詳解 LINUX カーネル 第 2 版 ” オライリージャパン “Linux カーネル 2.6 解読室 ” SoftBank Creative Linux man コマンド その他たくさんの WEB 検索結果

38 おまけ:最近の話題 CELF の BootTimeResources より –KernelXIP –ApplicationXIP –(DataReadInPlace) CELF の MemoryManagementResouces より –Huge/large/superpages –Page cache compression