MMUなしプロセッサ用Linuxの共有ライブラリ機構

Similar documents
r9.dvi

Microsoft PowerPoint - os ppt [互換モード]

Microsoft PowerPoint - OS09.pptx

Microsoft PowerPoint - sp ppt [互換モード]

10-vm1.ppt

Operating System 仮想記憶

ブート領域、フラッシュ領域の分割方法 RL78ファミリ用Cコンパイラ CC-RL

Microsoft PowerPoint - OS07.pptx

04-process_thread_2.ppt

PowerPoint プレゼンテーション

Microsoft PowerPoint - OS08.pptx

Microsoft PowerPoint - No6note.ppt

ex05_2012.pptx

自己紹介 湯浅陽一 1999 年より Linux kernel 開発に参加 MIPS アーキテクチャのいくつかの CPU へ Linux kernel を移植

PowerPoint Presentation

RH850の割り込み/例外実現方法 CC-RHアプリケーションガイド

OS

スライド 1

RL78開発環境移行ガイド R8C/M16C, H8S/H8SXからRL78への移行(統合開発環境編)(High-performance Embedded Workshop→CS+)

PowerPoint プレゼンテーション

Microsoft PowerPoint - FormsUpgrade_Tune.ppt

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

02: 変数と標準入出力

RL78開発環境移行ガイド RL78ファミリ間の移行 (コンパイラ編:コンパイラオプション・アセンブラオプション)(CA78K0R→CC-RL)

スライド 1

Microsoft Word - matlab-coder-code-generation-quick-start-guide-japanese-r2016a

PowerPoint プレゼンテーション

02: 変数と標準入出力

動機 もう6学期だし真面目に勉強しようと思った 真面目に授業聞いてみたけどよくわからなかった Amazonみてたら OS自作 という文字列を発見 話し聞いてもよくわからないしもはや自分で作っちゃえばいいんじゃない 駒場祭付近暇だしそこで 一気に作っちゃおう

PowerPoint プレゼンテーション

Microsoft PowerPoint - os ppt [互換モード]

メモリ管理

スライド 1

PowerPoint プレゼンテーション

Microsoft PowerPoint ppt

Microsoft PowerPoint - No15›¼‚z‰L›¯.ppt

OS

02: 変数と標準入出力

Microsoft PowerPoint - sp ppt [互換モード]

スライド 1

Microsoft Word - プログラムをRAM.doc

02: 変数と標準入出力

Microsoft PowerPoint pptx

TFTP serverの実装

Microsoft PowerPoint - No7note.ppt

メモリ管理

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

命令セットの構成例 a) 算術 演算命令 例 )ADD dest, source : dest dest + source SUB dest, source : dest dest - source AND dest, source : dest dest AND source SHR reg, c

また RLF 命令は 図 2 示す様に RRF 命令とは逆に 各ビットを一つずつ 左方向に回転 ( ローテイト ) する命令である 8 ビット変数のアドレスを A とし C フラグに 0 を代入してから RLF A,1 を実行すると 変数の内容が 左に 1 ビットシフトし 最下位ビット (LSB)

C プログラミング 1( 再 ) 第 5 回 講義では C プログラミングの基本を学び演習では やや実践的なプログラミングを通して学ぶ

Microsoft PowerPoint - 09.pptx

今週の進捗

OS

出 アーキテクチャ 誰が 出 装置を制御するのか 1

Microsoft PowerPoint - C++_第1回.pptx

C に必要なコンピュータ知識 C はコンピュータの力を引き出せるように設計 コンピュータの知識が必要

この方法では, 複数のアドレスが同じインデックスに対応づけられる可能性があるため, キャッシュラインのコピーと書き戻しが交互に起きる性のミスが発生する可能性がある. これを回避するために考案されたのが, 連想メモリアクセスができる形キャッシュである. この方式は, キャッシュに余裕がある限り主記憶の

UIOUSBCOM.DLLコマンドリファレンス

プログラミングI第6回

PowerPoint プレゼンテーション

スライド 1

Microsoft PowerPoint - exp2-02_intro.ppt [互換モード]

MSDM_User_Manual_v0.2.1-B-1

Fortran 勉強会 第 5 回 辻野智紀

Microsoft PowerPoint - 11.pptx

正誤表(FPT1501)

プログラミングI第10回

Prog1_10th

PowerPoint プレゼンテーション

02: 変数と標準入出力

Microsoft PowerPoint - install_NGSsokushu_windows(ver2.1).pptx

単体テスト設計のコツ

Microsoft PowerPoint - 計算機言語 第7回.ppt

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

1. LCD LS027B4DH01 について LS027B4DH01 は 400dot x 240dot のグラフィック LCD です 秋月電子通商で購入できます 外形サイズ : 62.8 x x 1.53mm LCD のフレキシブルケーブルの根元の部分はちょっと力を加えただけで表示が

