(57)【要約】【課題】動作状態が特定の条件を満たす場合にのみ、プログラム内の特定の関数の実行時間を測定することを可能とする関数実行時間計測装置等を提供する。【解決手段】関数実行時間計測装置１は、プロセッサで動作しているプロセスの動作状態を先入れ後出し（スタック）方式で記憶するプロセス別記憶領域１ｂと、予め備えられた主記憶装置に対象プログラムを読み込むプログラムローダ２と、対象プログラム内で計測対象関数の開始点および指定関数の開始点に各々、割り込み処理を発生させる第１および第２のフックを挿入する動的パッチ手段３と、第２のフックによる割り込み処理が発生した場合に、第１のフックによる割り込み処理の発生時刻から計測対象関数の実行終了までの経過時間を測定し、これを出力する実行時間計測手段４とを有する。【選択図】図１
2014222384.tif 000002
【特許請求の範囲】
【請求項１】
計測対象関数および指定関数を含む対象プログラムを実行するプロセッサを有し、前記計測対象関数の実行中に前記指定関数が実行された場合に当該計測対象関数の実行時間を測定する関数実行時間計測装置であって、
前記プロセッサで動作しているプロセスの動作状態を先入れ後出し（スタック）方式で記憶するプロセス別記憶領域と、
予め備えられた主記憶装置に前記対象プログラムを読み込むプログラムローダと、
前記対象プログラム内で前記計測対象関数の開始点および前記指定関数の開始点に、割り込み処理を発生させる第１および第２のフックを各々挿入する動的パッチ手段と、
前記第２のフックによる割り込み処理が発生した場合に、前記第１のフックによる割り込み処理の発生時刻から前記計測対象関数の実行終了までの経過時間を測定し、これを出力する実行時間計測手段と
を有すること、を特徴とする関数実行時間計測装置。
【請求項２】
前記プロセス別記憶領域に、前記指定関数が実行されたか否かを示す二値データを記憶する指定処理実行フラグを併設すると共に、
前記実行時間計測手段が、前記第２のフックによる割り込み処理が発生した場合に前記指定処理実行フラグの値を前記指定関数が実行されたことを示す値に変更する機能を備えること、を特徴とする請求項１に記載の関数実行時間計測装置。
【請求項３】
前記実行時間計測手段が、
前記第１のフックによる割り込み処理が発生した場合に、その時点の時刻を前記プロセス別記憶領域に記憶する機能と、
前記第２のフックによる割り込み処理が発生し、かつ前記指定処理実行フラグの値が前記指定関数が実行されたことを示す値である場合に、前記プロセス別記憶領域に記憶された時刻から前記計測対象関数の実行終了までの経過時間を測定する機能と
を有すること、を特徴とする請求項２に記載の関数実行時間計測装置。
【請求項４】
前記プロセス別記憶領域に、前記計測対象関数の実行終了後に前記プロセッサによる処理を戻す戻りアドレスを記憶する戻りアドレス格納領域と、時刻を記憶する時刻格納領域とを併設すると共に、
前記実行時間計測手段が、
前記第１のフックによる割り込み処理が発生した場合に、前記プロセス別記憶領域に記憶された戻りアドレスを前記戻りアドレス格納領域に記憶し、その時点の時刻を前記時刻格納領域に記憶する機能と、
前記第２のフックによる割り込み処理が発生した場合に、前記プロセス別記憶領域に記憶された戻りアドレスと前記戻りアドレス格納領域に記憶された戻りアドレスが一致するか否かを判断し、一致すれば前記時刻格納領域に記憶された時刻から前記計測対象関数の実行終了までの経過時間を測定する機能と
を有すること、を特徴とする請求項１に記載の関数実行時間計測装置。
【請求項５】
計測対象関数および指定関数を含む対象プログラムを実行するプロセッサと、前記プロセッサで動作しているプロセスを先入れ後出し（スタック）方式で記憶するプロセス別記憶領域とを有し、前記計測対象関数の実行中に前記指定関数が実行された場合に当該計測対象関数の実行時間を測定する関数実行時間計測装置にあって、
予め備えられた主記憶装置にプログラムローダが前記対象プログラムを読み込み、
前記対象プログラム内で前記計測対象関数の開始点および前記指定関数の開始点に、割り込み処理を発生させる第１および第２のフックを動的パッチ手段が各々挿入し、
前記第２のフックによる割り込み処理が発生した場合に、実行時間計測手段が前記第１のフックによる割り込み処理の発生時刻から前記計測対象関数の実行終了までの経過時間を測定し、これを出力すること、を特徴とする関数実行時間計測方法。
【請求項６】
前記プロセス別記憶領域に、前記指定関数が実行されたか否かを示す二値データを記憶する指定処理実行フラグを併設すると共に、
前記第２のフックによる割り込み処理が発生した場合に、前記実行時間計測手段が前記指定処理実行フラグの値を前記指定関数が実行されたことを示す値に変更すること、を特徴とする請求項５に記載の関数実行時間計測方法。
【請求項７】
前記第１のフックによる割り込み処理が発生した場合に、前記実行時間計測手段がその時点の時刻を前記プロセス別記憶領域に記憶し、
前記第２のフックによる割り込み処理が発生し、かつ前記指定処理実行フラグの値が前記指定関数が実行されたことを示す値である場合に、前記実行時間計測手段が前記プロセス別記憶領域に記憶された時刻から前記計測対象関数の実行終了までの経過時間を測定すること、を特徴とする請求項６に記載の関数実行時間計測方法。
【請求項８】
前記プロセス別記憶領域に、前記計測対象関数の実行終了後に前記プロセッサによる処理を戻す戻りアドレスを記憶する戻りアドレス格納領域と、時刻を記憶する時刻格納領域とを併設すると共に、
前記第１のフックによる割り込み処理が発生した場合に、前記実行時間計測手段が前記プロセス別記憶領域に記憶された戻りアドレスを前記戻りアドレス格納領域に記憶し、その時点の時刻を前記時刻格納領域に記憶し、
前記第２のフックによる割り込み処理が発生した場合に、前記実行時間計測手段が前記プロセス別記憶領域に記憶された戻りアドレスと前記戻りアドレス格納領域に記憶された戻りアドレスが一致するか否かを判断し、前記戻りアドレスが一致すれば前記実行時間計測手段が一致すれば前記時刻格納領域に記憶された時刻から前記計測対象関数の実行終了までの経過時間を測定すること、を特徴とする請求項５に記載の関数実行時間計測方法。
【請求項９】
計測対象関数および指定関数を含む対象プログラムを実行するプロセッサと、前記プロセッサで動作しているプロセスを先入れ後出し（スタック）方式で記憶するプロセス別記憶領域とを有し、前記計測対象関数の実行中に前記指定関数が実行された場合に当該計測対象関数の実行時間を測定する関数実行時間計測装置にあって、
前記関数実行時間計測装置が備えるプロセッサに、
予め備えられた主記憶装置に前記対象プログラムを読み込む手順、
前記対象プログラム内で前記計測対象関数の開始点および前記指定関数の開始点に、割り込み処理を発生させる第１および第２のフックを各々挿入する手順、
および前記第２のフックによる割り込み処理が発生した場合に、実行時間計測手段が前記第１のフックによる割り込み処理の発生時刻から前記計測対象関数の実行終了までの経過時間を測定し、これを出力する手順を実行させること、を特徴とする関数実行時間計測プログラム。
【請求項１０】
前記第２のフックによる割り込み処理が発生した場合に、前記プロセス別記憶領域に予め併設された二値データを記憶する指定処理実行フラグの値を前記指定関数が実行されたことを示す値に変更すること、を特徴とする請求項９に記載の関数実行時間計測プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は関数実行時間計測装置、関数実行時間計測方法、関数実行時間計測プログラムに関し、特に動作状態が特定の条件を満たす場合にのみ当該プログラム内の特定の関数の実行時間を測定する関数実行時間計測装置等に関する。
【背景技術】
【０００２】
コンピュータプログラミング（オペレーティングシステムおよびアプリケーションのいずれであっても）においては、当該プログラムの中のどの部分の実行に時間がかかっているかを特定することが、高速に、かつ安定して実行することが可能なプログラムを作成する上では重要である。特に、当該プログラムの実行中にエラーが発生した際に、当該プログラムに含まれる関数ごとの実行時間を計測し、これによって性能に影響を与える遅延箇所を特定することは重要である。
【０００３】
そのために、一般的には時間計測用のポイントをソースプログラム内に作成するなどのような手法が多く採られている。しかしながら、そのような時間計測用のポイントは、最終的に完成するプログラムの動作では特に必要とはされない。そのため、ソースプログラムを実行形式ファイルにコンパイルする段階で、それらのポイントを除外して再コンパイルするという繁雑な作業が必要となる。
【０００４】
図１２は、後述の特許文献１に記載された既存のプログラム実行時間測定の技術について示す説明図である。この技術では、動作中のプログラム命令が記憶された主記憶装置で、特定のアドレスの記憶内容を書き替えて割り込み命令を発生させ、その割り込み命令の発生点の間で時間を測定している。この手法を動的フック手法といい、また割り込みを発生させる命令をフックという。この手法で、プログラム内部の任意の地点で実行時間の測定が可能となる。
【０００５】
図１２に記載された例では、アドレス「Ａ３」に記憶された命令「Ｂ３」を「Ｂ’３」に、アドレス「Ａｎ−３」に記憶された命令「Ｂｎ−３」を「Ｂ’ｎ−３」に各々書き替えており、これによってアドレス「Ａ３」と「Ａｎ−３」とで各々割り込み命令を発生させ、その発生点の間の時間を測定している。他のアドレスにおいても、同じ方法で測定対象とすることができる。
【０００６】
これに関連して、他には次のような技術資料がある。特許文献２には、関数の実行終了時にエラーが発生した場合にトレースデータの収集などを行うことが可能であるというデバッグシステムが記載されている。特許文献３には、対象プログラムに時間測定用の監視コードを追加して、これによってプログラムの実行時間を測定するという技術が記載されている。
【０００７】
特許文献４には、各関数にセッションＩＤなどを対応づけて、関数ごとの性能データを収集するという技術が記載されている。特許文献５には、プログラム中にいくつでもイベントポイントを設定できるというデバッグ装置が記載されている。特許文献６、および特許文献７には、設定されたプログラム中の特定のアドレス間の実行時間を計測する計測方法が記載されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平０３−２２５４４０号公報
【特許文献２】特開２０００−０８９９７７号公報
【特許文献３】特開２００４−２５８７２８号公報
【特許文献４】特開２００９−０６４１２４号公報
【特許文献５】特開２００９−１１６６８２号公報
【特許文献６】特開平０２−２３０４３６号公報
【特許文献７】特開平０６−１６１８３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
図１２に示した特許文献１に記載の技術を利用すれば、コンピュータプログラム内の任意の部分について実行時間を測定することが可能となる。しかしながら、この技術は単に「プログラム内の特定の区間の実行時間の測定」が可能であるというだけである。コンピュータプログラムの同じ部分であっても、動作状態などの条件に応じて実行時間は変わりうるものであるが、「特定の条件を満たす場合にのみ、その区間の実行時間を測定する」ことは、この技術ではできない。
【００１０】
特に、コンピュータプログラム内には、エラーが発生した場合にそのエラーの種類に応じて実行されるエラー処理用の関数が作られることが普通である。信頼性の高いプログラムを作成する上では、そのエラー処理が正しく迅速に行われているか否かを把握することが必要である。そのためには、特定のエラーが発生した場合の関数実行時間の測定が必要となる。
【００１１】
しかしながら、これを可能とする技術は、前述の特許文献１には記載されていない。残る特許文献２〜７にも、関数ごとの実行時間を測定可能な技術は含まれているが、特定の条件を満たす場合にその関数の実行時間を測定するという技術は記載されていない。
【００１２】
本発明の目的は、コンピュータプログラムの動作状態が特定の条件を満たす場合にのみ、当該プログラム内の特定の関数の実行時間を測定することを可能とする関数実行時間計測装置、関数実行時間計測方法、および関数実行時間計測プログラムを提供することにある。
【課題を解決するための手段】
【００１３】
上記目的を達成するため、本発明に係る関数実行時間計測装置は、計測対象関数および指定関数を含む対象プログラムを実行するプロセッサを有し、計測対象関数の実行中に指定関数が実行された場合に当該計測対象関数の実行時間を測定する関数実行時間計測装置であって、プロセッサで動作しているプロセスの動作状態を先入れ後出し（スタック）方式で記憶するプロセス別記憶領域と、予め備えられた主記憶装置に対象プログラムを読み込むプログラムローダと、対象プログラム内で計測対象関数の開始点および指定関数の開始点に各々、割り込み処理を発生させる第１および第２のフックを挿入する動的パッチ手段と、第２のフックによる割り込み処理が発生した場合に、第１のフックによる割り込み処理の発生時刻から計測対象関数の実行終了までの経過時間を測定し、これを出力する実行時間計測手段とを有すること、を特徴とする。
【００１４】
上記目的を達成するため、本発明に係る関数実行時間計測方法は、計測対象関数および指定関数を含む対象プログラムを実行するプロセッサと、プロセッサで動作しているプロセスを先入れ後出し（スタック）方式で記憶するプロセス別記憶領域とを有し、計測対象関数の実行中に指定関数が実行された場合に当該計測対象関数の実行時間を測定する関数実行時間計測装置にあって、予め備えられた主記憶装置にプログラムローダが対象プログラムを読み込み、対象プログラム内で計測対象関数の開始点および指定関数の開始点に各々、割り込み処理を発生させる第１および第２のフックを動的パッチ手段が挿入し、第２のフックによる割り込み処理が発生した場合に、実行時間計測手段が第１のフックによる割り込み処理の発生時刻から計測対象関数の実行終了までの経過時間を測定し、これを出力すること、を特徴とする。
【００１５】
上記目的を達成するため、本発明に係る関数実行時間計測プログラムは、計測対象関数および指定関数を含む対象プログラムを実行するプロセッサと、プロセッサで動作しているプロセスを先入れ後出し（スタック）方式で記憶するプロセス別記憶領域とを有し、計測対象関数の実行中に指定関数が実行された場合に当該計測対象関数の実行時間を測定する関数実行時間計測装置にあって、関数実行時間計測装置が備えるプロセッサに、予め備えられた主記憶装置に対象プログラムを読み込む手順、対象プログラム内で計測対象関数の開始点および指定関数の開始点に各々、割り込み処理を発生させる第１および第２のフックを挿入する手順、および第２のフックによる割り込み処理が発生した場合に、実行時間計測手段が第１のフックによる割り込み処理の発生時刻から計測対象関数の実行終了までの経過時間を測定し、これを出力する手順を実行させること、を特徴とする。
【発明の効果】
【００１６】
本発明は、上記した通り、計測対象関数の開始点および指定関数の開始点に各々第１および第２のフックを挿入し、第２のフックによる割り込み処理が発生した場合に計測対象関数の実行時間を測定するように構成したので、単純な判断のみで特定の条件を満たしたか否かを検知できる。これによって、コンピュータプログラムの動作状態が特定の条件を満たす場合にのみ、当該プログラム内の特定の関数の実行時間を測定することが可能であるという、優れた特徴を持つ関数実行時間計測装置、関数実行時間計測方法、および関数実行時間計測プログラムを提供することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明の基本形態に係る関数実行時間計測装置の構成について示す説明図である。
【図２】本発明の第１の実施形態に係る関数実行時間計測装置の構成について示す説明図である。
【図３】図２で示した関数実行時間計測装置で、対象プログラム領域に読み込まれる対象プログラムで関数実行時間の計測を行う条件の一例について示す説明図である。
【図４】図２で示した関数実行時間計測装置で、動的パッチ手段が対象プログラム領域の特定の部分にフックを挿入する動作について示すフローチャートである。
【図５】図２で示した関数実行時間計測装置で、実行時間計測手段が計測対象関数の動作時間を測定する動作について示すフローチャートである。
【図６】図５のステップＳ２０１、２０３、２０６〜２０７の各々の処理が行われる時の、プロセス別記憶領域のスタックの状態について示す説明図である。図６（ａ）は図５のステップＳ２０１を、図６（ｂ）はステップＳ２０３を、図６（ｃ）はステップＳ２０６〜２０７を各々示す。
【図７】本発明の第２の実施形態に係る関数実行時間計測装置構成について示す説明図である。
【図８】図７で示した関数実行時間計測装置で、動的パッチ手段が対象プログラム領域の特定の部分にフックを挿入する動作について示すフローチャートである。
【図９】図７で示した関数実行時間計測装置で、実行時間計測手段が計測対象関数の動作時間を測定する動作について示すフローチャートである。
【図１０】図９のステップＳ４０１、４０３〜４０４、４０７の各々の処理が行われる時の、プロセス別記憶領域１０３のスタックの状態について示す説明図である。図１０（ａ）は図９のステップＳ４０１を、図１０（ｂ）はステップＳ４０３〜４０４を、図１０（ｃ）はステップＳ４０７を各々示す。
【図１１】本発明の第３の実施形態に係る関数実行時間計測装置の構成について示す説明図である。
【図１２】特許文献１に記載された既存のプログラム実行時間測定の技術について示す説明図である。
【発明を実施するための形態】
【００１８】
（基本形態）
以下、本発明の基本形態の構成について添付図１に基づいて説明する。
基本形態に係る関数実行時間計測装置１は、計測対象関数および指定関数を含む対象プログラムを実行するプロセッサ１ａを有し、計測対象関数の実行中に指定関数が実行された場合に当該計測対象関数の実行時間を測定する関数実行時間計測装置であって、プロセッサで動作しているプロセスの動作状態を先入れ後出し（スタック）方式で記憶するプロセス別記憶領域１ｂと、予め備えられた主記憶装置に対象プログラムを読み込むプログラムローダ２と、対象プログラム内で計測対象関数の開始点および指定関数の開始点に各々、割り込み処理を発生させる第１および第２のフックを挿入する動的パッチ手段３と、第２のフックによる割り込み処理が発生した場合に、第１のフックによる割り込み処理の発生時刻から計測対象関数の実行終了までの経過時間を測定し、これを出力する実行時間計測手段４とを有する。
【００１９】
これによって、この関数実行時間計測装置１は、動作状態が特定の条件を満たす場合にのみ、当該プログラム内の特定の関数の実行時間を測定することが可能なものとなる。
これら各部／各手段のより詳細な構成は、次の実施形態として説明する。
【００２０】
（第１の実施形態）
続いて、本発明の第１の実施形態の構成について添付図２に基づいて説明する。
最初に、本実施形態の基本的な内容について説明し、その後でより具体的な内容について説明する。
本実施形態に係る関数実行時間計測装置１０は、計測対象関数および指定関数を含む対象プログラムを実行するプロセッサ１１を有し、計測対象関数の実行中に指定関数が実行された場合に当該計測対象関数の実行時間を測定する関数実行時間計測装置であり、プロセッサで動作しているプロセスの動作状態を先入れ後出し（スタック）方式で記憶するプロセス別記憶領域１０３と、予め備えられた主記憶装置に対象プログラムを読み込むプログラムローダ１４と、対象プログラム内で計測対象関数の開始点および指定関数の開始点に各々、割り込み処理を発生させる第１および第２のフックを挿入する動的パッチ手段１６と、第２のフックによる割り込み処理が発生した場合に、第１のフックによる割り込み処理の発生時刻から計測対象関数の実行終了までの経過時間を測定し、これを出力する実行時間計測手段２２（実行時間計測プログラム２１０）とを有する。
【００２１】
また、プロセス別記憶領域１０３に、指定関数が実行されたか否かを示す二値データを記憶する指定処理実行フラグ１０４を併設すると共に、実行時間計測手段２２が、第２のフックによる割り込み処理が発生した場合に指定処理実行フラグの値を指定関数が実行されたことを示す値に変更する機能を備える。
【００２２】
そして、実行時間計測手段２２が、第１のフックによる割り込み処理が発生した場合に、その時点の時刻をプロセス別記憶領域に記憶する機能と、第２のフックによる割り込み処理が発生し、かつ指定処理実行フラグの値が指定関数が実行されたことを示す値である場合に、プロセス別記憶領域に記憶された時刻から計測対象関数の実行終了までの経過時間を測定する機能とを有する。
【００２３】
以上の構成を備えることによって、この関数実行時間計測装置１０は、コンピュータプログラム（対象プログラム２００）の動作状態が特定の条件を満たす場合にのみ、当該プログラム内の特定の関数の実行時間を測定することが可能なものとなる。
以下、これをより詳細に説明する。
【００２４】
図２は、本発明の第１の実施形態に係る関数実行時間計測装置１０の構成について示す説明図である。関数実行時間計測装置１０は、コンピュータ装置としての基本的な構成を備える。即ち、関数実行時間計測装置１０は、コンピュータプログラムを実行する主体であるプロセッサ１１と、動作中のプログラムやデータを記憶する主記憶手段１２と、対象プログラムやデータを記録するハードディスクなどの外部記憶手段１３を備える。
【００２５】
関数実行時間計測装置１０はさらに、外部記憶手段１３から対象プログラムを読み取って主記憶手段１２に記憶させるプログラムローダ１４と、対象プログラム中の指定の関数の実行時間を記録する実行時間記録手段１５と、主記憶手段１２に記憶されている対象プログラムの特定の部分にフック（割り込み発生命令）を挿入する動的パッチ手段１６とを備える。
【００２６】
プログラムローダ１４および動的パッチ手段１６は、プロセッサ１１で実行されるコンピュータプログラムとして構成してもよいし、プロセッサ１１とは別個のハードウェアとして構成してもよい。また、実行時間記録手段１５は、外部記憶手段１３と同一としてもよい。
【００２７】
主記憶手段１２には、関数実行時間の計測対象となる対象プログラム２００が記憶される対象プログラム領域１０１、実行時間計測プログラム２１０が記憶される計測プログラム領域１０２、動作中の各プロセスをスタック（先入れ後出し）方式で記憶するプロセス別記憶領域１０３、さらに関数実行時間を計測すべき条件を満たしているか否かを示す二値データを記録する指定処理実行フラグ１０４を備えている。プロセス別記憶領域１０３としては、たとえばスレッドローカルストレージやスタック領域の一部を利用することができる。指定処理実行フラグ１０４は、プロセス別記憶領域１０３内に含まれていてもよいし、別の領域でもよい。
【００２８】
そしてプロセッサ１１は、対象プログラム２００を実行する対象プログラム実行手段２１、および実行時間計測プログラム２１０を実行して関数実行時間の計測を行う実行時間計測手段２２として機能する。実行時間計測手段２２は、プロセス別記憶領域１０３に記憶されている対象プログラムの一部を書き替えるスタック書き替え機能２２ａを含む。
【００２９】
図３は、図２で示した関数実行時間計測装置１０で、対象プログラム領域１０１に読み込まれる対象プログラム２００で関数実行時間の計測を行う条件の一例について示す説明図である。対象プログラム２００には、関数実行時間の計測対象となる計測対象関数２０１と、それとは別個の指定関数２０２と指定外関数２０３とが含まれている。
【００３０】
本実施形態では図３（ａ）に示す「計測対象関数２０１の実行中に指定関数２０２が呼び出されて実行された場合」を、関数実行時間の計測対象とする。その場合、計測対象関数２０１の実行開始から実行終了までがその計測対象となる。計測対象関数２０１から指定関数２０２が呼び出されて実行されている間の時間も、その計測対象に含まれる。
【００３１】
逆に、図３（ｂ）に示す「計測対象関数２０１の実行中に指定関数２０２が実行されなかった場合」、たとえば指定外関数２０３が呼び出されて実行されたのみの場合は、関数実行時間の計測を行わないものとする。
【００３２】
典型的には、計測対象関数２０１はエラー処理用関数、指定関数２０２および指定外関数２０３はその中で発生したエラーの種類に応じて呼び出される関数である。この場合、「計測対象関数２０１の実行中に指定関数２０２が呼び出されて実行された場合」という条件は「対象プログラム２００の実行中に特定の種類のエラーが発生した場合」を意味する。しかしながら、本実施形態はこれ以外の条件に対しても適用可能であることは言うまでもない。
【００３３】
図４は、図２で示した関数実行時間計測装置１０で、動的パッチ手段１６が対象プログラム領域１０１の特定の部分にフックを挿入する動作について示すフローチャートである。プログラムローダ１４が対象プログラム２００を外部記憶手段１３から読み込んで主記憶手段１２の対象プログラム領域１０１に記憶させると、動的パッチ手段１６はまず、対象プログラム２００内の計測対象関数２０１が開始される際に実行時間計測プログラム２１０の後述のステップＳ２０１を実行させる第１のフック２０４ａを計測対象関数２０１に挿入する（ステップＳ１０１）。
【００３４】
これに引き続いて動的パッチ手段１６は、指定関数２０２が実行される際に後述のステップＳ２０３を実行させる第２のフック２０４ｂを指定関数２０２に挿入する（ステップＳ１０２）。以上で動的パッチ手段１６による処理は終了する。
【００３５】
図３に戻って、図３（ａ）に示した計測対象関数２０１から指定関数２０２が呼び出されて実行される際には、第１のフック２０４ａと第２のフック２０４ｂとでつごう２回のフック処理が発生することとなる。これに対して図３（ｂ）に示した計測対象関数２０１から指定外関数２０３が呼び出されて実行されるのみの場合には、第１のフック２０４ａによって１回のフック処理が発生するのみである。
【００３６】
図５は、図２で示した関数実行時間計測装置１０で、実行時間計測手段２２が計測対象関数２０１の動作時間を測定する動作について示すフローチャートである。
【００３７】
前述の第１のフック２０４ａによるフック処理に反応して動作を開始した実行時間計測手段２２のスタック書き替え機能２２ａは、プロセス別記憶領域１０３のスタックに、現在時刻と実行時間計測後処理（後述のステップＳ２０６以降）のアドレスとを追加し、指定処理実行フラグ１０４の値を「０」（指定関数２０２が未実行）とする（ステップＳ２０１）。
【００３８】
ステップＳ２０１の処理が完了したら、実行時間計測手段２２は、計測対象関数２０１の処理を指定関数２０２に到達するまで行わせる（ステップＳ２０２）。指定関数２０２に到達すると第２のフック２０４ｂによるフック処理が発生するので、これに対応して指定処理実行フラグ１０４の値を「１」（指定関数２０２が実行済）とする（ステップＳ２０３）。そして計測対象関数２０１の残りの処理を行わせる（ステップＳ２０４）。
【００３９】
計測対象関数２０１の実行が終了すると、ステップＳ２０１で書き替えたアドレスに処理がジャンプして実行時間計測後処理が開始される（ステップＳ２０５）。ここで実行時間計測手段２２は、指定処理実行フラグ１０４の値について判断する（ステップＳ２０６）。
【００４０】
指定処理実行フラグ１０４の値が「０」であれば、特に何もせずに計測対象関数２０１の処理は終了となる。指定処理実行フラグ１０４の値が「１」であれば、ステップＳ２０１で記録した時刻と現在時刻との差分（これが即ちここで求めようとしている関数実行時間である）を算出して、これを実行時間記録手段１５に記録し（ステップＳ２０７）、計測対象関数２０１の処理はこれで終了となる。
【００４１】
図６は、図５のステップＳ２０１、２０３、２０６〜２０７の各々の処理が行われる時の、プロセス別記憶領域１０３のスタックの状態について示す説明図である。図６（ａ）は図５のステップＳ２０１を、図６（ｂ）はステップＳ２０３を、図６（ｃ）はステップＳ２０６〜２０７を各々示す。
【００４２】
計測対象関数２０１が呼び出された時点では、プロセス別記憶領域１０３のスタックにはその計測対象関数２０１の実行終了時の戻りアドレス１０３ａが記録されている。ステップＳ２０１の処理では、図６（ａ）に示す通り、このスタックに現在時刻（即ち計測対象関数２０１の実行開始時刻１０３ｂ）と、ステップＳ２０６以降の処理のアドレス（即ち実行時間計測後処理アドレス１０３ｃ）とを記録する。また指定処理実行フラグ１０４の値は「０」である。
【００４３】
図６（ｂ）に示す通り、指定関数２０２に到達した時点では、計測対象関数２０１の処理に伴うデータなどがプロセス別記憶領域１０３のスタックに記憶されるが、この時点で指定処理実行フラグ１０４の値は「１」となる。
【００４４】
そして図６（ｃ）に示す通り、図６（ａ）で記録された実行時間計測後処理アドレス１０３ｃからの処理が開始された時点で指定処理実行フラグ１０４の値が「１」であれば、現在時刻とスタックに記憶された実行開始時刻１０３ｂとの間の差分を算出して実行時間記録手段１５に記録し、そして戻りアドレス１０３ａに処理を戻す。指定処理実行フラグ１０４の値が「０」であれば、そのまま戻りアドレス１０３ａに処理を戻す。
【００４５】
（実施形態の全体的な動作）
次に、上記の実施形態の全体的な動作について説明する。
本実施形態に係る関数実行時間計測方法は、計測対象関数および指定関数を含む対象プログラムを実行するプロセッサと、プロセッサで動作しているプロセスを先入れ後出し（スタック）方式で記憶するプロセス別記憶領域とを有し、計測対象関数の実行中に指定関数が実行された場合に当該計測対象関数の実行時間を測定する関数実行時間計測装置にあって、予め備えられた主記憶装置にプログラムローダが対象プログラムを読み込み、対象プログラム内で計測対象関数の開始点および指定関数の開始点に各々、割り込み処理を発生させる第１および第２のフックを動的パッチ手段が挿入し（図４・ステップＳ１０１〜１０２）、第２のフックによる割り込み処理が発生した場合に、実行時間計測手段が第１のフックによる割り込み処理の発生時刻から計測対象関数の実行終了までの経過時間を測定し、これを出力する（図５・ステップＳ２０３〜２０７）。
【００４６】
また、プロセス別記憶領域に、指定関数が実行されたか否かを示す二値データを記憶する指定処理実行フラグを併設すると共に、第２のフックによる割り込み処理が発生した場合に、実行時間計測手段が指定処理実行フラグの値を指定関数が実行されたことを示す値に変更する（図５・ステップＳ２０３）。
【００４７】
そして、第１のフックによる割り込み処理が発生した場合に、実行時間計測手段がその時点の時刻をプロセス別記憶領域に記憶し（図５・ステップＳ２０１）、第２のフックによる割り込み処理が発生し、かつ指定処理実行フラグの値が指定関数が実行されたことを示す値である場合に、実行時間計測手段がプロセス別記憶領域に記憶された時刻から計測対象関数の実行終了までの経過時間を測定する（図５・ステップＳ２０６〜２０７）。
【００４８】
ここで、上記各動作ステップについては、これをコンピュータで実行可能にプログラム化し、これらを前記各ステップを直接実行する関数実行時間計測装置１０の備えるプロセッサ１１に実行させるようにしてもよい。本プログラムは、非一時的な記録媒体、例えば、ＤＶＤ、ＣＤ、フラッシュメモリ等に記録されてもよい。その場合、本プログラムは、記録媒体からコンピュータによって読み出され、実行される。
この動作により、本実施形態は以下のような効果を奏する。
【００４９】
本実施形態によれば、指定処理実行フラグ１０４の値を０から１に変更するという簡単な動作、およびその値が１であるか否かという簡単な判断に基づいて指定関数２０２が実行されたか否かを判断して計測対象関数２０１の実行時間を測定することが可能となる。同時に、この処理に伴って発生するオーバーヘッド（遅延時間）は少なくて済む。
【００５０】
たとえば、前述のように計測対象関数２０１はエラー処理用関数、指定関数２０２および指定外関数２０３はその中で発生したエラーの種類に応じて呼び出される関数とすれば、「計測対象関数２０１の実行中に指定関数２０２が呼び出されて実行された場合」という条件は「対象プログラム２００の実行中に特定の種類のエラーが発生した場合」を意味する。従って、本実施形態は対象プログラム２００の実行中のエラー処理に要する実行時間を把握することに対して、特に有用である。
【００５１】
（第２の実施形態）
本発明の第２の実施形態は、プロセス別記憶領域１０３に、計測対象関数の実行終了後にプロセッサによる処理を戻す戻りアドレスを記憶する戻りアドレス格納領域４０４と、時刻を記憶する時刻格納領域４０５とを併設すると共に、実行時間計測手段３２２が、第１のフックによる割り込み処理が発生した場合に、プロセス別記憶領域に記憶された戻りアドレスを戻りアドレス格納領域に記憶し、その時点の時刻を時刻格納領域に記憶する機能と、第２のフックによる割り込み処理が発生した場合に、プロセス別記憶領域に記憶された戻りアドレスと戻りアドレス格納領域に記憶された戻りアドレスが一致するか否かを判断し、一致すれば時刻格納領域に記憶された時刻から計測対象関数の実行終了までの経過時間を測定する機能とを有する構成とした。
【００５２】
この構成によっても第１の実施形態と同一の効果が得られることに加えて、計測処理によって発生するオーバーヘッド（遅延時間）をさらに少なく済ませることができる。
以下、これをより詳しく説明する。
【００５３】
図７は、本発明の第２の実施形態に係る関数実行時間計測装置３１０の構成について示す説明図である。関数実行時間計測装置３１０は、第１の実施形態に係る関数実行時間計測装置１０と同一の構成を多く含むので、同一のものについては同一の呼称と参照番号で呼ぶことにし、ここでは原則として第１の実施形態からの変更点のみについて説明することにする。
【００５４】
関数実行時間計測装置３１０は、ハードウェアとしては第１の実施形態に係る関数実行時間計測装置１０と同一であるが、主記憶手段１２に記憶される内容がまず異なる。即ち、対象プログラム領域１０１、計測プログラム領域１０２、プロセス別記憶領域１０３については第１の実施形態と同一であるが、指定処理実行フラグ１０４は省略され、後述の戻りアドレス格納領域４０４、および時刻格納領域４０５を新たに備えている。
【００５５】
そしてプロセッサ１１は、対象プログラム２００を実行する計測対象プログラム実行手段２１、および第１の実施形態とは別の実行時間計測プログラム５１０を実行して関数実行時間の計測を行う実行時間計測手段３２２として機能する。実行時間計測手段３２２は、プロセス別記憶領域１０３に記憶されている対象プログラムの一部を書き替えるスタック書き替え機能３２２ａを含む。
【００５６】
図８は、図７で示した関数実行時間計測装置３１０で、動的パッチ手段１６が対象プログラム領域１０１の特定の部分にフックを挿入する動作について示すフローチャートである。プログラムローダ１４が対象プログラム２００を外部記憶手段１３から読み込んで主記憶手段１２の対象プログラム領域１０１に記憶させると、動的パッチ手段１６はまず、対象プログラム２００内の計測対象関数２０１が開始される際に実行時間計測プログラム２１０の後述のステップＳ４０１を実行させる第１のフック２０４ａを計測対象関数２０１に挿入する（ステップＳ３０１）。
【００５７】
これに引き続いて動的パッチ手段１６は、指定関数２０２が実行される際に後述のステップＳ４０３を実行させる第２のフック２０４ｂを指定関数２０２に挿入する（ステップＳ３０２）。以上で動的パッチ手段１６による処理は終了する。この処理は、図４に示した第１の実施形態の動作と同一である。また、対象プログラム領域１０１に読み込まれる対象プログラム２００で関数実行時間の計測を行う条件についても、図３で説明した第１の実施形態の場合と同一とする。
【００５８】
図９は、図７で示した関数実行時間計測装置３１０で、実行時間計測手段３２２が計測対象関数２０１の動作時間を測定する動作について示すフローチャートである。
【００５９】
前述の第１のフック２０４ａによるフック処理に反応して動作を開始した実行時間計測プログラム５１０は、プロセス別記憶領域１０３のスタックに記憶されている戻りアドレス１０３ａを戻りアドレス格納領域４０４に記憶して、時刻格納領域４０５には現在時刻（即ち計測対象関数２０１の実行開始時刻）を記憶する（ステップＳ４０１）。
【００６０】
ステップＳ４０１の処理が完了したら、実行時間計測手段３２２は、計測対象関数２０１の処理を指定関数２０２に到達するまで行わせる（ステップＳ４０２）。指定関数２０２に到達すると第２のフック２０４ｂによるフック処理が発生するので、実行時間計測手段３２２はプロセス別記憶領域１０３のコールスタックを順繰りに辿って、そこに記録されている戻りアドレスが戻りアドレス格納領域４０４に記憶されている内容と一致するか否かについて判断する（ステップＳ４０３）。
【００６１】
コールスタックに記録されている戻りアドレスが戻りアドレス格納領域４０４と一致しなければ、後述の戻りアドレスを実行時間計測後処理のアドレスに変更する処理は行われないので、実行時間計測手段３２２はそのまま計測対象関数２０１の残りの処理を行わせて（ステップＳ４０６）処理を終了する。
【００６２】
コールスタックに記録されている戻りアドレスが戻りアドレス格納領域４０４と一致すれば、まず実行時間計測手段３２２のスタック書き替え機能３２２ａがコールスタック内の戻りアドレスを実行時間計測後処理（後述のステップＳ４０７）のアドレスに書き替える（ステップＳ４０４）。ここで第３のフックが、計測対象関数２０１の終了時点に挿入されたこととなる。そして計測対象関数２０１の残りの処理を行わせる（ステップＳ４０５）。即ち、本実施形態では、計測対象となる条件を満たす場合、合計３回のフック処理が発生することになる。
【００６３】
実行時間計測手段３２２は、これに反応して、ステップＳ４０１で時刻格納領域４０５に記録した時刻と現在時刻との差分（これが即ちここで求めようとしている関数実行時間である）を算出して、これを実行時間記録手段１５に記録して（ステップＳ４０７）処理を終了する。
【００６４】
図１０は、図９のステップＳ４０１、４０３〜４０４、４０７の各々の処理が行われる時の、プロセス別記憶領域１０３のスタックの状態について示す説明図である。図１０（ａ）は図９のステップＳ４０１を、図１０（ｂ）はステップＳ４０３〜４０４を、図１０（ｃ）はステップＳ４０７を各々示す。
【００６５】
計測対象関数２０１が呼び出された時点では、プロセス別記憶領域１０３のスタックにはその計測対象関数２０１の実行終了時の戻りアドレス１０３ａが記録されている。ステップＳ４０１の処理では、図１０（ａ）に示す通り、この戻りアドレス１０３ａを戻りアドレス格納領域４０４に記憶し、現在時刻を時刻格納領域４０５に記憶する。
【００６６】
図１０（ｂ）に示す通り、一般的なプログラムではスタックフレームの位置を保持するためフレームポインタを利用しているので、このフレームポインタを順繰りに辿れば、ステップＳ４０３のコールスタックを順繰りに辿る処理が実現できる。
【００６７】
そして図１０（ｃ）に示す通り、指定関数２０２が実行されていれば計測対象関数２０１の戻り時に実行時間計測後処理（ステップＳ４０７）が実行されるが、指定関数２０２が実行されていなければその処理は実行されない。即ち、この計測処理によって発生するオーバーヘッド（遅延時間）をさらに少なく済ませることができる。
【００６８】
（第３の実施形態）
本発明の第３の実施形態は、前述の第１および第２の実施形態におけるプログラムローダおよび動的パッチ手段に替えてＯＳカーネル７００内にカーネルモジュールロード手段７０１およびカーネル動的パッチ手段７０２を備える構成とし、さらに実行時間計測プログラムもカーネルモジュールの一つとして動作する形態とした。
【００６９】
これによって、第１および第２の実施形態が一般的なコンピュータプログラムの関数実行時間を計測するものであるのに対して、オペレーティングシステム（基本ソフト）の一部であるカーネルの関数実行時間を計測することが可能であるという効果を得ることができる。
以下、これをより詳しく説明する。
【００７０】
図１１は、本発明の第３の実施形態に係る関数実行時間計測装置６１０の構成について示す説明図である。関数実行時間計測装置６１０は、第１〜２の実施形態に係る関数実行時間計測装置１０および３１０と同一の構成を多く含むので、同一のものについては同一の呼称と参照番号で呼ぶことにし、ここでは原則として第１〜２の実施形態からの変更点のみについて説明することにする。
【００７１】
第１〜２の実施形態に係る関数実行時間計測装置１０および３１０は、一般的なコンピュータプログラムの関数実行時間を計測するものであるが、本実施形態の関数実行時間計測装置６１０は、オペレーティングシステム（基本ソフト）の基本的機能を実現するプログラムの一部であるカーネルの関数実行時間を計測するものである。
【００７２】
このため、プロセッサ１１、主記憶手段１２、および外部記憶手段１３は第１〜２の実施形態と同一であるが、主記憶手段１２にＯＳカーネル７００が記憶され、その中に含まれているカーネルモジュールロード手段７０１およびカーネル動的パッチ手段７０２が、各々第１〜２の実施形態におけるプログラムローダ１４および動的パッチ手段１６に相当する動作を行う。カーネルモジュールロード手段７０１は、関数実行時間の計測対象となる対象カーネル７０３を読み込んで動作させる。
【００７３】
さらに主記憶手段１２には実行時間計測モジュール７１０もカーネルモジュールの一つとして記憶されて動作し、これが各々第１〜２の実施形態における実行時間計測プログラム２１０（５１０）と同様の動作を行う。プロセス別記憶領域１０３、実行時間記録手段１５については、第１〜２の実施形態と同様である。
【００７４】
カーネル動的パッチ手段７０２、および実行時間計測モジュール７１０は、対象カーネル７０３に対して第１もしくは第２の実施形態と同一の動作を行うことによって、対象カーネル７０３の特定の条件における関数実行時間の計測を行う。その具体的な動作についての説明は、図４〜５、もしくは図８〜９のフローチャートに示した動作と同一である。
【００７５】
これまで本発明について図面に示した特定の実施形態をもって説明してきたが、本発明は図面に示した実施形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができる。
【００７６】
上述した実施形態について、その新規な技術内容の要点をまとめると、以下のようになる。なお、上記実施形態の一部または全部は、新規な技術として以下のようにまとめられるが、本発明は必ずしもこれに限定されるものではない。
【００７７】
（付記１）  計測対象関数および指定関数を含む対象プログラムを実行するプロセッサを有し、前記計測対象関数の実行中に前記指定関数が実行された場合に当該計測対象関数の実行時間を測定する関数実行時間計測装置であって、
前記プロセッサで動作しているプロセスの動作状態を先入れ後出し（スタック）方式で記憶するプロセス別記憶領域と、
予め備えられた主記憶装置に前記対象プログラムを読み込むプログラムローダと、
前記対象プログラム内で前記計測対象関数の開始点および前記指定関数の開始点に各々、割り込み処理を発生させる第１および第２のフックを挿入する動的パッチ手段と、
前記第２のフックによる割り込み処理が発生した場合に、前記第１のフックによる割り込み処理の発生時刻から前記計測対象関数の実行終了までの経過時間を測定し、これを出力する実行時間計測手段と
を有すること、を特徴とする関数実行時間計測装置。
【００７８】
（付記２）  前記プロセス別記憶領域に、前記指定関数が実行されたか否かを示す二値データを記憶する指定処理実行フラグを併設すると共に、
前記実行時間計測手段が、前記第２のフックによる割り込み処理が発生した場合に前記指定処理実行フラグの値を前記指定関数が実行されたことを示す値に変更する機能を備えること、を特徴とする付記１に記載の関数実行時間計測装置。
【００７９】
（付記３）  前記実行時間計測手段が、
前記第１のフックによる割り込み処理が発生した場合に、その時点の時刻を前記プロセス別記憶領域に記憶する機能と、
前記第２のフックによる割り込み処理が発生し、かつ前記指定処理実行フラグの値が前記指定関数が実行されたことを示す値である場合に、前記プロセス別記憶領域に記憶された時刻から前記計測対象関数の実行終了までの経過時間を測定する機能と
を有すること、を特徴とする付記２に記載の関数実行時間計測装置。
【００８０】
（付記４）  前記プロセス別記憶領域に、前記計測対象関数の実行終了後に前記プロセッサによる処理を戻す戻りアドレスを記憶する戻りアドレス格納領域と、時刻を記憶する時刻格納領域とを併設すると共に、
前記実行時間計測手段が、
前記第１のフックによる割り込み処理が発生した場合に、前記プロセス別記憶領域に記憶された戻りアドレスを前記戻りアドレス格納領域に記憶し、その時点の時刻を前記時刻格納領域に記憶する機能と、
前記第２のフックによる割り込み処理が発生した場合に、前記プロセス別記憶領域に記憶された戻りアドレスと前記戻りアドレス格納領域に記憶された戻りアドレスが一致するか否かを判断し、一致すれば前記時刻格納領域に記憶された時刻から前記計測対象関数の実行終了までの経過時間を測定する機能と
を有すること、を特徴とする付記１に記載の関数実行時間計測装置。
【００８１】
（付記５）  前記プログラムローダ、前記動的パッチ手段および前記実行時間計測手段を、いずれも前記主記憶装置上に記憶されたＯＳカーネル上に読み込まれるカーネルモジュールとして構成したこと、を特徴とする付記１に記載の関数実行時間計測装置。
【００８２】
（付記６）  計測対象関数および指定関数を含む対象プログラムを実行するプロセッサと、前記プロセッサで動作しているプロセスを先入れ後出し（スタック）方式で記憶するプロセス別記憶領域とを有し、前記計測対象関数の実行中に前記指定関数が実行された場合に当該計測対象関数の実行時間を測定する関数実行時間計測装置にあって、
予め備えられた主記憶装置にプログラムローダが前記対象プログラムを読み込み、
前記対象プログラム内で前記計測対象関数の開始点および前記指定関数の開始点に各々、割り込み処理を発生させる第１および第２のフックを動的パッチ手段が挿入し、
前記第２のフックによる割り込み処理が発生した場合に、実行時間計測手段が前記第１のフックによる割り込み処理の発生時刻から前記計測対象関数の実行終了までの経過時間を測定し、これを出力すること、を特徴とする関数実行時間計測方法。
【００８３】
（付記７）  前記プロセス別記憶領域に、前記指定関数が実行されたか否かを示す二値データを記憶する指定処理実行フラグを併設すると共に、
前記第２のフックによる割り込み処理が発生した場合に、前記実行時間計測手段が前記指定処理実行フラグの値を前記指定関数が実行されたことを示す値に変更すること、を特徴とする付記６に記載の関数実行時間計測方法。
【００８４】
（付記８）  前記第１のフックによる割り込み処理が発生した場合に、前記実行時間計測手段がその時点の時刻を前記プロセス別記憶領域に記憶し、
前記第２のフックによる割り込み処理が発生し、かつ前記指定処理実行フラグの値が前記指定関数が実行されたことを示す値である場合に、前記実行時間計測手段が前記プロセス別記憶領域に記憶された時刻から前記計測対象関数の実行終了までの経過時間を測定すること、を特徴とする付記７に記載の関数実行時間計測方法。
【００８５】
（付記９）  前記プロセス別記憶領域に、前記計測対象関数の実行終了後に前記プロセッサによる処理を戻す戻りアドレスを記憶する戻りアドレス格納領域と、時刻を記憶する時刻格納領域とを併設すると共に、
前記第１のフックによる割り込み処理が発生した場合に、前記実行時間計測手段が前記プロセス別記憶領域に記憶された戻りアドレスを前記戻りアドレス格納領域に記憶し、その時点の時刻を前記時刻格納領域に記憶し、
前記第２のフックによる割り込み処理が発生した場合に、前記実行時間計測手段が前記プロセス別記憶領域に記憶された戻りアドレスと前記戻りアドレス格納領域に記憶された戻りアドレスが一致するか否かを判断し、前記戻りアドレスが一致すれば前記実行時間計測手段が前記時刻格納領域に記憶された時刻から前記計測対象関数の実行終了までの経過時間を測定すること、を特徴とする付記６に記載の関数実行時間計測方法。
【００８６】
（付記１０）  計測対象関数および指定関数を含む対象プログラムを実行するプロセッサと、前記プロセッサで動作しているプロセスを先入れ後出し（スタック）方式で記憶するプロセス別記憶領域とを有し、前記計測対象関数の実行中に前記指定関数が実行された場合に当該計測対象関数の実行時間を測定する関数実行時間計測装置にあって、
前記関数実行時間計測装置が備えるプロセッサに、
予め備えられた主記憶装置に前記対象プログラムを読み込む手順、
前記対象プログラム内で前記計測対象関数の開始点および前記指定関数の開始点に各々、割り込み処理を発生させる第１および第２のフックを挿入する手順、
および前記第２のフックによる割り込み処理が発生した場合に、実行時間計測手段が前記第１のフックによる割り込み処理の発生時刻から前記計測対象関数の実行終了までの経過時間を測定し、これを出力する手順を実行させること、を特徴とする関数実行時間計測プログラム。
【００８７】
（付記１１）  前記第２のフックによる割り込み処理が発生した場合に、前記プロセス別記憶領域に予め併設された二値データを記憶する指定処理実行フラグの値を前記指定関数が実行されたことを示す値に変更する手順を実行させること、を特徴とする付記１０に記載の関数実行時間計測プログラム。
【００８８】
（付記１２）  前記第１のフックによる割り込み処理が発生した場合に、その時点の時刻を前記プロセス別記憶領域に記憶する手順と、
前記第２のフックによる割り込み処理が発生し、かつ前記指定処理実行フラグの値が前記指定関数が実行されたことを示す値である場合に、前記プロセス別記憶領域に記憶された時刻から前記計測対象関数の実行終了までの経過時間を測定する手順とをさらに実行させること、を特徴とする付記１１に記載の関数実行時間計測プログラム。
【００８９】
（付記１３）  前記第１のフックによる割り込み処理が発生した場合に、前記実行時間計測手段が前記プロセス別記憶領域に予め併設されたプロセス別記憶領域に記憶された戻りアドレスを前記戻りアドレス格納領域に記憶し、その時点の時刻を前記プロセス別記憶領域に予め併設された前記時刻格納領域に記憶する手順と、
前記第２のフックによる割り込み処理が発生した場合に、前記プロセス別記憶領域に記憶された戻りアドレスと前記戻りアドレス格納領域に記憶された戻りアドレスが一致するか否かを判断し、前記戻りアドレスが一致すれば前記時刻格納領域に記憶された時刻から前記計測対象関数の実行終了までの経過時間を測定する手順とをさらに実行させること、を特徴とする付記１０に記載の関数実行時間計測プログラム。
【産業上の利用可能性】
【００９０】
本発明はコンピュータプログラミング全般に対して適用可能である。
【符号の説明】
【００９１】
１、１０、３１０、６１０  関数実行時間計測装置
１ａ、１１  プロセッサ
１ｂ、１０３  プロセス別記憶領域
２、１４  プログラムローダ
３、１６  動的パッチ手段
４、２２、３２２  実行時間計測手段
１２  主記憶手段
１３  外部記憶手段
１５  実行時間記録手段
２１  対象プログラム実行手段
２２ａ、３２２ａ  スタック書き替え機能
１０１  対象プログラム領域
１０２  計測プログラム領域
１０３ａ  実行終了時の戻りアドレス
１０３ｂ  実行開始時刻
１０３ｃ  実行時間計測後処理アドレス
１０４  指定処理実行フラグ
２００  対象プログラム
２０１  計測対象関数
２０２  指定関数
２０３  指定外関数
２０４ａ、２０４ｂ  フック
２１０、５１０  実行時間計測プログラム
４０４  戻りアドレス格納領域
４０５  時刻格納領域
７００  ＯＳカーネル
７０１  カーネルモジュールロード手段
７０２  カーネル動的パッチ手段
７０３  対象カーネル
７１０  実行時間計測モジュール
【図１】
2014222384.tif 000003
【図２】
2014222384.tif 000004
【図３】
2014222384.tif 000005
【図４】
2014222384.tif 000006
【図５】
2014222384.tif 000007
【図６】
2014222384.tif 000008
【図７】
2014222384.tif 000009
【図８】
2014222384.tif 000010
【図９】
2014222384.tif 000011
【図１０】
2014222384.tif 000012
【図１１】
2014222384.tif 000013
【図１２】
2014222384.tif 000014