(57)【要約】【課題】高性能なシステムを複数利用して二重化をすることなく、簡単な構成で機器の故障等にも対応することのできるプログラム実行システムを提供する。【解決手段】実行装置１０ａは、プログラム記憶部と、プログラムを実行する実行手段１２と、プログラムの実行によって生じた実行値を記憶する実行データ記憶部と、他の実行装置に実行値を送信するとともに、受信する実行値を実行データ記憶部に追加する交換手段１４と、負荷を通知する通知手段１３を備え、監視装置２０は、プログラム状態テーブル記憶部と、装置状態テーブル記憶部と、装置状態テーブルにおいて実行装置の識別子に関連付けられる負荷を更新する更新手段２３と、実行装置の異常を検出する検出手段２４と、異常の発生した実行装置で実行されていたプログラムの実行を負荷の低い実行装置に割り当て、装置状態テーブルを更新する割当手段２５と、プログラムの実行を送信する指令手段を備える。【選択図】  図１
2009026182.tif 000002
【特許請求の範囲】
【請求項１】
プログラムを実行する複数の実行装置と、前記複数の実行装置におけるプログラムの実行状態を監視する監視装置とを有するプログラム実行システムであって、
前記実行装置は、
複数のプログラムを記憶するプログラム記憶部と、
リクエストに従って、指定されたプログラムを実行する実行手段と、
前記プログラムの実行によって生じた実行値を蓄積して記憶する実行データ記憶部と、
他の実行装置に前記実行値を送信するとともに、他の実行装置から受信する実行値を前記実行データ記憶部に追加する交換手段と、
前記プログラムの実行による負荷の状況を前記監視装置に通知する通知手段と、
を備え、
前記監視装置は、
前記プログラムの識別子と、前記プログラムを実行する実行装置の識別子とを関連付けるプログラム状態テーブルを記憶するプログラム状態テーブル記憶部と、
複数の実行装置の識別子と、前記実行装置における負荷とを関連付ける装置状態テーブルを記憶する装置状態テーブル記憶部と、
前記実行装置から、前記負荷の状況を受信すると、前記装置状態テーブルにおいて前記実行装置の識別子に関連付けられる負荷を受信した前記負荷に更新する更新手段と、
前記複数の実行装置の異常の発生を検出する検出手段と、
異常の発生した実行装置が検出されると、前記プログラム状態テーブル及び前記装置状態テーブルを参照し、前記異常の発生した実行装置で実行されていたプログラムの実行を負荷の低い他の実行装置に割り当てるとともに、前記装置状態テーブルを更新する割当手段と、
前記プログラムを割り当てた実行装置に、前記プログラムの実行を要求するリクエストを送信する指令手段と、
を備えていることを特徴とするプログラム実行システム。
【請求項２】
プログラムを実行する複数の実行装置が接続されるプログラム実行システムであって、
前記実行装置は、
複数のプログラムを記憶するプログラム記憶部と、
リクエストに従って、指定されたプログラムを実行する実行手段と、
前記プログラムの実行によって生じた実行値を蓄積して記憶する実行データ記憶部と、
他の実行装置に前記実行値を送信するとともに、他の実行装置から受信する実行値を前記実行データ記憶部に追加する交換手段と、
前記プログラムの実行による負荷の状況を通知する通知手段と、
を備え、
前記実行装置の少なくともいずれかは、更に、
前記プログラムの識別子と、前記プログラムを実行する実行装置の識別子とを関連付けるプログラム状態テーブルを記憶するプログラム状態テーブル記憶部と、
複数の実行装置の識別子と、前記実行装置における負荷とを関連付ける装置状態テーブルを記憶する装置状態テーブル記憶部と、
いずれかの実行装置から、前記負荷の状況を受信すると、前記装置状態テーブルにおいて前記実行装置の識別子に関連付けられる負荷を受信した前記負荷に更新する更新手段と、
前記複数の実行装置の異常の発生を検出する検出手段と、
異常の発生した実行装置が検出されると、前記プログラム状態テーブル及び前記装置状態テーブルを参照し、前記異常の発生した実行装置で実行されていたプログラムの実行を負荷の低い他の実行装置に割り当てるとともに、前記装置状態テーブルを更新する割当手段と、
前記プログラムを割り当てた実行装置に、前記プログラムの実行を要求するリクエストを送信する指令手段と、
を備えていることを特徴とするプログラム実行システム。
【請求項３】
前記検出手段は、前記実行装置から所定時間に前記負荷の状況を受信しないときに前記実行装置を異常であると判定することを特徴とする請求項１又は２に記載のプログラム実行システム。
【請求項４】
プログラムを実行する複数の実行装置と、前記複数の実行装置を監視するとともに負荷の状況に応じて実行装置に実行させるプログラムを決定してリクエストを送信する監視装置とが接続されるプログラム実行システムで用いられる前記実行装置であって、
前記実行装置は、
複数のプログラムを記憶するプログラム記憶部と、
前記リクエストに従って、指定されたプログラムを実行する実行手段と、
前記プログラムの実行によって生じた実行値を蓄積して記憶する実行データ記憶部と、
他の実行装置に前記実行値を送信するとともに、他の実行装置から受信する実行値を前記実行データ記憶部に追加する交換手段と、
前記プログラムの実行による負荷の状況を前記監視装置に通知する通知手段と、
を備えることを特徴とする実行装置。
【請求項５】
プログラムを実行する複数の実行装置が接続されるプログラム実行システムで用いられる前記実行装置であって、
複数のプログラムを記憶するプログラム記憶部と、
リクエストに従って、指定されたプログラムを実行する実行手段と、
前記プログラムの実行によって生じた実行値を蓄積して記憶する実行データ記憶部と、
他の実行装置に前記実行値を送信するとともに、他の実行装置から受信する実行値を前記実行データ記憶部に追加する交換手段と、
前記プログラムの実行による負荷の状況を通知する通知手段と、
を備えることを特徴とする実行装置。
【請求項６】
前記実行装置は更に、
前記プログラムの識別子と、前記プログラムを実行する実行装置の識別子とを関連付けるプログラム状態テーブルを記憶するプログラム状態テーブル記憶部と、
複数の実行装置の識別子と、前記実行装置における負荷とを関連付ける装置状態テーブルを記憶する装置状態テーブル記憶部と、
いずれかの実行装置から、前記負荷の状況を受信すると、前記装置状態テーブルにおいて前記実行装置の識別子に関連付けられる負荷を受信した前記負荷に更新する更新手段と、
前記複数の実行装置の異常の発生を検出する検出手段と、
異常の発生した実行装置が検出されると、前記プログラム状態テーブル及び前記装置状態テーブルを参照し、前記異常の発生した実行装置で実行されていたプログラムの実行を負荷の低い他の実行装置に割り当てるとともに、前記装置状態テーブルを更新する割当手段と、
前記プログラムを割り当てた実行装置に、前記プログラムの実行を要求するリクエストを送信する指令手段と、
を備えていることを特徴とする請求項５記載の実行装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの実行を複数の装置によって分散して実行するとともに故障を検出することができるプログラム実行システム及び実行装置に関する。
【背景技術】
【０００２】
従来、企業やプラント等で利用される電子システムや、航空機に搭載される航空機搭載システムでは、システムを構成する機器の故障が事故等の発生を招くおそれがある。したがって、このようなシステムでは、プログラムの実行中に機器の故障を監視するとともに、故障が発生した場合でもその故障を検知して修復したり、実行中のプログラムの実行を継続できるように構成されている。
【０００３】
たとえば、中央処理装置（CPU）、メモリ、入出力用のプロセッサ、故障診断用のプロセッサ等を備える複数のシステムを組み合わせ、複数のシステムで同期して二重化運転を行う二重化コンピュータシステムがある（例えば、特許文献１参照）。
【０００４】
この二重化コンピュータシステムは、いわゆるフォルトトレラントシステムとして用いられるシステムであって、互いにその動作を故障診断用のプロセッサで監視し、いずれかのシステムにおいて故障が発生すると故障を検出することができるため、故障箇所の早期修復が可能となる。また、この二重化コンピュータシステムは、二重化運転を行っているために必要なプログラム実行が中断される問題を防止することができる。
【特許文献１】特開2006-172390号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、引用文献１に記載されている二重化コンピュータシステムでは、複数のシステムによって構成しており、その各システムに冗長性を持たせてプログラムを実行するものである。したがって、二重化コンピュータシステムを構成するシステムの全ては、二重化コンピュータシステムで実行する必要がある全てのプログラムを実行しており、それぞれに高い性能が要求されている。
【０００６】
上記課題に鑑み、本発明は、高性能なシステムを複数利用して二重化をすることなく、簡単な構成で機器の故障等にも対応することのできるプログラム実行システムを提供する。
【課題を解決するための手段】
【０００７】
本発明の特徴に係るプログラム実行システムは、プログラムを実行する複数の実行装置と、複数の実行装置におけるプログラムの実行状態を監視する監視装置とを有するプログラム実行システムであって、実行装置は、複数のプログラムを記憶するプログラム記憶部と、リクエストに従って、プログラムを実行する実行手段と、プログラムの実行によって生じた実行値を蓄積して記憶する実行データ記憶部と、他の実行装置に実行値を送信するとともに、他の実行装置から受信する実行値を実行データ記憶部に追加する交換手段と、プログラムの実行による負荷の状況を監視装置に通知する通知手段とを備え、監視装置は、プログラムの識別子と、プログラムを実行する実行装置の識別子とを関連付けるプログラム状態テーブルを記憶するプログラム状態テーブル記憶部と、複数の実行装置の識別子と、実行装置における負荷とを関連付ける装置状態テーブルを記憶する装置状態テーブル記憶部と、実行装置から、負荷の状況を受信すると、装置状態テーブルにおいて実行装置の識別子に関連付けられる負荷を受信した負荷に更新する更新手段と、複数の実行装置の異常の発生を検出する検出手段と、異常の発生した実行装置が検出されると、プログラム状態テーブル及び装置状態テーブルを参照し、異常の発生した実行装置で実行されていたプログラムの実行を負荷の低い他の実行装置に割り当てるとともに、装置状態テーブルを更新する割当手段と、プログラムを割り当てた実行装置に、プログラムの実行を要求するリクエストを送信する指令手段とを備えている。
【０００８】
また、他の特徴に係るプログラム実行システムは、プログラムを実行する複数の実行装置が接続されるプログラム実行システムであって、実行装置は、複数のプログラムを記憶するプログラム記憶部と、リクエストに従って、プログラムを実行する実行手段と、プログラムの実行によって生じた実行値を蓄積して記憶する実行データ記憶部と、他の実行装置に実行値を送信するとともに、他の実行装置から受信する実行値を実行データ記憶部に追加する交換手段と、プログラムの実行による負荷の状況を通知する通知手段とを備え、実行装置の少なくともいずれかは、更に、プログラムの識別子と、プログラムを実行する実行装置の識別子とを関連付けるプログラム状態テーブルを記憶するプログラム状態テーブル記憶部と、複数の実行装置の識別子と、実行装置における負荷とを関連付ける装置状態テーブルを記憶する装置状態テーブル記憶部と、いずれかの実行装置から、負荷の状況を受信すると、装置状態テーブルにおいて実行装置の識別子に関連付けられる負荷を受信した負荷に更新する更新手段と、複数の実行装置の異常の発生を検出する検出手段と、異常の発生した実行装置が検出されると、プログラム状態テーブル及び装置状態テーブルを参照し、異常の発生した実行装置で実行されていたプログラムの実行を負荷の低い他の実行装置に割り当てるとともに、装置状態テーブルを更新する割当手段と、プログラムを割り当てた実行装置に、プログラムの実行を要求するリクエストを送信する指令手段とを備えている。
【発明の効果】
【０００９】
本発明によれば、高性能なシステムを複数利用して二重化をすることなく、簡単な構成で機器の故障等にも対応することができる。
【発明を実施するための最良の形態】
【００１０】
以下に、図面を用いて本発明の最良の実施形態について説明する。以下の説明において同一の構成には、同一の記号を付し、類似の構成には類似の記号を付して説明を省略する。
【００１１】
〈第１の実施形態〉
《プログラム実行システム》
本発明の第１の実施形態に係るプログラム実行システムは、図１に示すように、プログラムを実行する複数の実行装置１０ａ〜１０ｃと、複数の実行装置１０ａ〜１０ｃにおけるプログラムの実行状態を監視する監視装置２０を有している。
【００１２】
プログラム実行システム１ａは、複数のプログラムにより成立する一連の処理を制御するシステムであり、複数のプログラムは監視装置２０による監視制御によって各実行装置１０ａ〜１０ｂのいずれかによって実行される。例えば、プログラム実行システム１ａで実行するプログラムがプログラム１〜７まであるとき、プログラム１〜７は、それぞれ異なる実行装置１０ａ〜１０ｃに分散して実行される。
【００１３】
このプログラム実行システム１ａは、この飛行機やヘリコプター等の航空機で飛行に関する一連の処理を制御するシステムとして利用することができる。すなわち、航空機の飛行に関する制御は、複数の処理によって行われているが、その各処理を実行するプログラムを別々の実行装置１０ａ〜１０ｃによって実行するとともに、各実行装置１０ａ〜１０ｃの状態を監視装置２０で監視し、いずれかの実行装置で異常が発生した場合に実行されなくなったプログラムを他の実行装置で実行させる。これによって、航空機の飛行に必要な処理を全て実行させることが可能となり、飛行の安全を確保することができる。その他、このプログラム実行システム１ａは、ビルやプラント等の施設を監視制御するシステムとして利用することもできる。
【００１４】
《実行装置》
実行装置１０ａは、図１に示すように、記憶装置１１、実行手段１２、通知手段１３及び交換手段１４を備えている。
【００１５】
記憶装置１１では、プログラム実行システム１ａによって一連の処理を制御する際に必要な複数のプログラムを記憶している。例えば、プログラム実行システム１ａで実行するプログラムがプログラム１〜７まであるとき、記憶装置１１は、この全てのプログラムを記憶している。また、記憶装置１１では、プログラムの実行によって発生した値を実行データとして記憶している。
【００１６】
実行手段１２は、監視装置２０から実行するプログラムの識別子とともに、プログラムの実行を要求するリクエストを入力すると、記憶装置１１から実行するプログラムを読み出して実行する。また、実行手段１２は、プログラムの実行によって発生した実行値を記憶装置１１に実行データとして記憶する。
【００１７】
通知手段１３は、実行手段１２がプログラムの実行を開始すると、定期的にプログラムの実行による実行装置１０ａでの負荷状況を監視装置２０に送信する。このとき、通知手段１３は、負荷状況とともに実行装置１０ａの識別子を送信する。なお、実行装置１０ａは、正常である場合には監視装置２０に負荷状況を定期的に送信することができるが、異常が発生すると、負荷状況を送信することはできない。
【００１８】
交換手段１４は、記憶装置１１に記憶される実行データを、定期的に読み出し、他の実行装置１０ｂ，１０ｃに送信する。また、交換手段１４は、他の実行装置１０ｂ，１０ｃから受信した実行データを記憶装置１１に記憶する。
【００１９】
実行手段１２は、プログラムを実行する際、記憶装置１１に実行するプログラムに関する実行データが記憶されていると、この実行データの値を利用して実行を開始することができる。すなわち、プログラムの実行の際、他の実行装置１０ａ，１０ｂにおける実行によって既に得られた値を利用してプログラムを実行することができる。
【００２０】
実行装置１０ｂ，１０ｃも実行装置１０ａと同一の構成であるため、説明を省略する。なお、実行装置１０ｂ，１０ｃの記憶装置１１でも、実行装置１０ａの記憶装置１１で記憶されているプログラムと同一のプログラムが記憶されている。
【００２１】
以下の説明では、主に実行装置１０ａを用いて説明するが、実行装置１０ａを適宜、実行装置１０ｂ，１０ｃに代えることができる。また、図１に示すように、実行装置１０ａの識別子は「実行装置１」、実行装置１０ｂの識別子は「実行装置２」、実行装置１０ｃの識別子は「実行装置３」として説明する。
【００２２】
《監視装置》
監視装置２０は、図１に示すように、記憶装置２１、指令手段２２、更新手段２３、検出手段２４及び割当手段２５を備えている。
【００２３】
監視装置２０の記憶装置２１では、例えば、図２（ａ）に示すようなプログラムの実行状態を管理するプログラム状態テーブルT1と、図３（ａ）に示すような実行装置１０ａにおける状態を管理する装置状態テーブルT2を記憶している。
【００２４】
プログラム状態テーブルT1では、プログラムがいずれかの実行装置１０ａで実行中又は実行予定のとき、プログラムの識別子に関連付けられるフラグが「１」となり、いずれの実行装置１０ａでも実行されていない又は実行予定でないときにフラグが「０」となる。図２（ａ）に示すプログラム状態テーブルT1からは、プログラム実行システム１ａで実行されるプログラムはプログラム１〜７であり、現在は、実行装置１０ａでプログラム１，４を実行し、実行装置１０ｂでプログラム２を実行し、実行装置１０ｃでプログラム３を実行しており、プログラム５〜７は実行されていないことが分かる。
【００２５】
装置状態テーブルT2では、実行装置１０ａの識別子に装置の負荷を負荷率［％］で表している。また、実行装置１０ａの異常が検出されたとき、実行装置１０ａの識別子に関連付けられている異常のフラグが「１」となり、異常が検出されていないときにはフラグが「０」となる。図３（ａ）に示す装置状態テーブルT2からは、実行装置１０ａの負荷は「６０％」、実行装置１０ｂの負荷は「３０％」、実行装置１０ｃの負荷は「４０％」であり、いずれの実行装置においても異常が発生していないことがわかる。負荷は負荷率［％］の他、レベルで表わす等、他の方法で表わすことができる。
【００２６】
指令手段２２は、プログラム実行システム１ａが起動すると、全ての実行装置１０ａ〜１０ｃに対し、プログラムの実行を要求するリクエストを送信する。指令手段２２が送信するリクエストには、各実行装置１０ａ〜１０ｃに実行を要求するプログラムの識別子を含んでいる。例えば、監視装置２０では、各プログラムに対し、起動時に実行させる実行装置１０ａを予め割り当ててプログラム状態テーブルT1に記憶しておき、指令手段２２は、この割り当てを利用してリクエストを送信する。実行装置１０ａにプログラム１，４の実行を要求するリクエストを送信し、実行装置１０ｂにプログラム２の実行を要求するリクエストを送信し、実行装置１０ｃにプログラム３を実行するリクエストを送信すると、図２に示すプログラム状態テーブルT1の状態となる。
【００２７】
プログラムの実行の進行によって、プログラム実行システム１ａで実行中であったプログラムの実行が終了したり、他のプログラムを実行する等、プログラムの実行は変化する。したがって、指令手段２２は、このような状況に応じてリクエストを生成し送信する。例えば、新たにプログラム５を実行装置１０ａに実行させるとき、指令手段２２は、実行装置１０ａにプログラム５の実行を要求するリクエストを送信する。このとき、プログラム状態テーブルT1は、図２（ｂ）に示すようにプログラム５と関連付けられる実行状態のフラグが「１」になるとともに、プログラム５に実行装置１０ａの識別子が関連付けられる。また、図２（ｂ）に示すプログラム状態テーブルT1では、プログラム４の実行は終了していることが分かる。
【００２８】
更新手段２３は、定期的に実行装置１０ａから受信する負荷状況によって、装置状態テーブルT2において負荷状況を送信した実行装置１０ａの識別子に関連付けられる負荷の値を更新する。例えば、各実行装置１０ａ〜１０ｃの負荷が図３（ａ）に示す値であった場合に実行装置１０ａから負荷状況として「６０％」を受信し、実行装置１０ｃから負荷状況として「４５％」を受信すると、更新手段２３は、装置状態テーブルT2を図３（ｂ）に示すように更新する。
【００２９】
上述したように、実行装置１０ａで異常が発生した場合、負荷状況を送信しない。したがって、検出手段２４は、リクエストを送信した後又は前回負荷状況を受信してから所定の時間が経過しても実行装置１０ａから負荷状況を受信できないとき、実行装置１０ａに異常が発生したと検出する。
【００３０】
割当手段２５は、検出手段２４で実行装置１０ａの異常が検出されると、実行装置１０ａで実行していたプログラムの実行を他の実行装置１０ｂ，１０ｃに割り当てるとともに、プログラム状態テーブルT1及び装置状態テーブルT2を更新する。
【００３１】
指令手段２２は、割当手段２５によってプログラムの割り当てが変更されてプログラム状態テーブルT1が更新されると、プログラムの実行が割り当てられた実行装置１０ａに、プログラムの実行を要求するリクエストを送信する。
【００３２】
例えば、プログラム状態テーブルT1が図２（ｂ）に示す状態であり、装置状態テーブルT2が図３（ｂ）に示す状態であったときに実行装置１０ｃが異常であると、割当手段２５は、実行装置１０ｃで実行していたプログラム３を正常でない実行装置１０ａ，１０ｂのうちで負荷状況の低い実行装置１０ｂに割り当て、プログラム状態テーブルT1を図３（ｂ）に示すように更新する。また、図３（ｃ）に示すように装置状態テーブルT2について、実行装置１０ｃの識別子と関連付けられる異常フラグを「１」に変更するとともに、実行装置１０ｃから入力した負荷状況に基づいて、実行装置１０ｃの識別子と関連付けられる負荷を更新する。
【００３３】
なお、割当手段２５は、装置状態テーブルT2で管理されている各実行装置１０ａ〜１０ｃの状態にばらつきが生じたとき、負荷の低い実行装置に負荷の高い実行装置で実行されているプログラムの一つを割り当てて、プログラムの割り当てを変更してもよい。
【００３４】
上述した実行装置１０ａ〜１０ｃは、中央処理装置（CPU）、記憶装置、メモリ等（図示せず）を備える一般的なコンピュータであって、記憶装置に記憶する実行プログラムをインストールすることで図１に示すように実行手段１２及び通知手段１３が実装される。また、監視装置２０も一般的なコンピュータであって、記憶装置に記憶する監視プログラムをインストールすることで、図１に示すように指令手段２２、更新手段２３、検出手段２４及び割当手段２５が実装される。
【００３５】
《プログラム実行システムにおける処理》
図４に示すシーケンス図を用いて、プログラム実行システム１ａにおいて実行される処理について説明する。
【００３６】
プログラム実行システム１ａが起動すると、監視装置２０の指令手段２２がプログラム状態テーブルT1から各プログラムの実行に関する初期状態を読み出し（S1）、各実行装置１０ａ〜１０ｃに実行を要求するプログラムの識別子とともに、リクエストを送信する（S2）。
【００３７】
各実行装置１０ａ〜１０ｃの実行手段１２は、リクエストとともに受信した識別子で識別されるプログラムを実行する（S3）。このとき、実行手段１２は、プログラムの実行による実行値を、定期的に実行データDに蓄積させる。
【００３８】
通知手段１３は、実行装置１０ａ〜１０ｃにおける負荷状況を定期的に監視装置２０に送信する（S4）。また、各交換手段１４は、実行データDを他の実行装置１０ｂ〜１０ｄに送信するとともに、他の実行装置１０ａ〜１０ｃから受信した実行データDを記憶装置１１に記憶させる（S5）。
【００３９】
監視装置２０の更新手段２３は、受信した負荷状況で装置状態テーブルT2を更新する（S6）。監視装置２０では、定期的に実行装置１０ａ〜１０ｃから負荷状況を受信するが、いずれかの実行装置１０ａ〜１０ｃから負荷状況を受信できないとき、この実行装置を異常であると検出する（S7）。
【００４０】
異常が検出されたとき、割当手段２５は、異常が検出された実行装置で実行されていたプログラムを他の負荷の低い実行装置に割り当て（S8）、更新手段２３は、装置状態テーブルT2を更新する（S9）。その後、指令手段２２は、プログラムの実行を割り当てた実行装置にプログラムの実行を要求するリクエストを送信する（S10）。
【００４１】
リクエストを受信した実行装置の実行手段１２は、リクエストに応じてプログラムを実行する（S11）。この後の処理は、上述したステップS3以降に説明した処理と同様の処理が進められる。
【００４２】
このように、プログラム実行システム１ａにおいては、いずれかの実行装置１０ａ〜１０ｃで異常が発生すると、異常が発生した実行装置１０ａで実行していたプログラムを異常の発生していない実行装置１０ａ，１０ｃに実行させる。したがって、プログラム実行システム１ａ全体としては、実行すべきプログラムを中止することなく必要な処理を全て実行することができる。
【００４３】
また、実行装置１０ａ〜１０ｃでは、実行中に生成したデータ等を適宜、グローバルデータとして交換し、各実行装置１０ａ〜１０ｃで保持している。したがって、異常が発生した実行装置１０ａで実行していたプログラムを実行することになった他の実行装置１０ｂ，１０ｃは、異常が発生した実行装置１０ａで異常発生前に生成したデータ（実行値）を活用することができる。
【００４４】
すなわち、プログラム実行システム１ａは従来のように二重化運転によって各実行装置１０ａ〜１０ｃは同一のプログラムを実行しているのではなく、各実行装置１０ａ〜１０ｃは異なるプログラムを分散して実行しているとともに、プログラムの実行によって得られる実行値のみを共有している。すなわち、従来のように各システムで二重化運転するのではなく、各実行装置１０ａ〜１０ｃでプログラムの実行によって得られる実行値を相互に交換して記憶し、いずれかの実行装置で異常が発生した場合には、異常が発生した実行装置で得られた実行値を用いて他の実行装置が実行を継続する。したがって、各実行装置自体は二重化運転する従来のシステムのように高度な性能を有していなくても、異常が発生した場合にのみ代替して実行が可能となるため、簡易な構成の実行装置の組み合わせでプログラム実行システム１ａを構成することが可能となる。
【００４５】
図１においては、実行装置１０ａ〜１０ｃ及び監視装置２０は１台のコンピュータで構成されているが、それぞれ複数のコンピュータで実現されていても同様である。例えば、監視装置２０が２台のコンピュータによって構成されていてもよい。
【００４６】
また、図１では、プログラム実行システム１ａは、３台の実行装置１０ａ〜１０ｃを有する例で説明したが、プログラム実行システム１ａが有する実行装置の数は３台に限られない。
【００４７】
〈第２の実施形態〉
《プログラム実行システム》
本発明の第２の実施形態に係るプログラム実行システムは、図５に示すように、プログラムを実行する複数の実行装置１０ｃ〜１０ｄを有している。第２の実施形態に係るプログラム実行システム１ｂを、図１を用いて上述した第１の実施形態に係るプログラム実行システム１ａと比較すると、監視装置２０を有さず、実行装置１０ａに代えて実行装置１０ｄを有している点で異なり、実行装置１０ｄの監視によって、各実行装置１０ｂ〜１０ｄによってプログラムが実行される。
【００４８】
《実行装置》
実行装置１０ｄは、図１に示すように、記憶装置１１、監視ブロックb1及び実行ブロックb2を備えている。実行装置１０ｄの記憶装置１１は、第１の実施形態において上述したプログラム状態テーブルT1、装置状態テーブルT2、プログラム及び実行データDを記憶している。また、実行装置１０ｄの監視ブロックb1では、図１を用いて上述した指令手段２２、更新手段２３、検出手段２４及び割当手段２５を備え、実行ブロックb2では、上述した実行手段１２、通知手段１３及び交換手段１４を備えている。
【００４９】
実行装置１０ｂ，１０ｃは、図５に示す実行装置１０ｄと比較して、記憶装置１１にプログラム状態テーブルT1及び装置状態テーブルT2を記憶せず、監視ブロックb1を備えていない点で異なる。すなわち、実行装置１０ｂ，１０ｃは、図１を用いて上述した実行装置１０ａと同一の構成である。
【００５０】
上述した実行装置１０ｄは、CPU、記憶装置、メモリ等（図示せず）を備える一般的なコンピュータであって、記憶装置に記憶する監視プログラムをインストールすることで図５に示すように監視ブロックb1が実装され、記憶装置に記憶する実行プログラムをインストールすることで図５に示すように実行ブロックb2が実装される。また、実行装置１０ｂ，１０ｃも一般的なコンピュータであって、記憶装置に記憶する実行プログラムをインストールすることで、図５に示すように実行ブロックb2が実装される。
【００５１】
図１においては、プログラム実行システム１ｂは、３台の実行装置１０ｂ〜１０ｄを有する例で説明したが、プログラム実行システム１ｂが有する実行装置の数は３台に限られない。
【００５２】
《プログラム実行システムにおける処理》
図６に示すシーケンス図を用いて、プログラム実行システム１ｂにおいて実行される処理について説明する。プログラム実行システム１ｂで、行われる処理は、図４を用いて上述したプログラム実行システム１ａにおける処理と同一であるが、監視装置２０が実行していた処理を、実行装置１０ｄの監視ブロックb1において実行する。
【００５３】
プログラム実行システム１ｂが起動されると、監視ブロックb1の指令手段２２が実行装置１０ｄのプログラム状態テーブルT1から初期状態を読み出し（S1）、各実行装置１０ｂ〜１０ｄに実行を要求するプログラムの識別子とともに、リクエストを送信する（S2）。ここで、指令手段２２は、実行装置１０ｄに対しては、実行ブロックb2の実行手段１２に対してリクエストを送信する。
【００５４】
各実行装置１０ｂ〜１０ｄの実行手段１２は、リクエストとともに受信した識別子で識別されるプログラムを実行する（S3）。このとき、実行手段１２は、プログラムの実行による実行値を、定期的に実行データDに蓄積させる。
【００５５】
通知手段１３は、実行装置１０ｂ〜１０ｄにおける負荷状況を定期的に実行装置１０ｄに送信する（S4）。ここで、実行装置１０ｄの通知手段１３は、監視ブロックb1に負荷状況を送信する。また、各交換手段１４は、実行データDを他の実行装置１０ｂ〜１０ｄに送信するとともに、他の実行装置１０ｂ〜１０ｄから受信した実行データDを記憶装置１１に記憶させる（S5）。
【００５６】
実行装置１０ｄの更新手段２３は、受信した負荷状況で装置状態テーブルT2を更新する（S6）。実行装置１０ｄは、定期的に実行装置１０ｂ〜１０ｄから負荷状況を受信するが、いずれかの実行装置１０ｂ〜１０ｄから負荷状況を受信できないとき、この実行装置を異常であると検出する（S7）。
【００５７】
異常が検出されたとき、監視ブロックb1の割当手段２５は、異常が検出された実行装置で実行されていたプログラムを他の負荷の低い実行装置に割り当て（S8）、更新手段２３は、装置状態テーブルT2を更新する（S9）。その後、指令手段２２は、プログラムの実行を割り当てた実行装置にプログラムの実行を要求するリクエストを送信する（S10）。
【００５８】
リクエストを受信した実行装置の実行手段１２は、リクエストに応じてプログラムを実行する（S11）。この後の処理は、上述したステップS3以降に説明した処理と同様の処理が進められる。
【００５９】
このように、第２の実施形態に係るプログラム実行システム１ｂにおいても、第１の実施形態に係るプログラム実行システム１ａと同様にいずれかの実行装置で異常が発生しても、実行すべきプログラムを中止することなく必要な処理を全て実行することができる。また、第２の実施形態に係るプログラム実行システム１ａにおいても、異常が発生した実行装置からプログラムの実行を受け継いだ他の実行装置は、他の実行装置で異常発生前に生成したデータ（実行値）を活用することができる。さらに、第１の実施形態に係るプログラム実行システム１ａと比較して、監視装置をいずれかの実行装置が兼ね備えているため、システム全体の構成を簡素化することができる。
【００６０】
したがって、第２の実施形態に係るプログラム実行システム１ｂも各実行装置自体は二重化運転する従来のシステムのように高度な性能を有していなくても、異常が発生した場合にのみ代替して実行が可能となるため、簡易な構成の実行装置の組み合わせで実現することが可能となる。
【００６１】
なお、図５においては、実行装置１０ｄにのみ監視ブロックb1を有しているが、実行装置１０ｂ，１０ｃでも監視ブロックb1を有する構成であってもよい。プログラム実行システム１ｂが有する全ての実行装置１０ｂ〜１０ｄが監視ブロックb1を有する場合、実行装置１０ｂ〜１０ｄに優先順位を定め、優先順位の高い実行装置１０ｄの監視ブロックb1のみを起動させ、他の実行装置１０ｂ，１０ｃでは監視ブロックb1は待機状態とし、実行ブロックb2のみを起動させる。このとき例えば、優先順位が2番目の実行装置１０ｂは、監視ブロックb1を実行している実行装置１０ｄの状態を監視して異常を検出した場合に監視ブロックb1を起動して他の実行装置１０ｃの異常を監視するようにしてもよい。また、図５では、プログラム実行システム１ｂは、３台の実行装置１０ｂ〜１０ｄを有する例で説明したが、プログラム実行システム１ｂが有する実行装置の数は３台に限られない。
【図面の簡単な説明】
【００６２】
【図１】本発明の第１の実施形態に係るプログラム実行システムを説明する機能ブロック図である。
【図２】図１のプログラム実行システムで利用するプログラム状態テーブルの一例である。
【図３】図１の装置状態テーブルの一例である。
【図４】図１のプログラム実行システムにおける処理を説明するシーケンス図である。
【図５】本発明の第２の実施形態に係るプログラム実行システムを説明する機能ブロック図である。
【図６】図５のプログラム実行システムにおける処理を説明するシーケンス図である。
【符号の説明】
【００６３】
１ａ…プログラム実行システム
１０ａ〜１０ｃ…実行装置
１１…記憶装置
１２…実行手段
１３…通知手段
１４…通知手段
１５…交換手段
２０…監視装置
２１…記憶装置
２２…指令手段
２３…更新手段
２４…検出手段
２５…割当手段
【図１】
2009026182.tif 000003
【図２】
2009026182.tif 000004
【図３】
2009026182.tif 000005
【図４】
2009026182.tif 000006
【図５】
2009026182.tif 000007
【図６】
2009026182.tif 000008