スライド 1

ex04_2012.ppt

02: 変数と標準入出力

Microsoft PowerPoint - ARC-SWoPP2011OkaSlides.pptx

CommonMP Ver1.5 インストール手順書 目 次 1. 概要 目的 必要動作環境 ハードウェア構成 ソフトウェア構成 CommonMP のインストール手順 利用フロー

内容 1 はじめに 本ガイドの目的 本ガイドの対象者 対象製品 表記について リンカ設定ファイル例 ソースファイル例 名前の付け方 リンカオプションとリンカ設定ファ

Doxygenを用いた効率的な プログラム仕様書の作成

今日の内容 Garbage Collection (GC, ごみ集め ) 参照されなくなったメモリ領域を解放すること 配列境界検査

PowerPoint プレゼンテーション

PNopenseminar_2011_開発stack

PowerPoint プレゼンテーション

02: 変数と標準入出力

第2回

メモリについて考えてみよう_REL_

Microsoft PowerPoint mm

Microsoft PowerPoint pptx

USBメモリドングル説明書

(Microsoft PowerPoint -

MAHO Dialer について MAHO Dialer は MAHO-PBX を経由し PC にて着信時に発信者情報をポップアップしたり 着信履歴などから発信操作を行うためのソフトウエアです このガイドでは MAHO Dialer のインストール アップデート 初期設定 使用方法 および アンイン

目次 1 VirtualBoot for Hyper-V とは バックアップを実行するマシンの設定 確認すべきこと SPX によるバックアップ VirtualBoot for Hyper-V を実行するマシンの設定 確

gengo1-11

組込み Linux の起動高速化 株式会社富士通コンピュータテクノロジーズ 亀山英司 1218ka01 Copyright 2013 FUJITSU COMPUTER TECHNOLOGIES LIMITED

Microsoft PowerPoint - yamagata.ppt

多言語ドメイン名の実装 mdnkit 石曽根信 ( 株 ) SRA 2001/12/04 日本語ドメイン名解説 / mdnkit 1 mdnkit 多言語ドメイン名を扱うためのツールキット 正規化 エンコード変換等を提供するライブラリとコマンド 既存アプリケーシ

Microsoft PowerPoint - CELF_DLLのRAM使用量削減_説明資料.ppt

Transcription:

MMU なしプロセッサ用 Linux の共有ライブラリ機構 大谷浩司 高岡正 近藤政雄 臼田尚志株式会社アックス

はじめに μclinux には 仮想メモリ機構がないので共有ライブラリ機構が使えない でもメモリ消費抑制 ストレージ消費抑制 保守性の向上のためには 欲しい 幾つかの実装があるが CPU ライセンス 機能の制限のためにそのまま利用できない RidgeRun 社 (Cadenux 社 ) ARM CPU SnapGear 社 ColdFire CPU

利点 ライブラリ共有によるメモリ消費抑制プログラム コード共有によるメモリ消費抑制ファイル容量削減ライブラリを修正しても再リンク不要通常 Linux よりも実行オブジェクトが小さい XIP(eXecute In Place) 対応

μclinux でのメモリイメージ text セクション foo() の呼び出し foo() text セグメント A への参照 data セクション A bss セクション stack data セグメント stack セグメント

共有ライブラリ機構でのイメージ プログラム text text セグメント ライブラリ 1text プログラム data プログラム GOT プログラム bss プログラム data セグメント ライブラリ 2text ライブラリ 1data ライブラリ 1GOT ライブラリ 1bss ライブラリ 1 data セグメント ライブラリ 2data ライブラリ 2GOT ライブラリ 2bss ライブラリ 2 data セグメント GOT アドレステーブル stack stack セグメント

GOT(Global Offset Table) text セグメントを書き換えないでリンクする手法 他のモジュールの関数やデータのアドレスは ロード時にならないと不明 コードから直接参照すると ロード時にコードを変更する必要がある data セグメントを介して間接的に参照 このためのテーブルが GOT GOT のエントリを正しく設定するのは 動的リンク & ローダの責任

GOT を使った参照の例 プログラム text B の参照 foo() の呼び出し プログラム data A プログラム GOT foo() のアドレス ライブラリ 1text A の参照 foo() B のアドレス ライブラリ 1data B ライブラリ 1GOT A のアドレス

data セグメントのアクセス方式 ベースレジスタ (GOT レジスタ ) 相対で参照 各モジュール毎に data セグメント 各モジュール実行時には そのモジュールの data セグメントを指すように設定 プログラム text セグメント プログラムの GOT レジスタの値 プログラム data セグメント ライブラリ 2data セグメント ライブラリ 2data セグメント ライブラリ 1text セグメント ライブラリ 1 の GOT レジスタの値 ライブラリ 2text セグメント ライブラリ 2 の GOT レジスタの値

GOT レジスタの設定方法 プログラムの起動時の GOT レジスタは 動的リンク & ローダが設定 他のモジュールの関数の呼出時に変更の必要 二つの方式 呼び出すモジュールで行なう方式 関数へのポインタを他のモジュールに渡す事ができない呼び出されるモジュールで行なう方式後者の方式を採用し 関数の先頭部分で設定

自身の GOT 先頭アドレスを知る方法 プログラム GOT 番号 0 プログラム text GOT アドレス テーブルのアドレス ライブラリ 1text 番号 1 ライブラリ 1GOT ライブラリ 2GOT GOT アドレステーブル GOT アドレス テーブルのアドレス GOT アドレス テーブルのアドレス プログラムの GOT のアドレスライブラリ 1 の GOT のアドレスライブラリ 2 の GOT のアドレス ライブラリ 2text 番号 2

動的リンカ & ローダの動作 text セグメントのロード - メモリ上に存在すれば共有 data セグメントの確保 初期化 GOT の初期化 GOT アドレス テーブルの確保 初期化 リロケーション インポート シンボルの解決 スタックの確保 最初の GOT レジスタの設定

text セグメントの共有方法 PC の Linux では 共有 mmap で実現 しかし uclinux では 一般には実装されていない IPC の共有メモリを改造して実現

XIP(eXecute In Place) プログラムを RAM 上にコピーせずに ROM 上に置いたまま実行する技術 - RAM が節約可能 mmap が ROM 上のポインタを返せば text 共有の機構を使って可能 romfs で 実験的に実装して 動作を確認

初期化ルーチンの問題 C++ などでは main の前に実行すべき初期化ルーチンがある CTOR セクション main と CTOR_LIST そのままでは 共有ライブラリ側の初期化ルーチンが呼び出されない 共有ライブラリの初期化ルーチンも いもづる式に呼び出すようにする

関数の置換えの問題 プログラム text malloc() の呼び出し 独自の malloc() プログラム GOT ライブラリ X text malloc() の呼び出し ライブラリ X GOT 独自の malloc のアドレス 標準 C ライブラリ GOT 標準 C ライブラリ text malloc() の呼び出し malloc()

既存ライブラリの利用 制限付きで既存のライブラリを利用可能 プログラムの data セグメントを text セグメントに連続してメモリ上に配置することで実現 プログラムの text セグメント共有不可 既存のライブラリ中からの共有ライブラリ中のデータアクセス不可 GOT レジスタ等の処理が入っていないため

その他の問題 WEAK シンボル : サポートしない COMMON 領域 : 制限付きサポート サイズが異なっていては いけない linkonce セクション (C++ テンプレートのインスタンス ): 各モジュールにリンクされてしまう

Cadenux 社の方式 GOT レジスタに相当する SB レジスタの設定を呼出側のモジュールで行なう 関数ポインタ渡しの際に問題 それ用のマクロや関数を使うようにプログラムを変更する必要があるカーネルの変更が必要 text 共有に共有 mmap を使用

SnapGear 社の方式 (1) リンクをプログラム作成時に静的に実行 利点 欠点 ライブラリ番号参照部分には 仮の参照アドレスを設定 上位 8 ビットに被参照モジュール番号 : 下位 24 ビットにオフセット動的リンカ & ローダが実際のアドレスに変換 実行オブジェクトが小さく ロード時の負荷が小さい ライブラリを変更すると再リンクが必要ライブラリの実行時の置換えができないモジュールのアドレス空間が 16M しかない ライブラリをシステム内で最大 255 個しか利用できない

SnapGear 社の方式 (2) GOT アドレス テーブルが 各モジュール毎に存在 メモリアクセスが 1 回減るが メモリを消費 text 共有に共有 mmap を使用

本方式での X のプログラムの例 X11perf 共有ライブラリを用いない場合 -1,670,044 バイト 共有ライブラリを用いた場合 - 139,035 バイト 標準的ないくつかのプログラムとライブラリのファイルサイズの合計 共有ライブラリを用いない場合 -86.8M バイト 共有ライブラリを用いた場合 ( ライブラリも含む ) - 7.6M バイト Xserver, ico, oclock, twm, x11perf, xauth, xbiff, xcalc, xclipboard, xcutsel, xclock, xdpyinfo, xedit, xeyes, xhost, xinit, xkill, xload, xlogo, xlsatoms, xlsclients, xlsfonts, xmag, xman, xmessage, xmodmap, xprop, xrefresh, xset, xsetroot, xwd, xwininfo, xwud など X のソースツリーに含むもの

まとめ uclinux 用の共有ライブラリ機構を開発 共有ライブラリ機構には 多くの利点が存在 GOT ライブラリ番号 GOT アドレス テーブルを利用 ベースレジスタを呼び出された側で設定する方式他の方式と比較しても 利点がある X Window の例では 大きなファイルサイズの抑制効果が得られた 開発に協力して頂いた方々に感謝したい