(57)【要約】【課題】動的ローディングシステム上で、ライブラリへのアクセスを監視するための方法と、ロードすべきライブラリを特定するための方法を提案することにより、アンロードされたライブラリを再びロードするための機構を実現する。【解決手段】ライブラリの配置情報をライブラリの終了処理後も保持する。終了処理済みのライブラリへのアクセスをマップ情報を用いて監視する。ライブラリを再びロードする際には、メモリアクセスの監視により検出されたアドレスとライブラリの配置情報を利用して、終了処理前と同じアドレスにライブラリを配置する。【選択図】図１
2007094497.tif 000002
【特許請求の範囲】
【請求項１】
ライブラリの識別情報と当該アドレス範囲を管理するプロセス用配置情報管理部と、
ライブラリの配置位置を示すアドレス範囲がマップされているかどうかの情報を管理するマップ情報管理部と、
終了処理対象ライブラリの識別情報を受け取り、前記プロセス用配置情報管理部を用いて、前記終了処理対象ライブラリの識別情報に該当するアドレス範囲を取得し、終了処理を行い、終了処理の中でアンマップしたアドレス範囲を前記マップ情報管理部へ出力する終了処理部と、
前記マップ情報管理部を用いて、メモリアクセスが失敗したときのアドレスがマップされているかどうかの情報を取得し、マップされていないアドレスへのアクセスを監視し、監視結果を通知する監視部と、
前記監視部から管理結果を取得し、前記プロセス用配置情報管理部を用いて、前記マップされていないアドレスに対応するライブラリの識別情報を取得し、起動すべきライブラリが存在するかを判定する判定部と、
前記判定部による判定結果に基づいて、前記プロセス用配置情報管理部から、前記起動対象のライブラリの識別情報に対応するアドレス範囲を取得し、起動処理を行い、起動処理の中でマップしたアドレス範囲を前記マップ情報管理部へ出力する起動処理部とを有することを特徴とする情報処理装置。
【請求項２】
コンテキスト情報を管理するコンテキスト情報管理部と、
コンテキスト情報復元指令を取得したときに、前記コンテキスト情報管理部からコンテキスト情報を取得してコンテキスト情報を復元するコンテキスト情報復元部とを有し、
前記監視部は、入力されたコンテキスト情報をコンテキスト情報管理部へ出力し、
前記起動処理部は、コンテキスト情報復元指令をコンテキスト情報復元部へ出力することを特徴とした請求項１記載の情報処理装置。
【請求項３】
前記起動処理部は、コード領域をマップする前にデータ領域をマップすることを特徴とした前記請求項１乃至２記載の情報処理装置。
【請求項４】
ライブラリの配置情報を固定化し、前記プロセス用配置情報管理部へ固定化された配置情報を出力する配置情報固定部を有することを特徴とした前記請求項１乃至３記載の情報処理装置。
【請求項５】
前記終了処理部は、前記マップ情報管理部へアドレスを出力することで当該アドレスがマップされているかどうかの情報を取得して終了処理を行うかを判断することを特徴とした前記請求項１乃至４記載の情報処理装置。
【請求項６】
終了処理対象ライブラリの識別情報が入力されると、ライブラリの識別情報ならびにライブラリの配置位置を示すアドレス範囲が格納されたプロセス用配置情報と、ライブラリの識別情報を用いて、該当するアドレス範囲を取得した後、終了処理を行い、終了処理の中でアンマップしたアドレス範囲を、当該アドレス範囲がマップされているかどうかの情報が格納されたマップ情報へ書き込む終了処理ステップと、
メモリアクセスが失敗した場合にアドレスを出力する例外ステップと、
前記例外ステップが出力したアドレスと、前記マップ情報を用いて、アドレスがマップされているかどうかを判定し、マップされていた場合にアドレスを出力する監視ステップと、
前記監視ステップが出力したアドレスと、前記プロセス用配置情報を用いて、起動すべきライブラリが存在するか判定し、存在した場合に、ライブラリの識別情報を出力する判定ステップと、
前記判定ステップが出力したライブラリの識別情報と、前記プロセス用配置情報を用いて、ライブラリの識別情報に対応するアドレス範囲を取得し、起動処理を行い、起動処理の中でマップしたアドレス範囲を前記マップ情報へ書き込む起動処理ステップと、
を有することを特徴とした情報処理方法。
【請求項７】
終了処理対象ライブラリの識別情報が入力されると、ライブラリの識別情報ならびに当該アドレス範囲が格納されたプロセス用配置情報と、ライブラリの識別情報を用いて、該当するアドレス範囲を取得した後、終了処理を行い、終了処理の中でアンマップしたアドレス範囲を、当該アドレス範囲がマップされているかどうかの情報が格納されたマップ情報へ書き込む終了処理ステップと、
メモリアクセスが失敗した場合にアドレスを出力する例外ステップと、
前記例外ステップが出力したアドレスと、前記マップ情報を用いて、アドレスがマップされているかどうかを判定し、マップされていた場合にアドレスを出力する監視ステップと、
前記監視ステップが出力したアドレスと、前記プロセス用配置情報を用いて、起動すべきライブラリが存在するか判定し、存在した場合に、ライブラリの識別情報を出力する判定ステップと、
前記判定ステップが出力したライブラリの識別情報と、前記プロセス用配置情報を用いて、ライブラリの識別情報に対応するアドレス範囲を取得し、起動処理を行い、起動処理の中でマップしたアドレス範囲を前記マップ情報へ書き込む起動処理ステップと、
を有することを特徴とした情報処理方法を実現させるためのプログラム。
【請求項８】
終了処理対象ライブラリの識別情報が入力されると、ライブラリの識別情報ならびに当該アドレス範囲が格納されたプロセス用配置情報と、ライブラリの識別情報を用いて、該当するアドレス範囲を取得した後、終了処理を行い、終了処理の中でアンマップしたアドレス範囲を、当該アドレス範囲がマップされているかどうかの情報が格納されたマップ情報へ書き込む終了処理ステップと、
メモリアクセスが失敗した場合にアドレスを出力する例外ステップと、
前記例外ステップが出力したアドレスと、前記マップ情報を用いて、アドレスがマップされているかどうかを判定し、マップされていた場合にアドレスを出力する監視ステップと、
前記監視ステップが出力したアドレスと、前記プロセス用配置情報を用いて、起動すべきライブラリが存在するか判定し、存在した場合に、ライブラリの識別情報を出力する判定ステップと、
前記判定ステップが出力したライブラリの識別情報と、前記プロセス用配置情報を用いて、ライブラリの識別情報に対応するアドレス範囲を取得し、起動処理を行い、起動処理の中でマップしたアドレス範囲を前記マップ情報へ書き込む起動処理ステップと、
を有することを特徴とした情報処理方法を実現させるためのプログラムを記憶した記憶媒体。
【請求項９】
ライブラリの識別情報と当該アドレス範囲を管理するプロセス用配置情報管理部と、
当該アドレス範囲がマップされているかどうかの情報を管理するマップ情報管理部と、
終了処理対象ライブラリの識別情報が入力されると、終了処理対象ライブラリの識別情報を前記プロセス用配置情報管理部へ渡すことで該当するアドレス範囲を取得した後、終了処理を行い、終了処理の中でアンマップしたアドレス範囲を前記マップ情報管理部へ出力する終了処理部と、
前記マップ情報管理部にメモリアクセスが失敗したときのアドレスを渡すことでマップされているかどうかの情報を取得して、マップされていない場合にアドレスを出力することで、マップされていないアドレスへのアクセスを監視する監視部と、
前記監視部から取得したアドレスを、前記プロセス用配置情報管理部へ渡すことでライブラリの識別情報を取得し、起動すべきライブラリが存在するか判定し、ライブラリの識別情報を出力する判定部と、
前記判定部より取得したライブラリの識別情報を、前記プロセス用配置情報管理部へ渡すことで、ライブラリの識別情報に対応するアドレス範囲を取得し、起動処理を行い、起動処理の中でマップしたアドレス範囲を前記マップ情報管理部へ出力する起動処理部と、
メモリアクセスが失敗した場合に前記監視部へ処理を移す機能を備えるＣＰＵと、
を有することを特徴とした集積回路。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置のＲＡＭ削減技術に関し、特に、ライブラリのロード処理に関するものである。
【背景技術】
【０００２】
Ｌｉｎｕｘ（登録商標）やＷｉｎｄｏｗｓ（登録商標）などのようなマルチタスク型のＯＳが搭載されている機器やコンピュータでは、多くの場合、動的ローディングシステムを採用している。これは、プログラムの実行時に、そのプログラム本体やライブラリのアドレスを決定するシステムであり、再配置処理を行ってライブラリを使用可能にする。一般的には動的ローディングシステムでは、プロセス起動時にリンクされている全てのライブラリの起動処理を行い、プロセス終了時に起動済みの全てのライブラリの終了処理を行う。動的ローディングシステムを組み込み機器に適用する場合、組み込み機器での使用可能なＲＡＭがＰＣ等と比較して少ないため、実行時にＲＡＭが不足する問題がある。前述したとおり、ライブラリの終了はプロセス終了時に行われるので、ライブラリが１度ＲＡＭを消費すると、プロセス終了時までＲＡＭを消費し続けるため、ＲＡＭを圧迫する。
【０００３】
この課題を解決するための方法として、一時的にライブラリをアンロードし、使用するときに再びロードすることが考えられる。ライブラリを再びロードするためには、ライブラリへのアクセスを監視する処理と、ロードすべきライブラリを特定する処理が必要である。
【０００４】
なお、インタプリタ環境においては、特許文献１に示す方法が提案されている。これは、ライブラリがロードされているかどうかの情報が格納されたテーブルをインタプリタ内で管理し、インタプリタはプログラムがライブラリへのアクセスを発生させる前にテーブルを参照し、必要に応じてライブラリをロードするものである。
【特許文献１】特開２００３−３３０７４１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、前記従来の方法は、命令をＲＡＭから読み出してから、実行するまでの間に、未ロードライブラリへのアクセスであるかどうかの判断をすることなどの監視に必要な処理を行うことができるというインタプリタの特性を利用したものであり、ＣＰＵが命令を直接実行するような、動的ローディングシステム上で動作するプログラムに適用することは困難である。具体的には、動的ローディングシステム上で動作するプログラムの多くは、プロセス実行途中に、ライブラリをアンロードおよびロードすることを想定して作られていないため、プログラム中でライブラリを明示的に指定してロードしない。このため、プロセス実行途中でアンロードしたライブラリを再度ロードする際、プログラム中でロードすべきライブラリ名が明示的に指定されていないことにより、再ロード対象のライブラリを正しく特定することができないという課題を有していた。
【０００６】
本発明は、前記従来の課題を解決するもので、動的ローディングシステム上で、ライブラリへのアクセスを監視し、ロードすべきライブラリを特定するための方法を提案することにより、プロセス実行途中に、アンロードされたライブラリを再びロードする情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するため、ライブラリの識別情報と当該アドレス範囲を管理するプロセス用配置情報管理部と、ライブラリの配置位置を示すアドレス範囲がマップされているかどうかの情報を管理するマップ情報管理部と、終了処理対象ライブラリの識別情報を受け取り、前記プロセス用配置情報管理部を用いて、前記終了処理対象ライブラリの識別情報に該当するアドレス範囲を取得し、終了処理を行い、終了処理の中でアンマップしたアドレス範囲を前記マップ情報管理部へ出力する終了処理部と、前記マップ情報管理部を用いて、メモリアクセスが失敗したときのアドレスがマップされているかどうかの情報を取得し、マップされていないアドレスへのアクセスを監視し、監視結果を通知する監視部と、前記監視部から管理結果を取得し、前記プロセス用配置情報管理部を用いて、前記マップされていないアドレスに対応するライブラリの識別情報を取得し、起動すべきライブラリが存在するかを判定する判定部と、前記判定部による判定結果に基づいて、前記プロセス用配置情報管理部から、前記起動対象のライブラリの識別情報に対応するアドレス範囲を取得し、起動処理を行い、起動処理の中でマップしたアドレス範囲を前記マップ情報管理部へ出力する起動処理部とを有する。
【０００８】
上記の構成を取ることにより、ライブラリの終了処理後もアドレスを保持し、保持したアドレスを再び起動処理を行う時に利用することで、プロセス実行途中にライブラリの終了処理を行い、再びライブラリの起動処理を行うことを実現できる。
【発明の効果】
【０００９】
プロセスの実行途中に、ライブラリの終了処理および起動処理を可能にすることで、ＲＡＭ消費を削減することができる。また、プロセスのコード中で、起動すべきライブラリを明示的に指定する必要がない上、インタプリタ環境で動作しないプログラムにも適用可能である。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の実施の形態について、図面を参照しながら説明する。
【００１１】
（実施の形態１）
図１は、本発明の実施の形態における情報処理装置の構成を示す図である。
【００１２】
ライブラリの識別情報とライブラリの配置位置を示すアドレス範囲を管理するプロセス用配置情報管理部１１０１と、アドレス範囲がマップされているかどうかの情報を管理するマップ情報管理部１１０２と、終了処理対象ライブラリの識別情報が入力されると、終了処理対象ライブラリの識別情報を前記プロセス用配置情報管理部１１０１へ渡すことで該当するアドレス範囲を取得した後、終了処理を行い、終了処理の中でアンマップしたアドレス範囲を前記マップ情報管理部へ出力する終了処理部１１０３と、メモリアクセスが失敗したときのアドレスを前記マップ情報管理部１１０２に渡すことで、マップされているかどうかの情報を取得して、マップされていない場合にアドレスを出力することで、マップされていないアドレスへのアクセスを監視する監視部１１０４と、前記監視部１１０４から取得したアドレスを前記プロセス用配置情報管理部１１０１へ渡すことで、ライブラリの識別情報を取得し、起動すべきライブラリが存在するか判定し、ライブラリの識別情報を出力する判定部１１０５と、前記判定部１１０５より取得したライブラリの識別情報を前記プロセス用配置情報管理部１１０１へ渡すことで、ライブラリの識別情報に対応するアドレス範囲を取得し、起動処理を行い、起動処理の中でマップしたアドレス範囲を前記マップ情報管理部１１０２へ出力する起動処理部１１０６と、メモリアクセスが失敗した場合に前記監視部１１０４へ処理を移す機能を備えるＣＰＵ１１０７とで構成される。
【００１３】
図２を用いて、本発明の実施の形態における情報処理装置を備えるハードウェア構成の一例を説明する。
【００１４】
ＣＰＵ１２０１と、主記憶装置１２０２と、二次記憶媒体１２０３とで構成される。ＣＰＵ１２０１は、複数のレジスタ１２０４を有する。また、主記憶装置１２０２はＲＡＭで構成する。二次記憶媒体１２０３はｆｌａｓｈＲＯＭで構成するが、他にもハードディスクやＣＤ−ＲＯＭ等の記憶媒体で構成してもよい。本発明の情報処理装置の各構成要素やアプリケーション１２０５およびライブラリ１２０６は、あらかじめ二次記憶媒体１２０３上に格納され、動作時には主記憶装置１２０２上に展開され、展開された各構成要素をＣＰＵ１２０１が読み取りと書き込みおよび実行を行う。なお、各構成要素は必ずしも主記憶装置１２０２に展開される必要はなく、二次記憶媒体１２０３上から直接読み取りならびに書き込みおよび実行してもよい。
【００１５】
以上のように構成された情報処理装置について、各要請要素の詳細と動作を述べる。
【００１６】
終了処理部１１０３は、取得したライブラリの識別情報を持つライブラリのアンマップ処理を含む終了処理を行い、アンマップされたアドレス範囲をマップ情報管理部１１０２へ出力する。
【００１７】
図３を用いて、終了処理部１１０３の処理の流れを説明する。
【００１８】
まず、アプリケーション１２０５やライブラリ１２０６などからライブラリ識別情報を取得する（ステップＳ１３０１）。次に、取得したライブラリ識別情報で識別されるライブラリのアドレス範囲を、プロセス用配置情報管理部１１０１より取得し（ステップＳ１３０２）、取得したライブラリ識別情報で識別されるライブラリのアンマップを含む終了処理を実行する（ステップＳ１３０３）。ステップＳ１３０２で取得したアドレス範囲をマップするアドレス範囲としてマップ情報管理部１１０２へ出力する（ステップＳ１３０４）。
【００１９】
マップ情報管理部１１０２は、アドレスがマップされているかどうかの情報を管理する。また、アドレスを取得しそのアドレスがマップされているかどうかの情報を出力する。
【００２０】
マップ情報管理部１１０２の動作を説明する。マップ情報管理部１１０２は、アドレス、マップされたアドレス範囲、アンマップされたアドレス範囲の、３種類の入力を受け付け、受け付けた入力の種類によって動作が異なる。まず、アドレスを取得した場合は、取得したアドレスが、マップ情報管理部１１０２が管理するアドレス範囲内にあるかどうかを判定し、その結果を出力する。マップしたアドレス範囲を取得した場合は、取得したアドレス範囲を管理対象に追加する。また、アンマップしたアドレス範囲を取得した場合は、取得したアドレス範囲を管理対象から除外する。
【００２１】
監視部１１０４は、取得したアドレスに対応する空間がマップされているか否かをマップ情報管理部１１０２に問い合わせ、マップされていなかった場合に判定部１１０５へアドレスを出力する。
【００２２】
図４を用いて、監視部１１０４の動作の流れを説明する。
【００２３】
まず、監視対象のアドレスを取得する（ステップＳ１４０１）。次に、取得したアドレスに対応する空間がマップされているか調べるために、マップ情報管理部１１０２へ判定対象のアドレスを出力してマップ情報を取得し（ステップＳ１４０２）、マップされているかどうかの判定を行う（ステップＳ１４０３）。マップされていた場合（ステップＳ１４０３のＹ）、監視部１１０４の処理を終了する。マップされていなかった場合（ステップＳ１４０３のＮ）、マップされていないと判定したアドレスを、判定部１１０５に出力する（ステップＳ１４０４）。
【００２４】
判定部１１０５は、監視部１１０４よりアドレスを取得し、アドレスに対応するライブラリ識別情報を起動処理部１１０６へ出力する。
【００２５】
図５を用いて、判定部１１０５の処理の流れを説明する。
【００２６】
まず、監視部１１０４からアドレスを取得する（ステップＳ１５０１）。次に、取得したアドレスに対応するライブラリ識別情報を検索するために、プロセス用配置情報管理部１１０１へ検索対象のアドレスを出力しライブラリ識別情報を取得し（ステップＳ１５０２）、アドレスに対応するライブラリが存在するか否かの判定を行う（ステップＳ１５０３）。ライブラリが存在した場合（ステップＳ１５０３のＹ）、ライブラリ識別情報を起動処理部１１０６へ出力する（ステップＳ１５０４）。また、ライブラリが存在しなかった場合（ステップＳ１５０３のＮ）、不正メモリアクセスとしてエラー処理を行う（ステップＳ１５０５）。
【００２７】
プロセス用配置情報管理部１１０１は、プロセス起動時に生成され、ライブラリ識別情報とアドレス範囲の組み合わせを管理する。また、アドレス、ライブラリ識別情報の２種類の入力を受け付け、受け付けた入力の種類によって動作が異なる。まず、入力がアドレスの場合は、対応するアドレス範囲を持つライブラリ識別情報を出力する。また、入力がライブラリ識別情報の場合は、対応するアドレス範囲を出力する。
【００２８】
起動処理部１１０６は、判定部１１０５より取得したライブラリ識別情報を持つライブラリの起動処理を行い、マップ情報管理部１１０２へ、マップしたアドレス範囲を通知する。
【００２９】
図６を用いて起動処理部１１０６の処理の流れを説明する。
【００３０】
まず、判定部１１０５よりライブラリ識別情報を取得する（ステップＳ１６０１）。次に、取得したライブラリ識別情報をプロセス用配置情報管理部１１０１へ出力し、対応するアドレス範囲を取得する（ステップＳ１６０２）。取得したアドレス範囲へのライブラリのマップを含む、起動処理を行う（ステップＳ１６０３）。ステップＳ１６０２で取得したアドレス範囲をマップしたアドレス範囲としてマップ情報管理部１１０２へ出力する（ステップＳ１６０４）。ここでのライブラリの起動処理とは、ライブラリを実行可能にするために必要な処理のことであり、一例としてライブラリのシンボル解決を行う再配置処理や、初期化関数の実行が挙げられる。
【００３１】
次に、マップ情報管理部１１０２とプロセス用範囲情報管理部１１０１が管理する情報について、具体的例を用いて説明する。
【００３２】
マップ情報管理部１１０２は、前述した通り、アドレスがマップされているかどうかの情報を、アドレス範囲を用いて管理している。アドレス範囲の具体例の一例として、開始アドレスと終了アドレスの組が挙げられる。ここでは簡単のため、マップ情報管理部１１０２は、図７に示すとおり、開始アドレス１７０１と、終了アドレス１７０２を要素に持つ配列を有するものとして説明を行う。なお、ここでは、配列の要素を開始アドレス１７０１と終了アドレス１７０２としたが、他にも配列の要素を開始アドレスとライブラリのサイズの組み合せとしてもよいし、アドレスとそのアドレスがマップされているかどうかの情報との組み合わせなどとしてもよい。他にも開始アドレスとライブラリのサイズとの組み合わせなど、アドレス範囲をあらわすものであれば他の形式をとってもよい。
【００３３】
また、プロセス用配置情報管理部１１０１は、前述した通り、ライブラリ識別情報とアドレス範囲の組み合わせを管理している。ライブラリの識別情報の具体例の一例として、文字列であるライブラリ名を用いて説明を行う。ここでは、簡単のため、プロセス用配置情報管理部１１０１は、図８に示すように、ライブラリ名１８０１と開始アドレス１８０２と終了アドレス１８０３を要素とする配列を有するものとして説明を行う。なお、ライブラリの識別情報は、ライブラリを一意に識別できるものであれば他の形式をとってもよい。
【００３４】
さらに、ライブラリの終了処理として、アンマップ処理のほか、終了関数の実行を行うものとして説明を行う。なお、終了処理は、これらの処理に限ったものではなく、ライブラリを終了するのに必要な処理であれば、他の処理でもよい。
【００３５】
また、ライブラリの起動処理として、マップ処理のほか、再配置処理と初期化関数の実行を行うものとして説明を行う。なお、起動処理は、これらの処理に限ったものではなく、ライブラリを起動するのに必要な処理であれば、他の処理でもよい。
【００３６】
次に、本発明の情報処理装置の動作について、説明する。
【００３７】
まず、ライブラリの終了処理が行われるよりも前に、プロセス用配置情報管理部１１０１のライブラリの配置情報を生成する。ライブラリの配置情報を生成するタイミングは、一般的にはプロセス起動時である。なお、プロセス起動処理が終了した後にライブラリを起動する機構が備わっている場合は、プロセス起動処理時に行わなくてもよい。
【００３８】
ライブラリの終了処理の流れを説明する。ステップＳ１３０１で、ライブラリ名（ライブラリ識別情報）ｌｉｂ３．ｓｏが終了処理部１１０３へ入力されたと仮定すると、終了処理部１１０３は、ステップＳ１３０２で、ｌｉｂ３．ｓｏのアドレス範囲を取得するために、プロセス用配置情報管理部１１０１へライブラリ名ｌｉｂ３．ｓｏを出力する。
【００３９】
プロセス用配置情報管理部１１０１は、ライブラリ名 ｌｉｂ３．ｓｏを取得し、開始アドレスの０ｘ４３００００００と終了アドレスの０ｘ４４００００００を出力する。
【００４０】
終了処理部１１０３は、プロセス用配置情報管理部１１０１より開始アドレス０ｘ４３００００００と終了アドレス０ｘ４４００００００を取得した後、ステップＳ１３０３で当該アドレス範囲をアンマップし、終了関数の実行を行う。ステップＳ１３０４でマップ情報管理部１１０２へアンマップしたアドレス範囲として、開始アドレス０ｘ４３００００００と終了アドレス０ｘ４４００００００を出力する。
【００４１】
以上の処理は、通常の動的ローディングシステムの終了処理を行う場合とは異なり、プロセス用配置情報管理部１１０１からは、ライブラリｌｉｂ３．ｓｏの情報を消去せず、起動処理時に再利用することを特徴とする。
【００４２】
次に、ライブラリを再び起動処理する際の流れを説明する。０ｘ４３１０００００番地へアクセスが起こったと仮定する。０ｘ４３１０００００番地には物理ＲＡＭが割り当てられていないので、メモリアクセスが失敗し、ＣＰＵ１１０７は、監視部１１０４へ処理を移す。
【００４３】
監視部１１０４はステップＳ１４０１でアドレスを取得し、ステップＳ１４０２でマップ情報管理部１１０２へ０ｘ４３１０００００番地がマップされているか問い合わせを行う。
【００４４】
マップ情報管理部１１０２は、０ｘ４３１０００００番地を取得し、リスト内の開始アドレスおよび終了アドレスと照合する。結果、０ｘ４３１０００００番地が開始アドレスから終了アドレスに収まる項目がないので、マップされていないことを示す０を出力する。
【００４５】
監視部１１０４は、マップされていないことを示す０を取得したあと、ステップＳ１４０５で判定部１１０５へアドレス０ｘ４３１０００００番地を出力する。
【００４６】
判定部１１０５では、ステップＳ１５０１で監視部１１０４からアドレス０ｘ４３１０００００番地を取得し、ステップＳ１５０２でアドレス０ｘ４３１０００００番地をプロセス用１１０５へ出力する。
【００４７】
プロセス用配置情報管理部１１０１は、０ｘ４３１０００００番地を取得し、開始アドレス１８０２が０ｘ４３００００００で終了アドレス１８０３が０ｘ４４００００００であり、入力されたアドレス０ｘ４３１０００００を含むライブラリである、ｌｉｂ３．ｓｏを出力する。
【００４８】
判定部１１０５は、ライブラリ名がｌｉｂ３．ｓｏを取得し、ステップＳ１５０３ではライブラリ名ｌｉｂ３．ｓｏを起動処理部１１０６へ出力する。
【００４９】
起動処理部１１０６では、ライブラリ名ｌｉｂ３．ｓｏを取得し、ステップＳ１６０２でプロセス用配置情報管理部１１０１へライブラリ名ｌｉｂ３．ｓｏを出力し、開始アドレス０ｘ４３００００００および終了アドレス０ｘ４４００００００を取得する。ステップＳ１６０３で開始アドレス０ｘ４３００００００と終了アドレス０ｘ４４００００００をマップ情報管理部１１０２へ出力しマップ処理を行った後、再配置処理と初期化関数の実行を行う。次に、ステップ１６０４では、ライブラリｌｉｂ３．ｓｏの再配置処理と、初期化関数を実行する。
【００５０】
以上の構成により、プロセス実行途中で終了したライブラリへのアクセスを検知し、ライブラリを再度起動することを可能とする。
【００５１】
以上により、動的ローディングシステム上で動作するプログラムにおいて、プログラム中でロードすべきライブラリ名が明示的に指定されていない状況でも、ライブラリを正しく特定することが可能となり、プロセス実行途中で終了したライブラリを再度起動することが可能となる。これにより、ＲＡＭ消費量を削減することができる。
【００５２】
（実施の形態２）
図９は、本発明の実施の形態における情報処理装置の構成を示す図である。
【００５３】
ライブラリの識別情報とライブラリの配置位置を示すアドレス範囲を管理するプロセス用配置情報管理部１９０１と、アドレス範囲がマップされているかどうかの情報を管理するマップ情報管理部１９０２と、終了処理対象ライブラリの識別情報が入力されると、終了処理対象ライブラリの識別情報を前記プロセス用配置情報管理部１９０１へ渡すことで該当するアドレス範囲を取得した後、終了処理を行い、終了処理の中でアンマップしたアドレス範囲を前記マップ情報管理部へ出力する終了処理部１９０３と、メモリアクセスが失敗したときのアドレスをマップ情報管理部１９０２に渡すことでマップされているかどうかの情報を取得して、マップされていない場合にアドレスを出力することで、マップされていないアドレスへのアクセスを監視する監視部１９０４と、前記監視部１９０４から取得したアドレスを、前記プロセス用配置情報管理部１９０１へ渡すことでライブラリの識別情報を取得し、起動すべきライブラリが存在するか判定し、ライブラリの識別情報を出力する判定部１９０５と、前記判定部１９０５より取得したライブラリの識別情報を、前記プロセス用配置情報管理部１９０１へ渡すことで、ライブラリの識別情報に対応するアドレス範囲を取得し、起動処理を行い、起動処理の中でマップしたアドレス範囲を前記マップ情報管理部１９０２へ出力する起動処理部１９０６と、メモリアクセスが失敗した場合に前記監視部１９０４へ処理を移す機能を備えるＣＰＵ１９０７と、コンテキスト情報を管理するコンテキスト情報管理部１９０８と、コンテキスト情報復元指令を取得したときに、前記コンテキスト情報管理部１９０８からコンテキスト情報を取得してコンテキスト情報を復元するコンテキスト情報復元部１９０９とで構成される。
【００５４】
なお、コンテキスト情報として、ＣＰＵ１９０７のレジスタ情報を想定するが、その他の情報でもよい。
【００５５】
コンテキスト情報管理部１９０８は、図１０に示すように、レジスタ名２００１とレジスタ値２００２を要素に持つ配列を有し、コンテキスト情報の管理を行う。一例としてＣＰＵ１９０７にＡＲＭを用いる場合について説明する。ＡＲＭはｒ０からｒ１５までのレジスタおよびＣＰＳＲレジスタの計１７個のレジスタを有するので、前記の計１７個のレジスタを配列で管理する。ＡＲＭ以外のＣＰＵ１９０７を用いる場合も同様にＣＰＵ１９０７が有するレジスタを配列で管理する。また、レジスタ名２００１は省略してもよいし、レジスタ値２００２には、レジスタ以外の情報を格納してもよい。コンテキスト情報管理部１９０８には、コンテキスト情報とコンテキスト情報出力指令の２種類の入力を受け付け、そのそれぞれについて動作が異なる。まず、入力がコンテキスト情報の場合は、入力されたレジスタ情報を配列に書き込む。また、コンテキスト情報出力指令を取得した場合は、配列中の全てのレジスタ情報を出力する。
【００５６】
コンテキスト情報復元部１９０９は、コンテキスト情報管理部１９０８へコンテキスト情報出力指令を出力し、コンテキスト情報を取得してレジスタへ書き戻す。この処理により、監視部１９０４へ処理が移った直前の状態に復帰する。
【００５７】
監視部１９０４の動作を、図１１を用いて説明する。
【００５８】
アドレスとコンテキスト情報を取得し（ステップＳ２１０１）、コンテキスト情報管理部１９０８へコンテキスト情報を出力する処理を行う（ステップＳ２１０２）。次に、取得したアドレスに対応する空間がマップされているか調べるために、マップ情報管理部１９０２へアドレスを出力してマップ情報を取得し（ステップＳ２１０３）、マップされているかどうかの判定を行う（ステップＳ２１０４）。マップされていた場合（ステップＳ２１０４のＹ）、処理を終了する。マップされていなかった場合（ステップＳ２１０４のＮ）は、判定部１９０５にアドレスを出力する（ステップＳ２１０５）。
【００５９】
また、起動処理部１９０６の動作を、図１２を用いて説明する。
【００６０】
まず、判定部１９０５よりライブラリ識別情報を取得する（ステップＳ２２０１）。次に、ライブラリ識別情報をプロセス用配置情報管理部１９０１へ出力しアドレス範囲を取得する（ステップＳ２２０２）。取得したアドレス範囲へのライブラリのマップを含む、ライブラリの起動処理を行う（ステップＳ２２０３）。ステップＳ２２０２で取得したアドレス範囲をマップしたアドレス範囲としてマップ情報管理部１９０２へ出力する（ステップＳ２２０４）。コンテキスト情報復元部１９０９へコンテキスト情報復元指令を出力する（ステップＳ２２０５）。
【００６１】
次に、本発明の情報処理装置の動作について、説明する。
【００６２】
監視部１９０４は、ＣＰＵ１９０７のレジスタ情報を取得し、コンテキスト情報管理部１９０８へ出力する。コンテキスト情報管理部は取得したレジスタ情報を記憶する。この後、監視部１９０４は実施の形態１の監視部１１０４と同様の動作を行う。ライブラリが起動された後、起動処理部１９０６はコンテキスト情報復元部１９０９へコンテキスト情報復元指令を出力する。コンテキスト情報復元部１９０９は、コンテキスト情報復元指令を取得し、コンテキスト情報管理部１９０８から取得したレジスタ情報をＣＰＵ１９０７へ書きもどす。これにより、ＣＰＵ１９０７のレジスタの状態画が監視部１９０４へ処理が移った直前に戻る。レジスタにはプログラムカウンタが含まれるので、監視部１９０４へ処理が移り、ステップＳ２１０５の判定でライブラリがマップされていると判断し、起動されたライブラリへのアクセスが行われる。
【００６３】
以上の構成をとることで、ライブラリを再び起動した後に正常にアクセスする機構を提供する。
【００６４】
さらに、起動処理部１９０６は、コード領域をマップする前にデータ領域をマップすると、マルチスレッド環境において、ライブラリの起動処理の最中に、ほかのスレッドによって起動処理中にライブラリを実行することが可能になることによる誤動作を防止することができるので、有効である。
【００６５】
以下、起動処理部１９０６が扱うライブラリの形式が、ＵＮＩＸ（登録商標）系のＯＳで広く用いられているＥＬＦフォーマットであると仮定して説明する。ＥＬＦフォーマットでは、ライブラリのバイナリが複数のセグメントで構成されている。図１３を用いてＥＬＦバイナリの一例を説明する。ＥＬＦバイナリ２３０１は、主にコードや読み込み専用のデータを格納する領域であるＴＥＸＴセグメント２３０２、データを格納する領域であるＤＡＴＡセグメント２３０３、主にグローバル変数を格納するＢＳＳセグメント２３０４で構成される。ほかにも、共有メモリを用いる場合などは、共有メモリ用のセグメント２３０５が構成に加わることもある。ＤＡＴＡセグメント２３０３は、他のライブラリの関数のアドレスが格納された．グローバルオフセットテーブル２３０６と呼ばれる構造体を有し、ほかのライブラリのコードを実行する際にはグローバルオフセットテーブル２３０６が参照される。また、ＴＥＸＴセグメント２３０２は、ライブラリ自身が有する関数のアドレスを格納したシンボル情報２３０７を具備する。
【００６６】
起動処理時の再配置処理の流れを、図１４を用いて説明する。起動処理対象のライブラリｌｉｂ１．ｓｏ２４０１が、３個のライブラリｌｉｂ２．ｓｏ２４０２およびｌｉｂ３．ｓｏ２４０３およびｌｉｂ４．ｓｏ２４０４をリンクしていた場合、リンクしている各ライブラリのシンボル情報２４０５および２４０６および２４０７を検索して、ｌｉｂ１．ｓｏ２４０１が使用する関数のアドレスを、ｌｉｂ１．ｓｏ２４０１のグローバルオフセットテーブル２４０８に書き込む。
【００６７】
起動処理部は、グローバルオフセットテーブル２４０８を含むセグメントであるＤＡＴＡセグメント２４０９の開始アドレスと終了アドレスをマップ情報管理部１１０２へ出力する。次に、前記の再配置処理を行う。さらに、ＢＳＳセグメント２４１０やそのほかのセグメント２４１１の開始アドレスと終了アドレスをマップ情報管理部１１０２へ出力し、最後にコードを含むセグメントであるＴＥＸＴセグメント２４１２の開始アドレスと終了アドレスをマップ情報管理部１１０２へ出力する。
【００６８】
以上の順序で起動処理を行うことにより、マルチスレッド環境において、起動が完了していないライブラリのコードが実行されることが防止される。
【００６９】
なお、ここでは説明を簡潔にするためにＥＬＦフォーマットを挙げたが、ほかのフォーマットでも同様である。また、シンボル情報２４０５がＴＥＸＴセグメント２４１２以外のセグメントに格納されてもよいし、グローバルオフセットテーブル２４０８がＤＡＴＡセグメント２４０９以外のセグメントに格納されてもよい。
【００７０】
以上により、動的ローディングシステム上で動作するプログラムにおいて、プログラム中でロードすべきライブラリ名が明示的に指定されていない状況でも、ライブラリを正しく特定することが可能となり、プロセス実行途中で終了したライブラリを再度起動することが可能となる。また、マルチスレッド環境において、起動が完了していないライブラリのコードを実行することが防止される。これにより、ＲＡＭ消費量を削減することができる。
【００７１】
（実施の形態３）
図１５は、本発明の実施の形態３における情報処理装置の構成を示す図である。
【００７２】
実施の形態３では、ライブラリの識別情報とライブラリの配置位置を示すアドレス範囲を管理するプロセス用配置情報管理部２５０１と、アドレス範囲がマップされているかどうかの情報を管理するマップ情報管理部２５０２と、終了処理対象ライブラリの識別情報が入力されると、終了処理対象ライブラリの識別情報を前記プロセス用配置情報管理部２５０１へ渡すことで該当するアドレス範囲を取得した後、終了処理を行い、終了処理の中でアンマップしたアドレス範囲を前記マップ情報管理部へ出力する終了処理部２５０３と、メモリアクセスが失敗したときのアドレスを前記マップ情報管理部２５０２に渡すことでマップされているかどうかの情報を取得して、マップされていない場合にアドレスを出力することで、マップされていないアドレスへのアクセスを監視する監視部２５０４と、前記監視部０４から取得したアドレスを、前記プロセス用配置情報管理部２５０１へ渡すことでライブラリの識別情報を取得し、起動すべきライブラリが存在するか判定し、ライブラリの識別情報を出力する判定部２５０５と、前記判定部２５０５より取得したライブラリの識別情報を、前記プロセス用配置情報管理部２５０１へ渡すことで、ライブラリの識別情報に対応するアドレス範囲を取得し、起動処理を行い、起動処理の中でマップしたアドレス範囲を前記マップ情報管理部２５０２へ出力する起動処理部２５０６と、メモリアクセスが失敗した場合に前記監視部２５０４へ処理を移す機能を備えるＣＰＵ２５０７と、プロセス用配置情報管理部２５０１が有する配置情報をプロセス起動前に固定する、配置情報固定部２５０８を有する。
【００７３】
通常の動的ローディングシステムでは、ライブラリの配置アドレスは、プロセス起動時に決定する。そのため、他のライブラリの関数を実行させるためには、他のライブラリの配置アドレスが決定したあとに、そのアドレスを元にグローバルオフセットテーブルを作成する。そして、関数実行時にはグローバルオフセットテーブルを参照して対象ライブラリをアクセスする。
【００７４】
本実施の形態では、プロセスが起動する前に、配置情報固定部２５０８により全てのライブラリの配置アドレスを固定化する。全ての関数のアドレスが固定化されるので、バイナリに直接アドレスを書き込むことができる。起動処理時は、起動処理部２５０６が直接アドレスの書き込まれたバイナリを読み込む。固定化されたアドレスをバイナリに書き込む方法は、グローバルオフセットテーブルを固定化する方法と、分岐命令の引数に直接書き込む方法などが挙げられる。
【００７５】
以上の処理を行うことにより、起動処理中にグローバルオフセットテーブルを作成する処理が不要になり、起動処理に要する時間が短縮される。
【００７６】
この場合、プロセスがリンクするライブラリを全て事前に特定することができる。プロセスの起動処理に必要なプロセスごとのライブラリ情報を静的に読み込ませることで、起動処理の単純化をはかることができる。
【００７７】
さらに、終了処理部２５０３は、終了処理前に、ライブラリがすでに終了されているかの判定を行い、終了されている場合は、終了処理しない仕組みを具備すると、ライブラリの二重終了を防止できるので有効である。
【００７８】
この場合の、終了処理部２５０３の動作を、図１６を用いて説明する。
【００７９】
まず、ライブラリ識別情報を取得する（ステップＳ２６０１）。次に、プロセス用配置情報管理部２５０１より、ライブラリのアドレス範囲を取得し（ステップＳ２６０２）、マップ情報管理部２５０２へアドレスを出力してマップ情報を取得する（ステップＳ２６０３）。取得したマップ情報をもとにライブラリの終了処理を行うか判断し（ステップＳ２６０４）、取得したライブラリ識別情報で識別されるライブラリの終了処理およびアンマップ処理を実行する（ステップＳ２６０５）。ステップＳ２６０２で取得したアドレス範囲をマップするアドレス範囲としてマップ情報管理部２５０２へ出力する（ステップＳ２６０６）。
【００８０】
前記の構成をとることによって、ライブラリの二重終了を防止する。
【００８１】
なお、前述の説明はあらゆる点において本発明の例示にすぎず、その範囲を限定しようとするものではない。本発明の範囲を逸脱することなく種々の改良や変形を行うことができることは言うまでもない。
【００８２】
以上により、動的ローディングシステム上で動作するプログラムにおいて、プログラム中でロードすべきライブラリ名が明示的に指定されていない状況でも、ライブラリを正しく特定することが可能となり、プロセス実行途中で終了したライブラリを再度起動することが可能となる。また、ライブラリを再びロードする際に、アンロードした時と同じ位置にライブラリをロードすることが可能となる。さらに、再びロードする際に、プログラムのＲＡＭ上への展開を行うのみでなく、再配置処理や初期化関数の実行といった起動処理を行うことにより、ライブラリを実行可能な状態にすることができる。これにより、ＲＡＭ消費量を削減することができる。
【００８３】
なお、上記の各装置を構成する構成要素の一部または全部は、１個のシステムＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ：大規模集積回路）から構成されているとしてもよい。システムＬＳＩは、複数の構成部を１個のチップ上に集積して製造された超多機能ＬＳＩであり、具体的には、マイクロプロセッサ、ＲＯＭ、ＲＡＭなどを含んで構成されるコンピュータシステムである。前記ＲＡＭには、コンピュータプログラムが記憶されている。前記マイクロプロセッサが、前記コンピュータプログラムにしたがって動作することにより、システムＬＳＩは、その機能を達成する。
【産業上の利用可能性】
【００８４】
本発明にかかる情報処理装置は、ＲＡＭ消費量を削減する効果を有し、組み込み機器などＲＡＭを搭載するシステム等への用途として有用である。
【図面の簡単な説明】
【００８５】
【図１】本発明の実施の形態１における情報処理装置の構成を示すブロック図
【図２】本発明の実施の形態１における情報処理装置を備えるハードウェア構成の一例を示した図
【図３】本発明の実施の形態１における終了処理部の処理のフローを示す図
【図４】本発明の実施の形態１における監視部の処理のフローを示す図
【図５】本発明の実施の形態１における判定部の処理のフローを示す図
【図６】本発明の実施の形態１における起動処理部の処理のフローを示す図
【図７】本発明の実施の形態１におけるマップ情報管理部の構成および動作を示す図
【図８】本発明の実施の形態１におけるライブラリの配置情報管理部の構成および動作を示す図
【図９】本発明の実施の形態２における情報処理装置の構成を示すブロック図
【図１０】本発明の実施の形態２におけるコンテキスト情報管理部の構成を示す図
【図１１】本発明の実施の形態２における監視部の処理のフローを示す図
【図１２】本発明の実施の形態２における起動処理部の処理のフローを示す図
【図１３】本発明の実施の形態２におけるＥＬＦバイナリの構成を示すブロック図
【図１４】本発明の実施の形態２におけるグローバルオフセットテーブルの作成の過程を示した図
【図１５】本発明の実施の形態３における情報処理装置の構成を示すブロック図
【図１６】本発明の実施の形態３における終了処理部の処理のフローを示す図
【符号の説明】
【００８６】
１１０１，１９０１，２５０１    プロセス用配置情報管理部
１１０２，１９０２，２５０２    マップ情報管理部
１１０３，１９０３，２５０３    終了処理部
１１０４，１９０４，２５０４    監視部
１１０５，１９０５，２５０５    判定部
１１０６，１９０６，２５０６    起動処理部
１１０７，１２０１，１９０７，２５０７    ＣＰＵ
１２０２    主記憶装置
１２０３    二次記憶媒体
１２０４    レジスタ
１２０５    アプリケーション
１２０６    ライブラリ
１７０１，１８０２    開始アドレス
１７０２，１８０３    終了アドレス
１８０１    ライブラリ名
１９０８    コンテキスト情報復元部
１９０９    コンテキスト情報管理部
２００１    レジスタ名
２００２    レジスタ値
２３０１    ＥＬＦバイナリ
２３０２，２４１２    ＴＥＸＴセグメント
２３０３，２４０９    ＤＡＴＡセグメント
２３０４，２４１０    ＢＳＳセグメント
２３０５，２４１１    共有メモリ用のセグメント
２３０６，２４０８    グローバルオフセットテーブル
２３０７，２４０５，２４０６，２４０７    シンボル情報
２５０８    配置情報固定部
【図１】
2007094497.tif 000003
【図２】
2007094497.tif 000004
【図３】
2007094497.tif 000005
【図４】
2007094497.tif 000006
【図５】
2007094497.tif 000007
【図６】
2007094497.tif 000008
【図７】
2007094497.tif 000009
【図８】
2007094497.tif 000010
【図９】
2007094497.tif 000011
【図１０】
2007094497.tif 000012
【図１１】
2007094497.tif 000013
【図１２】
2007094497.tif 000014
【図１３】
2007094497.tif 000015
【図１４】
2007094497.tif 000016
【図１５】
2007094497.tif 000017
【図１６】
2007094497.tif 000018