(57)【特許請求の範囲】
【請求項１】
複数のプロセッサと、各々の前記プロセッサに対応して設けられる複数の装置と、前記プロセッサ及び装置間のデータ入出力を制御する入出力手段とが含まれ、前記複数の装置からのデータ入力及び前記複数の装置へのデータ出力を前記複数のプロセッサが分散して行う分散処理システムであって、
前記分散処理を目的とする前記複数のプロセッサ及び前記複数の入出力手段に故障許容処理を併せて行わせる故障許容処理手段を含み、
前記故障許容処理手段は、前記プロセッサの各々に設けられ、前記全ての装置からのデータ入力及び前記全ての装置に対するデータ出力を行うデータ共有手段と、自プロセッサで算出した所定装置宛の出力データと他プロセッサで算出した前記所定装置宛の出力データとを比較し、その比較結果を他プロセッサに通知する冗長管理手段と、
前記入出力手段に設けられ、他プロセッサから通知された比較結果に基づき自プロセッサが故障か否かを判断する故障判定手段とを含み、
前記故障判定手段により自プロセッサが故障と判断された場合、自プロセッサを故障分離させる故障分離手段をさらに含み、
前記故障分離手段により自プロセッサが故障分離された場合、自プロセッサに対応する装置に対するデータ出力を他プロセッサから出力させるデータ転送手段を含み、
前記冗長管理手段は、前記両プロセッサで算出した出力データが不一致の場合にその出力データを算出した他プロセッサに対し故障通知を送出し、一致の場合に正常通知を送出することを特徴とする分散処理システム。
【請求項２】
前記分散処理をロボットアームの関節制御に用いたことを特徴とする請求項１記載の分散処理システム。
【請求項３】
前記故障許容処理手段は、前記プロセッサの各々に対応して設けられ、自プロセッサが故障か否かを独自に判定する故障判定手段と、前記故障と判定されたプロセッサの代行処理を行う代行処理手段とを含むことを特徴とする請求項１記載の分散処理システム。
【請求項４】
前記分散処理をロボットアームの関節制御に用いたことを特徴とする請求項３記載の分散処理システム。
【請求項５】
複数のプロセッサと、各々の前記プロセッサに対応して設けられる複数の装置と、前記プロセッサ及び装置間のデータ入出力を制御する入出力手段とが含まれる分散処理システムにおいて、前記複数の装置からのデータ入力及び前記複数の装置へのデータ出力を前記複数のプロセッサが分散して行う分散処理方法であって、
前記分散処理を目的とする前記複数のプロセッサ及び前記複数の入出力手段に故障許容処理を併せて行わせる故障許容処理ステップを含み、
前記故障許容処理ステップは、前記プロセッサの各々に設けられ、前記全ての装置からのデータ入力及び前記全ての装置に対するデータ出力を行うデータ共有ステップと、自プロセッサで算出した所定装置宛の出力データと他プロセッサで算出した前記所定装置宛の出力データとを比較し、その比較結果を他プロセッサに通知する冗長管理ステップと、
前記入出力手段に設けられ、他プロセッサから通知された比較結果に基づき自プロセッサが故障か否かを判断する故障判定ステップとを含み、
前記故障判定ステップにより自プロセッサが故障と判断された場合、自プロセッサを故障分離させる故障分離ステップをさらに含み、
前記故障分離ステップにより自プロセッサが故障分離された場合、自プロセッサに対応する装置に対するデータ出力を他プロセッサから出力させるデータ転送ステップを含み、
前記冗長管理ステップは、前記両プロセッサで算出した出力データが不一致の場合にその出力データを算出した他プロセッサに対し故障通知を送出し、一致の場合に正常通知を送出することを特徴とする分散処理方法。
【請求項６】
前記分散処理をロボットアームの関節制御に用いたことを特徴とする請求項５記載の分散処理方法。
【請求項７】
前記故障許容処理ステップは、前記プロセッサの各々に対応して設けられ、自プロセッサが故障か否かを独自に判定する故障判定ステップと、
前記故障と判定されたプロセッサの代行処理を行う代行処理ステップとを含むことを特徴とする請求項５記載の分散処理方法。
【請求項８】
前記分散処理をロボットアームの関節制御に用いたことを特徴とする請求項７記載の分散処理方法。
【請求項９】
複数のプロセッサと、各々の前記プロセッサに対応して設けられる複数の装置と、前記プロセッサ及び装置間のデータ入出力を制御する入出力手段とが含まれる分散処理システムにおいて、前記複数の装置からのデータ入力及び前記複数の装置へのデータ出力を前記複数のプロセッサが分散して行う分散処理制御プログラムであって、
前記分散処理を目的とする前記複数のプロセッサ及び前記複数の入出力手段に故障許容処理を併せて行わせる故障許容処理ステップを含み、
前記故障許容処理ステップは、前記プロセッサの各々に設けられ、前記全ての装置からのデータ入力及び前記全ての装置に対するデータ出力を行うデータ共有ステップと、自プロセッサで算出した所定装置宛の出力データと他プロセッサで算出した前記所定装置宛の出力データとを比較し、その比較結果を他プロセッサに通知する冗長管理ステップと、
前記入出力手段に設けられ、他プロセッサから通知された比較結果に基づき自プロセッサが故障か否かを判断する故障判定ステップとを含み、
前記故障判定ステップにより自プロセッサが故障と判断された場合、自プロセッサを故障分離させる故障分離ステップをさらに含み、
前記故障分離ステップにより自プロセッサが故障分離された場合、自プロセッサに対応する装置に対するデータ出力を他プロセッサから出力させるデータ転送ステップを含み、
前記冗長管理ステップは、前記両プロセッサで算出した出力データが不一致の場合にその出力データを算出した他プロセッサに対し故障通知を送出し、一致の場合に正常通知を送出することを特徴とする分散処理制御プログラム。
【請求項１０】
前記分散処理をロボットアームの関節制御に用いたことを特徴とする請求項９記載の分散処理制御プログラム。
【請求項１１】
前記故障許容処理ステップは、前記プロセッサの各々に対応して設けられ、自プロセッサが故障か否かを独自に判定する故障判定ステップと、
前記故障と判定されたプロセッサの代行処理を行う代行処理ステップとを含むことを特徴とする請求項９記載の分散処理制御プログラム。
【請求項１２】
前記分散処理をロボットアームの関節制御に用いたことを特徴とする請求項１１記載の分散処理制御プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は分散処理システム及び分散処理方法並びに分散処理制御プログラムに関し、特にフォールトトレラント（ｆａｕｌｔ−ｔｏｌｅｒａｎｔ；故障許容）能力を有する分散処理システム及び分散処理方法並びに分散処理制御プログラムに関する。
【０００２】
【従来の技術】
図１４は従来の分散処理システムの一例の構成図である。図１４において、プロセッサエレメントＡ；４０１ａは、入出力部Ａ；４０２ａにより装置Ａ；４０３ａと接続されており、装置Ａ；４０３ａからの入力データＡ；４０５ａは、プロセッサエレメントＡ；４０１ａの中でタスクＡ；４０８ａによって、出力データＡ；４０４ａが算出されて装置Ａ；４０３ａに出力される。
【０００３】
又、プロセッサエレメントＢ；４０１ｂでの処理動作、プロセッサエレメントＣ；４０１ｃでの処理は、夫々同様にタスクＢ；４０８ｂ、タスクＣ；４０８ｃで実行され、装置Ｂ；４０３ｂ、装置Ｃ；４０３ｃに出力される。さらに、ネットワーク４０６を経由して、タスクＡ；４０８ａ、タスクＢ；４０８ｂ、タスクＣ；４０８ｃを実行する上で必要なデータ交換を実施する。
【０００４】
このようなシステムでは、もともとフォールトトレラント能力は全くないが、それぞれのプロセッサエレメントに自己故障診断部Ａ；４０９ａ〜Ｃ；４０９ｃを設けることで、故障したプロセッサエレメントエレメントをシステムから切り離すことができる。しかし、自己故障診断では全ての故障を１００％検出して故障分離をすることはできない。さらに、故障したプロセッサエレメントを故障分離すると、それに接続されている装置まで分離されていまうので故障発生前に有していた機能が損なわれてしまう。それを防ぐためには、待機冗長のために予備のプロセッサエレメントを設置することが必要となるが、その分ハードウェアが増加してしまう。
【０００５】
以上のように、従来の分散処理システムでは、故障発生に対するフォールトトレラント能力が十分でないという欠点があった。
【０００６】
又、上記欠点を解決するために、図１４におけるプロセッサエレメントＡ；４０１ａ、プロセッサエレメントＢ；４０１ｂ、プロセッサエレメントＣ；４０１ｃをそれぞれ３重冗長化し、多数決によって確実なフォールトトレラント能力を持たせることも、従来の技術の延長上で容易に考えられる。しかし、その場合は、ハードウェア量が、３重冗長化のために少なくとも３倍増加してしまうので、ハードウェア量が大幅に大きくなってしまうという欠点があった。
【０００７】
つまり、従来技術は、基本的に、分散処理技術、フォールトトレラント技術をそれぞれ独立した技術として扱っていたため、片方の技術の弱点をもう片方の技術を使って補おうとしても、効率の悪いものとなっていた。
【０００８】
なお、分散処理技術とフォールトトレラント技術（冗長処理技術）を効率良く組みあわせて、システム全体として処理性能向上と信頼性向上をバランス良く実現するための技術については、極めて希少ながら、既存の発明もあるので、その発明の実施例の一例を以下に示す。
【０００９】
上記の冗長資源を有効活用して処理能力向上と信頼性向上を実現するための発明として、特開平７−１１４５２０号公報（名称：冗長資源の管理方法及びそれを用いた分散型フォールトトレラントコンピュータシステム）（以下、先行技術文献１という）が開示されている。ここで、先行技術文献１記載の技術は、冗長系を構成するそれぞれのコンピュータモジュールにおいて、各タスクについてのフォールト発生情報を収集し、そのフォールト発生情報に基づいた評価関数を設定して各タスクの信頼度を推定し、自コンピュータモジュールでどのタスクの冗長構成に参加すべきかを決定し、参加すべきタスクの実行を行うものである。
【００１０】
ここでの説明としては、本発明との相違点を明確にするため、本発明の一実施例である図１の構成と同じ機能動作に、先行技術文献１記載のシステムを適用した場合の動作例を以下に示す。つまり、コンピュータモジュールが制御対象としてデータの入出力を行う装置が３個あり、その各装置への制御を行うタスクがそれぞれの装置に対応して個別にあり、さらに、それぞれが３重冗長となっていて３重多数決によるフォールトトレランスを実行する場合の実施例について説明する。
【００１１】
図１５は、先行技術文献１記載のシステムの構成図である。同図は、その構成要素であるコンピュータモジュール１；５０１〜９；５０９に故障が発生した場合の動作例を示したものである。ここでは、本発明の一実施例である図１の場合との比較を行うことを目的として、相違点が明確になるように簡略化している。
【００１２】
図１５（Ａ）において、コンピュータモジュール１；５０１〜９；５０９は、それぞれ本発明のプロセッサエレメントに相当するものであり、装置Ａ；５１０〜Ｃ；５１２の制御等を行うため、データ入出力を行う。コンピュータモジュール１〜９はデータバス５１３により相互にデータ転送ができるものとする。又、装置Ａを制御するためのタスクＡ；５１４は、コンピュータモジュール１；５０１〜３；５０３の３つのモジュールで３重冗長タスクとして動作し、３重多数決による故障検出／分離／再構成を実施し、その結果として装置Ａへの出力データＡ；５１７をデータバス５１３経由で転送する。同様に、装置Ｂを制御するためのタスクＢ；５１５は、コンピュータモジュール４；５０４〜６；５０６の３つのモジュールで３重冗長タスクとして動作し、３重多数決による故障検出／分離／再構成を実施し、その結果として装置Ｂへの出力データＢ；５１８を転送する。同様に、装置Ｃを制御するためのタスクＣ；５１６は、コンピュータモジュール７；５０７〜９；５０９の３つのモジュールで３重冗長タスクとして動作し、３重多数決による故障検出／分離／再構成を実施し、その結果として装置Ｃへの出力データ５１９を転送する。
【００１３】
ここで、タスクＡ；５１４の重要度＆信頼性要求が高く、常に３重冗長が必要であるが、タスクＢ；５１５の重要度＆信頼性要求がタスクＡ；５１４に比べて低いとした場合は、コンピュータモジュール２；５０２が故障すると、図１５（Ｂ）に示すような動作に変化する。つまり、コンピュータモジュール２；５０２が故障したという情報が評価関数に反映され、それによって、タスクＡの３重冗長を維持するために、コンピュータモジュール４；５０４はタスクＢ；５１５の実行を中止してタスクＡ；５１４の実行を始める。つまり、故障により使用可能なコンピュータモジュール資源が減少した場合に、タスクＡ；５１４等の重要度＆信頼性要求が高いタスクに関して信頼性が低下しないように、各コンピュータモジュールで常に最も実行するに相応しいタスクを選択して実行するという効果があるものである。
【００１４】
上記のように、先行技術文献１記載のシステムの場合は、目的のために最適なタスク実行を制御するための手段について記述しているが、故障検出／分離の手段については一般的な手段を用いることにしている。又、この種のシステムの他の例が特開平８−３２９０２５号公報（以下、先行技術文献２という）、特開平９−１６５３５号公報（以下、先行技術文献３という）、特開平８−２２１２８５号公報（以下、先行技術文献４という）及び特開平８−９５９３５号公報（以下、先行技術文献５という）に記載されている。
【００１５】
【発明が解決しようとする課題】
しかし、上記先行技術文献１記載のシステムでは、３重多数決を実施して１００％の故障検出／分離を行うためには、各タスクごとに３つのコンピュータモジュールが必要である。従って、制御対象となる装置が３種類ある場合は、図１５に示すように、コンピュータモジュールが９個必要となる。一方、この課題を解決する手段は上記先行技術文献２〜５にも記載されていない。
【００１６】
そこで本発明の目的は、コンピュータモジュール等のハ−ドウエア量を従来よりも低減することが可能な分散処理システム及び分散処理方法並びに分散処理制御プログラムを提供することにある。
【００１７】
【課題を解決するための手段】
前記課題を解決するために本発明による第１の発明は、複数のプロセッサと、各々の前記プロセッサに対応して設けられる複数の装置と、前記プロセッサ及び装置間のデータ入出力を制御する入出力手段とが含まれ、前記複数の装置からのデータ入力及び前記複数の装置へのデータ出力を前記複数のプロセッサが分散して行う分散処理システムであって、そのシステムは前記分散処理を目的とする前記複数のプロセッサ及び前記複数の入出力手段に故障許容処理を併せて行わせる故障許容処理手段を含み、前記故障許容処理手段は、前記プロセッサの各々に設けられ、前記全ての装置からのデータ入力及び前記全ての装置に対するデータ出力を行うデータ共有手段と、自プロセッサで算出した所定装置宛の出力データと他プロセッサで算出した前記所定装置宛の出力データとを比較し、その比較結果を他プロセッサに通知する冗長管理手段と、前記入出力手段に設けられ、他プロセッサから通知された比較結果に基づき自プロセッサが故障か否かを判断する故障判定手段とを含み、前記故障判定手段により自プロセッサが故障と判断された場合、自プロセッサを故障分離させる故障分離手段をさらに含み、前記故障分離手段により自プロセッサが故障分離された場合、自プロセッサに対応する装置に対するデータ出力を他プロセッサから出力させるデータ転送手段を含み、前記冗長管理手段は、前記両プロセッサで算出した出力データが不一致の場合にその出力データを算出した他プロセッサに対し故障通知を送出し、一致の場合に正常通知を送出することを特徴とすることを特徴とする。
【００１８】
又、本発明による第２の発明は、複数のプロセッサと、各々の前記プロセッサに対応して設けられる複数の装置と、前記プロセッサ及び装置間のデータ入出力を制御する入出力手段とが含まれ、前記複数の装置からのデータ入力及び前記複数の装置へのデータ出力を前記複数のプロセッサが分散して行う分散処理方法であって、その方法は前記分散処理を目的とする前記複数のプロセッサ及び前記複数の入出力手段に故障許容処理を併せて行わせる故障許容処理ステップを含み、前記故障許容処理ステップは、前記プロセッサの各々に設けられ、前記全ての装置からのデータ入力及び前記全ての装置に対するデータ出力を行うデータ共有ステップと、自プロセッサで算出した所定装置宛の出力データと他プロセッサで算出した前記所定装置宛の出力データとを比較し、その比較結果を他プロセッサに通知する冗長管理ステップと、前記入出力手段に設けられ、他プロセッサから通知された比較結果に基づき自プロセッサが故障か否かを判断する故障判定ステップとを含み、前記故障判定ステップにより自プロセッサが故障と判断された場合、自プロセッサを故障分離させる故障分離ステップをさらに含み、前記故障分離ステップにより自プロセッサが故障分離された場合、自プロセッサに対応する装置に対するデータ出力を他プロセッサから出力させるデータ転送ステップを含み、前記冗長管理ステップは、前記両プロセッサで算出した出力データが不一致の場合にその出力データを算出した他プロセッサに対し故障通知を送出し、一致の場合に正常通知を送出することを特徴とする分散処理方法ことを特徴とする。
【００１９】
又、本発明による第３の発明は、複数のプロセッサと、各々の前記プロセッサに対応して設けられる複数の装置と、前記プロセッサ及び装置間のデータ入出力を制御する入出力手段とが含まれ、前記複数の装置からのデータ入力及び前記複数の装置へのデータ出力を前記複数のプロセッサが分散して行う分散処理制御プログラムであって、そのプログラムは前記分散処理を目的とする前記複数のプロセッサ及び前記複数の入出力手段に故障許容処理を併せて行わせる故障許容処理ステップを含み、前記故障許容処理ステップは、前記プロセッサの各々に設けられ、前記全ての装置からのデータ入力及び前記全ての装置に対するデータ出力を行うデータ共有ステップと、自プロセッサで算出した所定装置宛の出力データと他プロセッサで算出した前記所定装置宛の出力データとを比較し、その比較結果を他プロセッサに通知する冗長管理ステップと、前記入出力手段に設けられ、他プロセッサから通知された比較結果に基づき自プロセッサが故障か否かを判断する故障判定ステップとを含み、前記故障判定ステップにより自プロセッサが故障と判断された場合、自プロセッサを故障分離させる故障分離ステップをさらに含み、前記故障分離ステップにより自プロセッサが故障分離された場合、自プロセッサに対応する装置に対するデータ出力を他プロセッサから出力させるデータ転送ステップを含み、前記冗長管理ステップは、前記両プロセッサで算出した出力データが不一致の場合にその出力データを算出した他プロセッサに対し故障通知を送出し、一致の場合に正常通知を送出することを特徴とする。
【００２０】
本発明による第１から第３の発明によれば、分散処理を行うマルチプロセッサシステムにおいて、分散処理を目的として複数存在するプロセッサ資源をフォールトトレラント処理のために有効活用して、故障が発生した時の故障検出及び分離を行う構成であるため、コンピュータモジュール等のハ−ドウエア量を従来よりも低減することが可能となる。
【００２１】
【発明の実施の形態】
まず、本発明の概要について説明する。図９は本発明の概要を示すシステム構成図である。同図（Ａ）において、制御対象となる装置が、装置Ａ；６０４〜Ｃ；６０６の３つあり、それらの制御タスクを実施するプロセッサエレメント（図１５のコンピュータモジュールに相当する）が、プロセッサエレメントＡ；６０１〜Ｃ；６０３の３つある。これらのプロセッサエレメントＡ；６０１〜Ｃ；６０３の夫々の中で、タスクＡ；６０８、タスクＢ；６０９、タスクＣ；６１０が実行され、全体で３重多数決による冗長処理を実施している。
【００２２】
ここで、プロセッサエレメントＢ６０２が故障した場合は、同図（Ｂ）に示すように、正常時にはプロセッサエレメントＢ６０２上のタスクＢ６０９から装置Ｂ６０５に転送していた出力データＢ６１２が、プロセッサエレメントＡ６０１上のタスクＢ６０９から転送されるようにすることで、故障検出／分離を行うと同時に、残された正常なプロセッサエレメントで正常処理を継続する。
【００２３】
つまり、同じ条件でプロセッサエレメント（図１５ではコンピュータモジュール）の故障に対して１００％の故障検出／分離を実施できるようにすると、先行技術文献１記載のシステム（図１５）の場合は９個のコンピュータモジュールが必要となるのに対して、本発明（図９）の場合は、プロセッサエレメントが３個あれば実現できる。
【００２４】
この際、本発明でも故障分離時に３重多数決を維持することも可能であり、その場合は予備のプロセッサエレメントを１個追加することが必要であるが、それでも先行技術文献１記載のシステムの場合と比べてプロセッサエレメント（冗長資源）の個数は半分以下（４／９）ですむ。
【００２５】
なお、先行技術文献１における図２０にコンピュータモジュールの数と実行可能なタスク数の関係を表した表が示されているが、その表においてコンピュータモジュールの数が３の時は、２重冗長のタスクが１個と冗長度の無いタスクが１個しか実行できないことが示されている。つまり、３個しか冗長資源が無いときは、本発明で実現可能な３種類の３重冗長タスクの実行が不可能であることが示されているという点で、本発明との相違点が明確である。
【００２６】
これは、本発明の場合、図１の実施の形態で示すように、図１における冗長管理部３ａ〜３ｃ、故障判定部１０ａ〜１０ｃ、ネットワーク制御部１２ａ〜１２ｃ、故障分離部９ａ〜９ｃ及びデータ転送制御部１１ａ〜１１ｃによって、分散処理目的に３つあるプロセッサエレメントのみを使用して３重多数決による冗長処理で故障検出／分離を可能としているためである。
【００２７】
上記のような、本発明の、先行技術文献１記載のシステムに対する相違点を整理すると、次のようになる。まず、先行技術文献１記載のシステムについて述べる。
【００２８】
（１）３個の制御対象がある場合に、３重多数決による冗長管理を実施する上で必要なプロセッサエレメントの個数は９個である。
【００２９】
（２）発明が解決しようとする課題（最も重大なもの）は、冗長化されたコンピュータモジュール（プロセッサエレメントに相当する）資源を利用して、分散処理と冗長処理を組み合わせて実施することで処理性能向上と信頼性向上とを同時に実現する場合に、コンピュータモジュールの故障発生によって、最も重要なタスクの信頼性が低下する可能性があったこと、つまり、故障発生時に、重要度の低いタスクから先に停止させて、重要度の高いタスクの信頼性を維持することが望まれるが、そのためには単純に冗長度を増すことしかできず、効率的な縮退の手段がなかったことである。
【００３０】
（３）発明の最大の効果は、故障発生時に、重要度の低いタスクから先に停止させて機能／性能を縮退させることで、重要なタスクに関する信頼性や機能／性能を維持可能とし、限られた資源を最も重要な目的に振り分けることができるということである。つまり、冗長資源を使用して、処理性能向上と信頼性向上とを同時に実現する場合で、かつタスクに重要度の高いものと低いものとがある場合に大きな効果を発揮する。ただし、その際、コンピュータモジュール等の冗長資源が非常にたくさん存在しないと効果がない。又、ここでの分散処理とは、処理性能向上のための分散処理に限られる。
【００３１】
次に、本発明について述べる。
【００３２】
（１）３個の制御対象がある場合に、３重多数決による冗長管理を実施する上で必要なプロセッサエレメントの個数は３個で足りる。
【００３３】
（２）発明が解決しようとする課題（最も重大なもの）は、分散処理を目的として存在するプロセッサエレメント資源について、それらの資源を冗長処理に利用して故障検出／分離することができなかったということである。そのため、冗長処理によって信頼性を高める場合は、単純に個々の分散された資源を個別に冗長化する必要があったために、信頼性向上のために増加するハ−ドウエアが膨大であった。
【００３４】
（３）発明の最大の効果は、分散処理を目的として存在するプロセッサエレメント資源を、冗長処理にも同時に使用して故障検出／分離可能な実現することにより、最小の冗長資源数で分離処理と信頼性向上の同時実現を可能とするということである。なお、処理性能向上のための分離処理に適用するよりも、例えば、ロボットアームにおける間接間の協調制御のように、ミッション目的から物理的に分散する必要がある分離処理システムに適用する方がより高い威力を発揮する。
【００３５】
即ち、冗長資源のハードウェア量が約１／３で実現できるという点で、本発明の方が先行技術文献１記載のシステムよりも優れている。
【００３６】
なお、本発明と先行技術文献１記載のシステムとは、分散処理とフォールトトレランス処理を効率的に実現するというような広いカテゴリでは類似しているが、上記のように、発明が解決しようとする課題及び発明の効果という点では大きく異なる発明である。先行技術文献１記載のシステムは、非常にたくさんの冗長資源を使用して処理性能向上のための分散処理と信頼性向上のための冗長処理を行う場合に、故障発生状況に応じて効率的な縮退（重要度の低いタスクを先に停止して重要度の高いタスクへの影響を小さくする）を行うための手段を提供するものである。即ち、積極的に、重要でない機能を削減するものであるので、機能削減を許容するシステムでないと適用できない。
【００３７】
これに対して本発明は、もともと分散処理を目的として存在している冗長資源をフォールトトレラントのために有効活用して、最小の冗長資源数で、分散処理と信頼性向上を同時に実現するための手段を提供するものであるため、発明の内容が大きく異なっており、先行技術文献１記載のシステムと重複する発明ではない。
【００３８】
上記のように、本発明は分散処理を行うマルチプロセッサシステムにおいて、分散処理を目的として複数存在するプロセッサ資源を、フォールトトレラント処理のために有効活用して、必要最小限の冗長資源（従来技術の約１／３）で故障が発生した時の故障検出／分離を行い、しかも、分散処理対象となる装置の動作を中断することなく、故障発生前と同じ機能を継続して実行することが可能である。
【００３９】
以下、本発明の実施の形態について添付図面を参照しながら説明する。本発明は、分散処理を行うマルチプロセッサシステムにおいて、分散処理対象となる各装置からの入力データを各プロセッサ間の共有情報として管理し、そのデータを使用して異なるプロセッサ間で多数決処理等の冗長管理を行うことで、システム全体としてフォールトトレラント能力を持たせ、故障発生時の信頼性を高めるとことを特徴としている。
【００４０】
図１は本発明に係る分散処理システムの最良の実施の形態の構成図である。同図を参照すると、分散処理システムはプロセッサエレメントＡ；１ａと、このプロセッサエレメントＡ；１ａとプロセッサエレメントインタフェ−ス７ａを介して接続される入出力部Ａ；８ａと、この入出力部Ａ；８ａと伝送路Ａを介して接続される装置Ａ；１５ａと、プロセッサエレメントＢ；１ｂと、このプロセッサエレメントＢ；１ｂとプロセッサエレメントインタフェ−ス７ｂを介して接続される入出力部Ｂ；８ｂと、この入出力部Ｂ；８ｂと伝送路Ｂを介して接続される装置Ｂ；１５ｂと、プロセッサエレメントＣ；１ｃと、このプロセッサエレメントＣ；１ｃとプロセッサエレメントインタフェ−ス７ｃを介して接続される入出力部Ｃ；８ｃと、この入出力部Ｃ；８ｃと伝送路Ｃを介して接続される装置Ｃ；１５ｃとを含んでおり、入出力部Ａ；８ａ，Ｂ；８ｂ及びＣ；８ｃは夫々ネットワーク１６に接続されている。
【００４１】
さらに、プロセッサエレメントＡ；１ａはデータ共有部２ａと、冗長管理部３ａと、タスクＡ；４ａ〜Ｃ；６ａとを含んでおり、同様にプロセッサエレメントＢ；１ｂはデータ共有部２ｂと、冗長管理部３ｂと、タスクＡ；４ｂ〜Ｃ；６ｂとを含んでおり、プロセッサエレメントＣ；１ｃはデータ共有部２ｃと、冗長管理部３ｃと、タスクＡ；４ｃ〜Ｃ；６ｃとを含んでいる。
【００４２】
又、入出力部Ａ；８ａは故障分離部９ａと、故障判定部１０ａと、データ転送制御部１１ａと、ネットワーク制御部１２ａとを含んでおり、同様に入出力部Ｂ；８ｂは故障分離部９ｂと、故障判定部１０ｂと、データ転送制御部１１ｂと、ネットワーク制御部１２ｂとを含んでおり、入出力部Ｃ；８ｃは故障分離部９ｃと、故障判定部１０ｃと、データ転送制御部１１ｃと、ネットワーク制御部１２ｃとを含んでいる。
【００４３】
同図において、分散処理対象となる装置Ａ；１５ａ〜Ｃ；１５ｃからの入力デ−タＡ；１４ａ〜Ｃ；１４ｃは、ネットワーク１６を使用してデータ転送され、プロセッサエレメントＡ；１ａ〜Ｃ；１ｃの各プロセッサで共有データとして管理される。その共有データを使用して、装置Ａへのデータ出力を行うタスクＡ；４ａ〜４ｃ、装置Ｂへのデータ出力を行うタスクＢ；５ａ〜５ｃ、装置Ｃへのデータ出力を行うタスクＣ；６ａ〜６ｃが各プロセッサエレメントで実行される。
【００４４】
以上のタスクについてプロセッサエレメントＡ；１ａ〜Ｃ；１ｃの間で、冗長管理部３ａ〜３ｃ及び故障判定部１０ａ〜１０ｃを用いて多数決原理に基づく故障判定を行い、故障があった場合は、故障分離部９ａ〜９ｃにより故障したプロセッサエレメントを分離する。その際、故障分離したプロセッサエレメントに接続されている装置は、故障分離部９ａ〜９ｃの結果に従ったデータ転送制御部１１ａ〜１１ｃにより、他の正常なプロセッサエレメントとデータ転送可能な状態となり、それにより装置としての処理を中断することなく故障が発生する前と同じ機能を継続して実行する。
【００４５】
このようにして、本発明では、分散処理を行うマルチプロセッサシステムにおいて、上記部位により、分散処理を目的として複数存在するプロセッサ資源を、フォールトトレラント処理のために有効活用して、故障が発生した時の故障検出／分離を行い、しかも、分散処理対象となる装置の動作を中断することなく、故障発生前と同じ機能を継続して実行することができる。
【００４６】
【実施例】
以下、本発明の実施例について説明する。まず、第１実施例について説明する。第１実施例の説明にも図１を用いる。図１は、３つの独立した装置Ａ〜Ｃを対象に分散処理を行うシステムの一実施例を示している。同図において、装置Ａ；１５ａにはプロセッサエレメントＡ；１ａが接続されており、基本的に、装置Ａ；１５ａからの入力データＡ；１４ａは、伝送線路Ａ及び入出力部Ａ；８ａを介してプロセッサエレメントＡ；１ａにおいて、タスクＡ；４ａで処理され、入出力部Ａ；８ａ及び伝送線路Ａを介して出力データＡ；１３ａとして装置Ａ；１５ａに出力される。装置Ａ；１５ａとプロセッサエレメントＡ；１ａ間に接続された入出力部Ａ；８ａは上記のデータ転送を行う。
【００４７】
ここで、プロセッサエレメントＡ；１ａ〜Ｃ；１ｃとは、一般的な計算機の機能を持つものであり、組み込み型の計算機のように、データ入出力機能、演算機能、データ記憶機能等の計算機として最も基本的な機能のみでもかまわない。
【００４８】
又、装置Ｂ；１５ｂとプロセッサエレメントＢ；１ｂと入出力部Ｂ；１５ｂ、並びに装置Ｃ；１５ｃとプロセッサエレメントＣ；１ｃと入出力部Ｃ；１５ｃの構成も、図１に示すように、上記の装置Ａ；１５ａの場合と同様である。
【００４９】
さらに、これらは、入出力部Ａ；８ａ、入出力部Ｂ；８ｂ、入出力部Ｃ；８ｃでネットワーク１６に接続されており、相互のデータ転送が可能である。このネットワーク１６によるデータ転送は、ネットワーク制御部１２ａ〜１２ｃによって行われるものであり、これは一般的なネットワーク機能を持つものでかまわない。
【００５０】
以上までに説明した基本的な分散処理システム構成においては、分散処理を目的として複数のプロセッサを使用しているが、本発明では複数あるプロセッサ資源を有効活用するために、分散処理と同時に３重多数決を基本とした冗長処理も行えるようにする。
【００５１】
図１において、分散処理対象となる装置Ａ；１５ａ〜Ｃ；１５ｃからの入力デ−タＡ；１４ａ〜Ｃ；１４ｃは、ネットワーク１６を使用してデータ転送され、プロセッサエレメントＡ；１ａ〜Ｃ；１ｃの各プロセッサで共有データとして管理される。その共有データを使用して、装置Ａへのデータ出力を行うタスクＡ；４ａ〜４ｃ、装置Ｂへのデータ出力を行うタスクＢ；５ａ〜５ｃ、装置Ｃへのデータ出力を行うタスクＣ；６ａ〜６ｃが各プロセッサで実行される。以上のデータは、データ共有部２ａ〜２ｃにより各プロセッサエレメント内で管理される。
【００５２】
図２に、各データ共有部２ａ〜２ｃがデータ管理に用いる共有データ管理テーブルの一実施例を示す。この共有データ管理テーブルは、例えば、各データ共有部２ａ〜２ｃ内の図示しない格納部に設けられる。同図を参照すると、共有データ管理テーブルには装置Ａからの入力データに対するプロセッサエレメントＡの処理結果であるタスクＡの出力値、プロセッサエレメントＢの処理結果であるタスクＡの出力値及びプロセッサエレメントＣの処理結果であるタスクＡの出力値と、装置Ｂからの入力データに対するプロセッサエレメントＡの処理結果であるタスクＢの出力値、プロセッサエレメントＢの処理結果であるタスクＢの出力値及びプロセッサエレメントＣの処理結果であるタスクＢの出力値と、装置Ｃからの入力データに対するプロセッサエレメントＡの処理結果であるタスクＣの出力値、プロセッサエレメントＢの処理結果であるタスクＣの出力値及びプロセッサエレメントＣの処理結果であるタスクＣの出力値とが格納されている。
【００５３】
冗長管理部３ａ〜３ｃは、図２の共有データ管理テーブルを使用して、一般的な多数決原理に基づく冗長管理を実施する。例えば、プロセッサエレメントＡ；１ａの場合は、タスクＡの出力値について多数決を行い、正常であれば多数決で正常と判断された値を出力データＡ；１３ａとして、装置Ａに出力する。
【００５４】
又、プロセッサエレメントＢ；１ｂの場合は、タスクＢの出力値について多数決を行い、正常であれば多数決で正常と判断された値を出力データＢ；１３ｂとして、装置Ｂに出力する。又、プロセッサエレメントＣ；１ｃの場合は、タスクＣの出力値について多数決を行い、正常であれば多数決で正常と判断された値を出力データＣ；１３ｃとして、装置Ｃに出力する。
【００５５】
上記の多数決結果に不一致があった場合、冗長管理部３ａ〜３ｃは、一般的多数決原理に基づいて、自らの結果と異なる結果を出したプロセッサエレメントに対し、ネットワーク１６を使用して故障を通知する。例えば、図１において、プロセッサエレメントＢ；１ｂが故障した場合は、それが実行するタスクＡ；４ｂ、タスクＢ；５ｂ、タスクＣ；６ｂが異常となるため、図３に示すような故障通知が実行される。
【００５６】
図３はプロセッサエレメントＢ；１ｂが故障した場合の故障通知の例を示す説明図である。同図を参照すると、プロセッサエレメントＢ；１ｂに接続されている故障判定部１０ｂに対しては、故障通知ＡＢ１７（プロセッサエレメントＡからプロセッサエレメントＢに対する故障通知）と故障通知ＣＢ２０（プロセッサエレメントＣからプロセッサエレメントＢに対する故障通知）の２つの故障通知が通知されるため、故障判定部１０ｂは多数決原理に基づいて自らが故障であると判定できる。これに対して、他のプロセッサエレメントＡ，Ｃに接続されている故障判定部１０ａ，１０ｃには１つ（プロセッサエレメントＢから）しか故障通知が通知されないため自らを正常であると判定できる。
【００５７】
図４は故障判定部１０ａ〜１０ｃにおける故障判定の論理（ロジック）を示す図である。なお、ここでは、自らのプロセッサエレメントの識別標識ＩＤをＮとし、図１においてＮの右隣のプロセッサエレメントのＩＤをＮ＋１、Ｎ＋１の右隣のプロセッサエレメントのＩＤをＮ＋２とした。ただし、プロセッサエレメントＣ；１ｃの右隣はプロセッサエレメントＡ；１ａとした。
【００５８】
図４を参照すると、プロセッサエレメントＮが少なくともプロセッサエレメントＮ＋１，Ｎ＋２のいずれかから正常と通知された場合、プロセッサエレメントＮは自プロセッサエレメントが正常と判断することを示している。換言すれば、プロセッサエレメントＮはプロセッサエレメントＮ＋１，Ｎ＋２の両者から故障と通知された場合のみ自プロセッサエレメントが故障と判断するのである。
【００５９】
故障判定部１０ａ〜１０ｃは図４に示すロジックに従って、自らの故障判定結果を、故障分離部９ａ〜９ｃ及びデータ転送制御部１１ａ〜１１ｃに通知する。故障判定部１０ａ〜１０ｃの判定結果と、それに従った故障分離部９ａ〜９ｃ及びデータ転送制御部１１ａ〜１１ｃの動作をまとめると次のようになる。
【００６０】
まず、故障判定部が自らを正常と判断した場合について説明する。
【００６１】
（１）故障分離部は何もしない。
【００６２】
（２ａ）データ転送制御部において、装置からの入力データのバッファ、装置への出力データのバッファ、故障判定部の故障通知データが入力されるポートは、ネットワーク上で全て独立したアドレスとして認識できるようにする。
【００６３】
（２ｂ）全てのプロセッサエレメントが、全ての装置からの入力データをネットワーク経由で読み取れるようにする。
【００６４】
（２ｃ）全てのプロセッサエレメントが、故障判定部の故障通知データが入力されるポートへ故障通知データを書き込めるようにする。
【００６５】
（２ｄ）装置への出力データのバッファに対するデータの転送は、自らのプロセッサエレメントからのみ可能とする。
【００６６】
次に、故障判定部が自らを故障と判断した場合について説明する。
【００６７】
（１）自らのプロセッサエレメントから送られてくるデータを遮断し、自らのプロセッサエレメントを入出力部から機能的に分離する。そして、自らのプロセッサエレメントにリセットをかける。
【００６８】
（２ｂ）〜（２ｃ）は上述した故障判定部が自らを正常と判断した場合と同様である。
【００６９】
（２ｄ）装置への出力データのバッファに対するデータの転送は、他のプロセッサエレメントからデータバスを経由して転送できるようにする。この時、自らのプロセッサエレメントから転送することはできない。
【００７０】
即ち、いずれかのプロセッサエレメントに故障があった場合は、故障分離部９ａ〜９ｃにより故障したプロセッサエレメントを分離する。その際、故障分離したプロセッサエレメントに接続されている装置は、故障分離部９ａ〜９ｃの結果に従ったデータ転送制御部１１ａ〜１１ｃにより、他の正常なプロセッサエレメントとデータ転送可能な状態となる。
【００７１】
上記のような状態の中で、図１における冗長管理部３ａ〜３ｃは、今まで述べた方法により正常と判断されたプロセッサエレメントから、故障分離されたプロセッサエレメントに接続されている装置に、その装置用の出力データを転送して、その装置の正常な動作継続を可能とする。
【００７２】
具体的な例を示すと、図３に示されるようにプロセッサエレメントＢ；１ｂが故障と判断された場合は、図１におけるプロセッサエレメントＢ；１ｂは入出力部Ｂ；８ｂから分離され、装置Ｂ；１５ｂに対する出力データＢ；１３ｂは、プロセッサエレメントＡ；１ａのタスクＢ；５ａの結果か、もしくは、プロセッサエレメントＣ；１ｃのタスクＢ；５ｃの結果がネットワーク１６を経由して転送される。
【００７３】
なお、ここで、プロセッサエレメントＡ；１ａのデータを使用するか、プロセッサエレメントＣ；１ｃのデータを使用するかは重要な問題ではなく、どちらでもかまわない。例えば、故障分離されたプロセッサエレメントの右隣のプロセッサエレメントのデータを使用するなどといったロジックを決めれば良いことであり、一般的に良く知られた方法で容易に実現できる。
【００７４】
以上までに示したように、プロセッサエレメントＡ；１ａ〜Ｃ；１ｃのいずれかに故障が発生しても、装置としての処理を中断することなく故障が発生する前と同じ機能を継続して実行することができる。
【００７５】
なお、入出力部Ａ；８ａ〜Ｃ；８ｃの中の故障判定部１０ａ〜１０ｃ、故障故障分離部９ａ〜９ｃ、データ転送制御部１１ａ〜１１ｃは、図４のロジック及び上述の故障判定部が自らを正常／故障と判断した場合の動作を満たすものであれば、ソフトウェアで実現してもハードウェアで実現してもかまわない。どちらも一般的に良く知られている手法で容易に実現可能である。
【００７６】
次に、フローチャートを用いて、図１に示す本実施例の動作について説明する。図１において、プロセッサエレメントＡ；１ａ〜Ｃ；１ｃが装置Ａ；１５ａ〜Ｃ；１５ｃから入力データＡ；１４ａ〜Ｃ；１４ｃを入力し、冗長管理部３ａ〜３ｃにより故障判定部１０ａ〜１０ｃへ故障通知を通知するところまでの動作のフローチャートを図５に示す。
【００７７】
図５においては、説明上の汎用性を持たせるために、Ｎという位置のプロセッサエレメントのソフトウェア動作として示した。ここで、Ｎ＋１はＮの右隣の位置を示し、Ｎ＋２はＮ＋１の右隣の位置を示すものとする。なお、図１においてプロセッサエレメントＣ；１ｃの右隣はプロセッサエレメントＡ；１ａとする。例えば、ＮをＡとした場合は、Ｎ＋１はＢ、Ｎ＋２はＣとなる。
【００７８】
図５において、Ｎの位置のプロセッサエレメントは、Ｎ、Ｎ＋１、Ｎ＋２の装置の入力データを入力し、それらのデータを使用してＮ、Ｎ＋１、Ｎ＋２の装置への出力データを算出する（ステップＳ１０１，Ｓ１０２，Ｓ１０３）。
【００７９】
なお、上記を図１の構成との対比を例を挙げて示すと、Ｎを図１におけるＡとした場合、これはプロセッサエレメントＡ；１ａのソフトウェア動作となり、Ｎの装置の入力データは入力データＡ；１４ａとなり、Ｎ＋１の装置の入力データは入力データＢ；１４ｂとなり、Ｎ＋２の装置の入力データは入力データＣ；１４ｃとなる。これらを使用して、タスクＡ；４ａで装置Ａ；１５ａへの出力データを算出し、タスクＢ；５ａで装置Ｂ；１５ｂへの出力データを算出し、タスクＣ；６ａで装置Ｃ；１５ｃへの出力データを算出することに対応する。
【００８０】
次に、図５において、Ｎの位置のプロセッサエレメントで算出した結果をＮ＋１とＮ＋２の位置のプロセッサエレメントに送ると同時に、Ｎ＋１とＮ＋２の位置のプロセッサエレメントから、算出結果を受け取る（ステップＳ１０４）。なお、これらの動作は、図１におけるデータ共有部２ａ〜２ｃによって実現するものである。
【００８１】
次に、図１における冗長管理部３ａ〜３ｃにより、多数決原理に基づく冗長管理を実施する。図５において、Ｎ、Ｎ＋１、Ｎ＋２の算出結果で多数決を実施し、各算出結果に対する故障の判定を実施する（ステップＳ１０５，Ｓ１０６、Ｓ１０９）。その結果で、Ｎの算出結果が正常と判断した場合は正常処理を継続する（ステップＳ１０７）。又、Ｎ＋１が故障と判断した場合はＮ＋１へ故障通知を通知し（ステップＳ１１０）、Ｎ＋２が故障と判断した場合はＮ＋２に故障通知を通知する（ステップＳ１０８）。又、Ｎが自らを故障と判断した場合は動作を停止する（ステップＳ１１１）。
【００８２】
なお、実際のシステムでは、以上の動作において、分散処理のためのデータ交換、同期処理等が必要となるが、本発明の範囲とは関係がないので、それらに関する説明は省略する。又、故障が複数発生した場合の対処は説明上複雑になるので、本実施例においては、説明を簡単にするため故障が１つ発生した場合とした。
【００８３】
次に、図１における入出力部Ａ；８ａ〜Ｃ；８ｃの動作について、フローチャートを用いて説明する。図６は、故障判定部１０ａ〜１０ｃが、上記に示した故障通知を受け取ってからの、故障分離部９ａ〜９ｃ及びデータ転送制御部１１ａ〜１１ｃの動作を示したフローチャートである。なお、ここでのＮ、Ｎ＋１、Ｎ＋２の定義は、図５において定義した内容と同じである。
【００８４】
図６において、Ｎは、Ｎ＋１とＮ＋２からの故障通知について、多数決原理に基づく故障判定を行う（ステップＳ２０１，Ｓ２０２）。これは、図１における故障判定部１０ａ〜１０ｃで実施するものである。即ち、Ｎ＋１から故障通知を受け取り（ステップＳ２０１でＹｅｓの場合）、Ｎ＋２からも故障通知を受け取った場合（ステップＳ２０２でＹｅｓの場合）、Ｎは故障と判断し（ステップＳ２０３）、Ｎのプロセッサエレメントを故障分離し（ステップＳ２０４）、Ｎ＋１、Ｎ＋２に対して故障分離結果を通知する（ステップＳ２０５）。さらに、Ｎのプロセッサエレメントが故障分離された状態で、Ｎに接続されている装置の動作を継続させるために、Ｎに接続されている装置に対する出力をＮ＋１又はＮ＋２から出力することをデータ転送上可能にする（ステップＳ２０６）。これらの動作は、図１における、故障分離部９ａ〜９ｃ及びデータ転送制御部１１ａ〜１１ｃで実施するものである。又、図６において、Ｎが正常と判断された場合（ステップＳ２０１及びＳ２０２のいずれかでＮｏの場合）は、そのままの状態で処理を継続する（ステップＳ２０７）。
【００８５】
次に、上記に示したように、図１における入出力部Ａ；１ａ〜Ｃ；１ｃにより故障分離等が実施された後の冗長管理部３ａ〜３ｃの動作について、同様に、図７のフローチャートを用いて説明する。
【００８６】
図７は、図６で示した動作結果を受けて、図１におけるプロセッサエレメントＡ；１ａ〜Ｃ；３ｃのソフトウェア動作として実現する冗長管理部３ａ〜３ｃの動作を示したものである。なお、ここでのＮ、Ｎ＋１、Ｎ＋２の定義も、図５において定義した内容と同じである。
【００８７】
図７において、Ｎ＋１から故障分離結果を受け取った場合（ステップＳ３０１にてＹｅｓの場合）は、Ｎ＋１はプロセッサエレメントが故障分離されていると認識し（ステップＳ３０２）、Ｎ＋１に接続されている装置に対して、Ｎ＋１に接続されている装置のための出力データを送信して（ステップＳ３０３）、その他の処理を継続する（ステップＳ３０４）。
【００８８】
又、Ｎ＋２から故障分離結果を受け取った場合（ステップＳ３０１にてＮｏ，ステップＳ３０５にてＹｅｓの場合）も、Ｎ＋２に対して同様な動作を行う（ステップＳ３０６，Ｓ３０７，Ｓ３０８）。
【００８９】
さらに、Ｎ＋１からもＮ＋２からも故障分離結果を受け取っていない場合（ステップＳ３０１にてＮｏ，ステップＳ３０５にてＮｏの場合）は、状態を何も変更せずに、そのまま処理を継続する（ステップＳ３０９）。
【００９０】
以上の動作に関して、その動作例として、プロセッサエレメントＢ；１ｂが故障分離された場合の、装置へのデータ出力動作の例を図８に示す。図８において、プロセッサエレメントＢ；１ｂは故障分離されて動作停止状態となっているが、その代わりに、プロセッサエレメントＡ；１ａ上で動作するタスクＢ；５ａの出力値から、装置Ｂ；１５ｂに出力データＢ；２２を転送する。この際、装置Ａ；１５ａに対しては、故障発生前の動作と同じで、プロセッサエレメントＡ；１ａ上で動作するタスクＡ；４ａの出力値から、出力データＡ；２１を転送する。又、装置Ｃ；１５ｃに対しても、故障発生前の動作と同じで、プロセッサエレメントＣ；１ｃ上で動作するタスクＣ；６ｃの出力値から、出力データＣ；２３を転送する。
【００９１】
以上のように、本実施例によれば、分散処理システム中の１つのプロセッサエレメントが故障しても、その故障を検出／分離し、なおかつ、プロセッサエレメントに接続されている装置としての処理を中断することなく、故障が発生する前と同じ機能を継続することができる。
【００９２】
なお、本実施例では、図１におけるプロセッサエレメントＡ；１ａ〜Ｃ；１ｃに故障が発生した場合についてフォールトトレラント能力を持つ場合の実施例であるが、入出力部Ａ；８ａ〜Ｃ；８ｃに故障が発生する場合に対する対処も別途必要となる場合もある。ただし、一般的にプロセッサエレメント等の基本的な計算機機能の部分とインタフェース部分とを比べると、プロセッサエレメントの方が回路規模や動作の複雑さが桁違いに大きいため、プロセッサエレメント部分の故障対策の方が重要であり、冗長化した場合の影響も桁違いに大きい。又、インタフェース部分の故障対策としては、冗長化、使用部品の高信頼化等の従来から良く用いられている手段で容易に実現できるため、本発明では、説明を簡単にするために、プロセッサエレメント部分に故障が発生する場合に条件を絞って実施例を説明した。
【００９３】
なお、本発明は上記の実施例に限定されるものではなく、例えば、図１の実施例において、自らのプロセッサエレメントの故障診断ができる手段をもっていれば、１つのプロセッサエレメント内でタスクを冗長に実行して多数決を実施する必要はない。その場合、１つのプロセッサエレメントに故障が発生した時に自己故障診断で故障したプロセッサエレメントと故障分離すれば、その後の動作を図１の実施例と同じ動作にすることで、装置Ａ；１５ａ〜Ｃ；１５ｃの動作を中断することなく、正常な処理を継続することができる。プロセッサエレメントに故障が発生してもシステム全体として機能を維持できるという効果は同じである。なお、これは第３実施例として後述する。
【００９４】
又、図１の実施例の場合は、いずれかのプロセッサエレメントに故障が１回発生する場合を想定したフォールトトレラント方法の例であるが、宇宙空間等の特殊な環境で使用した場合に、環境条件の特殊性から、一時的な（トランジェントな）故障が何度も発生して、立ち上げ直すとその都度正常に戻るような場合も多く見受けられる。そのような環境で使用するシステムに適用する場合は、図１の実施例で故障分離したプロセッサエレメントにリセットをかけて再立ち上げを実施し、イニシャルセルフチェック結果が正常であった場合はシステムに復帰させる方法を加えると有効である。その場合は、一時的な（トランジェントな）故障が何度も発生しても、ノンストップで正常処理継続が可能なフォールトトレラントシステムを実現できる。
【００９５】
なお、上記のような、自己故障診断のための方法や、一時的な（トランジェントな）故障に対応した再立ち上げしてシステムに復帰させる方法は、従来から良く知られている方法を適用することで容易に実現できるため、ここでは説明を省略する。
【００９６】
次に、第２実施例について説明する。図１０は第２実施例の構成を示す模式図、図１１はＣＰＵ（例えば、プロセッサエレメントＡ）と装置（例えば、装置Ａ）との関係を示す模式図である。第２実施例は第１実施例における分散処理システムをロボットアームに適用したものである。
【００９７】
図１０にはロボットアームの構成の一例が示されている。図１０を参照すると、ロボットアームは取手部３１と、アーム３２〜３５と、アクチュエ−タ４１〜４５とを含んでおり、アクチュエ−タ４１は取手部３１の動作を制御し、アクチュエ−タ４２〜４４はアーム３２〜３５の動作を制御する。又、アクチュエ−タ４５はアーム３２〜３５の原点となるアクチュエ−タである。即ち、これらのアクチュエ−タ４１〜４５はロボットアームの関節に相当するものである。
【００９８】
ロボットアームの関節（この段落では便宜上アクチュエーク４１〜４５をそれぞれ関節４１〜４５という）は、隣接する関節と強調動作を行う。例えば、取手部３１を所定位置まで移動させるためには、アーム３２だけでなく、アーム３３〜３５の各々も、動かさなくてはならない。そのためには、各関節４１〜４５は協調して動作する必要があるのである。従ってこの関節４１〜４５の制御に本発明に係る分散処理を適用することができる。
【００９９】
図１１を参照すると、各々のアクチュエ−タ４１〜４５はセンサ６１と、モータ６２と、センサ６１からの出力及び協調動作上必要な他のＣＰＵの処理結果（ネットワーク経由で受け取るもの）に基づきモータ６２を制御するＣＰＵ（ｃｅｎｔｒａｌ  ｐｒｏｃｅｓｓｉｎｇ  ｕｎｉｔ）５２と、ネットワークと接続されたインタフェ−ス５３とを含んでおり、このモータ６２の動きで取手部３１及びアーム３２〜３５の動作が制御される。又、センサ６１及びモ−タ６２は装置５１に含まれる。
【０１００】
そして、ＣＰＵ５２が図１のプロセッサエレメントＡ〜Ｃ及び入出力部Ａ〜Ｃに、インタフェ−ス５３が図１のネットワーク制御部１２ａ〜１２ｃに、装置５１が図１の装置Ａ〜Ｃに夫々相当する。
【０１０１】
いま、アクチュエ−タ４１〜４５のうちアクチュエ−タ４２〜４４に本発明に係る分散処理システムを適用するものとする。即ち、アクチュエ−タ４２が図１のプロセッサエレメントＡ，入出力部Ａ及び装置Ａで構成され、アクチュエ−タ４３が図１のプロセッサエレメントＢ，入出力部Ｂ及び装置Ｂで構成され、アクチュエ−タ４４が図１のプロセッサエレメントＣ，入出力部Ｃ及び装置Ｃで構成されるものとする。
【０１０２】
即ち、センサ６１からＣＰＵ５２（正確には図１の入出力部Ａ〜Ｃ）に入力される入力データ７１が図１の入力データＡ〜Ｃであり、ＣＰＵ５２（正確には図１の入出力部Ａ〜Ｃ）からモータ６２に出力される出力データ７２が図１の出力データＡ〜Ｃである。そして、ＣＰＵ５２は入力データ７１を演算し、演算結果である出力データ７２を出力する。
【０１０３】
従って、各アクチュエ−タ４２〜４４では分散処理とともに多数決による冗長処理が行われることになる。いま、アクチュエ−タ４３（図１のプロセッサエレメントＢ相当）が故障と判断されたとすると、アクチュエ−タ４３は故障分離され、アクチュエ−タ４３の装置５１Ｂのモ−タ６２に対する出力データ７２はアクチュエ−タ４１（図１のプロセッサエレメントＡ相当）又はアクチュエ−タ４３（図１のプロセッサエレメントＣ相当）のＣＰＵ５２から出力されることになる。
【０１０４】
次に、第３実施例について説明する。図１２は第３実施例の構成を示す模式図、図１３はプロセッサエレメント故障時のデータ転送制御を示す模式図である。第３実施例も第２実施例と同様に分散処理システムをロボットアームに適用した一例であるが、第２実施例と異なる点は各アクチュエ−タは冗長処理を行わない点である。
【０１０５】
即ち、アクチュエ−タ４２は自己の装置５１Ａからの入力データ７１のみを入力し、演算結果の出力データ７２を自己の装置５１Ａのみに出力する。同様に、アクチュエ−タ４３は自己の装置５１Ｂからの入力データ７１のみを入力し、演算結果の出力データ７２を自己の装置５１Ｂのみに出力し、アクチュエ−タ４４は自己の装置５１Ｃからの入力データ７１のみを入力し、演算結果の出力データ７２を自己の装置５１Ｃのみに出力する。
【０１０６】
さらに、各アクチュエ−タ４２〜４４は自アクチュエ−タが故障したことを他のアクチュエ−タからの故障通知から判断するのではなく、自アクチュエ−タ内に自アクチュエ−タが故障したことを検出する故障検出部を含んでいる。
【０１０７】
図１２を参照すると、アクチュエ−タ４１にはカメラ４６が接続されており、アクチュエ−タ４１はこのカメラ４６からの画像情報に基づき内部のモ−タ６２を制御するよう構成されている。
【０１０８】
一方、このアクチュエ−タ４１はアクチュエ−タ４２〜４４のいずれかが故障した場合、その代行処理を行う機能も備えている。例えば、アクチュエ−タ４３が故障した場合、そのアクチュエ−タ４３内のＣＰＵ５２は故障分離され、代わりにアクチュエ−タ４１内のＣＰＵ５２がアクチュエ−タ４３で行うべき処理を代行し、アクチュエ−タ４３のモータ６２に出力データを出力する。その際、アクチュエ−タ４１はネットワーク１６を介して装置５１Ｂから得た入力データ７１に基づき出力すべきデータを演算するものとする。なお、原点のアクチュエ−タ４５にこの代行処理を行わせてもよい。
【０１０９】
図１３はこの第３実施例の動作を示しており、第１及び第２実施例ではプロセッサエレメントＢが故障した場合、プロセッサエレメントＡから装置Ｂに出力データＢを出力していたが、第３実施例ではアクチュエ−タ４１（プロセッサエレメントＤ）から装置Ｂに出力データＢを出力する。
【０１１０】
図６のフローチャートで説明すると、プロセッサエレメントＢが故障と判断された以降の動作は、同図のステップＳ２０３〜Ｓ２０５と同様となる。
【０１１１】
【発明の効果】
本発明による第１の発明によれば、複数のプロセッサと、各々の前記プロセッサに対応して設けられる複数の装置と、前記プロセッサ及び装置間のデータ入出力を制御する入出力手段とが含まれ、前記複数の装置からのデータ入力及び前記複数の装置へのデータ出力を前記複数のプロセッサが分散して行う分散処理システムであって、そのシステムは前記分散処理を目的とする前記複数のプロセッサ及び前記複数の入出力手段に故障許容処理を併せて行わせる故障許容処理手段を含むため、コンピュータモジュール等のハ−ドウエア量の低減が可能となる。
【０１１２】
又、本発明による第２及び第３の発明も上記第１の発明と同様の効果を奏する。
【０１１３】
具体的に説明すると、本発明によれば、分散処理を行うマルチプロセッサシステムにおいて、分散処理を目的として複数存在するプロセッサ資源をフォールトトレラント処理のために有効活用して、故障が発生した時の故障検出／分離を行い、しかも、分散処理対象となる装置の動作を中断することなく、故障発生前と同じ機能を継続して実行することができる。
【０１１４】
これは、プロセッサ等の個々の構成要素にはフォールトトレラント能力が無いにもかかわらず、分散処理システムというシステム構成上の特徴を本来の目的と別次元の用途で使用する機能を加えることで、システム全体としてフォールトトレラント能力を持たせているものである。つまり、フォールトトレラントを目的としてハードウェアを冗長化するという手段を取らずにフォールトトレラント能力を実現しているため、従来のフォールトトレラントシステムが持っているハードウェア量の大幅な（通常は３重多数決を行うため、ハードウェア量が３倍以上となる）増加という弱点を解決している。
【０１１５】
なお、本発明を実際に実現する際には、本発明を実現するための手段がデメリットとならないように適用検討をすることも必要である。つまり、本発明を実現するためには、ソフトウェア冗長動作とプロセッサ間の共有データの交換を積極的に行うため、プロセッサの処理速度とネットワーク転送速度が速いことが望ましい。しかし、近年のコンピュータ関連技術の技術動向を見ると、プロセッサの処理速度とネットワークの転送速度は飛躍的に向上しているので、多くの場合、本発明を実現するための手段はデメリットにならないと考えられる。
【０１１６】
また、本発明は、システム構成上の理由で分散処理システムとなっているシステムへ適用する場合に最も大きな効果を発揮する。例えば、ロボットアームの関節の制御を独立したプロセッサで実施するような組み込み型の分散処理システムの場合は、もともと関節の数だけプロセッサがあるので、それが３つ以上あれば、本発明を適用して、インタフェース部分の僅かなハードウェアの追加で、高信頼システムが構築できる。特にこのような組み込みシステムの場合、ハードウェア量を小さく抑えることと高信頼性を確保することが同時に要求されるので、本発明の適用効果は極めて大きいと考えられる。
【図面の簡単な説明】
【図１】本発明に係る分散処理システムの最良の実施の形態の構成図である。
【図２】共有データ管理テーブルを示す図である。
【図３】プロセッサエレメントＢ；１ｂが故障した場合の故障通知の一例を示す図である。
【図４】故障判定部における故障判定のロジックを示す図である。
【図５】故障通知するまでの動作を示すフローチャートである。
【図６】故障通知を受け取ってからの動作を示すフローチャートである。
【図７】図６で示した動作結果を受けて実行される動作を示すフローチャートである。
【図８】プロセッサエレメントＢ；１ｂが故障分離された場合の、装置へのデータ出力の動作を示すフローチャートである。
【図９】本発明の概要を示すシステム構成図である。
【図１０】第２実施例の構成を示す模式図である。
【図１１】ＣＰＵと装置との関係を示す模式図である。
【図１２】第３実施例の構成を示す模式図である。
【図１３】プロセッサエレメント故障時のデータ転送制御を示す模式図である。
【図１４】従来の分散処理システムの一例の構成図である。
【図１５】先行技術文献１記載のシステムの構成図である。
【符号の説明】
１ａ〜１ｃ  プロセッサエレメント
２ａ〜２ｃ  データ共有部
３ａ〜３ｃ  冗長管理部
４ａ，５ａ，６ａ  タスク
７ａ  プロセッサエレメントインタフェ−ス
８ａ〜８ｃ  入出力部
９ａ〜９ｃ  故障分離部
１０ａ〜１０ｃ  故障判定部
１１ａ〜１１ｃ  データ転送制御部
１２ａ〜１２ｃ  ネットワーク制御部
１５ａ〜１５ｃ  装置
３１  取手部
３２〜３５  アーム
４１〜４５  アクチュエ−タ
５１  装置
５２  ＣＰＵ
５３  インタフェ−ス
６１  センサ
６２  モータ
【図１】
0003879436.tif 000002
【図２】
0003879436.tif 000003
【図３】
0003879436.tif 000004
【図４】
0003879436.tif 000005
【図５】
0003879436.tif 000006
【図６】
0003879436.tif 000007
【図７】
0003879436.tif 000008
【図８】
0003879436.tif 000009
【図９】
0003879436.tif 000010
【図１０】
0003879436.tif 000011
【図１１】
0003879436.tif 000012
【図１２】
0003879436.tif 000013
【図１３】
0003879436.tif 000014
【図１４】
0003879436.tif 000015
【図１５】
0003879436.tif 000016