(57)【特許請求の範囲】
【請求項１】
被監視プログラムを監視する処理をコンピュータに実行させる監視プログラムにおいて、
前記監視プログラムが実行されるオペレーティングシステム上で実行されている前記被監視プログラムに、実行されている前記被監視プログラムのアドレスの取得要求を予め定められたタイミングで送信し、前記取得要求に基づいて前記被監視プログラムが送信した前記アドレスを取得してバッファに格納するとともに、前記アドレスを前記バッファに格納した格納時刻を前記バッファに格納するステップと、
前記バッファに格納された複数のアドレスの値またはそれらアドレスの値に基づいて算出された値、が何通りの異なる値をとるかを示す変化数が予め定められた閾値以内であるかを判定する第１判定ステップと、
前記変化数が前記閾値以内である場合に、前記オペレーティングシステムを介して前記被監視プログラムのシステムコールの発行状況を取得するステップと、
取得された前記被監視プログラムのシステムコールの発行状況を基に、被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納された前記格納時刻の範囲内ではない場合に、被監視プログラムにループ障害が発生したと判定する第２判定ステップを前記コンピュータに実行させることを特徴とする監視プログラム。
【請求項２】
被監視プログラムを監視する処理をコンピュータに実行させる監視プログラムにおいて、
前記監視プログラムが実行されるオペレーティングシステム上で実行されている前記被監視プログラムに、実行されている前記被監視プログラムのアドレスの取得要求を予め定められたタイミングで送信し、前記取得要求に基づいて前記被監視プログラムが送信した前記アドレスを取得してバッファに格納するとともに、前記アドレスを前記バッファに格納した格納時刻を前記バッファに格納するステップと、
前記バッファに格納された複数のアドレスの値またはそれらアドレスの値に基づいて算出された値、が何通りの異なる値をとるかを示す変化数が予め定められた閾値以内であるかを判定する第１判定ステップと、
前記変化数が前記閾値以内である場合に、前記オペレーティングシステムを介して前記被監視プログラムのシステムコールの発行状況を取得するステップと、
取得された前記被監視プログラムのシステムコールの発行状況を基に、前記被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納されている前記格納時刻の範囲内かどうかを判定する第２判定ステップと、
前記第２判定ステップにおいて、前記被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納されている前記格納時刻の範囲内ではないと判定された場合に、ループ障害が発生したと仮判定するループ障害仮判定ステップと、
前記ループ障害の仮判定が行われてから、予め定められた監視継続時間、前記変化数が前記閾値以内である状態が続き、システムコールを発行中でない状態が続き、かつ、システムコールの最終発行時刻が、前記バッファに格納されている前記格納時刻の範囲内ではない状態が続いた場合は、ループ障害が発生したと判定し、
前記ループ障害の仮判定が行われてから、予め定められた監視継続時間内のいずれかの時点で、前記変化数が前記閾値を超えるか、システムコールが発行中の状態となるか、または、システムコールの最終発行時刻が前記バッファに格納されている前記格納時刻の範囲内となった場合は、前記ループ障害の仮判定を取り消す判定を行うループ障害判定ステップ、を前記コンピュータに実行させることを特徴とする監視プログラム。
【請求項３】
被監視プログラムを監視する処理をコンピュータが実行する監視方法において、
監視プログラムが実行されるオペレーティングシステム上で実行されている前記被監視プログラムに、実行されている前記被監視プログラムのアドレスの取得要求を予め定められたタイミングで送信し、前記取得要求に基づいて前記被監視プログラムが送信した前記アドレスを取得してバッファに格納するとともに、前記アドレスを前記バッファに格納した格納時刻を前記バッファに格納するステップと、
前記バッファに格納された複数のアドレスの値またはそれらアドレスの値に基づいて算出された値、が何通りの異なる値をとるかを示す変化数が予め定められた閾値以内であるかを判定する第１判定ステップと、
前記変化数が前記閾値以内である場合に、前記オペレーティングシステムを介して前記被監視プログラムのシステムコールの発行状況を取得するステップと、
取得された前記被監視プログラムのシステムコールの発行状況を基に、被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納された前記格納時刻の範囲内ではない場合に、被監視プログラムにループ障害が発生したと判定する第２判定ステップを備えることを特徴とする監視方法。
【請求項４】
被監視プログラムを監視する処理をコンピュータが実行する監視方法において、
監視プログラムが実行されるオペレーティングシステム上で実行されている前記被監視プログラムに、実行されている前記被監視プログラムのアドレスの取得要求を予め定められたタイミングで送信し、前記取得要求に基づいて前記被監視プログラムが送信した前記アドレスを取得してバッファに格納するとともに、前記アドレスを前記バッファに格納した格納時刻を前記バッファに格納するステップと、
前記バッファに格納された複数のアドレスの値またはそれらアドレスの値に基づいて算出された値、が何通りの異なる値をとるかを示す変化数が予め定められた閾値以内であるかを判定する第１判定ステップと、
前記変化数が前記閾値以内である場合に、前記オペレーティングシステムを介して前記被監視プログラムのシステムコールの発行状況を取得するステップと、
取得された前記被監視プログラムのシステムコールの発行状況を基に、前記被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納されている前記格納時刻の範囲内かどうかを判定する第２判定ステップと、
前記第２判定ステップにおいて、前記被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納されている前記格納時刻の範囲内ではないと判定された場合に、ループ障害が発生したと仮判定するループ障害仮判定ステップと、
前記ループ障害の仮判定が行われてから、予め定められた監視継続時間、前記変化数が前記閾値以内である状態が続き、システムコールを発行中でない状態が続き、かつ、システムコールの最終発行時刻が、前記バッファに格納されている前記格納時刻の範囲内ではない状態が続いた場合は、ループ障害が発生したと判定し、
前記ループ障害の仮判定が行われてから、予め定められた監視継続時間内のいずれかの時点で、前記変化数が前記閾値を超えるか、システムコールが発行中の状態となるか、または、システムコールの最終発行時刻が前記バッファに格納されている前記格納時刻の範囲内となった場合は、前記ループ障害の仮判定を取り消す判定を行うループ障害判定ステップ、を備えることを特徴とする監視方法。
【請求項５】
被監視プログラムを監視する処理を実行する監視装置において、
監視プログラムが実行されるオペレーティングシステム上で実行されている前記被監視プログラムのアドレスを、当該アドレスが格納された格納時刻とともに所定数格納するバッファと、
実行されている前記被監視プログラムのアドレスの取得要求を予め定められたタイミングで送信し、前記取得要求に基づいて前記被監視プログラムが送信した前記アドレスを取得して前記バッファに格納するアドレス取得部と、
前記バッファに格納された複数のアドレスの値またはそれらアドレスの値に基づいて算出された値、が何通りの異なる値をとるかを示す変化数が予め定められた閾値以内であるかを判定する第１判定部と、
前記変化数が前記閾値以内である場合に、前記オペレーティングシステムを介して前記被監視プログラムのシステムコールの発行状況を取得するシステムコール発行状況取得部と、
取得された前記被監視プログラムのシステムコールの発行状況を基に、被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納されている前記格納時刻の範囲内ではない場合に、被監視プログラムにループ障害が発生したと判定する第２判定部を備えることを特徴とする監視装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、監視プログラム、監視方法、および、監視装置に関し、特に、被監視プログラムに発生するループを検出することを可能とした監視プログラム、監視方法、および、監視装置に関する。
【背景技術】
【０００２】
プログラムの実行中に、そのプログラムの実行するアドレスが周期的に変化する状態（ループ状態）がある。ループがいつまでも終了しない（無限ループ）等の障害がこのループ状態時に発生する場合がある。このようなループに発生する障害を以下ではループ障害と呼ぶ。
【０００３】
ループ障害を検出する技術として、例えば、特許文献１および２の技術が知られている。
特許文献１では、プログラムカウンタの値を一定の時間間隔で取得し、その取得したプログラムカウンタ値が１通りの値しかとらなくなった場合に、ループ障害が発生していると判定している。
【０００４】
また、特許文献２では、プログラムカウンタそのものの値を使用する代わりに、そのプログラムカウンタの値を例えば、１０００で割った変換値を用いて、一定間隔で取得されるプログラムカウンタ値から得られる変換値の値が１通りの値しかとらなくなった場合に、ループ障害が発生したと判定している。
【０００５】
しかし、特許文献１の技術では、プログラムカウンタ値が１通りの値しかとらないようなループについては発生していることを検出できるが、例えば、２通り以上の値をとってループが発生している場合は検出できない。
【０００６】
また、特許文献２の技術では、予め定められた範囲の中でアドレス（プログラムカウンタ値）が周期的に変化する場合であれば、ループの発生を検出できる。しかし、その予め定められた範囲より広い範囲にまたがった（例えば、複数の関数のまたがった）ループについては、その発生が検出できない。
【０００７】
さらに、Ｉ／Ｏ処理等では、かなり狭い範囲でアドレスが変化して、ループを発生する場合（１文字入力の繰り返しなど）があるが、上記特許文献１および２の技術では、そのようなＩ／Ｏ処理等を問題のあるループとして誤検出する恐れがある。
【特許文献１】特開平１０−１６１９０８号公報  「マイクロコンピュータの暴走検出方法」
【特許文献２】特開平３−２９２５４５号公報  「プログラムループの検知回復装置」
【発明の開示】
【発明が解決しようとする課題】
【０００８】
本発明の課題は、被監視プログラムに発生するループ障害をより高い精度で検出することを可能とした監視プログラム、監視方法、および、監視装置を提供することである。
【課題を解決するための手段】
【０００９】
本発明の第１態様の監視プログラムは、被監視プログラムを監視する処理をコンピュータに実行させる監視プログラムにおいて、実行されている前記被監視プログラムのアドレスを予め定められたタイミングで取得してバッファに格納するステップと、前記バッファに格納された複数のアドレスの値またはそれらアドレスの値に基づいて算出された値、が何通りの異なる値をとるかを示す変化数が予め定められた閾値以内であるかを判定する第１判定ステップと、前記変化数が前記閾値以内である場合に、前記被監視プログラムのシステムコールの発行状況を取得するステップと、取得された前記被監視プログラムのシステムコールの発行状況を基に、被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しない場合に、被監視プログラムにループ障害が発生したと判定する第２判定ステップを前記コンピュータに実行させることを特徴とする監視プログラムである。
【００１０】
ここで、第１判定ステップにおいて変化数が閾値以内と判定された場合、すなわち、ループ状態が検出された場合に、さらに、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しないことを判定している。これにより、被監視プログラムが正常に動作している証拠の１つである、システムコールが、目安としての時間（バッファに格納される時刻の範囲内）が経過しても、発行されていないことになり、ループ障害の疑いが持たれる場合を検出できる（ループ障害が検出できる）。
【００１１】
なお、ループ状態が検出された場合に、さらに、被監視プログラムが現在システムコールを発行中でないことを併せて判定することで、Ｉ／Ｏ処理等で、かなり狭い範囲でアドレスが変化して、ループを発生する場合を、ループ障害として誤検出することを回避できる。また、第１判定ステップの変化数を、例えば、取得したアドレスの上位側ビットについて見ることにより、広い範囲にまたがった（例えば、複数の関数のまたがった）ループについても、ループが検出でき、よって、システムコールに関する判定と併せることで、その広い範囲にまたがったループについてもループ障害が検出できる。以上のことから、ループ障害をより高い精度で検出することが可能となる。
【００１２】
本発明の第２態様の監視プログラムは、被監視プログラムを監視する処理をコンピュータに実行させる監視プログラムにおいて、実行されている前記被監視プログラムのアドレスを予め定められたタイミングで取得してバッファに格納するステップと、前記バッファに格納された複数のアドレスの値またはそれらアドレスの値に基づいて算出された値、が何通りの異なる値をとるかを示す変化数が予め定められた閾値以内であるかを判定する第１判定ステップと、前記変化数が前記閾値以内である場合に、前記被監視プログラムのシステムコールの発行状況を取得するステップと、取得された前記被監視プログラムのシステムコールの発行状況を基に、前記被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しないかどうかを判定する第２判定ステップと、前記第２判定ステップにおいて、前記被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しないと判定された場合に、ループ障害が発生したと仮判定するループ障害仮判定ステップと、前記ループ障害の仮判定が行われてから、予め定められた監視継続時間、前記変化数が前記閾値以内である状態が続き、システムコールを発行中でない状態が続き、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しない状態が続いた場合は、ループ障害が発生したと判定し、前記ループ障害の仮判定が行われてから、予め定められた監視継続時間内のいずれかの時点で、前記変化数が前記閾値を超えるか、システムコールが発行中の状態となるか、または、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在するかした場合は、前記ループ障害の仮判定を取り消す判定を行うループ障害判定ステップ、を前記コンピュータに実行させることを特徴とする監視プログラムである。
【００１３】
ここで、第１判定ステップにおいて変化数が閾値以内と判定された場合、すなわち、ループ状態が検出された場合に、さらに、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しないことを判定している。これにより、被監視プログラムが正常に動作している証拠の１つである、システムコールが、目安としての時間（バッファに格納される時刻の範囲内）が経過しても、発行されていないことになり、ループ障害の疑いが持たれる場合を検出できる（ループ障害が検出できる）。
【００１４】
なお、ループ状態が検出された場合に、さらに、被監視プログラムが現在システムコールを発行中でないことを併せて判定することで、Ｉ／Ｏ処理等で、かなり狭い範囲でアドレスが変化して、ループを発生する場合を、ループ障害として誤検出することを回避できる。また、第１判定ステップの変化数を、例えば、取得したアドレスの上位側ビットについて見ることにより、広い範囲にまたがった（例えば、複数の関数のまたがった）ループについても、ループが検出でき、よって、システムコールに関する判定と併せることで、その広い範囲にまたがったループについてもループ障害が検出できる。
【００１５】
さらに、第１判定ステップおよび第２判定ステップの判定結果が、予め定められた監視継続時間だけ持続する場合に、ループ障害が検出されたと判定しているので、例えば、ループ状態の時間が長いだけで、正常に動作するものを、ループ障害として誤検出することを回避できる。以上のことから、ループ障害をより高い精度で検出することが可能となる。
【００１６】
本発明の第３態様の監視方法は、被監視プログラムを監視する処理をコンピュータが実行する監視方法において、実行されている前記被監視プログラムのアドレスを予め定められたタイミングで取得してバッファに格納するステップと、前記バッファに格納された複数のアドレスの値またはそれらアドレスの値に基づいて算出された値、が何通りの異なる値をとるかを示す変化数が予め定められた閾値以内であるかを判定する第１判定ステップと、前記変化数が前記閾値以内である場合に、前記被監視プログラムのシステムコールの発行状況を取得するステップと、取得された前記被監視プログラムのシステムコールの発行状況を基に、被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しない場合に、被監視プログラムにループ障害が発生したと判定する第２判定ステップを備えることを特徴とする監視方法である。
【００１７】
本発明の第４態様の監視方法は、被監視プログラムを監視する処理をコンピュータが実行する監視方法において、実行されている前記被監視プログラムのアドレスを予め定められたタイミングで取得してバッファに格納するステップと、前記バッファに格納された複数のアドレスの値またはそれらアドレスの値に基づいて算出された値、が何通りの異なる値をとるかを示す変化数が予め定められた閾値以内であるかを判定する第１判定ステップと、前記変化数が前記閾値以内である場合に、前記被監視プログラムのシステムコールの発行状況を取得するステップと、取得された前記被監視プログラムのシステムコールの発行状況を基に、前記被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しないかどうかを判定する第２判定ステップと、前記第２判定ステップにおいて、前記被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しないと判定された場合に、ループ障害が発生したと仮判定するループ障害仮判定ステップと、前記ループ障害の仮判定が行われてから、予め定められた監視継続時間、前記変化数が前記閾値以内である状態が続き、システムコールを発行中でない状態が続き、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しない状態が続いた場合は、ループ障害が発生したと判定し、前記ループ障害の仮判定が行われてから、予め定められた監視継続時間内のいずれかの時点で、前記変化数が前記閾値を超えるか、システムコールが発行中の状態となるか、または、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在するかした場合は、前記ループ障害の仮判定を取り消す判定を行うループ障害判定ステップ、を備えることを特徴とする監視方法である。
【００１８】
本発明の第５態様の監視装置は、被監視プログラムを監視する処理を実行する監視装置において、実行されている前記被監視プログラムのアドレスを予め定められたタイミングで取得してバッファに格納するアドレス取得部と、前記バッファに格納された複数のアドレスの値またはそれらアドレスの値に基づいて算出された値、が何通りの異なる値をとるかを示す変化数が予め定められた閾値以内であるかを判定する第１判定ステップと、前記変化数が前記閾値以内である場合に、前記被監視プログラムのシステムコールの発行状況を取得するシステムコール発行状況取得部と、取得された前記被監視プログラムのシステムコールの発行状況を基に、被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しない場合に、被監視プログラムにループ障害が発生したと判定する第２判定部を備えることを特徴とする監視装置である。
【発明の効果】
【００１９】
本発明によれば、広い範囲にまたがった（例えば、複数の関数のまたがった）ループについても、ループ障害の発生が検出できる。
また、本発明によれば、Ｉ／Ｏ処理等で、かなり狭い範囲でアドレスが変化して、ループを発生する場合を、ループ障害として誤検出することを回避できる。
【００２０】
また、本発明によれば、ループ状態の時間が長いだけで、正常に動作するものを、ループ障害として誤検出することを回避できる。
【発明を実施するための最良の形態】
【００２１】
以下、本発明の実施の形態を、図面を参照しながら詳細に説明する。
図１は、本発明の各実施形態に共通する監視システムの全体構成図である。
図１において、被監視プログラム（被監視プロセス）１１は、本発明の監視処理部（監視プロセス）１２によって、その動作が監視されるプログラムである。この被監視プログラムは、オペレーティングシステム（ＯＳ）１３上で実行されている。
【００２２】
ＯＳ１３は、自身の上で実行されるプログラムが発行するシステムコールの発行状況を監視する機能（システムコール発行状況監視機能）１４を備える。この監視機能１４は、自身の上で実行されるプログラムが発行したシステムコールの履歴情報を保存する。この履歴は、プログラム（プロセス）のＩＤ、システムコールの発行時刻（ＯＳがプログラムからシステムコールを受け取った時刻）、システムコールのステータス（終了（正常終了、エラー終了）したか、発行中（ＯＳからの復帰命令待ち）か、等）、を含む。
【００２３】
また、ＯＳ１３は、自身の上で実行されるプログラム上のどのアドレスがＣＰＵによって現在実行されているかを示すプログラムカウンタ値を取得する機能（プログラムカウンタ値取得機能）１５を備える。この取得機能１５は、監視処理部１２からのプログラムカウンタ値の取得要求を受信すると、その取得要求を被監視プログラム（被監視プロセス）１１に出力する。被監視プログラム１１は、受信した取得要求に対応して、その時点でＣＰＵが実行（フェッチ）しているアドレスの値（プログラムカウンタの値）を取得機能１５に送信する。取得機能１５は、このプログラムカウンタの値を監視処理部１２に送信する。
【００２４】
図２は、本発明の第１実施形態の監視処理部の構成を示すブロック図である。
図２に示すように、監視処理部２０は、予め定められたタイミングで、実行中の被監視プログラムのアドレス（プログラムカウンタ値）を取得してバッファ部２３に格納するプログラムカウンタ値取得部２１、取得されたプログラムカウンタ値を基に、そのプログラムカウンタ値から上位側ビット（変換値）を取り出してバッファ部２３の対応する項目に書き込む変換値算出部２４、バッファ部２３に格納された複数のアドレスの上位側ビットを基に、それらアドレスの値またはそれらアドレスの値に基づいて算出された値が何通りの異なる値をとるかを示す変化数が予め定められた閾値以内であるかを判定することでループを検出するループ検出部２５、その変化数がその閾値以内であると判定された場合に、システムコール発行状況取得部２２を介して、被監視プログラムのシステムコールの発行状況を取得し、その発行状況を基に、被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しない場合に、被監視プログラムにループ障害が発生したと判定するループ障害判定部２６、被監視プログラムのシステムコールの発行状況の取得要求を、ＯＳ１３のシステムコール発行状況監視機能１４に出力して、その監視機能１４から、被監視プログラムのシステムコールの発行状況を取得するシステムコール発行状況取得部２２、ループ障害判定部２６によってループ障害が発生したと判定された場合に、ループ障害が発生したことを示すメッセージ等を出力する出力部２７、を備える。
【００２５】
図３は、図２のバッファ部２３に格納されるデータ例（その１）を示す図である。
図３に示されるように、バッファ部２３は、先入れ先出し方式のＦＩＦＯ（First-In First-Out）である。このバッファ部２３は、予め定められた数のデータ（図３では、９個のデータ）を格納可能なバッファである。
【００２６】
バッファに格納されるデータは、時間（プログラムカウンタ値がバッファ部２３に格納された時刻）、プログラムカウンタ値（ＰＣ値）、変換値（プログラムカウンタ値から下位側ビットを切り捨てて得られる上位側ビットの値）、の各項目を備える。
【００２７】
上記変換値は、例えば、プログラムカウンタ値を１０００で割った値を整数型の変数に代入することにより得られる。
なお、図２からは定かでないが、ユーザは、監視処理部２０に付属のユーザインターフェイス部（図２では、不図示）を介して、以下の項目を指定する。
（１）プログラムカウンタ値取得間隔（監視処理部２０がＯＳ１３のプログラムカウンタ値取得機能１５を介してプログラムカウンタ値を取得する時間間隔）
（２）監視テーブルサイズ（バッファ部２３に格納するデータ数）
（３）プログラムカウンタ値の変化数（バッファ部２３内に保持されるプログラムカウンタ値の上位側ビットが何通りの異なる値をとるかという数がこの変化数未満であれば、被監視プログラムはループ状態にあるものとみなす閾値）
（４）被監視プログラム（被監視プロセス）
図４Ａおよび図４Ｂは、本発明の第１実施形態の監視処理部によって実行される監視処理のフローチャートである。
【００２８】
まず、図４Ａにおいて、ステップＳ１０１で、初期化処理が実行される。この初期化処理では、現在時刻をタイマ監視処理部（図２では、不図示）がタイマ監視時に参照する参照変数に設定するとともに、上述の監視テーブルサイズ分の領域が監視テーブル（バッファ）用の領域としてメモリ上に確保される。
【００２９】
そして、ステップＳ１０２で、タイマ監視処理部によるタイマ監視処理が実行される。このタイマ監視処理では、ステップＳ１０１で参照変数に設定された値と、ステップＳ１０２の時点での現在時刻との差が算出され、その差が、上述のプログラムカウンタ値取得間隔より短いうちは、差の算出を繰り返し、その差が、プログラムカウンタ値取得間隔に一致したときに、参照変数に、その時点での時刻を設定するとともに、ステップＳ１０３に進む。
【００３０】
ステップＳ１０３では、プログラムカウンタ値取得部２１によって、実行中の被監視プログラムのアドレス（プログラムカウンタ値）が、ＯＳ１３の既存の機能（プログラムカウンタ値取得機能）１５を介して取得され、バッファ部（監視テーブル）２３の末尾に追加される。
【００３１】
すなわち、この監視テーブルに追加されたデータは、図３に示すように、監視テーブルへの書き込み時刻（ステップＳ１０２の参照変数に設定された現在時刻）、プログラムカウンタ値、変換値の各項目を備える。
【００３２】
そして、ステップＳ１０４で、監視テーブルに、上述の監視テーブルサイズに指定された数のデータが格納されたかが判定される。なお、監視テーブルへのデータ書き込みが一定の間隔（プログラムカウンタ値取得間隔）毎に行われることを考えると、ステップＳ１０４で、監視テーブルに一定時間分のデータがあるかが判定される、ということもできる。
【００３３】
ステップＳ１０４において、監視テーブルに、監視テーブルサイズに指定された数のデータが格納されていなければ、ステップＳ１０２に戻る。
一方、ステップＳ１０４において、監視テーブルに、監視テーブルサイズに指定された数のデータが格納されていれば、ステップＳ１０５において、監視テーブル上の変換値が何通りの異なる値をとるかという数が、上述のプログラムカウンタ値の変化数（閾値）以上であるかが判定される。
【００３４】
図５Ａ、図５Ｂ、および、図５Ｃは、プログラムカウンタ値の変化数＝４に設定した場合の、監視テーブルのデータ例を示す図である。図５Ａの監視テーブルでは、変換値は、４以上の異なる値をとるため、被監視プログラムはループ状態にはないと判定される。図５Ｂの監視テーブルでは、変換値は、３つの異なる値をとるため、被監視プログラムは、例えば、数個の関数をまたいだループ状態にあるものと判定される。図５Ｃの監視テーブルでは、変換値は、１つの値しかとらないため、被監視プログラムは、例えば、図５Ｂの数個の関数をまたいだループ状態より、狭い範囲でループ状態にあるものと判定される。
【００３５】
ステップＳ１０５において、監視テーブル上の変換値が何通りの異なる値をとるかを示す数が、プログラムカウンタ値の変化数（閾値）以上であると判定されれば、ステップＳ１０２に戻る。
【００３６】
一方、監視テーブル上の変換値が何通りの異なる値をとるかを示す数が、プログラムカウンタ値の変化数（閾値）より小さいと判定されれば、ステップＳ１０６において、システムコール発行状況取得部２２によって、被監視プログラムのシステムコールの発行状況の取得要求が、ＯＳ１３のシステムコール発行状況監視機能１４に出力され、その監視機能１４から、被監視プログラムのシステムコールの発行状況が取得される。
【００３７】
続いて、図４Ｂに移り、この取得された被監視プログラムのシステムコールの発行状況を基に、ステップＳ１０７、Ｓ１０８、Ｓ１０９での判定がループ障害判定部２６によって行われる。まず、ステップＳ１０７では、ループ障害判定部２６によって、被監視プログラムがシステムコールを発行中であるか、すなわち、ＯＳからの復帰命令待ちであるかが判定される。
【００３８】
ステップＳ１０７において、被監視プログラムがシステムコールを発行中であると判定された場合、ステップＳ１０２に戻る。Ｉ／Ｏ処理等でループが形成されている場合が、この場合に含まれる。
【００３９】
一方、ステップＳ１０７において、被監視プログラムがシステムコールを発行中でないと判定された場合、ステップＳ１０８において、ループ障害判定部２６によって、ループ時間内にシステムコールが発行されたかが判定される。なお、「ループ時間内」とは、監視テーブルにデータが書き込まれた時刻の範囲内という意味である。
【００４０】
ステップＳ１０８において、ループ時間内にシステムコールが発行されていないと判定された場合、すなわち、ループ時間以前にシステムコールが発行されたと判定された場合、ステップＳ１１０に進む。
【００４１】
一方、ステップＳ１０８において、ループ時間内にシステムコールが発行されたと判定された場合、ステップＳ１０９において、そのループ時間内に発行されたシステムコールが正常終了しているかどうかが判定される。
【００４２】
ステップＳ１０９において、ループ時間内に発行されたシステムコールが正常終了していると判定された場合、ステップＳ１０２に戻る。
ステップＳ１０９において、ループ時間内に発行されたシステムコールがエラー終了していると判定された場合、ステップＳ１１０に進む。
【００４３】
なお、ステップＳ１０９の判定を行うかどうかをユーザが上述のユーザインターフェイスを介して指定できるようにしてもよい。ステップＳ１０９の判定を行わない場合、ステップＳ１０８において、ループ時間内にシステムコールが発行されたと判定された場合に直ちに、ステップＳ１０２に戻る。
【００４４】
ステップＳ１１０では、資料採取が行われる。資料採取では、以下の情報が出力部２７を介して出力される。
１．バッファ部３３に保持される複数件のデータ。
２．最近取得したシステムコールについての情報。
【００４５】
ここで、上記１．は、ループ範囲を特定するのに有用な情報である。また、上記２．は、ループ処理直前にプログラムが何を処理していたのかを特定するのに有用な情報である。
【００４６】
そして、続く、ステップＳ１１１で、ループ障害が発生したことを示すメッセージが、出力部２７によって出力され、ステップＳ１０２に戻る。
続いて、本発明の第２実施形態について説明する。
【００４７】
第１実施形態でループ障害と判定されたものの中には、ループ状態（閾値より小さい数のアドレスを周期的に繰り返す状態）の時間が長いだけで、正常に動作するものも含まれる場合がある。第２実施形態では、そのようなものをループ障害の判定から除くようにしている。
【００４８】
図６は、本発明の第２実施形態の監視処理部の構成を示すブロック図である。
図６に示すように、監視処理部３０は、予め定められたタイミングで、実行中の被監視プログラムのアドレス（プログラムカウンタ値）を取得してバッファ部３３に格納するプログラムカウンタ値取得部３１、取得されたプログラムカウンタ値を基に、そのプログラムカウンタ値から上位側ビット（変換値）を取り出してバッファ部３３の対応する項目に書き込む変換値算出部３４、バッファ部３３に格納された複数のアドレスの上位側ビットを基に、それらアドレスの値またはそれらアドレスの値に基づいて算出された値が何通りの異なる値をとるかを示す変化数が予め定められた閾値以内であるかを判定することで、ループを検出するループ検出部３６、その変化数がその閾値以内であると判定された場合に、システムコール発行状況取得部３２を介して、被監視プログラムのシステムコールの発行状況を取得し、その発行状況を基に、被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファ部３３に格納される時刻の範囲内に存在しないかどうかを判定するループ障害仮判定部３７、被監視プログラムのシステムコールの発行状況の取得要求を、ＯＳ１３のシステムコール発行状況監視機能１４に出力して、その監視機能１４から、被監視プログラムのシステムコールの発行状況を取得するシステムコール発行状況取得部３２、ループ検出部３６およびループ障害仮判定部３７から構成されるループ障害判定部３５によってループ障害が発生したと判定された場合に、ループ障害が発生したことを示すメッセージ等を出力する出力部３８、ループ障害判定部３５によってループ障害が発生したと判定された場合に、バッファ部３３のバッファサイズを適正値に変更するバッファサイズ変更部３９、を備える。
【００４９】
ここで、ループ障害判定部３５は、ループ障害仮判定部３７によって、被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、バッファ部３３に格納される時刻の範囲内に存在しないと判定された場合に、ループ障害が発生したと仮判定して、監視継続のためのタイマを起動するとともに、そのループ障害の仮判定が行われてから、予め定められた監視継続時間、変化数が閾値以内である状態が続き、システムコールを発行中でない状態が続き、かつ、システムコールの最終発行時刻が、バッファ部３３に格納される時刻の範囲内に存在しない状態が続いた場合は、ループ障害が発生したと判定し、そのループ障害の仮判定が行われてから、予め定められた監視継続時間内のいずれかの時点で、変化数が閾値を超えるか、システムコールが発行中の状態となるか、または、システムコールの最終発行時刻が、バッファ部３３に格納される時刻の範囲内に存在するかした場合は、そのループ障害の仮判定を取り消す判定を行う。
【００５０】
上記ループ障害の仮判定がループ障害判定部３５によって取り消された場合、バッファ部３３のバッファサイズが、ループ障害判定を行うのに十分な大きさではなかったものとみなされる。すなわち、ループ障害判定部３５は、変化数が閾値を超えるか、システムコールが発行中の状態となるか、または、システムコールの最終発行時刻が、バッファ部３３に格納される時刻の範囲内に存在するかした、時刻をバッファサイズ変更部３９に通知する。バッファサイズ変更部３９は、その通知された時刻の値を、アドレスを取得するタイミング（時間間隔）で割ることで、バッファ部３３の段数の増分を算出して、バッファ部３３に通知することで、バッファ部３３のバッファサイズの変更を行う。
【００５１】
なお、図６からは定かでないが、ユーザは、監視処理部３０に付属のユーザインターフェイス部（図６では、不図示）を介して、以下の項目を指定する。
（１）プログラムカウンタ値取得間隔（監視処理部３０がＯＳ１３のプログラムカウンタ値取得機能１５を介してプログラムカウンタ値を取得する時間間隔）
（２）監視テーブルサイズ（バッファ部３３に格納するデータ数）
（３）プログラムカウンタ値の変化数（バッファ部３３内に保持されるプログラムカウンタ値の上位側ビットが何通りの異なる値をとるかという数がこの変化数未満であれば、被監視プログラムはループ状態にあるものとみなす閾値）
（４）被監視プログラム（被監視プロセス）
（５）監視継続時間（ループ障害が発生したと仮判定されてから、その発生時点での状況が監視継続時間だけ続いた場合、ループ障害が発生したものと判定する）
図７Ａ、図７Ｂ、および、図７Ｃは、本発明の第２実施形態の監視処理部によって実行される監視処理のフローチャートである。
【００５２】
まず、図７Ａにおいて、ステップＳ２０１で、初期化処理が実行される。この初期化処理では、現在時刻をタイマ監視処理部（図６では、不図示）がタイマ監視時に参照する参照変数に設定し、上述の監視継続時間中かを示す監視継続フラグを、「監視継続中ではない」という値に設定し、かつ、上述の監視テーブルサイズ分の領域が監視テーブル（バッファ）用の領域としてメモリ上に確保される。
【００５３】
そして、ステップＳ２０２で、タイマ監視処理部によるタイマ監視処理が実行される。このタイマ監視処理では、ステップＳ２０１で参照変数に設定された値と、ステップＳ２０２の時点での現在時刻との差が算出され、その差が、上述のプログラムカウンタ値取得間隔より短いうちは、差の算出を繰り返し、その差が、プログラムカウンタ値取得間隔に一致したときに、参照変数に、その時点での時刻を設定するとともに、ステップＳ２０３に進む。
【００５４】
ステップＳ２０３では、プログラムカウンタ値取得部２１によって、実行中の被監視プログラムのアドレス（プログラムカウンタ値）が、ＯＳ１３の既存の機能（プログラムカウンタ値取得機能）１５を介して取得され、バッファ部（監視テーブル）２３の末尾に追加される。
【００５５】
すなわち、この監視テーブルに追加されたデータは、監視テーブルへの書き込み時刻（ステップＳ２０２の参照変数に設定された現在時刻）、プログラムカウンタ値、変換値の各項目を備える。
【００５６】
そして、ステップＳ２０４で、監視テーブルに、上述の監視テーブルサイズに指定された数のデータが格納されたかが判定される。なお、監視テーブルへのデータ書き込みが一定の間隔（プログラムカウンタ値取得間隔）毎に行われることを考えると、ステップＳ１０４で、監視テーブルに一定時間分のデータがあるかが判定される、ということもできる。
【００５７】
ステップＳ２０４において、監視テーブルに、監視テーブルサイズに指定された数のデータが格納されていなければ、ステップＳ１０２に戻る。
一方、ステップＳ２０４において、監視テーブルに、監視テーブルサイズに指定された数のデータが格納されていれば、ステップＳ２０５において、監視テーブル上の変換値が何通りの値をとるかを示す数が、上述のプログラムカウンタ値の変化数（閾値）以上であるかが判定される。
【００５８】
ステップＳ２０５において、監視テーブル上の変換値が何通りの値をとるかを示す数が、プログラムカウンタ値の変化数（閾値）以上であると判定されれば、ステップＳ２１４に進む。
【００５９】
一方、監視テーブル上の変換値が何通りの値をとるかを示す数が、プログラムカウンタ値の変化数（閾値）より小さいと判定されれば、ステップＳ２０６において、システムコール発行状況取得部２２によって、被監視プログラムのシステムコールの発行状況の取得要求が、ＯＳ１３のシステムコール発行状況監視機能１４に出力され、その監視機能１４から、被監視プログラムのシステムコールの発行状況が取得される。
【００６０】
続いて、図７Ｂに移り、この取得された被監視プログラムのシステムコールの発行状況を基に、ステップＳ２０７、Ｓ２０８、Ｓ２０９での判定がループ障害判定部２６によって行われる。まず、ステップＳ２０７では、ループ障害判定部２６によって、被監視プログラムがシステムコールを発行中であるか、すなわち、ＯＳからの復帰命令待ちであるかが判定される。
【００６１】
ステップＳ２０７において、被監視プログラムがシステムコールを発行中であると判定された場合、ステップＳ２１４に進む。Ｉ／Ｏ処理等でループが形成されている場合が、この場合に含まれる。
【００６２】
一方、ステップＳ２０７において、被監視プログラムがシステムコールを発行中でないと判定された場合、ステップＳ２０８において、ループ障害判定部２６によって、ループ時間内にシステムコールが発行されたかが判定される。なお、「ループ時間内」とは、監視テーブルにデータが書き込まれた時刻の範囲内という意味である。
【００６３】
ステップＳ２０８において、ループ時間内にシステムコールが発行されていないと判定された場合、すなわち、ループ時間以前にシステムコールが発行されたと判定された場合、ステップＳ２１０に進む。
【００６４】
一方、ステップＳ２０８において、ループ時間内にシステムコールが発行されたと判定された場合、ステップＳ２０９において、監視継続フラグの値が、「監視継続中である」という値になっているか、または、監視継続そのループ時間内に発行されたシステムコールが正常終了しているかが判定される。
【００６５】
ステップＳ２０９において、ループ時間内に発行されたシステムコールが正常終了している場合、または、監視継続フラグの値が、「監視継続中である」という値になっている場合は、ステップＳ２１４に進む。
【００６６】
ステップＳ２０９において、ループ時間内に発行されたシステムコールがエラー終了していて、かつ、監視継続フラグの値が、「監視継続中である」という値になっていない場合は、ステップＳ２１０に進む。
【００６７】
なお、ステップＳ２０９の判定を行うかどうかをユーザが上述のユーザインターフェイスを介して指定できるようにしてもよい。ステップＳ２０９の判定を行わない場合、ステップＳ２０８において、ループ時間内にシステムコールが発行されたと判定された場合に直ちに、ステップＳ２１４に進む。
【００６８】
ステップＳ２１０では、監視継続フラグの値が、「監視継続中である」という値になっているかが判定される。ステップＳ２１０の制御に初回に入った場合は、この監視継続フラグの値は、「監視継続中ではない」という値に初期化されているので、ステップＳ２１０では、監視継続フラグの値が、「監視継続中である」という値になっていないと判定され、ステップＳ２１１において、監視継続状態に移行する。すなわち、ループ障害判定部３５によって、監視継続のためのタイマが起動されるとともに、監視継続フラグの値が、「監視継続中である」という値に変更される。
【００６９】
そして、ステップＳ２１２において、資料採取が行われる。資料採取では、以下の情報が出力部３８を介して出力される。
１．バッファ部３３に保持される複数件のデータ。
２．最近取得したシステムコールについての情報。
【００７０】
ここで、上記１．は、ループ範囲を特定するのに有用な情報である。また、上記２．は、ループ処理直前にプログラムが何を処理していたのかを特定するのに有用な情報である。
【００７１】
そして、続く、ステップＳ２１３で、ループ障害が発生したことを示すメッセージが、出力部３８によって出力され、ステップＳ２０２に戻る。
一方、ステップＳ２１０で、監視継続フラグの値が、「監視継続中である」という値になっていると判定された場合、直ちにステップＳ２０２に戻る。これは、監視継続状態のときに「ループ障害が発生した」旨のメッセージを繰り返し出力することを避けるためである。
【００７２】
続く、図７Ｃでは、まず、ステップＳ２１４において、監視継続フラグの値が、「監視継続中である」という値になっているかが判定される。
ステップＳ２１４は、ステップＳ２０５、Ｓ２０７、Ｓ２０９から制御が渡されるステップである。よって、ここで、監視継続フラグの値が、「監視継続中である」という値になっていると判定された場合は、監視継続状態のときに、ループ障害と仮決定した時点での条件を満たさなくなったこと、すなわち、変化数が閾値を超えるか、システムコールが発行中の状態となるか、または、システムコールの最終発行時刻が、バッファ部３３に格納される時刻の範囲内に存在するかした、ことを意味する。
【００７３】
この場合、ステップＳ２１５において、監視継続状態から非監視継続状態への移行が行われる。すなわち、すなわち、ループ障害判定部３５によって、その時点での監視継続のためのタイマの値がバッファサイズ変更部３９に出力されるとともに、監視継続フラグの値が、「監視継続中ではない」という値に変更される。
【００７４】
続く、ステップＳ２１６では、バッファサイズ変更部３９によって、その通知された時刻の値が、アドレスを取得するタイミング（プログラムカウンタ値取得間隔）で割られることで、バッファ部３３の段数の増分が算出されて、バッファ部３３に通知されることで、バッファ部３３のバッファサイズの変更が行われる。
【００７５】
ステップＳ２１４において、監視継続フラグの値が、「監視継続中である」という値になっていないと判定された場合、ステップＳ２０２に戻る。
図８は、記憶媒体例を示す図である。
【００７６】
本発明の監視処理は、情報処理装置６１によって実現することが可能である。本発明の処理のためのプログラムやデータは、情報処理装置６１の記憶装置６５から情報処理装置６１のメモリにロードして実行することも、可搬型記憶媒体６３から情報処理装置６１のメモリにロードして実行することも、外部記憶装置６２からネットワーク６６を介して情報処理装置６１のメモリにロードして実行することも可能である。
【００７７】
本発明は下記構成でもよい。
（付記１）  被監視プログラムを監視する処理をコンピュータに実行させる監視プログラムにおいて、
実行されている前記被監視プログラムのアドレスを予め定められたタイミングで取得してバッファに格納するステップと、
前記バッファに格納された複数のアドレスの値またはそれらアドレスの値に基づいて算出された値、が何通りの異なる値をとるかを示す変化数が予め定められた閾値以内であるかを判定する第１判定ステップと、
前記変換値が前記閾値以内である場合に、前記被監視プログラムのシステムコールの発行状況を取得するステップと、
取得された前記被監視プログラムのシステムコールの発行状況を基に、被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しない場合に、被監視プログラムにループ障害が発生したと判定する第２判定ステップを前記コンピュータに実行させることを特徴とする監視プログラム。
（付記２）  前記第２判定ステップにおいて、被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しない場合でも、前記被監視プログラムが発行するシステムコールが前記バッファに格納される時刻の範囲内に正常終了していた場合は、ループ障害が発生していないと判定することを特徴とする付記１記載の監視プログラム。
（付記３）  被監視プログラムを監視する処理をコンピュータに実行させる監視プログラムにおいて、
実行されている前記被監視プログラムのアドレスを予め定められたタイミング（時間間隔）で取得してバッファに格納するステップと、
前記バッファに格納された複数のアドレスの値またはそれらアドレスの値に基づいて算出された値、が何通りの異なる値をとるかを示す変化数が予め定められた閾値以内であるかを判定する第１判定ステップと、
前記変換値が前記閾値以内である場合に、前記被監視プログラムのシステムコールの発行状況を取得するステップと、
取得された前記被監視プログラムのシステムコールの発行状況を基に、前記被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しないかどうかを判定する第２判定ステップと、
前記第２判定ステップにおいて、前記被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しないと判定された場合に、ループ障害が発生したと仮判定するループ障害仮判定ステップと、
前記ループ障害の仮判定が行われてから、予め定められた監視継続時間、前記変換値が前記閾値以内である状態が続き、システムコールを発行中でない状態が続き、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しない状態が続いた場合は、ループ障害が発生したと判定し、
前記ループ障害の仮判定が行われてから、予め定められた監視継続時間内のいずれかの時点で、前記変換値が前記閾値を超えるか、システムコールが発行中の状態となるか、または、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在するかした場合は、前記ループ障害の仮判定を取り消す判定を行うループ障害判定ステップ、を前記コンピュータに実行させることを特徴とする監視プログラム。
（付記４）  前記ループ障害判定ステップにおいて、前記仮決定を取り消す判定が行われた場合に、変化数が閾値を超えるか、システムコールが発行中の状態となるか、または、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在するかした、時刻の値を、アドレスを取得するタイミング（時間間隔）で割ることで、前記バッファの段数の増分を算出する段数増分算出ステップと、
前記算出された増分だけ前記バッファの段数を増やすバッファサイズ変更ステップをさらに備えることを特徴とする付記３記載の監視プログラム。
（付記５）  被監視プログラムを監視する処理をコンピュータが実行する監視方法において、
実行されている前記被監視プログラムのアドレスを予め定められたタイミングで取得してバッファに格納するステップと、
前記バッファに格納された複数のアドレスの値またはそれらアドレスの値に基づいて算出された値、が何通りの異なる値をとるかを示す変化数が予め定められた閾値以内であるかを判定する第１判定ステップと、
前記変換値が前記閾値以内である場合に、前記被監視プログラムのシステムコールの発行状況を取得するステップと、
取得された前記被監視プログラムのシステムコールの発行状況を基に、被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しない場合に、被監視プログラムにループ障害が発生したと判定する第２判定ステップを備えることを特徴とする監視方法。
（付記６）  前記第２判定ステップにおいて、前記被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しない場合でも、前記被監視プログラムが発行するシステムコールが前記バッファに格納される時刻の範囲内に正常終了していた場合は、ループ障害が発生していないと判定することを特徴とする付記５記載の監視方法。
（付記７）  被監視プログラムを監視する処理をコンピュータが実行する監視方法において、
実行されている前記被監視プログラムのアドレスを予め定められたタイミングで取得してバッファに格納するステップと、
前記バッファに格納された複数のアドレスの値またはそれらアドレスの値に基づいて算出された値、が何通りの異なる値をとるかを示す変化数が予め定められた閾値以内であるかを判定する第１判定ステップと、
前記変換値が前記閾値以内である場合に、前記被監視プログラムのシステムコールの発行状況を取得するステップと、
取得された前記被監視プログラムのシステムコールの発行状況を基に、前記被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しないかどうかを判定する第２判定ステップと、
前記第２判定ステップにおいて、前記被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しないと判定された場合に、ループ障害が発生したと仮判定するループ障害仮判定ステップと、
前記ループ障害の仮判定が行われてから、予め定められた監視継続時間、前記変換値が前記閾値以内である状態が続き、システムコールを発行中でない状態が続き、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しない状態が続いた場合は、ループ障害が発生したと判定し、
前記ループ障害の仮判定が行われてから、予め定められた監視継続時間内のいずれかの時点で、前記変換値が前記閾値を超えるか、システムコールが発行中の状態となるか、または、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在するかした場合は、前記ループ障害の仮判定を取り消す判定を行うループ障害判定ステップ、を備えることを特徴とする監視方法。
（付記８）  前記ループ障害判定ステップにおいて、前記仮決定を取り消す判定が行われた場合に、変化数が閾値を超えるか、システムコールが発行中の状態となるか、または、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在するかした、時刻の値を、アドレスを取得するタイミング（時間間隔）で割ることで、前記バッファの段数の増分を算出する段数増分算出ステップと、
前記算出された増分だけ前記バッファの段数を増やすバッファサイズ変更ステップをさらに備えることを特徴とする付記７記載の監視方法。
（付記９）  被監視プログラムを監視する処理を実行する監視装置において、
実行されている前記被監視プログラムのアドレスを予め定められたタイミングで取得してバッファに格納するアドレス取得部と、
前記バッファに格納された複数のアドレスの値またはそれらアドレスの値に基づいて算出された値、が何通りの異なる値をとるかを示す変化数が予め定められた閾値以内であるかを判定する第１判定ステップと、
前記変換値が前記閾値以内である場合に、前記被監視プログラムのシステムコールの発行状況を取得するシステムコール発行状況取得部と、
取得された前記被監視プログラムのシステムコールの発行状況を基に、被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しない場合に、被監視プログラムにループ障害が発生したと判定する第２判定部を備えることを特徴とする監視装置。
（付記１０）  前記第２判定部は、前記被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しない場合でも、前記被監視プログラムが発行するシステムコールが前記バッファに格納される時刻の範囲内に正常終了していた場合は、ループ障害が発生していないと判定することを特徴とする付記９記載の監視装置。
（付記１１）  被監視プログラムを監視する処理を実行する監視装置において、
実行されている前記被監視プログラムのアドレスを予め定められたタイミングで取得してバッファに格納するアドレス取得部と、
前記バッファに格納された複数のアドレスの値またはそれらアドレスの値に基づいて算出された値、が何通りの異なる値をとるかを示す変化数が予め定められた閾値以内であるかを判定する第１判定部と、
前記変換値が前記閾値以内である場合に、前記被監視プログラムのシステムコールの発行状況を取得するシステムコール発行状況取得部と、
取得された前記被監視プログラムのシステムコールの発行状況を基に、前記被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しないかどうかを判定する第２判定部と、
前記第２判定部において、前記被監視プログラムが現在システムコールを発行中でなく、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しないと判定された場合に、ループ障害が発生したと仮判定するループ障害仮判定部と、
前記ループ障害の仮判定が行われてから、予め定められた監視継続時間、前記変換値が前記閾値以内である状態が続き、システムコールを発行中でない状態が続き、かつ、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在しない状態が続いた場合は、ループ障害が発生したと判定し、
前記ループ障害の仮判定が行われてから、予め定められた監視継続時間内のいずれかの時点で、前記変換値が前記閾値を超えるか、システムコールが発行中の状態となるか、または、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在するかした場合は、前記ループ障害の仮判定を取り消す判定を行うループ障害判定部、を備えることを特徴とする監視装置。
（付記１２）  前記ループ障害判定部によって、前記仮決定を取り消す判定が行われた場合に、変化数が閾値を超えるか、システムコールが発行中の状態となるか、または、システムコールの最終発行時刻が、前記バッファに格納される時刻の範囲内に存在するかした、時刻の値を、アドレスを取得するタイミング（時間間隔）で割ることで、前記バッファの段数の増分を算出する段数増分算出部と、
前記算出された増分だけ前記バッファの段数を増やすバッファサイズ変更部をさらに備えることを特徴とする付記１１記載の監視装置。
【図面の簡単な説明】
【００７８】
【図１】本発明の各実施形態に共通する監視システムの全体構成図である。
【図２】本発明の第１実施形態の監視処理部の構成を示すブロック図である。
【図３】図２のバッファ部２３に格納されるデータ例（その１）を示す図である。
【図４Ａ】本発明の第１実施形態の監視処理部によって実行される監視処理のフローチャート（その１）である。
【図４Ｂ】本発明の第１実施形態の監視処理部によって実行される監視処理のフローチャート（その２）である。
【図５Ａ】図２のバッファ部２３に格納されるアドレスの組が、ループ状態にはないと判定される場合のデータ例を示す図である。
【図５Ｂ】図２のバッファ部２３に格納されるアドレスの組が、ループ状態にあると判定される場合のデータ例を示す図（その１）である。
【図５Ｃ】図２のバッファ部２３に格納されるアドレスの組が、ループ状態にあると判定される場合のデータ例を示す図（その２）である。
【図６】本発明の第２実施形態の監視処理部の構成を示すブロック図である。
【図７Ａ】本発明の第２実施形態の監視処理部によって実行される監視処理のフローチャート（その１）である。
【図７Ｂ】本発明の第２実施形態の監視処理部によって実行される監視処理のフローチャート（その２）である。
【図７Ｃ】本発明の第２実施形態の監視処理部によって実行される監視処理のフローチャート（その３）である。
【図８】記憶媒体例を示す図である。
【符号の説明】
【００７９】
１１  被監視プログラム（被監視プロセス）
１２  監視処理部（監視プログラム）
１３  オペレーティングシステム
１４  システムコール発行状況監視機能
１５  プログラムカウンタ値取得機能
２０、３０  監視処理部
２１、３１  プログラムカウンタ値取得部
２２、３２  システムコール発行状況取得部
２３、３３  バッファ部（ＦＩＦＯ）
２４、３４  変換値算出部
２５、３６  ループ検出部
２６、３５  ループ障害判定部
２７、３８  出力部
３７  ループ障害仮判定部
３９  バッファサイズ変更部
【図１】
0004627275.tif 000002
【図２】
0004627275.tif 000003
【図３】
0004627275.tif 000004
【図４Ａ】
0004627275.tif 000005
【図４Ｂ】
0004627275.tif 000006
【図５Ａ】
0004627275.tif 000007
【図５Ｂ】
0004627275.tif 000008
【図５Ｃ】
0004627275.tif 000009
【図６】
0004627275.tif 000010
【図７Ａ】
0004627275.tif 000011
【図７Ｂ】
0004627275.tif 000012
【図７Ｃ】
0004627275.tif 000013
【図８】
0004627275.tif 000014