(57)【要約】【課題】ウォッチドッグタイマがタイムアップするタイミングを適切に調整する。【解決手段】情報処理装置１０は、プロセッサ１１を用いて、タイマ１２を初期化する監視プロセス１３と、監視プロセス１３より優先度の高い監視プロセス１４とを起動する。情報処理装置１０は、監視プロセス１４により、監視プロセス１３が実行されたか監視する。情報処理装置１０は、監視プロセス１３が実行されていない場合、監視プロセス１４により、プロセッサ１１の負荷状況１５が所定の条件を満たすか判定し、負荷状況１５が所定の条件を満たす場合は監視プロセス１４によりタイマ１２を初期化する。【選択図】図１
2016224883.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサと、タイムアップした場合に前記プロセッサをリセットさせるタイマとを有するコンピュータが実行する異常検出方法であって、
前記プロセッサを用いて、前記タイマを初期化する第１の監視プロセスと、前記第１の監視プロセスより優先度の高い第２の監視プロセスとを起動し、
前記第２の監視プロセスにより、前記第１の監視プロセスが実行されたか監視し、
前記第１の監視プロセスが実行されていない場合、前記第２の監視プロセスにより、前記プロセッサの負荷状況が所定の条件を満たすか判定し、前記負荷状況が前記所定の条件を満たす場合は前記第２の監視プロセスにより前記タイマを初期化する、
異常検出方法。
【請求項２】
前記第２の監視プロセスにより、前記第１および第２の監視プロセス以外の他のプロセスによって使用された前記プロセッサのリソース量を示す履歴を保存し、
前記負荷状況が前記所定の条件を満たすか否かの判定は、前記他のプロセスによって使用されている現在のリソース量と前記履歴とを比較することを含む、
請求項１記載の異常検出方法。
【請求項３】
前記第１の監視プロセスが実行されていない場合、前記第２の監視プロセスにより、前記コンピュータが有するメモリから不揮発性の記憶装置にログ情報を退避する、
請求項１または２記載の異常検出方法。
【請求項４】
前記プロセッサを用いて、前記第１の監視プロセスより優先度が高く前記第２の監視プロセスより優先度が低い第３の監視プロセスを更に起動し、
前記ログ情報は、前記第３の監視プロセスが実行されたか否かを示す情報を含む、
請求項３記載の異常検出方法。
【請求項５】
プロセッサと、メモリと、タイムアップした場合に前記プロセッサをリセットさせるタイマとを有するコンピュータが実行する異常検出方法であって、
前記プロセッサを用いて、前記タイマを初期化する第１の監視プロセスと、前記第１の監視プロセスより優先度の高い第２の監視プロセスとを起動し、
前記第２の監視プロセスにより、前記第１の監視プロセスが実行されたか監視し、
前記第１の監視プロセスが実行されていない場合、前記第２の監視プロセスにより、前記メモリから不揮発性の記憶装置にログ情報を退避する、
異常検出方法。
【請求項６】
プロセッサと、
タイムアップした場合に前記プロセッサをリセットさせるタイマとを有し、
前記プロセッサは、前記タイマを初期化する第１の監視プロセスと、前記第１の監視プロセスより優先度の高い第２の監視プロセスとを起動し、
前記第２の監視プロセスは、前記第１の監視プロセスが実行されたか監視し、前記第１の監視プロセスが実行されていない場合、前記プロセッサの負荷状況が所定の条件を満たすか判定し、前記負荷状況が前記所定の条件を満たす場合は前記タイマを初期化する、
情報処理装置。
【請求項７】
タイムアップした場合にプロセッサをリセットさせるタイマを有するコンピュータに、
前記タイマを初期化する第１の監視プロセスと、前記第１の監視プロセスより優先度の高い第２の監視プロセスとを起動し、
前記第２の監視プロセスにより、前記第１の監視プロセスが実行されたか監視し、
前記第１の監視プロセスが実行されていない場合、前記第２の監視プロセスにより、前記プロセッサの負荷状況が所定の条件を満たすか判定し、前記負荷状況が前記所定の条件を満たす場合は前記第２の監視プロセスにより前記タイマを初期化する、
処理を実行させる異常検出プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は異常検出方法、情報処理装置および異常検出プログラムに関する。
【背景技術】
【０００２】
コンピュータが有するプロセッサは、メモリに記憶されたプログラムを実行する。プログラムに不具合があると、プロセッサは無限ループを実行するなど、プログラムを終了できなくなり異常な不停止状態になる場合がある。異常な不停止状態になると、プロセッサは演算能力の多くを当該不具合のあるプログラムのために消費してしまい、プロセッサ自身によって異常を検知し正常な状態に戻すことが難しくなる場合がある。
【０００３】
そこで、コンピュータは、ウォッチドッグタイマと呼ばれるハードウェアを備えることがある。ウォッチドッグタイマは、時間の経過に応じてカウントアップまたはカウントダウンを行い、カウントが所定値になる（タイムアップする）とプロセッサにリセット信号を送信する。プロセッサは正常な状態である間は、ウォッチドッグタイマがタイムアップしないように、定期的にカウントを初期値に戻すプロセスを実行する。一方、異常な不停止状態になると、プロセッサはカウントを初期値に戻すプロセスを実行できなくなり、ウォッチドッグタイマがタイムアップする。タイムアップすると、プロセッサはウォッチドッグタイマからのリセット信号によってリセットされる。
【０００４】
ウォッチドッグタイマに関して、プロセッサがリセットされた原因の分析を容易にするため、リセット前のプロセッサの内部状態を保存できるようにした緊急動作制御方法が提案されている。提案の緊急動作制御方法では、ウォッチドッグタイマがリセット信号を発行すると、プロセッサの内部状態をメモリに保存する。内部状態の保存が完了するか、または、リセット信号が発行されてから一定時間経過すると、プロセッサを再起動する。
【０００５】
また、高階層の監視プログラムと低階層の監視プログラムの両方を用いて、低階層のプログラム暴走を検出できるようにした再起動制御方法が提案されている。提案の再起動制御方法では、高階層の監視プログラムを用いて、プロセッサが定期的にウォッチドッグタイマを初期化するようにする。また、ウォッチドッグタイマの初期化とは別に、低階層の監視プログラムを用いて、プロセッサが定期的に信号を出力するようにする。プロセッサからの信号の出力回数をカウントし、ウォッチドッグタイマを複数回初期化する間にカウントが変化しない場合、低階層のプログラム暴走と判定してプロセッサを再起動する。
【０００６】
また、ベースルーチンに対する割り込みが頻繁に発生しても、プログラム暴走を誤検出するリスクを低減できる異常検出装置が提案されている。提案の異常検出装置では、プロセッサが最高優先度で定期的に、ウォッチドッグタイマを初期化する定期割り込みルーチンを実行する。定期割り込みルーチンは、起動される毎に起動回数をカウントアップし、カウントが所定値を超えた場合はウォッチドッグタイマの初期化を行わない。ベースルーチンは、所定の処理が一巡する毎に定期割り込みルーチンのカウントを戻す。これにより、ベースルーチンの処理が遅延しても、すぐにはプログラム暴走と判定されない。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開昭５８−１８１１６０号公報
【特許文献２】特開昭６３−３１６１４５号公報
【特許文献３】特開平６−１９５２４４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
上記の特許文献２，３に記載された技術では、定期的に実行されるべき低優先度のプロセスが所定回数連続して実行されなかった場合に、ウォッチドッグタイマの初期化が停止されてプロセッサがリセットされる。しかし、特許文献２，３に記載された技術では、低優先度のプロセスが実行されなくなってからウォッチドッグタイマの初期化が停止されるまでの許容時間が固定であり、許容時間の調整が難しいという問題がある。許容時間を短く設定すると、正常な高負荷状態を異常な不停止状態と誤判定してしまうリスクが高くなる。一方、許容時間を長く設定すると、プロセッサが異常な不停止状態になってからリセットされるまでの遅延が大きくなってしまう。
【０００９】
そこで、１つの側面では、本発明は、ウォッチドッグタイマがタイムアップするタイミングを適切に調整できる異常検出方法、情報処理装置および異常検出プログラムを提供することを目的とする。
【００１０】
また、上記の特許文献１に記載された技術では、ウォッチドッグタイマによってリセット信号が発行された場合に、プロセッサがすぐにはリセットされずにプロセッサがログ情報を保存するための時間が確保される。しかし、特許文献１に記載された技術では、ログ情報を保存するための特別のハードウェアを用意することになるという問題がある。
【００１１】
そこで、１つの側面では、本発明は、ログ情報の保存が容易になる異常検出方法を提供することを目的とする。
【課題を解決するための手段】
【００１２】
１つの態様では、プロセッサと、タイムアップした場合にプロセッサをリセットさせるタイマとを有するコンピュータが実行する異常検出方法が提供される。プロセッサを用いて、タイマを初期化する第１の監視プロセスと、第１の監視プロセスより優先度の高い第２の監視プロセスとを起動する。第２の監視プロセスにより、第１の監視プロセスが実行されたか監視する。第１の監視プロセスが実行されていない場合、第２の監視プロセスにより、プロセッサの負荷状況が所定の条件を満たすか判定し、負荷状況が所定の条件を満たす場合は第２の監視プロセスによりタイマを初期化する。
【００１３】
また、１つの態様では、プロセッサと、メモリと、タイムアップした場合にプロセッサをリセットさせるタイマとを有するコンピュータが実行する異常検出方法が提供される。プロセッサを用いて、タイマを初期化する第１の監視プロセスと、第１の監視プロセスより優先度の高い第２の監視プロセスとを起動する。第２の監視プロセスにより、第１の監視プロセスが実行されたか監視する。第１の監視プロセスが実行されていない場合、第２の監視プロセスにより、メモリから不揮発性の記憶装置にログ情報を退避する。
【００１４】
また、１つの態様では、プロセッサとタイマとを有する情報処理装置が提供される。また、１つの態様では、コンピュータに実行させる異常検出プログラムが提供される。
【発明の効果】
【００１５】
１つの側面では、ウォッチドッグタイマがタイムアップするタイミングを適切に調整できる。また、１つの側面では、ログ情報の保存が容易になる。
【図面の簡単な説明】
【００１６】
【図１】第１の実施の形態の情報処理装置の例を示す図である。
【図２】第２の実施の形態の情報処理装置の例を示す図である。
【図３】伝送装置のハードウェア例を示すブロック図である。
【図４】第３の実施の形態の伝送装置の機能例を示すブロック図である。
【図５】第３の実施の形態のプロセス優先度の例を示す図である。
【図６】ＣＰＵ使用率テーブルの例を示す図である。
【図７】第３の実施の形態の最低優先監視の手順例を示すフローチャートである。
【図８】第３の実施の形態の最高優先監視の手順例を示すフローチャートである。
【図９】第４の実施の形態の伝送装置の機能例を示すブロック図である。
【図１０】第４の実施の形態のプロセス優先度の例を示す図である。
【図１１】フラグリストの例を示す図である。
【図１２】第４の実施の形態の最低優先監視の手順例を示すフローチャートである。
【図１３】第４の実施の形態の中間優先監視の手順例を示すフローチャートである。
【図１４】第４の実施の形態の最高優先監視の手順例を示すフローチャートである。
【発明を実施するための形態】
【００１７】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１８】
図１は、第１の実施の形態の情報処理装置の例を示す図である。
第１の実施の形態の情報処理装置１０は、プロセッサ１１およびタイマ１２を有する。
プロセッサ１１は、ＣＰＵ（Central Processing Unit）やＣＰＵコアなどの演算装置である。プロセッサ１１は、プログラムをメモリにロードし、メモリに記憶されたプログラムを実行する。プロセッサ１１は、１または２以上のプログラムに基づいて起動された複数のプロセスを、その優先度に応じて時分割に実行することができる。優先度が高いプロセスに対して、処理時間（プロセッサリソース）が優先的に割り当てられる。
【００１９】
タイマ１２は、時間の経過に応じてカウントアップまたはカウントダウンを行い、カウントが所定値に達した（タイムアップした）場合にプロセッサ１１をリセットさせる。ただし、プロセッサ１１によってタイマ１２が初期化されることで、カウントが初期値に戻る。タイマ１２は、ウォッチドッグタイマと呼ばれることがある。例えば、タイマ１２は、プロセッサ１１によって設定された初期値から始めてカウントダウンを行い、カウントがゼロになるとプロセッサ１１に対してリセット信号を送信する。リセット信号は、例えば、プロセッサ１１に対する割り込み信号として送信される。
【００２０】
リセット信号を受信すると、プロセッサ１１は、レジスタの値などの内部状態をクリアして再起動する。例えば、プロセッサ１１は、所定の初期プログラムをメモリにロードし直し、初期プログラムを最初から実行し直す。これにより、リセット前に実行されていたプロセスの全てが強制的に停止されて破棄されることになる。
【００２１】
ここで、プロセッサ１１は、監視プロセス１３（第１の監視プロセス）と監視プロセス１４（第２の監視プロセス）を起動する。監視プロセス１３，１４を定義した異常検出プログラムは、例えば、プロセッサ１１の起動後に実行される初期プログラムを介して呼び出される。監視プロセス１３は、低い優先度（例えば、プロセッサ１１によって実行され得るプロセスの中の最低優先度）で実行される。監視プロセス１４は、監視プロセス１３より高い優先度（例えば、プロセッサ１１によって実行され得るプロセスの中の最高優先度）で実行される。監視プロセス１３，１４を含む複数のプロセスそれぞれの優先度は、例えば、ＯＳ（Operating System）によって管理される。
【００２２】
監視プロセス１３は、継続的に（例えば、所定の周期で間欠的に）タイマ１２を初期化する。例えば、監視プロセス１３は、タイマ１２が有するレジスタの値を初期値に書き換える。監視プロセス１３が実行される時間間隔は、タイマ１２が初期化されてからタイムアップするまでの時間より短いものとする。監視プロセス１３が正常に実行されていれば、タイマ１２がタイムアップする前にタイマ１２が初期化される。これにより、タイマ１２によってプロセッサ１１がリセットされるのを回避できる。
【００２３】
これに対し、監視プロセス１３よりも優先度の高いプロセスの負荷が高い場合、監視プロセス１３に割り当てられるプロセッサリソースが減少し、予定されたタイミングに監視プロセス１３が実行されないことがある。これにより、予定されたタイミングにタイマ１２が初期化されなくなる。プロセスの負荷が高くなる場合には、当該プロセスが正常に実行されているものの一時的に負荷が高くなった場合（正常高負荷状態）がある。また、プロセスの負荷が高くなる場合には、プログラムの不具合によって、当該プロセスが無限ループを実行するなど意図せず停止できなくなった場合（異常不停止状態）がある。
【００２４】
異常不停止状態では、タイマ１２によってプロセッサ１１が迅速にリセットされることが好ましい。一方、正常高負荷状態では、プロセッサ１１がリセットされないことが好ましい。そこで、監視プロセス１４が以下の処理を実行する。
【００２５】
監視プロセス１４は、予定されたタイミングに監視プロセス１３が実行されたかを監視する。例えば、監視プロセス１４は、タイマ１２のカウントを確認し、前回からのカウントの変化量が閾値より大きい場合、監視プロセス１３が実行されていないと判定する。また、例えば、監視プロセス１３が実行毎にメモリまたはレジスタにフラグを書き込むようにする。監視プロセス１４は、メモリまたはレジスタにフラグが書き込まれていない場合、監視プロセス１３が実行されていないと判定する。監視プロセス１４を実行する時間間隔は、監視プロセス１３と同じか、監視プロセス１３よりも若干長いことが好ましい。
【００２６】
監視プロセス１３が実行されていない場合、監視プロセス１４は、プロセッサ１１の負荷状況１５を確認し、負荷状況１５が所定条件を満たすか判定する。負荷状況１５には、例えば、プロセッサ１１で実行されている各プロセスのプロセッサ使用率が含まれる。負荷状況１５が所定条件を満たすか否かの判定には、例えば、負荷状況１５と各プロセスの過去のプロセッサ使用率の履歴とを比較することが含まれる。各プロセスのプロセッサ使用率の履歴は、監視プロセス１４によって収集するようにしてもよい。
【００２７】
所定条件には、例えば、プロセッサ１１で実行中のプロセスの中に、現在のプロセッサ使用率が過去のプロセッサ使用率の最大値を超えるプロセスがないことが含まれる。また、所定条件には、例えば、プロセッサ１１で実行中のプロセスのうち、現在のプロセッサ使用率が過去のプロセッサ使用率の平均値より大きいプロセスの数が、閾値以下であることが含まれる。負荷状況１５が所定条件を満たす場合、監視プロセス１４は、プロセッサ１１が正常高負荷状態であると推定し、監視プロセス１３に代わってタイマ１２を初期化する。一方、負荷状況１５が所定条件を満さない場合、監視プロセス１４は、プロセッサ１１が異常不停止状態であると推定し、タイマ１２を初期化しない。
【００２８】
第１の実施の形態の情報処理装置１０によれば、タイマ１２を初期化する監視プロセス１３と、監視プロセス１３より優先度の高い監視プロセス１４とが起動される。監視プロセス１４により、監視プロセス１３が実行されたか監視される。監視プロセス１３が実行されていない場合、監視プロセス１４により、プロセッサ１１の負荷状況１５が所定条件を満たすか判定される。負荷状況１５が所定条件を満たす場合、監視プロセス１３に代わって監視プロセス１４によりタイマ１２が初期化される。
【００２９】
これにより、監視プロセス１３が実行されなくても、プロセッサ１１が正常高負荷状態と判定されればタイマ１２が初期化され、プロセッサ１１がリセットされるのを回避できる。一方、プロセッサ１１が異常不停止状態と判定されればタイマ１２が初期化されず、プロセッサ１１がリセットされる。また、監視プロセス１３が実行されなくなってからタイマ１２の初期化を停止するまでの許容時間を固定にする方法と比べて、プロセッサ１１が正常高負荷状態であるにもかかわらずプロセッサ１１がリセットされるリスクを低減できる。また、許容時間を固定にする方法と比べて、プロセッサ１１が異常不停止状態になってからリセットされるまでの遅延を短縮できる。このように、タイマ１２がタイムアップするタイミングを適切に調整することが可能となる。
【００３０】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
図２は、第２の実施の形態の情報処理装置の例を示す図である。
【００３１】
第２の実施の形態の情報処理装置２０は、プロセッサ２１、タイマ２２、メモリ２３および記憶装置２４を有する。プロセッサ２１は、第１の実施の形態のプロセッサ１１に対応する。タイマ２２は、第１の実施の形態のタイマ１２に対応する。
【００３２】
メモリ２３は、ＲＡＭ（Random Access Memory）などの揮発性の記憶装置である。メモリ２３は、プロセッサ２１が実行するプログラムやプロセッサ２１が使用するデータを一時的に記憶する。メモリ２３上にはログ情報２７が生成される。ログ情報２７は、プロセッサ２１によるプロセスの実況状況を示す情報である。ログ情報２７には、例えば、ＯＳが生成するエラーメッセージ、プロセス間通信の情報、通信履歴、ハードウェアの設定情報などが含まれる。プロセッサ２１がリセットされると、メモリ２３上のログ情報２７は破棄される。記憶装置２４は、フラッシュメモリ、ＳＳＤ（Solid State Drive）、ＨＤＤ（Hard Disk Drive）などの不揮発性の記憶装置である。ただし、記憶装置２４が情報処理装置２０の外部に存在していてもよい。
【００３３】
プロセッサ２１は、監視プロセス２５（第１の監視プロセス）と監視プロセス２６（第２の監視プロセス）を起動する。監視プロセス２５は、第１の実施の形態の監視プロセス１３に対応する。監視プロセス２６は、第１の実施の形態の監視プロセス１４に対応する。監視プロセス２５は、低い優先度（例えば、最低優先度）で実行される。監視プロセス２６は、監視プロセス２５より高い優先度（例えば、最高優先度）で実行される。
【００３４】
監視プロセス２５は、継続的に（例えば、所定の周期で間欠的に）タイマ２２を初期化する。監視プロセス２６は、予定されたタイミングに監視プロセス２５が実行されたかを監視する。監視プロセス２５が実行されていない場合、監視プロセス２６は、プロセッサ２１がリセットされる可能性があると判断する。
【００３５】
プロセッサ２１がリセットされる可能性がある場合、監視プロセス２５は、プロセッサ２１がリセットされる前に、メモリ２３から記憶装置２４にログ情報２７を退避する。すなわち、監視プロセス２６は、メモリ２３に記憶されたログ情報２７を記憶装置２４に保存する。ログ情報２７は、監視プロセス２５の不実行が検出されてから監視プロセス２６によって生成されてもよい。また、ログ情報２７は、監視プロセス２５の不実行が検出される前に、ＯＳなどによって生成されたものであってもよい。
【００３６】
第２の実施の形態の情報処理装置２０によれば、タイマ２２を初期化する監視プロセス２５と、監視プロセス２５より優先度の高い監視プロセス２６とが起動される。監視プロセス２６により、監視プロセス２５が実行されたか監視される。監視プロセス２５が実行されていない場合、監視プロセス２６により、プロセッサ２１がリセットされる前にメモリ２３から記憶装置２４にログ情報２７が退避される。
【００３７】
これにより、プロセッサ２１がリセットされても、不揮発性の記憶装置である記憶装置２４にログ情報２７を残すことができる。よって、プロセッサ２１がリセットされた原因を分析することが容易となる。また、プロセッサ２１やタイマ２２に特別なハードウェアを設けなくてもよく、ログ情報２７を保存することが容易となる。
【００３８】
なお、第２の実施の形態は、前述の第１の実施の形態と組み合わせることが可能である。例えば、監視プロセス２５が実行されていない場合、監視プロセス２６がログ情報２７を記憶装置２４に退避すると共に、プロセッサ２１の負荷状況を確認する。第１の実施の形態で説明したように、負荷状況が所定条件を満たす場合、監視プロセス２６が監視プロセス２５に代わってタイマ２２を初期化するようにしてもよい。
【００３９】
［第３の実施の形態］
次に、第３の実施の形態を説明する。
図３は、伝送装置のハードウェア例を示すブロック図である。
【００４０】
第３の実施の形態の伝送装置１００は、ルータやスイッチなど、通信を中継する通信装置である。伝送装置１００は、プログラムによって制御される点で、情報処理装置またはコンピュータと呼ぶこともできる。伝送装置１００は、第１の実施の形態の情報処理装置１０や第２の実施の形態の情報処理装置２０に対応する。
【００４１】
伝送装置１００は、ＣＰＵ１０１、ウォッチドッグタイマ１０２、ＲＡＭ１０４、不揮発性メモリ１０５、ブートメモリ１０６、管理インタフェース１０７および通信インタフェース１０８を有する。上記のユニットは、バス１０９に接続されている。また、ＣＰＵ１０１とウォッチドッグタイマ１０２とは、リセット信号線１０３で接続されている。
【００４２】
ＣＰＵ１０１は、第１の実施の形態のプロセッサ１１や第２の実施の形態のプロセッサ２１に対応する。ウォッチドッグタイマ１０２は、第１の実施の形態のタイマ１２や第２の実施の形態のタイマ２２に対応する。ＲＡＭ１０４は、第２の実施の形態のメモリ２３に対応する。不揮発性メモリ１０５は、第２の実施の形態の記憶装置２４に対応する。
【００４３】
ＣＰＵ１０１は、プログラムの命令を実行するプロセッサである。ＣＰＵ１０１は、ブートメモリ１０６に記憶されたプログラムをＲＡＭ１０４にロードし、プログラムを実行する。ＣＰＵ１０１は、プログラムに基づいて起動された複数のプロセスを時分割に実行することができる。複数のプロセスそれぞれに対しては、ＯＳによって優先度が付与され、優先度に応じて処理時間（ＣＰＵリソース）が割り当てられる。なお、ＣＰＵ１０１は複数のＣＰＵコアを備えてもよく、伝送装置１００は複数のＣＰＵを備えてもよい。複数のＣＰＵの集合（マルチプロセッサ）を「プロセッサ」と呼んでもよい。
【００４４】
ウォッチドッグタイマ１０２は、タイムアップした場合に、リセット信号線１０３を介してＣＰＵ１０１にリセット信号を送信するタイマである。リセット信号は、ＣＰＵ１０１に対する割り込み信号として送信される。ＣＰＵ１０１は、ウォッチドッグタイマ１０２からリセット信号を受信すると、レジスタの値などの内部状態を破棄して再起動する。ＣＰＵ１０１が再起動されると、ブートメモリ１０６からＲＡＭ１０４に再びプログラムがロードされてプログラムの最初から実行される。すなわち、リセット信号が発行されると、リセット前にＣＰＵ１０１で実行されていたプロセスは強制的に停止されることになる。なお、ウォッチドッグタイマ１０２は、リセット信号線１０３を使用する代わりに、バス１０９を介してＣＰＵ１０１にリセット信号を送信するようにしてもよい。
【００４５】
ウォッチドッグタイマ１０２は、揮発性の記憶装置であるクリアレジスタ１０２ａを有する。ＣＰＵ１０１は、バス１０９を介してクリアレジスタ１０２ａにカウントの初期値（正の整数）を書き込む。ウォッチドッグタイマ１０２は、時間の経過に応じて、クリアレジスタ１０２ａに記憶されたカウントを１ずつ減少させる（カウントダウンする）。クリアレジスタ１０２ａに記憶されたカウントがゼロになる（タイムアップする）と、ウォッチドッグタイマ１０２はＣＰＵ１０１にリセット信号を送信する。
【００４６】
ＲＡＭ１０４は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。ＣＰＵ１０１がリセットされると、ＲＡＭ１０４に記憶されたデータは破棄されることになる。なお、伝送装置１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００４７】
不揮発性メモリ１０５は、伝送装置１００の稼働状況を示すログや伝送装置１００の制御に用いられる制御情報などの各種データを記憶する不揮発性の記憶装置である。不揮発性メモリ１０５に記憶されるデータには、ＯＳのログメッセージ、プロセス間通信の情報、温度・ファン回転数・通信インタフェース１０８の使用履歴などの稼働情報、ハードウェアの設定情報などが含まれ得る。不揮発性メモリ１０５として、例えば、フラッシュメモリやＳＳＤなどを用いることができる。ただし、伝送装置１００は、ＨＤＤなどの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００４８】
ブートメモリ１０６は、ＣＰＵ１０１によって実行される各種プログラムを記憶する不揮発性の記憶装置である。ブートメモリ１０６に記憶されるプログラムには、ＢＩＯＳ（Basic Input Output System）プログラム、ＢＩＯＳから呼び出される初期化プログラム、ＯＳプログラム、伝送装置１００を制御する制御プログラムなどが含まれ得る。制御プログラムには、ウォッチドッグタイマ１０２を用いてＣＰＵ１０１の異常を検出するための異常検出プログラムが含まれる。ブートメモリ１０６として、例えば、ＲＯＭ（Read Only Memory）やフラッシュメモリなどを用いることができる。
【００４９】
管理インタフェース１０７は、ユーザが操作する端末装置３０と接続する。端末装置３０は、ディスプレイ３１、入力デバイス３２および媒体リーダ３３を有する。なお、端末装置３０は、ＣＰＵ、ＲＡＭ、不揮発性の記憶装置、通信インタフェースなどを更に有していてもよい。また、ディスプレイ３１や入力デバイス３２は、端末装置３０の外部に存在していてもよい。その場合、端末装置３０は、ディスプレイ３１を接続する画像信号インタフェースや、入力デバイス３２を接続する入力信号インタフェースを有する。
【００５０】
ディスプレイ３１は、画像を表示する。ディスプレイ３１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、プラズマディスプレイ（ＰＤＰ：Plasma Display Panel）、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなどを用いることができる。
【００５１】
入力デバイス３２は、ユーザからの入力操作を受け付ける。入力デバイス３２としては、マウスやタッチパネルやタッチパッドやトラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。端末装置３０は、複数の種類の入力デバイスを有していてもよい。
【００５２】
媒体リーダ３３は、記録媒体３４に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体３４として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。記録媒体３４から読み取られたプログラムやデータは、不揮発性メモリ１０５やブートメモリ１０６に転送されてもよい。
【００５３】
通信インタフェース１０８は、情報処理装置や他の伝送装置と接続する。通信インタフェース１０８は、複数の通信ポートを有していてもよい。ＣＰＵ１０１によって、各通信ポートの使用方法が制御され、各通信ポートの使用状況が監視される。
【００５４】
図４は、第３の実施の形態の伝送装置の機能例を示すブロック図である。
伝送装置１００は、プロセス起動部１１１、ＣＰＵ使用率記憶部１１２、フラグ記憶部１１３、最低優先監視プロセス１２１および最高優先監視プロセス１２２を有する。ＣＰＵ使用率記憶部１１２およびフラグ記憶部１１３は、ＲＡＭ１０４に確保した記憶領域を用いて実現できる。プロセス起動部１１１、最低優先監視プロセス１２１および最高優先監視プロセス１２２は、ＣＰＵ１０１が実行するプログラムを用いて実現できる。
【００５５】
プロセス起動部１１１は、ＢＩＯＳプログラムから呼び出される初期化プログラムに基づいて起動される。プロセス起動部１１１は、ＣＰＵ１０１が起動すると、初期段階で最低優先監視プロセス１２１と最高優先監視プロセス１２２を起動させる。
【００５６】
ＣＰＵ使用率記憶部１１２は、ＣＰＵ１０１で実行される複数のプロセスそれぞれのＣＰＵ使用率に関する履歴を記憶する。ＣＰＵ使用率の履歴は、最高優先監視プロセス１２２によって収集される。ＣＰＵ使用率の履歴の詳細は後述する。フラグ記憶部１１３は、最低優先監視プロセス１２１が実行されたか否かを示すフラグを記憶する。最低優先監視プロセス１２１が実行されると、フラグがＯＮ（１）に更新される。最高優先監視プロセス１２２によってフラグが確認されると、フラグがＯＦＦ（０）に更新される。ただし、後述するように、最低優先監視プロセス１２１が実行されたか否かを別の方法で確認することができる場合、伝送装置１００はフラグ記憶部１１３を有しなくてもよい。
【００５７】
最低優先監視プロセス１２１は、ＣＰＵ１０１で実行され得るプロセスの中の最低優先度で実行されるプロセスである。最低優先監視プロセス１２１は、定期的に、ウォッチドッグタイマ１０２のクリアレジスタ１０２ａにカウントの初期値を書き込む（すなわち、定期的にウォッチドッグタイマ１０２を初期化する）。最低優先監視プロセス１２１が実行される周期は、ウォッチドッグタイマ１０２のカウントが初期値からゼロまで減少する時間よりも短いものとし、例えば、１０秒程度とする。
【００５８】
最低優先監視プロセス１２１が正常に実行されていれば、ウォッチドッグタイマ１０２によるリセット信号の発行を回避することができる。ただし、ＣＰＵ１０１の負荷が高い場合、ＯＳによって最低優先監視プロセス１２１に割り当てられるＣＰＵリソースが減少し、予定したタイミングに最低優先監視プロセス１２１が実行されない可能性がある。最低優先監視プロセス１２１は、ウォッチドッグタイマ１０２を初期化するとき、フラグ記憶部１１３に記憶されているフラグをＯＮに更新する。
【００５９】
最高優先監視プロセス１２２は、ＣＰＵ１０１で実行され得るプロセスの中の最高優先度で実行されるプロセスである。最高優先監視プロセス１２２は、定期的に、ＣＰＵ１０１で実行されている複数のプロセスそれぞれのＣＰＵ使用率の情報をＯＳから取得し、ＣＰＵ使用率記憶部１１２に記憶された履歴を更新する。また、最高優先監視プロセス１２２は、定期的にフラグ記憶部１１３に記憶されたフラグを参照して、最低優先監視プロセス１２１が正常に実行されているか確認する。または、最高優先監視プロセス１２２は、定期的にクリアレジスタ１０２ａを参照して、ウォッチドッグタイマ１０２が正常に初期化されているか確認する。最高優先監視プロセス１２２が実行される周期は、最低優先監視プロセス１２１と同じか若干長いものとし、例えば、１０〜２０秒程度とする。
【００６０】
最低優先監視プロセス１２１が正常に実行されていない場合、最高優先監視プロセス１２２は、ＲＡＭ１０４からログを収集する。ログには、例えば、ＯＳのエラーメッセージ、プロセス間通信の情報、通信インタフェース１０８の使用履歴、温度・ファン回転数などの環境情報、ハードウェアの設定情報などが含まれる。ログは、ＣＰＵ１０１がリセットされた場合にリセット原因を分析するのに有用な情報である。最高優先監視プロセス１２２は、収集したログを不揮発性メモリ１０５に保存する。
【００６１】
また、最低優先監視プロセス１２１が正常に実行されていない場合、最高優先監視プロセス１２２は、複数のプロセスそれぞれの現在のＣＰＵ使用率を確認する。最高優先監視プロセス１２２は、現在のＣＰＵ使用率とＣＰＵ使用率記憶部１１２に記憶された履歴とを比較し、ＣＰＵ１０１が正常高負荷状態か異常不停止状態かを判定する。
【００６２】
正常高負荷状態は、プロセスが正常に実行されているものの一時的に負荷が高くなっている状態である。異常不停止状態は、プログラムの不具合によって、無限ループを実行するなどプロセスが意図せず停止できなくなった状態である。正常高負荷状態と推定した場合、最高優先監視プロセス１２２は、最低優先監視プロセス１２１に代わってウォッチドッグタイマ１０２を初期化する。一方、異常不停止状態と推定した場合、最高優先監視プロセス１２２は、ウォッチドッグタイマ１０２を初期化せずリセット信号が発行されるのを期待する。正常高負荷状態と異常不停止状態の判定方法の詳細は後述する。
【００６３】
図５は、第３の実施の形態のプロセス優先度の例を示す図である。
ＣＰＵ１０１において時分割に実行される複数のプロセスは、ＯＳによって管理される。ＯＳは、複数のプロセスそれぞれに対して優先度を付与し、優先度に応じてＣＰＵ１０１の処理時間を割り当てる。優先度が高いプロセスに対して、優先度が低いプロセスよりも優先的にＣＰＵ１０１の処理時間が割り当てられる。
【００６４】
前述のように、最低優先監視プロセス１２１は、ＯＳが付与し得る複数の優先度のうちの最低優先度で実行される。最高優先監視プロセス１２２は、ＯＳが付与し得る複数の優先度のうちの最高優先度で実行される。他のプロセスは原則として、最低優先監視プロセス１２１よりも高く、最高優先監視プロセス１２２よりも低い優先度で実行される。例えば、アプリケーションプログラムに基づいて起動されるアプリケーションプロセス１２３ａ，１２３ｂには、最高優先度と最低優先度の間の優先度が付与される。
【００６５】
ここで、例えば、アプリケーションプロセス１２３ａが暴走した、すなわち、アプリケーションプログラムの不具合によってアプリケーションプロセス１２３ａが意図せず停止できなくなったとする。この場合でも、最高優先監視プロセス１２２には優先的にＣＰＵリソースが割り当てられる。よって、最高優先監視プロセス１２２は、予定されたタイミングで実行される可能性が高い。一方、アプリケーションプロセス１２３ａが多くのＣＰＵリソースを消費することにより、最低優先監視プロセス１２１にはＣＰＵリソースがほとんど割り当てられなくなると考えられる。よって、最低優先監視プロセス１２１は、予定されたタイミングで実行できない可能性が高い。
【００６６】
図６は、ＣＰＵ使用率テーブルの例を示す図である。
ＣＰＵ使用率テーブル１１４は、ＣＰＵ使用率記憶部１１２に記憶される。ＣＰＵ使用率テーブル１１４は、プロセスＩＤ、平均、最大、最小およびリストの項目を有する。
【００６７】
プロセスＩＤは、ＣＰＵ１０１で実行されるプロセスを識別する識別情報である。ＣＰＵ使用率テーブル１１４に登録されるプロセスには、最低優先監視プロセス１２１や最高優先監視プロセス１２２が含まれてもよいし含まれなくてもよい。
【００６８】
平均の項目は、プロセスＩＤが示すプロセスの過去のＣＰＵ使用率の平均値を示す。最大の項目は、プロセスＩＤが示すプロセスの過去のＣＰＵ使用率の最大値を示す。最小の項目は、プロセスＩＤが示すプロセスの過去のＣＰＵ使用率の最小値を示す。リストの項目には、定期的にＯＳから取得するＣＰＵ使用率がプロセス毎に列挙される。リストに列挙されるＣＰＵ使用率は、直近のＣＰＵ１０１の起動以降に取得されたものである。ただし、所定時間以上経過した古いＣＰＵ使用率をリストから削除してもよい。上記の平均値、最大値および最小値は、リストに基づいて算出される。
【００６９】
次に、最低優先監視プロセス１２１と最高優先監視プロセス１２２の処理を説明する。
図７は、第３の実施の形態の最低優先監視の手順例を示すフローチャートである。
最低優先監視プロセス１２１は、図７の処理を繰り返し実行する。
【００７０】
（Ｓ１０）最低優先監視プロセス１２１は、タイマを開始する。使用するタイマは、ＯＳが有するソフトウェアタイマでもよいし、伝送装置１００が有するウォッチドッグタイマ１０２以外のハードウェアタイマでもよい。このタイマのタイマ時間は、ウォッチドッグタイマ１０２よりも短いものとし、例えば、１０秒程度とする。
【００７１】
（Ｓ１１）最低優先監視プロセス１２１は、ステップＳ１０で開始したタイマが終了するのを待つ。タイマが終了した場合はステップＳ１２に処理が進み、タイマが終了していない場合はステップＳ１１の処理を繰り返す。なお、最低優先監視プロセス１２１は、タイマが終了するまでスリープしていてもよい。その場合、ＯＳまたはハードウェアタイマからの割り込みによってスリープ状態が解除される。
【００７２】
（Ｓ１２）最低優先監視プロセス１２１は、フラグ記憶部１１３に記憶されたフラグをＯＮ（１）に更新する。ただし、後述するように、最高優先監視プロセス１２２がフラグを参照しない場合、最低優先監視プロセス１２１はフラグを更新しなくてもよい。
【００７３】
（Ｓ１３）最低優先監視プロセス１２１は、ウォッチドッグタイマ１０２のクリアレジスタ１０２ａにカウントの初期値を書き込む。カウントの初期値は、正の整数であり、リセットまでの最大待ち時間を考慮して伝送装置１００の設計時に決定される。そして、最低優先監視プロセス１２１は、ステップＳ１０に戻って処理を繰り返す。
【００７４】
図８は、第３の実施の形態の最高優先監視の手順例を示すフローチャートである。
最高優先監視プロセス１２２は、図８の処理を繰り返し実行する。
（Ｓ２０）最高優先監視プロセス１２２は、タイマを開始する。使用するタイマは、ＯＳが有するソフトウェアタイマでもよいし、伝送装置１００が有するウォッチドッグタイマ１０２以外のハードウェアタイマでもよい。このタイマのタイマ時間は、最低優先監視プロセス１２１と同じか若干長いものとし、例えば、１０〜２０秒程度とする。
【００７５】
（Ｓ２１）最高優先監視プロセス１２２は、ステップＳ２０で開始したタイマが終了するのを待つ。タイマが終了した場合はステップＳ２２に処理が進み、タイマが終了していない場合はステップＳ２１の処理を繰り返す。なお、最高優先監視プロセス１２２は、タイマが終了するまでスリープしていてもよい。その場合、ＯＳまたはハードウェアタイマからの割り込みによってスリープ状態が解除される。
【００７６】
（Ｓ２２）最高優先監視プロセス１２２は、ＣＰＵ１０１で実行されているプロセスそれぞれの現在のＣＰＵ使用率を示す情報をＯＳから取得する。
（Ｓ２３）最高優先監視プロセス１２２は、最低優先監視プロセス１２１が動作したか否か確認する。例えば、最高優先監視プロセス１２２は、フラグ記憶部１１３に記憶されているフラグを参照する。フラグ＝ＯＮ（１）は、最低優先監視プロセス１２１が動作したことを示す。フラグ＝ＯＦＦ（０）は、最低優先監視プロセス１２１が動作しなかったことを示す。最高優先監視プロセス１２２は、参照後にフラグをＯＦＦに戻す。
【００７７】
また、例えば、最高優先監視プロセス１２２は、ウォッチドッグタイマ１０２のクリアレジスタ１０２ａに記憶されているカウントを参照する。今回のカウントと前回のカウントとの差が閾値以下である場合、最高優先監視プロセス１２２は、カウントが初期化された、すなわち、最低優先監視プロセス１２１が動作したと判断する。今回のカウントと前回のカウントとの差が閾値を超える場合、最高優先監視プロセス１２２は、カウントが初期化されなかった、すなわち、最低優先監視プロセス１２１が動作しなかったと判断する。
【００７８】
（Ｓ２４）上記のステップＳ２３で最低優先監視プロセス１２１が動作したと判断された場合、ステップＳ２５に処理が進む。上記のステップＳ２３で最低優先監視プロセス１２１が動作しなかったと判断された場合、ステップＳ２６に処理が進む。
【００７９】
（Ｓ２５）最高優先監視プロセス１２２は、ステップＳ２２で取得したＣＰＵ使用率に基づいて、ＣＰＵ使用率記憶部１１２に記憶されたＣＰＵ使用率テーブル１１４を更新する。具体的には、最高優先監視プロセス１２２は、各プロセスについて、最新のＣＰＵ使用率をリストに追加する。また、最高優先監視プロセス１２２は、更新したリストに基づいてＣＰＵ使用率の平均値を更新する。また、最高優先監視プロセス１２２は、最新のＣＰＵ使用率が過去のＣＰＵ使用率の最大値を超える場合は最大値を更新し、最新のＣＰＵ使用率が過去のＣＰＵ使用率の最小値未満である場合は最小値を更新する。そして、最高優先監視プロセス１２２は、ステップＳ２０に戻って処理を繰り返す。
【００８０】
（Ｓ２６）最高優先監視プロセス１２２は、ＲＡＭ１０４からログを収集する。ログには、例えば、ＯＳのエラーメッセージ、プロセス間通信の情報、通信インタフェース１０８の使用履歴、温度・ファン回転数などの環境情報、ハードウェアの設定情報などが含まれる。最高優先監視プロセス１２２は、ログを不揮発性メモリ１０５に退避する。
【００８１】
（Ｓ２７）最高優先監視プロセス１２２は、各プロセスについて、最新のＣＰＵ使用率とＣＰＵ使用率テーブル１１４に登録された最大値とを比較する。最高優先監視プロセス１２２は、ＣＰＵ１０１で実行されているプロセスの中に、最新のＣＰＵ使用率が過去の最大値を超えるプロセスが存在するか判断する。該当するプロセスが存在する場合、最高優先監視プロセス１２２は、ＣＰＵ１０１が異常不停止状態であると推定する。そして、最高優先監視プロセス１２２は、ステップＳ２０に戻って処理を繰り返す。該当するプロセスが存在しない場合、ステップＳ２８に処理が進む。
【００８２】
（Ｓ２８）最高優先監視プロセス１２２は、最新のＣＰＵ使用率とＣＰＵ使用率テーブル１１４とに基づいて負荷ポイントを算出する。最高優先監視プロセス１２２は、相対的負荷基準を満たすプロセス１つにつき負荷ポイントを１つ加算し、また、絶対的負荷基準を満たすプロセス１つにつき負荷ポイントを１つ加算する。
【００８３】
相対的負荷基準を満たすプロセスは、他のプロセスと比べたＣＰＵ使用率の相対的な大きさが、通常時は高くないが現在は高いプロセスである。例えば、最高優先監視プロセス１２２は、プロセスをＣＰＵ使用率の平均値が高い順にソートして通常時の順位を算出し、プロセスを最新のＣＰＵ使用率が高い順にソートして現在の順位を算出する。通常時には所定順位以内（例えば、１０位以内）に入っておらず、現在は所定順位以内に入っているプロセスを、相対的負荷基準を満たすプロセスとする。絶対的負荷基準を満たすプロセスは、ＣＰＵ使用率が平均値よりも大きく、過去の最大値よりも小さいプロセスである。
【００８４】
（Ｓ２９）最高優先監視プロセス１２２は、ステップＳ２８で算出した負荷ポイントが閾値を超えるか判断する。閾値は、伝送装置１００の設計時に決定される。負荷ポイントが閾値を超える場合、最高優先監視プロセス１２２は、ＣＰＵ１０１が異常不停止状態であると推定する。そして、最高優先監視プロセス１２２は、ステップＳ２０に戻って処理を繰り返す。負荷ポイントが閾値以下である場合、最高優先監視プロセス１２２は、ＣＰＵ１０１が正常高負荷状態であると推定する。そして、ステップＳ３０に処理が進む。
【００８５】
（Ｓ３０）最高優先監視プロセス１２２は、最低優先監視プロセス１２１に代わって、ウォッチドッグタイマ１０２のクリアレジスタ１０２ａにカウントの初期値を書き込む。そして、最高優先監視プロセス１２２は、ステップＳ２０に戻って処理を繰り返す。
【００８６】
第３の実施の形態の伝送装置１００によれば、最高優先監視プロセス１２２により、ウォッチドッグタイマ１０２を初期化する最低優先監視プロセス１２１が動作しているか監視される。最低優先監視プロセス１２１が動作していない場合、最高優先監視プロセス１２２により、ＲＡＭ１０４から不揮発性メモリ１０５にログが退避される。また、最高優先監視プロセス１２２により、各プロセスのＣＰＵ使用率が収集される。ＣＰＵ使用率が過去と比べて顕著に高いとは言えない場合、最高優先監視プロセス１２２により、最低優先監視プロセス１２１に代わってウォッチドッグタイマ１０２が初期化される。
【００８７】
これにより、ＣＰＵ１０１が正常高負荷状態と推定される場合には、ウォッチドッグタイマ１０２が初期化され、ＣＰＵ１０１が誤ってリセットされることを抑制できる。また、ＣＰＵ１０１が異常不停止状態と推定される場合には、ウォッチドッグタイマ１０２が初期化されず、ＣＰＵ１０１を迅速にリセットできる。このように、最低優先監視プロセス１２１が動作しなくなった際のＣＰＵ１０１の負荷状況に応じて、ウォッチドッグタイマ１０２がリセット信号を送信するタイミングを適切に調整できる。また、ＣＰＵ１０１がリセットされる前にログが保存されるため、リセット原因の分析が容易になる。
【００８８】
［第４の実施の形態］
次に、第４の実施の形態を説明する。
第３の実施の形態との違いを中心に説明し、第３の実施の形態と同様の事項については説明を省略することがある。第４の実施の形態の伝送装置２００は、図３に示した第３の実施の形態の伝送装置１００と同様のハードウェア構成によって実現できる。
【００８９】
図９は、第４の実施の形態の伝送装置の機能例を示すブロック図である。
伝送装置２００は、プロセス起動部２１１、判定回数記憶部２１２、フラグ記憶部２１３、最低優先監視プロセス２２１、最高優先監視プロセス２２２および中間優先監視プロセス２２３を有する。判定回数記憶部２１２は、ＲＡＭ１０４に確保した記憶領域を用いて実現できる。フラグ記憶部２１３は、ＣＰＵ１０１が有するレジスタまたはＲＡＭ１０４に確保した記憶領域を用いて実現できる。プロセス起動部２１１、最低優先監視プロセス２２１、最高優先監視プロセス２２２および中間優先監視プロセス２２３は、ＣＰＵ１０１が実行するプログラムを用いて実現できる。
【００９０】
プロセス起動部２１１、最低優先監視プロセス２２１および最高優先監視プロセス２２２は、図４に示した第３の実施の形態のプロセス起動部１１１、最低優先監視プロセス１２１および最高優先監視プロセス１２２に対応する。
【００９１】
プロセス起動部２１１は、ＣＰＵ１０１が起動すると、最低優先監視プロセス２２１と最高優先監視プロセス２２２と中間優先監視プロセス２２３を起動させる。
判定回数記憶部２１２は、判定回数カウンタを記憶する。判定回数カウンタは、最低優先監視プロセス２２１、最高優先監視プロセス２２２および中間優先監視プロセス２２３のうちの少なくとも１つが実行されなかったことが連続して検出された回数を示す。判定回数カウンタは、最高優先監視プロセス２２２によって更新される。
【００９２】
フラグ記憶部２１３は、最低優先監視プロセス２２１、最高優先監視プロセス２２２および中間優先監視プロセス２２３が実行されたか否かを示すフラグの集合を記憶する。最低優先監視プロセス２２１が実行されると、それに対応するフラグがＯＮ（１）に更新される。最高優先監視プロセス２２２が実行されると、それに対応するフラグがＯＮに更新される。中間優先監視プロセス２２３が実行されると、それに対応するフラグがＯＮに更新される。最高優先監視プロセス２２２によってフラグが確認されると、フラグ記憶部２１３に記憶された全てのフラグがＯＦＦ（０）に更新される。なお、ＣＰＵ１０１内のレジスタを用いる場合、異なるフラグを異なるレジスタに格納してもよいし、異なるフラグを同じレジスタの異なるビットに格納してもよい。
【００９３】
最低優先監視プロセス２２１は、ＣＰＵ１０１で実行され得るプロセスの中の最低優先度で実行されるプロセスである。最低優先監視プロセス２２１は、定期的に、ウォッチドッグタイマ１０２のクリアレジスタ１０２ａにカウントの初期値を書き込む（すなわち、定期的にウォッチドッグタイマ１０２を初期化する）。最低優先監視プロセス２２１は、ウォッチドッグタイマ１０２を初期化するとき、フラグ記憶部２１３に記憶されたフラグのうち最低優先監視プロセス２２１に対応するフラグをＯＮに更新する。
【００９４】
最高優先監視プロセス２２２は、ＣＰＵ１０１で実行され得るプロセスの中の最高優先度で実行されるプロセスである。最高優先監視プロセス２２２は、定期的に、フラグ記憶部２１３に記憶されたフラグの集合を参照して、全ての監視プロセス（最低優先監視プロセス２２１、最高優先監視プロセス２２２および中間優先監視プロセス２２３）が正常に実行されているか確認する。少なくとも１つの監視プロセスが正常に実行されていない場合、最高優先監視プロセス２２２は、ＲＡＭ１０４からログを収集する。ログには、第３の実施の形態で説明したものに加えて、フラグ記憶部２１３に記憶されたフラグの集合が含まれる。最高優先監視プロセス２２２は、ログを不揮発性メモリ１０５に保存する。
【００９５】
また、少なくとも１つの監視プロセスが正常に実行されていない場合、最高優先監視プロセス２２２は、判定回数記憶部２１２に記憶された判定回数カウンタに１加算する。判定回数カウンタが閾値（例えば、６）以下である場合、最高優先監視プロセス２２２は、最低優先監視プロセス２２１に代わってウォッチドッグタイマ１０２を初期化する。一方、判定回数カウンタが閾値を超えた場合、最高優先監視プロセス２２２は、ウォッチドッグタイマ１０２の初期化を停止してリセット信号が発行されるのを期待する。なお、全ての監視プロセスが正常に実行された場合、最高優先監視プロセス２２２は、判定回数記憶部２１２に記憶された判定回数カウンタをゼロに初期化する。
【００９６】
中間優先監視プロセス２２３は、最高優先度と最低優先度の間の所定の優先度で実行されるプロセスである。この優先度は予め設定される。中間優先監視プロセス２２３は、定期的に、フラグ記憶部２１３に記憶されたフラグのうち中間優先監視プロセス２２３に対応するフラグをＯＮに更新する。中間優先監視プロセス２２３が実行される周期は、最低優先監視プロセス２２１と同じとし、例えば、１０秒程度とする。
【００９７】
図１０は、第４の実施の形態のプロセス優先度の例を示す図である。
上記のように、最低優先監視プロセス２２１は、ＯＳが付与し得る複数の優先度のうちの最低優先度で実行される。最高優先監視プロセス２２２は、ＯＳが付与し得る複数の優先度のうちの最高優先度で実行される。中間優先監視プロセス２２３は、ＯＳが付与し得る複数の優先度のうち、最高優先度と最低優先度の間の所定の優先度で実行される。
【００９８】
例えば、アプリケーションプロセス２２４ａに、最高優先監視プロセス２２２と中間優先監視プロセス２２３の間の優先度が付与されたとする。また、アプリケーションプロセス２２４ｂに、中間優先監視プロセス２２３と最低優先監視プロセス２２１の間の優先度が付与されたとする。アプリケーションプロセス２２４ａが暴走した場合、最高優先監視プロセス２２２は正常に実行される一方、中間優先監視プロセス２２３と最低優先監視プロセス２２１は実行されない可能性が高い。また、アプリケーションプロセス２２４ｂが暴走した場合、最高優先監視プロセス２２２と中間優先監視プロセス２２３は正常に実行される一方、最低優先監視プロセス２２１は実行されない可能性が高い。
【００９９】
このように、複数の監視プロセスを起動しておき、それら監視プロセスのフラグをログに含めて保存することで、リセット原因となったプロセスを特定することが容易となる。図９，１０では、伝送装置２００は１つの中間優先監視プロセスを起動しているが、優先度の異なる複数の中間優先監視プロセスを起動するようにしてもよい。なお、１以上の監視プロセスが実行されていない場合、通常、少なくとも最低優先監視プロセス２２１は実行されていない。また、通常、最高優先監視プロセス２２２は正常に実行される。
【０１００】
図１１は、フラグリストの例を示す図である。
フラグリスト２１４は、フラグ記憶部２１３に記憶される。フラグリスト２１４は、最低優先度フラグ、中間優先度フラグおよび最高優先度フラグを含む。最低優先度フラグは、最低優先監視プロセス２２１が実行されたか否かを示す。中間優先度フラグは、中間優先監視プロセス２２３が実行されたか否かを示す。最高優先度フラグは、最高優先監視プロセス２２２が実行されたか否かを示す。なお、伝送装置２００が複数の中間優先監視プロセスを起動した場合、フラグリスト２１４は複数の中間優先度フラグを含む。
【０１０１】
図１２は、第４の実施の形態の最低優先監視の手順例を示すフローチャートである。
最低優先監視プロセス２２１は、図１２の処理を繰り返し実行する。
（Ｓ４０）最低優先監視プロセス２２１は、タイマを開始する。
【０１０２】
（Ｓ４１）最低優先監視プロセス２２１は、ステップＳ４０で開始したタイマが終了するのを待つ。タイマが終了した場合はステップＳ４２に処理が進み、タイマが終了していない場合はステップＳ４１の処理を繰り返す。
【０１０３】
（Ｓ４２）最低優先監視プロセス２２１は、フラグ記憶部２１３に記憶されたフラグリスト２１４の中の最低優先度フラグをＯＮ（１）に更新する。
（Ｓ４３）最低優先監視プロセス２２１は、ウォッチドッグタイマ１０２のクリアレジスタ１０２ａにカウントの初期値を書き込む。そして、最低優先監視プロセス２２１は、ステップＳ４０に戻って処理を繰り返す。
【０１０４】
図１３は、第４の実施の形態の中間優先監視の手順例を示すフローチャートである。
中間優先監視プロセス２２３は、図１３の処理を繰り返し実行する。
（Ｓ５０）中間優先監視プロセス２２３は、タイマを開始する。使用するタイマは、ＯＳが有するソフトウェアタイマでもよいし、伝送装置２００が有するウォッチドッグタイマ１０２以外のハードウェアタイマでもよい。このタイマのタイマ時間は、最低優先監視プロセス２２１と同じとし、例えば、１０秒程度とする。
【０１０５】
（Ｓ５１）中間優先監視プロセス２２３は、ステップＳ５０で開始したタイマが終了するのを待つ。タイマが終了した場合はステップＳ５２に処理が進み、タイマが終了していない場合はステップＳ５１の処理を繰り返す。なお、中間優先監視プロセス２２３は、タイマが終了するまでスリープしていてもよい。その場合、ＯＳまたはハードウェアタイマからの割り込みによってスリープ状態が解除される。
【０１０６】
（Ｓ５２）中間優先監視プロセス２２３は、フラグ記憶部２１３に記憶されたフラグリスト２１４の中の中間優先度フラグをＯＮ（１）に更新する。そして、中間優先監視プロセス２２３は、ステップＳ５０に戻って処理を繰り返す。
【０１０７】
図１４は、第４の実施の形態の最高優先監視の手順例を示すフローチャートである。
最高優先監視プロセス２２２は、図１４の処理を繰り返し実行する。
（Ｓ６０）最高優先監視プロセス２２２は、タイマを開始する。
【０１０８】
（Ｓ６１）最高優先監視プロセス２２２は、ステップＳ６０で開始したタイマが終了するのを待つ。タイマが終了した場合はステップＳ６２に処理が進み、タイマが終了していない場合はステップＳ６１の処理を繰り返す。
【０１０９】
（Ｓ６２）最高優先監視プロセス２２２は、フラグ記憶部２１３に記憶されたフラグリスト２１４の中の最高優先度フラグをＯＮ（１）に更新する。
（Ｓ６３）最高優先監視プロセス２２２は、フラグリスト２１４に含まれる最低優先度フラグ、中間優先度フラグおよび最高優先度フラグを確認する。
【０１１０】
（Ｓ６４）最高優先監視プロセス２２２は、フラグリスト２１４に含まれる最低優先度フラグ、中間優先度フラグおよび最高優先度フラグをＯＦＦ（０）に初期化する。
（Ｓ６５）最高優先監視プロセス２２２は、ステップＳ６３で確認したフラグ全てがＯＮであったか判断する。全てのフラグがＯＮであった場合はステップＳ６６に処理が進み、少なくとも１つのフラグがＯＦＦであった場合はステップＳ６７に処理が進む。
【０１１１】
（Ｓ６６）最高優先監視プロセス２２２は、判定回数記憶部２１２に記憶された判定回数カウンタをゼロに初期化する。そして、最高優先監視プロセス２２２は、ステップＳ６０に戻って処理を繰り返す。
【０１１２】
（Ｓ６７）最高優先監視プロセス２２２は、判定回数カウンタに１を加算する。
（Ｓ６８）最高優先監視プロセス２２２は、ＲＡＭ１０４からログを収集する。ログには、例えば、ＯＳのエラーメッセージ、プロセス間通信の情報、通信インタフェース１０８の使用履歴、温度・ファン回転数などの環境情報、ハードウェアの設定情報などが含まれる。また、ログには、ステップＳ６３で確認したフラグの集合（初期化前のもの）が含まれる。最高優先監視プロセス２２２は、ログを不揮発性メモリ１０５に退避する。
【０１１３】
（Ｓ６９）最高優先監視プロセス２２２は、判定回数カウンタの値が閾値（例えば、６）より大きいか判断する。判定回数カウンタの値が閾値より大きい場合、最高優先監視プロセス２２２は、ＣＰＵ１０１が異常不停止状態であると推定する。そして、最高優先監視プロセス２２２は、ステップＳ６０に戻って処理を繰り返す。判定回数カウンタの値が閾値以下である場合、最高優先監視プロセス２２２は、ＣＰＵ１０１が正常高負荷状態である可能性があると判断する。そして、ステップＳ７０に処理が進む。
【０１１４】
（Ｓ７０）最高優先監視プロセス２２２は、最低優先監視プロセス２２１に代わって、ウォッチドッグタイマ１０２のクリアレジスタ１０２ａにカウントの初期値を書き込む。そして、最高優先監視プロセス２２２は、ステップＳ６０に戻って処理を繰り返す。
【０１１５】
第４の実施の形態の伝送装置２００によれば、最高優先監視プロセス２２２により、全ての監視プロセスが動作しているか監視される。１以上の監視プロセスが動作していない場合、最高優先監視プロセス２２２により、ＲＡＭ１０４から不揮発性メモリ１０５にログが退避される。１以上の監視プロセスが動作していないことの検出回数が少ないうちは、最高優先監視プロセス２２２により、最低優先監視プロセス２２１に代わってウォッチドッグタイマ１０２が初期化される。一方、１以上の監視プロセスが動作していないことの検出回数が多くなると、ウォッチドッグタイマ１０２の初期化が停止される。
【０１１６】
これにより、ＣＰＵ１０１の負荷が一時的に増大しても、ウォッチドッグタイマ１０２が初期化され、ＣＰＵ１０１が誤ってリセットされることを抑制できる。また、ＣＰＵ１０１がリセットされる前にログが保存されるため、リセット原因の分析が容易になる。また、中間優先監視プロセス２２３が動作したか否かを示すフラグがログに含めて保存されるため、リセット原因のプロセスを特定することが容易になる。
【０１１７】
なお、前述のように、第１の実施の形態の情報処理は、情報処理装置１０にプログラムを実行させることで実現できる。第２の実施の形態の情報処理は、情報処理装置２０にプログラムを実行させることで実現できる。第３の実施の形態の情報処理は、伝送装置１００にプログラムを実行させることで実現できる。第４の実施の形態の情報処理は、伝送装置２００にプログラムを実行させることで実現できる。
【０１１８】
プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体３４）に記録しておくことができる。記録媒体として、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。プログラムは、可搬型の記録媒体に記録されて配布されることがある。その場合、可搬型の記録媒体から他の記録媒体（例えば、不揮発性メモリ１０５）にプログラムをコピーして実行してもよい。
【符号の説明】
【０１１９】
１０，２０  情報処理装置
１１，２１  プロセッサ
１２，２２  タイマ
１３，１４，２５，２６  監視プロセス
１５  負荷状況
２３  メモリ
２４  記憶装置
２７  ログ情報
【図１】
2016224883.tif 000003
【図２】
2016224883.tif 000004
【図３】
2016224883.tif 000005
【図４】
2016224883.tif 000006
【図５】
2016224883.tif 000007
【図６】
2016224883.tif 000008
【図７】
2016224883.tif 000009
【図８】
2016224883.tif 000010
【図９】
2016224883.tif 000011
【図１０】
2016224883.tif 000012
【図１１】
2016224883.tif 000013
【図１２】
2016224883.tif 000014
【図１３】
2016224883.tif 000015
【図１４】
2016224883.tif 000016