(57)【要約】【課題】  共有ライブラリーシステム及び前記システム構築方法が開示される。【解決手段】  応用プログラムまたは共有ライブラリーで応用プログラムのために割り当てたデータセクションの開始アドレスが設定されるデータセクションベースレジスターと、前記データセクションの開始アドレスがデータセクションベースレジスターに設定されるように各ライブラリーに含まれる関数を定義するコンパイラーと、共有ライブラリー及びアドレスライブラリーを生成する共有ライブラリービルダーと、コンパイルされたプログラムを実行ファイル形態の応用プログラムに作る応用プログラムビルダーとシンボルの最終アドレスを決定するランタイムローダーとを含む共有ライブラリーシステム及び前記システム構築方法である。【選択図】  図１
2005032259.tif 000002
【特許請求の範囲】
【請求項１】
応用プログラムのデータセクション開始アドレスまたは共有ライブラリーで前記応用プログラムのために割り当てたデータセクションの開始アドレスが設定されるデータセクションベースレジスターと、
ソースコード形態のプログラム及びライブラリーを位置独立なコード(ＰＩＣ）オプションでコンパイルし、前記各ライブラリーが前記プログラムに割り当てたデータセクションの開始アドレスが前記データセクションベースレジスターに設定されるように前記各ライブラリーに含まれる関数を定義するコンパイラーと、
前記コンパイルされたライブラリーを利用して各ライブラリーごとに、多様な応用プログラムに共有されるコード及びデータをシンボルとして含む共有ライブラリー及び前記プログラムとのシンボルアドレスバインディングのためにシンボルのアドレス情報を有するアドレスライブラリーを生成す共有ライブラリービルダーと、
コンパイルされたプログラムのコード、データ及び前記共有ライブラリーで前記応用プログラムのために割り当てられたデータセクション開始アドレスが定義されたデータセクションテーブルをリンカスクリプトによって配置して前記コンパイルされたプログラムを実行ファイル形態の前記応用プログラムに作る応用プログラムビルダーと、
前記応用プログラム及び前記共有ライブラリーをメモリーに積載し、前記共有ライブラリーを前記メモリーに積載する時、前記シンボルのアドレス情報に含まれたシンボルの再配置タイプによって必要なアドレス再配置を実行した結果によってシンボルの最終アドレスを決定するランタイムローダーとを含み、
前記データセクションは、全域データに対するポインターテーブルのグローバルオフセットテーブル(ＧＯＴ)と全域データを含むデータ領域とを含み、前記データセクション開始アドレスは前記ＧＯＴ開始アドレスであり、前記応用プログラムは前記ＧＯＴを利用して全域データを参照することを特徴とするメモリマネジメントユニット(ＭＭＵ)なしの共有ライブラリーシステム。
【請求項２】
前記コンパイラーは、前記ライブラリーに１から始まる一連の番号をＩＤとして各々付与し、付与されたＩＤを基盤にライブラリー名を再設定することを特徴とする請求項１に記載のＭＭＵなしの共有ライブラリーシステム。
【請求項３】
前記再設定されたライブラリー名は、ライブラリー検索の便宜のために所定のディレクトリに前記再設定されたライブラリー名が存在することを特徴とする請求項２に記載のＭＭＵなしの共有ライブラリーシステム。
【請求項４】
前記リンカスクリプトは、
前記データセクションテーブルが前記データセクションの直前に位置するように定義され、
アドレスの大きさがｎＢｙｔｅである場合、応用プログラムはＩＤがｍである共有ライブラリーのデータセクション開始アドレスを(ｓｌ-ｎ＊ｍ-ｎ)の位置(ここで、ｓｌは、前記応用プログラム自身のデータセクション開始アドレスである)で得ることを特徴とする請求項２に記載のＭＭＵなしの共有ライブラリーシステム。
【請求項５】
前記ライブラリービルダーは、
コンパイルされたライブラリーに含まれたいくつかのオブジェクトファイルを一つのオブジェクトファイルに再配置するリンカと、
ターゲットシステムに合わせてオブジェクトファイルのフォーマットを変換し、フォーマット変換されたオブジェクトファイルを前記共有ライブラリーとして生成すフォーマット変換ユーティリティと、
前記コンパイルされたライブラリーからシンボルがどんなオブジェクトに属しているかを示す位置情報及び前記シンボルが前記共有ライブラリー内でのオフセットをシンボルアドレス情報として抽出し、前記位置情報を利用して前記各シンボルが位置したオブジェクト内でシンボルのアドレスが定義された前記アドレスライブラリーを生成すＧＥＮＳＹＭユーティリティを含むことを特徴とする請求項１に記載のＭＭＵなしの共有ライブラリーシステム。
【請求項６】
前記アドレスライブラリーは、ライブラリーコードを除外したエクスポートシンボルのアドレス情報だけ定義したことを特徴とする請求項５に記載のＭＭＵなしの共有ライブラリーシステム。
【請求項７】
前記シンボルアドレスのフォーマットは、
前記シンボルアドレスを示すｐビットの第１領域と、
シンボルが定義されたライブラリーのＩＤを示すｑビットの第２領域と、
前記メインメモリーに積載時、アドレスの再配置タイプを示すｒビットの第３領域とを含むことを特徴とする請求項１に記載のＭＭＵなしの共有ライブラリーシステム。
【請求項８】
前記応用プログラムまたは前記ライブラリーの大きさが２ｍビットを超過せず、前記ライブラリーの大きさが２ｍビットを超過すれば前記ライブラリーの大きさが２ｍビットを超過しないように分割することを特徴とする請求項７に記載のＭＭＵなしの共有ライブラリーシステム。
【請求項９】
前記アドレス再配置タイプは、
前記シンボルのアドレスが前記メインメモリーにローディング時、メインメモリーの絶対アドレスに再配置されるべきであることを示す第１再配置タイプと、
前記シンボルのアドレスが前記データセクションの開始アドレスのＧＯＴ開始アドレスに割り当てるべきであることを示す第２再配置タイプと、
前記シンボルのアドレスがブランチ命令語の目的地アドレスであることを示し、ターゲットシステムのブランチ命令に合うフォーマットに修正しなければならない第３再配置タイプとを含むことを特徴とする請求項７に記載のＭＭＵなしの共有ライブラリーシステム。
【請求項１０】
前記ターゲットシステムがｕＣＬｉｎｕｘの場合、ＦＬＡＴバイナリの再配置テーブルのエントリーが前記シンボルアドレスフォーマットと同じアドレスフォーマットを有することを特徴とする請求項７に記載のＭＭＵなしの共有ライブラリーシステム。
【請求項１１】
応用プログラムが参照するデータセクションの開始アドレスが設定されるデータセクションベースレジスターを具備するＭＭＵなしの共有ライブラリーシステム構築方法において、
(ａ)共有するライブラリーをＰＩＣオプションでコンパイルし、コンパイル時に前記共有するライブラリーの各関数に、実行するプログラムのために割り当てられたデータセクションの開始アドレスが前記データセクションベースレジスターに設定されることを定義する段階と、
(ｂ)コンパイルされたライブラリーを利用して各ライブラリーごとに実際コードとデータとが存在する共有ライブラリーと、応用プログラムとのシンボルアドレスバインディングのためにシンボルのアドレス情報だけを有するアドレスライブラリーとを生成す段階と、
(ｃ)ＰＩＣオプションを与えてプログラムをコンパイルする段階と、
(ｄ)コンパイルされたプログラムのコード、データセクション及び前記共有ライブラリーで前記応用プログラムのために割り当てられたデータセクション開始アドレスを示すデータセクションテーブルをリンカスクリプトによって配置して実行ファイル形態の応用プログラムに作る段階と、
(ｅ)前期応用プログラム実行のために前記ビルドされた共有ライブラリーをメモリーに積載する段階とを含むことを特徴とするＭＭＵなしの共有ライブラリーシステム構築方法。
【請求項１２】
前記コンパイラーは、前記各ライブラリーに１から始まる一連の番号をＩＤとして各々付与し、付与されたＩＤを基盤にライブラリー名を再設定する段階をさらに含むことを特徴とする請求項１１に記載のＭＭＵなしの共有ライブラリーシステム構築方法。
【請求項１３】
前記リンカスクリプトは、
前記データセクションテーブルが前記データセクションの直前に位置するように定義され、
アドレスの大きさがｎＢｙｔｅである場合、応用プログラムはＩＤがｍである共有ライブラリーのデータセクション開始アドレスを(ｓｌ-ｎ＊ｍ-ｎ)の位置(ここで、ｓｌは、前記応用プログラム自身のデータセクション開始アドレスである)から得ることを特徴とする請求項１２に記載のＭＭＵなしの共有ライブラリーシステム構築方法。
【請求項１４】
前記データセクションは、全域データに対するポインターテーブルのＧＯＴと全域データを含むデータ領域とを含み、前記データセクション開始アドレスは前記ＧＯＴ開始アドレスであり、前記応用プログラムは前記ＧＯＴを利用して全域データを参照することを特徴とする請求項１１に記載のＭＭＵなしの共有ライブラリーシステム構築方法。
【請求項１５】
前記シンボルアドレスのフォーマットは、
前記シンボルアドレスを示すｍビットの第１領域と、
シンボルが定義されたライブラリーのＩＤを示すｎビットの第２領域と、
メモリーに積載時、アドレスの再配置タイプを示すｐビットの第３領域とを含むことを特徴とする請求項１１に記載のＭＭＵなしの共有ライブラリーシステム構築方法。
【請求項１６】
前記応用プログラムまたは前記ライブラリーの大きさが２ｍビットを超過せず、前記ライブラリーの大きさが２ｍビットを超過すれば前記ライブラリーの大きさが２ｍビットを超過しないように分割することを特徴とする請求項１５に記載のＭＭＵなしの共有ライブラリーシステム構築方法。
【請求項１７】
前記アドレス再配置タイプは、
前記シンボルのアドレスが前記メインメモリーにローディング時、メインメモリーの絶対アドレスに再配置されるべきであることを示す第１再配置タイプと、
前記シンボルのアドレスが前記データセクションの開始アドレスのＧＯＴ開始アドレスに割り当てるべきであることを示す第２再配置タイプと、
前記シンボルのアドレスがブランチ命令語の目的地アドレスであることを示し、ターゲットシステムのブランチ命令に合うフォーマットに修正しなければならない第３再配置タイプとを含むことを特徴とする請求項１５に記載のＭＭＵなしの共有ライブラリーシステム構築方法。
【請求項１８】
前記ターゲットシステムがｕＣＬｉｎｕｘである場合、ＦＬＡＴバイナリの再配置テーブルのエントリーが前記シンボルアドレスフォーマットと同じアドレスフォーマットを有することを特徴とする請求項１５に記載のＭＭＵなしの共有ライブラリーシステム構築方法。
【請求項１９】
前記共有ライブラリーが前記メモリーに積載される時、前記シンボルの再配置タイプによって必要なアドレス再配置を実行した結果により、シンボルの最終アドレスを決定することを特徴とする請求項１５に記載のＭＭＵなしの共有ライブラリーシステム構築方法。
【請求項２０】
請求項１１のＭＭＵなしの共有ライブロシアシステム構築方法をコンピュータで実行可能なプログラムコードで記録した記録媒体。
【請求項２１】
応用プログラムが参照するデータセクションの開始アドレスが設定されるデータセクションベースレジスターを具備するＭＭＵなしの共有ライブラリーシステムで応用プログラムがメモリーに積載された共有ライブラリーを利用する方法において、
(ａ)前期応用プログラムが前記共有ライブラリーの関数を呼び出すと、前記共有ライブラリーで応用プログラムのために割り当てられたデータセクションの開始アドレスを前記データセクションベースレジスターに設定する段階と、
(ｂ)前期応用プログラムは、前記データセクションベースレジスターに設定されたアドレスに接近して呼び出した関数を実行する段階とを含むことを特徴とするＭＭＵなしの共有ライブラリーシステムで共有ライブラリー使用方法。
【請求項２２】
前記(ａ)段階は、
(ａ１)前記応用プログラムが前記共有ライブラリーの関数を呼び出すと、前記データセクションベースレジスターに設定されているデータセクションアドレスを他の貯蔵空間に保存する段階と、
(ａ２)前記応用プログラムのデータセクションテーブルを参照して前記共有ライブラリーが応用プログラムのために割り当てたデータセクションの開始アドレスを前記データセクションベースレジスターに設定する段階と、
(ａ３)応用プログラムは、前記データセクションベースレジスターに設定されたアドレスを参照したＧＯＴ接近を通じて全域データを参照して呼び出した関数を実行する段階と、
(ａ４)呼び出した関数実行が完了すれば、前記(ａ１)段階で他の貯蔵空間に保存されたデータセクションアドレスを前記データセクションベースレジスターにまた設定する段階とを含むことを特徴とする請求項２１に記載のＭＭＵなしの共有ライブラリーシステムで共有ライブラリー使用方法。
【請求項２３】
請求項２１の共有ライブラリー使用方法をコンピュータで実行可能なプログラムコードで記録した記録媒体。
【請求項２４】
ＭＭＵなしの共有ライブラリーシステムで共有ライブラリーのビルド方法において、
(ａ)ＰＩＣオプションで共有するライブラリーをコンパイルする段階と、
(ｂ)共有するライブラリーに固有の番号をＩＤとして割り当ててライブラリー名を再設定する段階と、
(ｃ)コンパイルされたライブラリーから含まれたいくつかのオブジェクトファイルを一つのオブジェクトファイルに再配置する段階と、
(ｄ)ターゲットシステムに合わせて(ｃ)段階のオブジェクトファイルのフォーマットを変換し、フォーマット変換されたオブジェクトファイルを共有するコードとデータとが存在する共有ライブラリーとして生成す段階と、
(ｅ)コンパイルされたライブラリー及び前記共有ライブラリーからシンボルの位置情報及びアドレス情報を各々抽出し、オブジェクト別にシンボルのアドレスが定義されたアドレスライブラリーを生成す段階とを含むことを特徴とする共有ライブラリーのビルド方法。
【請求項２５】
前記アドレスライブラリーは、ライブラリーコードを除外したエクスポートシンボルのアドレス情報だけ定義したことを特徴とする請求項２４に記載の共有ライブラリーのビルド方法。
【請求項２６】
コンパイル時、共有するライブラリーの各関数には、応用プログラムのために割当されるデータセクションの開始アドレスを所定のレジスターに設定するように定義する段階をさらに含むことを特徴とする請求項２４に記載の共有ライブラリーのビルド方法。
【請求項２７】
前記(ｅ)段階は、
(ｅ１)コンパイルされたライブラリーからシンボルがどんなオブジェクトに属しているかを示す位置情報を抽出する段階と、
(ｅ２)シンボルが前記共有ライブラリー内でのオフセットをシンボルアドレス情報として抽出する段階と、
(ｅ３)前記位置情報を利用して前記各シンボルが位置したオブジェクト内で前記シンボルアドレスが定義されたアドレスライブラリーを生成す段階とを含むことを特徴とする請求項２４に記載の共有ライブラリーのビルド方法。
【請求項２８】
請求項２２の共有ライブラリービルド方法をコンピュータで実行可能なプログラムコードで記録した記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、多数の応用プログラムが一つのライブラリーインスタンスを共有する共有ライブラリーシステムに係り、特に、ＭＭＵ(Memory Management Unit)がなくても共有ライブラリーの使用が可能な共有ライブラリーシステム及び前記システム構築方法に関する。
【背景技術】
【０００２】
一般的に、ライブラリーは、コード自体とそのコードで使用するデータのためのデータセクションとで構成される。ライブラリーは、多様な応用プログラムが一つのライブラリーコードを共有して使用しているか否かによって、非共有ライブラリーと共有ライブラリーとに分けられる。この内、非共有ライブラリー(普通＊.ａ形態のファイル)は、リンキング段階でライブラリーコードを応用プログラムで複写して使用する形態のライブラリーである。一方、共有ライブラリー(普通＊.ｓｏ形態のファイル)は、ランタイムにライブラリーコードインスタンスが応用プログラム間に共有されて使われるように製作されたライブラリーである。このように、共有ライブラリーを利用するシステムでは、リンキング段階でライブラリーコードの複写が生じない。共有ライブラリーの目標は、ライブラリーのコードは共有しながらデータセクションは各プログラムごとに独立に提供することである。したがって、共有ライブラリーを使用すれば、ラム及びフラッシュのサイズを相当に小さくしうる。
【０００３】
共有ライブラリーは、完全なリンキング、特にシンボルアドレスのバインディングが起きる時期によって静的連結共有ライブラリーと動的連結共有ライブラリーとに分かれる。普通、共有ライブラリーというのは、動的連結共有ライブラリーをいう。動的連結共有ライブラリーでは、実際のシンボルアドレスバインディングがランタイムにプログラムをローディングしながら起きる。そのため、応用プログラムがビルドされた以後にライブラリーの具現が変更されても、応用プログラムを新しくビルドする必要がない長所がある。しかし、その代わりにランタイムにシンボルをバインディングするためのオーバヘッドが発生する。一方、静的連結共有ライブラリーでは、実際のシンボルアドレスバインディングがリンキングタイムに起きる。したがって、この場合ライブラリーが変更されれば、そのライブラリーを参照する全ての応用プログラムを再度コンパイルしなければならない不便があるが、動的連結共有ライブラリーのようなランタイムオーバヘッドが非常に少ない長所がある。
【０００４】
一方、ＭＭＵが存在するシステムでは、仮想メモリーマッピングを通じて多様なプロセスが一つのページを共有可能なので、共有ライブラリーを比較的容易に利用できる。しかし、ＭＭＵのないシステムでは、多様なプロセスが一つのページを共有不可能なので、共有ライブラリーの利用がむずかしい。しかし、ｕＣＬｉｎｕｘのようにＭＭＵを利用しないシステムが多く利用され、このようにＭＭＵなしのシステムでもメモリーの効率的な使用のため共有ライブラリーの支援が要求される。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明が成そうとする第１の技術的課題は、ＭＭＵなしでも静的連結共有ライブラリーの使用可能なＭＭＵなしの共有ライブラリーシステムを提供することである。
本発明が成そうとする第２の技術的課題は、前記ＭＭＵなしの共有ライブラリーシステム構築方法を提供することである。
本発明が成そうとする第３の技術的課題は、前記ＭＭＵなしの共有ライブラリーシステムで共有ライブラリーを使用する方法を提供することである。
【０００６】
本発明が成そうとする第４の技術的課題は、前記ＭＭＵなしの共有ライブラリーシステムで共有ライブラリーをビルドする方法を提供することである。
本発明が成そうとする第５の技術的課題は、前記ＭＭＵなしの共有ライブラリーシステム構築方法をコンピュータで実行可能なプログラムコードで記録された記録媒体を提供することである。
本発明が成そうとする第６の技術的課題は、前記共有ライブラリー使用方法をコンピュータで実行可能なプログラムコードで記録した記録媒体を提供することである。
本発明が成そうとする第７の技術的課題は、前記共有ライブラリービルド方法をコンピュータで実行可能なプログラムコードで記録した記録媒体を提供することである。
【課題を解決するための手段】
【０００７】
前記第１課題を成すために、本発明に係るＭＭＵなしの共有ライブラリーシステムは、応用プログラムのデータセクション開始アドレスまたは共有ライブラリーで応用プログラムのために割り当てたデータセクションの開始アドレスが設定されるデータセクションベースレジスターと、ソースコード形態のプログラム及びライブラリーをＰＩＣ(Position Independent Code)オプションでコンパイルし、各ライブラリーがプログラムに割り当てたデータセクションの開始アドレスがデータセクションベースレジスターに設定されるように各ライブラリーに含まれる関数を定義するコンパイラーと、コンパイルされたライブラリーを利用して各ライブラリーごとに、多様な応用プログラムに共有されるコード及びデータをシンボルとして含む共有ライブラリー及びプログラムとのシンボルアドレスバインディングのためにシンボルのアドレス情報を有するアドレスライブラリーを生成す共有ライブラリービルダーと、コンパイルされたプログラムのコード、データ及び共有ライブラリーで応用プログラムのために割当てられたデータセクション開始アドレスが定義されたデータセクションテーブルをリンカスクリプトによって配置してコンパイルされたプログラムを実行ファイル形態の応用プログラムに作る応用プログラムビルダーと応用プログラム及び共有ライブラリーをメモリーに積載し、共有ライブラリーをメモリーに積載する時、シンボルのアドレス情報に含まれたシンボルの再配置タイプによって必要なアドレス再配置を実行した結果によってシンボルの最終アドレスを決定するランタイムローダーとを含む。データセクションは、全域データに対するポインターテーブルのＧＯＴ(Global Offset Table)と全域データを含むデータ領域とを含み、データセクション開始アドレスはＧＯＴ開始アドレスであり、応用プログラムはＧＯＴを利用して全域データを参照することが望ましい。
【０００８】
前記第２課題を成すために、応用プログラムが参照するデータセクションの開始アドレスが設定されるデータセクションベースレジスターを具備する本発明に係るＭＭＵなしの共有ライブラリーシステム構築方法は、共有するライブラリーをＰＩＣオプションでコンパイルし、コンパイルの際共有するライブラリーの各関数に、実行するプログラムのために割当てられたデータセクションの開始アドレスがデータセクションベースレジスターに設定されることを定義する(ａ)段階と、コンパイルされたライブラリーを利用して各ライブラリーごとに実際コードとデータとが存在する共有ライブラリーと応用プログラムとのシンボルアドレスバインディングのためにシンボルのアドレス情報だけを有するアドレスライブラリーを生成す(ｂ)段階と、ＰＩＣオプションを与えてプログラムをコンパイルする(ｃ)段階と、コンパイルされたプログラムのコードやデータセクション及び共有ライブラリーで応用プログラムのために割り当てられたデータセクション開始アドレスを示すデータセクションテーブルをリンカスクリプトによって配置して実行ファイル形態の応用プログラムに作る(ｄ)段階と、応用プログラム実行のためにビルドされた共有ライブラリーをメモリーに積載する(ｅ)段階とを含むことが望ましい。
【０００９】
前記第３課題を成すために、応用プログラムが参照するデータセクションの開始アドレスが設定されるデータセクションベースレジスターを具備するＭＭＵなしの共有ライブラリーシステムで応用プログラムがメモリーに積載された共有ライブラリーを利用する方法は、応用プログラムが共有ライブラリーの関数を呼び出すと共有ライブラリーで応用プログラムのために割り当てられたデータセクションの開始アドレスをデータセクションベースレジスターに設定する(ａ)段階と、応用プログラムはデータセクションベースレジスターに設定されたアドレスに接近して呼び出した関数を実行する(ｂ)段階とを含むことが望ましい。
【００１０】
前記第４課題を成すために、ＭＭＵなしの共有ライブラリーシステムで本発明に係る共有ライブラリーのビルド方法は、ＰＩＣオプションで共有するライブラリーをコンパイルする(ａ)段階と、共有するライブラリーに固有の番号をＩＤとして割り当ててライブラリー名を再設定する(ｂ)段階と、コンパイルされたライブラリーで含まれたいくつかのオブジェクトファイルを一つのオブジェクトファイルに再配置する(ｃ)段階と、ターゲットシステムに合わせて(ｃ)段階のオブジェクトファイルのフォーマットを変換し、フォーマット変換されたオブジェクトファイルを共有するコードとデータとが存在する共有ライブラリーとして生成す(ｄ)段階と、コンパイルされたライブラリー及び共有ライブラリーからシンボルの位置情報及びアドレス情報を各々抽出し、オブジェクト別にシンボルのアドレスが定義されたアドレスライブラリーを生成す(ｅ)段階とを含むことが望ましい。
【発明の効果】
【００１１】
本発明に係るＭＭＵなしの共有ライブラリーシステム及び前記システム構築方法によれば、コンパイラー、ランタイムローダー及びライブラリービルダーの修正を通じてＭＭＵのようなハードウェアの支援がなくても共有ライブラリーを使用できる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明に係る共有ライブラリーシステム及びシステム構築方法を添付した図面を参照して下記の通り説明する。
まず、本発明の共有ライブラリーシステムは、静的連結共有ライブラリーを使用することとする。その理由は、内蔵型システムでは応用プログラムを新しくビルドする不便が存在してもランタイムのオーバヘッドを減らすことがより重要なためである。
【００１３】
図１は、本発明に係るＭＭＵなしの共有ライブラリーシステムの一実施例を概略的に示すブロック図である。本発明に係る共有ライブラリーシステムは、コンパイラー１００、ライブラリービルダー１２０、ランタイムローダー１４０及びデータセクションベースレジスター１６０を含んで構成され、説明の便宜のためにメインメモリー１８０を共に図示する。
【００１４】
図１で、コンパイラー１００は、所定のオプションすなわち、ＰＩＣオプションで実行するプログラム１０２及び共有するライブラリー１０４をコンパイルし、コンパイルされたプログラム１０５及びコンパイルされたライブラリー１０８を作る。実際にプログラム１０２及びライブラリー１０４のソースコードをコンパイルする時、−ｆｐｉｃオプションを与えれば容易にＰＩＣコードを生成できる。このように、コンパイラー１００は、ＰＩＣオプションで実行するプログラム１０２及びライブラリー１０４をコンパイルすることでＭＭＵなしの共有ライブラリーシステムでライブラリーが積載されるメモリーのアドレスを固定出来ない問題を解決できる。すなわち、ＰＩＣは、全ての関数の呼び出しがＰＣに関連したブランチやジャンプでなされるためにコードがメモリーに積載された位置に関係なく実行でき、ライブラリーが積載されるアドレスを固定する必要がない。また、コンパイラー１００は、ライブラリー１０４をコンパイルする時、ライブラリーの各関数のプロローグで、プログラム１０２のために割り当てられたデータセクションの開始アドレスがデータセクションベースレジスター１６０にセッティングされるようコンパイルする。そして、コンパイラー１００は、各共有ライブラリーに固有の番号をＩＤとして割り当て、各ライブラリーの名称をｌｉｂＩＤ.ｓｏと設定してコンパイルする。例えば、共有ライブラリーが３個の場合、各ライブラリーの名称は、ｌｉｂ１.ｓｏ、ｌｉｂ２.ｓｏ、ｌｉｂ３.ｓｏと各々設定される。
【００１５】
共有ライブラリービルダー１２０は、コンパイラー１００によりコンパイルされたライブラリー１０８を利用して各共有ライブラリーごとに共有ライブラリー１２４ａ及びアドレスライブラリー１２４ｂを生成する。ここで、共有ライブラリー１２４ａは実際コードやデータセクションが存在するライブラリーで、ランタイムローダー１４０によりメインメモリー１８０に積載されて多様な応用プログラムに共有されるライブラリーである。ここで、データセクションには全域データに対するポインターテーブルであるＧＯＴとデータ領域とを含み、ＧＯＴはデータ領域直前に位置する。この時、共有ライブラリー１２４ａは、いくつかのオブジェクトファイルからなるコンパイルされた共有ライブラリーが一つのオブジェクトファイルで再配置されたものである。アドレスライブラリー１２４ｂは、実際コードとデータとがなくシンボルのアドレス情報だけを有し、応用プログラムとのシンボルアドレスバインディングのために存在するライブラリーである。ここで、シンボルは、オブジェクトに含まれた関数名及び全域変数名を含む。アドレスライブラリー１２４ｂは、メインメモリー１８０に積載されず、応用プログラムをビルドする時にだけ使われる。この時、シンボルアドレスには、ランタイムローダー１４０が共有ライブラリー１２４ａをメインメモリー１８０に積載時必要な情報例えば、どんなシンボルが応用プログラムオブジェクト内のシンボルかまたは共有ライブラリー内のシンボルかそして、メインメモリー１８０に積載時アドレス再配置等に対する情報を含んでいなければならない。
【００１６】
応用プログラムビルダー１３０は、リンカスクリプトによって応用プログラムのコード、データ及びデータセクションテーブルを配置してコンパイルされた応用プログラムを実行ファイル形態の応用プログラム１０６に作る。ここで、データセクションテーブルは、共有ライブラリー１２４ａが実行するプログラム１０２のために各々割り当てたデータセクションの開始アドレスを示すテーブルである。本発明でリンカスクリプトは、各ライブラリーのデータセクション開始アドレスを示すデータセクションテーブルがデータセクションの直前に位置するように定義される。本発明に係るリンカスクリプトに対しては図６を参照して詳細に説明する。
【００１７】
ランタイムローダー１４０は、応用プログラム１０６及び共有ライブラリー１２４ａをメインメモリー１８０に積載する。ランタイムローダー１４０が共有ライブラリー１２４ａをメインメモリー１８０に積載する時、シンボルアドレス情報に含まれたシンボルの再配置タイプによって必要なアドレス再配置を実行した後、最終的にシンボルのアドレスを決定する。図４を参照して、シンボルのアドレス再配置に対する詳細な説明をする。
【００１８】
データセクションベースレジスター１６０は、コンパイルされた応用プログラム１０６のデータセクション開始アドレスまたはメインメモリー１８０に積載された共有ライブラリーのデータセクション開始アドレスが設定される。前述したように、データセクションは全域データ領域直前にＧＯＴが位置する形態であり、したがって、データセクションの開始アドレスはＧＯＴの開始アドレスである。データセクションベースレジスター１６０としてＡＲＭのＳＬレジスターを利用できる。応用プログラムがライブラリーを参照せず、自身のデータセクションを参照してプログラム実行中なら、データセクションベースレジスター１６０には応用プログラム１０６のデータセクション開始アドレスが設定される。そうして、応用プログラムが共有ライブラリー１２４ａに定義された関数を呼び出すと、呼び出された関数のプロローグ定義により、共有ライブラリー１２４ａが応用プログラム１０６のために割り当てたデータセクションの開始アドレスがデータセクションベースレジスター１６０に設定される。このように、データセクションベースレジスター１６０を利用することで、ＭＭＵなしでも共有ライブラリー１２４ａは各応用プログラムごとに独立のデータセクションを保証できる。すなわち、ＭＭＵがないシステムでＰＩＣを利用すれば共有ライブラリーのコード共有は可能だが、各応用プログラムに独立のデータセクションを提供することは依然として不可能である。ＰＩＣコードでは、全ての静的データはＰＣに関連して接近するためにコードとデータセクションとの相対的なオフセットが一定でなければならず、したがって、多様な応用プログラムのために割り当てられた各データセクションとライブラリーコードのオフセットとを一定にさせるべきである。一方、本発明に係る共有ライブラリーシステムでは、応用プログラムが共有ライブラリーの関数を実行させる前、データセクションベースレジスター１６０に応用プログラムが参照するデータセクションアドレスがロードされるようコンパイルする。したがって、多様な応用プログラムのために割り当てられた各データセクションとライブラリーコードとのオフセットが一定でなければならないという制約なしに、多様な応用プログラムに独立のデータセクションを提供できる。すなわち、応用プログラムが自身のために割り当てられたデータセクションに接近する時、データセクションベースレジスター１６０の値を基準に接近するように作るので、各応用プログラムごとに独立のデータセクションを保証できる。
【００１９】
一方、データセクションベースレジスターを利用することによって、静的データを応用プログラムごとに独立に提供することは可能だが、全域データをコード再配置なく接近させることがむずかしい。ここで、全域データは、応用プログラムとライブラリーとの間、または各ライブラリーの間に共有され使われるデータを意味する。静的連結共有ライブラリーでは、全域データのアドレスがローディング段階で決定されるのでプログラムをロードする時に全域データ参照を再配置しなければならない。このために、全域変数に対するポインターテーブルであるＧＯＴを利用する。すなわち、データセクションに割り当てられたポインターを利用して間接的に全域データを参照するようにコードを生成し、ロードする時に全域変数のデータが最終的に決定されれば、それによりＧＯＴの該当項目を再配置する。ＧＯＴは、前述したようにデータセクションに存在するので、コード領域の再配置とは関係がなくなりうる。
【００２０】
図２は、図１に図示されたＭＭＵなしの共有ライブラリーシステム構築過程及び共有ライブラリーの利用方法の一例を示す流れ図である。
コンパイラー１００は、共有するライブラリー１０４をコンパイルする(第２００段階)。この時、コンパイラー１００は、ＰＩＣオプションで共有するライブラリー１０４をコンパイルし、各ライブラリーに固有の番号をＩＤとして割り当てて各ライブラリーの名称をｌｉｂＩＤ.ｓｏと設定する。このように、各ライブラリーに割り当てられた固有の番号は、応用プログラムのデータセクションテーブルで各ライブラリーが自身のために割り当てたデータセクションの開始アドレスを探すことに利用される。これについては図６を参照して詳細に説明する。また、コンパイラー１００は、共有ライブラリーの各関数のプロローグで応用プログラムのために割り当てられたデータセクションの開始アドレスがデータセクションベースレジスター１６０に設定されるようにコンパイルする。
【００２１】
第２００段階の後に、ライブラリービルダー１２０はコンパイルされたライブラリー１０８を利用して各ライブラリーごとに実際コードとデータとが存在する共有ライブラリー１２４ａと、応用プログラムとのシンボルアドレスバインディングのためのシンボルのアドレス情報だけを有するアドレスライブラリー１２４ｂとを生成す(第２０５段階)。
【００２２】
第２０５段階の後に、コンパイラー１００は応用プログラム１０２をコンパイルする(第２１０段階)。コンパイラー１００は、応用プログラム１０２を共有ライブラリー１０４と同様にＰＩＣオプションを与えてコンパイルする。
【００２３】
第２１０段階の後に、応用プログラムビルダー１３０は、リンカスクリプトによって応用プログラムのコード、データ及びデータセクションテーブルを配置してコンパイルされたプログラムを実行ファイル形態の応用プログラム１０６に作る(第２１５段階)。
【００２４】
第２１５段階の後に、ランタイムローダー１４０は、ビルドされた第１ライブラリー１２４ａ及びビルドされた応用プログラム１０６をメインメモリー１８０に積載する(第２２０段階)。ランタイムローダー１４０が共有ライブラリー１２４ａをメインメモリー１８０に積載する時は、アドレスライブラリー１２４ｂのシンボルアドレスに含まれたシンボルの再配置タイプによって必要なアドレス再配置を実行した後、最終的にシンボルのアドレスを決定する。
【００２５】
第２１５段階の後に、応用プログラム１０６を実行する(第２２５段階)。応用プログラムが自身のデータセクションを参照してプログラムを実行中なら、データセクションベースレジスター１６０は応用プログラム１０６のデータセクション開始アドレスすなわち、ＧＯＴ開始アドレスと設定されている。その中、応用プログラム１０６が共有ライブラリー１２４ａの関数を呼び出すと(第２３０段階)、共有ライブラリー関数のプロローグ定義によってデータセクションベースレジスター１６０には共有ライブラリー１２４ａで応用プログラム１０６のために割り当てたデータセクションの開始アドレスが設定される(第２３５段階)。応用プログラム１０６は、データセクションベースレジスター１６０として設定されたアドレスにより自身のために割り当てられたデータセクションへの接近が可能である。応用プログラム１０６は、データセクションに含まれる全域データに対するポインターテーブルであるＧＯＴを利用して間接的に全域データを参照し、共有ライブラリー１２４ａで呼び出した関数を実行する(第２４０段階)。第２３５及び第２４０段階で実行される動作のより詳細な説明は図７を参照して説明する。
【００２６】
前述したように、本発明ではＭＭＵなしで共有ライブラリーを利用するために、ランタイムローダー及びコンパイラーを修正し、ライブラリービルダーを通じて既存の共有ライブラリーの形式を変更する。これに合せて、データセクションベースレジスターとデータセクションのＧＯＴテーブルとを利用することで、ＭＭＵなしでも共有ライブラリーの使用が可能にする。すなわち、ＭＭＵを使用しないシステムの場合、ライブラリーが積載されるアドレスを固定出来ず、応用プログラムに独立のデータセクションを割り当てられず、全域データをコード再配置なく接近することが不可能な理由で、共有ライブラリーの使用が難しかった。しかし、本発明に係る共有ライブラリーシステムは、全ての関数の呼び出しがパソコンと関連したブランチまたはジャンプでなされるようにＰＩＣを適用してコンパイルすることで、ライブラリーが積載されるアドレスを固定しなくても良い。また、応用プログラムがライブラリーコードを実行させる前、データセクションベースレジスターに応用プログラムが参照するデータセクションの開始アドレスがロードされるようにコンパイルすることで、各応用プログラムごとに独立のデータセクションを保証できる。また、データセクションに割り当てられたポインターを利用して間接的に全域データを参照するようにコードを生成し、ロードする時に全域変数のデータが最終的に決定されればＧＯＴの該当項目を再配置する。応用プログラムは、データセクションのＧＯＴを利用して全域データに接近するので、コード再配置のない接近が可能である。結局、本発明に係る共有ライブラリーシステムは、ＭＭＵを使用しないシステムで共有ライブラリーを使用し難い３つの原因を解決し、ＭＭＵなしでも共有ライブラリーを使用できる。
【００２７】
図３は、ライブラリービルダー１２０により共有ライブラリーがビルドされる過程を示す図面である。
ｌｉｂｃ_ｔｅｍｐ.ａは、コンパイラー１００によりコンパイルされた共有ライブラリーであり、Ｃライブラリーに含まれるオブジェクトのアーカイブを示す。このアーカイブ中のオブジェクトファイルは、コンパイラー１００により全てのオブジェクトのプロローグに応用プログラム１０６が参照するデータセクションの開始アドレスをデータセクションベースレジスターに設定するコードが含まれるようにコンパイルされた状態である。
【００２８】
リンカ３００は、ｌｉｂｃ.ｔｅｍｐ.aライブラリーに含まれたいくつかのオブジェクトファイルを一つのオブジェクトファイルに再配置したライブラリーｌｉｂ１.ｓｏ.ｇｄｂを生成す。この時、ｌｉｂ.ｓｏ.ｇｄｂのファイルフォーマットはＥＬＦであり、フォーマット変換ユーティリティ３１０によりＥＬＦファイルフォーマットはターゲットシステムに合うように適切に再配置されるべきである。例えば、ターゲットシステムがｕＣＬｉｎｕｘなら、フォーマット変換ユーティリティ３１０はＥＬＦフォーマットファイルｌｉｂ.ｓｏ.ｇｄｂをＦＬＡＴフォーマットファイルｌｉｂ１.ｓｏに変換する。このように、ターゲットシステムに合うようにファイルフォーマットが変換されたライブラリーを共有ライブラリーとする。前述したように、共有ライブラリーは実際コードとデータとが存在するライブラリーで、ランタイムローダー１４０によりメインメモリー１８０に積載されて多様な応用プログラムに共有されるライブラリーである。
【００２９】
一方、本発明は、静的連結共有ライブラリーシステムであるから、応用プログラム１０６と静的にリンキングされる対象が必要である。このために、ＧＥＮＳＹＭユーティリティ３２０は、実際コードとデータとはなく、応用プログラムとのシンボルアドレスバインディングのためにシンボルのアドレス情報だけを有するファイルｌｉｂｃ.ａを生成す。ここで、ｌｉｂｃ.ａは、ライブラリーコードを除外したエクスポートシンボルだけ定義したシンボルアドレスライブラリーである。この時、重要な点は、各シンボルは適切に多様なオブジェクト(＊.ｏ)に分けて定義されるべきである。仮に、全てのシンボルが一つのオブジェクトのなかで定義されれば、ライブラリー内の全てのシンボルがあるモジュールに含まれてリンクの単位が全体シンボルになるために望ましくない重複宣言の誤りが生じうる。したがって、ＧＥＮＳＹＭユーティリティ３２０は、これらのシンボルを多様なオブジェクトモジュールに分けて定義するために、一つのオブジェクトファイルに再配置される以前のアーカイブｌｉｂｃ_ｔｅｍｐ.ａから必要な情報すなわち、シンボルがどのオブジェクトファイルに属しているかを抽出する。すなわち、ＧＥＮＳＹＭユーティリティ３２０は、Ｃライブラリーでシンボルのアドレスはｌｉｂ１.ｓｏ.ｇｄｂから得るが、シンボルが定義されなければならないオブジェクトモジュールに関する情報は再配置される以前のアーカイブであるｌｉｂｃ_ｔｅｍｐ.ａから得て、全域シンボルをｌｉｂｃ.ａでのように多様なオブジェクトモジュールに分けて定義する。ここで、シンボルのアドレスはそのシンボルのｌｉｂ１.ｓｏ.ｇｄｂ内でのオフセットを示す。結局、シンボルアドレスライブラリーｌｉｂｃ.ａの内容は、Ｃライブラリーがエクスポートするシンボル名とそのシンボルのｌｉｂ１.ｓｏ.ｇｄｂ内でのオフセットとである。ｌｉｂｃ.ａは、それ以外のいかなるコードも含まない。したがって、Ｃライブラリーを参照する応用プログラムは、ｌｉｂｃ.ａがリンクされる時に定義されたシンボルのオフセットだけを参照してライブラリーｌｉｂ１.ｓｏとリンキングされる。すなわち、コードの複写は起こらず、シンボルのアドレスすなわち、シンボルのオフセットだけバインディングされる。一方、ｌｉｂｃ.ａに定義されたシンボルアドレスは、ランタイムライブラリーがメインメモリー１８０のどのアドレスに積載されるかによってランタイムローダーにより再配置されるべきである。このために、どんなシンボルが応用プログラムオブジェクト内のシンボルか、または共有ライブラリー内のシンボルか等に関するシンボル情報がシンボルアドレスに含まれるようにシンボルアドレスはフォーマットされるべきである。
【００３０】
図４は、図３のＧＥＮＳＹＭユーティリティ３２０により定義されるシンボルアドレスフォーマットの一例を示す図面である。
シンボルアドレスは、３２ビット(４Ｂｙｔｅ)で表現され、その中下位２４ビットがシンボルの実際アドレスを示す。この場合、応用プログラムだけでなく、ライブラリーの全体大きさは１６ＭＢ(=２２４ＭＢ)を超過出来ない。仮に、ライブラリーの大きさがこのような制限を超過する場合、ライブラリーを分割するべきである。２４番目ビットから２９番目ビットまでの６ビットは、シンボルが定義されているライブラリーの固有番号すなわち、ＩＤを示す。前述したように、これはコンパイル過程で各ライブラリーに与えられる。この場合、同時に使用できるライブラリーの個数は６４(=２６)個までである。そして、上位２ビットは、再配置タイプを示すビットで、再配置タイプは大きく３種類に区分される。まず、第１再配置タイプは、上位２ビットが００である場合で、シンボルのアドレスがローディング時に修正される必要がある絶対アドレス値であることを示し、主にデータセクションでよく現れる。第２再配置タイプは、上位２ビットが０１である場合で、シンボルのアドレスがＧＯＴテーブルの位置、すなわちデータセクションの開始アドレスに置き換えなければならないことを示す。第３再配置タイプは、上位２ビットが１１である場合で、シンボルのアドレスがブランチ命令語の目的地アドレスであることを示し、これはローディング時に決定される動的ライブラリーに対する関数呼び出しの参照アドレスを修正するためのものである。換言すれば、第１再配置タイプは、簡単に該当する部分で決定されたメインメモリーの絶対アドレスに再配置すればよい。しかし、第１再配置タイプでない場合には別の作業が必要である。すなわち、第２再配置タイプの場合、割り当てられたデータセクションの開始アドレスすなわち、ＧＯＴの開始アドレスに再配置すべきであり、第３再配置タイプの場合、システムのブランチ命令に合うフォーマットにコードの直接的な修正が必要である。例えば、ＡＲＭでは全てのブランチ命令語の上位８ビットがブランチタイプを決定して残り下位の２４ビットがブランチオフセットを示すので、このような再配置情報を基に該当システムに合わせて修正できる。
【００３１】
一方、前述したシンボルアドレスフォーマットは、ｕＣＬｉｎｕｘシステムのためのＦＬＡＴバイナリの再配置テーブルのエントリーにも同様に適用される。ＦＬＡＴバイナリ再配置テーブルは、図５に図示したようにデータセクションの次に位置し、ＦＬＡＴバイナリの再配置テーブルの各エントリーはローダーによって再配置される必要があるコードやデータを示している。
【００３２】
一方、ランタイムローダー１４０が一般的に実行することは、まず、応用プログラムが参照するライブラリーをメインメモリー１８０に積載し、次に、ライブラリーに含まれるシンボルのアドレスを再配置し、最後に、ライブラリーコードの共有を保証することである。すなわち、多様な応用プログラムが同時に一つのライブラリーを使用する場合、ライブラリーコードはただ一つのインスタンスのめがメモリーに積載されるようにする。ランタイムローダー１４０がこのような役割を行うための核心は、ＧＯＴテーブルや再配置テーブルの内にあるエントリー中ライブラリーへの参照を検出することである。これは図４に図示されたシンボルと再配置エントリーのアドレスフォーマットから容易に得られる。例えば、応用プログラムは、ＩＤを０に割り当てて共有ライブラリーは１から始まる所定の一連番号を割り当てて区分する場合、アドレス値の２４〜２９番目ビットすなわち、ライブラリーのＩＤを示すビットが全て０でなければ、ライブラリーへの参照であることが容易に分かる。一方、まだメインメモリー１８０に積載されていないライブラリーの参照が検出されれば、ランタイムローダー１４０は該当するライブラリーをメインメモリー１８０に積載して必要な再配置を実行した後、最終的にこれらの積載情報を基にシンボルのアドレスを決定すればよい。
【００３３】
図６は、コンパイルされた応用プログラム１０６のリンカスクリプトをより詳細に示した図面である。図６で、テキスト１０６ａは関数コードが定義された領域であり、データセクションテーブル１０６ｂは応用プログラム１０６が参照する各共有ライブラリーに割り当てられたデータセクションの開始アドレスを示すテーブルである。データセクション１０６cで、ＧＯＴ １０７ａは全域変数に対するポインターテーブルであり、第１データ１０７ｂは全域変数のデータが定義された領域であり、第２データ１０７ｃはローカル変数のデータが定義された領域である。図６には応用プログラムが参照する共有ライブラリーが３個である場合のデータセクションテーブル１０６ｂを示す。図示したように、データセクションテーブル１０６ｂは、データセクション１０６ｃの直前に位置し、各ライブラリーの名称はコンパイル時にｌｉｂＩＤ.ｓｏ形態に変換される。各共有ライブラリーは、１、２、３、…のＩＤが与えられて応用プログラム自身も０のＩＤが割当され、これらのＩＤは応用プログラムのために割り当てられたデータセクションの位置を知るため利用される。アドレスの大きさが４Ｂｙｔｅならば、各ライブラリーが応用プログラムのために割り当てたデータセクションのアドレスは(-４＊ＩＤ-４のアドレスから得られる。例えば、ＩＤが１であるライブラリーのデータセクションは、現在データセクションベースレジスター１６０が示すアドレスから８Ｂｙｔｅを引いた所で得られる。ここで、現在データセクションベースレジスター１６０は、応用プログラム自身のデータセクションを示し、説明の便宜のために現在のデータセクションベースレジスター値をｓｌとする。具体的に、応用プログラム１０６のデータセクション開始アドレス情報‘ｐｔｒ ｔｏ ａｐｐ ｄａｔａ’はｓｌ-４のアドレスから得て、ＩＤが１であるライブラリーのデータセクションアドレス‘ｐｔｒ ｔｏ ｌｉｂ１.ｓｏｄａｔａ’はｓｌ-８のアドレスから得られる。同様に、ＩＤが２であるライブラリーのデータセクションアドレス‘ｐｔｒ ｔｏ ｌｉｂ２.ｓｏｄａｔａ’はｓｌ-１２のアドレスから、ＩＤが３であるライブラリーのデータセクションアドレス‘ｐｔｒ ｔｏ ｌｉｂ３.ｓｏｄａｔａ’はｓｌ-１６のアドレスから各々得られる。一方、ライブラリー検索の便宜上/ｌｉｂディレクトリにｌｉｂＩＤ.ｓｏ形態のライブラリー名称が存在すべきである。例えば、ｌｉｂｃに固有番号１を割り当てたなら/ｌｉｂディレクトリにｌｉｂ１.ｓｏという名称でＣ共有ライブラリーオブジェクトコードが存在すべきである。
【００３４】
図７は、応用プログラムがプログラム実行中、共有ライブラリーに定義された関数を呼び出す過程を説明するための図面である。
図６及び図７で、共有ライブラリーＸは、各応用プログラム別データセクションを有する。共有ライブラリーＸには、応用プログラム１ないし応用プログラムＹ各々のためのデータセクション５００〜５１０が割当されている。すなわち、ｆｕｎｃ１のような関数コードは各応用プログラムが共有し、全域データは各応用プログラム別に割当される。応用プログラム１が自身のデータセクションを参照してプログラムを実行中なら、データセクションベースレジスター１６０は応用プログラムのデータセクションの開始アドレスすなわち、ＧＯＴ開始アドレスが設定されている。そうして、応用プログラム１がライブラリーＸに定義された関数ｆｕｎｃ１を呼び出すと、ｆｕｎｃ１のプロローグ５２０の‘ｐｕｓｈｓｌ’命令によってデータセクションベースレジスター１６０に現在設定されたデータは他の貯蔵空間に保存され、‘ｓｅｔｓｌ…’命令によって応用プログラムは自身のデータセクションテーブル１０６を参照して共有ライブラリーＸから応用プログラム１のために割り当てられたデータセクション５００の開始アドレスを得てデータセクションレジスター１６０に設定する。また、ｆｕｎｃ１の実行が完了すれば‘ｐｏｏｌｓｌ’命令によって前記他の貯蔵空間に保存されたデータがまたデータセクションベースレジスター１６０に設定されるようにする。
【００３５】
前述したように、プログラム実行時に共有ライブラリーの参照が可能なようにランタイムローダー及びコンパイラーを修正したうえ、ライブラリービルダーを通じて既存共有ライブラリーの形式を変更した。このような過程を通じて共有ライブラリーの使用を可能にしてシステムのメモリー使用量を減らし、結果的にシステムの生産原価を節約させうる。
【００３６】
本発明は、またコンピュータで読み取れる記録媒体にコンピュータが読み取れるコードで具現可能である。コンピュータが読み取れる記録媒体は、コンピュータシステムによって読み取れるデータが保存される全ての種類の記録装置を含む。コンピュータが読み取れる記録媒体の例には、ＲＯＭ、ＲＡＭ、ＣＤ−ＲＯＭ、磁気テープ、フロッピー（登録商標）ディスク、光ディスク貯蔵装置などがあり、また搬送波(例えばインターネットを通した伝送)の形態で具現されるものも含む。また、コンピュータが読み取れる記録媒体は、ネットワークで連結したコンピュータシステムに分散され、分散方式でコンピュータが読み取れるコードが保存されて実行されうる。
【００３７】
以上、図面と明細書で最適実施例が開示された。ここで特定の用語が使われたが、これは単に本発明を説明するための目的で使われたものであり、意味限定や特許請求範囲に記載された本発明の範囲を制限するために使われたものではない。したがって、本技術分野の当業者ならば多様な変形及び均等な他実施例が可能だということが理解できる。したがって、本発明の真の技術的保護範囲は特許請求範囲の技術的思想により決まるべきである。
【産業上の利用可能性】
【００３８】
本発明は、多数の応用プログラムが一つのライブラリーインスタンスを共有する共有ライブラリーシステムに利用でき、本発明によりメモリーの使用量が減少されることによってシステムの生産原価が削減できる。
【図面の簡単な説明】
【００３９】
【図１】本発明に係るＭＭＵなしの共有ライブラリーシステムの一実施例を概略的に示すブロック図である。
【図２】図１に図示されたＭＭＵなしの共有ライブラリーシステム構築過程及び共有ライブラリーの利用方法の一例を示す流れ図である。
【図３】ライブラリービルダーにより共有ライブラリーがビルドされる過程を示す図面である。
【図４】図３のＧＥＮＳＹＭユーティリティ２３０により定義されるシンボルアドレスフォーマットの一例を示す図面である。
【図５】ＦＬＡＴバイナリ再配置テーブルを含むリンカスクリプトを示す図面である。
【図６】コンパイルされた応用プログラム１０６のリンカスクリプトをより詳細に示した図面である。
【図７】応用プログラムがプログラム実行中、共有ライブラリーに定義された関数を呼び出す過程を説明するための図面である。
【符号の説明】
【００４０】
１００    コンパイラー
１０２    実行するプログラム
１０４    共有するライブラリー
１０５    コンパイルされたプログラム
１０６    応用プログラム
１０８    コンパイルされたライブラリー
１２０    ライブラリービルダー
１２４ａ  共有ライブラリー
１２４ｂ  住所ライブラリー
１３０    応用プログラムビルダー
１４０    ランタイムローダー
１６０    メインメモリー
１８０    データセクションベースレジスター
【図１】
2005032259.tif 000003
【図２】
2005032259.tif 000004
【図３】
2005032259.tif 000005
【図４】
2005032259.tif 000006
【図５】
2005032259.tif 000007
【図６】
2005032259.tif 000008
【図７】
2005032259.tif 000009