Linux 仮想メモリについて



Similar documents
Microsoft PowerPoint - OS08 [互換モード]

<4D F736F F D20819C486F70658F6F93588ED297708AC7979D89E696CA837D836A B E A2E646F63>

目 次. WEB メールへのログイン.... メール 送 信 手 順.... メール 受 信 手 順 アドレス 帳 の 操 作 手 順 フォルダーの 操 作 手 順 メール 発 信 者 登 録 署 名 登 録 手 順 基 本 的 な 設 定

Microsoft Word 印刷ver 本編最終no1(黒字化) .doc

KINGSOFT Office 2016 動 作 環 境 対 応 日 本 語 版 版 共 通 利 用 上 記 動 作 以 上 以 上 空 容 量 以 上 他 接 続 環 境 推 奨 必 要 2

メモリ管理

技術報告会原稿フォーマット

<8BB388F58F5A91EE82A082E895FB8AEE967B95FB906A>

TIPS - 棚 割 りを 開 始 するまで Liteを 起 動 し 企 業 情 報 の 追 加 を 行 い 棚 割 を 行 う 企 業 の 追 加 をして 下 さい 企 業 情 報 の 追 加 時 に エラーメッセージが 表 示 された 場 合 別 途 TIPS トラブルが 発 生 した 場 合

Box-Jenkinsの方法

Microsݯft Word - 91 forܠ2009November.docx


2 県 公 立 高 校 の 合 格 者 は このように 決 まる (1) 選 抜 の 仕 組 み 選 抜 の 資 料 選 抜 の 資 料 は 主 に 下 記 の3つがあり 全 高 校 で 使 用 する 共 通 の ものと 高 校 ごとに 決 めるものとがあります 1 学 力 検 査 ( 国 語 数

Microsoft PowerPoint _リビジョンアップ案内_最終.pptx

する ( 評 定 の 時 期 ) 第 条 成 績 評 定 の 時 期 は 第 3 次 評 定 者 にあっては 完 成 検 査 及 び 部 分 引 渡 しに 伴 う 検 査 の 時 とし 第 次 評 定 者 及 び 第 次 評 定 者 にあっては 工 事 の 完 成 の 時 とする ( 成 績 評 定

VPS では 通 常 はインスタンスが 1 個 です 停 止 と 再 起 動 を 選 択 できます CloudStack では インスタンスの 追 加 と 破 棄 の 機 能 を 利 用 することにより お 客 様 が 契 約 されているインスタンス 数 分 の 仮 想 サーバを 自 由 に 追 加

DRAM SRAM SDRAM (Synchronous DRAM) DDR SDRAM (Double Data Rate SDRAM) DRAM 4 C Wikipedia 1.8 SRAM DRAM DRAM SRAM DRAM SRAM (256M 1G bit) (32 64M bit)

平成27年度大学改革推進等補助金(大学改革推進事業)交付申請書等作成・提出要領

PowerPoint Presentation

「1 所得税及び復興特別所得税の確定申告書データをお持ちの方」からの更正の請求書・修正申告書作成編

03_主要処理画面.xlsx

1. 業 務 概 要 貨 物 情 報 登 録 済 の 貨 物 に 対 して システムを 介 さずに 行 われた 税 関 手 続 きについて 税 関 が 許 可 承 認 等 を 行 った 旨 を 登 録 する また システムで 行 われた 以 下 の 税 関 手 続 き( 以 下 輸 出 申 告 等

4 参 加 資 格 要 件 本 提 案 への 参 加 予 定 者 は 以 下 の 条 件 を 全 て 満 たすこと 1 地 方 自 治 法 施 行 令 ( 昭 和 22 年 政 令 第 16 号 ) 第 167 条 の4 第 1 項 各 号 の 規 定 に 該 当 しない 者 であること 2 会 社

<4D F736F F D2095CA8E A90DA91B18C9F93A289F1939A8F D8288B3816A5F E646F63>

Microsoft PowerPoint - 経営事項審査.ppt

0 目 次 1. 畑 のあしあとの 使 い 方 P.3 2.オプション P.6 3.モバイルデバイスより 履 歴 取 得 P.8 4. 基 本 情 報 管 理 P 栽 培 計 画 P.22 6.ドキュメント 出 力 P 栽 培 履 歴 管 理 P.28 8.モバイルでの 栽

<819A955D89BF92B28F BC690ED97AA8EBA81418FA48BC682CC8A8890AB89BB816A32322E786C7378>

01_07_01 データのインポート_エクスポート_1

text

Gmail 利用者ガイド

(Microsoft PowerPoint - Ver12\203o\201[\203W\203\207\203\223\203A\203b\203v\216\221\227\277.ppt)

<4D F736F F D2090BC8BBB959491BA8F5A91EE8A C52E646F63>

平成21年10月30日

住宅改修の手引き(初版)

株価指数先物オプション取引 - リスクディスクローズ

は 固 定 流 動 及 び 繰 延 に 区 分 することとし 減 価 償 却 を 行 うべき 固 定 の 取 得 又 は 改 良 に 充 てるための 補 助 金 等 の 交 付 を 受 けた 場 合 にお いては その 交 付 を 受 けた 金 額 に 相 当 する 額 を 長 期 前 受 金 とし

Linux on ITRON-ハイブリッド構造の実装

データコピーとは データコピーは 古 い NAS のデータを 新 しい HDL-Z シリーズに 簡 単 にコピーできます 環 境 例 本 製 品 は 以 下 の 用 途 の 際 に 最 適 です 古 い HDL-Z シリーズから 新 しい HDL-Z シリーズへのコピー 古 い HDL-Z シリーズ

Transcription:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ユーザプロセスのメモリ 空 間 の 実 例 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 r: read device w: write major:minor x: execute s: shared p: private (copy on write) file name 28

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

システムコール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,... 30

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

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

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

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

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

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

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

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