(57)【要約】【課題】  プログラムコンパイラ、プログラム設置装置、及びプログラム設置方法を提供する。【解決手段】  本発明の一態様によるプログラム設置装置は、スナップショットイメージを用いてプログラムを即時実行可能な形態で設置することができる。スナップショットイメージは、プログラムの部分実行結果を保存している。スナップショットイメージが生成される地点であるスナップショットポイントは、プログラムに対するシステム実行環境の依存性を分析して定められる。プログラム設置装置は、システム実行環境に影響を受けない部分をあらかじめ実行してスナップショットイメージを作り、このスナップショットイメージに基づいて短い初期起動時間でプログラムを実行することができる。【選択図】      図１
2011198363.tif 000002
【特許請求の範囲】
【請求項１】
プログラムの実行順序上の所定地点をスナップショットポイントとして設定するスナップショットポイント設定部と、
前記スナップショットポイントまで前記プログラムを実行する第１実行部と、
前記スナップショットポイントまでの前記プログラムの実行結果を保存するスナップショットイメージ保存部と、
を含むことを特徴とするプログラム設置及び実行装置。
【請求項２】
前記スナップショットポイントまでの実行結果をローディングするスナップショットイメージローディング部と、
前記ローディングされたスナップショットイメージに基づいて、前記プログラムのスナップショットポイント以後の残りの部分を実行する第２実行部と、
を含むことを特徴とする請求項１に記載のプログラム設置及び実行装置。
【請求項３】
前記スナップショットポイント設定部は、
前記プログラムの実行順序のうち、システム実行環境に実質的に影響を受ける部分を検出し、該検出された部分に基づいて、前記スナップショットポイントの設定位置を決定することを特徴とする請求項１に記載のプログラム設置及び実行装置。
【請求項４】
前記システム実行環境に実質的に影響を受ける部分は、
前記プログラムの初期化関数のうち、システムコールを使う初期化関数の実行順序に対応することを特徴とする請求項３に記載のプログラム設置及び実行装置。
【請求項５】
前記初期化関数は、
前記プログラムのメイン関数の実行前に実行される全域クラス生成子または共有ライブラリーの初期関数を含むことを特徴とする請求項４に記載のプログラム設置及び実行装置。
【請求項６】
前記スナップショットポイント設定部は、
前記プログラムの実行順序上で、システムコールの使用如何によって、システム実行環境に実質的に影響を受ける部分を検出する依存性分析部と、
前記システム実行環境に実質的に影響を受ける部分の実行順序を調節する再配列部と、
を含むことを特徴とする請求項１に記載のプログラム設置及び実行装置。
【請求項７】
前記プログラムは、システム実行環境に実質的に影響を受けない独立関数と前記システム実行環境に実質的に影響を受ける従属関数とを含み、
前記再配列部は、前記独立関数が、前記従属関数より相対的に先に実行または先に呼び出されるように、前記独立関数及び前記従属関数の実行順序を調節することを特徴とする請求項６に記載のプログラム設置及び実行装置。
【請求項８】
前記プログラムは、
設置されたプログラムまたは設置後の更新されたプログラムを含むことを特徴とする請求項１に記載のプログラム設置及び実行装置。
【請求項９】
前記実行結果は、
前記プログラムが、前記スナップショットポイントまで実行された時までのレジストリ情報及びメモリ情報を含むことを特徴とする請求項１に記載のプログラム設置及び実行装置。
【請求項１０】
前記実行結果は、
不揮発性メモリに保存されることを特徴とする請求項１に記載のプログラム設置及び実行装置。
【請求項１１】
プログラムの実行順序上で、システムコールの使用如何によって、システム実行環境に実質的に影響を受ける部分を検出する依存性分析部と、
前記システム実行環境に実質的に影響を受ける部分の実行順序を調節する再配列部と、を含むことを特徴とするプログラムコンパイラ。
【請求項１２】
プログラムの実行順序上の所定部分をスナップショットポイントとして設定する段階と、
前記スナップショットポイントまで前記プログラムを実行する段階と、
前記スナップショットポイントまでの前記プログラムの実行結果を保存する段階と、
を含むことを特徴とするプログラム設置及び実行方法。
【請求項１３】
前記保存された実行結果をローディングする段階と、
前記ローディングされた実行結果に基づいて、前記プログラムのスナップショットポイント以後の残りの部分を実行する段階と、
をさらに含むことを特徴とする請求項１２に記載のプログラム設置及び実行方法。
【請求項１４】
前記スナップショットポイントを設定する段階は、
前記プログラムの実行順序のうち、システム実行環境に実質的に影響を受ける部分を検出し、該検出された部分に基づいて、前記スナップショットポイントの位置を決定する過程を含むことを特徴とする請求項１２に記載のプログラム設置及び実行方法。
【請求項１５】
前記システム実行環境に実質的に影響を受ける部分は、
前記プログラムの初期化関数のうち、システムコールを使う初期化関数の実行順序に対応することを特徴とする請求項１４に記載のプログラム設置及び実行方法。
【請求項１６】
前記初期化関数は、
前記プログラムのメイン関数の実行前に実行される全域クラス生成子または共有ライブラリーの初期関数を含むことを特徴とする請求項１５に記載のプログラム設置及び実行方法。
【請求項１７】
前記プログラムは、システム実行環境に実質的に影響を受けない独立関数と前記システム実行環境に実質的に影響を受ける従属関数とを含み、
前記スナップショットポイントを設定する段階は、前記独立関数が、前記従属関数より相対的に先に実行または先に呼び出されるように、前記独立関数及び前記従属関数の実行順序を調節した後、前記スナップショットポイントの設定位置を決定する過程を含むことを特徴とする請求項１２に記載のプログラム設置及び実行方法。
【請求項１８】
前記プログラムは、
設置されたプログラムまたは設置後の更新されたプログラムを含むことを特徴とする請求項１２に記載のプログラム設置及び実行方法。
【請求項１９】
前記実行結果は、
前記プログラムが、前記スナップショットポイントまで実行された時までのレジストリ情報及びメモリ情報を含むことを特徴とする請求項１２に記載のプログラム設置及び実行方法。
【請求項２０】
前記実行結果は、
不揮発性メモリに保存されることを特徴とする請求項１２に記載のプログラム設置及び実行方法。
【請求項２１】
前記プログラムは、
スナップショットイメージを生成するために、前記プログラムの設置過程で実行されることを特徴とする請求項１２に記載のプログラム設置及び実行方法。
【請求項２２】
前記プログラムの実行結果は、
前記プログラムの更新によって更新及び再生成されることを特徴とする請求項１２に記載のプログラム設置及び実行方法。
【請求項２３】
前記プログラムの実行結果は、
前記プログラムの更新によって無効化されることを特徴とする請求項１２に記載のプログラム設置及び実行方法。
【請求項２４】
前記各段階が実行される時点に対応するスナップショットタイミングは、前記プログラムのシステムコールに基づいて決定されることを特徴とする請求項１２に記載のプログラム設置及び実行方法。
【請求項２５】
ソース／バイナリ静的解析ツールを用いてシステムコールの発生位置を確認することを特徴とする請求項１２に記載のプログラム設置及び実行方法。
【請求項２６】
運用体制のシステムコールインターフェースを通じてシステムコールの発生を確認することを特徴とする請求項１２に記載のプログラム設置及び実行方法。
【請求項２７】
初期化関数は、スナップショットタイミングを遅延させるために再位置されることを特徴とする請求項１２に記載のプログラム設置及び実行方法。
【請求項２８】
初期化関数を再位置するために静的解析ツールを用いて自動化ツールが新たに形成されることを特徴とする請求項１２に記載のプログラム設置及び実行方法。
【請求項２９】
初期化関数を再位置させるためにプログラムバイナリが訂正されることを特徴とする請求項１２に記載のプログラム設置及び実行方法。
【請求項３０】
スナップショットイメージが無効化されることによって対応するスナップショットイメージが再生成されることを特徴とする請求項１２に記載のプログラム設置及び実行方法。
【請求項３１】
プログラムの実行順序上の所定部分をスナップショットポイントとして設定する段階と、
前記スナップショットポイントまで前記プログラムを実行する段階と、
前記スナップショットポイントまでの前記プログラムの実行結果を保存する段階と、
を含むことを特徴とするプログラム設置及び実行方法が記録されたコンピュータで判読可能な記録媒体。
【請求項３２】
前記保存された実行結果をローディングする段階と、
前記ローディングされた実行結果に基づいて、前記プログラムのスナップショットポイント以後の残りの部分を実行する段階と、
をさらに含むことを特徴とする請求項３１に記載の記録媒体。
【請求項３３】
前記スナップショットポイントを設定する段階は、
前記プログラムの実行順序のうち、システム実行環境に実質的に影響を受ける部分を検出し、該検出された部分に基づいて、前記スナップショットポイントの位置を決定する過程を含むことを特徴とする請求項３１に記載の記録媒体。
【請求項３４】
前記システム実行環境に実質的に影響を受ける部分は、
前記プログラムの初期化関数のうち、システムコールを使う初期化関数の実行順序に対応することを特徴とする請求項３１に記載の記録媒体。
【請求項３５】
前記初期化関数は、
前記プログラムのメイン関数の実行前に実行される全域クラス生成子または共有ライブラリーの初期関数を含むことを特徴とする請求項３１に記載の記録媒体。
【請求項３６】
前記プログラムは、システム実行環境に実質的に影響を受けない独立関数と前記システム実行環境に実質的に影響を受ける従属関数とを含み、
前記スナップショットポイントを設定する段階は、前記独立関数が、前記従属関数より相対的に先に実行または先に呼び出されるように、前記独立関数及び前記従属関数の実行順序を調節した後、前記スナップショットポイントの設定位置を決定する過程を含むことを特徴とする請求項３１に記載の記録媒体。
【請求項３７】
前記プログラムは、
設置されたプログラムまたは設置後の更新されたプログラムを含むことを特徴とする請求項３１に記載の記録媒体。
【請求項３８】
前記実行結果は、
前記プログラムが、前記スナップショットポイントまで実行された時までのレジストリ情報及びメモリ情報を含むことを特徴とする請求項３１に記載の記録媒体。
【請求項３９】
プログラムの実行順序上の特定の位置をスナップショットポイントとして設定するスナップショットポイント設定部と、
前記スナップショットポイントまで前記プログラムを実行する第１実行部と、
前記プログラムのスナップショットポイント以後の残りの部分を実行する第２実行部と、を含むことを特徴とするプログラム実行装置。
【請求項４０】
前記プログラムは、
システム実行環境に独立した独立関数と、
前記システム実行環境に依存的な従属関数と、を含み、
前記プログラム実行装置は、前記独立関数が、前記従属関数より先に実行または呼び出されるように、前記独立関数及び前記従属関数の実行順序を調節する再配置部をさらに含むことを特徴とする請求項３９に記載のプログラム実行装置。
【請求項４１】
前記プログラムは、
設置されたプログラムまたは更新されたプログラムを含むことを特徴とする請求項３９に記載のプログラム実行装置。
【請求項４２】
前記プログラムの実行結果は、前記スナップショットポイントまで実行されたプログラムのレジストリ情報及びメモリ情報のうち少なくとも一つを含むことを特徴とする請求項３９に記載のプログラム実行装置。
【請求項４３】
前記プログラムの実行結果は、不揮発性メモリに保存されることを特徴とする請求項３９に記載のプログラム実行装置。
【請求項４４】
プログラムの実行順序上の特定の位置をスナップショットポイントとして設定する段階と、
前記スナップショットポイントまで前記プログラムを実行する段階と、
前記プログラムのスナップショットポイント以後の残りの部分を実行する段階と、
を含むことを特徴とするプログラム実行方法。
【請求項４５】
前記プログラムは、
システム実行環境に独立した独立関数と、
前記システム実行環境に依存的な従属関数と、を含み、
前記プログラム実行装置は、前記独立関数が、前記従属関数より先に実行または呼び出されるように、前記独立関数及び前記従属関数の実行順序を調節する段階をさらに含むことを特徴とする請求項４４に記載のプログラム実行方法。
【請求項４６】
前記プログラムは、
設置されたプログラムまたは更新されたプログラムを含むことを特徴とする請求項４４に記載のプログラム実行方法。
【請求項４７】
前記プログラムの実行結果は、前記スナップショットポイントまで実行されたプログラムのレジストリ情報及びメモリ情報のうち少なくとも一つを含むことを特徴とする請求項４４に記載のプログラム実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、実行速度を高めるためのプログラム設置技術に関する。
【背景技術】
【０００２】
プログラムが実行されるためには、所定のコストがかかる。プログラム実行のためのコストには、プログラムのハードディスクドライブ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ：以下、ＨＤＤ）からメモリ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ、ＲＡＭ）へのローディングコスト、関連ライブラリーのローディングコスト、プログラムと関連した共有ライブラリーの再配置コスト、プログラムのメイン関数の進入前の初期化関数の実行コストなどがある。
【０００３】
最近、プログラムが次第に複雑になって知能化されながら、このようなコストも増加し、プログラム実行に必要なコストを減らすための研究に関心が高まりつつある。
【０００４】
プログラムの実行コストを減らすための方法としては、入出力性能に優れた保存装置を利用する方法が代表的である。例えば、ＨＤＤより入出力性能に優れたＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）を用いてプログラムのメモリへのローディング速度を高めることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は、プログラムコンパイラ、プログラム設置装置、及びプログラム設置方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一態様による装置は、プログラムの実行順序上の所定地点をスナップショットポイントとして設定するスナップショットポイント設定部と、前記スナップショットポイントまで前記プログラムを実行する第１実行部と、前記スナップショットポイントまでの前記プログラムの実行結果を保存するスナップショットイメージ保存部と、を含みうる。
【０００７】
本発明の一態様によるコンパイラは、プログラムの実行順序上で、システムコールの使用如何によって、システム実行環境に実質的に影響を受ける部分を検出する依存性分析部と、前記システム実行環境に実質的に影響を受ける部分の実行順序を調節する再配列部と、を含みうる。
【０００８】
本発明の一態様による方法は、プログラムの実行順序上の所定部分をスナップショットポイントとして設定する段階と、前記スナップショットポイントまで前記プログラムを実行する段階と、前記スナップショットポイントまでの前記プログラムの実行結果を保存する段階と、を含みうる。
【０００９】
本発明の一態様によるコンピュータで判読可能な記録媒体は、プログラムの実行順序上の所定部分をスナップショットポイントとして設定する段階と、前記スナップショットポイントまで前記プログラムを実行する段階と、前記スナップショットポイントまでの前記プログラムの実行結果を保存する段階と、を含むプログラム設置及び実行方法が記録されうる。
【００１０】
本発明の他の態様による装置は、プログラムの実行順序上の特定の位置をスナップショットポイントとして設定するスナップショットポイント設定部と、前記スナップショットポイントまで前記プログラムを実行する第１実行部と、前記プログラムのスナップショットポイント以後の残りの部分を実行する第２実行部と、を含みうる。
【００１１】
本発明の他の態様による方法は、プログラムの実行順序上の特定の位置をスナップショットポイントとして設定する段階と、前記スナップショットポイントまで前記プログラムを実行する段階と、前記プログラムのスナップショットポイント以後の残りの部分を実行する段階と、を含みうる。
【図面の簡単な説明】
【００１２】
【図１】本発明の一実施形態によるプログラム設置及び実行装置を示す図である。
【図２】本発明の一実施形態によるスナップショットポイント設定部を示す図である。
【図３】本発明の一実施形態によるプログラム及びプログラムの実行順序を示す図である。
【図４Ａ】本発明の他の実施形態によるプログラム及びプログラムの実行順序を示す図である。
【図４Ｂ】本発明の他の実施形態によるプログラム及びプログラムの実行順序を示す図である。
【図５】本発明の一実施形態によるプログラム設置方法を示す図である。
【図６】本発明の一実施形態によるプログラム実行方法を示す図である。
【図７】本発明の一実施形態によるコンピューティング装置を示す図である。
【図８】本発明の一実施形態によるプログラムコンパイラを示す図である。
【発明を実施するための形態】
【００１３】
以下、添付した図面を参照して、本発明の実施のための具体的な例を詳しく説明する。
【００１４】
図１は、本発明の一実施形態によるプログラム設置及び実行装置を示す図である。図１を参照すると、プログラム設置及び実行装置１００は、スナップショットポイント設定部１０１、実行部１０２、スナップショットイメージ保存部１０３、及びローディング部１０４を含む。
【００１５】
スナップショットポイント設定部１０１は、プログラムの実行順序のうち、特定の部分をスナップショットポイント（ｓｎａｐｓｈｏｔ  ｐｏｉｎｔ）として設定する。
【００１６】
スナップショットポイントとは、プログラムの部分実行地点に対応する。例えば、実行部１０２が、一連の関数（または、コード）で構成されたプログラムを実行する時、実行部１０２は、スナップショットポイント設定部１０１の制御命令によって設定されたスナップショットポイントまでにプログラムを部分的に実行させることができる。
【００１７】
スナップショットポイント設定部１０１は、プログラムの実行順序でシステム実行環境に依存的な部分を検出し、該検出されたシステム実行環境に依存的な部分に基づいてスナップショットポイントの設定位置を決定する。
【００１８】
システム実行環境とは、運用体制及びプログラムの初期入力値などになり、システム実行環境に依存的な部分は、このような初期入力値などに影響を受ける関数またはコードになりうる。例えば、あるプログラムが、Ａ関数、Ｂ関数、Ｃ関数、及びＤ関数の順序で実行され、Ｃ関数が、システム実行環境に依存的な関数であると仮定すれば、スナップショットポイント設定部１０１は、Ｂ関数の実行完了地点またはＣ関数の実行開始地点をスナップショットポイントの設定位置として決定することができる。
【００１９】
スナップショットポイント設定部１０１は、プログラムを構成する関数のシステムコールの使用如何によって、システム実行環境に依存的な部分を検出することができる。例えば、スナップショットポイント設定部１０１は、プログラムを構成する関数を分析してシステムコールを使う関数を検出し、システムコールを使う関数が実行される部分をシステム実行環境に依存性がある部分として検出することができる。
【００２０】
第１実行部１１２は、スナップショットポイント設定部１０１によって設定されたスナップショットポイントまでプログラムの一部分を実行する。例えば、あるプログラムが、Ａ関数、Ｂ関数、Ｃ関数、及びＤ関数の順序で実行され、Ｂ関数の実行完了地点またはＣ関数の実行開始地点がスナップショットポイントとして設定された場合、第１実行部１１２は、全体プログラムでＡ関数及びＢ関数のみ実行することができる。
【００２１】
スナップショットイメージ保存部１０３は、第１実行部１１２の部分実行結果であるスナップショットイメージを生成し、該生成されたスナップショットイメージを保存する。スナップショットイメージは、プログラムがスナップショットポイントまで実行された時の結果値、レジストリ情報、及びメモリ情報などを含みうる。生成されたスナップショットイメージは、不揮発性メモリに保存することができる。不揮発性メモリとしては、ＰＲＡＭ（Ｐｈａｓｅ−ｃｈａｎｇｅ  Ｍｅｍｏｒｙ）、ＭＲＡＭ（Ｍａｇｎｅｔｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、ＦＲＡＭ（Ｆｅｒｒｏｅｌｅｃｔｒｉｃ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などが使われる。
【００２２】
ローディング部１０４は、スナップショットイメージ保存部１０３でスナップショットイメージをローディングする。ローディング部１０４は、ユーザの実行要請または実行命令がある場合に、スナップショットイメージをローディングすることができる。
【００２３】
第２実行部１２２は、ローディング部１０４がローディングしたスナップショットイメージに基づいてプログラムの残りの部分、すなわち、スナップショットポイント以後の部分を実行する。例えば、Ａ関数、Ｂ関数、Ｃ関数、及びＤ関数の順序で実行され、Ｂ関数の実行完了地点またはＣ関数の実行開始地点がスナップショットポイントとして設定された場合、プログラムが設置されるやいなや第１実行部１１２は、全体プログラムでＡ関数及びＢ関数のみ実行し、第２実行部１２２は、設置以後のユーザの実行命令によって残りのＣ関数及びＤ関数を実行することができる。
【００２４】
このように、プログラム設置及び実行装置１００は、あるプログラムを即時実行される形態で設置することが可能である。すなわち、スナップショットポイントは、システム実行環境を考慮してその位置が決定されるために、プログラムが設置されるやいなやスナップショットポイントまであらかじめ実行させ、以後の実行要請に対しては、スナップショットイメージに基づいてスナップショットポイント以後を実行することができる。したがって、設置されたプログラムまたは更新によって再設置されたプログラムの初期起動時間を減らすことができる。
【００２５】
図２は、本発明の一実施形態によるスナップショットポイント設定部を示す図である。図２を参照すると、スナップショットポイント設定部１０１は、依存性分析部２０１、再配列部２０２及び位置決定部２０３を含む。
【００２６】
依存性分析部２０１は、プログラムを構成する関数またはコードに対するシステム実行環境の依存性を分析する。
【００２７】
本実施形態で、システム実行環境に依存性がある関数またはコードを従属関数であると指称し、システム実行環境に依存性がない関数またはコードを独立関数であると指称する。あるプログラムが、メイン関数とメイン関数の進入前の初期化関数で構成された場合、初期化関数は、システム実行環境の依存性によって独立関数と従属関数とに区分することができる。初期化関数は、メイン関数の実行前に実行または呼び出される全域クラス生成子または共有ライブラリーの初期関数などになりうる。ある初期化関数が、独立関数であるか、または従属関数であるかは、その初期化関数が、システムコールを使用するか否かによって決定されうる。例えば、システムメモリ量によって相異なる経路に分岐される関数の場合、システム実行環境に影響を受ける従属関数になりうる。
【００２８】
依存性分析部２０１は、システムコールの使用如何によって、プログラムの実行順序でシステム実行環境に依存的な部分を検出することができる。
【００２９】
再配列部２０２は、依存性分析部２０１が分析した初期化関数に対するシステム実行環境の依存性に基づいてシステム実行環境に影響を受ける初期化関数が最大限遅く実行されるように、初期化関数の実行順序を変更する。
【００３０】
例えば、メイン関数の進入前に、Ａ関数、Ｂ関数、Ｃ関数、及びＤ関数などの初期化関数が存在し、そのうち、Ｂ関数が、システム実行環境に影響を受ける従属関数であると仮定すれば、再配列部２０２は、Ｂ関数の実行順序または呼び出し順序をＡ関数、Ｃ関数、及びＤ関数の実行順序または呼び出し順序より裏側に位置させることができる。
【００３１】
位置決定部２０３は、依存性分析部２０１が分析した初期化関数に対するシステム実行環境の依存性及び再配列部２０２の実行順序の調節に基づいてスナップショットポイントの設定位置を決定する。
【００３２】
位置決定部２０３は、従属関数の実行開始地点をスナップショットポイントの設定位置として決定することができる。例えば、再配列部２０２によって初期化関数の実行順序が、Ａ関数、Ｃ関数、Ｄ関数、及びＢ関数の順序で調節された場合、位置決定部２０３は、Ｄ関数の実行完了地点またはＢ関数の実行開始地点をスナップショットポイントの設定位置として決定することができる。
【００３３】
図３は、本発明の一実施形態によるプログラム及びプログラムの実行順序を示す図である。図３を参照すると、プログラムは、初期化関数３０１とメイン関数３０２とを含む。
【００３４】
メイン関数３０２は、プログラムの主要機能を実行する部分であり、初期化関数３０１は、メイン関数３０２の実行前に実行または呼び出される全域クラス生成子または共有ライブラリーの初期関数になりうる。
【００３５】
プログラムが設置されれば、スナップショットポイント設定部１０１は、プログラムの実行順序でシステム実行環境に影響を受ける部分を検出する。例えば、Ａ関数、Ｂ関数、Ｃ関数、及びＤ関数からなる初期化関数のシステムコールの有無を分析した結果、Ｃ関数が、システムコールを使う場合、スナップショットポイント設定部１０１は、Ｃ関数をシステム実行環境に影響を受ける従属関数として検出することができる。
【００３６】
システム実行環境に影響を受ける部分が検出されれば、スナップショットポイント設定部１０１は、システム実行環境に影響を受ける部分に基づいてプログラムの部分実行地点であるスナップショットポイント３０３を設定する。例えば、スナップショットポイント設定部１０１は、従属関数として検出されたＣ関数の実行開始地点をスナップショットポイント３０３として設定することができる。
【００３７】
スナップショットポイント３０３が設定されれば、第１実行部１１２は、スナップショットポイント３０３までプログラムを実行する。例えば、第１実行部１１２は、初期化関数３０１のうち、Ａ関数及びＢ関数を実行することができる。
【００３８】
スナップショットポイント３０３までプログラムが部分的に実行されれば、プログラムの部分実行結果であるスナップショットイメージが生成及び保存される。例えば、スナップショットイメージ保存部１０３は、Ａ関数及びＢ関数が実行された時の結果値、レジストリ情報及びメモリ情報をスナップショットイメージとして生成して不揮発性メモリに保存することができる。
【００３９】
以後、ユーザのプログラム実行要請または実行命令がある場合、ローディング部１０４は、保存されたスナップショットイメージをローディングし、第２実行部１２２がローディングされたスナップショットイメージに基づいて、Ｃ関数、Ｄ関数、及びメイン関数を実行することが可能である。
【００４０】
図４Ａ及び図４Ｂは、本発明の他の実施形態によるプログラム及びプログラムの実行順序を示す図である。
【００４１】
図４Ａを参照すると、プログラムは、初期化関数３０１とメイン関数３０２とを含む。初期化関数３０１及びメイン関数３０２は、図３から説明したものと同じである。図４Ａで、プログラムが設置されれば、依存性分析部２０１は、プログラムの実行順序でシステム実行環境に影響を受ける部分を検出する。例えば、Ａ関数、Ｂ関数、Ｃ関数、及びＤ関数からなる初期化関数のシステムコールの有無を分析した結果、Ｃ関数がシステムコールを使う場合、依存性分析部２０１は、Ｃ関数をシステム実行環境に影響を受ける従属関数として検出することができる。
【００４２】
従属関数であるＣ関数が検出されれば、再配列部２０２は、初期化関数３０１の実行順序を調節する。例えば、図４Ｂのように、再配列部２０２は、従属関数として検出されたＣ関数がＤ関数より遅く実行されるように実行順序を変更する。
【００４３】
図４Ｂで、初期化関数３０１の実行順序が調節されれば、位置決定部２０３は、依存性分析部２０１が検出した従属関数を用いてスナップショットポイント３０３の設定位置を決定する。例えば、位置決定部２０３は、従属関数であるＣ関数の実行開始地点をスナップショットポイント３０３として設定することができる。
【００４４】
このように、プログラム設置及び実行装置１００は、あるプログラムをシステム実行環境に影響を受けない部分をあらかじめ実行させて設置することができ、以後の実行要請に対しては、あらかじめ実行させた部分を省略し、その以後の部分から即時実行が可能であるので、プログラムの初期起動時間を減らすことができる。また、システム実行環境に依存性がある部分が最大限遅く実行されるように初期化関数の実行順序を調節するために、プログラムの初期起動時間をさらに短縮させることができる。
【００４５】
図５は、本発明の一実施形態によるプログラム設置方法を示す図である。図５を参照すると、プログラム設置方法５００は、あるプログラムが新たに設置される場合、または設置されたプログラムが更新によって再設置される場合、全てに適用可能である。
【００４６】
図５で、プログラム設置方法５００は、プログラム設置命令または更新命令によってプログラムが設置されれば開始される。理解の便宜上、プログラムの各種コードがシステムに保存される一般的な設置過程を第１設置過程であると名付ける。すなわち、プログラム設置方法５００は、第１設置過程が完了されれば開始されうる。
【００４７】
第１設置過程が完了されれば、本実施形態による第２設置過程が開始されるが、第２設置過程によってプログラム設置方法５００は、スナップショットポイントを設定する（５０１）。スナップショットポイントは、第１設置過程を通じて設置されたプログラムの部分実行地点になりうる。例えば、スナップショットポイント設定部１０１が、初期化関数のシステムコールの使用如何を分析してシステム実行環境に依存的な部分をスナップショットポイントとして設定することができる。
【００４８】
そして、プログラム設置方法５００は、設定されたスナップショットポイントまでプログラムを実行する（５０２）。例えば、第１実行部１１２が、第１設置過程を通じて設置されたプログラムをシステム実行環境に影響を受けない部分まであらかじめ実行させることが可能である。
【００４９】
そして、プログラム設置方法５００は、スナップショットポイントまでのプログラム実行結果をスナップショットイメージとして生成及び保存する（５０３）。例えば、スナップショットイメージ保存部１０３が、第１実行部１１２の実行結果値、レジストリ情報及びメモリ情報を不揮発性メモリに保存することが可能である。
【００５０】
スナップショットポイントは、システム実行環境に依存的な部分に基づいて設定されるので、第２設置過程を通じてシステム実行環境に影響を受けない部分があらかじめ実行され、即時実行可能な形態でプログラムが設置されることもある。
【００５１】
図６は、本発明の一実施形態によるプログラム実行方法を示す図である。図６を参照すると、プログラム実行方法６００は、図５のような過程を通じてプログラムが設置された以後に、ユーザの実行要請または実行命令がある場合に開始されうる。また、プログラム実行方法６００は、任意のまたは定められた時間にスナップショットイメージを生成するためにプログラムのインストール段階で実行することもある。
【００５２】
図６で、プログラム実行方法６００は、ユーザの実行要請または実行命令によってスナップショットイメージをローディングする（６０１）。例えば、ローディング部１０４が、スナップショットイメージ保存部１０３でスナップショットイメージをローディングすることができる。
【００５３】
そして、プログラム実行方法６００は、ローディングされたスナップショットイメージが実行可能な形態であるか否かを判断する（６０２）。判断の結果、実行可能な形態であれば、スナップショットイメージを用いてプログラムを実行する（６０３）。例えば、第２実行部１２２が、ローディングされたスナップショットイメージに基づいてスナップショットポイント以後の残りのプログラム部分を実行することができる。判断の結果、実行可能な形態ではないならば、スナップショットイメージを再生成する（６０４）。スナップショットイメージを再生成する過程は、図５の過程による。
【００５４】
生成されたスナップショットイメージは、プログラムが更新されることによって更新及び／または再生成されうる。また、生成されたスナップショットイメージは、プログラムが更新されることによって無効化され、再び生成されることもある。スナップショットタイミングは、プログラムのシステムコールに基づいて決定されうる。
【００５５】
プログラマーは、ソースコードを訂正することができる。プログラマーは、システムコールの発生時間に関する情報を提供するためにヒント（ｈｉｎｔ）を提供することもできる。システムコールの発生位置は、ソース／バイナリ静的解析ツールを通じて分かる。システムコールの発生は、運用体制のシステムコールインターフェースを通じて確認されうる。初期関数は、スナップショットタイミングを遅延させるために再配置されうる。プログラマーは、初期関数が再配置されるようにソースを訂正することができる。初期関数の再配置のために、静的解析ツールを通じて自動化ツールが新たに形成されることもある。初期関数の再配置のためにプログラムバイナリが訂正されることもある。
【００５６】
ソース（例えば、ソースコード）静的解析ツールは、応用プログラムのソースコードを有しているという仮定下で、プログラムソースをパージングして、システムコール（ｓｙｓｔｅｍ  ｃａｌｌ）を呼び出す関数または間接的にシステムコールを呼び出すライブラリー関数（ｌｉｂｒａｒｙ  ｆｕｎｃｔｉｏｎ）を探す方法を言う。バイナリ静的解析ツールは、応用プログラムの実行ファイルフォーマット（ｅｘ、ＥＬＦ、ＣＯＦＦ）のコードセクション（ｃｏｄｅ  ｓｅｃｔｉｏｎ）を探してアセンブリー言語（ａｓｓｅｍｂｌｙ  ｌａｎｇｕａｇｅ）を分析して、システムコールを呼び出す関数または間接的にシステムコールを呼び出すライブラリー関数を探す方法を言う。
【００５７】
自動化ツールは、次のように動作することができる。
【００５８】
１．関数の呼び出し時ごとに特定の関数を呼び出すモードでソースコードを再コンパイルする（ｅｘ、−ｆｉｎｓｔｒｕｍｅｎｔ−ｆｕｎｃｔｉｏｎ  ｉｎ  ＧＣＣ）。
【００５９】
２．プログラムを実行させ、１番から言及した特定の関数は、呼び出される度に如何なる関数が呼び出されたのかを記録する。
【００６０】
３．プログラムの起動（ｓｔａｒｔｕｐ）が完了されれば終了する。
【００６１】
４．２番から得た関数をソースコードに基づいて分析して、順序が変わっても実行に問題にならなければ（ｅｘ、全域の親子関係ではないクラスの生成子関数）、当該関数のリスト（ｌｉｓｔ）をリンカー（ｌｉｎｋｅｒ）に引き渡す。
【００６２】
５．リンカーは、当該関数の呼び出し順序を裏側に来るように再配置する。
【００６３】
開発者は、自身が使う関数がシステムの状態（ｓｔａｔｅ）によって行動が変わる関数であるか否かが分かる。したがって、当該関数のソースコード上に、そのような関数が呼び出される直前システムに、その事実を知らせる特定の関数を挿入するか、またはそのような関数をプログラマーが、ソースコード上に特定のアトリビュート（ａｔｔｒｉｂｕｔｅ）で宣言してコンパイラに知らせ、コンパイラは、そのような関数をコンパイルする時、システムにその事実を知らせる特定の関数を挿入することが可能である。
【００６４】
図７は、本発明の一実施形態によるコンピューティング装置を示す図である。図７を参照すると、コンピューティング装置７００は、中央処理部７０１、入出力部７０２、及び保存部７０３を含む。
【００６５】
本実施形態による中央処理部７０１は、プログラムを設置する時、プログラムの各種コードを保存部７０３に予備的に設置した後、予備的に設置したプログラムを部分的に実行してスナップショットイメージを生成し、該生成されたスナップショットイメージを保存してプログラムを最終的に設置する。
【００６６】
保存部７０３は、メインメモリとハードディスクとに区分されることもある。本実施形態によって少なくとも保存部７０３のメインメモリは、不揮発性メモリとして形成される。したがって、スナップショットイメージが、保存部７０３に保存された後、保存部７０３への電源供給が遮断されても、スナップショットイメージは維持されうる。
【００６７】
また、中央処理部７０１は、保存部７０３に保存されたスナップショットイメージを用いてプログラムを実行し、その実行結果を入出力部７０２を通じてユーザに提供する。
【００６８】
図８は、本発明の一実施形態によるコンパイラを示す図である。図８を参照すると、コンパイラ８００は、依存性分析部８０１、再配列部８０２、及び実行ファイル生成部８０３を含む。
【００６９】
依存性分析部８０１は、プログラムを構成する関数またはコードに対するシステム実行環境の依存性を分析する。例えば、依存性分析部８０１は、プログラムを構成する関数がシステムコールを使用するか否かによって、システム実行環境に依存的な従属関数を検出することができる。
【００７０】
再配列部８０２は、システム実行環境に依存的な従属関数の実行または呼び出し順序が最大限遅くなるように、関数の実行順序または呼び出し順序を調節する。
【００７１】
実行ファイル生成部８０３は、調節された関数の実行順序または呼び出し順序に基づいてプログラムの実行ファイルを生成する。
【００７２】
一方、本発明の実施形態は、コンピュータで読み取り可能な記録媒体にコンピュータで読み取り可能なコードとして具現することが可能である。コンピュータで読み取り可能な記録媒体は、コンピュータシステムによって読み取れるデータが保存されるあらゆる種類の記録装置を含む。
【００７３】
コンピュータで読み取り可能な記録媒体の例としては、ＲＯＭ、ＲＡＭ、ＣＤ−ＲＯＭ、磁気テープ、フロッピー（登録商標）ディスク、光データ保存装置などがあり、また、キャリアウェーブ（例えば、インターネットを通じる伝送）の形態で具現するものを含む。また、コンピュータで読み取り可能な記録媒体は、ネットワークで連結されたコンピュータシステムに分散されて、分散方式でコンピュータで読み取り可能なコードとして保存されて実行可能である。そして、本発明を具現するための機能的な（ｆｕｎｃｔｉｏｎａｌ）プログラム、コード及びコードセグメントは、本発明が属する技術分野のプログラマーによって容易に推論されうる。
【００７４】
以上、本発明の実施のための具体的な例を説明した。前述した実施形態は、本発明を例示的に説明するためのものであって、本発明の権利範囲が特定の実施形態に限定されない。
【産業上の利用可能性】
【００７５】
本発明は、実行速度を高めるためのプログラム設置技術分野に適用されうる。
【符号の説明】
【００７６】
１００  プログラム設置及び実行装置
１０１  スナップショットポイント設定部
１０２  実行部
１０３  スナップショットイメージ保存部
１０４  ローディング部
１１２  第１実行部
１２２  第２実行部
２０１  依存性分析部
２０２  再配列部
２０３  位置決定部
３０１  初期化関数
３０２  メイン関数
３０３  スナップショットポイント
５００  プログラム設置方法
６００  プログラム実行方法
７００  コンピューティング装置
７０１  中央処理部
７０２  入出力部
７０３  保存部
８００  コンパイラ
【図１】
2011198363.tif 000003
【図２】
2011198363.tif 000004
【図３】
2011198363.tif 000005
【図４Ａ】
2011198363.tif 000006
【図４Ｂ】
2011198363.tif 000007
【図５】
2011198363.tif 000008
【図６】
2011198363.tif 000009
【図７】
2011198363.tif 000010
【図８】
2011198363.tif 000011