(57)【要約】【課題】  不定期に起動するタスクを監視する。【解決手段】  演算手段と、ハードウェアタイマと、アプリケーション監視タスクの情報を記憶する記憶手段と、監視対象アプリケーションのタスク実行開始時刻またはタスク実行停止時刻を前記記憶手段に記録する手段（１２）と、周期的にアプリケーション監視タスクを起動する手段（１０）と、前記演算手段が前記アプリケーション監視タスクを監視対象アプリケーションに対して実行し、前記記憶手段に記録されたタスク実行開始時刻又はタスク実行停止時刻に基づき監視対象アプリケーションの異常の有無を検知し、正常ならば各監視対象アプリケーションに設けたウォッチドッグタイマのカウンタをリセットし、異常ならば該カウント値のハードウェアタイマによる累積を継続する手段（１４）と、前記カウント値が前記記憶手段に格納されたオーバーフロー値を越えると、オーバーフロー割り込みを発生させる手段（１８）により終了処理を呼び出す手段（２０）とを含むタスク監視システムおよび監視方法を提供する。【選択図】  図１
2006227962.tif 000002
【特許請求の範囲】
【請求項１】
演算手段と、
１個又は２個のハードウェアタイマと、
アプリケーション監視タスクのための情報を少なくとも記憶する記憶手段と、
監視対象アプリケーションのタスク実行開始時刻またはタスク実行停止時刻あるいはその両方を前記記憶手段に記録する手段と、
周期的にアプリケーション監視タスクを起動する手段と、
前記演算手段が該アプリケーション監視タスクを複数の監視対象アプリケーションに対して実行することにより、前記記憶手段に記録されたタスク実行開始時刻又はタスク実行停止時刻に基づいて、監視対象アプリケーションの異常の有無を検知し、異常がなければ、該アプリケーション監視タスクに関連して各監視対象アプリケーションについて設けたウォッチドッグタイマのカウンタをリセットし、異常があれば、該ウォッチドッグタイマのカウント値のハードウェアタイマによる累積を継続する手段と、
前記ウォッチドッグタイマのカウント値が前記記憶手段に格納されたオーバーフロー値を越えたときに、オーバーフロー割り込みを発生させる手段と、
該オーバーフロー割り込みが発生すると、終了処理を呼び出す手段と
を含んでなるアプリケーションタスク監視システム。
【請求項２】
前記アプリケーション監視タスクを起動する手段が、
該記憶手段に格納されたキャプチャ割り込みカウンタ値に基づいて、ハードウェアタイマのカウンタが該キャプチャ割り込みカウンタ値に達したときにキャプチャ割り込みを発生させる手段と、
該キャプチャ割り込みによりアプリケーション監視タスクを起動する手段と
を含んでなる請求項１に記載のアプリケーションタスク監視システム。
【請求項３】
演算手段と、１個又は２個のハードウェアタイマと、アプリケーション監視タスクのための情報を少なくとも記憶する記憶手段を含んでなるシステムにおいて実行される、
監視対象アプリケーションのタスク実行開始時刻またはタスク実行停止時刻あるいはその両方を前記記憶手段に記録するステップと、
定期的にアプリケーション監視タスクを起動するステップと、
前記演算手段が該アプリケーション監視タスクを複数の監視対象アプリケーションに対して実行することにより、前記記憶手段に記録されたタスク実行開始時刻又はタスク実行停止時刻に基づいて、監視対象アプリケーションの異常の有無を検知し、異常がなければ、該アプリケーション監視タスクに関連して各監視対象アプリケーションについて設けたウォッチドッグタイマのカウンタをリセットし、異常があれば、該ウォッチドッグタイマのカウント値のハードウェアタイマによる累積を継続するステップと、
前記ウォッチドッグタイマのカウント値が前記記憶手段に格納されたオーバーフロー値を越えたときに、オーバーフロー割り込みを発生させるステップと、
該オーバーフロー割り込みが発生すると、終了処理を呼び出すステップと
を含んでなるアプリケーションタスク監視方法。
【請求項４】
前記アプリケーション監視タスクを起動するステップが、
該記憶手段に格納されたキャプチャ割り込みカウンタ値に基づいて、ハードウェアタイマのカウンタが該キャプチャ割り込みカウンタ値に達したときにキャプチャ割り込みを発生させるステップと、
該キャプチャ割り込みによりアプリケーション監視タスクを起動するステップと
を含んでなる請求項３に記載のアプリケーションタスク監視方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ウォッチドッグタイマを用いて複数のアプリケーションタスクを監視するシステムおよび方法に関する。
【背景技術】
【０００２】
通常、プログラムのループや暴走により一定時間内に所定の処理が実行できなかった場合には、プログラムの異常を検出してＣＰＵリセットや異常内容の保存などの異常処理を行うために、ウォッチドッグタイマ（以下、「ＷＤＴ」と略称することがある）が使用されている。
【０００３】
ここで、リアルタイム・オペレーティングシステム（リアルタイムＯＳ）が組み込まれておらずタスクの概念のない単純な組込みプログラムの場合には、ある処理が終了すると、処理全体を管理する処理を繰り返し動作させることにより異常検出を行うことができる。そして、処理の開始時または終了時においてウォッチドッグタイマをリセットし、同じウォッチドッグタイマを用いてプログラムの監視を継続することができる。
【０００４】
一方、リアルタイムＯＳが組み込まれている場合には、最も単純な方法として、優先順位が最も低いタスクでウォッチドッグタイマをリセットする方法がある。しかし、この方法では、タスクが実行権から切り離されて繰り返されるような状態に陥った場合（例えば、ダイナミックループしてしまった場合）には、ウォッチドッグタイマを用いて監視することができないという問題が生じる。そのため、タスクの監視をタスク単位に行う必要がある。その一方で、このような問題を回避するために１つのタスクに対して１つのウォッチドッグタイマを使用すると、タスクが追加される度にハードウェアで構成されたウォッチドッグタイマを追加する必要が生じる。その結果、ハードウェアで構成されたウォッチドッグタイマの増加により、システムの高コスト化や大型化などを招くという問題が生じる。
【０００５】
このような問題を回避して、ハードウェアで構成された１つのウォッチドッグタイマを用いて複数のタスクを監視する方法が、以下の特許文献１に記載されている。この特許文献１には、ハードウェアで構成されたＷＤＴ１と、所定の周期Ｔ１〜Ｔｎでそれぞれ繰り返されるｎ個のプログラム（ＰＲＧ１〜ＰＲＧｎ）とが記載されている。まず、ハードウェアで構成されたＷＤＴ１が、プログラム１（ＰＲＧ１）の動作を監視する。そして、プログラム１（ＰＲＧ１）が、ソフトウェアで構成されたＷＤＴ２〜ＷＤＴｎを用いて残りプログラム２〜ｎ（ＰＲＧ２〜ＰＲＧｎ）の動作を監視する。ここで、プログラム２〜ｎの監視周期（ｔ２〜ｔｎ）は、プログラム１を監視するハードウェアのＷＤＴ１のリセット周期の整数倍に設定されている。
そして、プログラム１（ＰＲＧ１）は、所定のカウントアップ時間ｔ１〜ｔｎを経過しても残りのプログラム２〜ｎ（ＰＲＧ２〜ＰＲＧｎ）のいずれかが起動しない場合には異常であるとして、異常なプログラムのＷＤＴ２〜ＷＤＴｎがアラーム通知を行う。また、プログラム１の異常については、ハードウェアで構成されたＷＤＴ１がアラーム通知を行う。ここで、カウントアップ時間ｔ１〜ｔｎは、各プログラム１〜ｎの起動周期Ｔ１〜Ｔｎよりも長い時間にそれぞれ設定されている。すなわち、特許文献１に記載された発明によれば、１つのハードウェアで構成されたＷＤＴ１を用いてプログラム１の動作を監視し、プログラム１内に設けたソフトウエアタイマＷＤＴ２〜ＷＤＴｎを用いてプログラム２〜プログラムｎの動作を監視するといった仕方で、複数のプログラム（またはタスク）を監視している。
【０００６】
【特許文献１】特開平８−３０４９０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記の特許文献１に記載された複数のタスクの監視方法では、定期に動作するタスクを監視することはできるが、外部からのイベントにより不定期に動作するタスクを監視することはできない。
【課題を解決するための手段】
【０００８】
本発明は、演算手段と、１個又は２個のハードウェアタイマと、アプリケーション監視タスクのための情報を少なくとも記憶する記憶手段と、監視対象アプリケーションのタスク実行開始時刻またはタスク実行停止時刻あるいはその両方を記憶手段に記録する手段と、周期的にアプリケーション監視タスクを起動する手段と、演算手段がアプリケーション監視タスクを複数の監視対象アプリケーションに対して実行することにより、記憶手段に記録されたタスク実行開始時刻又はタスク実行停止時刻と現在時刻に基づいて、監視対象アプリケーションの異常の有無を検知し、異常がなければ、アプリケーション監視タスクに関連して各監視対象アプリケーションについて設けたウォッチドッグタイマのカウンタをリセットし（カウンタのカウント値を０にし）、異常があれば、ウォッチドッグタイマカウンタのカウント値のハードウェアタイマによる累積を継続する手段と、ウォッチドッグタイマカウンタのカウント値が記憶手段に格納されたオーバーフロー値を越えたときに、オーバーフロー割り込みを発生させる手段と、オーバーフロー割り込みが発生すると、終了処理を呼び出す手段とを含んでなるアプリケーションタスク監視システムを提供する。
【０００９】
アプリケーションのタスク実行開始時刻あるいはタスク実行開始時刻とタスク実行停止時刻の両方を記録しておくことにより、定期的に動作するアプリケーションと不定期に動作するアプリケーションのいずれについても正しく監視を行うことができる。
【００１０】
また、上記のアプリケーション監視タスクを起動する手段は、記憶手段に格納されたキャプチャ割り込みカウンタ値に基づいて、ハードウェアタイマのカウンタがキャプチャ割り込みカウンタ値に達したときにキャプチャ割り込みを発生させる手段と、キャプチャ割り込みによりアプリケーション監視タスクを起動する手段とを含むことが好ましい。
【００１１】
また、本発明は、演算手段と、１個又は２個のハードウェアタイマと、アプリケーション監視タスクのための情報を少なくとも記憶する記憶手段を含んでなるシステムにおいて実行される方法であって、監視対象アプリケーションのタスク実行開始時刻またはタスク実行停止時刻あるいはその両方を前記記憶手段に記録するステップと、定期的にアプリケーション監視タスクを起動するステップと、演算手段がアプリケーション監視タスクを複数の監視対象アプリケーションに対して実行することにより、記憶手段に記録されたタスク実行開始時刻又はタスク実行停止時刻に基づいて、監視対象アプリケーションの異常の有無を検知し、異常がなければ、アプリケーション監視タスクに関連して各監視対象アプリケーションについて設けたウォッチドッグタイマのカウンタをリセットし、異常があれば、該ウォッチドッグタイマのカウント値のハードウェアタイマによる累積を継続するステップと、ウォッチドッグタイマのカウント値が記憶手段に格納されたオーバーフロー値を越えたときに、オーバーフロー割り込みを発生させるステップと、オーバーフロー割り込みが発生すると、終了処理を呼び出すステップとを含んでなるアプリケーションタスク監視方法も提供する。
【００１２】
また、上記のアプリケーション監視タスクを起動するステップは、記憶手段に格納されたキャプチャ割り込みカウンタ値に基づいて、ハードウェアタイマのカウンタがキャプチャ割り込みカウンタ値に達したときにキャプチャ割り込みを発生させるステップと、キャプチャ割り込みによりアプリケーション監視タスクを起動するステップとを含むことが好ましい。
【００１３】
ここで、演算手段がアプリケーション監視タスクを複数の監視対象アプリケーションに対して実行することにより、記憶手段に記録されたタスク実行開始時刻又はタスク実行停止時刻に基づいて、監視対象アプリケーションの異常の有無を検知する際には、タスク実行開始時刻又はタスク実行停止時刻と現在時刻との差を求めて、それが記憶手段に記録した実行監視時間あるいは停止監視時間よりも大きいか小さいかを比較することにより、判断することができる。また、上記の終了処理を呼び出す手段又はステップは、該当する監視対象アプリケーションを終了させるほか、システムまたは演算手段のリセットを行うこと含むことができる。さらに、アプリケーション監視タスクを起動させるためにはウォッチドッグコールバック関数１と呼ぶ関数を用いて、演算手段がキャプチャ割り込みを呼び出すようにすることが好ましい。このウォッチドッグコールバック関数１を用いる代わりに前記システム内のオペレーションシステムのスケジュールタイマを用いて、定期的にアプリケーション監視タスクを起動させることも可能である。
【００１４】
さらに、ウォッチドッグタイマのカウント値が所定の値に達すると、ウォッチドッグコールバック関数２とよぶ関数を用いて、演算手段がオーバーフロー割り込みを呼び出すようにすることができる。ここで、オーバーフロー割り込みを発生させる機能を備えたハードウェアタイマと、キャプチャ割り込みを発生させる機能を備えたハードウェアタイマとをそれぞれ別個に設けて２個のハードウェアタイマを使用することも可能である。また、監視対象アプリケーションのタスク実行開始時刻またはタスク実行停止時刻あるいはその両方を記憶手段に記録する手段またはステップは、演算手段が、タスク動作開始通知関数およびタスク動作停止通知関数を用いて、前記アプリケーション監視タスク内の前記監視対象タスクの各動作状態を通知することにより実現することができる。
【００１５】
加えて、定期的に動作する監視対象アプリケーションのタスクに対しては、そのタスク動作開始時にタスク動作開始関数を呼び出し、不定期に動作する監視対象アプリケーションのタスクに対しては、タスクが終了あるいはタスクのがイベント待ちの状態になったときにタスク動作終了関数を呼び出して、対応するイベントが発生した場合にタスク動作開始関数を呼び出して、タスク実行開始時刻とタスク実行停止時刻を記録することが好ましい。ここで、前記システムの外部との通信により前記定期に動作する前記監視対象アプリケーションについては、一定時間が経過した後であっても通信がない場合には、システムまたは演算手段のリセットを行うようにすることができる。
【００１６】
また、本発明は、上記のいずれかの態様をコンピュータに実行させるためのプログラムも提供する。
【００１７】
なお、定期に動作するタスクとは、タスクの動作に対応するイベントの発生時刻があらかじめ分かっているものをいい、不定期に動作するタスクとは、タスクの動作に対応するイベントの発生時刻が不明なものをいう。
【発明の効果】
【００１８】
本発明によれば、定期で動作するタスクだけでなく、外部からのイベントによって不定期に動作するタスクについても監視することができ、タスクの動作時間だけでなく、停止時間についても監視できる。
【発明を実施するための最良の形態】
【００１９】
まず、本発明の実施に用いられるタスク監視システムは、少なくとも１個又は２個のハードウェアタイマと、アプリケーション監視タスクに関連した情報を記憶する記憶手段と、ハードウェアタイマおよび記憶手段に接続された（コンピュータのＣＰＵなどの）演算手段とを含んでなる。
【００２０】
ここで、上述のハードウェアタイマは、オーバーフロー割り込みとキャプチャ割り込みとの２種類の割り込みを発生させる機能を備えたハードウェアで構成されており、カウンタを含んでいる。また、アプリケーション監視タスクは、監視対象タスクであるアプリケーションのウォッチドッグ監視を行う。このアプリケーション監視タスクは、それが監視する全てのアプリケーションタスクよりも高い優先順位のタスクとして動作する。ここで、アプリケーション監視タスクは、好ましくは、それに関連して設けられたタスク監視設定テーブルとタスク監視状態ファイルとウォッチドッグタイマ発生状態管理フラグとを使用する。
【００２１】
図１に、本発明の実施に用いられる上記のタスク監視システムにおいて、監視対象タスクであるアプリケーションを監視する仕方をフローチャートで示す。まず、ステップ１０において、演算手段がアプリケーション監視タスクを複数の監視対象タスク（アプリケーション）に対して起動する。そして、ステップ１２において、アプリケーションの実行開始時刻、及び／又は、実行停止時刻が記憶手段に記憶される。次に、ステップ１４では、前記記憶手段に記録されたタスク実行開始時刻又はタスク実行停止時刻に基づいて、監視対象アプリケーションの異常の有無を検知する。ここで、異常がなければ、アプリケーション監視タスクに関連して各監視対象のアプリケーションについて設けたウォッチドッグタイマのカウンタをリセットする。一方、異常があれば、ウォッチドッグタイマのカウント値のハードウェアタイマによる累積を継続する（すなわち、この場合にはウォッチドックタイマのカウント値はリセットされない）。
そして、ステップ１８において、ウォッチドッグタイマのカウント値が前記記憶手段に格納されたオーバーフロー値を越えているかどうかが判断される。ここで、このカウント値がオーバーフロー値を超えている場合には、オーバーフロー割り込みが発生し、ステップ２０に進んで終了処理が呼び出される。一方、カウント値がオーバーフロー値を超えていない場合には、ステップ１０に再び戻る。そして、上記のステップ１０〜１８が所定の監視時間で繰り返される。
【００２２】
次に、図２に、ウォッチドッグタイマを用いたタスク監視システム内でのタスク監視処理の概略を示す。ここで、単に時間的な目安を与えるために、ウォッチドッグタイマの監視時間が６００ｍｓである場合を例に考えるが、このような時間の大きさに本発明が限定されるものではない。
【００２３】
ウォッチドッグコールバック関数１（wdt_callbak1）は、ハードウェアタイマにより、例えば、１００〜３００ｍｓの呼出し周期(wdt_interval)で呼び出されて、アプリケーション監視タスクを起動させる。そして、アプリケーション監視タスクが起動すると、監視対象タスク（アプリケーション）の動作が正常であれば、ウォッチドッグリセット関数（sys_wdg_timer_reset）を返すので、ハードウェアタイマのカウンタがリセットされる。
【００２４】
また、図２では、ウォッチドッグタイマの監視時間が６００ｍｓに設定されている。このウォッチドッグタイマの監視時間を超えるとハードウェアタイマのカウンタがタイムアップして、ウォッチドッグコールバック関数２（wdt_callbak2）が呼び出される。すなわち、このウォッチドッグコールバック関数２は、ハードウェアタイマのカウンタのカウント値が所定の値に達した場合（すなわち、ウォッチドッグタイムアップが発生した場合）に、割り込みハンドラによって呼び出され、アプリケーションの終了処理を開始させる。
【００２５】
本発明のタスク監視システムでは、アプリケーション監視タスクの起動にはキャプチャ割り込みを使用しており、ウォッチドッグタイマのタイムアップ時のウォッチドッグコールバック関数２の呼び出しにはオーバーフロー割り込みを使用している。ここで、オーバーフロー割り込みとキャプチャ割り込みについて、同じハードウェアタイマのカウンタのカウント値を別個独立に設定することができる。この場合、両者は、ハードウェアタイマのカウンタが指定されたカウント値だけカウントアップしたときに発生する割り込みである点において共通する。しかし、オーバーフロー割り込みは、割り込み発生後にハードウェアタイマのカウンタを０にリセットするが、キャプチャ割り込みはそのままカウントを継続させる（すなわち、リセットしない）点において両者は相違する。ここで、カウンタのカウント値としては、オーバーフロー割り込みの方がキャプチャ割り込みよりも大きい値が設定される。
なお、オーバーフロー割り込みを発生させる機能を備えたタイマと、キャプチャ割り込みを発生させる機能を備えたタイマの２個のハードウェアタイマを用いることもできる。本明細書においては、オーバーフロー割り込みとキャプチャ割り込みとの２つを発生させることができる機能を備えたハードウェアタイマを１つ使用した場合を例として説明する。
【００２６】
あるいは、キャプチャ割り込みによってウォッチドッグコールバック関数１を用いてアプリケーション監視タスクを起動する代わりに、オペレーションシステム（ＯＳ）に付属しているスケジュールタイマなどを使用して、アプリケーション監視タスクを定期的に起動することもできる。
【００２７】
図３は、図２のウォッチドッグタイマのカウンタのリセット動作の概略を示すものである。ここで、ウォッチドッグタイマのカウンタのカウント値は経過時間を示すものと考えることができる。図３を参照して、本願のタスク監視システムにおいて監視対象タスクが正常に動作している場合を以下に説明する。
まず、ウォッチドッグコールバック関数１が、ウォッチドッグコールバック関数１の呼出し周期(wdt_interval)で呼び出される。ここで、他の割り込み処理の動作に影響を与えずに処理時間を短くするために、このウォッチドッグコールバック関数１はアプリケーション監視タスクの起動のみを行っている。監視対象タスクが正常に動作している場合（正常時）には、このアプリケーション監視タスクの起動後にウォッチドッグタイマのタイマカウンタのカウント値がウォッチドッグリセット関数（sys_wdg_timer_reset）を用いてリセットされ、ウォッチドッグタイマのカウンタは再び０からカウントを開始する。そのため、正常時には、オーバーフロー割り込みは発生しない。
【００２８】
次に、図３を参照して異常時の動作について説明する。割り込み処理のダイナミックループなどの異常があるために、キャプチャ割り込みによって対応するアプリケーション監視タスクが起動できない場合には、ハードウェアタイマのカウンタのカウント値がウォッチドッグリセット関数（sys_wdg_timer_reset）によりリセットされず、カウンタのカウント値が累積されていき、最終的にはオーバーフロー割り込みが発生する。オーバーフロー割り込みが発生すると、ウォッチドッグコールバック関数２が呼び出されて、ウォッチドッグタイムアウト処理が行われる。
【００２９】
図４は、アプリケーション監視タスクを用いて監視対象タスクを監視する方法を示すものである。ここで、アプリケーション監視タスクは、前述したように、タスク監視設定テーブルとタスク監視状態ファイルとウォッチドッグ異常発生状態監視フラグとを使用するものである。
【００３０】
タスク監視設定テーブルには、監視対象タスクを特定する１〜Ｎ個（Ｎは正の整数）のタスク番号と、個々のタスク番号に対応させて、監視対象タスクについての実行監視時間および停止監視時間とが記録されている。実行監視時間とは、監視対象タスクの実行中のウォッチドッグ監視時間をいう。停止監視時間とは、タスクが停止中のウォッチドッグ監視時間をいう。
なお、ウォッチドッグ実行監視時間または停止監視時間が指定されていない場合（すなわち、監視時間が０の場合）には、該当する監視対象タスクについては、監視を行わない。
【００３１】
タスク監視状態ファイルは、１〜Ｎ個のタスク番号と、個々のタスク番号に対応させて、タスク実行開始時刻とタスク実行停止時刻とタスク監視状態フラグと統計情報とを含む。タスク実行開始時刻とはタスクの実行が開始された時点をいい、タスク実行停止時刻とはタスクの実行が終了した時点をいう。タスク監視状態フラグは、監視対象タスクが監視状態にあるか否かを表すものである。例えば、０であればその監視対象タスクについては監視がないことを表し、１であればその監視対象タスクの監視を実行中であることを表し、２であればその監視対象タスクの監視を停止中であることを表わすことができる。統計情報は、監視対象タスクについての適正な監視時間を設定するために統計的に処理された情報をいう。このような統計情報は、例えば、ある監視対象タスクについての監視回数、平均動作時間、動作最大時間、動作最小時間、動作ウォッチドッグタイマ発生回数、停止ウォッチドッグタイマ発生回数などの情報を含むことができる。ウォッチドッグタイマ発生状態管理フラグは、ウォッチドッグタイマの状態を表すものである。例えば、０であればウォッチドッグタイマは発生していないことを示し、１であればウォッチドッグタイマが発生していることを示すよう規定することができる。
【００３２】
また、各監視対象タスクの動作状態をアプリケーション監視タスクに通知するために、タスク動作開始通知関数およびタスク動作停止通知関数の２種類の関数を使用することができる。ここで、タスク動作開始通知関数とは、監視対象タスクの動作が開始したことをタスク監視状態ファイルに設定するための関数をいう。また、タスク動作停止通知関数とは、監視対象タスクの動作が停止したことをタスク監視状態ファイルに設定するための関数をいう。
【００３３】
図５に、アプリケーション監視タスクのフローチャートを示す。まず、ステップ４００において、システムの起動時に他のタスクが動作を開始する前にアプリケーション監視タスクが起動される。ステップ４０２で、アプリケーション監視タスクは、その起動時に、キャプチャ割り込みとオーバーフロー割り込み（すなわち、ウォッチドッグコールバック関数１および２）のための割り込みハンドラを登録する。ステップ４０４では、ウォッチドッグ異常発生状態管理フラグをオフ（すなわち０）にする。ステップ４０６で、ウォッチドッグタイマを起動する。そして、ステップ４０８で、アプリケーション監視タスクは、ウォッチドッグコールバック関数１からの起動待ち状態になる。
【００３４】
そして、ハードウェアタイマのカウント値が所定の値に達すると、キャプチャ割込みによりウォッチドッグコールバック関数１が起動する。すると、アプリケーション監視タスクが再び起動して、監視対象タスクの監視が開始される。そしてステップ４１０では、演算手段により現在時刻が読み出される。この現在時刻は、タスク監視状態ファイルの一部として記録手段に記録される。
【００３５】
これらウォッチドッグ異常発生状態管理フラグをオフにするステップ４０４、ウォッチドッグタイマの起動のステップ４０６、現在時刻の読み出しのステップ４１０の処理は、登録された監視対象タスク全部について繰り返される。
【００３６】
次に、監視タスク分ループ（ステップ４１２）を説明する。このステップ４１２以降のステップ４１４〜４２０は、タスク監視状態ファイルに登録された監視対象タスクの数（１〜Ｎ個）まで繰り返される。まず、タスクが動作中であるかまたは停止中であるかを、タスク監視状態フラグを用いて演算手段が判断する。そして、この判断によって以下のようにその後の処理が区別される。
【００３７】
監視対象タスクが動作中であって、その監視対象タスクのタスク実行監視時間が０以外の場合（すなわち、タスク監視要求がある場合）には、ステップ４１４においてタスク実行開始時刻と現在時刻とを比較して実行時間を算出する。そして、ステップ４１６において、実行時間がタスク実行監視時間より大きい場合には異常発生と判断し、ステップ４１８においてウォッチドッグ異常発生ログを保存してから、ステップ４２０においてウォッチドッグ異常発生状態管理フラグをオン（すなわち１）にする。そして、ステップ４１２に戻る。一方、ステップ４１６において、実行時間がタスク実行監視時間より小さい場合には、異常は発生していないので、そのままステップ４１２に戻る。この場合には、ウォッチドッグ異常発生状態管理フラグはオフ（すなわち０）のままである。
【００３８】
同様にして、監視対象タスクが停止中であって、その監視対象タスクのタスク停止監視時間が０以外の場合（すなわち、タスク監視要求がある場合）には、ステップ４１４においてタスク実行停止時刻と現在時刻とを比較して停止時間を算出する。そして、ステップ４１６において、停止時間がタスク停止監視時間より大きい場合には異常発生と判断し、ステップ４１８において異常発生ログを保存してから、ステップ４２０においてウォッチドッグ異常発生状態管理フラグをオン（すなわち１）にする。そして、ステップ４１２に戻る。一方、ステップ４１６において、停止時間がタスク実行停止監視時間より小さい場合には、異常は発生していないので、そのままステップ４１２に戻る。この場合には、ウォッチドッグ異常発生状態管理フラグはオフ（すなわち０）のままである。
【００３９】
これらのステップ４１４〜４２０を、タスク番号順に、全ての登録された監視対象タスクについて繰り返す。全ての監視対象タスクについて処理が終了すると、ステップ４１２に戻った後に、ステップ４２２へと進み、監視対象タスクに異常が発生していないかどうかをウォッチドッグ異常発生状態管理フラグがオンまたはオフであるかに基づいて、演算手段が判断する。
【００４０】
ここで、異常が発生していない場合には、ステップ４２４においてウォッチドッグリセット関数（sys_wdg_timer_reset）を用いてウォッチドッグタイマのカウント値がリセットされる。一方、異常が発生している場合には、ステップ４２６においてウォッチドッグリセット関数が呼び出されないので、ウォッチドッグタイマのカウント値がリセットされず（ウォッチドッグ異常発生処理）、カウント値は増大し続ける。そして、再びステップ４０８に戻り、全ての監視対象タスク分まで上記ステップ４０８〜４２６の処理が繰り返される。
【００４１】
ある監視対象タスクについて異常がある場合には、ウォッチドッグ異常状態管理フラグがオンのままになるので、ウォッチドッグタイマのカウント値がリセットされることなく、最終的には、カウント値が所定の値に達する。すると、オーバーフロー割り込みが発生して、ウォッチドッグコールバック関数２が呼び出されることになる。
【００４２】
ウォッチドッグ異常発生状態管理フラグがオンの場合（異常発生ありの場合）には、メモリやハードディスクドライブなどの記録手段にあるタスク監視状態ファイル中に、動作中ウォッチドッグ異常発生回数または停止異常発生回数が格納される。また、ウォッチドッグ異常発生状態管理フラグがオフの場合（異常発生なしの場合）には、監視対象タスクの監視回数と平均動作時間と動作最大時間と動作最小時間とが記録手段に同様に格納される。
【００４３】
次に、上記のキャプチャ割り込み処理およびオーバーフロー割り込み処理に用いられるウォッチドッグコールバック関数１および２について簡単に説明する。キャプチャ割り込み処理では、ウォッチドッグコールバック関数１が呼び出されて（ステップ４００２）、アプリケーション監視タスクが起動される（ステップ４０８）。つまり、ウォッチドッグコールバック関数１は、アプリケーション監視タスクの起動処理を行う。また、オーバーフロー割り込み処理では、ウォッチドッグコールバック関数２が呼び出され（ステップ４３２）、ウォッチドッグコールバック関数２から応答が戻ってきたら、例えば、システムのリセットを行うことができる（ステップ４４０）。つまり、ウォッチドッグコールバック関数２は、システムの停止処理を行う。
【００４４】
上記の図５において、ステップ４００においてアプリケーション監視タスクを起動するために、キャプチャ割り込みが発生してウォッチドッグコールバック関数１が呼び出されることになる。キャプチャ割り込みが発生した後の処理をステップ４０００〜４０１０に示す。ここで、ステップ４０００においてキャプチャ割り込みが発生すると、ステップ４００２においてウォッチドッグコールバック関数１が呼び出される。そして、ステップ４００４において呼び出されたウォッチドッグコールバック関数１がステップ４００６においてアプリケーション監視タスクの起動処理を行う。そして、ステップ４００８において起動処理が終了すると、その旨をステップ４００２において演算手段に返し、ステップ４０１０においてキャプチャ割り込み処理が終了する。
【００４５】
上記の図５において、ウォッチドッグ異常発生状態管理フラグがオンの場合（異常発生ありの場合）には、ウォッチドッグタイマのカウント値がリセットされないので最終的にオーバーフロー割り込みが発生することになる。オーバーフロー割り込みが発生した後の処理をステップ４３０〜４４２に示す。ここで、ステップ４３０においてオーバーフロー割り込みが発生すると、ステップ４３２においてウォッチドッグコールバック関数２が呼び出される。そして、ステップ４３６において呼び出されたウォッチドッグコールバック関数２がアプリケーション異常停止処理を行い、ステップ４３８においてアプリケーションを終了させる。そして、アプリケーションが終了した旨の応答を演算手段が受けると、システムのリセット（または演算手段（ＣＰＵ）のリセット）が行われる。ここで、システム又はＣＰＵのリセットの代わりに、単に異常があった監視対象アプリケーションのみに対する終了処理を行うこともできる。なお、上記のウォッチドッグコールバック関数１および２は、アプリケーションの処理とシステムの処理との機能を分離するために設けられている。
【００４６】
図６に、本発明のタスク監視システムを用いて、定期または不定期に動作するアプリケーションタスクを監視する仕方を示す。
【００４７】
まず、定期的に動作するタスクを監視する仕方を説明する。定期的に動作するタスクは、タスク動作開始時に「タスク動作開始関数」を呼び出し（ステップ５００）、その後に処理を行う（ステップ５０２）。そして、処理が終了すると、一定時間スリープ状態になる（ステップ５０４）。ここで、タスク動作開始関数は、タスク監視状態フラグをオン（すなわち１）に設定して（ステップ５２０）、タスク監視状態ファイル中のタスク実行開始時刻として、タスク状態監視関数の呼び出し時の現在時刻を保存する（ステップ５２２）。なお、ポーリング・セレクティング方式の通信のようにタスク監視システムの外部と通信する定期的なタスクを監視対象としている場合に、所定の通信時間が経過しても通信がないときには、通信ＬＳＩの異常などが考えられる。そのような場合には、ハードウェアのリセットなどの処理を行うために、上記処理が使用される。
【００４８】
次に、不定期に動作するタスク（例えば、不定期なイベントにより起動するタスク）を監視する仕方を説明する。不定期なイベントにより起動するタスクは、イベント待ちになる前に「タスク動作停止関数」を呼びだし（ステップ５０６）、その後イベント待ちに入る（ステップ５０８）。イベントが発生して実行中になった場合には、「タスク動作開始関数」を呼び出し（ステップ５１０）、その後に処理を実行する（ステップ５１２）。
【図面の簡単な説明】
【００４９】
【図１】本発明の実施に用いられるタスク監視システムにおいて監視対象タスク（アプリケーション）を監視する仕方を示す概略フローチャートである。
【図２】本発明の実施に用いられるタスク監視システム内でのタスク監視処理を示す概略図である。
【図３】図２のタスク監視システム内にあるウォッチドッグタイマのタイマカウンタのリセット動作を示す概略図である。
【図４】本発明の実施に用いられるアプリケーション監視タスクを用いて監視対象タスクを監視する方法を示す概略図である。
【図５】本発明の実施に用いられるアプリケーション監視タスクの処理を示すフローチャートである。
【図６】本発明の実施に用いられるタスク監視システムを用いて、定期または不定期に動作するアプリケーションタスクを監視する仕方を示すフローチャートである。
【符号の説明】
【００５０】
４００  アプリケーション監視タスク
４０００  キャプチャ割り込み
４３０  オーバーフロー割り込み
【図１】
2006227962.tif 000003
【図２】
2006227962.tif 000004
【図３】
2006227962.tif 000005
【図４】
2006227962.tif 000006
【図５】
2006227962.tif 000007
【図６】
2006227962.tif 000008