(57)【特許請求の範囲】
【請求項１】
アプリケーションプログラムを実行するコンピュータシステムであって、
前記アプリケーションプログラムによる関数の実行履歴を記憶する実行履歴記憶手段と、
前記関数の実行履歴を参照して休眠状態の原因となった関数を特定する休眠状態特定手段と、
前記休眠状態の原因となりえる関数のリストを原因関数リストとして記憶する原因関数リスト記憶手段と
を備え、
前記休眠状態特定手段は、
前記実行履歴記憶手段が記憶した関数が前記原因関数リストに存在する場合に、当該関数が前記休眠状態の原因であると特定することを特徴とするコンピュータシステム。
【請求項２】
前記休眠状態特定手段は、前記実行履歴記憶手段が記憶した関数のうち、実行順序が後の関数から前記原因関数リストに存在するか否かの検索を順次実行し、原因関数リストに存在する関数を検出した時点で当該関数が前記休眠状態の原因であると特定することを特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記原因関数リストは、各関数と当該関数が原因である場合のアプリケーションプログラムの待ち状態の種類とを対応付けて記憶し、前記休眠状態特定手段は、休眠状態の原因である関数を特定した場合に、前記アプリケーションプログラムの待ち状態の種類をさらに特定することを特徴とする請求項１または２に記載のコンピュータシステム。
【請求項４】
前記関数リスト記憶手段が記憶する関数の追加および／または削除を行なう原因関数リスト更新手段をさらに備えたことを特徴とする請求項１，２または３に記載のコンピュータシステム。
【請求項５】
前記原因関数リスト更新手段は、アプリケーションプログラムの動作状態の変化および／またはハードウェアの接続状態の変化に基づいて前記関数の追加および／または削除を実行することを特徴とする請求項４に記載のコンピュータシステム。
【請求項６】
コンピュータシステム上で動作するアプリケーションプログラムの動作状態を判定する動作状態判定プログラムであって、
前記アプリケーションプログラムによる関数の実行履歴を記憶する実行履歴記憶手順と、
前記関数の実行履歴を参照して休眠状態の原因となった関数を特定する休眠状態特定手順と、
前記休眠状態の原因となりえる関数のリストを原因関数リストとして記憶する原因関数リスト記憶手順と
をコンピュータに実行させ、
前記休眠状態特定手順は、
前記実行履歴記憶手順によって記憶された関数が前記原因関数リストに存在する場合に、当該関数が前記休眠状態の原因であると特定することを特徴とする動作状態判定プログラム。
【請求項７】
前記プログラム実行単位が休眠状態であるか否かを判定する判定手順をさらにコンピュータに実行させることを特徴とする請求項６に記載の動作状態判定プログラム。
【請求項８】
前記プログラム実行単位が休眠状態であるか否かを外部から取得することを特徴とする請求項６に記載の動作状態判定プログラム。
【請求項９】
コンピュータシステム上で動作するアプリケーションプログラムの動作状態を判定する動作状態判定方法であって、
前記アプリケーションプログラムによる関数の実行履歴を記憶する実行履歴記憶工程と、
前記関数の実行履歴を参照して休眠状態の原因となった関数を特定する休眠状態特定工程と、
前記休眠状態の原因となりえる関数のリストを原因関数リストとして記憶する原因関数リスト記憶工程と
を含み、
前記休眠状態特定工程は、
前記実行履歴記憶工程において記憶された関数が前記原因関数リストに存在する場合に、当該関数が前記休眠状態の原因であると特定することを特徴とする動作状態判定方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、コンピュータシステム、コンピュータシステム上で動作するアプリケーションプログラムの動作状態を判定する動作状態判定プログラムおよび動作状態判定方法に関し、特にアプリケーションプログラムの休眠の発生原因を特定可能なコンピュータシステム、動作状態判定プログラムおよび動作状態判定方法に関する。
【背景技術】
【０００２】
従来、コンピュータシステム上で実行されるアプリケーションプログラムに異常が発生した際の対処方法が各種考案されている。例えば、特許文献１は、アプリケーションプログラムが生成したプロセスが関数を呼び出す直前のコンテキストを記録しておき、関数実行後に異常が発生した場合は記録しておいたコンテキストをＣＰＵに書き戻すとともに、本来の関数に替わって特定機能を省略した代替関数を実行させる技術を開示している。
【０００３】
【特許文献１】特開２００１−１０９６３５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら上述した従来の技術では、どのような関数が呼び出されて異常に至ったかという履歴を考慮していないため、例えば最後から１つ前に呼び出された関数が異常の原因だったような場合に異常を正しく検出することができないという問題点があった。
【０００５】
さらに、異常が発生したことは検知しても、プロセスのどの待ち状態で異常になったかの判別を行なうことができないという問題点があった。
【０００６】
この発明は、上述した従来技術による問題点を解消し、課題を解決するためになされたものであり、アプリケーションプログラムの休眠の発生原因を特定可能なコンピュータシステム、動作状態判定プログラムおよび動作状態判定方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、本発明は、アプリケーションプログラムを実行するコンピュータシステムであって、前記アプリケーションプログラムによる関数の実行履歴を記憶する実行履歴記憶手段と、前記関数の実行履歴を参照して休眠状態の原因となった関数を特定する休眠状態特定手段と、を備えたことを特徴とする。
【０００８】
この発明によればコンピュータシステムは、アプリケーションプログラムによる関数の実行履歴を記憶し、関数の実行履歴を参照して休眠状態の原因となった関数を特定する。
【０００９】
また、本発明は、前記休眠状態の原因となりえる関数のリストを原因関数リストとして記憶する原因関数リスト記憶手段をさらに備え、前記休眠状態特定手段は、前記実行履歴記憶手段が記憶した関数が前記原因関数リストに存在する場合に、当該関数が前記休眠状態の原因であると特定することを特徴とする。
【００１０】
この発明によればコンピュータシステムは、休眠状態の原因となりえる関数のリストを原因関数リストとして記憶し、実行履歴記憶手段が記憶した関数が原因関数リストに存在する場合に、その関数が前記休眠状態の原因であると特定する。
【００１１】
また、本発明は、前記休眠状態特定手段は、前記実行履歴記憶手段が記憶した関数のうち、実行順序が後の関数から前記原因関数リストに存在するか否かの検索を順次実行し、原因関数リストに存在する関数を検出した時点で当該関数が前記休眠状態の原因であると特定することを特徴とする。
【００１２】
この発明によればコンピュータシステムは、実行履歴記憶手段が記憶した関数のうち、実行順序が後の関数から原因関数リストに存在するか否かの検索を順次実行し、原因関数リストに存在する関数を検出した時点でその関数が休眠状態の原因であると特定する。
【００１３】
また、本発明は、前記原因関数リストは、各関数と当該関数が原因である場合のアプリケーションプログラムの待ち状態の種類とを対応付けて記憶し、前記休眠状態特定手段は、休眠状態の原因である関数を特定した場合に、前記アプリケーションプログラムの待ち状態の種類をさらに特定することを特徴とする。
【００１４】
この発明によればコンピュータシステムは、原因関数リストに各関数と当該関数が原因である場合のアプリケーションプログラムの待ち状態の種類とを対応付けて記憶し、休眠状態の原因である関数を特定した場合にアプリケーションプログラムの待ち状態の種類をさらに特定する。
【００１５】
また、本発明は、前記関数リスト記憶手段が記憶する関数の追加および／または削除を行なう原因関数リスト更新手段をさらに備えたことを特徴とする。
【００１６】
この発明によればコンピュータシステムは、休眠状態の原因となりえる関数のリストを原因関数リストとして記憶するとともに適宜更新し、実行履歴記憶手段が記憶した関数が原因関数リストに存在する場合に、その関数が前記休眠状態の原因であると特定する。
【００１７】
また、本発明は、前記原因関数リスト更新手段は、アプリケーションプログラムの動作状態の変化および／またはハードウェアの接続状態の変化に基づいて前記関数の追加および／または削除を実行することを特徴とする。
【００１８】
この発明によればコンピュータシステムは、休眠状態の原因となりえる関数のリストを原因関数リストとして記憶するとともにアプリケーションプログラムの動作状態やハードウェアの接続状態の変化に基づいて適宜更新し、実行履歴記憶手段が記憶した関数が原因関数リストに存在する場合に、その関数が前記休眠状態の原因であると特定する。
【００１９】
また、本発明は、コンピュータシステム上で動作するアプリケーションプログラムの動作状態を判定する動作状態判定プログラムであって、前記アプリケーションプログラムによる関数の実行履歴を記憶する記憶手順と、前記関数の実行履歴を参照して休眠状態の原因となった関数を特定する休眠状態特定手順と、をコンピュータに実行させることを特徴とする。
【００２０】
この発明によれば動作状態判定プログラムは、アプリケーションプログラムによる関数の実行履歴を記憶し、関数の実行履歴を参照して休眠状態の原因となった関数を特定する。
【００２１】
また、本発明は、前記プログラム実行単位が休眠状態であるか否かを判定する判定手順をさらにコンピュータに実行させることを特徴とする。
【００２２】
この発明によれば動作状態判定プログラムは、アプリケーションプログラムのプログラム実行単位による関数の実行履歴を記憶するとともにプログラム実行単位が休眠状態であるか否かを判定し、プログラム実行単位が休眠状態である場合に関数の実行履歴を参照して休眠状態の原因となった関数を特定する。
【００２３】
また、本発明は、前記プログラム実行単位が休眠状態であるか否かを外部から取得することを特徴とする。
【００２４】
この発明によれば動作状態判定プログラムは、アプリケーションプログラムのプログラム実行単位による関数の実行履歴を記憶するとともにプログラム実行単位が休眠状態であるか否かを外部から取得し、プログラム実行単位が休眠状態である場合に関数の実行履歴を参照して休眠状態の原因となった関数を特定する。
【００２５】
また、本発明は、コンピュータシステム上で動作するアプリケーションプログラムの動作状態を判定する動作状態判定方法であって、前記アプリケーションプログラムによる関数の実行履歴を記憶する記憶工程と、前記関数の実行履歴を参照して休眠状態の原因となった関数を特定する休眠状態特定工程と、を含んだことを特徴とする。
【００２６】
この発明によれば動作状態判定方法は、アプリケーションプログラムによる関数の実行履歴を記憶し、関数の実行履歴を参照して休眠状態の原因となった関数を特定する。
【発明の効果】
【００２７】
本発明によればコンピュータシステムは、アプリケーションプログラムによる関数の実行履歴を記憶し、関数の実行履歴を参照して休眠状態の原因となった関数を特定するので、アプリケーションプログラムの休眠の発生原因を特定可能なコンピュータシステムを得ることができるという効果を奏する。
【００２８】
また、本発明によれば、休眠状態の原因となりえる関数のリストを原因関数リストとして記憶し、実行履歴記憶手段が記憶した関数が原因関数リストに存在する場合に、その関数が前記休眠状態の原因であると特定するので、アプリケーションプログラムの休眠の発生原因を簡易に特定可能なコンピュータシステムを得ることができるという効果を奏する。
【００２９】
また、本発明によれば、実行履歴記憶手段が記憶した関数のうち、実行順序が後の関数から原因関数リストに存在するか否かの検索を順次実行し、原因関数リストに存在する関数を検出した時点でその関数が休眠状態の原因であると特定するので、アプリケーションプログラムの休眠の発生原因を確実に特定可能なコンピュータシステムを得ることができるという効果を奏する。
【００３０】
また、本発明によれば、原因関数リストに各関数と当該関数が原因である場合のアプリケーションプログラムの待ち状態の種類とを対応付けて記憶し、休眠状態の原因である関数を特定した場合にアプリケーションプログラムの待ち状態の種類をさらに特定するので、アプリケーションプログラムの休眠の発生原因と、休眠によって発生する待ち状態とを特定可能なコンピュータシステムを得ることができるという効果を奏する。
【００３１】
また、本発明によれば、休眠状態の原因となりえる関数のリストを原因関数リストとして記憶するとともに適宜更新し、実行履歴記憶手段が記憶した関数が原因関数リストに存在する場合に、その関数が前記休眠状態の原因であると特定するので、アプリケーションプログラムの休眠の発生原因を正確に特定可能なコンピュータシステムを得ることができるという効果を奏する。
【００３２】
また、本発明によれば、休眠状態の原因となりえる関数のリストを原因関数リストとして記憶するとともにアプリケーションプログラムの動作状態やハードウェアの接続状態の変化に基づいて適宜更新し、実行履歴記憶手段が記憶した関数が原因関数リストに存在する場合に、その関数が前記休眠状態の原因であると特定するので、アプリケーションプログラムの休眠の発生原因をコンピュータシステムの状態に応じて特定可能なコンピュータシステムを得ることができるという効果を奏する。
【００３３】
また、本発明によれば、アプリケーションプログラムによる関数の実行履歴を記憶し、関数の実行履歴を参照して休眠状態の原因となった関数を特定するので、アプリケーションプログラムの休眠の発生原因を特定可能な動作状態判定プログラムを得ることができるという効果を奏する。
【００３４】
また、本発明によれば、アプリケーションプログラムのプログラム実行単位による関数の実行履歴を記憶するとともにプログラム実行単位が休眠状態であるか否かを判定し、プログラム実行単位が休眠状態である場合に関数の実行履歴を参照して休眠状態の原因となった関数を特定するので、アプリケーションプログラムの休眠の発生を検知し、その原因関数を特定可能な動作状態判定プログラムを得ることができるという効果を奏する。
【００３５】
また、本発明によれば、アプリケーションプログラムのプログラム実行単位による関数の実行履歴を記憶するとともにプログラム実行単位が休眠状態であるか否かを外部から取得し、プログラム実行単位が休眠状態である場合に関数の実行履歴を参照して休眠状態の原因となった関数を特定するので、外部のアプリケーションによる検知結果を利用して休眠の発生原因を特定可能な動作状態判定プログラムを得ることができるという効果を奏する。
【００３６】
また、本発明によれば、アプリケーションプログラムによる関数の実行履歴を記憶し、関数の実行履歴を参照して休眠状態の原因となった関数を特定するので、アプリケーションプログラムの休眠の発生原因を特定可能な動作状態判定方法を得ることができるという効果を奏する。
【発明を実施するための最良の形態】
【００３７】
以下に添付図面を参照して、この発明に係るコンピュータシステム、動作状態判定プログラムおよび動作状態判定方法の好適な実施例について詳細に説明する。
【実施例】
【００３８】
図１は、本発明の実施例であるコンピュータシステム１の概要構成を示す概要構成図である。同図に示すように、コンピュータシステム１ではオペレーティングシステム１０、監視プログラム１１および監視対象アプリケーション１２が動作している。
【００３９】
オペレーティングシステム１０は、そのソフトウェア機能として休眠状態特定部２１および動作情報管理部２２を有する。また、監視プログラム２０は、そのソフトウェア機能として監視処理部３０を有し、監視処理部３０は、その内部にアプリケーション監視部３１、動作異常判定部３２および動作異常時処理部３３を有する。
【００４０】
記憶部４０はメモリなどの記録媒体であり、オペレーティングシステム１０、監視プログラム１１、監視対象アプリケーション１２がそれぞれ情報の記憶に使用する。
【００４１】
監視対象アプリケーション１２は、オペレーティングシステム１０に管理されるとともに、監視プログラム１１による監視を受ける任意のアプリケーションプログラムである。この監視対象アプリケーション１２は、動作時にプログラム実行単位であるプロセス（もしくはスレッド）を生成する。
【００４２】
生成されたプロセスは複数の関数を順次実行し、各関数をアプリスタック情報４２として記憶部４０に退避する。すなわち、アプリスタック情報４２は、プロセスの関数実行履歴を格納することとなる。またプロセスに関する情報を示す動作情報４３は、オペレーションシステム１０がプロセス管理に使用するため記憶部４０に格納される。
【００４３】
アプリケーション監視部３１は、監視対象アプリケーション１２の動作状態を監視する。また、アプリケーション監視部３１は、その内部に原因関数リスト更新部３１ａを有する。
【００４４】
原因関数リスト更新部３１ａは、記憶部４０が記憶する原因関数リスト４１の内容を更新する処理を行なう。原因関数リスト４１は、プロセスが実行する関数のうち、休眠状態の原因となりえる関数のリストである。ここで、原因関数リスト４１に含む必要のある関数は、どのような監視対象アプリケーションが動作しているかによって変化する。
【００４５】
例えば、コンピュータシステム１にＵＳＢデバイスが接続されており、ＵＳＢデバイスの入出力を管理するＵＳＢドライバが管理対象アプリケーション１２として動作しているならば、ＵＳＢデバイスの入出力に関係する関数がＵＳＢドライバの休眠原因となる可能性があるので、原因関数リスト４０に登録する必要がある。
【００４６】
しかし、ＵＳＢデバイスが接続されていない場合やＵＳＢドライバが起動していない場合には、ＵＳＢデバイスの入出力に関係する関数を原因関数リスト４０に登録する必要はない。
【００４７】
そこで、原因関数リスト更新部３１ａは、監視対象アプリケーション１２の動作状態やハードウェアの接続状態の変化に基づいて原因関数リスト４１の内容を適宜更新している。
【００４８】
動作異常判定部３２は、監視対象アプリケーション１２に属するプロセスの動作情報４３に基づいて各プロセスに動作異常があるか否かを判定することにより監視対象アプリの動作異常を検出する。
【００４９】
具体的には、動作異常判定部３２は、所定のタイミングで動作情報管理部２２に動作情報取得要求をおこなう。動作情報管理部２２は、この要求に応えて記憶部４０から動作情報４３を読み出して動作異常判定部３２に渡す。動作異常判定部３２は、取得した動作情報４３から「無限ループ」「ＣＰＵ待ち状態」「Ｉ／Ｏ待ち状態」などの動作異常が監視対象アプリケーション１２に生じているか否かを判定する。
【００５０】
ここで「Ｉ／Ｏ待ち状態」は、例えばリソースの競合などによってプロセスが発行した関数の実行が完了せず、プロセスが関数の実行終了を待機したまま停止した状態（すなわちプロセスが休眠した状態）である。
【００５１】
動作異常判定部３２は、このようにプロセスが休眠状態となっている場合には、休眠状態となったプロセスがアプリスタック情報４２として使用しているメモリを特定し、休眠状態特定部２１に対して休眠状態の特定要求を出力する。
【００５２】
休眠状態特定部２１は、休眠状態の特定要求を受けた場合に、原因関数リスト４１およびアプリスタック情報４２を用いて休眠状態の原因となった関数を特定する。さらに、休眠状態特定部２１内部の待ち状態特定部２１ａは、動作異常に陥った監視対象アプリケーション１２の待ち状態の種類を特定する。そして休眠状態特定部２１は、休眠状態の原因となった関数や、監視対象アプリケーション１２の待ち状態の種類を動作異常判定部３２に報告する。
【００５３】
動作異常時処理部３３は、動作異常判定部３２が動作異常であると判定した場合に、その異常の種類、またプロセスが休眠状態である場合には休眠状態の原因となった関数や待ち状態の種類に基づいて、該当する監視対象アプリケーション１２の終了処理や、エラー表示処理などをおこなう。
【００５４】
このようにコンピュータシステム１では、プロセスが休眠状態となったことを検知した場合にそのプロセスの関数実行履歴から、どの関数がプロセス休眠の原因となったかを特定することができる。
【００５５】
つづいて、動作異常判定部３２による異常判定処理についてさらに説明する。まず、異常の判定において用いられる動作情報と、かかる動作情報に基づいて判定される異常種別との関係を図２に示す。動作異常判定部３２による異常判定処理では、ＣＰＵ上で動作するプロセスの切り替え（以下、「コンテキストスイッチ」と言う）に着目し、コンテキストスイッチ回数の変化と異常種別との関係を用いて監視対象アプリの動作異常を検出する。
【００５６】
ここで、かかるコンテキストスイッチについて説明しておく。シングルＣＰＵのコンピュータ上にマルチプロセス環境を実現するためには、ＣＰＵ上で動作する各プロセスを順次切替えることにより、あたかも複数のプロセスが同時に動作しているようにスケジューリングする必要がある。たとえば、リアルタイムスケジューリングの場合にはタイマ割込みによりコンテキストスイッチがおこなわれ、実行中のプロセスにかわって実行待ちのプロセスがＣＰＵにロードされる。また、ラウンドロビンスケジューリングの場合には各プロセスにタイムスライスを割り当て、このタイムスライスを使い切ったならばコンテキストスイッチがおこなわれ実行プロセスが切替えられる。
【００５７】
また、かかるコンテキストスイッチには、自発的コンテキストスイッチと他発的コンテキストスイッチとがある。ここで、自発的コンテキストスイッチとは、ＣＰＵ上で実行中のプロセスが入出力処理やセマフォなどのリソースを獲得するために、ＣＰＵ上での実行権を自ら開放することにより引き起こすコンテキストスイッチのことをいう。また、他発的コンテキストスイッチとは、上述したオペレーティングシステムのスケジューリングなどにより実行中のプロセス以外の要因で引き起こされるコンテキストスイッチのことをいう。
【００５８】
そして、これらのコンテキストスイッチのカウントアップは、たとえば、以下のような手順でおこなわれる。すなわち、オペレーティングシステムが上記した自発的コンテキストスイッチを検出した場合、ＣＰＵを開放したプロセスから他のプロセスへ制御を移すとともに、メモリ上の自発的コンテキストスイッチ回数をインクリメントする。一方、上記した他発的コンテキストスイッチを検出した場合には、実行中のプロセスの実行を中断させ、割り込みプロセスへ制御を移すとともに、メモリ上の他発的コンテキストスイッチ回数をインクリメントする。
【００５９】
なお、このようなコンテキストスイッチのカウントアップ機能を備えないオペレーティングシステムを用いる場合であっても、プロセスがハードウェアにＩ／Ｏ要求を出した回数や、割り込みが発生した回数などをモニタすることにより、かかるカウントアップ機能を実現することができる。
【００６０】
このように、コンテキストスイッチは実行プロセスが切り替わる際に引き起こされるので、かかるコンテキストスイッチ回数に着目することによりプロセスの動作異常を検出することが可能となる。
【００６１】
具体的には、図２に示したように、無限ループによる動作異常の場合には、プロセス状態が実行中であり、他発的コンテキストスイッチ回数は増加しているものの自発的コンテキストスイッチ回数が変化していない状態となる。すなわち、オペレーティングシステムのスケジューリングによりコンテキストスイッチが引き起こされているもののプロセスの処理は完了していないので、自発的なコンテキストスイッチを引き起こしていない状態が継続していることをあらわしている。したがって、かかる状態が所定時間継続しているプロセスは、無限ループによりＣＰＵを長時間使用している可能性が高いので動作異常であると判定する。
【００６２】
また、ＣＰＵ待ちによる動作異常の場合には、プロセス状態が実行中であり、他発的コンテキストスイッチ回数および自発的コンテキストスイッチ回数のいずれもが変化しない状態となる。かかる状態が所定時間継続した場合には、他のプロセスによりプロセスの実行が阻害されている可能性が高いのでＣＰＵ待ちによる動作異常であると判定する。
【００６３】
また、Ｉ／Ｏ待ちによる動作異常の場合には、プロセスが待機中であり、他発的コンテキストスイッチ回数および自発的コンテキストスイッチ回数のいずれもが変化しない状態となる。かかる状態が所定時間継続した場合には、他のプロセスとのリソースの競合などによりプロセスのＩ／Ｏ処理が阻害されている可能性が高いのでＩ／Ｏ待ちによる動作異常であると判定する。
【００６４】
このように、本発明に係る異常検出処理では、コンテキストスイッチに着目し、かかるコンテキストスイッチ回数の変化とプロセス状態の継続時間とを関連づけることにより動作異常を検出することとしたので、効率的に監視対象アプリの動作異常を検出することができる。
【００６５】
つぎに、原因関数リスト４１の具体例について図３を参照して説明する。同図に示すように、原因関数リスト４１は、「待ち状態要因」「関数」「アドレス」を関連付けて記憶している。
【００６６】
「関数」の項目は、「ｕｓｂ＿ｒｅａｄ」や「ｈｄｄ＿ｗｒｉｔｅ」など、プロセス休眠状態の原因となる可能性のある関数群であり、「アドレス」は、その関数が記憶部４０のどの位置に格納されたかを示す情報である。
【００６７】
また、「待ち状態要因」は、その関数が原因となってプロセス休眠状態となった場合に、監視対象アプリケーション１２がどのような待ち状態となるかを示す情報である。たとえば、関数「ｕｓｂ＿ｒｅａｄ」が原因となったプロセス休眠状態では、「待ち状態要因」が「ＵＳＢ」であり、監視対象アプリケーション１２は「ＵＳＢ異常」による待ち状態（たとえば、ＵＳＢに接続した機器が応答しないために応答待ちで止まっている状態）に陥る。同様に、関数「ｈｄｄ＿ｗｒｉｔｅ」」が原因となったプロセス休眠状態では、「待ち状態要因」が「ＨＤＤ」であり、監視対象アプリケーション１２は「ＨＤＤ異常」による待ち状態（たとえば、ＨＤＤの物理的なクラッシュやデータの破損などにより、データが正しく読み書きできず、応答待ちで止まっている状態）に陥る。
【００６８】
つぎに、プロセスによる関数の実行とアプリスタック情報４２との関係について図４を参照して説明する。同図では、プロセスが関数「ｕｓｂ＿ｒｅａｄ」を実行すると、関数「ｕｓｂ＿ｒｅａｄ」はその処理内で関数「ｆ１」を呼び出す。同様に、関数「ｆ１」は処理内で関数「ｆ２」を呼び出し、関数「ｆ２」はさらに関数「３」を呼び出す。
【００６９】
そして、これらの関数「ｕｓｂ＿ｒｅａｄ」「ｆ１」「ｆ２」「ｆ３」「ｆ４」の実行時のＣＰＵの状態が、それぞれアプリスタック情報４２に退避される。この時、関数の実行順序に従って、アプリスタック情報４２の下から退避が実行される。
【００７０】
したがって、このプロセスが休眠状態となった場合、アプリスタック情報４２の最も上に退避されている関数（同図では関数「ｆ３」）が、最後に実行された関数となる。そこで、この最後に実行された関数が原因関数リスト４１に登録されているならば、最後に実行した関数がプロセス休眠の原因関数であると特定することができる。
【００７１】
一方、最後に実行された関数がアプリスタック情報４２に登録されていない場合、その前に実行された関数（最後に実行した関数を呼び出した関数。図４では関数「ｆ２」）が原因関数リスト４１に登録されているか否かを確認し、登録されているならばその関数がプロセス休眠の原因関数であると特定する。そして、登録されていなければさらに一つ前の関数をキーとして原因関数リスト４１を検索する。
【００７２】
このように、最後に実行した関数から順に原因関数リスト４１を検索し、原因関数リスト４１に登録された関数が見つかるまで遡ることで、プロセス休眠の原因関数を特定することができる。なお、関数を遡る際には、アプリスタック情報４２の各関数が使用しているメモリ領域に格納したリターンレジスタおよびフレームポインタ（一つ前の関数が使用しているメモリ領域の先頭アドレスを示す情報）を使用すればよい。
【００７３】
つぎに、コンピュータシステム１の処理動作について図５のフローチャートを参照して説明する。同図に示す処理フローは、監視プログラム１１によって定期的に実行される。
【００７４】
この処理フローが開始されると、まず、動作異常判定部３２が動作情報４３を取得する（ステップＳ１０１）。そして、取得した動作情報４３を用いてプロセスの動作異常を判定する（ステップＳ１０２）。
【００７５】
その結果、動作異常プロセスが存在しない場合には（ステップＳ１０３，Ｎｏ）、そのまま処理を終了する。一方、動作異常プロセスが存在するならば（ステップＳ１０３，Ｙｅｓ）、そのプロセスが休眠状態であるか否かを判定する（ステップＳ１０４）。
【００７６】
そして、プロセスが休眠状態であるならば（ステップＳ１０４，Ｙｅｓ）、休眠状態特定部２１による休眠状態特定処理（ステップＳ１０５）をさらに実行する。
【００７７】
プロセスが休眠状態で無かった場合（ステップＳ１０４，Ｎｏ）もしくは休眠状態特定処理（ステップＳ１０５）の後、動作異常処理部３３が動作異常の内容に基づいて該当する監視対象アプリケーション１２の終了処理や、エラー表示処理などの異常時処理を実行して（ステップＳ１０６）、処理を終了する。
【００７８】
つづいて、休眠状態特定部２１による休眠状態特定処理（ステップＳ１０５）の処理内容について図６のフローチャートを参照してさらに説明する。
【００７９】
同図に示すように休眠状態特定部２１は、まず休眠状態のプロセスが使用していた動作異常スタックの最上部の関数を読み出し（ステップＳ２０１）、読み出した関数をキーに原因関数リスト４１を検索する（ステップＳ２０２）。
【００８０】
その結果、読み出した関数が原因関数リスト４１に存在しなければ（ステップＳ２０３，Ｎｏ）、つぎの関数を読み出して（ステップＳ２０５）、読み出した関数をキーに原因関数リスト４１を検索する（ステップＳ２０２）。
【００８１】
そして、読み出した関数が原因関数リスト４１に存在するならば（ステップＳ２０３，Ｙｅｓ）、読み出した関数に基づいて待ち状態を特定し（ステップＳ２０４）、処理を終了する。
【００８２】
上述してきたように、本実施例にかかるコンピュータシステムでは、原因関数リスト後進部３１ａによってプロセス休眠状態の原因となる可能性のある関数を原因関数リスト４１として記憶し、プロセスが休眠状態になっている場合にはそのプロセスの関数実行履歴を記録したアプリスタック情報４２と原因関数リスト４１とを対比することで、どの関数がプロセス休眠の原因となったかを特定することができる。
【００８３】
このように、プロセス休眠の原因を関数レベルで特定することによって、他のアプリケーションへの影響を最小限に抑えて休眠状態の復旧を行なうことができる。そのため、車載用のシステム、カーナビゲーション装置や車両の動作制御装置など、高い安定性が必要なシステムに適している。
【００８４】
例えば、音楽再生プログラムとナビゲーションプログラムが同一のオペレーティングシステム上で動作する車載装置に本発明を適用すれば、音楽再生プログラムが休眠状態となった場合でも、ナビゲーションプログラムを正常に動作させつつ音楽再生プログラムの復旧を行なうことができる。
【００８５】
なお、本実施例ではプログラム実行単位として主にプロセスを例に説明を行なったが、スレッドなど他のプログラム実行単位であっても同様に本発明を適用可能であることは言うまでもない。
【００８６】
また、本実施例では、プロセスが動作時に使用するアプリスタック情報を参照して関数の実行履歴を取得していたが、たとえばオペレーティングシステムがプロセスによる関数の実行履歴を動作情報として管理し、この動作情報から関数の実行履歴を取得する構成としてもよい。
【００８７】
さらに、本実施例では、動作異常判定をアプリケーションプログラムの一つである監視プログラム内にて実行し、休眠状態特定はオペレーティングシステムにて実行するように構成しているが、例えば動作異常判定と休眠状態判定をともに監視プログラム内で実行する、動作異常判定と休眠状態判定とをともにオペレーティングシステム内で実行する、など任意の構成によって実施することができる。
【００８８】
さらに、本実施例においては、コンテキストスイッチを監視することでプロセスの休眠状態発生を検出する場合を例に説明を行なったが、プロセスの休眠状態発生の検出方法については任意の方法を用いることができる。
【産業上の利用可能性】
【００８９】
以上のように、本発明にかかるコンピュータシステム、動作状態判定プログラムおよび動作状態判定方法は、アプリケーションの動作管理に有用であり、特に、アプリケーションプログラム休眠の原因特定に適している。
【図面の簡単な説明】
【００９０】
【図１】本発明の実施の形態であるコンピュータシステムの概要構成を示す概要構成図である。
【図２】動作情報と異常種別との関係を示す図である。
【図３】図１に示した原因関数リストの具体例について説明する説明図である。
【図４】プロセスによる関数の実行とアプリスタック情報との関係について説明する説明図である。
【図５】図１に示したコンピュータシステムの処理動作について説明するフローチャートである。
【図６】休眠状態特定処理について説明するフローチャートである。
【符号の説明】
【００９１】
１    コンピュータシステム
１０    オペレーティングシステム
１１    監視プログラム
１２    監視対象アプリケーション
２１    休眠状態特定部
２１ａ  待ち状態特定部
２２    動作情報管理部
３０    監視処理部
３１    アプリケーション監視部
３１ａ  原因関数リスト更新部
３２    動作異常判定部
３３    動作異常時処理部
４０    記憶部
４１    原因関数リスト
４２    アプリスタック情報
４３    動作情報
【図１】
0004562641.tif 000002
【図２】
0004562641.tif 000003
【図３】
0004562641.tif 000004
【図４】
0004562641.tif 000005
【図５】
0004562641.tif 000006
【図６】
0004562641.tif 000007