JP2005032259A - 共有ライブラリーシステム及び前記システム構築方法 - Google Patents
共有ライブラリーシステム及び前記システム構築方法 Download PDFInfo
- Publication number
- JP2005032259A JP2005032259A JP2004205174A JP2004205174A JP2005032259A JP 2005032259 A JP2005032259 A JP 2005032259A JP 2004205174 A JP2004205174 A JP 2004205174A JP 2004205174 A JP2004205174 A JP 2004205174A JP 2005032259 A JP2005032259 A JP 2005032259A
- Authority
- JP
- Japan
- Prior art keywords
- library
- address
- shared library
- data section
- symbol
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Withdrawn
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/54—Link editing before load time
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44557—Code layout in executable memory
- G06F9/44563—Sharing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
- G06F9/4484—Executing subprograms
- G06F9/4486—Formation of subprogram jump address
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
【課題】 共有ライブラリーシステム及び前記システム構築方法が開示される。
【解決手段】 応用プログラムまたは共有ライブラリーで応用プログラムのために割り当てたデータセクションの開始アドレスが設定されるデータセクションベースレジスターと、前記データセクションの開始アドレスがデータセクションベースレジスターに設定されるように各ライブラリーに含まれる関数を定義するコンパイラーと、共有ライブラリー及びアドレスライブラリーを生成する共有ライブラリービルダーと、コンパイルされたプログラムを実行ファイル形態の応用プログラムに作る応用プログラムビルダーとシンボルの最終アドレスを決定するランタイムローダーとを含む共有ライブラリーシステム及び前記システム構築方法である。
【選択図】 図1
【解決手段】 応用プログラムまたは共有ライブラリーで応用プログラムのために割り当てたデータセクションの開始アドレスが設定されるデータセクションベースレジスターと、前記データセクションの開始アドレスがデータセクションベースレジスターに設定されるように各ライブラリーに含まれる関数を定義するコンパイラーと、共有ライブラリー及びアドレスライブラリーを生成する共有ライブラリービルダーと、コンパイルされたプログラムを実行ファイル形態の応用プログラムに作る応用プログラムビルダーとシンボルの最終アドレスを決定するランタイムローダーとを含む共有ライブラリーシステム及び前記システム構築方法である。
【選択図】 図1
Description
本発明は、多数の応用プログラムが一つのライブラリーインスタンスを共有する共有ライブラリーシステムに係り、特に、MMU(Memory Management Unit)がなくても共有ライブラリーの使用が可能な共有ライブラリーシステム及び前記システム構築方法に関する。
一般的に、ライブラリーは、コード自体とそのコードで使用するデータのためのデータセクションとで構成される。ライブラリーは、多様な応用プログラムが一つのライブラリーコードを共有して使用しているか否かによって、非共有ライブラリーと共有ライブラリーとに分けられる。この内、非共有ライブラリー(普通*.a形態のファイル)は、リンキング段階でライブラリーコードを応用プログラムで複写して使用する形態のライブラリーである。一方、共有ライブラリー(普通*.so形態のファイル)は、ランタイムにライブラリーコードインスタンスが応用プログラム間に共有されて使われるように製作されたライブラリーである。このように、共有ライブラリーを利用するシステムでは、リンキング段階でライブラリーコードの複写が生じない。共有ライブラリーの目標は、ライブラリーのコードは共有しながらデータセクションは各プログラムごとに独立に提供することである。したがって、共有ライブラリーを使用すれば、ラム及びフラッシュのサイズを相当に小さくしうる。
共有ライブラリーは、完全なリンキング、特にシンボルアドレスのバインディングが起きる時期によって静的連結共有ライブラリーと動的連結共有ライブラリーとに分かれる。普通、共有ライブラリーというのは、動的連結共有ライブラリーをいう。動的連結共有ライブラリーでは、実際のシンボルアドレスバインディングがランタイムにプログラムをローディングしながら起きる。そのため、応用プログラムがビルドされた以後にライブラリーの具現が変更されても、応用プログラムを新しくビルドする必要がない長所がある。しかし、その代わりにランタイムにシンボルをバインディングするためのオーバヘッドが発生する。一方、静的連結共有ライブラリーでは、実際のシンボルアドレスバインディングがリンキングタイムに起きる。したがって、この場合ライブラリーが変更されれば、そのライブラリーを参照する全ての応用プログラムを再度コンパイルしなければならない不便があるが、動的連結共有ライブラリーのようなランタイムオーバヘッドが非常に少ない長所がある。
一方、MMUが存在するシステムでは、仮想メモリーマッピングを通じて多様なプロセスが一つのページを共有可能なので、共有ライブラリーを比較的容易に利用できる。しかし、MMUのないシステムでは、多様なプロセスが一つのページを共有不可能なので、共有ライブラリーの利用がむずかしい。しかし、uCLinuxのようにMMUを利用しないシステムが多く利用され、このようにMMUなしのシステムでもメモリーの効率的な使用のため共有ライブラリーの支援が要求される。
本発明が成そうとする第1の技術的課題は、MMUなしでも静的連結共有ライブラリーの使用可能なMMUなしの共有ライブラリーシステムを提供することである。
本発明が成そうとする第2の技術的課題は、前記MMUなしの共有ライブラリーシステム構築方法を提供することである。
本発明が成そうとする第3の技術的課題は、前記MMUなしの共有ライブラリーシステムで共有ライブラリーを使用する方法を提供することである。
本発明が成そうとする第2の技術的課題は、前記MMUなしの共有ライブラリーシステム構築方法を提供することである。
本発明が成そうとする第3の技術的課題は、前記MMUなしの共有ライブラリーシステムで共有ライブラリーを使用する方法を提供することである。
本発明が成そうとする第4の技術的課題は、前記MMUなしの共有ライブラリーシステムで共有ライブラリーをビルドする方法を提供することである。
本発明が成そうとする第5の技術的課題は、前記MMUなしの共有ライブラリーシステム構築方法をコンピュータで実行可能なプログラムコードで記録された記録媒体を提供することである。
本発明が成そうとする第6の技術的課題は、前記共有ライブラリー使用方法をコンピュータで実行可能なプログラムコードで記録した記録媒体を提供することである。
本発明が成そうとする第7の技術的課題は、前記共有ライブラリービルド方法をコンピュータで実行可能なプログラムコードで記録した記録媒体を提供することである。
本発明が成そうとする第5の技術的課題は、前記MMUなしの共有ライブラリーシステム構築方法をコンピュータで実行可能なプログラムコードで記録された記録媒体を提供することである。
本発明が成そうとする第6の技術的課題は、前記共有ライブラリー使用方法をコンピュータで実行可能なプログラムコードで記録した記録媒体を提供することである。
本発明が成そうとする第7の技術的課題は、前記共有ライブラリービルド方法をコンピュータで実行可能なプログラムコードで記録した記録媒体を提供することである。
前記第1課題を成すために、本発明に係るMMUなしの共有ライブラリーシステムは、応用プログラムのデータセクション開始アドレスまたは共有ライブラリーで応用プログラムのために割り当てたデータセクションの開始アドレスが設定されるデータセクションベースレジスターと、ソースコード形態のプログラム及びライブラリーをPIC(Position Independent Code)オプションでコンパイルし、各ライブラリーがプログラムに割り当てたデータセクションの開始アドレスがデータセクションベースレジスターに設定されるように各ライブラリーに含まれる関数を定義するコンパイラーと、コンパイルされたライブラリーを利用して各ライブラリーごとに、多様な応用プログラムに共有されるコード及びデータをシンボルとして含む共有ライブラリー及びプログラムとのシンボルアドレスバインディングのためにシンボルのアドレス情報を有するアドレスライブラリーを生成す共有ライブラリービルダーと、コンパイルされたプログラムのコード、データ及び共有ライブラリーで応用プログラムのために割当てられたデータセクション開始アドレスが定義されたデータセクションテーブルをリンカスクリプトによって配置してコンパイルされたプログラムを実行ファイル形態の応用プログラムに作る応用プログラムビルダーと応用プログラム及び共有ライブラリーをメモリーに積載し、共有ライブラリーをメモリーに積載する時、シンボルのアドレス情報に含まれたシンボルの再配置タイプによって必要なアドレス再配置を実行した結果によってシンボルの最終アドレスを決定するランタイムローダーとを含む。データセクションは、全域データに対するポインターテーブルのGOT(Global Offset Table)と全域データを含むデータ領域とを含み、データセクション開始アドレスはGOT開始アドレスであり、応用プログラムはGOTを利用して全域データを参照することが望ましい。
前記第2課題を成すために、応用プログラムが参照するデータセクションの開始アドレスが設定されるデータセクションベースレジスターを具備する本発明に係るMMUなしの共有ライブラリーシステム構築方法は、共有するライブラリーをPICオプションでコンパイルし、コンパイルの際共有するライブラリーの各関数に、実行するプログラムのために割当てられたデータセクションの開始アドレスがデータセクションベースレジスターに設定されることを定義する(a)段階と、コンパイルされたライブラリーを利用して各ライブラリーごとに実際コードとデータとが存在する共有ライブラリーと応用プログラムとのシンボルアドレスバインディングのためにシンボルのアドレス情報だけを有するアドレスライブラリーを生成す(b)段階と、PICオプションを与えてプログラムをコンパイルする(c)段階と、コンパイルされたプログラムのコードやデータセクション及び共有ライブラリーで応用プログラムのために割り当てられたデータセクション開始アドレスを示すデータセクションテーブルをリンカスクリプトによって配置して実行ファイル形態の応用プログラムに作る(d)段階と、応用プログラム実行のためにビルドされた共有ライブラリーをメモリーに積載する(e)段階とを含むことが望ましい。
前記第3課題を成すために、応用プログラムが参照するデータセクションの開始アドレスが設定されるデータセクションベースレジスターを具備するMMUなしの共有ライブラリーシステムで応用プログラムがメモリーに積載された共有ライブラリーを利用する方法は、応用プログラムが共有ライブラリーの関数を呼び出すと共有ライブラリーで応用プログラムのために割り当てられたデータセクションの開始アドレスをデータセクションベースレジスターに設定する(a)段階と、応用プログラムはデータセクションベースレジスターに設定されたアドレスに接近して呼び出した関数を実行する(b)段階とを含むことが望ましい。
前記第4課題を成すために、MMUなしの共有ライブラリーシステムで本発明に係る共有ライブラリーのビルド方法は、PICオプションで共有するライブラリーをコンパイルする(a)段階と、共有するライブラリーに固有の番号をIDとして割り当ててライブラリー名を再設定する(b)段階と、コンパイルされたライブラリーで含まれたいくつかのオブジェクトファイルを一つのオブジェクトファイルに再配置する(c)段階と、ターゲットシステムに合わせて(c)段階のオブジェクトファイルのフォーマットを変換し、フォーマット変換されたオブジェクトファイルを共有するコードとデータとが存在する共有ライブラリーとして生成す(d)段階と、コンパイルされたライブラリー及び共有ライブラリーからシンボルの位置情報及びアドレス情報を各々抽出し、オブジェクト別にシンボルのアドレスが定義されたアドレスライブラリーを生成す(e)段階とを含むことが望ましい。
本発明に係るMMUなしの共有ライブラリーシステム及び前記システム構築方法によれば、コンパイラー、ランタイムローダー及びライブラリービルダーの修正を通じてMMUのようなハードウェアの支援がなくても共有ライブラリーを使用できる。
以下、本発明に係る共有ライブラリーシステム及びシステム構築方法を添付した図面を参照して下記の通り説明する。
まず、本発明の共有ライブラリーシステムは、静的連結共有ライブラリーを使用することとする。その理由は、内蔵型システムでは応用プログラムを新しくビルドする不便が存在してもランタイムのオーバヘッドを減らすことがより重要なためである。
まず、本発明の共有ライブラリーシステムは、静的連結共有ライブラリーを使用することとする。その理由は、内蔵型システムでは応用プログラムを新しくビルドする不便が存在してもランタイムのオーバヘッドを減らすことがより重要なためである。
図1は、本発明に係るMMUなしの共有ライブラリーシステムの一実施例を概略的に示すブロック図である。本発明に係る共有ライブラリーシステムは、コンパイラー100、ライブラリービルダー120、ランタイムローダー140及びデータセクションベースレジスター160を含んで構成され、説明の便宜のためにメインメモリー180を共に図示する。
図1で、コンパイラー100は、所定のオプションすなわち、PICオプションで実行するプログラム102及び共有するライブラリー104をコンパイルし、コンパイルされたプログラム105及びコンパイルされたライブラリー108を作る。実際にプログラム102及びライブラリー104のソースコードをコンパイルする時、−fpicオプションを与えれば容易にPICコードを生成できる。このように、コンパイラー100は、PICオプションで実行するプログラム102及びライブラリー104をコンパイルすることでMMUなしの共有ライブラリーシステムでライブラリーが積載されるメモリーのアドレスを固定出来ない問題を解決できる。すなわち、PICは、全ての関数の呼び出しがPCに関連したブランチやジャンプでなされるためにコードがメモリーに積載された位置に関係なく実行でき、ライブラリーが積載されるアドレスを固定する必要がない。また、コンパイラー100は、ライブラリー104をコンパイルする時、ライブラリーの各関数のプロローグで、プログラム102のために割り当てられたデータセクションの開始アドレスがデータセクションベースレジスター160にセッティングされるようコンパイルする。そして、コンパイラー100は、各共有ライブラリーに固有の番号をIDとして割り当て、各ライブラリーの名称をlibID.soと設定してコンパイルする。例えば、共有ライブラリーが3個の場合、各ライブラリーの名称は、lib1.so、lib2.so、lib3.soと各々設定される。
共有ライブラリービルダー120は、コンパイラー100によりコンパイルされたライブラリー108を利用して各共有ライブラリーごとに共有ライブラリー124a及びアドレスライブラリー124bを生成する。ここで、共有ライブラリー124aは実際コードやデータセクションが存在するライブラリーで、ランタイムローダー140によりメインメモリー180に積載されて多様な応用プログラムに共有されるライブラリーである。ここで、データセクションには全域データに対するポインターテーブルであるGOTとデータ領域とを含み、GOTはデータ領域直前に位置する。この時、共有ライブラリー124aは、いくつかのオブジェクトファイルからなるコンパイルされた共有ライブラリーが一つのオブジェクトファイルで再配置されたものである。アドレスライブラリー124bは、実際コードとデータとがなくシンボルのアドレス情報だけを有し、応用プログラムとのシンボルアドレスバインディングのために存在するライブラリーである。ここで、シンボルは、オブジェクトに含まれた関数名及び全域変数名を含む。アドレスライブラリー124bは、メインメモリー180に積載されず、応用プログラムをビルドする時にだけ使われる。この時、シンボルアドレスには、ランタイムローダー140が共有ライブラリー124aをメインメモリー180に積載時必要な情報例えば、どんなシンボルが応用プログラムオブジェクト内のシンボルかまたは共有ライブラリー内のシンボルかそして、メインメモリー180に積載時アドレス再配置等に対する情報を含んでいなければならない。
応用プログラムビルダー130は、リンカスクリプトによって応用プログラムのコード、データ及びデータセクションテーブルを配置してコンパイルされた応用プログラムを実行ファイル形態の応用プログラム106に作る。ここで、データセクションテーブルは、共有ライブラリー124aが実行するプログラム102のために各々割り当てたデータセクションの開始アドレスを示すテーブルである。本発明でリンカスクリプトは、各ライブラリーのデータセクション開始アドレスを示すデータセクションテーブルがデータセクションの直前に位置するように定義される。本発明に係るリンカスクリプトに対しては図6を参照して詳細に説明する。
ランタイムローダー140は、応用プログラム106及び共有ライブラリー124aをメインメモリー180に積載する。ランタイムローダー140が共有ライブラリー124aをメインメモリー180に積載する時、シンボルアドレス情報に含まれたシンボルの再配置タイプによって必要なアドレス再配置を実行した後、最終的にシンボルのアドレスを決定する。図4を参照して、シンボルのアドレス再配置に対する詳細な説明をする。
データセクションベースレジスター160は、コンパイルされた応用プログラム106のデータセクション開始アドレスまたはメインメモリー180に積載された共有ライブラリーのデータセクション開始アドレスが設定される。前述したように、データセクションは全域データ領域直前にGOTが位置する形態であり、したがって、データセクションの開始アドレスはGOTの開始アドレスである。データセクションベースレジスター160としてARMのSLレジスターを利用できる。応用プログラムがライブラリーを参照せず、自身のデータセクションを参照してプログラム実行中なら、データセクションベースレジスター160には応用プログラム106のデータセクション開始アドレスが設定される。そうして、応用プログラムが共有ライブラリー124aに定義された関数を呼び出すと、呼び出された関数のプロローグ定義により、共有ライブラリー124aが応用プログラム106のために割り当てたデータセクションの開始アドレスがデータセクションベースレジスター160に設定される。このように、データセクションベースレジスター160を利用することで、MMUなしでも共有ライブラリー124aは各応用プログラムごとに独立のデータセクションを保証できる。すなわち、MMUがないシステムでPICを利用すれば共有ライブラリーのコード共有は可能だが、各応用プログラムに独立のデータセクションを提供することは依然として不可能である。PICコードでは、全ての静的データはPCに関連して接近するためにコードとデータセクションとの相対的なオフセットが一定でなければならず、したがって、多様な応用プログラムのために割り当てられた各データセクションとライブラリーコードのオフセットとを一定にさせるべきである。一方、本発明に係る共有ライブラリーシステムでは、応用プログラムが共有ライブラリーの関数を実行させる前、データセクションベースレジスター160に応用プログラムが参照するデータセクションアドレスがロードされるようコンパイルする。したがって、多様な応用プログラムのために割り当てられた各データセクションとライブラリーコードとのオフセットが一定でなければならないという制約なしに、多様な応用プログラムに独立のデータセクションを提供できる。すなわち、応用プログラムが自身のために割り当てられたデータセクションに接近する時、データセクションベースレジスター160の値を基準に接近するように作るので、各応用プログラムごとに独立のデータセクションを保証できる。
一方、データセクションベースレジスターを利用することによって、静的データを応用プログラムごとに独立に提供することは可能だが、全域データをコード再配置なく接近させることがむずかしい。ここで、全域データは、応用プログラムとライブラリーとの間、または各ライブラリーの間に共有され使われるデータを意味する。静的連結共有ライブラリーでは、全域データのアドレスがローディング段階で決定されるのでプログラムをロードする時に全域データ参照を再配置しなければならない。このために、全域変数に対するポインターテーブルであるGOTを利用する。すなわち、データセクションに割り当てられたポインターを利用して間接的に全域データを参照するようにコードを生成し、ロードする時に全域変数のデータが最終的に決定されれば、それによりGOTの該当項目を再配置する。GOTは、前述したようにデータセクションに存在するので、コード領域の再配置とは関係がなくなりうる。
図2は、図1に図示されたMMUなしの共有ライブラリーシステム構築過程及び共有ライブラリーの利用方法の一例を示す流れ図である。
コンパイラー100は、共有するライブラリー104をコンパイルする(第200段階)。この時、コンパイラー100は、PICオプションで共有するライブラリー104をコンパイルし、各ライブラリーに固有の番号をIDとして割り当てて各ライブラリーの名称をlibID.soと設定する。このように、各ライブラリーに割り当てられた固有の番号は、応用プログラムのデータセクションテーブルで各ライブラリーが自身のために割り当てたデータセクションの開始アドレスを探すことに利用される。これについては図6を参照して詳細に説明する。また、コンパイラー100は、共有ライブラリーの各関数のプロローグで応用プログラムのために割り当てられたデータセクションの開始アドレスがデータセクションベースレジスター160に設定されるようにコンパイルする。
コンパイラー100は、共有するライブラリー104をコンパイルする(第200段階)。この時、コンパイラー100は、PICオプションで共有するライブラリー104をコンパイルし、各ライブラリーに固有の番号をIDとして割り当てて各ライブラリーの名称をlibID.soと設定する。このように、各ライブラリーに割り当てられた固有の番号は、応用プログラムのデータセクションテーブルで各ライブラリーが自身のために割り当てたデータセクションの開始アドレスを探すことに利用される。これについては図6を参照して詳細に説明する。また、コンパイラー100は、共有ライブラリーの各関数のプロローグで応用プログラムのために割り当てられたデータセクションの開始アドレスがデータセクションベースレジスター160に設定されるようにコンパイルする。
第200段階の後に、ライブラリービルダー120はコンパイルされたライブラリー108を利用して各ライブラリーごとに実際コードとデータとが存在する共有ライブラリー124aと、応用プログラムとのシンボルアドレスバインディングのためのシンボルのアドレス情報だけを有するアドレスライブラリー124bとを生成す(第205段階)。
第205段階の後に、コンパイラー100は応用プログラム102をコンパイルする(第210段階)。コンパイラー100は、応用プログラム102を共有ライブラリー104と同様にPICオプションを与えてコンパイルする。
第210段階の後に、応用プログラムビルダー130は、リンカスクリプトによって応用プログラムのコード、データ及びデータセクションテーブルを配置してコンパイルされたプログラムを実行ファイル形態の応用プログラム106に作る(第215段階)。
第215段階の後に、ランタイムローダー140は、ビルドされた第1ライブラリー124a及びビルドされた応用プログラム106をメインメモリー180に積載する(第220段階)。ランタイムローダー140が共有ライブラリー124aをメインメモリー180に積載する時は、アドレスライブラリー124bのシンボルアドレスに含まれたシンボルの再配置タイプによって必要なアドレス再配置を実行した後、最終的にシンボルのアドレスを決定する。
第215段階の後に、応用プログラム106を実行する(第225段階)。応用プログラムが自身のデータセクションを参照してプログラムを実行中なら、データセクションベースレジスター160は応用プログラム106のデータセクション開始アドレスすなわち、GOT開始アドレスと設定されている。その中、応用プログラム106が共有ライブラリー124aの関数を呼び出すと(第230段階)、共有ライブラリー関数のプロローグ定義によってデータセクションベースレジスター160には共有ライブラリー124aで応用プログラム106のために割り当てたデータセクションの開始アドレスが設定される(第235段階)。応用プログラム106は、データセクションベースレジスター160として設定されたアドレスにより自身のために割り当てられたデータセクションへの接近が可能である。応用プログラム106は、データセクションに含まれる全域データに対するポインターテーブルであるGOTを利用して間接的に全域データを参照し、共有ライブラリー124aで呼び出した関数を実行する(第240段階)。第235及び第240段階で実行される動作のより詳細な説明は図7を参照して説明する。
前述したように、本発明ではMMUなしで共有ライブラリーを利用するために、ランタイムローダー及びコンパイラーを修正し、ライブラリービルダーを通じて既存の共有ライブラリーの形式を変更する。これに合せて、データセクションベースレジスターとデータセクションのGOTテーブルとを利用することで、MMUなしでも共有ライブラリーの使用が可能にする。すなわち、MMUを使用しないシステムの場合、ライブラリーが積載されるアドレスを固定出来ず、応用プログラムに独立のデータセクションを割り当てられず、全域データをコード再配置なく接近することが不可能な理由で、共有ライブラリーの使用が難しかった。しかし、本発明に係る共有ライブラリーシステムは、全ての関数の呼び出しがパソコンと関連したブランチまたはジャンプでなされるようにPICを適用してコンパイルすることで、ライブラリーが積載されるアドレスを固定しなくても良い。また、応用プログラムがライブラリーコードを実行させる前、データセクションベースレジスターに応用プログラムが参照するデータセクションの開始アドレスがロードされるようにコンパイルすることで、各応用プログラムごとに独立のデータセクションを保証できる。また、データセクションに割り当てられたポインターを利用して間接的に全域データを参照するようにコードを生成し、ロードする時に全域変数のデータが最終的に決定されればGOTの該当項目を再配置する。応用プログラムは、データセクションのGOTを利用して全域データに接近するので、コード再配置のない接近が可能である。結局、本発明に係る共有ライブラリーシステムは、MMUを使用しないシステムで共有ライブラリーを使用し難い3つの原因を解決し、MMUなしでも共有ライブラリーを使用できる。
図3は、ライブラリービルダー120により共有ライブラリーがビルドされる過程を示す図面である。
libc_temp.aは、コンパイラー100によりコンパイルされた共有ライブラリーであり、Cライブラリーに含まれるオブジェクトのアーカイブを示す。このアーカイブ中のオブジェクトファイルは、コンパイラー100により全てのオブジェクトのプロローグに応用プログラム106が参照するデータセクションの開始アドレスをデータセクションベースレジスターに設定するコードが含まれるようにコンパイルされた状態である。
libc_temp.aは、コンパイラー100によりコンパイルされた共有ライブラリーであり、Cライブラリーに含まれるオブジェクトのアーカイブを示す。このアーカイブ中のオブジェクトファイルは、コンパイラー100により全てのオブジェクトのプロローグに応用プログラム106が参照するデータセクションの開始アドレスをデータセクションベースレジスターに設定するコードが含まれるようにコンパイルされた状態である。
リンカ300は、libc.temp.aライブラリーに含まれたいくつかのオブジェクトファイルを一つのオブジェクトファイルに再配置したライブラリーlib1.so.gdbを生成す。この時、lib.so.gdbのファイルフォーマットはELFであり、フォーマット変換ユーティリティ310によりELFファイルフォーマットはターゲットシステムに合うように適切に再配置されるべきである。例えば、ターゲットシステムがuCLinuxなら、フォーマット変換ユーティリティ310はELFフォーマットファイルlib.so.gdbをFLATフォーマットファイルlib1.soに変換する。このように、ターゲットシステムに合うようにファイルフォーマットが変換されたライブラリーを共有ライブラリーとする。前述したように、共有ライブラリーは実際コードとデータとが存在するライブラリーで、ランタイムローダー140によりメインメモリー180に積載されて多様な応用プログラムに共有されるライブラリーである。
一方、本発明は、静的連結共有ライブラリーシステムであるから、応用プログラム106と静的にリンキングされる対象が必要である。このために、GENSYMユーティリティ320は、実際コードとデータとはなく、応用プログラムとのシンボルアドレスバインディングのためにシンボルのアドレス情報だけを有するファイルlibc.aを生成す。ここで、libc.aは、ライブラリーコードを除外したエクスポートシンボルだけ定義したシンボルアドレスライブラリーである。この時、重要な点は、各シンボルは適切に多様なオブジェクト(*.o)に分けて定義されるべきである。仮に、全てのシンボルが一つのオブジェクトのなかで定義されれば、ライブラリー内の全てのシンボルがあるモジュールに含まれてリンクの単位が全体シンボルになるために望ましくない重複宣言の誤りが生じうる。したがって、GENSYMユーティリティ320は、これらのシンボルを多様なオブジェクトモジュールに分けて定義するために、一つのオブジェクトファイルに再配置される以前のアーカイブlibc_temp.aから必要な情報すなわち、シンボルがどのオブジェクトファイルに属しているかを抽出する。すなわち、GENSYMユーティリティ320は、Cライブラリーでシンボルのアドレスはlib1.so.gdbから得るが、シンボルが定義されなければならないオブジェクトモジュールに関する情報は再配置される以前のアーカイブであるlibc_temp.aから得て、全域シンボルをlibc.aでのように多様なオブジェクトモジュールに分けて定義する。ここで、シンボルのアドレスはそのシンボルのlib1.so.gdb内でのオフセットを示す。結局、シンボルアドレスライブラリーlibc.aの内容は、Cライブラリーがエクスポートするシンボル名とそのシンボルのlib1.so.gdb内でのオフセットとである。libc.aは、それ以外のいかなるコードも含まない。したがって、Cライブラリーを参照する応用プログラムは、libc.aがリンクされる時に定義されたシンボルのオフセットだけを参照してライブラリーlib1.soとリンキングされる。すなわち、コードの複写は起こらず、シンボルのアドレスすなわち、シンボルのオフセットだけバインディングされる。一方、libc.aに定義されたシンボルアドレスは、ランタイムライブラリーがメインメモリー180のどのアドレスに積載されるかによってランタイムローダーにより再配置されるべきである。このために、どんなシンボルが応用プログラムオブジェクト内のシンボルか、または共有ライブラリー内のシンボルか等に関するシンボル情報がシンボルアドレスに含まれるようにシンボルアドレスはフォーマットされるべきである。
図4は、図3のGENSYMユーティリティ320により定義されるシンボルアドレスフォーマットの一例を示す図面である。
シンボルアドレスは、32ビット(4Byte)で表現され、その中下位24ビットがシンボルの実際アドレスを示す。この場合、応用プログラムだけでなく、ライブラリーの全体大きさは16MB(=224MB)を超過出来ない。仮に、ライブラリーの大きさがこのような制限を超過する場合、ライブラリーを分割するべきである。24番目ビットから29番目ビットまでの6ビットは、シンボルが定義されているライブラリーの固有番号すなわち、IDを示す。前述したように、これはコンパイル過程で各ライブラリーに与えられる。この場合、同時に使用できるライブラリーの個数は64(=26)個までである。そして、上位2ビットは、再配置タイプを示すビットで、再配置タイプは大きく3種類に区分される。まず、第1再配置タイプは、上位2ビットが00である場合で、シンボルのアドレスがローディング時に修正される必要がある絶対アドレス値であることを示し、主にデータセクションでよく現れる。第2再配置タイプは、上位2ビットが01である場合で、シンボルのアドレスがGOTテーブルの位置、すなわちデータセクションの開始アドレスに置き換えなければならないことを示す。第3再配置タイプは、上位2ビットが11である場合で、シンボルのアドレスがブランチ命令語の目的地アドレスであることを示し、これはローディング時に決定される動的ライブラリーに対する関数呼び出しの参照アドレスを修正するためのものである。換言すれば、第1再配置タイプは、簡単に該当する部分で決定されたメインメモリーの絶対アドレスに再配置すればよい。しかし、第1再配置タイプでない場合には別の作業が必要である。すなわち、第2再配置タイプの場合、割り当てられたデータセクションの開始アドレスすなわち、GOTの開始アドレスに再配置すべきであり、第3再配置タイプの場合、システムのブランチ命令に合うフォーマットにコードの直接的な修正が必要である。例えば、ARMでは全てのブランチ命令語の上位8ビットがブランチタイプを決定して残り下位の24ビットがブランチオフセットを示すので、このような再配置情報を基に該当システムに合わせて修正できる。
シンボルアドレスは、32ビット(4Byte)で表現され、その中下位24ビットがシンボルの実際アドレスを示す。この場合、応用プログラムだけでなく、ライブラリーの全体大きさは16MB(=224MB)を超過出来ない。仮に、ライブラリーの大きさがこのような制限を超過する場合、ライブラリーを分割するべきである。24番目ビットから29番目ビットまでの6ビットは、シンボルが定義されているライブラリーの固有番号すなわち、IDを示す。前述したように、これはコンパイル過程で各ライブラリーに与えられる。この場合、同時に使用できるライブラリーの個数は64(=26)個までである。そして、上位2ビットは、再配置タイプを示すビットで、再配置タイプは大きく3種類に区分される。まず、第1再配置タイプは、上位2ビットが00である場合で、シンボルのアドレスがローディング時に修正される必要がある絶対アドレス値であることを示し、主にデータセクションでよく現れる。第2再配置タイプは、上位2ビットが01である場合で、シンボルのアドレスがGOTテーブルの位置、すなわちデータセクションの開始アドレスに置き換えなければならないことを示す。第3再配置タイプは、上位2ビットが11である場合で、シンボルのアドレスがブランチ命令語の目的地アドレスであることを示し、これはローディング時に決定される動的ライブラリーに対する関数呼び出しの参照アドレスを修正するためのものである。換言すれば、第1再配置タイプは、簡単に該当する部分で決定されたメインメモリーの絶対アドレスに再配置すればよい。しかし、第1再配置タイプでない場合には別の作業が必要である。すなわち、第2再配置タイプの場合、割り当てられたデータセクションの開始アドレスすなわち、GOTの開始アドレスに再配置すべきであり、第3再配置タイプの場合、システムのブランチ命令に合うフォーマットにコードの直接的な修正が必要である。例えば、ARMでは全てのブランチ命令語の上位8ビットがブランチタイプを決定して残り下位の24ビットがブランチオフセットを示すので、このような再配置情報を基に該当システムに合わせて修正できる。
一方、前述したシンボルアドレスフォーマットは、uCLinuxシステムのためのFLATバイナリの再配置テーブルのエントリーにも同様に適用される。FLATバイナリ再配置テーブルは、図5に図示したようにデータセクションの次に位置し、FLATバイナリの再配置テーブルの各エントリーはローダーによって再配置される必要があるコードやデータを示している。
一方、ランタイムローダー140が一般的に実行することは、まず、応用プログラムが参照するライブラリーをメインメモリー180に積載し、次に、ライブラリーに含まれるシンボルのアドレスを再配置し、最後に、ライブラリーコードの共有を保証することである。すなわち、多様な応用プログラムが同時に一つのライブラリーを使用する場合、ライブラリーコードはただ一つのインスタンスのめがメモリーに積載されるようにする。ランタイムローダー140がこのような役割を行うための核心は、GOTテーブルや再配置テーブルの内にあるエントリー中ライブラリーへの参照を検出することである。これは図4に図示されたシンボルと再配置エントリーのアドレスフォーマットから容易に得られる。例えば、応用プログラムは、IDを0に割り当てて共有ライブラリーは1から始まる所定の一連番号を割り当てて区分する場合、アドレス値の24〜29番目ビットすなわち、ライブラリーのIDを示すビットが全て0でなければ、ライブラリーへの参照であることが容易に分かる。一方、まだメインメモリー180に積載されていないライブラリーの参照が検出されれば、ランタイムローダー140は該当するライブラリーをメインメモリー180に積載して必要な再配置を実行した後、最終的にこれらの積載情報を基にシンボルのアドレスを決定すればよい。
図6は、コンパイルされた応用プログラム106のリンカスクリプトをより詳細に示した図面である。図6で、テキスト106aは関数コードが定義された領域であり、データセクションテーブル106bは応用プログラム106が参照する各共有ライブラリーに割り当てられたデータセクションの開始アドレスを示すテーブルである。データセクション106cで、GOT 107aは全域変数に対するポインターテーブルであり、第1データ107bは全域変数のデータが定義された領域であり、第2データ107cはローカル変数のデータが定義された領域である。図6には応用プログラムが参照する共有ライブラリーが3個である場合のデータセクションテーブル106bを示す。図示したように、データセクションテーブル106bは、データセクション106cの直前に位置し、各ライブラリーの名称はコンパイル時にlibID.so形態に変換される。各共有ライブラリーは、1、2、3、…のIDが与えられて応用プログラム自身も0のIDが割当され、これらのIDは応用プログラムのために割り当てられたデータセクションの位置を知るため利用される。アドレスの大きさが4Byteならば、各ライブラリーが応用プログラムのために割り当てたデータセクションのアドレスは(-4*ID-4のアドレスから得られる。例えば、IDが1であるライブラリーのデータセクションは、現在データセクションベースレジスター160が示すアドレスから8Byteを引いた所で得られる。ここで、現在データセクションベースレジスター160は、応用プログラム自身のデータセクションを示し、説明の便宜のために現在のデータセクションベースレジスター値をslとする。具体的に、応用プログラム106のデータセクション開始アドレス情報‘ptr to app data’はsl-4のアドレスから得て、IDが1であるライブラリーのデータセクションアドレス‘ptr to lib1.sodata’はsl-8のアドレスから得られる。同様に、IDが2であるライブラリーのデータセクションアドレス‘ptr to lib2.sodata’はsl-12のアドレスから、IDが3であるライブラリーのデータセクションアドレス‘ptr to lib3.sodata’はsl-16のアドレスから各々得られる。一方、ライブラリー検索の便宜上/libディレクトリにlibID.so形態のライブラリー名称が存在すべきである。例えば、libcに固有番号1を割り当てたなら/libディレクトリにlib1.soという名称でC共有ライブラリーオブジェクトコードが存在すべきである。
図7は、応用プログラムがプログラム実行中、共有ライブラリーに定義された関数を呼び出す過程を説明するための図面である。
図6及び図7で、共有ライブラリーXは、各応用プログラム別データセクションを有する。共有ライブラリーXには、応用プログラム1ないし応用プログラムY各々のためのデータセクション500〜510が割当されている。すなわち、func1のような関数コードは各応用プログラムが共有し、全域データは各応用プログラム別に割当される。応用プログラム1が自身のデータセクションを参照してプログラムを実行中なら、データセクションベースレジスター160は応用プログラムのデータセクションの開始アドレスすなわち、GOT開始アドレスが設定されている。そうして、応用プログラム1がライブラリーXに定義された関数func1を呼び出すと、func1のプロローグ520の‘pushsl’命令によってデータセクションベースレジスター160に現在設定されたデータは他の貯蔵空間に保存され、‘setsl…’命令によって応用プログラムは自身のデータセクションテーブル106を参照して共有ライブラリーXから応用プログラム1のために割り当てられたデータセクション500の開始アドレスを得てデータセクションレジスター160に設定する。また、func1の実行が完了すれば‘poolsl’命令によって前記他の貯蔵空間に保存されたデータがまたデータセクションベースレジスター160に設定されるようにする。
図6及び図7で、共有ライブラリーXは、各応用プログラム別データセクションを有する。共有ライブラリーXには、応用プログラム1ないし応用プログラムY各々のためのデータセクション500〜510が割当されている。すなわち、func1のような関数コードは各応用プログラムが共有し、全域データは各応用プログラム別に割当される。応用プログラム1が自身のデータセクションを参照してプログラムを実行中なら、データセクションベースレジスター160は応用プログラムのデータセクションの開始アドレスすなわち、GOT開始アドレスが設定されている。そうして、応用プログラム1がライブラリーXに定義された関数func1を呼び出すと、func1のプロローグ520の‘pushsl’命令によってデータセクションベースレジスター160に現在設定されたデータは他の貯蔵空間に保存され、‘setsl…’命令によって応用プログラムは自身のデータセクションテーブル106を参照して共有ライブラリーXから応用プログラム1のために割り当てられたデータセクション500の開始アドレスを得てデータセクションレジスター160に設定する。また、func1の実行が完了すれば‘poolsl’命令によって前記他の貯蔵空間に保存されたデータがまたデータセクションベースレジスター160に設定されるようにする。
前述したように、プログラム実行時に共有ライブラリーの参照が可能なようにランタイムローダー及びコンパイラーを修正したうえ、ライブラリービルダーを通じて既存共有ライブラリーの形式を変更した。このような過程を通じて共有ライブラリーの使用を可能にしてシステムのメモリー使用量を減らし、結果的にシステムの生産原価を節約させうる。
本発明は、またコンピュータで読み取れる記録媒体にコンピュータが読み取れるコードで具現可能である。コンピュータが読み取れる記録媒体は、コンピュータシステムによって読み取れるデータが保存される全ての種類の記録装置を含む。コンピュータが読み取れる記録媒体の例には、ROM、RAM、CD−ROM、磁気テープ、フロッピー(登録商標)ディスク、光ディスク貯蔵装置などがあり、また搬送波(例えばインターネットを通した伝送)の形態で具現されるものも含む。また、コンピュータが読み取れる記録媒体は、ネットワークで連結したコンピュータシステムに分散され、分散方式でコンピュータが読み取れるコードが保存されて実行されうる。
以上、図面と明細書で最適実施例が開示された。ここで特定の用語が使われたが、これは単に本発明を説明するための目的で使われたものであり、意味限定や特許請求範囲に記載された本発明の範囲を制限するために使われたものではない。したがって、本技術分野の当業者ならば多様な変形及び均等な他実施例が可能だということが理解できる。したがって、本発明の真の技術的保護範囲は特許請求範囲の技術的思想により決まるべきである。
本発明は、多数の応用プログラムが一つのライブラリーインスタンスを共有する共有ライブラリーシステムに利用でき、本発明によりメモリーの使用量が減少されることによってシステムの生産原価が削減できる。
100 コンパイラー
102 実行するプログラム
104 共有するライブラリー
105 コンパイルされたプログラム
106 応用プログラム
108 コンパイルされたライブラリー
120 ライブラリービルダー
124a 共有ライブラリー
124b 住所ライブラリー
130 応用プログラムビルダー
140 ランタイムローダー
160 メインメモリー
180 データセクションベースレジスター
102 実行するプログラム
104 共有するライブラリー
105 コンパイルされたプログラム
106 応用プログラム
108 コンパイルされたライブラリー
120 ライブラリービルダー
124a 共有ライブラリー
124b 住所ライブラリー
130 応用プログラムビルダー
140 ランタイムローダー
160 メインメモリー
180 データセクションベースレジスター
Claims (28)
- 応用プログラムのデータセクション開始アドレスまたは共有ライブラリーで前記応用プログラムのために割り当てたデータセクションの開始アドレスが設定されるデータセクションベースレジスターと、
ソースコード形態のプログラム及びライブラリーを位置独立なコード(PIC)オプションでコンパイルし、前記各ライブラリーが前記プログラムに割り当てたデータセクションの開始アドレスが前記データセクションベースレジスターに設定されるように前記各ライブラリーに含まれる関数を定義するコンパイラーと、
前記コンパイルされたライブラリーを利用して各ライブラリーごとに、多様な応用プログラムに共有されるコード及びデータをシンボルとして含む共有ライブラリー及び前記プログラムとのシンボルアドレスバインディングのためにシンボルのアドレス情報を有するアドレスライブラリーを生成す共有ライブラリービルダーと、
コンパイルされたプログラムのコード、データ及び前記共有ライブラリーで前記応用プログラムのために割り当てられたデータセクション開始アドレスが定義されたデータセクションテーブルをリンカスクリプトによって配置して前記コンパイルされたプログラムを実行ファイル形態の前記応用プログラムに作る応用プログラムビルダーと、
前記応用プログラム及び前記共有ライブラリーをメモリーに積載し、前記共有ライブラリーを前記メモリーに積載する時、前記シンボルのアドレス情報に含まれたシンボルの再配置タイプによって必要なアドレス再配置を実行した結果によってシンボルの最終アドレスを決定するランタイムローダーとを含み、
前記データセクションは、全域データに対するポインターテーブルのグローバルオフセットテーブル(GOT)と全域データを含むデータ領域とを含み、前記データセクション開始アドレスは前記GOT開始アドレスであり、前記応用プログラムは前記GOTを利用して全域データを参照することを特徴とするメモリマネジメントユニット(MMU)なしの共有ライブラリーシステム。 - 前記コンパイラーは、前記ライブラリーに1から始まる一連の番号をIDとして各々付与し、付与されたIDを基盤にライブラリー名を再設定することを特徴とする請求項1に記載のMMUなしの共有ライブラリーシステム。
- 前記再設定されたライブラリー名は、ライブラリー検索の便宜のために所定のディレクトリに前記再設定されたライブラリー名が存在することを特徴とする請求項2に記載のMMUなしの共有ライブラリーシステム。
- 前記リンカスクリプトは、
前記データセクションテーブルが前記データセクションの直前に位置するように定義され、
アドレスの大きさがnByteである場合、応用プログラムはIDがmである共有ライブラリーのデータセクション開始アドレスを(sl-n*m-n)の位置(ここで、slは、前記応用プログラム自身のデータセクション開始アドレスである)で得ることを特徴とする請求項2に記載のMMUなしの共有ライブラリーシステム。 - 前記ライブラリービルダーは、
コンパイルされたライブラリーに含まれたいくつかのオブジェクトファイルを一つのオブジェクトファイルに再配置するリンカと、
ターゲットシステムに合わせてオブジェクトファイルのフォーマットを変換し、フォーマット変換されたオブジェクトファイルを前記共有ライブラリーとして生成すフォーマット変換ユーティリティと、
前記コンパイルされたライブラリーからシンボルがどんなオブジェクトに属しているかを示す位置情報及び前記シンボルが前記共有ライブラリー内でのオフセットをシンボルアドレス情報として抽出し、前記位置情報を利用して前記各シンボルが位置したオブジェクト内でシンボルのアドレスが定義された前記アドレスライブラリーを生成すGENSYMユーティリティを含むことを特徴とする請求項1に記載のMMUなしの共有ライブラリーシステム。 - 前記アドレスライブラリーは、ライブラリーコードを除外したエクスポートシンボルのアドレス情報だけ定義したことを特徴とする請求項5に記載のMMUなしの共有ライブラリーシステム。
- 前記シンボルアドレスのフォーマットは、
前記シンボルアドレスを示すpビットの第1領域と、
シンボルが定義されたライブラリーのIDを示すqビットの第2領域と、
前記メインメモリーに積載時、アドレスの再配置タイプを示すrビットの第3領域とを含むことを特徴とする請求項1に記載のMMUなしの共有ライブラリーシステム。 - 前記応用プログラムまたは前記ライブラリーの大きさが2mビットを超過せず、前記ライブラリーの大きさが2mビットを超過すれば前記ライブラリーの大きさが2mビットを超過しないように分割することを特徴とする請求項7に記載のMMUなしの共有ライブラリーシステム。
- 前記アドレス再配置タイプは、
前記シンボルのアドレスが前記メインメモリーにローディング時、メインメモリーの絶対アドレスに再配置されるべきであることを示す第1再配置タイプと、
前記シンボルのアドレスが前記データセクションの開始アドレスのGOT開始アドレスに割り当てるべきであることを示す第2再配置タイプと、
前記シンボルのアドレスがブランチ命令語の目的地アドレスであることを示し、ターゲットシステムのブランチ命令に合うフォーマットに修正しなければならない第3再配置タイプとを含むことを特徴とする請求項7に記載のMMUなしの共有ライブラリーシステム。 - 前記ターゲットシステムがuCLinuxの場合、FLATバイナリの再配置テーブルのエントリーが前記シンボルアドレスフォーマットと同じアドレスフォーマットを有することを特徴とする請求項7に記載のMMUなしの共有ライブラリーシステム。
- 応用プログラムが参照するデータセクションの開始アドレスが設定されるデータセクションベースレジスターを具備するMMUなしの共有ライブラリーシステム構築方法において、
(a)共有するライブラリーをPICオプションでコンパイルし、コンパイル時に前記共有するライブラリーの各関数に、実行するプログラムのために割り当てられたデータセクションの開始アドレスが前記データセクションベースレジスターに設定されることを定義する段階と、
(b)コンパイルされたライブラリーを利用して各ライブラリーごとに実際コードとデータとが存在する共有ライブラリーと、応用プログラムとのシンボルアドレスバインディングのためにシンボルのアドレス情報だけを有するアドレスライブラリーとを生成す段階と、
(c)PICオプションを与えてプログラムをコンパイルする段階と、
(d)コンパイルされたプログラムのコード、データセクション及び前記共有ライブラリーで前記応用プログラムのために割り当てられたデータセクション開始アドレスを示すデータセクションテーブルをリンカスクリプトによって配置して実行ファイル形態の応用プログラムに作る段階と、
(e)前期応用プログラム実行のために前記ビルドされた共有ライブラリーをメモリーに積載する段階とを含むことを特徴とするMMUなしの共有ライブラリーシステム構築方法。 - 前記コンパイラーは、前記各ライブラリーに1から始まる一連の番号をIDとして各々付与し、付与されたIDを基盤にライブラリー名を再設定する段階をさらに含むことを特徴とする請求項11に記載のMMUなしの共有ライブラリーシステム構築方法。
- 前記リンカスクリプトは、
前記データセクションテーブルが前記データセクションの直前に位置するように定義され、
アドレスの大きさがnByteである場合、応用プログラムはIDがmである共有ライブラリーのデータセクション開始アドレスを(sl-n*m-n)の位置(ここで、slは、前記応用プログラム自身のデータセクション開始アドレスである)から得ることを特徴とする請求項12に記載のMMUなしの共有ライブラリーシステム構築方法。 - 前記データセクションは、全域データに対するポインターテーブルのGOTと全域データを含むデータ領域とを含み、前記データセクション開始アドレスは前記GOT開始アドレスであり、前記応用プログラムは前記GOTを利用して全域データを参照することを特徴とする請求項11に記載のMMUなしの共有ライブラリーシステム構築方法。
- 前記シンボルアドレスのフォーマットは、
前記シンボルアドレスを示すmビットの第1領域と、
シンボルが定義されたライブラリーのIDを示すnビットの第2領域と、
メモリーに積載時、アドレスの再配置タイプを示すpビットの第3領域とを含むことを特徴とする請求項11に記載のMMUなしの共有ライブラリーシステム構築方法。 - 前記応用プログラムまたは前記ライブラリーの大きさが2mビットを超過せず、前記ライブラリーの大きさが2mビットを超過すれば前記ライブラリーの大きさが2mビットを超過しないように分割することを特徴とする請求項15に記載のMMUなしの共有ライブラリーシステム構築方法。
- 前記アドレス再配置タイプは、
前記シンボルのアドレスが前記メインメモリーにローディング時、メインメモリーの絶対アドレスに再配置されるべきであることを示す第1再配置タイプと、
前記シンボルのアドレスが前記データセクションの開始アドレスのGOT開始アドレスに割り当てるべきであることを示す第2再配置タイプと、
前記シンボルのアドレスがブランチ命令語の目的地アドレスであることを示し、ターゲットシステムのブランチ命令に合うフォーマットに修正しなければならない第3再配置タイプとを含むことを特徴とする請求項15に記載のMMUなしの共有ライブラリーシステム構築方法。 - 前記ターゲットシステムがuCLinuxである場合、FLATバイナリの再配置テーブルのエントリーが前記シンボルアドレスフォーマットと同じアドレスフォーマットを有することを特徴とする請求項15に記載のMMUなしの共有ライブラリーシステム構築方法。
- 前記共有ライブラリーが前記メモリーに積載される時、前記シンボルの再配置タイプによって必要なアドレス再配置を実行した結果により、シンボルの最終アドレスを決定することを特徴とする請求項15に記載のMMUなしの共有ライブラリーシステム構築方法。
- 請求項11のMMUなしの共有ライブロシアシステム構築方法をコンピュータで実行可能なプログラムコードで記録した記録媒体。
- 応用プログラムが参照するデータセクションの開始アドレスが設定されるデータセクションベースレジスターを具備するMMUなしの共有ライブラリーシステムで応用プログラムがメモリーに積載された共有ライブラリーを利用する方法において、
(a)前期応用プログラムが前記共有ライブラリーの関数を呼び出すと、前記共有ライブラリーで応用プログラムのために割り当てられたデータセクションの開始アドレスを前記データセクションベースレジスターに設定する段階と、
(b)前期応用プログラムは、前記データセクションベースレジスターに設定されたアドレスに接近して呼び出した関数を実行する段階とを含むことを特徴とするMMUなしの共有ライブラリーシステムで共有ライブラリー使用方法。 - 前記(a)段階は、
(a1)前記応用プログラムが前記共有ライブラリーの関数を呼び出すと、前記データセクションベースレジスターに設定されているデータセクションアドレスを他の貯蔵空間に保存する段階と、
(a2)前記応用プログラムのデータセクションテーブルを参照して前記共有ライブラリーが応用プログラムのために割り当てたデータセクションの開始アドレスを前記データセクションベースレジスターに設定する段階と、
(a3)応用プログラムは、前記データセクションベースレジスターに設定されたアドレスを参照したGOT接近を通じて全域データを参照して呼び出した関数を実行する段階と、
(a4)呼び出した関数実行が完了すれば、前記(a1)段階で他の貯蔵空間に保存されたデータセクションアドレスを前記データセクションベースレジスターにまた設定する段階とを含むことを特徴とする請求項21に記載のMMUなしの共有ライブラリーシステムで共有ライブラリー使用方法。 - 請求項21の共有ライブラリー使用方法をコンピュータで実行可能なプログラムコードで記録した記録媒体。
- MMUなしの共有ライブラリーシステムで共有ライブラリーのビルド方法において、
(a)PICオプションで共有するライブラリーをコンパイルする段階と、
(b)共有するライブラリーに固有の番号をIDとして割り当ててライブラリー名を再設定する段階と、
(c)コンパイルされたライブラリーから含まれたいくつかのオブジェクトファイルを一つのオブジェクトファイルに再配置する段階と、
(d)ターゲットシステムに合わせて(c)段階のオブジェクトファイルのフォーマットを変換し、フォーマット変換されたオブジェクトファイルを共有するコードとデータとが存在する共有ライブラリーとして生成す段階と、
(e)コンパイルされたライブラリー及び前記共有ライブラリーからシンボルの位置情報及びアドレス情報を各々抽出し、オブジェクト別にシンボルのアドレスが定義されたアドレスライブラリーを生成す段階とを含むことを特徴とする共有ライブラリーのビルド方法。 - 前記アドレスライブラリーは、ライブラリーコードを除外したエクスポートシンボルのアドレス情報だけ定義したことを特徴とする請求項24に記載の共有ライブラリーのビルド方法。
- コンパイル時、共有するライブラリーの各関数には、応用プログラムのために割当されるデータセクションの開始アドレスを所定のレジスターに設定するように定義する段階をさらに含むことを特徴とする請求項24に記載の共有ライブラリーのビルド方法。
- 前記(e)段階は、
(e1)コンパイルされたライブラリーからシンボルがどんなオブジェクトに属しているかを示す位置情報を抽出する段階と、
(e2)シンボルが前記共有ライブラリー内でのオフセットをシンボルアドレス情報として抽出する段階と、
(e3)前記位置情報を利用して前記各シンボルが位置したオブジェクト内で前記シンボルアドレスが定義されたアドレスライブラリーを生成す段階とを含むことを特徴とする請求項24に記載の共有ライブラリーのビルド方法。 - 請求項22の共有ライブラリービルド方法をコンピュータで実行可能なプログラムコードで記録した記録媒体。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR10-2003-0047538A KR100518584B1 (ko) | 2003-07-12 | 2003-07-12 | 공유 라이브러리 시스템 및 상기 시스템 구축 방법 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2005032259A true JP2005032259A (ja) | 2005-02-03 |
Family
ID=33563008
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2004205174A Withdrawn JP2005032259A (ja) | 2003-07-12 | 2004-07-12 | 共有ライブラリーシステム及び前記システム構築方法 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20050010911A1 (ja) |
JP (1) | JP2005032259A (ja) |
KR (1) | KR100518584B1 (ja) |
CN (1) | CN1577268A (ja) |
TW (1) | TWI243306B (ja) |
Families Citing this family (46)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100722233B1 (ko) * | 2005-10-12 | 2007-05-29 | 인포뱅크 주식회사 | 임베디드 시스템을 위한 분리된 실행 파일의 링크 방법 및장치 |
KR100799599B1 (ko) * | 2006-05-03 | 2008-01-31 | 연세대학교 산학협력단 | 기억 관리 장치가 없는 마이크로 컨트롤러를 포함하는 임베디드 하드웨어의 운영 시스템 및 방법 |
US8020146B2 (en) * | 2006-07-24 | 2011-09-13 | International Business Machines Corporation | Applying deferred refactoring and API changes in an IDE |
CN100426243C (zh) * | 2006-09-15 | 2008-10-15 | 华为技术有限公司 | 一种数据结构传输方法 |
CN101187899B (zh) * | 2006-11-17 | 2010-05-12 | 中兴通讯股份有限公司 | 嵌入式***存储空间的优化方法 |
KR100860963B1 (ko) * | 2007-03-08 | 2008-09-30 | 삼성전자주식회사 | 컴포넌트 기반의 소프트웨어 개발을 위한 장치 및 방법 |
KR100884926B1 (ko) * | 2007-06-15 | 2009-02-20 | 한국과학기술원 | 가상 메모리가 없는 임베디드 시스템에서의 기존 공유라이브러리 사용방법 |
US8453128B2 (en) * | 2007-09-28 | 2013-05-28 | Oracle America, Inc. | Method and system for implementing a just-in-time compiler |
KR100985071B1 (ko) * | 2008-02-01 | 2010-10-05 | 주식회사 안철수연구소 | 스크립트 언어를 사용한 취약점 공격 코드의 실시간 탐지및 차단 방법, 및 그 장치 |
US9015727B2 (en) * | 2008-04-02 | 2015-04-21 | Qualcomm Incorporated | Sharing operating system sub-processes across tasks |
US9678775B1 (en) * | 2008-04-09 | 2017-06-13 | Nvidia Corporation | Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment |
US8776030B2 (en) * | 2008-04-09 | 2014-07-08 | Nvidia Corporation | Partitioning CUDA code for execution by a general purpose processor |
CN101441566B (zh) * | 2008-11-18 | 2012-04-25 | 腾讯科技(深圳)有限公司 | 一种在嵌入式平台上动态链接程序的方法 |
US20110113409A1 (en) * | 2009-11-10 | 2011-05-12 | Rodrick Evans | Symbol capabilities support within elf |
US8510788B2 (en) * | 2009-11-12 | 2013-08-13 | Echostar Technologies L.L.C. | Build profile for a set-top box |
KR20110095050A (ko) * | 2010-02-18 | 2011-08-24 | 삼성전자주식회사 | 공유 라이브러리 디버깅 장치 |
US8724037B1 (en) | 2010-06-04 | 2014-05-13 | Kurt William Massey | Mounting system |
US10281080B1 (en) | 2010-06-04 | 2019-05-07 | Kurt William Massey | Adjustable mounting systems for televisions |
CN102393845B (zh) * | 2011-06-30 | 2013-06-05 | 北京新媒传信科技有限公司 | 一种共享库管理方法和*** |
US9110751B2 (en) * | 2012-02-13 | 2015-08-18 | Microsoft Technology Licensing, Llc | Generating and caching software code |
EP2828739A4 (en) | 2012-03-22 | 2015-12-09 | Intel Corp | ENVIRONMENT FOR NESTED EMULATIONS AND DYNAMIC LINKS |
EP2924522B1 (de) * | 2014-03-28 | 2016-05-25 | dSPACE digital signal processing and control engineering GmbH | Verfahren zur Beeinflussung eines Steuerprogramms |
JP6409514B2 (ja) * | 2014-11-10 | 2018-10-24 | 日本電気株式会社 | 情報処理装置およびライブラリロード方法、並びにコンピュータ・プログラム |
US10560135B1 (en) | 2015-06-05 | 2020-02-11 | Life365, Inc. | Health, wellness and activity monitor |
US9974492B1 (en) | 2015-06-05 | 2018-05-22 | Life365, Inc. | Health monitoring and communications device |
US11329683B1 (en) | 2015-06-05 | 2022-05-10 | Life365, Inc. | Device configured for functional diagnosis and updates |
US10185513B1 (en) | 2015-06-05 | 2019-01-22 | Life365, Inc. | Device configured for dynamic software change |
US10388411B1 (en) | 2015-09-02 | 2019-08-20 | Life365, Inc. | Device configured for functional diagnosis and updates |
CN105426223B (zh) * | 2015-12-25 | 2019-01-04 | 百度在线网络技术(北京)有限公司 | 应用加载方法和装置 |
JP2017126293A (ja) | 2016-01-15 | 2017-07-20 | キヤノン株式会社 | 情報処理装置及びリソース管理方法 |
US10853057B1 (en) * | 2017-03-29 | 2020-12-01 | Amazon Technologies, Inc. | Software library versioning with caching |
US10738941B2 (en) | 2017-09-04 | 2020-08-11 | Manehu Product Alliance, Llc | Display mount assembly |
US10795659B1 (en) * | 2017-11-02 | 2020-10-06 | Virtuozzo International Gmbh | System and method for live patching processes in user space |
US10859201B2 (en) | 2018-04-10 | 2020-12-08 | Manehu Product Alliance, Llc | Display mount assembly |
CN109189469B (zh) * | 2018-06-22 | 2020-08-28 | 北京大学 | 基于反射的安卓应用微服务化方法及*** |
JPWO2020045269A1 (ja) * | 2018-08-28 | 2021-08-10 | tonoi株式会社 | システム、情報処理方法、及びプログラム |
CN114153521A (zh) * | 2019-03-25 | 2022-03-08 | 华为技术有限公司 | 类加载方法和装置 |
US11033107B2 (en) | 2019-07-16 | 2021-06-15 | Francis Douglas Warren | Tilting mounting apparatus |
WO2021127552A1 (en) | 2019-12-19 | 2021-06-24 | Manehu Product Alliance, Llc, D/B/A | Adjustable display mounting system |
CA3167490A1 (en) | 2020-02-10 | 2021-08-19 | Brian Newville | Multidirectional display mount |
CN111324396B (zh) * | 2020-03-19 | 2023-09-15 | 深圳市迅雷网络技术有限公司 | 一种区块链智能合约执行方法、装置及设备 |
CN114327467A (zh) * | 2020-09-29 | 2022-04-12 | 武汉斗鱼网络科技有限公司 | 一种获取***函数信息的方法以及相关设备 |
US11347523B2 (en) * | 2020-11-05 | 2022-05-31 | International Business Machines Corporation | Updated shared library reloading without stopping the execution of an application |
KR20240025509A (ko) * | 2022-08-17 | 2024-02-27 | 베리실리콘 마이크로일렉트로닉스 (상하이) 컴퍼니 리미티드 | 크로스 링크 방법, 장치, 전자 설비 및 저장 매체 |
CN116594971B (zh) * | 2023-07-17 | 2023-09-29 | 山东天意装配式建筑装备研究院有限公司 | 基于bim的装配式建筑数据优化存储方法 |
CN117707652B (zh) * | 2023-12-14 | 2024-06-11 | 北京中电华大电子设计有限责任公司 | 数据编译、参数传递方法及装置 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5291601A (en) * | 1989-06-01 | 1994-03-01 | Hewlett-Packard Company | Shared libraries implemented with linking program loader |
US5835743A (en) * | 1994-06-30 | 1998-11-10 | Sun Microsystems, Inc. | Application binary interface and method of interfacing binary application program to digital computer |
US6260075B1 (en) * | 1995-06-19 | 2001-07-10 | International Business Machines Corporation | System and method for providing shared global offset table for common shared library in a computer system |
US5774722A (en) * | 1995-12-14 | 1998-06-30 | International Business Machines Corporation | Method for efficient external reference resolution in dynamically linked shared code libraries in single address space operating systems |
US5797014A (en) * | 1995-12-14 | 1998-08-18 | International Business Machines Corporation | Method for reducing processor cycles used for global offset table address computation in a position independent shared library |
US5845118A (en) * | 1995-12-14 | 1998-12-01 | International Business Machines Corporation | Method for generating shared library executable code with lazy global offset table address calculation |
US5778212A (en) * | 1996-06-03 | 1998-07-07 | Silicon Graphics, Inc. | Interprocedural analysis user interface |
US6421827B1 (en) * | 1997-12-17 | 2002-07-16 | International Business Machines Corporation | System and method for detecting and reordering loading patterns |
US6314501B1 (en) * | 1998-07-23 | 2001-11-06 | Unisys Corporation | Computer system and method for operating multiple operating systems in different partitions of the computer system and for allowing the different partitions to communicate with one another through shared memory |
US6434742B1 (en) * | 1999-05-10 | 2002-08-13 | Lucent Technologies Inc. | Symbol for automatically renaming symbols in files during the compiling of the files |
US6708330B1 (en) * | 2000-06-13 | 2004-03-16 | Cisco Technology, Inc. | Performance improvement of critical code execution |
-
2003
- 2003-07-12 KR KR10-2003-0047538A patent/KR100518584B1/ko not_active IP Right Cessation
-
2004
- 2004-07-01 TW TW093119881A patent/TWI243306B/zh not_active IP Right Cessation
- 2004-07-12 JP JP2004205174A patent/JP2005032259A/ja not_active Withdrawn
- 2004-07-12 CN CNA2004100635824A patent/CN1577268A/zh active Pending
- 2004-07-12 US US10/889,431 patent/US20050010911A1/en not_active Abandoned
Also Published As
Publication number | Publication date |
---|---|
TW200511007A (en) | 2005-03-16 |
CN1577268A (zh) | 2005-02-09 |
TWI243306B (en) | 2005-11-11 |
KR20050007906A (ko) | 2005-01-21 |
US20050010911A1 (en) | 2005-01-13 |
KR100518584B1 (ko) | 2005-10-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2005032259A (ja) | 共有ライブラリーシステム及び前記システム構築方法 | |
EP2487585B1 (en) | Method and device for dynamically loading relocatable file | |
US8341614B2 (en) | Memory management for closures | |
US20080005719A1 (en) | Methods, systems, and computer program products for providing a program execution environment | |
EP4002097B1 (en) | Load module compiler | |
JPH01166141A (ja) | デバッグ情報提供方法 | |
JPH0836488A (ja) | ダイナミック・パッチングを使用するランタイム・エラー・チェック方法と装置 | |
US20080005728A1 (en) | Methods, systems, and computer program products for enabling cross language access to an addressable entity in an execution environment | |
US7457927B2 (en) | Memory dump of a computer system | |
US7269828B2 (en) | Method for safely instrumenting large binary code | |
CN110659088B (zh) | 一种嵌入式环境下程序扩展的方法及*** | |
CN101334737A (zh) | 一种嵌入式设备的启动或复位方法 | |
CN115700470A (zh) | 文件加载的处理方法和装置,计算机存储介质和电子设备 | |
US8589899B2 (en) | Optimization system, optimization method, and compiler program | |
US20020087956A1 (en) | System and method for linear processing of software modules | |
US6314564B1 (en) | Method for resolving arbitrarily complex expressions at link-time | |
US9262136B2 (en) | Allocate instruction and API call that contain a sybmol for a non-memory resource | |
JP6245028B2 (ja) | 実行制御方法、実行制御プログラムおよび実行制御装置 | |
KR100478463B1 (ko) | 응용 프로그램의 동적링크 방법 | |
US20050149270A1 (en) | Componentware creating method, apparatus and recording medium | |
CN115167862A (zh) | 补丁方法及相关设备 | |
CN106897588B (zh) | 一种标签函数的处理方法及装置 | |
JP6020071B2 (ja) | プログラマブルコントローラシステム、その支援装置、プログラマブルコントローラ | |
CN114866451B (zh) | iOS端路由通信改进方法、装置、存储介质和设备 | |
US9223555B2 (en) | Hierarchical resource pools in a linker |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20070626 |
|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20090206 |