(57)【要約】【課題】プログラムハング検出方法で、ＭＯＳとＯＳ配下のドライバが正常に動作している限り必ずＷＤＴクリアを行って信頼性の高いプログラムハング検出ができることを目的とする。【解決手段】プロセッサのシステムクロック割り込みを受信する割り込み受信手段と、受信したシステムクロック割り込みを基にＷＤＴ生存確認要求を生成するドライバ生存確認手段と、前記ＷＤＴ生存確認要求を受信して前記プロセッサ内のウォッチドッグタイマのクリア要求を行うＷＤＴクリア要求手段とを有し、オペレーティングシステムの処理プログラム又はオペレーティングシステム配下のドライバプログラムのハングによる前記ドライバ生存確認手段又は前記ＷＤＴクリア要求手段の動作停止で前記ウォッチドッグタイマのクリアが停止し、前記ウォッチドッグタイマの閾値超過で前記プロセッサのリセットを行う。【選択図】図６
2009151440.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサのシステムクロック割り込みを受信する割り込み受信手段と、
受信したシステムクロック割り込みを基にＷＤＴ生存確認要求を生成するドライバ生存確認手段と、
前記ＷＤＴ生存確認要求を受信して前記プロセッサ内のウォッチドッグタイマのクリア要求を行うＷＤＴクリア要求手段とを有し、
オペレーティングシステムの処理プログラム又はオペレーティングシステム配下のドライバプログラムのハングによる前記ドライバ生存確認手段又は前記ＷＤＴクリア要求手段の動作停止で前記ウォッチドッグタイマのクリアが停止し、前記ウォッチドッグタイマの閾値超過で前記プロセッサのリセットを行うことを特徴とするコンピュータ装置。
【請求項２】
請求項１記載のコンピュータ装置において、
前記ドライバ生存確認手段は、受信したシステムクロック割り込みを基にカウント要求を更に生成し、
前記オペレーティングシステムより上位のアプリケーションプログラムの動作を監視して生存通知を行うシステム監視手段と、
アプリケーションプログラムの初期化を行う初期化制御手段と、
前記カウント要求を受信したときハングカウンタのカウントを行い、前記生存通知を受信したとき前記ハングカウンタのカウント値をリセットし、前記ハングカウンタのカウント値が閾値を超えたとき、前記初期化制御手段に少なくとも実行中のアプリケーションプログラムの初期化を指示するアプリハング処理手段とを
有することを特徴とするコンピュータ装置。
【請求項３】
請求項２記載のコンピュータ装置において、
閾値の異なる複数のハングカウンタを設けたことを特徴とするコンピュータ装置。
【請求項４】
請求項３記載のコンピュータ装置において、
前記アプリハング処理手段は、前記複数のハングカウンタのうち第１のハングカウンタのカウント値が閾値を超えたとき、前記初期化制御手段に実行中のアプリケーションプログラムの初期化を指示することを特徴とするコンピュータ装置。
【請求項５】
請求項４記載のコンピュータ装置において、
前記アプリハング処理手段は、前記複数のハングカウンタのうち第２のハングカウンタのカウント値が閾値を超えたとき、前記初期化制御手段に実行中のアプリケーションプログラムと同一グループのアプリケーションプログラムの初期化を指示することを特徴とするコンピュータ装置。
【請求項６】
請求項５記載のコンピュータ装置において、
前記アプリハング処理手段は、前記複数のハングカウンタのうち第３のハングカウンタのカウント値が閾値を超えたとき、前記プロセッサのリセットを行うことを特徴とするコンピュータ装置。
【請求項７】
プロセッサのシステムクロック割り込みを受信する割り込み受信手段と、
受信したシステムクロック割り込みを基にカウント要求を生成するドライバ生存確認手段と、
オペレーティングシステムより上位のアプリケーションプログラムの動作を監視して生存通知を行うシステム監視手段と、
アプリケーションプログラムの初期化を行う初期化制御手段と、
前記カウント要求を受信したときハングカウンタのカウントを行い、前記生存通知を受信したとき前記ハングカウンタのカウント値をリセットし、前記ハングカウンタのカウント値が閾値を超えたとき、前記初期化制御手段に少なくとも実行中のアプリケーションプログラムの初期化を指示するアプリハング処理手段とを
有することを特徴とするコンピュータ装置。
【請求項８】
プロセッサのシステムクロック割り込みを受信し、
受信したシステムクロック割り込みを基にＷＤＴ生存確認要求を生成し、
前記ＷＤＴ生存確認要求を受信して前記プロセッサ内のウォッチドッグタイマのクリア要求を行い、
オペレーティングシステムの処理プログラム又はオペレーティングシステム配下のドライバプログラムのハングによる前記ＷＤＴ生存確認要求の生成又は前記ウォッチドッグタイマのクリア要求の停止で前記ウォッチドッグタイマのクリアが停止し、前記ウォッチドッグタイマの閾値超過で前記プロセッサのリセットを行うことを特徴とするプログラムハング検出方法。
【請求項９】
請求項８記載のプログラムハング検出方法において、
前記受信したシステムクロック割り込みを基にカウント要求を更に生成し、
前記オペレーティングシステムより上位のアプリケーションプログラムの動作を監視して生存通知を行い、
前記カウント要求を受信したときハングカウンタのカウントを行い、前記生存通知を受信したとき前記ハングカウンタのカウント値をリセットし、前記ハングカウンタのカウント値が閾値を超えたとき、前記アプリケーションプログラムの初期化を指示する、
ことを特徴とするプログラムハング検出方法。
【請求項１０】
プロセッサのシステムクロック割り込みを受信し、
受信したシステムクロック割り込みを基にカウント要求を生成し、
オペレーティングシステムより上位のアプリケーションプログラムの動作を監視して生存通知を行い、
前記カウント要求を受信したときハングカウンタのカウントを行い、前記生存通知を受信したとき前記ハングカウンタのカウント値をリセットし、前記ハングカウンタのカウント値が閾値を超えたとき、前記アプリケーションプログラムの初期化を指示する、
ことを特徴とするプログラムハング検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムのハングを検出するプログラムハング検出方法及びそれを適用したコンピュータ装置に関する。
【背景技術】
【０００２】
図１は、従来のプログラムハング検出方法を用いたコンピュータ装置の一例の構成図を示す。アプリケーションプログラム（以下、「アプリ」と略す）１Ａ，１Ｂ，１Ｃは、システム監視アプリ２によって監視され、システム監視アプリ２は各アプリ１Ａ，１Ｂ，１Ｃの生存通知としてのＷＤＴ（Ｗａｔｃｈ  Ｄｏｃ  Ｔｉｍｅｒ）クリア要求をＷＤＴドライバ３に供給する。
【０００３】
また、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）５内のＯＳ処理プログラム（以下、「ＯＳ処理」という）５Ａ，５Ｂ，５Ｃそれぞれも生存通知としてのＷＤＴクリア要求をＷＤＴドライバ３に供給し、ＯＳ配下のドライバプログラム（以下、「ドライバ」という）６Ａ，６Ｂ，６Ｃそれぞれも生存通知としてのＷＤＴクリア要求をＷＤＴドライバ３に供給する。
【０００４】
ＷＤＴドライバ３はＷＤＴクリア要求を供給されると、プロセッサ７内のＷＤＴ８に対しＷＤＴクリアを行う。ＷＤＴ８は、所定時間ＷＤＴクリアが行われない場合にはカウンタ満了となってＷＤＴリセット信号を発生し、ＣＰＵコア９をリセットする。
【０００５】
なお、特許文献１には、監視プログラムの異常を検出するソフトウェアＷＤＴと、ソフトウェアＷＤＴの異常を検出するハードウェアＷＤＴを有することが記載されている。
【０００６】
特許文献２には、低レベルタスクのフラグ操作を高レベルタスクが監視し、中レベルタスクの異常を検出することが記載されている。
【０００７】
特許文献３には、一定時間ＷＤＴにアクセスがない場合に割り込みを発生し、更に一定時間ＷＤＴにアクセスがない場合にはリセット信号を発生することが記載されている。
【０００８】
特許文献４には、異常個所を特定するためにタスク番号と実行ステップ番号をエラーログとして格納することが記載されている。
【０００９】
特許文献５には、監視ソフトウェアがアプリの状態を監視し、異常時にアプリの再起動を行うことが記載されている。
【００１０】
特許文献６には、周期的に起動される監視タスクが不定期に動作するタスクを監視することが記載されている。
【特許文献１】特許２８７０２５０号公報
【特許文献２】特開昭６３−２８０３４５号公報
【特許文献３】特開平１−１５４２５８号公報
【特許文献４】特開２００４−３５５３８４号公報
【特許文献５】特開２００２−１４９４３７号公報
【特許文献６】特開２００６−２２７９６２号公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
図１に示す従来のプログラムハング検出方法では、それぞれのＯＳ処理５Ａ，５Ｂ，５Ｃやドライバ６Ａ，６Ｂ，６Ｃが必要と考えるときにＷＤＴドライバ３に対しＷＤＴクリア要求を出している。
【００１２】
ここで、図２（Ａ）に示すように、ドライバ６Ａにおけるループ処理内でデバイス操作６Ａ−１に続けて生存通知（ＷＤＴクリア要求）６Ａ−２を行う設定となっている場合に正常に動作していたとする。ドライバの処理変更によって、図２（Ｂ）に示すように、ループ処理内にデバイス操作６Ａ−３が追加されると、生存通知（ＷＤＴクリア要求）６Ａ−２のタイミングが想定した場合より遅くなり、突然ＷＤＴリセットが発動してしまい、システムの信頼性を低下させるという問題があった。
【００１３】
また、図３（Ａ）に示すように、ドライバ６Ｂにおけるデバイス操作６Ｂ−１のループ回数が少なく生存通知が不要で正常に動作していたとする。ドライバの処理変更によって、図３（Ｂ）に示すように、ループ回数が増加した場合はループ処理に係る時間が増大して生存通知のタイミングが想定した場合より遅くなり、ループ処理内に生存通知ステップが設けられていないために、突然ＷＤＴリセットが発動してしまい、システムの信頼性を低下させるという問題があった。
【００１４】
また、従来方法では、ＯＳ４やＯＳ配下のドライバ５Ａ〜５Ｃがハングした場合と、ＯＳ上で動作するアプリ１Ａ〜１Ｃがハングした場合とでは何ら区別がなく、一律にシステムリセット（ＣＰＵコア９のリセット）を行っている。
【００１５】
このように、ＷＤＴ８自身が動作できなかったカウンタ満了によってシステム例外を発生させるため、プログラムハングの被疑要因となったタスクの特定が困難であり、システムのスタックデータ等から動作していたタスクを探し、プログラムトレースで被疑要因となったタスクを探していたことから、システムの平均修理時間（ＭＴＴＲ）が長くなり、システムの保守性と信頼性と可用性を低下させる要因となっていた。
【００１６】
図４に、プログラムハング発生時の処理の流れを示す。先ず、ＣＰＵコア９のスタックデータを退避し、ＣＰＵコア９のリセットを行う。こののち、退避したスタックデータを収集して原因解析を行う。これにより原因が判明すると、その部分を修正する。この場合、ＣＰＵコア９のリセットを行った後は、見た目にはＣＰＵコア９が回復し稼働しているように見えるものの、実際の稼働は原因が判明して修正を行った後である。
【００１７】
本発明は、上記の点に鑑みなされたものであり、ＯＳとＯＳ配下のドライバが正常に動作している限り必ずＷＤＴクリアを行って信頼性の高いプログラムハング検出ができるプログラムハング検出方法を提供することを目的とする。
【課題を解決するための手段】
【００１８】
本発明の一実施態様では、プロセッサのシステムクロック割り込みを受信する割り込み受信手段と、
受信したシステムクロック割り込みを基にＷＤＴ生存確認要求を生成するドライバ生存確認手段と、
前記ＷＤＴ生存確認要求を受信して前記プロセッサ内のウォッチドッグタイマのクリア要求を行うＷＤＴクリア要求手段とを有し、
オペレーティングシステムの処理プログラム又はオペレーティングシステム配下のドライバプログラムのハングによる前記ドライバ生存確認手段又は前記ＷＤＴクリア要求手段の動作停止で前記ウォッチドッグタイマのクリアが停止し、前記ウォッチドッグタイマの閾値超過で前記プロセッサのリセットを行う。
【００１９】
好ましくは、前記ドライバ生存確認手段は、受信したシステムクロック割り込みを基にカウント要求を更に生成し、
前記オペレーティングシステムより上位のアプリケーションプログラムの動作を監視して生存通知を行うシステム監視手段と、
アプリケーションプログラムの初期化を行う初期化制御手段と、
前記カウント要求を受信したときハングカウンタのカウントを行い、前記生存通知を受信したとき前記ハングカウンタのカウント値をリセットし、前記ハングカウンタのカウント値が閾値を超えたとき、前記初期化制御手段に少なくとも実行中のアプリケーションプログラムの初期化を指示するアプリハング処理手段とを
有する。
【発明の効果】
【００２０】
本発明によれば、ＯＳとＯＳ配下のドライバが正常に動作している限り必ずＷＤＴクリアを行って信頼性の高いプログラムハング検出ができる。
【００２１】
更に好ましい例では、ＯＳより上位のアプリのハング時にはＯＳは動作させたままアプリだけをリセットし被疑要因タスクの特定を容易に行うことができる。
【発明を実施するための最良の形態】
【００２２】
以下、図面に基づいて本発明の実施形態について説明する。
【００２３】
＜実施形態＞
図５は、本発明のプログラムハング検出方法を適用したコンピュータ装置の一実施形態のハードウェア構成例を示す。同図中、ＣＰＵ１０，ＲＡＭ１１，ＲＯＭ１２，チップセット１３それぞれは内部バス１４で接続されている。チップセット１３にはフラッシュメモリ１５，ハードディスク装置（ＨＤＤ）１６及び通信回路１７等の周辺装置が接続されている。
【００２４】
ハードディスク装置１６にはＯＳ、各種ドライバ、各種アプリ等のソフトウェアが格納されており、これらのソフトウェアはハードディスク装置１６からＲＡＭ１１に転送されてＣＰＵ１０により実行される。
【００２５】
図６は、本発明のプログラムハング検出方法を適用したコンピュータ装置の一実施形態の構成例を示す。図７は、図６においてＯＳより上位のアプリのプログラムハング検出部を抽出した構成例を示す。図８は、図６においてＯＳ処理及びＯＳ配下のドライバのプログラムハング検出部を抽出した構成例を示す。
【００２６】
図６及び図７において、ＴＩＣ（Ｔｉｍｅ  Ｉｎｔｅｒｖａｌ  Ｃｏｕｎｔｅｒ）割り込み受信機能部（ハンドラ）２１は、プロセッサ３０内のシステムタイマ３３から供給されるシステムクロック割り込みを受信して、これをＴＩＣドライバ生存確認機能部２２に供給する。ＴＩＣ割り込み受信機能部２１とＴＩＣドライバ生存確認機能部２２は最も優先度の高い処理である。
【００２７】
ＴＩＣドライバ生存確認機能部（ドライバ）２２は、ＴＩＣ割り込み受信機能部２１からのシステムクロック割り込みを基にＷＤＴの生存確認要求としてのデクリメント要求（所定周期の信号）を生成してアプリハングドライバ２３に対して供給すると共に、生存通知としてのＷＤＴクリア要求（例えばデクリメント要求と同一周期の信号）を生成してＷＤＴドライバ２４に対して供給する。また、ＴＩＣドライバ生存確認機能部２２はシステムクロックをＯＳ４０に供給する。
【００２８】
ＷＤＴドライバ２４は、ＯＳ４０内の各種ＯＳ処理４１Ａ，４１Ｂ，４１Ｃ等、及びＯＳ配下のドライバ４２Ａ，４２Ｂ，４２Ｃ等の生存を確認するものである。ドライバ４２Ａ，４２Ｂ，４２Ｃ等は例えば通信回路１７等の周辺装置を制御するプログラムである。ＷＤＴドライバ２４はＴＩＣドライバ生存確認機能部２２からＷＤＴクリア要求を受信すると、プロセッサ３０のＷＤＴ３１のカウント値を初期値に設定するＷＤＴクリア（生存通知）を行う。また、ＷＤＴ３１からハングアップ通知を受けると、例えば不摘発性メモリであるハードディスク装置１６に割付けられたカーネルログエリア３５にハング要因の書き込みを行う。
【００２９】
プロセッサ３０は図５のＣＰＵ１０に対応している。ＷＤＴ３１はシステムタイマ３３からのシステムクロックをカウント（カウントダウン）し、カウント値（ＷＤＴ３１内のＷＤＴレジスタに格納）が０となってＷＤＴの閾値を超過すると、ＷＤＴリセット信号をＣＰＵコア３２に供給してＣＰＵコア３２のリセットを行う。なお、カーネルログエリア３５は例えば図５のハードディスク装置１６に設けられている。
【００３０】
図６及び図８において、アプリハングドライバ２３は、ＯＳ４０より上位のアプリ５０Ａ，５０Ｂ，５０Ｃ等の生存を確認するものである。アプリハングドライバ２３はＴＩＣドライバ生存確認機能部２２からのデクリメント要求を受信するとハングカウンタ２５をデクリメントする。
【００３１】
また、ＯＳ４０より上位のシステム監視機能部５１からアプリ５０Ａ，５０Ｂ，５０Ｃ等の生存通知（カウンタクリア要求）を受信した場合にハングカウンタ２５を初期値（閾値）にリセットし、また、ハングカウンタ２５が閾値を超えた場合（ハングカウンタ２５のカウント値が０となったとき）に閾値超過通知をハング対象アプリＩＤ（ハングアップしたアプリの識別子）と共に初期化制御アプリ５２に送信するか、又は、自律リセット信号を生成してＣＰＵコア３２に送信する。
【００３２】
ハングカウンタ２５は、ＲＡＭ１１上に一又は複数設けられる。例えば第１、第２、第３のハングカウンタ２５ａ，２５ｂ，２５ｃを設けた場合の各閾値（各閾値は時間を表す）は、次のように設定される。
【００３３】
ハングカウンタ２５ａの閾値＜ハングカウンタ２５ｂの閾値＜ハングカウンタ２５ｃの閾値＜ＷＤＴの閾値
なお、ハングカウンタ２５が一つの場合、ハングカウンタ２５の閾値は上記ハングカウンタ２５ａの閾値と同じである。
【００３４】
ハングカウンタ２５ａ，２５ｂ，２５ｃはシステム立ち上げ時に初期値（閾値）を設定され、アプリハングドライバ２３からデクリメントされる。
【００３５】
アプリハングドライバ２３は、ハングカウンタ２５が複数の場合、ハングカウンタ２５ａの閾値超過通知があればハング対象のアプリ（例えば５０Ａ）だけのリセットを初期化制御アプリ５２に指示し、ハング回数＝１とする。なお、ハング回数はＲＡＭ１１に保持され初期値は０である。ハング回数＝１のときハングカウンタ２５ｂの閾値超過通知があればハング対象のアプリが属するアプリグループ（例えば５０Ａ，５０Ｂ）だけのリセットを初期化制御アプリ５２に指示し、ハング回数＝２とする。ハング回数＝２のときハングカウンタ２５ｃの閾値超過通知があれば自律リセット信号を生成してＣＰＵコア３２に送信する。
【００３６】
なお、ハングカウンタ２５が一つの場合、アプリハングドライバ２３は閾値超過通知を最初に受信したとき、ハング対象のアプリ（例えば５０Ａ）のハング回数＝１としてＲＡＭ１１に保持し、ハング対象のアプリ（例えば５０Ａ）だけのリセットを初期化制御アプリ５２に指示する。次に、アプリ５０Ａがハングするとハング回数＝２とし、ハング対象のアプリが属するアプリグループ（例えば５０Ａ，５０Ｂ）だけのリセットを初期化制御アプリ５２に指示する。更に、アプリ５０Ａがハングするとハング回数＝３とし、全てのアプリ（例えば５０Ａ，５０Ｂ，５０ｃ）のリセットを初期化制御アプリ５２に指示し、更に、アプリ５０Ａがハングするとハング回数＝４とし、自律リセット信号を生成してＣＰＵコア３２に送信する構成とする。
【００３７】
なお、上記実施形態ではハングカウンタ２５をデクリメント（ダウンカウント）しているが、インクリメント（アップカウント）して閾値超過を判定するよう構成しても良い。
【００３８】
システム監視アプリ５１は、ＯＳ４０より上位の全てのアプリ５０Ａ，５０Ｂ，５０Ｃの生存を監視し、定期的に生存通知としてのカウンタクリア要求を生成してアプリハングドライバ２３に供給する。システム監視アプリ５１は、ＯＳ上のアプリケーションで最も優先度が低い例えばアイドルタスクであり、ＣＰＵコア３１を占有して時分割で実行されるアプリ５０Ａ，５０Ｂ，５０Ｃそれぞれが切り替わる際にカウンタクリア要求を生成する。アプリ５０Ａ，５０Ｂ，５０Ｃのいずれかが例えば無限ループに陥りハングした場合には、ＣＰＵコア３２の使用権がシステム監視アプリ５１（アイドルタスク）に渡らないために、システム監視アプリ５１は生存通知（カウンタクリア要求）を出さなくなる。
【００３９】
初期化制御アプリ５２は、アプリハングドライバ２３からリセット対象アプリの指示を含む閾値超過通知を受信した場合、該当するアプリの初期化（リセット）を行う。
【００４０】
＜システム立ち上げ時＞
システム立ち上げ時には、ハングカウンタ２５ａ〜２５ｃの初期設定、すなわち、閾値の設定を行う。これ以降、アプリハングドライバ２３がハングカウンタ２５ａ〜２５ｃののカウントダウンを開始する。
【００４１】
また、システム立ち上げ時にＷＤＴ３１のカウント値の初期設定、すなわち、閾値の設定を行う。これ以降、ＷＤＴ３１のカウントダウンが始まる。
【００４２】
＜通常動作時ＯＳ及びＯＳ配下のドライバのハング監視＞
図９は、図６に示すコンピュータ装置の通常動作時の動作シーケンスを示す。
【００４３】
図９において、プロセッサ３０からのシステムクロック割り込みをＴＩＣ割り込み受信機能部２１で受信する（ステップＳ０）。ＴＩＣドライバ生存確認機能部２２からＷＤＴドライバ２４に対し、ＷＤＴクリア要求を出す（ステップＳ１）。
【００４４】
ＷＤＴドライバ２４は生存通知（ＷＤＴクリア要求）を受け取ると、プロセッサ３０のＷＤＴ３１を初期値に戻すＷＤＴクリアを出す（ステップＳ３）。これにより、ＷＤＴ３１は初期値からカウントダウンを始める。
【００４５】
＜通常動作時ＯＳより上位のアプリのハング監視＞
図９において、プロセッサ３０からのシステムクロック割り込みをＴＩＣ割り込み受信機能部２１で受信する（ステップＳ０）。ＴＩＣドライバ生存確認機能部２２からアプリハングドライバ２３に対し、ハングカウンタのデクリメント要求を出す（ステップＳ２）。アプリハングドライバ２３はアプリハング検出用のハングカウンタ２５ａ〜２５ｃをデクリメントする（ステップＳ４）。この処理はＯＳ配下で定期的に行われる。
【００４６】
一方、ＯＳより上位のシステム監視アプリ５１はアプリハングドライバ２３に対しＯＳ４０を介して生存通知を出す（ステップＳ５，Ｓ６）。アプリハングドライバ２３は生存通知を受信すると、アプリハング検出用のハングカウンタ２５ａ〜２５ｃを初期値に戻す（ステップＳ７）。ハングカウンタ２５ａ〜２５ｃは初期値からデクリメントを始める。
【００４７】
＜ＯＳ処理及びＯＳ配下のドライバのハング検出＞
図１０は、図６に示すコンピュータ装置のドライバのハング検出時の動作シーケンスを示す。
【００４８】
図１０において、ＯＳ処理４１Ａ〜４１Ｃ又はＯＳ配下で動作するドライバ４２Ａ〜４２Ｃにおいて、例えばドライバ４２Ａが無限ループに陥りハングした場合（ステップＳ１１）、ＣＰＵコア３２の使用権がＴＩＣ生存確認機能２２又はＷＤＴドライバ２４に渡らないことになる。なお、ＴＩＣ割り込み受信機能部２１までは動作する。
【００４９】
このため、ＷＤＴドライバ２４は生存通知（ＷＤＴクリア要求）を受け取れなくなるか、受け取っても処理できなくなるので、プロセッサ３０のＷＤＴ３１のカウント値を初期値に戻すＷＤＴクリア要求が出せなくなる。また、アプリハングドライバ２３も同じ理由で動作しなくなるので、アプリハングカウンタ２５ａ〜２５ｃのデクリメントも停止する。また、ＯＳ配下のドライバ４２Ａ〜４２Ｃ及びＯＳ処理４１Ａ〜４１Ｃも停止する。
【００５０】
やがてプロセッサ３０の機能でＷＤＴ３１のカウントダウンが進み（ステップＳ１２）、カウント値が０になり（ステップＳ１３）、ＣＰＵコア３１に対しリセット信号が発生し、ハードウェアからのシステムリセットとなる（ステップＳ１４）。
【００５１】
このように、ＯＳ処理とＯＳ配下のドライバが正常に動作している限り必ずＷＤＴクリアを行って信頼性の高いプログラムハング検出ができる。
【００５２】
ＯＳ処理やＯＳ配下のドライバの生存通知を、ＯＳやドライバそれぞれの処理内容に依存してＷＤＴクリアするかしないかを決めるのではなく、一律にシステムクロックからＷＤＴクリアを出すことで、ＣＰＵからのシステムクロックがＯＳやドライバには無関係に定期的にトリガを発動し、ＯＳとドライバ処理が正常に動作している限り必ずＷＤＴクリアのトリガが与えられ、信頼性の高いプログラムハング検出ができる。
【００５３】
＜ＯＳより上位のアプリのハング検出＞
図１１は、図６に示すコンピュータ装置のアプリのハング検出時の動作シーケンスを示す。
【００５４】
図１１において、ＯＳ４０より上位のアプリ５０Ａ〜５０Ｃのうち、例えばアプリ５０Ａが無限ループに陥りハングした場合（ステップＳ２１）、ＣＰＵコア３２の使用権がシステム監視アプリ５１に渡らないことになり、システム監視アプリ５１からの生存通知（カウンタクリア要求）が出なくなる。
【００５５】
ＷＤＴ３１の閾値はハングカンウンタ２５ａ〜２５ｃの閾値より長い時間を設定しているのでＷＤＴ３１が先に閾値超過することはない。これにより、ＯＳ処理４１Ａ〜４１Ｃ又はＯＳ配下のドライバ４２Ａ〜４２Ｃでハングが発生しない限り、アプリハングドライバ２３はＴＩＣドライバ生存確認機能部２２からのデクリメント要求を受けるので、ハングカウンタ２５ａ〜２５ｃのデクリメントは行われ続ける（ステップＳ２２，Ｓ２３）。
【００５６】
システム監視アプリ５１からの生存通知（ハングカウンタクリア要求）が出なくなることで、第１のハングカウンタ２５ａが閾値を超えてカウント値が０になる。これをアプリハングドライバ２３が検出した場合、ＲＡＭ１１に保持されているＯＳ４０の管理情報から実行中もしくは実行権を保持したままのアプリ５０Ａを見つけ出し（ステップＳ２４）、不摘発性メモリのカーネルログエリア３５にハングしているアプリ５０Ａのタスク詳細情報とハング回数をセーブし（ステップＳ２５）、初期化制御アプリ５２に対して、第１のハングカンウンタ２５ａの閾値超過とハングしているアプリ５０Ａのタスク詳細情報とを通知する（ステップＳ２６，Ｓ２７）。
【００５７】
初期化制御アプリ５２は、ハングカンウンタ２５ａの閾値超過とハングしているアプリ５０Ａのタスク詳細情報を受け取り、ハングカンウンタ２５ａの閾値超過に該当する例えばアプリ５０Ａのみの再初期化を行う（ステップＳ２８）。
【００５８】
上記の再初期化でアプリ５０Ａのハングが解決した場合は、ＣＰＵ使用権がシステム監視アプリ５１に渡ることになるのでシステム監視アプリ５１からの生存通知（ハングカウンタクリア要求）が出るようになり（ステップＳ２９）、アプリハングドライバ２３はアプリハング検出用のハングカウンタ２５ａ〜２５ｃを初期値に戻すので、再度監視が始まる。
【００５９】
上記の再初期化でアプリ５０Ａのハングが解決しない場合は、ＣＰＵ使用権がシステム監視アプリ５１に渡らないことになるのでシステム監視アプリ５１からの生存通知が出ない。
【００６０】
システム監視アプリ５１からの生存通知が出なくなることで、第２のハングカウンタ２５ｂが閾値を超えてカウント値が０になる。これをアプリハングドライバ２３が検出した場合、ＯＳの管理情報から実行中もしくは実行権を保持したままのアプリ５０Ａを見つけ出し、カーネルログエリア３５にハングしているアプリ５０Ａのタスク詳細情報とハング回数をセーブし、初期化制御アプリ５２に対して、第２のハングカウンタ２５ｂの閾値超過をハングしているアプリ５０Ａのタスク詳細情報と共に通知する。
【００６１】
初期化制御アプリ５２はハングカウンタ２５ｂの閾値超過とハングしているアプリ５０Ａのタスク詳細情報を受け取り、ハングカンウンタ２５ｂの閾値超過に該当する例えばアプリ５０Ａの属するグループのアプリ５０Ａ，５０Ｂの再初期化を行う。
【００６２】
この再初期化でアプリ５０Ａのハングが解決した場合は、ＣＰＵ使用権がシステム監視アプリ５１に渡ることになるのでシステム監視アプリ５１からの生存通知が出るようになり、アプリハングドライバ２３はアプリハング検出用のハングカウンタ２５ａ〜２５ｃを初期値に戻すので、再度監視が始まる。
【００６３】
この再初期化で、アプリ５０Ａのハングが解決しない場合は、ＣＰＵ使用権がシステム監視アプリ５１に渡らないことになるのでシステム監視アプリ５１からの生存通知が出ない。
【００６４】
システム監視アプリ５１からの生存通知が出なくなることで、第３のハングカウンタ２５ｃが閾値を超えてカウント値が０になる。これをアプリハングドライバ２３が検出した場合、ＯＳの管理情報から実行中もしくは実行権を保持したままのアプリ５０Ａを見つけ出し、カーネルログエリア３５にハングしているアプリ５０Ａのタスク詳細情報とハング回数をセーブし、初期化制御アプリ５２に対して、第３のハングカンウンタ２５ｃの閾値超過をハングしているアプリ５０Ａのタスク詳細情報と共に通知する。
【００６５】
第３のハングカンウンタ２５ｃの閾値超過を最終エスカレーションフェーズとして、アプリハングドライバ２３はＣＰＵコア３２に対して自律リセット信号を出し、システム全体のリセットを行う。
【００６６】
このように、ＯＳやＯＳ配下のドライバのハングの場合はハードウェアからのＷＤＴリセットでシステムリセットさせ、ＯＳより上位のアプリのハング時にはＯＳは動作させたままアプリだけをリセットすることで、ＯＳが動作していることから、ハングしているアプリのタスク詳細情報とハング回数を不揮発性メモリのカーネルログエリア３５にセーブすることができ、被疑要因タスクの特定を容易に行うことができる。
（付記１）
プロセッサのシステムクロック割り込みを受信する割り込み受信手段と、
受信したシステムクロック割り込みを基にＷＤＴ生存確認要求を生成するドライバ生存確認手段と、
前記ＷＤＴ生存確認要求を受信して前記プロセッサ内のウォッチドッグタイマのクリア要求を行うＷＤＴクリア要求手段とを有し、
オペレーティングシステムの処理プログラム又はオペレーティングシステム配下のドライバプログラムのハングによる前記ドライバ生存確認手段又は前記ＷＤＴクリア要求手段の動作停止で前記ウォッチドッグタイマのクリアが停止し、前記ウォッチドッグタイマの閾値超過で前記プロセッサのリセットを行うことを特徴とするコンピュータ装置。
（付記２）
付記１記載のコンピュータ装置において、
前記ドライバ生存確認手段は、受信したシステムクロック割り込みを基にカウント要求を更に生成し、
前記オペレーティングシステムより上位のアプリケーションプログラムの動作を監視して生存通知を行うシステム監視手段と、
アプリケーションプログラムの初期化を行う初期化制御手段と、
前記カウント要求を受信したときハングカウンタのカウントを行い、前記生存通知を受信したとき前記ハングカウンタのカウント値をリセットし、前記ハングカウンタのカウント値が閾値を超えたとき、前記初期化制御手段に少なくとも実行中のアプリケーションプログラムの初期化を指示するアプリハング処理手段とを
有することを特徴とするコンピュータ装置。
（付記３）
付記２記載のコンピュータ装置において、
閾値の異なる複数のハングカウンタを設けたことを特徴とするコンピュータ装置。
（付記４）
付記３記載のコンピュータ装置において、
前記アプリハング処理手段は、前記複数のハングカウンタのうち第１のハングカウンタのカウント値が閾値を超えたとき、前記初期化制御手段に実行中のアプリケーションプログラムの初期化を指示することを特徴とするコンピュータ装置。
（付記５）
付記４記載のコンピュータ装置において、
前記アプリハング処理手段は、前記複数のハングカウンタのうち第２のハングカウンタのカウント値が閾値を超えたとき、前記初期化制御手段に実行中のアプリケーションプログラムと同一グループのアプリケーションプログラムの初期化を指示することを特徴とするコンピュータ装置。
（付記６）
付記５記載のコンピュータ装置において、
前記アプリハング処理手段は、前記複数のハングカウンタのうち第３のハングカウンタのカウント値が閾値を超えたとき、前記プロセッサのリセットを行うことを特徴とするコンピュータ装置。
（付記７）
プロセッサのシステムクロック割り込みを受信する割り込み受信手段と、
受信したシステムクロック割り込みを基にカウント要求を生成するドライバ生存確認手段と、
オペレーティングシステムより上位のアプリケーションプログラムの動作を監視して生存通知を行うシステム監視手段と、
アプリケーションプログラムの初期化を行う初期化制御手段と、
前記カウント要求を受信したときハングカウンタのカウントを行い、前記生存通知を受信したとき前記ハングカウンタのカウント値をリセットし、前記ハングカウンタのカウント値が閾値を超えたとき、前記初期化制御手段に少なくとも実行中のアプリケーションプログラムの初期化を指示するアプリハング処理手段とを
有することを特徴とするコンピュータ装置。
（付記８）
プロセッサのシステムクロック割り込みを受信し、
受信したシステムクロック割り込みを基にＷＤＴ生存確認要求を生成し、
前記ＷＤＴ生存確認要求を受信して前記プロセッサ内のウォッチドッグタイマのクリア要求を行い、
オペレーティングシステムの処理プログラム又はオペレーティングシステム配下のドライバプログラムのハングによる前記ＷＤＴ生存確認要求の生成又は前記ウォッチドッグタイマのクリア要求の停止で前記ウォッチドッグタイマのクリアが停止し、前記ウォッチドッグタイマの閾値超過で前記プロセッサのリセットを行うことを特徴とするプログラムハング検出方法。
（付記９）
付記８記載のプログラムハング検出方法において、
前記受信したシステムクロック割り込みを基にカウント要求を更に生成し、
前記オペレーティングシステムより上位のアプリケーションプログラムの動作を監視して生存通知を行い、
前記カウント要求を受信したときハングカウンタのカウントを行い、前記生存通知を受信したとき前記ハングカウンタのカウント値をリセットし、前記ハングカウンタのカウント値が閾値を超えたとき、前記アプリケーションプログラムの初期化を指示する、
ことを特徴とするプログラムハング検出方法。
（付記１０）
プロセッサのシステムクロック割り込みを受信し、
受信したシステムクロック割り込みを基にカウント要求を生成し、
オペレーティングシステムより上位のアプリケーションプログラムの動作を監視して生存通知を行い、
前記カウント要求を受信したときハングカウンタのカウントを行い、前記生存通知を受信したとき前記ハングカウンタのカウント値をリセットし、前記ハングカウンタのカウント値が閾値を超えたとき、前記アプリケーションプログラムの初期化を指示する、
ことを特徴とするプログラムハング検出方法。
（付記１１）
付記２記載のコンピュータ装置において、
前記ハングカウンタのカウント値の閾値は、前記ウォッチドッグタイマの閾値より小さいことを特徴とするコンピュータ装置。
（付記１２）
付記２記載のコンピュータ装置において、
前記アプリハング処理手段は、前記ハングカウンタのカウント値が閾値を超えたとき、ハング回数をカウントし、ハング回数に応じて前記初期化制御手段に異なる初期化指示を行うことを特徴とするコンピュータ装置。
【図面の簡単な説明】
【００６７】
【図１】従来のプログラムハング検出方法を用いたコンピュータ装置の一例の構成図である。
【図２】従来方法の問題点を説明するための図である。
【図３】従来方法の問題点を説明するための図である。
【図４】プログラムハング発生時の処理の流れを示す図である。
【図５】本発明のプログラムハング検出方法を適用したコンピュータ装置の一実施形態のハードウェア構成例を示す図である。
【図６】本発明のプログラムハング検出方法を適用したコンピュータ装置の一実施形態の構成例を示す図である。
【図７】ＯＳより上位のアプリのプログラムハング検出部を抽出した構成例を示す図である。
【図８】ＯＳ処理及びＯＳ配下のドライバのプログラムハング検出部を抽出した構成例を示す図である。
【図９】コンピュータ装置の通常動作時の動作シーケンスである。
【図１０】コンピュータ装置のドライバのハング検出時の動作シーケンスである。
【図１１】コンピュータ装置のアプリのハング検出時の動作シーケンスである。
【符号の説明】
【００６８】
１０  ＣＰＵ
１１  ＲＡＭ
１２  ＲＯＭ
１３  チップセット
１４  内部バス
１５  フラッシュメモリ
１６  ハードディスク装置
１７  通信回路
２１  割り込み受信機能部
２２  ＴＩＣドライバ生存確認機能部
２３  アプリハングドライバ
２４  ＷＤＴドライバ
２５  ハングカウンタ
３０  プロセッサ
３１  ＷＤＴ
３２  ＣＰＵコア
３３  システムタイマ
４０  ＯＳ
４１Ａ〜４１Ｃ  ＯＳ処理
４２Ａ〜４２Ｃ  ドライバ
５０Ａ〜５０Ｃ  アプリ
５１  システム監視アプリ
５２  初期化制御アプリ
【図１】
2009151440.tif 000003
【図２】
2009151440.tif 000004
【図３】
2009151440.tif 000005
【図４】
2009151440.tif 000006
【図５】
2009151440.tif 000007
【図６】
2009151440.tif 000008
【図７】
2009151440.tif 000009
【図８】
2009151440.tif 000010
【図９】
2009151440.tif 000011
【図１０】
2009151440.tif 000012
【図１１】
2009151440.tif 000013