(57)【要約】【課題】情報処理装置上で共有ライブラリを動的にリンクして実行されるプログラムにおける主記憶装置の使用をより効率的に行うことを目的とする。【解決手段】共有ライブラリが動的にリンクされてプログラムが実行される情報処理装置等であって、プログラムが使用した共有ライブラリの呼び出し関係を記録し、記録した呼び出し関係を元に代替ライブラリを構成し、代替ライブラリをプログラムが使用するようにリンクを切り替えることによって課題を解決する。【選択図】図５
2012141887.tif 000002
【特許請求の範囲】
【請求項１】
共有ライブラリが動的にリンクされてプログラムが実行される情報処理装置であって、
プログラムが使用した共有ライブラリの呼び出し関係を記録する履歴記録手段と、
前記履歴記録手段で記録された呼び出し関係を元に代替ライブラリを構成する構成手段と、
前記代替ライブラリを前記プログラムが使用するようにリンクを切り替える切り替え手段とを備えることを特徴とする情報処理装置。
【請求項２】
前記履歴記録手段は、前記プログラムがどのような共有ライブラリを呼び出したかという呼び出し関係を記録することを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記履歴記録手段は、前記プログラムがどのような共有ライブラリ及びライブラリ関数を呼び出したかという呼び出しに関する履歴情報を記録し、前記履歴情報を参照可能とすることを特徴とする請求項１記載の情報処理装置。
【請求項４】
前記構成手段は、前記履歴記録手段で記録された共有ライブラリの呼び出し関係から元の共有ライブラリを再構成することを特徴とする請求項１記載の情報処理装置。
【請求項５】
共有ライブラリが動的にリンクされてプログラムが実行される情報処理方法であって、
プログラムが使用した共有ライブラリの呼び出し関係を記録する履歴記録工程と、
前記履歴記録工程で記録された呼び出し関係を元に代替ライブラリを構成する構成工程と、
前記代替ライブラリを前記プログラムが使用するようにリンクを切り替える切り替え工程とを備えることを特徴とする情報処理方法。
【請求項６】
請求項５記載の情報処理方法の各工程をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理方法、及びプログラムに関する。
【背景技術】
【０００２】
従来、ライブラリを使用するプログラムが動作する情報処理装置としては、静的リンク方式と動的リンク方式とがある。動的リンク方式では、プログラム中にライブラリコードを含んでおらず、プログラムと独立しているため、そのライブラリの更新が静的リンク方式に比べて容易である。
また、複数のプログラムが同一のライブラリを使用する場合、プログラムの実行時に随時必要なライブラリを動的にリンクして共通に使用する動的リンク方式では、使用するメモリの削減が可能という利点もある。
【０００３】
一方で、動的リンク方式ではプログラムの実行時に、必要とするライブラリのシンボルアドレスを解決し、前記プログラムが共有ライブラリの関数を使用可能にする処理が必要になる。このため、実行時にオーバーヘッドが大きいという欠点もある。さらに、このオーバーヘッドは、プログラムの実行時には毎回発生する。
この欠点を補う方法としては、複数のアプリケーションが可能な限り共通にロード状態の管理機構を利用できるようにすることで、起動時間の高速化と共にメモリの消費量の削減を実現するものがある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００７−３３４８６９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しなしながら、特許文献１の技術は、共有ライブラリとのリンク関係の解析結果を記録する部分としてもメモリ削減を実現しているものであり、例えばオペレーティングシステムが主記憶装置１０２の資源を管理する単位のページに関する資源の削減には至らない。
【０００６】
本発明はこのような問題点に鑑みなされたもので、情報処理装置上で共有ライブラリを動的にリンクして実行されるプログラムにおける主記憶装置の使用をより効率的に行うことを目的とする。
【課題を解決するための手段】
【０００７】
そこで、本発明に係る情報処理装置は、共有ライブラリが動的にリンクされてプログラムが実行される情報処理装置であって、プログラムが使用した共有ライブラリの呼び出し関係を記録する履歴記録手段と、前記履歴記録手段で記録された呼び出し関係を元に代替ライブラリを構成する構成手段と、前記代替ライブラリを前記プログラムが使用するようにリンクを切り替える切り替え手段とを備えることを特徴とする。
【発明の効果】
【０００８】
本発明によれば、情報処理装置上で共有ライブラリを動的にリンクして実行されるプログラムにおける主記憶装置の使用をより効率的に行うことができる。
【図面の簡単な説明】
【０００９】
【図１】情報処理装置の構成の一例を示す図である。
【図２】記憶管理方式の構成の一例を示す図である。
【図３】情報処理装置の仕組みの一例を示す図である。
【図４】主記憶装置の構成の一例を示す図である。
【図５】主記憶装置の構成の一例を示す図である。
【図６】呼び出し履歴の一例を示す図である。
【図７】疑似ライブラリの作成方法の一例を示す図である。
【図８】読み込み処理に係るフローチャートの一例を示す図である。
【図９】再構成処理に係るフローチャートの一例を示す図である。
【図１０】ロード処理に係るフローチャートの一例を示す図である。
【図１１】主記憶装置の構成の一例を示す図である。
【図１２】呼び出し履歴の一例を示す図である。
【図１３】再構成処理に係るフローチャートの一例を示す図である。
【図１４】主記憶装置の構成の一例を示す図である。
【図１５】呼び出し履歴の一例を示す図である。
【図１６】主記憶装置の構成の一例を示す図である。
【図１７】読み込み処理に係るフローチャートの一例を示す図である。
【図１８】呼び出し履歴の一例を示す図である。
【図１９】再構成処理に係るフローチャートの一例を示す図である。
【図２０】主記憶装置の構成の一例を示す図である。
【発明を実施するための形態】
【００１０】
以下、本発明の実施形態について図面に基づいて説明する。なお、実施形態は、本発明を限定するものではなく、また、実施形態で説明されている全ての構成が本発明の課題を解決するための手段に必須であるとは限らない。
【００１１】
＜実施形態１＞
本実施形態に係る装置の構成について、図１、図２、図３を参照して説明する。
図１は、情報処理装置（コンピュータ）１００の構成の一例を示す図である。ＣＰＵ１０１は、情報処理装置１００全体を制御するCentral Processing Unit（ＣＰＵ）であり、オペレーティングシステム（ＯＳ）２２０やプログラムＡ２１１がＣＰＵ１０１で動作している。主記憶装置１０２は、プログラムやデータを一時記憶するRandom Access Memory（ＲＡＭ）等である。
二次記憶装置１０３は、ＨＤＤ等であり、データやプログラムを記録しておくことができる不揮発性の記憶媒体である。デバイス１０４は、ネットワーク機器やシリアル通信機器などの情報処理装置１００に接続された周辺機器である。バス１０５は、各ユニットを通信可能に接続するシステムバスである。例えば、本実施形態では、ＣＰＵ１０１が、二次記憶装置１０３に格納されたプログラムの手順に従って処理を行うことによって、情報処理装置１００における機能及び後述するフローチャートに係る処理が実現される。
【００１２】
図２に、記憶管理方式の構成の一例を示す。プログラムＡ２１１は、ＯＳ２２０によって管理され、仮想記憶２１０がそれぞれ割り当てられ、ユーザ（ユーザプログラム）は、仮想記憶２１０を操作することになる。各プログラムの実データは、ＭＭＵ２２１によって仮想記憶２１０から主記憶装置１０２のアドレスに変換される。ＭＭＵ２２１の機能は、ＯＳ２２０によって実現されることもあるし、ＣＰＵ１０１が前記機能を有していることもある。
また、ＯＳ２２０は、主記憶装置１０２を管理しており、主記憶装置１０２上のデータを二次記憶装置１０３に退避・復帰する機能を有している。これらの機能により、ユーザプログラムは、不連続な物理メモリ断片を連続した仮想メモリとして利用することや、実際の主記憶量よりも多くのアドレスを利用できるなどの利点を得ることができる。本実施形態では、上記のような構成においてユーザプログラムが実行される場合について説明する。
【００１３】
図３を参照して、ユーザプログラムの一例であるプログラムＡ２１１がライブラリＡ２１２aの関数Func_A２１３aとライブラリＢ２１２ｂの関数Func_B２１３ｂを呼び出して使用する場合について説明する。図３は、情報処理装置１００の仕組みの一例を示す図である。
プログラムＡ２１１の実行開始に当たり、ダイナミックリンカ・ローダ（以下ではリンカ・ローダ３００と呼ぶ。）は、基本的には、プログラムＡ２１１が必要とするライブラリＡ２１２ａ及びライブラリＢ２１２ｂの後述の疑似ライブラリを探し出す。ただし、初めて使用される場合は、リンカ・ローダ３００は、ライブラリＡ２１２ａ及びライブラリＢ２１２ｂを共有ライブラリとして二次記憶装置１０３より読み出して主記憶装置１０２にロードする。
そして、疑似ライブラリ（共有ライブラリ）は、そのままではプログラムＡ２１１から呼び出し不可能な状態であるので、リンカ・ローダ３００は、疑似ライブラリ（共有ライブラリ）のアドレス解決を行う。
【００１４】
以上により、プログラムＡ２１１は、ライブラリＡ２１２ａ及びライブラリＢ２１２ｂに含まれる関数Func_A２１３ａ及び関数Func_B２１３ｂを呼び出すことが可能となる。
関数Func_A２１３ａ及び関数Func_B２１３ｂについては、更にプログラムＡ２１１が実行する時点でシンボルの解決を行うか、該当関数が呼ばれた時に随時可決を行うかなど様々な方法があるが、本実施形態はこのような方法によっては限定されない。以下では、以上のプログラムの実行方法が情報処理装置１００で行われるとして、本実施形態について説明する。
【００１５】
ここで、共有ライブラリは、様々なプログラムから呼ばれる関数群を提供するため、汎用的になっており、その内部構成は、ライブラリによって様々である。図４に、共有ライブラリを動的にリンク（動的リンク）して使用する際の一例を示す。
あるプログラムＡ２１１がライブラリＡ２１２aというライブラリを動的リンクして実行されるとする。プログラムＡ２１１は、ライブラリＡ２１２aの関数Func_A-1、Func_A-2、Func_A-Nを呼び出している。
【００１６】
上記の場合、リンカ・ローダ３００は、プログラムＡ２１１を実行前に、ライブラリＡ２１２aが必要であることを検出し、ライブラリＡ２１２aは、二次記憶装置より読み出されて主記憶装置１０２にロードされる。主記憶装置１０２にロードされたライブラリＡ２１２aは、プログラムＡ２１１とのリンク処理がなされ、プログラムＡ２１１からライブラリＡ２１２aの関数の呼び出しが可能となる。
ここで、UNIX（登録商標）やLinux（登録商標）のようなＯＳでは、主記憶装置１０２の資源をページと呼ばれる単位で管理している。ＯＳは、利用されていないページを破棄し、新たな資源として割り当てることで主記憶装置１０２の資源の利用効率を高めている。
【００１７】
主記憶装置１０２がＯＳ２２０の資源管理下にある場合、プログラムＡが呼び出す関数Func_A-1は、主記憶装置１０２のページ２３０の一部に、関数Func_A-2及びFunc_A-3は、ページ２３１の一部にロード済みであったとする。例えば、ページ２３０の場合、プログラムＡ２１１によって関数Func_A-1が呼び出されている間は、ＯＳ２２０によって使用中とみなされ、破棄されることはない。
別の視点から見ると、ページ２３０中に占める関数Func_A-1の割合が非常に小さなものである。ページ２３０のその他の関数等がまったく呼び出されることない場合であってもＯＳ２２０は、該当ページ２３０を使用中であるとみなしているため、主記憶装置１０２からページ２３０を破棄することはしない。このため、ページ２３０内の大部分が利用されなくても主記憶装置１０２の資源を占有しつづけてしまう事態が起こり得る。ページ２３１に関しても同様であり、Func_A-2記述部２４１、Func_A-3記述部２４２以外は、呼び出されていなければ非効率な資源となる。
【００１８】
本実施形態では、図４、図５に示すように、１つのライブラリＡ２１２aを動的リンクして１つのプログラムＡ２１１が実行される場合を考える。図４は、ライブラリＡ２１２aの初回の読み込み時の主記憶装置１０２の構成の一例を示し、図５は、ライブラリＡ２１２aの次回の読み込み時の主記憶装置１０２の構成の一例を示す。
【００１９】
ライブラリＡ２１２aの初回の読み込み時は、リンカ・ローダ３００、及びＯＳ２２０によって、図４に示すように主記憶装置１０２にページごとに読み込まれる。ここで、プログラムＡ２１１が必要とするライブラリＡ２１２aの関数（ライブラリ関数）を呼び出したときに実行される関数のシンボル解決において、リンク・ロード履歴取得部５０１は、プログラムＡ２１１が使用した共有ライブラリの呼び出し関係を取得する。より詳細に説明すると、リンク・ロード履歴取得部５０１は、プログラムＡ２１１がライブラリＡ２１２aのどの関数を呼び出したか、その呼び出し回数が何回であるかをプログラムＡ２１１の実行状況より取得する。
リンク・ロード履歴記録部５０２は、図６に示す呼び出し履歴の一例（呼び出し履歴６００）のように、プログラムＡ２１１が開始されてから終了するまでのライブラリＡ２１２aの使用履歴（履歴情報）を記録し、記録された使用履歴を参照可能にする。
【００２０】
プログラムＡ２１１の終了処理時、図７に示す擬似ライブラリ構成部７００は、リンク・ロード履歴記録部５０２により、ライブラリ関数で多く呼び出されたものから順に集約されるよう擬似ライブラリ（例えば擬似ライブラリＡ'２１４）を作成する。図７に、疑似ライブラリ（代替ライブラリ）の作成方法の一例を示す。
擬似ライブラリ構成部７００は、ライブラリの内容を解釈し、新たなライブラリとしてリンク、ロードすることができるライブラリの構成が可能な機能を有する。なお、情報処理装置１００は、元のライブラリＡ２１２aと同様に保存可能なだけの領域を持った二次記憶装置１０３を有しているとする。
擬似ライブラリ構成部７００が擬似ライブラリＡ'２１４を作成した後に、例えばリンク・ロード履歴記録部５０２は、次回のプログラムＡ２１１が実行されるときは擬似ライブラリＡ'２１４を読み込むようにリンク・ロード切り替え部５００に知らせる。
【００２１】
リンカ・ローダ３００は、リンク・ロード切り替え部５００が例えば呼び出し履歴６００によりライブラリＡ２１２aから擬似ライブラリＡ'２１４に読み込みを切り替えることを検知する。すなわち、情報処理装置１００では、リンカ・ローダ３００が擬似ライブラリＡ'２１４を二次記憶装置１０３から読み込むように構成される。
新たに読み込まれる擬似ライブラリＡ'２１４は、これまでにプログラムＡ２１１によって呼び出されたことがあり、かつ呼び出された回数が多いものから順に集約されるよう構成されている。このため、呼び出された回数の多い関数が同ページに集中し、逆に呼び出し回数の少ない関数も同ページに集中する。
ここで、ページ２３０に関しては、呼び出される回数の多い関数が多く、ページ２３０の利用頻度は高いので、ページ２３０は、主記憶装置１０２に常駐していることが望ましい。一方、呼び出された回数が少ない関数が集約されたページ２３１では、例えばリンク・ロード履歴取得部５０１が呼び出し履歴６００を参照する。そして、ページ２３１内の関数の全てが呼び出し履歴６００に記録されたライブラリ関数の呼び出し回数だけ呼び出されたことがわかった時点でページ２３１が主記憶装置１０２から開放される。他のプログラムに資源として提供することで、更に主記憶装置１０２の資源を効率化できる。
【００２２】
ライブラリを呼び出す処理の詳細については、図８、図９、図１０を参照して説明する。
図８は、ライブラリの読み込み処理に係るフローチャートの一例を示す図である。Ｓ１０１では、まずプログラムＡ２１１の開始処理が行われ、プログラムＡ２１１をＯＳ２２０上で実行することができるようにする。そして、リンカ・ローダ３００は、Ｓ１０２では、プログラムＡ２１１が必要とするライブラリ等を検索するリンカ・ローダ処理を行い、Ｓ１０３では、ライブラリＡ２１２ａの関数の呼び出しであるかを判定する。このとき、リンカ・ローダ３００は、ライブラリＡ２１２ａの関数の呼び出しであると判断した場合、Ｓ１０４の処理を行い、他方、ライブラリＡ２１２ａの関数の呼び出しでないと判断した場合、Ｓ１０２の処理を行う。
リンカ・ローダ３００は、プログラムの開始時、又はプログラムの実行中にライブラリＡ２１２ａの関数の呼び出しがあった場合、Ｓ１０４では、その関数をプログラムＡ２１１が使用できるように読み込み、アドレス解決などを行う。これで、共有ライブラリがプログラムＡ２１１から呼び出し可能な状態になる。ここでは、プログラムＡ２１１がライブラリＡ２１２ａの関数Func_A-1を呼び出しているときを例に挙げて説明する。
【００２３】
次に、Ｓ１０５では、リンカ・ローダ３００のリンク・ロード履歴取得部５０１によって、どのプログラムが、どのライブラリの、どの関数（例えば、関数Func_A-1）を何回（例えば、１回）呼び出したかを示す情報を取得する。また、リンク・ロード履歴記録部５０２は、リンク・ロード履歴取得部５０１から通知される情報を呼び出し履歴６００に記録する。換言するならば、リンク・ロード履歴記録部５０２は、リンク・ロード履歴取得部５０１から通知される関数呼び出し回数と、呼び出し履歴６００の記録とを照らし合わせ、該当関数の履歴を更新する。
Ｓ１０６では、リンカ・ローダ３００は、ライブラリ関数のシンボル解決が全て終了したかを判定する。このとき、リンカ・ローダ３００は、ライブラリ関数のシンボル解決が全て終了したと判断した場合、読み込み処理を終了し、ライブラリ関数のシンボル解決が全て終了していないと判断した場合、Ｓ１０２の処理を行う。換言するならば、リンカ・ローダ３００は、プログラムＡ２１１が終了するまでＳ１０２からＳ１０６までの処理を続ける。
【００２４】
図９は、プログラムの終了時に擬似ライブラリ構成部７００がライブラリを再構成する再構成処理に係るフローチャートの一例を示す図である。
Ｓ２０１では、プログラムＡ２１１の終了に係る処理（終了処理）が行われ、Ｓ２０２では、擬似ライブラリ構成部７００は、呼び出し履歴６００を参照し、呼び出し履歴６００に更新があるかを判定する。このとき、擬似ライブラリ構成部７００は、更新があると判断した場合、Ｓ２０３の処理を行い、他方、更新がないと判断した場合、再構成処理を終了する。
Ｓ２０３では、擬似ライブラリ構成部７００は、この例ではライブラリ関数の呼び出し状況（呼び出し履歴６００）に更新があるので、呼び出し履歴６００に記載されたライブラリＡ２１２a中で呼び出された実績のある関数をまとめる。この際、擬似ライブラリ構成部７００は、呼び出し回数の多い順に擬似ライブラリＡ'２１４として再構成を行う。再構成が完了した後、Ｓ２０４では、擬似ライブラリ構成部７００は、呼び出し履歴６００に記録されたライブラリの情報（例えば、ライブラリ名）をＳ２０３で構成した擬似ライブラリＡ'２１４の情報に書き換え、再構成処理を終了する。
【００２５】
続いて、次回（２回目）以降のプログラムＡ２１１の実行手順について説明する。図１０は、リンク・ロード切り替え部５００がライブラリをロードするロード処理に係るフローチャートの一例を示す図である。
Ｓ３０１では、プログラムＡ２１１が開始され、Ｓ３０２では、リンク・ロード処理が行われる。Ｓ３０３では、リンク・ロード切り替え部５００は、呼び出し履歴６００を参照し、呼び出し履歴６００にプログラムＡ２１１のライブラリの情報が記録されているかを判定する。このとき、リンク・ロード切り替え部５００は、記録されていると判断した場合、Ｓ３０４の処理を行い、他方、記録されていないと判断した場合、Ｓ３０５の処理を行う。
【００２６】
この例ではプログラムＡ２１１に関するライブラリの情報が記録されている。よって、リンク・ロード切り替え部５００は、Ｓ３０４では、通常のライブラリをロードするのではなく、呼び出し履歴６００に記録された擬似ライブラリＡ'２１４を読み込むように切り替えてロードする。
Ｓ３０５では、リンク・ロード切り替え部５００は、呼び出し履歴６００に前記履歴が無いので、Ｓ３０５において通常通りのライブラリを読み出す。そして、ロード処理が終了され、プログラムＡ２１１の実行が続けられる。
なお、呼び出し履歴６００は、不揮発情報として残されることが望ましく、本実施形態においては二次記憶装置１０３の任意の場所に保存されてもよいし、特別な不揮発メモリを用意し、そこに記録してもよいものとする。また、呼び出し履歴６００を元にライブラリを再構成する処理に関して、本実施形態では、プログラムＡ２１１の終了時としたが、ＯＳ２２０のシステムの終了処理中に行っても構わない。
【００２７】
このように、本実施形態では、リンカ・ローダ（ダイナミックリンカ）によって呼び出されたライブラリの関数の呼び出し実績及びその呼び出し回数が履歴として記録される。また、プログラムの実行の終了時に前記履歴から使用された実績のあるライブラリ関数を呼び出し回数の多いものから順に集約して擬似的なライブラリが再構築される。そして、再構築されたライブラリについて次回の実行時にリンカ・ローダがリンク処理を行う。
以上の構成によれば、再構築された擬似的なライブラリは、主記憶装置にライブラリ関数の呼び出しが必ず起こり、且つその呼び出し回数が多い順に同一のページ内に配置されるので、主記憶装置の使用効率をより高めることができる。さらに、集約されたライブラリ関数の呼び出し回数が全て満たされたページを主記憶装置から開放することで、更に主記憶装置の使用効率を高めることができる。
【００２８】
＜実施形態２＞
次に、複数のプログラム、例えば図１１に示すようにプログラムＡ２１１及びプログラムＢ１１０１が共有ライブラリを使用して実行される場合について説明する。図１１は、主記憶装置１０２の構成の一例を示す図である。本実施形態では、実施形態１と同一の構成については同一の符号を用いてその説明を適宜省略する。
ここで、基本的には、複数のプログラムであってもプログラムごとに処理が行われることに変わりはなく、プログラム間での依存関係などは無いため、以下では、主に図８、図１０、図１３を参照して本実施形態を説明する。
【００２９】
図８のＳ１０１からＳ１０４まで、Ｓ１０６の処理における各プログラムの実行に必要なライブラリの読み込み処理については実施形態１と同様である。
Ｓ１０５においては、各プログラムが、どのライブラリの、どの関数を使用したかという履歴は、プログラムごとに作成されることになるが、これは各プログラムに共通の呼び出し履歴１２００に記録される。図１２に、呼び出し履歴１２００の一例を示す。なお、ここでは、各プログラムの呼び出し回数を呼び出し履歴１２００の右端に記載された回数であったと仮定する。
【００３０】
図１３は、再構成処理に係るフローチャートの一例を示す図である。Ｓ１３０１以降は、ＯＳ２２０の終了処理での説明である。複数のプログラムが動作する場合、各プログラムは、自分以外のプログラムがいつ終了するかどうかということは不明であるので、本実施形態では、全てのプログラムが終了処理を終えているＯＳ２２０の終了処理時を例に挙げて説明する。ただし、各プログラムが同期をとっており、それぞれの終了が通知される仕組みにおいては、各プログラムの終了時において本処理を実施することは問題ない。
Ｓ１３０１では、ＯＳの終了に係る処理が行われ、Ｓ１３０２では、擬似ライブラリ構成部７００は、呼び出し履歴１２００を参照し、呼び出し履歴１２００が更新されているかを判断する。ここで、呼び出し履歴１２００からは、ライブラリＡ２１２ａに関しては各プログラムから関数Func_A-1からFunc_A-5までが呼ばれ、ライブラリＢ２１２ｂに関してはプログラムＢ１１０１から関数Func_B-1が呼ばれていることがわかる。また、ライブラリＡ２１２ａの関数が呼び出される回数は、各プログラムを合計すると、関数Func_A-5、Func_A-1、Func_A-2、Func_A-3、Func_A-4の順に少なくなる。
【００３１】
Ｓ１３０３では、擬似ライブラリ構成部７００は、呼び出される回数に従って関数をまとめた擬似ライブラリＡ'２１４及び擬似ライブラリＢ'を構成する。Ｓ１３０４では、擬似ライブラリ構成部７００は、呼び出し履歴１２００の「ライブラリＡ」と記録された部分を「ライブラリＡ'」に、「ライブラリＢ」と記録された部分を「ライブラリＢ'」に書き換え、再構成処理を終了する。図１５に、呼び出し履歴１２００が書き換えられた呼び出し履歴１５００の一例を示す。
そして、各プログラムの次回の実行時、図１０のＳ３０３においてリンク・ロード切り替え部５００は、更新された呼び出し履歴１５００を参照する。Ｓ３０４では、リンク・ロード切り替え部５００は、擬似ライブラリＡ'２１４、擬似ライブラリＢ'２１５を読み込むように切り替える。図１４に、各プログラムの次回の実行時における主記憶装置１０２の構成の一例を示す。
上述した構成によれば、複数のプログラムが共有ライブラリを使用して実行される場合であっても、例えば主記憶装置の使用効率を高めることができる。
【００３２】
＜実施形態３＞
実施形態３では、例えば図１６で示されるように、更に新たにプログラムＣ１６００が実行される場合について、主に図１７から図１９までを用いて説明する。図１６は、主記憶装置１０２の構成の一例を示す図である。本実施形態では、実施形態１、実施形態２と同一の構成については同一の符号を用いてその説明を適宜省略する。
ここで、プログラムＣ１６００がどのようなライブラリ、又はライブラリ関数を使用するかによって処理が異なるので、それぞれの場合について説明する。
なお、プログラムＡ２１１、及びプログラムＢ１１０１を実行する手順は、実施形態２と同様であるため説明は省略する。
【００３３】
（ケースＡ）
はじめに、プログラムＣ１６００が必要とするライブラリ関数が擬似ライブラリＡ'２１４又は擬似ライブラリＢ'２１５に含まれている場合（ケースＡ）について説明する。
図１７は、ライブラリの読み込み処理に係るフローチャートの一例を示す図である。Ｓ１７０１では、プログラムＣ１６００が開始され、Ｓ１７０２では、プログラムＣ１６００が必要とするライブラリとその関数が検索される。
【００３４】
そして、リンク・ロード切り替え部５００は、呼び出し履歴１５００を参照し（Ｓ１７０３）、プログラムＡ２１１及びプログラムＢ１１０１の呼び出し履歴とヒットしないかを判定する（Ｓ１７０４）。ケースＡでは、プログラムＣ１６００は、擬似ライブラリＡ'又は擬似ライブラリＢ'に含まれる関数を呼び出すとしたので、ここではすべて呼び出し履歴１５００とヒットする。
すなわち、Ｓ１７０５の処理が行われ、Ｓ１７０５では、リンク・ロード履歴記録部５０２は、呼び出し履歴１５００にプログラムＣ１６００の呼び出し履歴を追加記録し、更新された呼び出し履歴１８００とする。図１８に、呼び出し履歴１８００の一例を示す。Ｓ１７０６では、リンク・ロード切り替え部５００は、ライブラリを読み出し、プログラムＣ１６００が使用できるように処理を行う。
【００３５】
（ケースＢ）
次に、プログラムＣ１６００が使用するライブラリのうちの一部、又はその全てがプログラムＡ、プログラムＢでは呼び出されたことのないライブラリ関数であった場合（ケースＢ）について説明する。
Ｓ１７０３では、呼び出し履歴が参照されるが、例えばＳ１７０４で一致する関数がないと判断するので、Ｓ１７０８の処理が行われる。Ｓ１７０８では、プログラムＣ１６００が必要とする新たなライブラリ（例えばライブラリＣ）を読み込み、使用可能になるよう処理する。続いて、Ｓ１７０９では、呼び出し履歴１５００に使用したライブラリ名とシンボル名及び関数の呼び出し回数を記録する。
【００３６】
そして、図１９に示す再構成処理において、ＯＳ２２０の終了処理（Ｓ１９０１）が行われ、擬似ライブラリ構成部７００は、新たに擬似ライブラリへの再構成が必要であるか否かを検証する（Ｓ１９０２、Ｓ１９０３）。ここでは、例えば、プログラムＣ１６００が新たなライブラリ関数を呼び出していなければ擬似ライブラリ再構成の必要は無く、直ちに再構成処理を終了する。Ｓ１９０４、Ｓ１９０５では、擬似ライブラリ構成部７００は、実施形態１及び実施形態２と同様に擬似ライブラリを作成し、擬似ライブラリをプログラムＣが使用するように呼び出し履歴１８００を更新する。なお、次回以降のプログラムの実行方法は、実施形態１、実施形態２と同様である。
上述した構成によれば、新たにプログラムが実行される場合であっても、例えば主記憶装置の使用効率を高めることができる。
【００３７】
＜実施形態４＞
実施形態４では、例えばエラー処理のような通常では行われない、例外的に実行される部分でライブラリ関数が呼び出されるような場合について図２０を参照して説明する。図２０は、主記憶装置１０２の構成の一例を示す図である。本実施形態では、実施形態１〜実施形態３と同一の構成については同一の符号を用いてその説明を適宜省略する。
エラー処理のような例外処理は、通常、情報処理装置１００上で実行されないことが多い。よって、実施形態１から実施形態３までで述べた擬似ライブラリには、上記例外処理内で呼び出されるライブラリ関数を含んでいないことが考えられる。
【００３８】
以上のような場合については、図１９に示すように、呼び出し履歴に記載されていないライブラリ関数（関数Func_A-Y）も擬似ライブラリＡ'２１４の後方に位置するよう構成する。なお、本実施形態では、関数Func_A-Yに関する情報については、呼び出し履歴１８００には記録しない。
以上の構成によれば、仮に関数Func_A-Yが呼び出された場合、必要に応じてライブラリの関数Func_A-Yは、主記憶装置１０２に読み込まれ実行されるようになる。ここで、関数Func_A-Yは、例外的に実行される関数であるので、一度実行された後はすぐに関数Func_A-Yが占有する主記憶装置１０２のページ部分を開放してもよいし、一定時間が経過した後に開放処理を行ってもよい。
【００３９】
また、関数Func_A-Yの呼び出し履歴は、例外的な呼び出しであるのでリンク・ロード履歴記録部５０２が記録しなくてもよい。また、一旦記録してから一定時間呼ばれなかったらリンク・ロード履歴記録部５０２が呼び出し履歴から削除してもよい。
上述した構成によれば、例外的に実行される部分でライブラリ関数が呼び出されるような場合であっても、例えば主記憶装置の使用効率を高めることができる。
なお、本発明はコンピュータ内のプログラムによっても実現できることは当然である。
【００４０】
上述した構成によれば、プログラムが使用する主記憶装置の容量を削減することができる。また、上述した実施形態によれば、前回に使用したライブラリ関数の状況に応じて構成された代替ライブラリに使用を切り替えることで、プログラムの主記憶装置の使用を効率化することができる。
すなわち、情報処理装置上で共有ライブラリを動的リンクして実行されるプログラムの主記憶装置の使用効率を高めることができ、主記憶装置の使用資源の削減が可能となる。
【００４１】
＜その他の実施形態＞
本実施形態は、上述した構成に限られるものではない。例えば、擬似ライブラリ構成部７００は、必要に応じて、記録された共有ライブラリの呼び出し関係から元の共有ライブラリを再構成してもよい。
また、本発明は、以下の処理を実行することによっても実現される。即ち、上述した実施形態の機能を実現するソフトウェア（プログラム）を、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給し、そのシステム或いは装置のコンピュータ（又はＣＰＵやＭＰＵ等）がプログラムを読み出して実行する処理である。
【００４２】
上述した実施形態の構成によれば、情報処理装置上で共有ライブラリを動的にリンクして実行されるプログラムにおける主記憶装置の使用をより効率的に行うことができる。
【００４３】
以上、本発明の好ましい実施形態について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【符号の説明】
【００４４】
１０２  主記憶装置、１０３  二次記憶装置、２１１  プログラムＡ、２１２a  ライブラリＡ、２１４  疑似ライブラリＡ'、２３０  主記憶の管理単位ページ
【図１】
2012141887.tif 000003
【図２】
2012141887.tif 000004
【図３】
2012141887.tif 000005
【図４】
2012141887.tif 000006
【図５】
2012141887.tif 000007
【図６】
2012141887.tif 000008
【図７】
2012141887.tif 000009
【図８】
2012141887.tif 000010
【図９】
2012141887.tif 000011
【図１０】
2012141887.tif 000012
【図１１】
2012141887.tif 000013
【図１２】
2012141887.tif 000014
【図１３】
2012141887.tif 000015
【図１４】
2012141887.tif 000016
【図１５】
2012141887.tif 000017
【図１６】
2012141887.tif 000018
【図１７】
2012141887.tif 000019
【図１８】
2012141887.tif 000020
【図１９】
2012141887.tif 000021
【図２０】
2012141887.tif 000022