(57)【特許請求の範囲】
【請求項１】
複数のプログラムを有するプログラム監視システムであって、各プログラムは他のプログラムの動作状況を監視するとともに他のプログラムから動作状況を監視される監視関係を形成し、前記複数のプログラムの設定情報を記憶した管理テーブルに基づいて、監視先プログラムと監視元プログラムとを関係付けるプログラム管理手段を備え、
前記各プログラムは、
前記監視先プログラムとして、プログラムが正常に動作する過程で、前記監視元プログラムと情報共有した正常動作状態を示す正常情報を一定時間以内の間隔で繰り返し更新するプログラム正常情報更新手段を有し、
前記監視元プログラムとして、前記監視先プログラムの前記正常情報を監視するタイミングで、前記監視先プログラムの前記プログラム正常情報更新手段が更新する前記正常情報を参照し、前回参照時に保存した正常情報との比較に基づいて、前記監視先プログラムの動作の異常を検出する他プログラム監視手段と、
前記他プログラム監視手段から前記監視先プログラムの動作の異常の検出を通知された場合に、前記監視先プログラムを強制終了させて再起動する他プログラム再起動手段とを有し、
前記プログラム管理手段は、
前記プログラムの追加又は削除に伴い前記監視先プログラムと前記監視元プログラムとの関係付けを変更し、
前記プログラムは、前記正常情報を更新する間隔が一定時間以内の実行時間となるように処理群が定められ、
前記プログラム正常情報更新手段は、前記処理群を処理する度に前記正常情報を更新する正常情報更新関数に関する処理を実行して前記正常情報を更新することを特徴とするプログラム監視システム。
【請求項２】
ループ形状の監視関係を構成する３以上のプログラムの設定情報を記憶した管理テーブルに基づいて、監視先プログラムと監視元プログラムとを関係付けるプログラム管理手段を備え、
前記各プログラムは、
前記監視先プログラムとして、プログラムが正常に動作する過程で、前記監視元プログラムと情報共有した正常動作状態を示す正常情報を一定時間以内の間隔で繰り返し更新するプログラム正常情報更新手段を有し、
前記監視元プログラムとして、前記監視先プログラムの前記正常情報を監視するタイミングで、前記監視先プログラムの前記プログラム正常情報更新手段が更新する前記正常情報を参照し、前回参照時に保存した正常情報との比較に基づいて、前記監視先プログラムの動作の異常を検出する他プログラム監視手段と、
前記他プログラム監視手段から前記監視先プログラムの動作の異常の検出を通知された場合に、前記監視先プログラムを強制終了させて再起動する他プログラム再起動手段とを有し、
前記プログラムは、前記正常情報を更新する間隔が一定時間以内の実行時間となるように処理群が定められ、
前記プログラム正常情報更新手段は、前記処理群を処理する度に前記正常情報を更新する正常情報更新関数に関する処理を実行して前記正常情報を更新することを特徴とするプログラム監視システム。
【請求項３】
３以上のプログラムを有するプログラム監視システムであって、前記プログラムは他の２以上のプログラムの動作状況を監視するとともに他の２以上のプログラムから動作状況を監視される監視関係を形成し、前記３以上のプログラムの設定情報を記憶した管理テーブルに基づいて、監視先プログラムと監視元プログラムとを関係付けるプログラム管理手段を備え、
前記各プログラムは、
前記監視先プログラムとして、プログラムが正常に動作する過程で、前記監視元プログラムと情報共有した正常動作状態を示す正常情報を一定時間以内の間隔で繰り返し更新するプログラム正常情報更新手段を有し、
前記監視元プログラムとして、前記監視先プログラムの前記正常情報を監視するタイミングで、前記監視先プログラムの前記プログラム正常情報更新手段が更新する前記正常情報を参照し、前回参照時に保存した正常情報との比較に基づいて、前記監視先プログラムの動作の異常を検出する他プログラム監視手段と、
前記他プログラム監視手段から前記監視先プログラムの動作の異常の検出を通知された場合に、前記監視先プログラムを強制終了させて再起動する他プログラム再起動手段とを有し、
前記プログラムは、前記正常情報を更新する間隔が一定時間以内の実行時間となるように処理群が定められ、
前記プログラム正常情報更新手段は、前記処理群を処理する度に前記正常情報を更新する正常情報更新関数に関する処理を実行して前記正常情報を更新することを特徴とするプログラム監視システム。
【請求項４】
前記監視元プログラムとして、前記監視先プログラムの前記正常情報を監視するタイミングを指示するタイマー手段を備え、
前記他プログラム監視手段は、前記タイマー手段が指示するタイミングで、前記監視先プログラムの動作の異常を検出することを特徴とする請求項１ないし請求項３のいずれか一項に記載のプログラム監視システム。
【請求項５】
前記監視先プログラムの前記プログラム正常情報更新手段は、前記監視元プログラムと情報共有した活性化フラグに、休眠から起こされた時点で動作中を示す状態を設定し、動作終了時点で休眠を示す状態を設定し、
前記監視元プログラムの前記他プログラム監視手段は、前記監視先プログラムの活性化フラグが休眠の状態を示しているときは、前記監視先プログラムの動作の異常を判定しないことを特徴とする請求項１ないし請求項４のいずれか一項に記載のプログラム監視システム。
【請求項６】
前記監視元プログラムの前記他プログラム監視手段は、前記監視先プログラムの前記プログラム正常情報更新手段が更新する前記正常情報を参照し、前回参照時に保存した正常情報から更新されていない回数を計数し、計数した回数が所定値に達したとき、異常と判定することを特徴とする請求項１ないし請求項５のいずれか一項に記載のプログラム監視システム。
【請求項７】
前記正常情報は、前記監視先プログラムの前記プログラム正常情報更新手段と前記監視元プログラムの前記他プログラム監視手段との両者が利用可能な共有メモリに格納されて情報共有されることを特徴とする請求項１ないし請求項６のいずれか一項に記載のプログラム監視システム。
【請求項８】
前記活性化フラグは、前記監視先プログラムの前記プログラム正常情報更新手段と前記監視元プログラムの前記他プログラム監視手段との両者が利用可能な共有メモリに格納されて情報共有されることを特徴とする請求項５記載のプログラム監視システム。
【請求項９】
前記監視先プログラムが管理する正常情報は、メッセージ通信により前記監視元プログラムに書き込まれることで情報共有されることを特徴とする請求項１ないし請求項６のいずれか一項に記載のプログラム監視システム。
【請求項１０】
前記監視先プログラムが管理する活性化フラグは、メッセージ通信により前記監視元プログラムに書き込まれることで情報共有されることを特徴とする請求項５記載のプログラム監視システム。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、複数のプログラムが動作するシステム環境で、プログラムの動作障害を検出し、復旧させるプログラム監視システムに関する。
【背景技術】
【０００２】
複数のプログラムを実行するシステムでは、プログラムを時分割で動作させている場合に、一つのプログラムの動作に障害が発生し、そのまま放置しておくと、次第に他のプログラムも正常に動作できなくなって、システム全体が停止に至ることもある。よって、システムを例えば二重化（または多重化）することで冗長に構成して動作の信頼性を向上させることもできるが、コストが上昇してしまい、低コスト化を求められるシステムでは採用しにくい面もある。また、プログラム動作の障害発生の検出を含めたシステム処理の負荷はできるだけ抑えることも望まれる。このように、システムで動作するプログラムに障害が検出された場合には、システムを再起動して復旧させる方法を採ることが一般的である。
【０００３】
従来技術としては、例えば、複数のプログラムが周期的に動作する場合に、一つのハードウェアウォッチドッグタイマーを利用して異常を検出する方式がある（例えば特許文献１）。この方式では、複数のプログラムのいずれか一つが停止や暴走などの正常でない動作状態になったことを検出したとき、システム全体を再起動することにより正常な動作状態に戻す。
【０００４】
一方、複数のプログラムが周期的ではなく、不定期に動作する場合に、異常を検出する方式もある（例えば特許文献２）。この方式では、実際に各プログラムが動作した時間から動作中か停止中かの判定を必要とし、異常が検出されるとシステム全体を再起動する。
【０００５】
また、複数のプログラムが動作する場合に、同時に実行できるプログラムの数を制限することにより、確実に動作させる方式がある（例えば特許文献３）。この方式では、同時に実行できるプログラム数を制限することで、運用後のシステムの拡張性が確保できず、アプリケーションの追加を行うことが難しいことがある。
【０００６】
また、周期的に動作するプログラムと不定期に動作するプログラムとが混在する場合に、システム全体で共通のテーブルにカウントダウンを行うことで、システム全体の再起動の要否を検出する方式がある（例えば特許文献４）。
【０００７】
また、各プログラム（タスク）の実行許容時間を抑えておき、他の処理に影響を及ぼさないようにする方法がある（例えば特許文献５）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平５−２５７７４８号公報
【特許文献２】特開平５−３４６８７７号公報
【特許文献３】特開平８−３２８８８０号公報
【特許文献４】特開２０００−１８１７５５号公報
【特許文献５】特開２００７−２６３０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
従来のプログラム監視システムでは、プログラムの動作に異常を検出すると、正常な状態に戻すために、システム全体を再起動させなければならないという問題がある。このとき、各プログラムの動作に異常を適時検出するために、全プログラムを監視するプログラムを常駐させることは、システムのオーバーヘッドが大きくなるという課題がある。
【００１０】
そのため、リアルタイムに処理することが求められるシステムでは、長時間のシステム停止が許されないため、短時間でシステム全体を復旧させることは困難であった。
【００１１】
特に、システム上で動作する監視対象が画像表示や音声再生を伴うプログラムであるとき、復旧過程で正常時と異なる不自然さや違和感をユーザの視覚や聴覚などに知覚させずにシステムを復旧させることは難しかった。
【００１２】
この発明は、上記のような問題点を解決するためになされたものであり、複数のプログラムを実行するシステムにおいて、各プログラムは他のプログラムの動作状況を監視するとともに他のプログラムから動作状況を監視される関係の監視を少ない負荷で行いながら、正常に動作していないプログラムを検出した時点で、そのプログラムのみを短時間に再起動して、システム全体の再起動を伴わずに復旧させることを目的とする。
【課題を解決するための手段】
【００１３】
この発明に係るプログラム監視システムは、複数のプログラムを有するプログラム監視システムであって、各プログラムは他のプログラムの動作状況を監視するとともに他のプログラムから動作状況を監視される監視関係を形成し、前記複数のプログラムの設定情報を記憶した管理テーブルに基づいて、監視先プログラムと監視元プログラムとを関係付けるプログラム管理手段を備え、前記各プログラムは、前記監視先プログラムとして、プログラムが正常に動作する過程で、前記監視元プログラムと情報共有した正常動作状態を示す正常情報を一定時間以内の間隔で繰り返し更新するプログラム正常情報更新手段を有し、前記監視元プログラムとして、前記監視先プログラムの前記正常情報を監視するタイミングで、前記監視先プログラムの前記プログラム正常情報更新手段が更新する前記正常情報を参照し、前回参照時に保存した正常情報との比較に基づいて、前記監視先プログラムの動作の異常を検出する他プログラム監視手段と、前記他プログラム監視手段から前記監視先プログラムの動作の異常の検出を通知された場合に、前記監視先プログラムを強制終了させて再起動する他プログラム再起動手段とを有し、前記プログラム管理手段は、前記プログラムの追加又は削除に伴い前記監視先プログラムと前記監視元プログラムとの関係付けを変更し、前記プログラムは、前記正常情報を更新する間隔が一定時間以内の実行時間となるように処理群が定められ、前記プログラム正常情報更新手段は、前記処理群を処理する度に前記正常情報を更新する正常情報更新関数に関する処理を実行して前記正常情報を更新するものである。
また、この発明に係るプログラム監視システムは、ループ形状の監視関係を構成する３以上のプログラムの設定情報を記憶した管理テーブルに基づいて、監視先プログラムと監視元プログラムとを関係付けるプログラム管理手段を備え、前記各プログラムは、前記監視先プログラムとして、プログラムが正常に動作する過程で、前記監視元プログラムと情報共有した正常動作状態を示す正常情報を一定時間以内の間隔で繰り返し更新するプログラム正常情報更新手段を有し、前記監視元プログラムとして、前記監視先プログラムの前記正常情報を監視するタイミングで、前記監視先プログラムの前記プログラム正常情報更新手段が更新する前記正常情報を参照し、前回参照時に保存した正常情報との比較に基づいて、前記監視先プログラムの動作の異常を検出する他プログラム監視手段と、前記他プログラム監視手段から前記監視先プログラムの動作の異常の検出を通知された場合に、前記監視先プログラムを強制終了させて再起動する他プログラム再起動手段とを有し、前記プログラムは、前記正常情報を更新する間隔が一定時間以内の実行時間となるように処理群が定められ、前記プログラム正常情報更新手段は、前記処理群を処理する度に前記正常情報を更新する正常情報更新関数に関する処理を実行して前記正常情報を更新するものである。
また、この発明に係るプログラム監視システムは、３以上のプログラムを有するプログラム監視システムであって、前記プログラムは他の２以上のプログラムの動作状況を監視するとともに他の２以上のプログラムから動作状況を監視される監視関係を形成し、前記３以上のプログラムの設定情報を記憶した管理テーブルに基づいて、監視先プログラムと監視元プログラムとを関係付けるプログラム管理手段を備え、前記各プログラムは、前記監視先プログラムとして、プログラムが正常に動作する過程で、前記監視元プログラムと情報共有した正常動作状態を示す正常情報を一定時間以内の間隔で繰り返し更新するプログラム正常情報更新手段を有し、前記監視元プログラムとして、前記監視先プログラムの前記正常情報を監視するタイミングで、前記監視先プログラムの前記プログラム正常情報更新手段が更新する前記正常情報を参照し、前回参照時に保存した正常情報との比較に基づいて、前記監視先プログラムの動作の異常を検出する他プログラム監視手段と、前記他プログラム監視手段から前記監視先プログラムの動作の異常の検出を通知された場合に、前記監視先プログラムを強制終了させて再起動する他プログラム再起動手段とを有し、前記プログラムは、前記正常情報を更新する間隔が一定時間以内の実行時間となるように処理群が定められ、前記プログラム正常情報更新手段は、前記処理群を処理する度に前記正常情報を更新する正常情報更新関数に関する処理を実行して前記正常情報を更新するものである。
【発明の効果】
【００１４】
この発明に係るプログラム監視システムによれば、複数のプログラムを実行するシステムにおいて、各プログラムは他のプログラムの動作状況を監視するとともに他のプログラムから動作状況を監視される関係の監視を少ない負荷で行いながら、正常に動作していないプログラムを検出した時点で、そのプログラムのみを短時間に再起動して、システム全体の再起動を伴わずに復旧させることができる。
【図面の簡単な説明】
【００１５】
【図１】この発明の実施の形態１に係るプログラム監視システムのプログラム監視の関係の一例を示す概念図である。
【図２】この発明の実施の形態１に係るプログラム監視システムの構成の一例を示す説明図である。
【図３】この発明の実施の形態１に係るプログラム監視システムが監視するプログラムの起動（初期化）の一例を示すフローチャートである。
【図４】この発明の実施の形態１に係るプログラム監視システムの監視元／監視先プログラム間の処理の一例を示す説明図である。
【図５】この発明の実施の形態１に係るプログラム監視システムのプログラム本体の実行の一例を示すフローチャートである。
【図６】この発明の実施の形態１に係るプログラム監視システムのプログラム実体処理の一例を示すフローチャートである。
【図７】この発明の実施の形態１に係るプログラム監視システムのカウンタ値変更関数の一例を示すフローチャートである。
【図８】この発明の実施の形態１に係るプログラム監視システムの監視プログラムの実行の一例を示すフローチャートである。
【図９】この発明の実施の形態１に係るプログラム監視システムのプログラムの初期登録の一例を示すフローチャートである。
【図１０】この発明の実施の形態１に係るプログラム監視システムのプログラム管理手段が行うプログラムの追加／削除の一例を示す概念図である。
【図１１】この発明の実施の形態１に係るプログラム監視システムのプログラムの追加の一例を示すフローチャートである。
【図１２】この発明の実施の形態１に係るプログラム監視システムのプログラムの削除の一例を示すフローチャートである。
【図１３】この発明の実施の形態２に係るプログラム監視システムの監視元／監視先プログラム間の処理の一例を示す説明図である。
【発明を実施するための形態】
【００１６】
この発明に係るプログラム監視システムは、複数のプログラムを実行するシステムにおいて、プログラム間の相互監視を少ない負荷で行いながら、正常に動作していないプログラムを検出した時点で、そのプログラムのみを短時間に再起動して、システム全体の再起動を伴わずに復旧させるものである。以下に、この発明に係るプログラム監視システムの一例について説明する。
【００１７】
実施の形態１．
図１は、この発明の実施の形態１に係るプログラム監視システムのプログラム監視の関係の一例を示す概念図である。図において、第１のプログラム（プログラム１）１０ａから第４のプログラム（プログラム４）１０ｄの４つのプログラムがプログラム監視システム上で動作している状態（動作状況）を示している。このとき、各プログラムは、他のプログラムのうち、一つのプログラムの動作状況を監視するものとする。例えば、監視元プログラムとして第１のプログラム１０ａは、監視先プログラムとして第２のプログラム１０ｂの動作状況を監視している。同様に、第２のプログラム１０ｂは第３のプログラム１０ｃの動作状況、第３のプログラム１０ｃは第４のプログラム１０ｄの動作状況、また第４のプログラム１０ｄは第１のプログラム１０ａの動作状況を監視する。
【００１８】
このように、各プログラムは、他のプログラムの動作状況を監視する一方で他のプログラムから動作状況を監視されることによって、全体でループ形状の監視関係を構成している。よって、全プログラムが一つのループをなす形状で動作状況を監視することにより、あるプログラムの動作が異常になっても、その動作が異常になったプログラムを監視対象としていた他の正常動作するプログラムが発見できる。各プログラムは、一つのプログラムしか監視しないので、処理の負荷、すなわちオーバーヘッドは少なくできる。
【００１９】
ここで、各プログラムは、一つのプログラムしか監視しないものとしたが、処理の負荷に余裕があれば、他のプログラムのうち、二つ以上のプログラムを監視し、かつ二つ以上のプログラムに監視されても構わない（図示せず）。
【００２０】
図２は、この発明の実施の形態１に係るプログラム監視システムの構成の一例を示す説明図である。図において、プログラム制御手段（プラットフォーム）３０は、オペレーティングシステム（ＯＳ）として、プログラムの実行の全般を制御する。
プログラム管理手段（プログラム管理機能）２５は、プログラム監視の対象となる各プログラムの情報を統括し、監視元プログラムとして起動する各プログラムが監視すべき監視先プログラムを決定して管理テーブル（データベース。以下、ＤＢと記す。）２５１にプログラムの各種設定情報を記憶し、管理テーブル（ＤＢ）２５１の設定情報を各プログラム間で関係付けさせることで管理する。
【００２１】
各プログラムは、プログラム実体を処理するプログラム本体（図示せず）と監視プログラムから構成され、監視機能の実現手段として、具体的には次のプログラム正常情報更新手段（プログラム正常情報更新機能）２１、他プログラム監視手段（他プログラム監視機能）２２、タイマー手段（タイマー機能）２３、他プログラム再起動手段（他プログラム再起動機能）２４をそれぞれ有する。
【００２２】
プログラム正常情報更新手段２１は、このプログラムが監視先プログラムとして正常に動作する過程で、プログラムの起動時に決定された監視元プログラムと情報共有した、この監視先プログラムの動作状態を示す正常情報を一定時間以内の間隔で繰り返し更新する。なお、監視先プログラムの動作状態を示す正常情報は、監視元プログラムと監視先プログラムとの共有メモリ上の格納値として情報共有される。他プログラム監視手段２２は、プログラムの起動時に決定された監視先プログラムのプログラム正常情報更新手段２１が更新する正常情報を参照し、前回参照した後に保存した正常情報との比較に基づいて監視先プログラムの動作の異常を検出する。タイマー手段２３は、他プログラム監視手段２２を呼び出して監視先プログラムの正常情報を定期的に監視するタイミングを指示する。
他プログラム再起動手段２４は、他プログラム監視手段２２が監視先プログラムの動作に異常を検出した場合に、監視先プログラムを強制終了させて再起動する。
【００２３】
図３は、この発明の実施の形態１に係るプログラム監視システムが監視するプログラムの起動（初期化）の一例を示すフローチャートである。
【００２４】
図において、ステップＳＴ１０１、ＳＴ１０２で、起動させるプログラムに関するプログラム管理手段２５の管理テーブル（ＤＢ）２５１の記憶情報およびこのプログラム内の設定を初期化する。
【００２５】
ステップＳＴ１０１で、起動させるプログラム（自己プログラム）の情報を管理テーブル（ＤＢ）２５１に書き出す。ここで、管理テーブル（ＤＢ）２５１に書き出す自己プログラムの情報は、静的に設定されているプログラム情報として、自己プログラムの識別情報（ＩＤ）と、自己プログラムが監視先プログラムとなるときに、監視元プログラムと共有した情報を参照させるための共有メモリのアドレス情報を含む。
【００２６】
ステップＳＴ１０２で、起動させるプログラムが監視元プログラムとして監視する監視先プログラムをプログラム管理手段２５の管理テーブル（ＤＢ）２５１の保存情報から特定した後、読み出した監視先プログラムの情報を他プログラム監視手段２２、他プログラム再起動手段２４に設定する。ここで、管理テーブル（ＤＢ）２５１から読み出す監視先プログラムの情報には、監視先プログラムの識別情報（ＩＤ）と、自己プログラムが監視元プログラムとなるときに、監視先プログラムと共有した情報を参照するための共有メモリのアドレス情報を含む。ここで、まだ監視先プログラムが起動されておらず、情報を読み出せない場合は、監視先プログラムから読み出せるようになるまで設定を保留しておく。
【００２７】
ステップＳＴ１０３で、このプログラムが正常に動作している状態であることを示すために、このプログラムを監視先プログラムとし、監視元プログラムとの間の共有メモリに設けた正常情報に初期値を設定する。
【００２８】
ステップＳＴ１０４で、例えばマルチプロセスやマルチスレッドといった複数プログラムを並行動作する機能を利用して、ここで起動させるプログラムを、プログラムの実体であるプログラム本体と、定期的に監視先プログラムを監視する監視プログラムとに分けて並行動作させる。
【００２９】
プログラム本体の動作として、ステップＳＴ１０５で、プログラム本体の状態を示す活性化フラグをオフに設定して休眠を準備する。ここで、活性化フラグは、オンはプログラム本体が起きている状態、オフは休眠している状態を示す。なお、プログラム本体の状態を示す活性化フラグは、正常情報と同様、監視元プログラムと監視先プログラムとの共有メモリ上の格納値として情報共有される。
ステップＳＴ１０６で、プログラム本体を一旦休眠させる。
【００３０】
監視プログラムの動作として、ステップＳＴ１０７で、監視プログラムが次に起きるタイミングをタイマーに設定する。このタイマー設定により、監視プログラムは定期的に動作させることができる。
ステップＳＴ１０８で、監視プログラムを一旦休眠させる。
【００３１】
なお、プログラムが休眠状態となった後、プログラム制御手段（プラットフォーム）３０がタイマーイベントやユーザイベントを検出して、対応するプログラムを起こすように制御する。
【００３２】
また、ここでは、起動するプログラムをプログラム本体と監視プログラムとに分割して並行動作させる際に、それぞれを一旦休眠させるものとして説明したが、休眠させずに、プログラム本体の実行（図５（後述）。ステップＳＴ１０５、ＳＴ１０６はステップＳＴ２０２、ＳＴ２０３に対応する）、監視プログラムの実行（図８（後述）。ステップＳＴ１０７、ＳＴ１０８はステップＳＴ５０７、ＳＴ５０８に対応する）を最初から処理するようにしてもよい。
【００３３】
図４は、この発明の実施の形態１に係るプログラム監視システムの監視元／監視先プログラム間の処理の一例を示す説明図である。ここでは、監視元プログラム（プログラム１）が監視先プログラム（プログラム２）を監視する一対応部分のみ示している。また、破線で囲んだ手段は、監視元プログラム（プログラム１）が監視先プログラム（プログラム２）を監視する関係付けでは機能しない構成手段である。
【００３４】
図において、監視先プログラムのプログラム正常情報更新手段２１ｂは、プログラム本体が正常に動作する過程で、監視元プログラムとの共有メモリ２６ｂに保持した正常動作状態を示す正常情報２６１ｂを一定時間以内の間隔で繰り返し更新する。ここで、プログラム本体が、正規に動作するときは、共有メモリ２６ｂに保持したプログラム本体が起きていることを示す活性化フラグ２６２ｂがオンに設定されている。
【００３５】
監視元プログラムの他プログラム監視手段２２ａは、監視先プログラムのプログラム正常情報更新手段２１ｂが更新する正常情報を監視し、監視先プログラムの正常情報の更新状況および活性化フラグの設定状態に基づいて、監視先プログラムの動作の異常を検出する。他プログラム再起動手段２４ａは、他プログラム監視手段２２ａが監視先プログラムの動作に異常を検出した場合に通知され、監視先プログラムを強制終了させて再起動する。
【００３６】
図５は、この発明の実施の形態１に係るプログラム監視システムのプログラム本体の実行の一例を示すフローチャートである。ここで、休眠から起こされたプログラム本体は、監視先プログラムとして動作することになる。
【００３７】
図において、ステップＳＴ２０１で、このプログラムが起きていることを示す活性化フラグをオンに設定する。共有メモリ上の活性化フラグをオンに設定することで、このプログラムが周期的に動作する、しないに関わらず、プログラムが起きている間のみを、監視元プログラムによる正常動作の監視対象とすることができる。すなわち、活性化フラグがオフであれば正常情報が更新されていなくても、このプログラム本体の動作を監視する監視元プログラムに異常ではないと判断させることができる。
ステップＳＴ３００で、プログラム実体処理（図６（後述））を行う。
ステップＳＴ２０２で、このプログラムが休眠していることを示す活性化フラグをオフに設定して休眠を準備する。
ステップＳＴ２０３で、プログラム本体を休眠させる。
【００３８】
なお、プログラムごとに、そのプログラム本体の処理は異なるため、各プログラム本体が次に起きるタイミングは、ユーザイベント、タイマーイベントのどちらで起こされる設計としてもよい。ただし、タイマーイベントで起こされる設計であれば、ステップＳＴ２０２の前後いずれかでタイマー設定が必要となる。
【００３９】
図６は、この発明の実施の形態１に係るプログラム監視システムのプログラム実体処理の一例を示すフローチャートである。ここでは、一例としてプログラム本体の処理を定義する処理群を、プログラム本体が起きている間に正常情報を更新する間隔が一定時間以内の実行時間となるように、処理群１から処理群Ｎに細分化し、その再分化した処理群の間に正常情報を更新する正常情報更新関数に関する一連の処理を埋め込んでおくものとする。
【００４０】
図において、ステップＳＴ３０１で、処理群１を処理する。
ステップＳＴ３０２ａで、ＣＰＵ上のレジスタ群をすべて退避する。
ステップＳＴ３０３ａで、乱数を発生させる。
ステップＳＴ３０４ａで、ＣＰＵ上のレジスタ群からステップＳＴ３０３で発生させた乱数値に基づいて決定されたレジスタに現在のプログラムカウンタ（ＰＣ）値を書き込むとともに、特定のレジスタに同じ乱数値を書き込んで、呼び出し元アドレスを仮保存する。
【００４１】
ステップＳＴ４００ａで正常情報変更処理（図７（後述））を呼び出して処理する。正常情報を変更する処理関数の呼び出し時には、関数から正式の戻り先となる呼び出し元アドレス（プログラムカウンタ値。）を含め、各レジスタが退避される。
【００４２】
ステップＳＴ３０５ａで、ステップＳＴ３０４ａで仮保存したＣＰＵ上のレジスタ群をすべて復帰する。
【００４３】
以降も、ステップＳＴ３０６で、処理群２を処理した後、ステップＳＴ３０２ａからＳＴ３０５ａの一連の処理に対応するステップＳＴ３０２ｂからＳＴ３０５ｂを処理し、同様に、ステップＳＴ３０７で、細分化した最後の処理群Ｎを処理した後、ステップＳＴ３０２ａからＳＴ３０５ａの一連の処理に対応するステップＳＴ３０２ｃからＳＴ３０５ｃを処理するまで、プログラム本体の処理を定義する処理群を細分化した処理群を順次実行する。
【００４４】
なお、一般に、より現実的なプログラム本体の処理を定義する処理群は、分岐や関数呼び出しなどにより複雑な順序、経路で処理されるため、そのような処理順序、経路も考慮した上で、正常情報を更新する間隔が一定時間以内の実行時間となるように、プログラム本体の処理を定義する処理群を複数の処理群に細分化し、その再分化した処理群の間に正常情報を更新する正常情報更新関数（ステップＳＴ４００を含むステップＳＴ３０２からＳＴ３０５の一連の処理）を埋め込んでおくものとする。プログラム本体に埋め込まれたこれら一連の処理は、監視プログラムのプログラム正常情報更新手段で実行される。
【００４５】
図７は、この発明の実施の形態１に係るプログラム監視システムの正常情報変更処理の一例を示すフローチャートである。
【００４６】
図において、ステップＳＴ４０１で、スタックポインタの示すアドレスに基づいて、この正常情報変更処理後の正式の戻り先となる呼び出し元アドレス（プログラムカウンタ値）と、図６のステップＳＴ４００から正常情報変更処理を呼び出す前に、ステップＳＴ３０４で書き込んだ乱数値を特定のレジスタから読み出し、その乱数値に基づいて決定される退避したレジスタから仮保存した呼び出し元アドレス（プログラムカウンタ値）を読み出す。
【００４７】
ステップＳＴ４０２で、読み出した正式の呼び出し元アドレスと仮保存した呼び出し元アドレスが一致するか比較する。ここで、比較する呼び出し元アドレスである仮保存時のプログラムカウンタ値と関数呼び出し時のプログラムカウンタ値は、ステップＳＴ３０２の明示的なレジスタ退避処理とステップＳＴ４００の正常情報変更処理呼び出しの時点のプログラムカウンタ値のオフセットを考慮した一致判定とする。２つの呼び出し元アドレスがオフセットを考慮しても一致といえないとき（Ｎｏ）、暴走状態などの異常と考えられるので、正常情報を更新するまでもなく、正常情報変更処理を終了する。
【００４８】
２つの呼び出し元アドレスが一致といえるとき（Ｙｅｓ）、ステップＳＴ４０３で、共有メモリから正常情報を読み出して、ステップＳＴ４０４で、正常情報を更新し、ステップＳＴ４０５で、共有メモリに正常情報を書き込む。
【００４９】
なお、正常情報の値は、所定の増減分で単調増加（カウントアップ）または単調減少（カウントダウン）させてもよいし、異なる値になればランダムに書き換えて更新してもよい。このように、監視先プログラムが正常に動作している場合に限って正常情報は更新され、動作に異常があれば正常情報の書き換えは行われないことになる。
【００５０】
また、一定の更新動作だけに限らず、複数の更新動作を組み合わせて処理してもよい。複数の更新動作には、例えば、正常情報の値の増減分を一定にせず、用意された複数の更新動作を順次行うようにしてもよい。
【００５１】
図８は、この発明の実施の形態１に係るプログラム監視システムの監視プログラムの実行の一例を示すフローチャートである。ここで、タイマーイベントにより休眠から起こされた監視プログラムは、監視元プログラムとして動作することになる。
【００５２】
ステップＳＴ５０１で、監視元プログラムの他プログラム監視手段は、監視先プログラムとの共有メモリから正常情報を読み出し、また前回記憶した正常情報を読み出す。ここで、図３のステップＳＴ１０１で、監視先プログラムが起動されておらず、情報を読み出せていなかった場合は、監視先プログラムから情報の読み出しを試みて、ここでも情報が読み出せなければ再度設定を保留する。保留する場合、監視対象の監視先プログラムが起動されていないので、このフローチャートを終了する（図示せず）。
【００５３】
ステップＳＴ５０２で、共有メモリから今回読み出した正常情報と他プログラム監視手段が前回記憶した正常情報を比較し、正常情報が変化していれば（Ｙｅｓ）、ステップＳＴ５０６へ進み、変化していなければ（Ｎｏ）、ステップＳＴ５０３へ進む。
【００５４】
ステップＳＴ５０３で、共有メモリから活性化フラグを読み出し、その状態がオフならば（Ｙｅｓ）、ステップＳＴ５０６へ進み、オフでなければ（Ｎｏ）、ステップＳＴ５０４へ進む。ここで、活性化フラグの状態がオフならば、正常情報に変化がなくても監視先プログラムの動作は正常であるので、再起動は必要がないと判断できる。一方、活性化フラグの状態がオンならば、監視先プログラムの動作は異常であるので、他プログラム監視手段は他プログラム再起動手段に異常検出を通知する。
【００５５】
なお、監視先プログラムの動作状態が正常か異常かの判定では、所定回数だけ連続して変わってない場合を異常であると判断するようにしても構わない。このとき、連続して正常情報が変わってないことを計数する手段を用意しておくことで、例えばシステムのＣＰＵ本体や動作クロックの変更によって、プログラム本体と監視プログラムの処理速度の関係が変更前と変化しても、そのまま実行可能なプログラムであれば運用継続できるようになる。
【００５６】
ステップＳＴ５０４で、監視元プログラムの他プログラム再起動手段は、監視先プログラムを強制終了させ、ステップＳＴ５０５で、監視先プログラムを再起動する。なお、監視元プログラムの他プログラム再起動手段は、監視先プログラムの再起動のみ行い、再起動された監視先プログラム自身が以前の同一監視先プログラムを見つけて、見つかった場合に強制的に終了するようにしても構わない。
【００５７】
ステップＳＴ５０６で、監視元プログラムの他プログラム監視手段は、ステップＳＴ５０１で共有メモリから今回読み出した正常情報を次回の比較のために保存する。
ステップＳＴ５０７で、監視元プログラムの監視プログラムが次に起きるタイミングをタイマーに設定する。
ステップＳＴ５０８で、監視プログラムを休眠し、タイマーイベントで起こされるのを待つ。
【００５８】
ただし、本体プログラムが休眠状態でも、正常情報更新関数（ステップＳＴ４００を含むステップＳＴ３０２からＳＴ３０５の一連の処理）を一定時間以内に常に呼び出して正常情報を更新し続けるならば、活性化フラグを設けない運用も可能である。
【００５９】
この発明の実施の形態１に係るプログラム監視システムのプログラム管理手段が行うプログラム管理として、プログラムの初期登録、プログラムの追加、プログラムの削除の一例について説明する。
【００６０】
図９は、この発明の実施の形態１に係るプログラム監視システムのプログラム管理手段が行うプログラムの初期登録の一例を示すフローチャートである。この処理は、プログラム監視システムを起動してプログラムの登録要求があった時点で呼び出され、起動する各プログラムを初期登録するものである。
【００６１】
図において、ステップＳＴ６０１で、登録要求のあった各プログラムに、静的に設定されているプログラム情報を読み出す。
ステップＳＴ６０２で、各プログラムに番号を振って順序付けを行う。
ステップＳＴ６０３で、監視先プログラムが次の順序のプログラムになるように関連付けを行う。
ステップＳＴ６０４で、各プログラムに関するプログラム情報、関連付け情報等をプログラム管理手段２５の管理テーブル（ＤＢ）２５１に保存する。
ステップＳＴ６０５で、登録した各プログラムおよびこのプログラムの初期登録処理を休眠させる。
【００６２】
図１０は、この発明の実施の形態１に係るプログラム監視システムのプログラム管理手段が行うプログラムの追加／削除の一例を示す概念図である。プログラムの追加／削除については、例えばリスト構造にセルを追加するのと同様に行う。
【００６３】
図において、上段は、プログラムＡとプログラムＢとの間にプログラムＣが追加される場合を示している。プログラムＡは監視対象をプログラムＢからプログラムＣに変更し、追加するプログラムＣがプログラムＢを監視するように設定される。また、下段は、プログラムＤとプログラムＦとの間のプログラムＥが削除される場合を示している。プログラムＡは監視対象をプログラムＥからプログラムＦに変更される。
【００６４】
図１１は、この発明の実施の形態１に係るプログラム監視システムのプログラム管理手段が行うプログラムの追加の一例を示すフローチャートである。この処理は、プログラム監視システムの起動後、プログラムの追加要求があった時点で呼び出され、プログラムを追加登録するものである。
【００６５】
図において、ステップＳＴ７０１で、追加要求されたプログラムに、静的に設定されているプログラム情報を読み出す。
ステップＳＴ７０２で、このプログラムに番号を振って順序付けを行う。
ステップＳＴ７０３で、直前に追加されたプログラムＡが追加するプログラムＣを監視するように関連付けを変更する。
ステップＳＴ７０４で、直前に追加されたプログラムＡが監視していたプログラムＢを追加するプログラムＣが監視するように関連付けを変更する。
ステップＳＴ７０５で、追加要求されたプログラムに関するプログラム情報、関連付け情報等をプログラム管理手段２５の管理テーブル（ＤＢ）２５１に保存する。
ステップＳＴ７０６で、追加したプログラムおよびこのプログラムの追加処理を休眠させる。
【００６６】
図１２は、この発明の実施の形態１に係るプログラム監視システムのプログラム管理手段が行うプログラムの削除の一例を示すフローチャートである。この処理は、プログラム監視システムの起動後、プログラムの削除要求があった時点で呼び出され、プログラムを削除するものである。
【００６７】
ステップＳＴ８０１で、削除するプログラムＥが監視していたプログラムＦを削除するプログラムＥを監視していたプログラムＤが監視するように関連付けを変更する。
ステップＳＴ８０２で、削除するプログラムＥを消去する。
ステップＳＴ８０３で、削除要求されたプログラムに関するプログラム情報、関連付け情報等をプログラム管理手段２５の管理テーブル（ＤＢ）２５１から削除する。
ステップＳＴ８０４で、このプログラムの削除処理を休眠させる。
【００６８】
このように、プログラム管理手段が行う図９のプログラムの初期登録はプログラム監視システムの起動時のイベント（初期登録要求）で一度のみ起こされて処理する。また、図１１のプログラムの追加、図１２のプログラムの削除は、ユーザイベント（追加要求、削除要求）の度に休眠から起こされて処理することになる。
【００６９】
また、図１０ないし図１２で説明したプログラム管理手段が行うプログラムの追加および削除は、拡張性のあるプログラム監視システムには必須であるが、拡張性が必要のないプログラム監視システムでは動作するプログラム種別、数を起動させてから変化させないため、必ずしも実装しなくても構わない。ただし、動作に異常が検出されたときに、強制終了させて再起動するが、強制終了を削除、再起動を追加と見ることもできる。
【００７０】
以上、この発明の実施の形態１に係るプログラム監視システムによれば、複数のプログラムを実行するシステムにおいて、プログラム間の相互監視を少ない負荷で行いながら、正常に動作していないプログラムを検出した時点で、そのプログラムのみを短時間に再起動して、システム全体の再起動を伴わずに復旧させることができるという効果がある。
【００７１】
実施の形態２．
この発明の実施の形態１に係るプログラム監視システムは、正常情報と活性化フラグを共有メモリを介して情報共有するものであった。次に、この発明の実施の形態２に係るプログラム監視システムとして、正常情報と活性化フラグをメッセージ通信を介して情報共有するものについて説明する。
【００７２】
図１３は、この発明の実施の形態２に係るプログラム監視システムの監視元／監視先プログラム間の処理の一例を示す説明図である。ここでは、図４と同様に、監視元プログラム（プログラム１）が監視先プログラム（プログラム２）を監視する一対応部分のみ示している。また、破線で囲んだ手段は、監視元プログラム（プログラム１）が監視先プログラム（プログラム２）を監視する関係付けでは機能しない構成手段である。
【００７３】
図において、監視先プログラム（プログラム２）の送信情報領域２７ｂと監視元プログラム（プログラム１）の受信情報領域２７Ａに、正常情報と活性化フラグをそれぞれ用意し、メッセージ通信により割込みを掛けて送信情報領域の値を受信情報領域の値として書き込んでもらうことで更新し、情報共有を実現する。ここでは図示していないが、監視先プログラム（プログラム２）には受信情報領域２７Ｂ、監視元プログラム（プログラム１）には送信情報領域２７ａが別途あるものとする。このような構成により、情報共有の実現方法を除き、正常情報の参照と変更、活性化フラグの設定、プログラム動作の監視、異常検出時の再起動などは、図４と同様に処理される。
【００７４】
このような正常情報と活性化フラグの情報共有の実現方法の変更により、共有メモリへのアクセスが、送信情報領域または受信情報領域へのアクセスとなる。よって、図７のプログラム監視システムの正常情報変更処理のフローチャートでは、ステップＳＴ４０３で、送信情報領域から正常情報を読み出して、ステップＳＴ４０５で、送信情報領域に正常情報を書き込むことになる。また、図８のプログラム監視システムの監視プログラムの実行のフローチャートでは、ステップＳＴ５０１で、監視元プログラムの他プログラム監視手段は、受信情報領域から正常情報を読み出し、また前回記憶した正常情報を読み出すことになる。
【００７５】
また、共有メモリを使用しなくなったことに伴い、図３のプログラム監視システムが監視するプログラムの起動（初期化）のフローチャートでは、例えばステップＳＴ１０１で、管理テーブル（ＤＢ）２５１に書き出す自己プログラムの情報に、自己プログラムが監視先プログラムとなるときに、監視元プログラムと共有した情報を参照させるための共有メモリのアドレス情報を含める必要もなくなる。
【００７６】
なお、この発明の実施の形態２に係るプログラム監視システムでは、メッセージ通信により割込みを掛けて送信情報領域の値を受信情報領域の値として書き込んでもらうことで更新し、情報共有を実現するものとして説明したが、一変形例として、この発明の実施の形態１に係るプログラム監視システムと同様に共有メモリで正常情報と活性化フラグの情報共有を実現した上で、監視先プログラムから監視元プログラムにメッセージ通信により割込みを掛けてプログラム動作を監視するタイミングを通知するだけにしてもよい。このとき、先に説明した図８の監視プログラムの実行では、監視元プログラムがタイマーイベントにより休眠から起こされるものとしたが、監視プログラムは割込みにより通知されたタイミングで起動することになるので、次回起動するタイミングを設定するタイマー設定（図８のステップＳＴ５０７および図３のステップＳＴ１０７）に相当する処理は不要となる。
【００７７】
以上、この発明の実施の形態２に係るプログラム監視システムによれば、この発明の実施の形態１に係るプログラム監視システムと同様に、複数のプログラムを実行するシステムにおいて、プログラム間の相互監視を少ない負荷で行いながら、正常に動作していないプログラムを検出した時点で、そのプログラムのみを短時間に再起動して、システム全体の再起動を伴わずに復旧させることができるという効果がある。
【００７８】
ここまで説明してきたこの発明に係るプログラム監視システムのような複数の実行プログラムを監視するシステムとして、例えば車両に搭載され、あるいは携帯端末として車両に持ち込まれるカーナビゲーション（カーナビ）装置を考えた場合、その内部では、位置測位、ナビゲーション、テレビ、ラジオ、映像・音声メディアの再生、また文字放送などの機能に代表される複数のプログラムが動作する。ここには、画像表示や音声再生の両方に関わるプログラムもあれば、画像表示のみ、音声再生のみに関わるプログラムも存在し、また画像表示にも音声再生にも関わらないプログラムも含むことができる。
【００７９】
ここで、システム上で動作する監視対象が画像表示や音声再生を伴うプログラムであるとき、動作に異常を検出してその復旧過程に時間がかかると、正常時と異なる不自然さや違和感をユーザの視覚や聴覚などに知覚させてしまうため、できるだけ短時間でシステムを復旧させることが望ましい。例えば、画像表示を伴うプログラムでは、映像の１フレームの表示時間より早くシステムを復旧させることができれば、ユーザに気付かせることはない。
【００８０】
また、ここではカーナビゲーション装置を例に挙げたが、今後はより多くの車載機器も統合されていき、カーナビゲーション装置が他の車載機器を統合することもあれば、他の車載装置に統合されることも考えられる。例えば、カーナビゲーション装置、空調の運転状況の表示類などが、運転時の走行速度などの各種情報を示す計器類の表示パネルに統合されたインストルメントパネル（インパネ）も普及し始めている。このとき、表示パネルはタッチパネル機能が実装されていても構わない。なお、このような統合されたインストルメントパネル化は、車両のみならず、飛行機、船舶、列車などの乗り物全般にも応用可能であり、そこに実装される各機能に関わるプログラムも、この発明に係るプログラム監視システムを実装して監視対象にできることは言うまでもない。
【００８１】
また、この発明に係るプログラム監視システムは、複数の実行プログラムを監視するものであれば、例えば医療機器のような医療分野、ゲームのような娯楽・エンターテインメント分野、また、マルチメディア分野やテレマティクス分野の装置にも適用することができ、その他にもプログラム動作の異常発生時に短時間に復旧することを望まれ、あるいは義務付けられた様々な分野のシステムで広く応用できるものである。
【００８２】
以上、この発明に係るプログラム監視システムによれば、複数のプログラムを実行するシステムにおいて、プログラム間の相互監視を少ない負荷で行いながら、正常に動作していないプログラムを検出した時点で、そのプログラムのみを短時間に再起動して、システム全体の再起動を伴わずに復旧させることができるという効果がある。
【００８３】
特に、システム上で動作する監視対象が画像表示や音声再生を伴うプログラムであるとき、復旧過程で正常時と異なる不自然さや違和感をユーザの視覚や聴覚などに知覚させずにシステムを復旧させることができる。
【００８４】
また、この発明に係るプログラム監視システムによれば、プログラム動作の異常復旧に関してリアルタイム性、信頼性を低コストで得られるようになる。
【符号の説明】
【００８５】
１０  プログラム、２１  プログラム正常情報更新手段（プログラム正常情報更新機能）、２２  他プログラム監視手段（他プログラム監視機能）、２３  タイマー手段（タイマー機能）、２４  他プログラム再起動手段（他プログラム再起動機能）、２５  プログラム管理手段（プログラム管理機能）、２５１  管理テーブル（データベースＤＢ）、２６  共有メモリ、２６１  正常情報、２６２  活性化フラグ、３０  プログラム制御手段（プラットフォーム）。
【図１】
0005737055.tif 000002
【図２】
0005737055.tif 000003
【図３】
0005737055.tif 000004
【図４】
0005737055.tif 000005
【図５】
0005737055.tif 000006
【図６】
0005737055.tif 000007
【図７】
0005737055.tif 000008
【図８】
0005737055.tif 000009
【図９】
0005737055.tif 000010
【図１０】
0005737055.tif 000011
【図１１】
0005737055.tif 000012
【図１２】
0005737055.tif 000013
【図１３】
0005737055.tif 000014