(57)【要約】複数の計算機ノードを有する計算機システムであって、各計算機ノードは、処理要求を受信する外部通信部と、当該処理要求に従って処理を実行するアプリケーション部と、各計算機ノードで実行される処理を他の計算機ノードとの間で同期させる同期部と、他の計算機ノードとの間で情報の送受信を実行するノード間通信部とを有する。同期部は、外部通信部が受信した処理要求をノード間通信部を介して他の計算機ノードに送信する。また、同期部は、ノード間通信部を介して他の計算機ノードからも処理要求を受信する。そして同期部は、同じ処理要求を外部通信部を経由して受信した計算機ノードの数に基づいて、アプリケーション部に実行させる処理要求を選択し、アプリケーション部は選択された処理要求を実行する。
2012056487.tif 000002
【特許請求の範囲】
【請求項１】
複数の計算機ノードを有する計算機システムであって、
各計算機ノードは、処理要求を受信する外部通信部と、当該処理要求に従って処理を実行するアプリケーション部と、各計算機ノードのアプリケーション部で実行される処理の他の計算機ノードとの間での同期を制御する同期部と、他の計算機ノードとの間で情報の送受信を実行するノード間通信部とを有し、  
前記各計算機ノードの前記同期部は、前記外部通信部が受信した処理要求識別情報が付与された処理要求に、当該計算機ノードの識別情報を送信元計算機ノード識別情報として付与して前記ノード間通信部を介して他の計算機ノードに送信し、
前記各計算機ノードの前記同期部は、前記ノード間通信部を介して他の計算機ノードから当該他の計算機ノードの識別情報が付与された処理要求を受信し、
前記各計算機ノードの前記同期部は、同じ処理要求識別情報が付与された処理要求を外部通信部を経由して受信した計算機ノードの数に基づく第一の所定の判断基準に従って、前記ノード間通信部が他の計算機ノードから受信した処理要求と前記外部通信部が受信した処理要求の中から、前記アプリケーション部に実行させる処理要求を選択し、
前記アプリケーション部は選択された前記処理要求を実行することを特徴とする計算機システム。
【請求項２】
請求項１記載の計算機システムであって、
前記第一の所定の判断基準とは、前記複数の計算機ノードの過半数が同じ処理要求識別情報が付与された処理要求を外部通信部を経由して受信しているか否かであることを特徴とする計算機システム。
【請求項３】
請求項１記載の計算機システムであって、
前記各計算機ノードの前記同期部は、前記アプリケーション部が選択された前記処理要求を実行した実行結果を、前記ノード間通信部を介して他の計算機ノードに送信し、
前記各計算機ノードの前記同期部は、前記ノード間通信部を介して他の計算機ノードから実行結果を受信し、
前記各計算機ノードの前記同期部は、同じ実行結果を取得した計算機ノードの数に基く第二の所定の判断基準に従って、前記ノード間通信部が他の計算機ノードから受信した実行結果と前記アプリケーション部の実行結果の中から、出力結果を選択し、
前記各計算機ノードの前記同期部は、選択された前記出力結果を前記アプリケーション部から実行結果として受け取っていた場合に、選択された前記出力結果をアプリケーション部の実行結果として送信した他の計算機および自計算機ノードの中から、予め定められた基準に従ってリーダ計算機ノード候補を選出して、当該リーダ計算機ノード候補の識別情報を、前記ノード間通信部を介して他の計算機ノードに送信し、
前記各計算機ノードの前記同期部は、前記ノード間通信部を介して、他の計算機ノードから当該他の計算機ノードが選出したリーダ計算機ノード候補の識別情報を受信し、
同じ識別情報で識別される計算機ノードをリーダ計算機ノード候補として選出した計算機ノードの数に応じて、自計算機ノードが選出した前記リーダ計算機ノード候補をリーダ計算機ノードとするか否かを判断し、
自計算機ノードが選出した前記リーダ計算機ノード候補をリーダ計算機ノードとした場合であって、自計算機ノードが前記リーダ計算機ノードに選出された場合には、選択された前記出力結果を出力することを特徴とする計算機システム。
【請求項４】
請求項３記載の計算機システムであって、
前記第二の所定の判断基準とは、前記複数の計算機ノードの過半数が、同じ実行結果をアプリケーション処理部から受け取っているか否かであることを特徴とする計算機システム。
【請求項５】
請求項３記載の計算機システムであって、
前記各計算機ノードの前記同期部は、前記自計算機ノードが選出した前記リーダ計算機ノード候補をリーダ計算機ノードとした場合であって、前記自計算機ノードが前記リーダ計算機ノードに選出されなかった場合に、前記リーダ計算機ノードに選出された他の計算機ノードが出力する出力結果を監視し、
前記リーダ計算機ノードに選出された他の計算機が出力した出力結果が、前記自計算機ノードが選択した出力結果とは異なる場合に、前記自計算機ノードが選出した出力結果と同じ出力結果を選択した他の計算機ノードおよび自計算機ノードの中から別のリーダ計算機ノードを選出することを特徴とする計算機システム。
【請求項６】
請求項３記載の計算機システムであって、
前記各計算機ノードの前記同期部は、当該同期部が実行する処理の進捗状況を示す処理状態情報を有しており、
前記各計算機ノードの前記同期部は、前記外部通信部が受信した処理要求に更に前記処理状態情報を付与して前記ノード間通信部を介して前記他の計算機ノードに送信し、
前記各計算機ノードの前記同期部は、前記ノード間通信部を介して他の計算機から当該他の計算機の処理状態情報が付与された処理要求を受信し、
前記各計算機ノードの前記同期部は、前記自計算機ノードの処理状態情報と前記他の計算機から受信した処理状態情報とを比較し、前記自計算機ノードの同期部による処理の進捗の遅れが所定の基準以上である場合に、前記アプリケーション部に実行させる処理要求を選択するための処理を実行せずに、前記他の計算機ノードとの間で同期をとるよう再同期要求を当該他の計算機ノードに送信することを特徴とする計算機システム。
【請求項７】
請求項６記載の計算機システムであって、
前記各計算機ノードの前記同期部は、前記自計算機ノードと同期をとっている計算機ノードの数を管理しており、
前記各計算機ノードの前記同期部は、他の計算機ノードから再同期要求を受信した場合に、前記処理状態情報を当該他の計算機ノードに送信し、当該他の計算機ノードからの応答を受信すると、前記計算機ノードの数を更新することを特徴とする計算機システム。
【請求項８】
請求項６記載の計算機システムであって、
前記各計算機ノードの前記同期部は、前記自計算機ノードの処理状態情報と前記他の計算機から受信した処理状態情報とを比較し、前記自計算機ノードの同期部による処理の遅れが所定の基準以内である場合には、前記アプリケーション部に実行させる処理要求を選択するための処理を実行することを特徴とするシステム。
【請求項９】
請求項項３記載の計算機システムであって、
前記各計算機ノードの前記同期部は、当該同期部が実行する処理の進捗状況を示す処理状態情報を有しており、
前記各計算機ノードの前記同期部は、前記アプリケーション部の実行結果に更に前記処理状態情報を付与して前記ノード間通信部を介して前記他の計算機ノードに送信し、
前記各計算機ノードの前記同期部は、前記ノード間通信部を介して他の計算機から当該他の計算機の処理状態情報が付与された実行結果を受信し、
前記各計算機ノードの前記同期部は、前記自計算機ノードの処理状態情報と前記他の計算機から受信した処理状態情報とを比較し、前記自計算機ノードの同期部による処理の進捗の遅れが所定の基準以上である場合に、前記出力結果を選択するための処理を実行することなく、前記他の計算機ノードとの間で同期をとるよう再同期要求を当該他の計算機ノードに送信することを特徴とする計算機システム。
【請求項１０】
請求項９記載の計算機システムであって、
前記各計算機ノードの前記同期部は、前記自計算機ノードと同期をとっている計算機ノードの数を管理しており、
前記各計算機ノードの前記同期部は、他の計算機ノードから再同期要求を受信した場合に、前記処理状態情報を当該他の計算機ノードに送信し、当該他の計算機ノードからの応答を受信すると、前記計算機ノードの数を更新することを特徴とする計算機システム。
【請求項１１】
請求項９記載の計算機システムであって、
前記各計算機ノードの前記同期部は、前記自計算機ノードの処理状態情報と前記他の計算機から受信した処理状態情報とを比較し、前記自計算機ノードの同期部による処理の遅れが所定の基準以内である場合には、前記出力結果を選択するための処理を実行することを特徴とするシステム。
【請求項１２】
請求項３記載の計算機システムであって、
前記各計算機ノードの前記同期部は、前記自計算機ノードと同期をとっている計算機ノードの数を管理しており、
前記各計算機ノードの前記同期部は、他の計算機ノードから前記自計算機ノードと同期をとるための同期要求を受信した場合に、当該同期部の処理の進捗状況を示す処理状態情報を当該他の計算機ノードに送信し、当該他の計算機ノードからの応答を受信すると、前記計算機ノードの数を更新することを特徴とする計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
複数の計算機がネットワークで接続された多重システムにおいて計算機間で同期をとる技術に関する。
【背景技術】
【０００２】
ネットワークで接続されている複数の計算機が各々同じ業務アプリケーションを実行することで、高信頼及び高可用なシステムを構築する技術がある。特に、障害時の業務の連続性を保証するために、多数の計算機を同期させて運用するフォールトトレランスコンピュータ（以下、ＦＴＣと呼ぶ。）技術が幅広く使用されている。FTCには、CPUのバスクロックレベルでLOCKSTEPを実現する同期方式が幅広く使用されているが（特許文献１参照）、近年CPUの構成の複雑化につれ、ソフトウェアレベルでの同期方式が注目されている（特許文献２参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開2006-209565
【特許文献２】特開2009-217503
【発明の概要】
【発明が解決しようとする課題】
【０００４】
従来のソフトウェアレベルでの同期方式では、同期ポイントをアプリケーション内部に設けて同期を取っているため、同期処理にオーバヘッドが発生するという課題がある。また、フォルトトラレンスコンピュータの出力処理においては、ＦＴＣを構成する複数の計算機各々からの出力を用いて多数決を行うことでＦＴＣからの出力値を決定するボーターという装置が別途必要である。高信頼及び高可用性を保つためには、ボーター装置も多重化しなければならない。【０００５】
そこで、ボータ装置の様な装置を別途用いることなく複数計算機間でソフトウェアレベルでの同期を実現する技術を提供する。また、低オーバヘッドな同期方法も提供する。
【課題を解決するための手段】
【０００６】
複数の計算機ノードを有する計算機システムであって、各計算機ノードは、処理要求を受信する外部通信部と、当該処理要求に従って処理を実行するアプリケーション部と、各計算機ノードのアプリケーション部で実行される処理の他の計算機ノードとの間での同期を制御する同期部と、他の計算機ノードとの間で情報の送受信を実行するノード間通信部とを有する。各計算機ノードの同期部は、外部通信部が受信した処理要求識別情報が付与された処理要求に、当該計算機ノードの識別情報を送信元計算機ノード識別情報として付与して前記ノード間通信部を介して他の計算機ノードに送信する。また、各計算機ノードの同期部は、ノード間通信部を介して他の計算機ノードから当該他の計算機ノードの識別情報が付与された処理要求を受信する。そして、各計算機ノードの同期部は、同じ処理要求識別情報が付与された処理要求を外部通信部を経由して受信した計算機ノードの数に基づく第一の所定の判断基準に従って、ノード間通信部が他の計算機ノードから受信した処理要求と前記外部通信部が受信した処理要求の中から、アプリケーション部に実行させる処理要求を選択し、アプリケーション部は選択された処理要求を実行する。
【発明の効果】
【０００７】
低オーバヘッドな同期処理が可能なフォルトトラレンスコンピュータを実現することができる。また、多数決判定のための特別な装置であるボーターを必要とせず、システム構成がシンプルなフォルトトレランスコンピュータの構築が可能となる。
【図面の簡単な説明】
【０００８】
【図１】多数決同期システムの全体構成の一例を示す図である。
【図２】外部入力パケットの構成の一例を示す図である。
【図３】外部入力パケット管理テーブルの構成の一例を示す図である。
【図４】計算機ノード処理状態テーブルの構成の一例を示す図である。
【図５】計算機ノードの処理状態遷移の一例を示す図である。
【図６】ノード間通信パケットの構成の一例を示す図である。
【図７】計算機ノード構成管理テーブルの構成の一例を示す図である。
【図８】決定入力管理テーブルの構成の一例を示す図である。
【図９】決定済み入力管理テーブルの構成の一例を示す図である。
【図１０】決定出力管理テーブルの構成の一例を示す図である。
【図１１】基盤ソフトウェア処理の一例を示すフローチャートである。
【図１２】処理対象入力パケット選定開始確認処理の一例を示すフローチャートである。
【図１３】処理対象入力パケット選定処理の一例を示すフローチャートである。
【図１４】入力決定パケット送信処理の一例を示すフローチャートである。
【図１５】入力処理状態一致処理の一例を示すフローチャートである。
【図１６】入力多数決処理の一例を示すフローチャートである。
【図１７】選定入力パケット処理の一例を示すフローチャートである。
【図１８】実行結果決定処理の一例を示すフローチャートである。
【図１９】出力処理状態一致処理の一例を示すフローチャートである。
【図２０】出力多数決処理の一例を示すフローチャートである。
【図２１】リーダー選出処理の一例を示すフローチャートである。
【図２２】リーダー処理状態一致化処理の一例を示すフローチャートである。
【図２３】ボーター処理の一例を示すフローチャートである。
【図２４】出力異常処理の一例を示すフローチャートである。
【図２５】再同期検知処理および再同期処理の一例を示すフローチャートである。
【図２６】再同期検知処理および再同期処理において用いられるノード間通信パケットの一例を示す図である。
【図２７】ケースＡにおける、各計算機ノードの処理シーケンスの一例を示す図である。
【図２８】ケースＡににおける、各計算機ノードの外部入力パケット管理テーブル、計算機ノード処理状態テーブル、入出力決定処理カウンタの内容を時間別に例示した図である。
【図２９】ケースＡにおける、送信に対する各計算機ノードのノード間通信パケットの内容を時間別に例示した図である。
【図３０】ケースＡにおける、リスト作成に対する各計算機ノードのノード間通信パケットの内容を時間別に例示した図である。
【図３１】ケースＡにおける、任意の計算機ノードの計算機ノード構成管理テーブルの内容を時間別に例示した図である。
【図３２】ケースＡにおける、各計算機ノードの決定入力管理テーブルの内容の一例を示す図である。
【図３３】ケースＡにおける、計算機ノード１００Ｂの決定済み入力管理テーブルの内容の一例を示す図である。
【図３４】ケースＢにおける、各計算機ノードの処理シーケンスの一例を示す図である。
【図３５】ケースＢにおける、各計算機ノードの外部入力パケット管理テーブル、計算機ノード処理状態テーブル、入出力決定処理カウンタの内容を時間別に例示した図である。
【図３６】ケースＢにおける、送信に対する各計算機ノードのノード間通信パケットの内容を時間別に例示した図である。
【図３７】ケースＢにおける、リスト作成に対する各計算機ノードのノード間通信パケットの内容を時間別に示す図である。
【図３８】ケースＢにおける、計算機ノード１００Ａ、１００Ｂの計算機ノード構成管理テーブルの内容を時間別に例示した図である。
【図３９】ケースＢにおける、計算機ノード１００Ｃの計算機ノード構成管理テーブルの内容を時間別に示す図である。
【図４０】ケースＢにおける、各計算機ノードの決定入力管理テーブルの内容の一例を示す図である。
【図４１】ケースＢにおける、計算機ノード１００Ｂの決定済み入力管理テーブルの内容の一例を示す図である。
【図４２】ケースＣにおける、各計算機ノードの処理シーケンスの一例を示す図である。
【図４３】ケースＣにおける、時間Ｔ１間およびＴ１'間の送信に対する各計算機ノードのノード間通信パケットの内容の一例を示す図である。
【図４４】ケースＣにおける、時間Ｔ２間の送信についての各計算機ノードのノード間通信パケットの内容の一例を示す図である。
【図４５】ケースＣにおける、時間Ｔ３間の送信についての各計算機ノードのノード間通信パケットの内容の一例を示す図である。
【図４６】ケースＣにおける、時間Ｔ１間のリスト作成についての計算機ノード１００Ａ、１００Ｂのノード間通信パケットの内容の一例を示す図である。
【図４７】ケースＣにおける、時間Ｔ２間のリスト作成についての各計算機ノードのノード間通信パケットの内容の一例を示す図である。
【図４８】ケースＣにおける、任意の計算機ノードの計算機ノード構成管理テーブルの内容を時間別に示す図である。
【図４９】ケースＣにおける、各計算機ノードの決定出力管理テーブルの内容の一例を示す図である。
【図５０】新規計算機ノードを追加する場合のシステムの全体構成例を示す図である。
【発明を実施するための形態】
【０００９】
以下、実施の形態を説明する。説明は実施例１と実施例２とに分けて行う。実施例１では実施形態の詳細について説明を行った後、更に３つの具体的なケースを想定してケース毎に実施態様を説明する。実施例２では、実施例１で説明した内容を踏まえて、多数決同期システムに新たな計算機ノードを加える場合における処理を説明する。尚、図面においては、同じ要素には同じ参照番号を用いる。
【００１０】
本発明が実施の形態に制限されることは無く、本発明の思想に合致するあらゆる応用例が本発明に含まれる。
【実施例１】
【００１１】
＜全体構成（図１）＞
図１は多数決同期システムの全体構成の一例を示す図である。多数決同期システムは一つの同期システム１（フォルトトレランスコンピュータとも呼ぶ）と複数の端末２および外部ネットワーク３により構成される。同期システム１は複数台の計算機ノード１００と内部ネットワーク４により構成されている。
同期システム１は外部ネットワーク３を経由して端末２から外部入力パケット５００を受信する。端末２から送信される外部入力パケット５００の内、因果関係のある複数の外部入力パケット５００はその送信順序が守られて同期システム１に到着する。なぜならば、このような外部入力パケット５００については、同期システム１が外部入力パケット５００を受信した後、当該外部入力パケット５００に対する応答を同期システム１から端末２が受け取った後にはじめて、次の外部入力パケット５００が端末２から同期システム１に送信されるからである。その他の外部入力パケット５００については、端末２における送信順序と同期システム１における受信順序は必ずしも一致しない。従って、順序を守って処理する必要がある外部入力パケット５００に関しては、外部入力パケット５００に順序を示す情報（タイムスタンプやシーケンス番号）が付与されている。
尚、外部入力パケット５００は端末２から同期システム１へマルチキャスト方式で送信され、これに対する応答（処理結果等）は同期システム１から端末２へマルチキャスト方式で返信される。また、同期システム１で実行されるアプリケーションは内部状態（オープン状態のファイル、ネットワークコネクション等）を持たないものとする。【００１２】
計算機ノード１００はメモリ１０１、プロセッサ１０２、二次記憶装置１０３、外部通信インタフェース１０４（図中、インタフェースをI／Fと略記）、ノード間通信Ｉ／Ｆ１０５のハードウェアを備え、これらが内部バス等の通信路によって接続されている。計算ノード１００を制御するソフトウェアプログラムは、アプリケーション２００、基盤ソフトウェア３００、オペレーティングシステム４００から構成されている。さらに基盤ソフトウェア３００は外部入力パケット記憶部３０１と入出力同期部３１０に大別され、入出力同期部３１０は処理状態記憶部３１１、ノード間通信処理部３１２、入力同期部３１３、決定入力記憶部３１４、入出力決定処理カウンタ３１５、再同期検知部３１６、計算機ノード構成管理テーブル３１７、再同期要求部３１８、プログラム処理部３１９、出力同期部３２０、決定出力管理テーブル３２１から構成される。同期システム１内の複数の計算機ノード１００は、いずれも同様のハードウェア／ソフトウェア構成を有する。図１では３台の端末2A、２B、２Ｃと３台の計算機ノード１００A、１００B、１００Cの例が示されているが、特に台数は限定されない。またアプリケーション２００の個数や種類の数は限定されるものでは無い。【００１３】
端末２と計算機ノード１００は外部ネットワーク３を介して接続される。計算機ノード１００側では、外部ネットワーク３はノード間通信Ｉ／Ｆ１０５に接続される。同期システム１内の各計算機ノード１００A、１００B、１００Cは、ノード間通信Ｉ／Ｆに接続された内部ネットワーク４を介して接続される。【００１４】
端末２は、外部ネットワーク３を通じて同期システム１に要求を送信し、同期システム１が当該要求を処理して結果を端末２に返信する。同期システム１内の各計算機ノード１００は、外部ネットワーク３及び外部通信I／F１０４を通じて受信した端末２からの要求を、内部ネットワーク４とノード間通信Ｉ／Ｆ１０５を介して他の計算機ノード１００にも送信し、他の計算機ノードと協調して動作して処理し、処理結果を端末２に返信する。【００１５】
計算機ノード１００内の二次記憶装置１０３はアプリケーション２００、基盤ソフトウェア３００、オペレーティングシステム４００を格納している。プロセッサ１０２は二次記憶装置１０３からアプリケーション２００、基盤ソフトウェア３００、オペレーティングシステム４００をメモリ１０１への読み込んで展開し、基盤ソフトウェア３００やアプリケーション２００、オぺレーションシステム４００を実行すると共に、外部通信I／F１０４やノード間通信Ｉ／Ｆ１０５からの割込みも処理する。以降、アプリケーション２００やオペレーションシステム４００や基盤ソフトウェア３００（その構成要素を含む）が実行する処理として説明される動作は、実際にはプロセッサ１０２がこれらのソフトウェアを実行することによって行われる。外部通信I／F１０４は外部ネットワーク３を通じて端末２とのパケットの送受信を行う。ノード間通信Ｉ／Ｆ１０５は内部ネットワーク４を通じて計算機ノード１００間のパケットの送受信を行う。【００１６】
メモリ１０１内に展開されたオペレーティングシステム４００は基盤ソフトウェア３００やアプリケーション２００の動作を制御する。基盤ソフトウェア３００の外部入力パケット記憶部３０１と入出力同期部３１０は異なるタスクとして動作し、アプリケーション２００は必要に応じてプログラム処理部３１９から実行される。【００１７】
外部入力パケット記憶部３０１は外部入力パケット管理テーブル５５０を保有し、外部通信I／F１０４が受信した外部入力パケット５００を外部入力パケット管理テーブル５５０に格納する。外部入力パケット５００の詳細は図２と共に後述する。外部入力パケット管理テーブル５５０の詳細は図３と共に後述する。
処理状態記憶部３１１は計算機ノード処理状態テーブル７００を保有し、計算機ノード１００の処理状態が記録される。計算機ノード処理状態テーブル７００の詳細は図４と共に後述する。【００１８】
ノード間通信処理部３１２は計算機ノード１００間の通信処理を制御し、ノード間通信パケット６００の送受信する。ノード間通信パケット６００の詳細は図１０と共に後述する。【００１９】
入力同期部３１３は処理対象入力パケット選定開始処理Ｓ１１３および処理対象入力パケット選定処理Ｓ１１４を実効する。処理対象入力パケット選定開始処理Ｓ１１３の詳細は図１２と共に後述する。処理対象入力パケット選定処理Ｓ１１４の詳細は図１３〜図１６と共に後述する。【００２０】
決定入力記憶部３１４は決定入力管理テーブル８００および決定済み入力管理テーブル８１０を保有し、入力同期部３１３にて決定され、入出力同期部３１０が処理する外部入力パケット５００の情報を保持する。決定入力管理テーブル８００の詳細は図７と共に後述する。決定済み入力管理テーブル８１０の詳細は図８と共に後述する。【００２１】
入出力決定処理カウンタ３１５は計算機ノード１００が実行する処理段階のカウンタ値を保持する。他の計算機ノード１００との間で入出力決定処理カウンタ３１５を比較することで、計算機ノード１００が実行する処理の周期ずれを識別する。【００２２】
再同期検知部３１６は複数の計算機ノード１００が協調動作している同期システム１に新しく参加しようとする計算機ノード１００や、一度協調動作している同期システム１から排除されたが再参加を試みている計算機ノード１００を検出して、受入れ処理を行う。再同期検知部３１６は再同期検知処理Ｓ１１１を実行する。再同期検知処理Ｓ１１１の詳細は図２５と共に後述する。【００２３】
計算機ノード構成管理テーブル３１７は処理対象入力パケット選定処理Ｓ１１４を実行し、選定入力パケット処理Ｓ１１５の処理対象となる外部入力パケット５００の決定に寄与する計算機ノード１００情報を保持するテーブルである。計算機ノード構成管理テーブル３１７の詳細は図６と共に後述する。【００２４】
再同期要求部３１８は複数の計算機ノード１００が協調動作している同期システム１に新しく参加しようとする計算機ノード１００や、一度協調動作している同期システム１から排除されたが再参加を試みている計算機ノード１００が実行する処理である。サイ同期要求部３１８は再同期処理Ｓ１１８を実行する。再同期処理Ｓ１１８の詳細は図２５と共に後述する。【００２５】
プログラム処理部３１９は端末２からの処理要求に応じてアプリケーション２００を選択、起動を実行する処理である。選定入力パケット処理Ｓ１１５を実行する。選定入力パケット処理Ｓ１１５の詳細は図１７と共に後述する。【００２６】
出力同期部３２０は、各計算機ノード１００のアプリケーション２００の実行結果を用いて多数決判定を行い、各計算機ノード１００についてリーダーとモニターの役割分けを行い、端末２への実行結果送信処理を行う。出力同期部３２０は実行結果決定処理Ｓ１１６を実行する。実行結果決定処理Ｓ１１６の詳細は図１８〜図２４と共に後述する。【００２７】
決定出力管理テーブル３２１は実行結果決定処理Ｓ１１６に寄与した計算機ノード１００の情報を保持するテーブルである。決定出力管理テーブル３２１の詳細は図９と共に後述する。
＜外部入力パケット（図２）＞
図２は外部入力パケット５００の構成の一例を表す図である。端末２は同期システム１へ外部入力パケット５００を送信することで要求命令を伝える。【００２８】
送信元情報５０１は送信元端末２を識別する情報である。シーケンス番号５０２は送信元端末２から発せられた複数の外部入力パケット５００各々を一意に識別する情報である。シーケンス番号５０２の値は、送信元端末２の識別子を含んだ値にすることによって、端末２間で重複しないようにすることができる。送信タイムスタンプ５０３は送信元端末２が外部入力パケット５００を発信した時刻である。順列処理要否フラグ５０４は送信元端末２が送信した複数の外部入力パケット５００間に一連の順序性が存在することを識別する情報である。順列処理ブロック数５０５は前述の一連の順序性が存在する複数の外部入力パケット５００の個数を示す。順列処理開始番号５０６は前述の一連の順序性が存在する複数の外部入力パケット５００の内、先頭に位置する外部入力パケット５００のシーケンス番号５０２である。コンテンツ５０７はアプリケーション２００の実行に関係する情報であるアプリ識別子５０８とパラメタ５０９から構成される。アプリ識別子５０８は計算機ノード１００内で実行されるアプリケーション２００を指定する情報であり、パラメタ５０９にはアプリケーション２００に引渡されるパラメタ情報である。
＜外部入力パケット管理テーブル（図３）＞
図３は外部入力パケット管理テーブル５５０の構成の一例を示す図である。外部入力パケット管理テーブル５５０は外部入力パケット記憶部３０１内に保持され、計算機ノード１００が受信した外部入力パケット５００を格納するテーブルである。外部入力パケット管理テーブル５５０に格納される外部入力パケット５００数は特に限定されるものではない。【００２９】
番号５５１は格納した外部入力パケット５００を一意に特定する管理番号である。外部入力パケット管理テーブル５５０には、受信した外部入力パケット５００が改変されることなく格納されるため、番号５５１以外の列（要素）は外部入力パケット５００の要素と同様である。
＜計算機ノード処理状態テーブル（図４）＞
図４は計算機ノード処理状態テーブル７００の構成例を示す図である。計算機ノード処理状態テーブル７００は処理状態記憶部３１１内に保持され、計算機ノード１００の実行状態情報を格納する。計算機ノード処理状態テーブル７００は処理状態識別子７０１、付加情報７０２、Penalty７０３、処理状態７０４の列から構成される。【００３０】
処理状態識別子７０１と処理状態７０４は常に有効な値を保持する列であるが、付加情報７０２とPenalty７０３は処理状態識別子７０１に格納される値により有効な場合と無効な場合がある。【００３１】
処理状態識別子７０１は計算機ノード１００の処理状態を識別する値である。処理状態識別子として「REJOIN-WAIT」、「REJOIN-REQ」、「REJOIN-ACK」、「JOINED」、「INPUT」、「OUTPUT」がある。【００３２】
「REJOIN-WAIT」は当該計算機ノード１００が他の計算機ノード１００からの再同期要求を待っている状態を表す。この状態の時、処理状態７０４にも「REJOIN-WAIT」が設定されるが、付加情報７０２とPenalty７０３は有効な値を保有しない（行７０５）。【００３３】
「REJOIN-REQ」は当該計算機ノード１００が再同期要求を行っている状態を表す。この状態の時、処理状態７０４にも「REJOIN-REQ」が設定されるが、付加情報７０２とPenalty７０３は有効な値を保有しない。（行７０６）
「REJOIN-ACK」は当該計算機ノード１００が他の計算機ノード１００からの再同期要求を受領した状態を表す。この状態の時、処理状態７０４にも「REJOIN-ACK」が設定されるが、付加情報７０２とPenalty７０３は有効な値を保有しない。（行７０７）
「JOINED」は当該計算機ノード１００が行った再同期要求に対して他の計算機ノード１００からの返答を取得し、取得した情報を当該計算機ノード１００に反映した状態を表す。この状態の時、処理状態７０４にも「JOINED」が設定されるが、付加情報７０２とPenalty７０３は有効な値を保有しない。（行７０８）
「INPUT」は当該計算機ノード１００が「入力同期」を行っている状態を表す。「入力同期」とは、計算機ノード１００の外部入力パケット管理テーブル５５０に格納されている外部入力パケット５００をアプリケーション２００で処理するためにおこなわれる処理である。具体的には、各計算機ノード１００間で多数決判定を行い、処理対象の外部入力パケット５００と、アプリケーション２００を実行する計算機ノード１００を決定する処理である。この状態の時、付加情報７０２とPenalty７０３が有効になる。付加情報７０２には入力同期ステップ７１０情報が格納される。入力同期ステップ７１０は、外部入力パケット管理テーブル５５０から取得する外部入力パケット５００の個数である。Penalty７０３は、例えば初期値として「０」、初期値以外の値として「１」のいずれかをとることができ、「１」である場合には当該計算機ノード１００が他の計算機ノード１００との間で行われる入力同期処理に一時不参加であったことを表す。処理状態７０４には「BEGIN」もしくは「END」が保持される。「BEGIN」は当該計算機ノード１００が「入力同期」を実行している状態を表し、「END」は「入力同期」が完了した状態を表す（行７０９）。【００３４】
「OUTPUT」は当該計算機ノード１００が「出力同期」を行っている状態を表す。「出力同期」とは、他の計算機ノード１００との間でアプリケーション２００の処理結果を用いて多数決判定を行い、処理結果を確定すると共に、端末２へ結果を出力する役割を担う「リーダー」計算機ノード１００と「リーダー」の結果出力状態を監視する役の「モニター」計算機ノード１００とを決定して、端末２へアプリケーション２００の処理結果を出力する処理である。この状態の時、付加情報７０２は有効な値となり、「OUTPUT」、「LEADER」、「VOTER」の何れかの値を保持する。【００３５】
付加情報７０２が「OUTPUT」の時は、当該計算機ノード１００はアプリケーション２００の処理結果を他の計算機ノード１００との間で共有する処理を行う段階であることを表し、共有処理が実行中の間は処理状態７０４に「BEGIN」が保持され、共有処理が完了すると処理状態７０４に「END」が保持される。またPenalty７０３は、例えば初期値として「０」、初期値以外の値として「１」をとる有効な列となり、「１」である場合には当該計算機ノード１００が出力同期処理に一時不参加であったことを表す。【００３６】
付加情報７０２が「LEADER」の時は、当該計算機ノード１００は「リーダー」役と「モニター」役の計算機ノード１００の決定処理及び他の計算機ノード１００との間で決定結果を共有する処理を実行する状態であることを表し、処理を実行中の間は処理状態７０４に「BEGIN」が保持され、役割決定処理が完了すると処理状態７０４に「END」が保持される。【００３７】
付加情報７０２が「VOTER」の時は、当該計算機ノード１００は「リーダー」または「モニター」役としてアプリケーション２００の処理結果を出力する処理を行う状態であることを表し、「リーダー」役で出力処理を行う場合は処理状態７０４に「LEADER」が保持され、「モニター」役で出力処理を行う場合は処理状態７０４に「MONITOR」が保持される（行７１１）。
＜計算機ノード処理状態遷移図（図５）＞
図５は計算機ノード１００の処理状態遷移の一例を示す図である。図５中のREJOIN-WAIT７０５、REJOIN-REQ７０６、REJOIN-ACK７０７、JOINED７０８、INPUT７０９、OUTPUT７１１は計算機ノード処理状態テーブル７００の処理状態識別子７０１に設定される識別子と一致する。【００３８】
REJOIN-WAIT７０６処理状態の計算機ノード１００は、REJOIN-ACK７０７処理状態に遷移した後INPUT７０９処理状態に遷移する、もしくは直接INPUT７０９処理状態に遷移する。REJOIN-REQ７０５処理状態の計算機ノード１００はJOINED７０８処理状態に遷移した後、INPUT７０９処理状態に遷移する。INPUT７０９処理状態の計算機ノード１００はOUTPUT７１１処理状態もしくはREJOIN-REQ７０５処理状態に遷移する。OUTPUT７１１処理状態の計算機ノード１００はREJOIN-WAIT７０６処理状態もしくはREJOIN-REQ７０５処理状態に遷移する。
＜ノード間通信パケット（図６）＞
図６はノード間通信パケット６００の構成の一例を示す図である。ノード間通信パケット６００は計算機ノード１００の間で情報通信を行う際に使用される通信パケットである。ノード間通信パケット６００は計算機ノード識別子６０１、入出力決定処理カウンタ６０２、計算機ノード処理状態６０３、計算機ノード処理状態個別詳細情報６０４から構成される。【００３９】
計算機ノード識別子６０１は同期システム１内で計算機ノード１００を一意に識別する情報であり、当該ノード間通信パケット６００を作成した計算機ノード１００の識別子が設定される。入出力決定処理カウンタ６０２は当該ノード間通信パケット６００を作成した計算機ノード１００の入出力決定処理カウンタ３１５の値である。計算機ノード処理状態６０３は計算機ノード処理状態テーブル７００と同様の構成を有しており、当該ノード間通信パケット６００を作成した計算機ノード１００の処理状態を保持する。計算機ノード処理状態個別詳細情報６０４は特定の構成を持たず、ノード間通信パケット６００を送信する時々の用途に応じた情報が設定される。
＜計算機ノード構成管理テーブル（図７）＞
図７は計算機ノード構成管理テーブル３１７の構成の一例を示す図である。計算機ノード構成管理テーブル３１７は入力同期処理に寄与した計算機ノード１００の情報を保持するテーブルである。計算機ノード構成管理テーブル３１７は入力同期時計算機ノード総数３１７Ａと計算機ノード識別子６０１、入出力決定処理カウンタ６０２、計算機ノード処理状態６０３の列から構成される。【００４０】
計算機ノード識別子６０１、入出力決定処理カウンタ６０２、計算機ノード処理状態６０３の列には、ノード間通信パケット６００内の同名の列と同様の情報が格納される。計算機ノード構成管理テーブル３１７は、複数計算機ノード分の情報を保持することが可能で、計算機ノード構成管理テーブル３１７に情報が登録されている計算機ノード１００の総数は入力同期時計算機ノード総数３１７Ａに保持される。
＜決定入力管理テーブル（図８）＞
図８は決定入力管理テーブル８００の構成の一例を示す図である。決定入力管理テーブル８００は入力同期処理の結果、アプリケーション２００の処理対象に決定された外部入力パケット５００の情報を保持する。決定入力管理テーブル８００は決定入力総数８０１と、外部入力パケット５００と同様の構成である送信元情報５０１列、シーケンス番号５０２列、送信タイムスタンプ５０３列、順列処理要否フラグ５０４列、順列処理ブロック数５０５列、順列処理開始番号５０６列、コンテンツ５０７内のアプリ識別子５０８列、パラメタ５０９列から構成される。外部入力パケット５００の情報は複数個保持することが可能で、保持数は決定入力総数８０１に保持される。
＜決定済み入力管理テーブル（図９）＞
図９は決定済み入力管理テーブル８１０の構成の一例を示す図である。入力同期処理では、ある外部入力パケット５００を取得した計算機ノード１００が同期システム１内で多数派を占める場合に、当該外部入力パケット５００を取得していない少数派となった計算機ノード１００にも当該外部入力パケット５００情報を共有させて当該計算機ノード１００のアプリケーション２００にも当該外部入力パケットに基づく処理を実行させる。このとき少数派の計算機ノード１００は、アプリケーション２００実行後に当該外部入力パケット５００を外部ネットワーク３を介して自ら取得する可能性がある。従って、外部入力パケット５００の二重処理を避けるために、処理対象から外したい外部入力パケット５００を決定済み入力管理テーブル８１０に記録する。【００４１】
決定済み入力管理テーブル８１０は決定済み入力総数８１１と、外部入力パケット５００と同様の構成である送信元情報５０１列、シーケンス番号５０２列、送信タイムスタンプ５０３列、順列処理要否フラグ５０４列、順列処理ブロック数５０５列、順列処理開始番号５０６列、コンテンツ５０７内のアプリ識別子５０８列、パラメタ５０９列から構成される。外部入力パケット５００の情報は複数個保持することが可能で、保持数は決定済み入力総数８１１に保持される。
＜決定出力管理テーブル（図１０）＞
図１０は決定出力管理テーブル３２１の構成例を示す図である。決定出力管理テーブル３２１は出力同期処理に寄与した計算機ノード１００の情報を保持するテーブルである。決定出力管理テーブル３２１は出力同期時計算機ノード総数３２１Ａと順位３２１Ｂ、ノード間通信パケット６００内に含まれる列と同一である計算機ノード識別子３２１Ｃ、入出力決定処理カウンタ３２１Ｄ、計算機ノード処理状態３２１Ｅと、計算機ノード処理結果３２１Ｆから構成される。順位３２１Ｂは複数の計算機ノード１００から「リーダー」役になる計算機ノード１００が選択される際の優先順位を意味し、計算機ノード処理結果３２１Ｆはアプリケーション２００の実行結果を保持する。【００４２】
決定出力管理テーブル３２１は複数の計算機ノード１００の情報を保持することが可能であり、保持数は出力同期時計算機ノード総数３２１Ａに保持される。【００４３】
以下、同期システム１が外部入力パケット５００を外部入力パケット管理テーブル５５０に取り込むための処理、及び取り込んだ外部入力パケット５００に対する一連の処理を図１１を用いて説明する。取り込んだ外部入力パケット５００に対する一連の処理の内、処理対象外部入力パケットの選定を開始する処理を図１２を用いて、処理対象外部入力パケットの選定を行う処理を図１３、図１４、図１５、図１６を用いて、選定した外部入力パケットに対してアプリケーション２００を起動する処理を図１７を用いて、アプリケーション２００の実行結果を決定する処理を図１８、図１９、図２０、図２１、図２２、図２３、図２４を用いて説明する。更に計算機ノード１００の再同期検知処理、再同期処理について図２５、図２６を用いて説明する。なお、各フローチャートの説明ではステップを「Ｓ」と略記する。
＜基盤ソフトウェア処理のフローチャート（図１１）＞
図１１は基盤ソフトウェア処理の一例を示すフローチャートである。基盤ソフトウェア３００は外部入力パケット記憶部３０１と入出力同期部３１０に大別され、それぞれ異なるタスクとしてオペレーティングシステム４００から起動され、両者は独立して動作する。図１１は、外部入力パケット記憶部３０１と入出力同期部３１０、それぞれによって実行される処理のフローチャートを示す。【００４４】
外部入力パケット記憶部３０１は、初めに外部通信I／F１０４による外部入力パケット５００の受信を検出する（Ｓ１０１）。【００４５】
次に外部入力パケット記憶部３０１は受信した外部入力パケット５００の情報を外部入力パケット管理テーブル５５０に格納する（Ｓ１０２）。【００４６】
外部入力パケット保存処理（Ｓ１０２）が終了すると、外部入力パケット記憶部３０１は再び外部入力パケット受信（Ｓ１０１）の実行に移り、前述の処理を繰返す。【００４７】
一方入出力同期部３１０は、初めに再同期要求を行っている他の計算機ノード１００の検出と当該計算機ノード１００についての同期処理を行う。詳細は図２５、図２６と共に後述する（Ｓ１１１）。【００４８】
次に入出力同期部３１０は、処理状態記憶部３１１の計算機ノード処理状態テーブル７００の処理状態識別子７０１に「INPUT」値を設定する。同時に、付加情報７０２には入力同期ステップ７１０としての初期値を設定し、Penalty７０３にも初期値を設定する。入力同期ステップ７１０の初期値には例えば「２」以上の値、一方Penalty７０３の初期値として例えば「０」値が与えられる（Ｓ１１２）。【００４９】
次に入出力同期部３１０は、処理対象となる外部入力パケット５００の選定を開始できるか否かを判別する処理を行う。詳細は図１２と共に後述する（Ｓ１１３）。【００５０】
次に入出力同期部３１０は、処理対象となる外部入力パケット５００を選定する処理を行う。詳細は図１３及び図１４、図１５、図１６と共に後述する（Ｓ１１４）。【００５１】
次に入出力同期部３１０は、アプリケーション２００を実行し、処理対象入力パケット選定処理Ｓ１１４で選定した外部入力パケット５００の処理を行う。詳細は図１７と共に後述する（Ｓ１１５）。【００５２】
次に入出力同期部３１０は、アプリケーション２００による外部入力パケット５００の処理結果を計算機ノード１００間で共有し、端末２へ処理結果を出力する「リーダー」役と出力状態を監視する「モニター」役の計算機ノード１００を決定し、「リーダ」役の計算機ノード１００は端末２へ処理結果を出力する。詳細は図１８及び図１９、図２０、図２１、図２２、図２３、図２４と共に後述する（S１１６）。【００５３】
実行結果決定処理Ｓ１１６が終了すると、入出力同期部３１０は再び再同期検知処理Ｓ１１１を再び実行じ、前述の処理を繰返す。
＜処理対象入力パケット選定開始確認処理のフローチャート（図１２）＞
図１２は、入出力同期部３１０の処理対象入力パケット選定開始確認処理Ｓ１１３の一例を示すフローチャートである。【００５４】
入出力同期部３１０は処理対象入力パケット選定開始確認処理Ｓ１１３を開始すると、自計算機ノード１００に、他の計算機ノード１００から処理対象となる外部入力パケット５００を選定するためのノード間通信パケット６００が到着しているか否かをを確認する（Ｓ２０１及びＳ２０２）。ノード間通信パケット６００が到着している場合（Ｓ２０２の結果が「Ｙ」）、Ｓ１１４を実行する。ノード間通信パケット６００が到着していない場合（Ｓ２０２の結果が「Ｎ」）、Ｓ２０３を実行する。【００５５】
Ｓ２０３及びＳ２０４では、入出力同期部３１０は自計算機ノード１００に到着している外部入力パケット５００の確認を、外部入力パケット管理テーブル５５０を参照することで行う。外部入力パケット５００の存在が確認できる場合（Ｓ２０４の結果が「Ｙ」）、Ｓ２０５で計算機ノード処理状態テーブル７００の処理状態識別子７０１に「INPUT」を設定し、また入力同期ステップ７１０として付加情報７０２に値（例えば２）を設定した後、Ｓ１１４を実行する。【００５６】
外部入力パケット５００の存在が確認できない場合（Ｓ２０４の結果が「Ｎ」）、処理対象となる外部入力パケット５００が存在しないため、入出力同期部３１０は初期実行処理である再同期検知処理Ｓ１１１を実行する。【００５７】
処理対象入力パケット選定処理Ｓ１１４は、図１３、図１４、図１５、図１６に分割して説明する。処理対象入力パケット選定処理Ｓ１１４の開始部分を図１３で説明し、Ｓ１１４に続いて実行される入力決定パケット送信処理Ｓ４００を図１４で説明し、Ｓ４００に続いて実行される入力処理状態一致処理Ｓ５００を図１５で説明し、Ｓ５００に続いて実行される入力多数決処理Ｓ６００を図１６で説明する。
＜処理対象入力パケット選定処理のフローチャート（図１３）＞
図１３は入出力同期部３１０が実行する処理対象入力パケット選定処理Ｓ１１４の一例を示すフローチャートである。【００５８】
入出力同期部３１０は処理対象入力パケット選定処理Ｓ１１４を開始すると、初めに決定入力記憶部３１４の決定入力管理テーブル８００に未処理の外部入力パケット５００の情報が登録されているか否かを確認する（Ｓ３１１）。【００５９】
Ｓ３１１で外部入力パケット５００の情報が保持されている場合（Ｓ３１１の結果が「Ｎ」）、当該外部入力パケット５００の情報を優先的に処理するために、選定入力パケット処理Ｓ１１５を実行する。【００６０】
外部入力パケットの５００の情報が決定入力管理テーブル８００に保持されていない場合（Ｓ３１１の結果が「Ｙ」）、決定入力記憶部３１４の決定入力管理テーブル８００へ新たな外部入力パケット５００の情報を取り込む処理に移るためにＳ３０１を起動する。【００６１】
Ｓ３０１では、入力同期部３１０は処理状態記憶部３１１内の計算機ノード処理状態テーブル７００の処理状態識別子７０１から自計算機ノード１００状態値「INPUT」（Ｓ７０９）を取得する。【００６２】
次に入力同期部３１０は処理状態記憶部３１１内の計算機ノード処理状態テーブル７００の付加情報７０２から入力同期ステップ７１０の値を取得する（Ｓ３０２）。【００６３】
次に入力同期部３１０は入出力決定処理カウンタ３１５の値を取得する（Ｓ３０３）。【００６４】
次に入力同期部３１０はノード間通信パケット６００に値を設定する。計算機ノード識別子６０１には自計算機ノード１００の識別子を設定し、入出力決定処理カウンタ６０２にはＳ３０３で取得した入出力決定処理カウンタ３１５を設定し、計算機ノード処理状態６０３にはＳ３０１とＳ３０２で取得した計算機ノード処理状態テーブル７００の計算機ノード状態情報を設定する（Ｓ３０４）。【００６５】
次に入力同期部３１０は外部入力パケット記憶部３０１の外部入力パケット管理テーブル５５０から入力同期ステップ７１０数分の外部入力パケット５００の情報を取得する（Ｓ３０５）。【００６６】
Ｓ３０５で入力同期部３１０は、取得した外部入力パケット５００の情報の中に決定済み入力管理テーブル８１０内に保持されている外部入力パケット５００の情報と一致するものが存在しないことを確認する（Ｓ３０６およびＳ３０７）。【００６７】
Ｓ３０５で入力同期部３１０は、取得した外部入力パケット５００の情報と同じ情報が決定済み入力管理テーブル８１０内に存在する場合（Ｓ３０７の結果が「Ｎ」）、外部入力パケット管理テーブル５５０から当該外部入力パケット５００の情報を削除し（Ｓ３０８）、削除した分と同数の外部入力パケット５０００の情報を外部入力パケット管理テーブル５５０から取り出す（Ｓ３０５）。【００６８】
Ｓ３０５で入力同期部３１０が取得した外部入力パケット５００の情報と同じ情報が決定済み入力管理テーブル８１０内に存在しない場合（Ｓ３０７の結果が「Ｙ」）、Ｓ３０９を実行する。【００６９】
Ｓ３０９で入力同期部３１０は、取得した外部入力パケット５００の情報をノード間通信パケット６００の計算機ノード処理状態個別詳細情報６０４に設定する。以上でノード間通信パケット６００の作成が完了すると、入力決定パケット送信処理Ｓ４００を実行する。
＜入力決定パケット送信処理のフローチャート（図１４）＞
図１４は、入出力同期部３１０の処理対象入力パケット選定処理Ｓ１１４の一部分である、入力決定パケット送信処理Ｓ４００の一例を示すフローチャートである。【００７０】
入出力同期部３１０は入力決定パケット送信処理Ｓ４００を開始すると、初めに処理状態記憶部３１１内の計算機ノード処理状態テーブル７００の処理状態７０４の値を「BEGIN」に設定する（同時に自計算機ノード１００状態をコピーしたノード間通信パケット６００の計算機ノード処理状態６０３の値も更新する）（Ｓ４０１）。【００７１】
次に入出力同期部３１０は、作成したノード間通信パケット６００をノード間通信Ｉ／Ｆ１０５を介して他の計算機ノード１００にマルチキャストで送信する（Ｓ４０２）。【００７２】
次に入出力同期部３１０は、他の計算機ノード１００からノード間通信パケット６００が到着することを期待して、タイムアウト時間までＷａｉｔする（Ｓ４０３）。【００７３】
次に入出力同期部３１０は、他の計算機ノード１００から送信されたノード間通信パケット６００を受信する（Ｓ４０４）。【００７４】
次に入出力同期部３１０は、自計算機ノード１００で作成したノード間通信パケット６００情報と、Ｓ４０４で受信した他計算機ノード１００のノード間通信パケット６００情報を結合し、「受信結果リスト」を作成する。「受信結果リスト」はノード間通信パケット６００と同様の列情報を持つ（Ｓ４０５）。各計算機ノードの結果を結合処理することで、一部の内部通信経路の障害により通信不可能な計算機ノードが存在した場合でも通信可能な経路より全計算機ノードの情報が共有可能となる。【００７５】
次に入出力同期部３１０は、Ｓ４０５で作成した受信結果リスト中の、計算機ノード識別子６０１、入出力決定処理カウンタ６０２、計算機ノード処理状態６０３の列情報を計算機ノード構成管理テーブル３１７の同じ列にコピーする。この時、入力同期時計算機ノード総数３１７Ａを更新する。（Ｓ４０６）
以上で入力決定パケット送信処理Ｓ４００が完了すると、入力処理状態一致処理Ｓ５００を実行する。
＜入力処理状態一致処理のフローチャート（図１５）＞
図１５は、入出力同期部３１０の処理対象入力パケット選定処理Ｓ１１４の一部分である、入力処理状態一致処理Ｓ５００の一例を示すフローチャートである。【００７６】
入力処理状態一致処理Ｓ５００では、各計算機ノード１００間で「入力同期」処理における状態を一致させる処理を行う。同期システム１は各計算機ノード１００の演算結果を多数決判定することで端末２への出力情報の信頼性を確保するが、各計算機ノード１００は独立した計算機であるため、各自が異なる計算機ノード状態で稼動している。演算結果の多数決判定を実施するためには、複数の各計算機ノード１００の演算結果を必要とする。演算結果の多数決判定に参加する計算機ノード１００の数を最大化するために、演算処理の入力段階で一度計算機ノード１００間の同期を取る。入力処理状態一致処理Ｓ５００の方針は、処理周期が明らかに異なる計算機ノード１００は排除するが、僅かな計算機ノード処理状態の遅れはこれを修正することで演算処理、演算結果の多数決判定に参加する計算機ノード１００数を最大化する。【００７７】
入出力同期部３１０は入力処理状態一致処理Ｓ５００を開始すると、初めに入出力決定処理カウンタ３１５と、Ｓ４０４で他の計算機ノード１００から受信したノード間通信パケット６００の入出力決定処理カウンタ６０２を比較し、自他計算機ノード１００の入出力決定処理カウンタ３１５の値が一致しているかを判定する。計算機ノード１００は複数の他の計算機ノード１００と送受信を行っている場合があるため、受信したノード間通信パケット６００も複数個になることがある。Ｓ５０２での「比較」とは、入出力決定処理カウンタ３１５値と受信した一又は複数の入出力決定処理カウンタ６０２値に基づいて自他計算機ノード１００を分類し、自計算機ノード１００が多数派または少数派のいずれに分類されるかを決定する、「多数決判定」のことである（Ｓ５０１およびＳ５０２）。【００７８】
尚「多数決判定」において、分類の結果３つ以上のグループが生成された場合には、最も多くの計算機ノードが属するグループに自計算機ノードが分類された場合に、自計算機ノードが「多数派」に分類されたと判定してもよい。これは、以降の処理において実行される様々な「多数決判定」においても同様である。【００７９】
自計算機ノード１００が少数派に分類される場合（Ｓ５０２の結果が「Ｎ」）、多数派の計算機ノード１００と処理周期が異なるため、再同期処理Ｓ１１８を実行する。【００８０】
自計算機ノード１００が多数派に分類される場合（Ｓ５０２の結果が「Ｙ」）、処理周期が一致しているとして、継続するＳ５０４を実行する。【００８１】
次に自計算機ノード１００が他の計算機ノード１００と計算機ノード処理状態が一致しているかを比較する。ここでの「比較」も「多数決判定」のことである。計算機ノード処理状態の比較は、他計算機ノード１００から受信したノード間通信パケット６００の計算機ノード処理状態６０３（計算機ノード処理状態６０３の構成列は計算機ノード処理状態テーブル７００と同じ）と自計算機ノード１００の計算機ノード処理状態テーブル７００の値（処理状態識別子７０１、処理状態７０４）を比較することで行う（Ｓ５０４およびＳ５０５）。【００８２】
Ｓ５０５で自計算機ノード１００が少数派に分類される場合（Ｓ５０５の結果が「Ｎ」）、計算機ノード処理状態が多数派の計算機ノード処理状態と一致していないため、Ｓ５０６を実行する。Ｓ５０６では自計算機ノード１００の計算機ノード処理状態を多数派の計算機ノード処理状態と合わせるために、計算機ノード処理状態テーブル７００（処理状態識別子７０１、付加情報７０２、処理状態７０４）を多数派の計算機ノード処理状態値（計算機ノード処理状態６０３）で更新し、また計算機ノード処理状態テーブル７００のPenalty７０３を設定（例えば「１」を設定）する。【００８３】
次に自計算機ノード処理状態テーブル７００の処理状態７０４に値が、「BEGIN」の場合（Ｓ５０７の結果が「Ｙ」）はＳ５０８を実行し、「END」の場合（Ｓ５０７の結果が「Ｎ」）は入力処理状態一致処理Ｓ５００を終了して入力多数決処理Ｓ６００を実行する（Ｓ５０６およびＳ５０７）。【００８４】
Ｓ５０５で自計算機ノード１００が多数派に分類される場合（Ｓ５０５の結果が「Ｙ」）、Ｓ５０８を実行する。【００８５】
S５０８では、自計算機ノード処理状態テーブル７００の処理状態７０４を「END」に変更する。各計算機ノード１００は、それぞれの計算機ノード１００の入出力同期部３１０が処理候補として取得した外部入力パケット５００の情報（受信結果リスト）の共有が完了した状態となる（Ｓ５０８）。【００８６】
次にノード間通信パケット６００に設定した計算機ノード処理状態テーブル７００値、及び「受信結果リスト」を、ノード間通信Ｉ／Ｆ１０５経由で他計算機ノード１００にマルチキャストで送信する（Ｓ５０９）。【００８７】
次に他計算機ノード１００からのノード間通信パケット６００の到着を待つために、タイムアウトまでＷａｉｔする（Ｓ５１０）。【００８８】
Ｗａｉｔ終了で、入力処理状態一致処理Ｓ５００を完了し、次の入力多数決処理Ｓ６００を実行する。
＜入力多数決処理のフローチャート（図１６）＞
図１６は入出力同期部３１０の処理対象入力パケット選定処理Ｓ１１４の一部分である、入力多数決処理Ｓ６００の一例を示すフローチャートである。入力多数決処理Ｓ６００ではアプリケーション２００の処理対象となる外部入力パケット５００を決定する。【００８９】
入出力同期部３１０は入力多数決処理Ｓ６００を開始すると、初めに「受信結果リスト」を参照して、過半数の計算機ノード１００に共通して取得されている外部入力パケット５００（「多数決同意入力パケット」と称する）の有無を確認する（Ｓ６０１）。ここで過半数とは、現時点で計算機ノード構成管理テーブルに情報が登録されている計算機ノードの数の過半数であっても良いし、同期システム１に存在する計算機ノードの数の過半数であっても良い。【００９０】
多数決同意入力パケットが存在しない場合（Ｓ６０１の結果が「Ｎ」）、Ｓ６０２を実行して処理状態記憶部３１１の計算機ノード処理状態テーブル７００の付加情報７０２（入力同期ステップ７１０）の値を「１」増加し、処理対象入力パケット選定処理Ｓ１１４の開始位置（Ｓ３００）に実行を移す。【００９１】
多数決同意入力パケットが存在する場合（Ｓ６０１の結果が「Ｙ」）、次処理Ｓ６０４を実行する。【００９２】
次にＳ６０１で選定された外部入力パケット５００情報の順序の並び替えを行う。並び替えた外部入力パケット５００を「決定入力パケット」と称する。並び替えは外部入力パケット５００のシーケンス番号５０２の値を基に行う（Ｓ６０４）。【００９３】
次にＳ６０４で並び替えた外部入力パケット５００の情報を決定入力記憶部３１４の決定入力管理テーブル８００に保存し、決定入力総数８０１を更新する（Ｓ６０５）。【００９４】
次にＳ６０５で決定入力管理テーブル８００に保存された各外部入力パケット５００の情報について、過半数の計算機ノード１００が図１３のＳ３０５で取得した外部入力パケット５００情報と同一の情報を自計算機ノード１００が取得を行ったかどうかの多数決判定を行う（Ｓ６０６）。【００９５】
自計算機ノード１００が同一の情報を取得していない場合（Ｓ６０６の結果が「Ｎ」）、Ｓ６０７で当該外部入力パケット５００の情報を決定入力記憶部３１４の決定済み入力管理テーブル８１０に設定し、決定済み入力総数８１１を更新して、Ｓ６０９を起動する。当該外部入力パケット５００の情報はアプリケーション２００の処理対象であるが、自計算機ノード１００が自ら外部ネットワーク３から取得した情報では無い為、後の演算周期で遅れて到着した当該外部入力パケット５００を外部ネットワーク３から取得する可能性がある。同一外部入力パケット５００に対する多重処理を回避するため、当該外部入力パケット５００の情報を決定済み入力管理テーブル８１０に設定しておく。【００９６】
自計算機ノード１００が同一の情報取得している場合（Ｓ６０６の結果が「Ｙ」）、Ｓ６０６を起動して「決定入力パケット」のうち、自計算機ノード１００が自ら外部ネットワーク３経由で取得した外部入力パケット５００の情報を、外部入力パケット記憶部３０１の外部入力パケット管理テーブル５５０から削除し、続いてＳ６０９を起動する。【００９７】
Ｓ６０９は入出力決定処理カウンタ３１５を「１」増加する。【００９８】
次に決定入力パケットをノード間通信パケット６００の計算機ノード処理状態個別詳細情報６０４に設定する（Ｓ６１０）。【００９９】
次にＳ６１０で作成したノード間通信パケット６００を、ノード間通信Ｉ／Ｆ１０５経由で他の計算機ノード１００にマルチキャストで送信する（Ｓ６１１）。【０１００】
次に他計算機ノード１００からのノード間通信パケット６００の到着を待つために、タイムアウトまでＷａｉｔする（Ｓ６１２）。【０１０１】
Ｗａｉｔ終了で、入力多数決処理Ｓ６００を完了し、次の選定入力パケット処理Ｓ１１５を実行する。
＜選定入力パケット処理のフローチャート（図１７）＞
図１７は、入出力同期部３１０の処理対象入力パケット選定処理Ｓ１１４の一部分である、選定入力パケット処理Ｓ１１５の一例を示すフローチャートである。選定入力パケット処理Ｓ１１５ではアプリケーション２００を起動し、「決定入力パケット」を処理する。【０１０２】
入出力同期部３１０は選定入力パケット処理Ｓ１１５を開始すると、初めに決定入力記憶部３１４の決定入力管理テーブル８００から外部入力パケット５００情報を取り出す（Ｓ７０１）。【０１０３】
Ｓ７０１で取得した外部入力パケット５００の情報うち、コンテンツ５０７のアプリ識別子５０８から、処理を実行すべきアプリケーション２００を決定し、パラメタ５０９を付加して該当アプリケーション２００の開始処理（Ｓ７０２−Ａ）を起動する。アプリケーション２００の起動後、選定入力パケット処理Ｓ１１５は当該アプリケーション２００の処理終了待ちとなる。（Ｓ７０２）
Ｓ７０２で起動されたアプリケーション２００は付加パラメタ５０９を取得して処理を開始し（Ｓ７０２−Ａ）、アプリケーション２００処理を実行し（Ｓ７０２−Ｂ）、終了時には処理結果を選定入力パケット処理Ｓ１１５に出力する（Ｓ７０２−Ｃ）。【０１０４】
アプリケーション２００処理終了後、選定入力パケット処理Ｓ１１５は処理結果を取得する（Ｓ７０３）。【０１０５】
外部入力パケット５００の情報に応じたアプリケーション２００の起動と処理結果の取得で選定入力パケット処理Ｓ１１５を完了し、次の実行結果決定処理Ｓ１１６を実行する。【０１０６】
実行結果決定処理Ｓ１１６は、本書では図１８、図１９、図２０、図２１、図２２、図２３、図２４に分割して説明する。実行結果決定処理Ｓ１１６の開始部分を図１８で説明し、Ｓ１１６に続いて実行される出力処理状態一致処理Ｓ９００を図１９で説明し、Ｓ９００に続いて実行される出力多数決処理Ｓ１０００を図２０で説明し、Ｓ１０００に続いて実行されるリーダー選出処理Ｓ１１００を図２１で説明し、Ｓ１１００に続いて実行されるリーダー処理状態一致化処理Ｓ１２００を図２２で説明し、Ｓ１２００に続いて実行されるボーター処理Ｓ１３００を図２３で説明し、Ｓ１３００に続いて実行される出力異常処理Ｓ１４００を図２４で説明する。
＜実行結果決定処理のフローチャート（図１８）＞
図１８は入出力同期部３１０の実行結果決定処理Ｓ１１６の一例を示すフローチャートである。【０１０７】
入出力同期部３１０は実行結果決定処理Ｓ１１６を開始すると、初めに処理状態記憶部３１１の計算機ノード処理状態テーブル７００の処理状態識別子７０１を「OUTPUT」に、付加情報７０２を「OUTPUT」に、処理状態７０４を「BEGIN」に更新する（Ｓ８０１）。【０１０８】
次に入出力同期部３１０は、入出力決定処理カウンタ３１５の値を確認する（Ｓ８０２）。【０１０９】
次に入出力同期部３１０は、Ｓ７０３で取得したアプリケーション２００の処理結果を、ノード間通信パケット６００の計算機ノード処理状態個別詳細情報６０４に設定する。この時、Ｓ８０１で更新した計算機ノード処理状態テーブル７００値を計算機ノード処理状態６０３に設定し、Ｓ８０２で取得した入出力決定処理カウンタ３１５値を入出力決定処理カウンタ６０２にも設定する。（Ｓ８０３）
次に入出力同期部３１０は、Ｓ８０３で作成したノード間通信パケット６００をノード間通信Ｉ／Ｆ１０５経由で他の計算機ノード１００にマルチキャストで送信することで、アプリケーション２００の処理結果を他の計算機ノード１００との間で共有する（Ｓ８０４）。【０１１０】
次に入出力同期部３１０は、他の計算機ノード１００からのノード間通信パケット６００が到着を待つために、タイムアウトまでＷａｉｔする（Ｓ８０５）。【０１１１】
Ｓ８０６で入出力同期部３１０は、他の計算機ノード１００から到着したノード間通信パケット６００を取得し、Ｓ８０７で自他計算機ノード１００のノード間通信パケット６００を結合して「受信結果リスト」を作成する。【０１１２】
更に入出力同期部３１０は、受信結果リスト（構成列はノード間通信パケット６００に同じ）に登録されている計算機ノード識別子６０１、入出力決定処理カウンタ６０２、計算機ノード処理状態６０３の列情報を計算機ノード構成管理テーブル３１７に設定する。ただし入力同期時計算機ノード総数３１７Ａの値は更新しない。（Ｓ８０８）
計算機ノード１００間でのアプリケーション２００の処理結果の交換を行ったところで、実行結果決定処理Ｓ１１６を完了し、次の出力処理状態一致処理Ｓ９００を実行する。
＜出力処理状態一致処理のフローチャート（図１９）＞
図１９は入出力同期部３１０の実行結果決定処理Ｓ１１６の一部分である、出力処理状態一致処理Ｓ９００の一例を示すフローチャートである。【０１１３】
出力処理状態一致処理Ｓ９００では、各計算機ノード１００間で「出力同期」処理における状態を一致させる処理を行う。同期システム１は各計算機ノード１００の演算結果を多数決判定することで端末２への出力情報の信頼性を確保するが、各計算機ノード１００は独立した計算機であるため、各自が異なる計算機ノード状態で稼動している。出力処理状態一致処理Ｓ９００の方針は、処理周期が明らかに異なる計算機ノード１００は排除するが、僅かな計算機ノード処理状態の遅れはこれを修正することで演算結果の多数決判定に参加する計算機ノード１００数を最大化する。【０１１４】
入出力同期部３１０は出力処理状態一致処理Ｓ９００を開始すると、初めに入出力決定処理カウンタ３１５と、Ｓ８０６で他の計算機ノード１００から受信したノード間通信パケット６００の入出力決定処理カウンタ６０２を比較し、自他計算機ノード１００の入出力決定処理カウンタ３１５の値が一致しているかを判定する。計算機ノード１００は複数の他の計算機ノード１００とノード間通信パケット６００を送受信する場合があるため、受信したノード間通信パケット６００も複数個になることがある。Ｓ９０１での「比較」とは、入出力決定処理カウンタ３１５値と複数の入出力決定処理カウンタ６０２値とに基づき、自他計算機ノード１００を分類し、自計算機ノード１００が多数派または少数派のいずれに分類されるかを決定する、「多数決判定」のことである（Ｓ９０１およびＳ９０２）。【０１１５】
自計算機ノード１００が少数派に分類される場合（Ｓ９０２の結果が「Ｎ」）、多数派の計算機ノード１００と処理周期が異なるため、入出力同期部３１０は再同期処理Ｓ１１８を実行する。【０１１６】
自計算機ノード１００が多数派に分類される場合（Ｓ９０２の結果が「Ｙ」）、処理周期が一致しているとして、入出力同期部３１０は継続するＳ９０４を実行する。【０１１７】
次に自計算機ノード１００が他の計算機ノード１００と計算機ノード処理状態が一致しているかを比較する。ここでの「比較」も「多数決判定」のことである。計算機ノード処理状態の比較は、他計算機ノード１００から受信したノード間通信パケット６００の計算機ノード処理状態６０３（構成列は計算機ノード処理状態テーブル７００と同じ）と自計算機ノード１００の計算機ノード処理状態テーブル７００の値（処理状態識別子７０１、付加情報７０２、処理状態７０４）を比較することで行う。（Ｓ９０４およびＳ９０５）
Ｓ９０５で自計算機ノード１００が少数派に分類される場合（Ｓ９０５の結果が「Ｎ」）、計算機ノード処理状態が多数派の計算機ノード処理状態と一致していないため、入出力同期部３１０はＳ９０６を実行する。【０１１８】
Ｓ９０６では、他計算機ノード１００から受信したノード間通信パケット６００の計算機ノード処理状態６０３（構成列は計算機ノード処理状態テーブル７００と同じ）の付加情報７０２を参照し、多数派の計算機ノード１００の計算機ノード処理状態が「LEADER」にあるかを判別する。多数派の計算機ノード処理状態が「LEADER」にある場合（Ｓ９０６の結果が「Ｙ」）、「出力同期」中の一つ先の処理で行われる、端末２へ処理結果を出力する候補の計算機ノード１００が決定済みであるため、自計算機ノード１００は監視役として動作するために入出力同期部３１０はボーター処理Ｓ１３００を起動する。多数派の計算機ノード処理状態が「LEADER」にない場合（Ｓ９０６の結果が「Ｎ」）、入出力同期部３１０はＳ９０７を起動する。また、多数派の計算機ノード１００の付加情報７０２の値の如何に関わらず、入出力同期部３１０は自計算機ノード１００の計算機ノード処理状態テーブル７００のPenalty７０３を設定（例えば「１」を設定）する。【０１１９】
Ｓ９０６の判定において、多数派の計算機ノード１００の計算機ノード処理状態が「VOTER」であるケースもあり得る。しかしS９０６においては「LEADER」のみを検出対照とする。多数派の計算機ノード１００の計算機ノード処理状態が「VOTER」である場合、これら多数派の計算機ノード１００は自計算機ノード処理状態「OUTPUT」よりも「出力同期」処理において二つ先の、端末２に結果出力を行う処理状態にある。多数派計算機ノード１００の処理状態が「VOTER」であることを確認した後に、自計算機ノード１００の処理状態を「VOTER」に補正して出力監視役である「モニター」に切替えたとしても、端末２への結果出力を見逃す可能性があることから、Ｓ９０６の判定は「LEADER」のみを検出対象とする。つまり、「出力同期」の処理段階における「OUTPUT」から「VOTER」への二段階の同期ずれの補正は行わない。【０１２０】
Ｓ９０７とＳ９０８では多数派の計算機ノード処理状態の比較を行い、付加情報７０２が「OUTPUT」あり（Ｓ９０７の結果が「Ｙ」）、更に処理状態７０４が「END」である場合（Ｓ９０８の結果が「Ｙ」）は計算機ノード１００間でアプリケーション２００の処理結果を一致化させる処理が完了しているため、入出力同期部３１０は出力多数決処理Ｓ１０００を起動して出力処理状態一致処理Ｓ９００を完了する。【０１２１】
一方付加情報７０２が「OUTPUT」でない場合（Ｓ９０７の結果が「Ｎ」）、または付加情報７０２は「OUTPUT」ある（Ｓ９０７の結果が「Ｙ」）が処理状態７０４が「END」でない場合（Ｓ９０８の結果が「Ｎ」）は、入出力同期部３１０はタイムアウトまでＷａｉｔした後（Ｓ９０９）、Ｓ８０６の他計算機ノード１００からのアプリケーション２００処理結果受信処理から、出力処理状態一致処理Ｓ９００を再実行する。【０１２２】
一方、Ｓ９０５で自計算機ノード１００が多数派に分類される場合（Ｓ９０５の結果が「Ｙ」）、入出力同期部３１０は次のＳ９１１を起動する。【０１２３】
Ｓ９１１では自計算機ノード処理状態テーブル７００の処理状態７０４を「END」に変更する。各計算機ノード１００は、それぞれの計算機ノード１００のアプリケーション２００の処理結果の共有が完了した状態となる。【０１２４】
次にノード間通信パケット６００に設定した計算機ノード処理状態テーブル７００値をノード間通信Ｉ／Ｆ１０５経由で他計算機ノード１００にマルチキャストで送信する（Ｓ９１２）。【０１２５】
次に他計算機ノード１００からのノード間通信パケット６００の到着を待つために、タイムアウトまでＷａｉｔする（Ｓ９１３）。【０１２６】
Ｗａｉｔ終了で、出力処理状態一致処理Ｓ９００を完了し、次の出力多数決処理Ｓ１０００を実行する。
＜出力多数決処理のフローチャート（図２０）＞
図２０は入出力同期部３１０の実行結果決定処理Ｓ１１６の一部分である、出力多数決処理Ｓ１０００の一例を示すフローチャートである。出力多数決処理Ｓ１０００では、各計算機ノード１００が算出したアプリケーション２００の処理結果の多数決判定を行う。【０１２７】
入出力同期部３１０は出力多数決処理Ｓ１０００を開始すると、初めに「受信結果リスト」中の各計算機ノード１００が算出したアプリケーション２００の処理結果の中に、過半数の計算機ノード１００に共通して存在する処理結果（「多数決同意出力」と称する）が存在するか、その有無を判定する（Ｓ１００１）。ここで過半数とは、計算機ノード構成テーブル３１７に現時点で登録されている計算機ノードの数の過半数であっても良いし、同期システム１に存在する計算機ノードの数の過半数であっても良い。【０１２８】
多数決同意出力が存在しない場合（Ｓ１００１の結果が「Ｎ」）、アプリケーション２００の処理結果の多数決判定が不能ということになり、入出力同期部３１０はＳ１００２を起動する。【０１２９】
Ｓ１００２は「受信結果リスト」中の計算機ノード１００総数と、計算機ノード構成管理テーブル３１７の入力同期時計算機ノード総数３１７Ａを比較する。総数が一致する場合（Ｓ１００２の結果が「Ｙ」）、各計算機ノード１００が算出したアプリケーション２００の処理結果に二つとして同じものが無かったという事になり、入出力同期部３１０はＳ１００３を起動して基盤ソフトウェア３００の処理を終了させる。総数が一致しない場合（Ｓ１００２の結果が「Ｎ」）、まだアプリケーション２００の処理結果を受信していない計算機ノード１００が存在するため、入出力同期部３１０はＳ８０６の他計算機ノード１００からのアプリケーション２００処理結果の受信処理から、出力処理状態一致処理Ｓ９００を再開する。【０１３０】
一方、多数決同意出力が存在する場合（Ｓ１００１の結果が「Ｙ」）、入出力同期部３１０はＳ１００５を起動して自計算機ノード１００のアプリケーション２００の処理結果が多数派に属するかを判定する。自計算機ノード１００が多数派に属する場合（Ｓ１００５の結果が「Ｙ」）、入出力同期部３１０は出力多数決処理Ｓ１０００を完了し、次のリーダー選出処理Ｓ１１００を実行する。自計算機ノード１００が少数派に属する場合（Ｓ１００５の結果が「Ｎ」）、自計算機ノード１００は多数派の計算機ノード１００とは異なる処理結果を導いたという事になり、端末２への結果出力を行う「リーダー」にも結果出力の監視を行う「モニター」にもなり得ないため入出力同期部３１０は今周期の処理からは外れ、次周期に向けて再同期処理Ｓ１１８を起動する。
＜リーダー選出処理のフローチャート（図２１）＞
図２１は入出力同期部３１０の実行結果決定処理Ｓ１１６の一部分である、リーダー選出処理Ｓ１１００の一例を示すフローチャートである。リーダー選出処理Ｓ１１００は、端末２への結果出力を行う「リーダー」候補となる計算機ノード１００の選出を行う。【０１３１】
入出力同期部３１０はリーダー選出処理Ｓ１１００を開始すると、初めに処理状態記憶部３１１の計算機ノード処理状態テーブル７００の付加情報７０２を「LEADER」に、処理状態７０４を「BEGIN」に変更する（Ｓ１１０１）。【０１３２】
次に入出力同期部３１０は、受信結果リストより「リーダー」候補となる計算機ノード１００を選出し、順位を決定し、「リーダー選出結果」を作成する。選出及び順位の決定方法は、一例として、計算機ノード処理状態テーブル７００のPenalty７０３の値が０でありノード間通信パケット６００の計算機ノード識別子６０１が最も大きな値を持つ順に「リーダー」候補を決定する方法があげられる。（Ｓ１１０２）
次に入出力同期部３１０は、入出力決定処理カウンタ３１５を取得しノード間通信パケット６００の入出力決定処理カウンタ６０２に設定する（Ｓ１１０３）。またＳ１１０２の「リーダー選出結果」をノード間通信パケット６００の計算機ノード処理状態個別詳細情報６０４に設定する（Ｓ１１０４）。【０１３３】
次に入出力同期部３１０は、Ｓ１１０４で作成したノード間通信パケット６００をノード間通信Ｉ／Ｆ１０５経由で他の計算機ノード１００にマルチキャストで送信する（Ｓ１１０５）。【０１３４】
次に入出力同期部３１０は、他計算機ノード１００からのノード間通信パケット６００の到着を待つために、タイムアウトまでＷａｉｔする（Ｓ１１０６）。【０１３５】
Ｓ１１０７で他計算機ノード１００からのノード間通信パケット６００を取得すると、入出力同期部３１０はＳ１１０８で自他計算機ノード１００のノード間通信パケット６００を結合し、「受信結果リスト」を作成する。「受信結果リスト」は自他計算機ノード１００が決定した「リーダー選出結果」を含む。【０１３６】
Ｓ１１０９で入出力同期部３１０は、計算機ノード構成管理テーブル３１７に「受信結果リスト」内容を反映して、リーダー選出処理Ｓ１１００を完了し、次のリーダー処理状態一致化処理Ｓ１２００を実行する。
＜リーダー処理状態一致化処理のフローチャート（図２２）＞
図２２は入出力同期部３１０の実行結果決定処理Ｓ１１６の一部分である、リーダー処理状態一致化処理Ｓ１２００の一例を示すフローチャートである。リーダー処理状態一致化処理Ｓ１２００は、計算機ノード１００間でリーダー選出処理の完了状態を一致させる処理を行う。【０１３７】
入出力同期部３１０はリーダー処理状態一致化処理Ｓ１２００を開始すると、初めに入出力決定処理カウンタ３１５と、Ｓ１１０７で他の計算機ノード１００から受信したノード間通信パケット６００の入出力決定処理カウンタ６０２を比較し、自他計算機ノード１００の入出力決定処理カウンタ３１５の値が一致しているかを判定する。受信したノード間通信パケット６００は複数個になることがあるため、Ｓ１２０２は「多数決判定」を行う（Ｓ１２０１およびＳ１２０２）。【０１３８】
自計算機ノード１００が少数派に分類される場合（Ｓ１２０２の結果が「Ｎ」）、多数派の計算機ノード１００と処理周期が異なるため、入出力同期部３１０は再同期処理Ｓ１１８を実行する。【０１３９】
自計算機ノード１００が多数派に分類される場合（Ｓ１２０２の結果が「Ｙ」）、処理周期が一致しているとして、入出力同期部３１０は継続するＳ１２０４を実行する。【０１４０】
次に入出力同期部３１０は入出力同期部３１０は自計算機ノード１００が他の計算機ノード１００と計算機ノード処理状態が一致しているかを比較する。ここでの「比較」も「多数決判定」のことである。計算機ノード処理状態の比較は、他計算機ノード１００から受信したノード間通信パケット６００の計算機ノード処理状態６０３（構成列は計算機ノード処理状態テーブル７００と同じ）と自計算機ノード１００の計算機ノード処理状態テーブル７００の値（処理状態識別子７０１、付加情報７０２、処理状態７０４）を比較することで行う（Ｓ１２０４およびＳ１２０５）。【０１４１】
自計算機ノード１００が少数派に分類される場合（Ｓ１２０５の結果が「Ｎ」）、他の計算機ノード１００と共にアプリケーション２００の処理結果を端末２に出力し得る状態に遷移出来ないため、入出力同期部３１０は処理周期を離れて再同期処理Ｓ１１８を実行する。【０１４２】
自計算機ノード１００が多数派に分類される場合（Ｓ１２０５の結果が「Ｙ」）、入出力同期部３１０は次のＳ１２０６を実行する。【０１４３】
次に入出力同期部３１０は自計算機ノード処理状態テーブル７００の処理状態７０４を「END」に変更する。各計算機ノード１００は、それぞれの計算機ノード１００の入出力同期部３１０が「リーダー選出結果」の共有が完了した状態となる（Ｓ１２０６）。【０１４４】
次に入出力同期部３１０は、計算機ノード処理状態テーブル７００値及び「受信結果リスト」を設定したノード間通信パケット６００を、ノード間通信Ｉ／Ｆ１０５経由で他計算機ノード１００にマルチキャストで送信する（Ｓ１２０７）。【０１４５】
次に入出力同期部３１０は他計算機ノード１００からのノード間通信パケット６００の到着を待つために、タイムアウトまでＷａｉｔする（Ｓ１２０８）。【０１４６】
Ｗａｉｔ終了で、入出力同期部３１０はリーダー処理状態一致化処理Ｓ１２００を完了し、次のボーター処理Ｓ１３００を実行する。
＜ボーター処理のフローチャート（図２３）＞
図２３は入出力同期部３１０の実行結果決定処理Ｓ１１６の一部分である、ボーター処理Ｓ１３００の一例を示すフローチャートである。【０１４７】
ボーター処理Ｓ１３００では、リーダー選出処理Ｓ１１００で決定した「リーダー選出結果」に従い「リーダー」役と「モニター」役の計算機ノード１００を決定する。「リーダー」役の計算機ノード１００は出力多数決決定処理Ｓ１０００で得た「多数決同意出力」を端末２に出力し、出力状態を「モニター」役の計算機ノード１００が監視する。出力状態に異常が認められた場合、「モニター」役の計算機ノード１００の中から新たな「リーダー」計算機ノード１００を決定し、「多数決同意出力」の端末２への出力を再実行する（出力異常処理Ｓ１４００）。出力異常処理Ｓ１４００の詳細は図２４と共に後述する。【０１４８】
入出力同期部３１０はボーター処理Ｓ１３００を開始すると、初めにＳ１２０７で送受信した「リーダー選出結果」の「受信結果リスト」内容で、決定出力管理テーブル３２１の構成列（出力同期時計算機ノード総数３２１Ａ、順位３２１Ｂ、計算機ノード識別子３２１Ｃ、入出力決定処理カウンタ３２１Ｄ、計算機ノード処理状態３２１Ｅ）及び出力同期時計算機ノード総数３２１Ａの値を更新する（Ｓ１３０１）。【０１４９】
次に入出力同期部３１０は、決定出力管理テーブル３２１の順位３２１Ｂ及び計算機ノード識別子３２１Ｃの値より、自計算機ノード１００が「リーダー」であるかを判定する（Ｓ１３０２）。【０１５０】
自計算機ノード１００が「リーダー」であると判定される場合（Ｓ１３０２の結果が「Ｙ」）、「リーダー」として動作するために、入出力同期部３１０はＳ１３０４を実行する。自計算機ノード１００が「リーダー」であると判定されない場合（Ｓ１３０２の結果が「Ｎ」）、「モニター」として動作するために、入出力同期部３１０はＳ１３０３を実行する。【０１５１】
「リーダー」計算機ノード１００は、処理状態記憶部３１１の計算機ノード処理状態テーブル７００の付加情報７０２を「VOTER」に更新し、また処理状態７０４を「LEADER」に更新することで、「リーダー」動作を開始する（Ｓ１３０４）。そして入出力決定処理カウンタ３１５の値を「１」増加させる（Ｓ１３０５）。【０１５２】
次にノード間通信パケット６００の入出力決定処理カウンタ６０２にＳ１３０５で更新した入出力決定処理カウンタ３１５値を設定し、計算機ノード処理状態６０３にはＳ１３０４で更新した計算機ノード処理状態テーブル７００値を設定する（Ｓ１３０６）。【０１５３】
次にノード間通信パケット６００をノード間通信Ｉ／Ｆ１０５経由で他の計算機ノード１００にマルチキャストで送信し、自計算機ノード１００が「リーダー」であることを通知する（Ｓ１３０７）。そして他の計算機ノード１００からのノード間通信パケット６００の到着を待つために、タイムアウトまでＷａｉｔする（Ｓ１３０８）。【０１５４】
Ｗａｉｔ終了後、アプリケーション２００の処理結果を外部通信I／F１０４経由で端末２にマルチキャストで送信する。マルチキャストによる送信であるため、アプリケーション２００の処理結果は、「モニター」計算機ノード１００の外部通信I／F１０４にも到達する（Ｓ１３０９）。【０１５５】
「リーダー」計算機ノード１００は、端末２に送信することで「リーダー」動作を終了し、以上でボーター処理Ｓ１３００を完了して次の再同期検知処理Ｓ１１１を実行する。【０１５６】
「モニター」計算機ノード１００は、処理状態記憶部３１１の計算機ノード処理状態テーブル７００の付加情報７０２を「VOTER」に更新して、また処理状態７０４を「MONITOR」に更新することで、「モニター」動作を開始する（Ｓ１３１１）。そして入出力決定処理カウンタ３１５の値を「１」増加させる（Ｓ１３１２）。【０１５７】
次にノード間通信パケット６００の入出力決定処理カウンタ６０２にＳ１３１２で更新した入出力決定処理カウンタ３１５値を設定し、計算機ノード処理状態６０３にはＳ１３１１で更新した計算機ノード処理状態テーブル７００値を設定する（Ｓ１３１３）。【０１５８】
次にノード間通信パケット６００をノード間通信Ｉ／Ｆ１０５経由で他の計算機ノード１００にマルチキャストで送信し、自計算機ノード１００が「モニター」であることを通知する（Ｓ１３１４）。そして他の計算機ノード１００からのノード間通信パケット６００の到着を待つために、タイムアウトまでＷａｉｔする（Ｓ１３１５）。【０１５９】
Ｗａｉｔ終了後、「リーダー」計算機ノード１００によるアプリケーション２００の処理結果送信状態を、「モニター」計算機ノード１００の外部通信I／F１０４経由で監視し、異常が発生していないかを判別する（Ｓ１３１６およびＳ１３１７）。【０１６０】
「リーダー」計算機ノード１００の処理結果送信に異常が確認できる場合（Ｓ１３１７の結果が「Ｙ」）、出力異常処理Ｓ１４００を起動し、端末２へのアプリケーション２００の処理結果送信をリトライする。【０１６１】
「リーダー」計算機ノード１００の処理結果送信に異常が確認できない場合（Ｓ１３１７の結果が「Ｎ」）、「モニター」動作を終了し、ボーター処理Ｓ１３００を完了して次の再同期検知処理Ｓ１１１を実行する。
＜出力異常処理のフローチャート（図２４）＞
図２４は入出力同期部３１０の実行結果決定処理Ｓ１１６の一部分である、出力異常処理Ｓ１４００の一例を示すフローチャートである。出力異常処理Ｓ１４００は、ボーター処理Ｓ１３００のＳ１３１６で端末２へのアプリケーション２００の処理結果送信に異常が認められた場合に起動される。【０１６２】
出力異常処理Ｓ１４００はボーター処理Ｓ１３００のリトライ処理であるため、ほぼボーター処理Ｓ１３００と同様の処理を実行する。しかしリトライ処理であるため、「リーダー」計算機ノード１００、「モニター」計算機ノード１００共に入出力決定処理カウンタ３１５の値は変更しない。【０１６３】
入出力同期部３１０は出力異常処理Ｓ１４００を開始すると、初めに決定出力管理テーブル３２１から「リーダー」計算機ノード１００（ボーター処理Ｓ１３００で「リーダー」と判定された計算機ノード１００）の情報を削除する（Ｓ１４０１）。【０１６４】
次に入出力同期部３１０は、更新された決定出力管理テーブル３２１の順位３２１Ｂ及び計算機ノード識別子３２１Ｃの値より、自計算機ノード１００が次の「リーダー」であるかを判定する（Ｓ１４０２およびＳ１４０３）。【０１６５】
自計算機ノード１００が「リーダー」であると判定される場合（Ｓ１４０３の結果が「Ｙ」）、「リーダー」として動作するために、入出力同期部３１０はＳ１４０５を実行する。自計算機ノード１００が「リーダー」であると判定されない場合（Ｓ１４０３の結果が「Ｎ」）、「モニター」として動作するために、入出力同期部３１０はＳ１４０４を実行する。【０１６６】
「リーダー」計算機ノード１００としての動作（Ｓ１４０５からＳ１４１０までの処理、及び再同期検知処理Ｓ１１１の起動）は、ボーター処理Ｓ１３００の「リーダー」動作（Ｓ１３０４からＳ１３０９までの処理、及び再同期検知処理Ｓ１１１の起動）と基本的に同様であるが、Ｓ１４０６とＳ１３０５のみ異なる。出力異常処理Ｓ１４００では入出力決定処理カウンタ３１５値は変更しない（Ｓ１４０６の点線枠は実行しないことを意味する）。【０１６７】
「モニター」計算機ノード１００としての動作（Ｓ１４０４以降の処理）も、ボーター処理Ｓ１３００の「モニター」動作（Ｓ１３０３からＳ１３１７までの処理、及び出力異常処理Ｓ１４００または再同期検知処理Ｓ１１１の起動）と基本的に同様であるが、Ｓ１４１１とＳ１３１２のみ異なる。出力異常処理Ｓ１４００では入出力決定処理カウンタ３１５値は変更しない（Ｓ１４１１の点線枠は実行しないことを意味する）。
＜再同期検知処理および再同期処理のフローチャート（図２５）＞
図２５は再同期検知処理Ｓ１１１および再同期処理Ｓ１１８の一例を示すフローチャートである。再同期検知処理Ｓ１１１は同期システムとして協調動作している系の中に居る計算機ノード１００の入出力同期部３１０が、協調動作の系への参入を要求する計算機ノード１００を検出し、参入を受け入れる処理を行う。再同期処理Ｓ１１８は同期システムとして協調動作している系の外に居る計算機ノード１００の入出力同期部３１０が、協調動作の系への参入を要求し、参入を果たすまでの処理を行う。協調動作の系への参入を要求することを「再同期要求」と称する。【０１６８】
再同期検知処理Ｓ１１１と再同期処理Ｓ１１８はそれぞれがREJOIN-REQのノード間通信パケット（詳細は図２６に示す）、REJOIN-ACKのノード間通信パケット（詳細は図２６に示す）、JOINEDのノード間通信パケット（詳細は図２６に示す）を送受信することで、歩調を合わせて処理を進める。【０１６９】
図２６に一例として示す「REJOIN-REQのノード間通信パケット」は、再同期要求を行う計算機ノード１００が送信するノード間通信パケット６００の例である。計算機ノード処理状態６０３である計算機ノード処理状態テーブル７００の処理状態識別子７０１と処理状態７０４には「REJOIN-REQ」が設定される。入出力決定処理カウンタ６０２は初期値（例えば「０」）のままで、入出力決定処理カウンタ３１５値は設定されない。【０１７０】
図２６に一例として示す「REJOIN-ACKのノード間通信パケット」は再同期要求を受領した計算機ノード１００が要求側に返信するノード間通信パケット６００の例である。計算機ノード処理状態６０３である計算機ノード処理状態テーブル７００の処理状態識別子７０１と処理状態７０４には「REJOIN-ACK」が設定される。また再同期要求を受領した計算機ノード１００が保持する入出力決定処理カウンタ３１５値が入出力決定処理カウンタ６０２に設定され、決定入力管理テーブル８００情報と外部入力パケット記憶部３０１の外部入力パケット管理テーブル５５０情報が計算機ノード処理状態個別詳細情報６０４に設定される。【０１７１】
図２６に一例として示す「JOINEDのノード間通信パケット」は「REJOIN-ACKのノード間通信パケット」を受取った計算機ノード１００が同期システムとして協調動作している系への参入を果たした事を、他の計算機ノード１００に通知するために送信するノード間通信パケット６００の例である。計算機ノード処理状態６０３である計算機ノード処理状態テーブル７００の処理状態識別子７０１と処理状態７０４には「JOINED」が設定される。【０１７２】
図２５に戻って、再同期検知処理Ｓ１１１の詳細を示す。【０１７３】
入出力同期部３１０は再同期検知処理Ｓ１１１を開始すると、初めに決定出力管理テーブル３２１の出力同期時計算機ノード総数３２１Ａで、計算機ノード構成管理テーブル３１７の入力同期時計算機ノード総数３１７Ａを更新する（Ｓ１１１１）。【０１７４】
次に入出力同期部３１０は、処理状態記憶部３１１の計算機ノード処理状態テーブル７００の処理状態識別子７０１を「REJOIN-WAIT」に設定し、処理状態７０４を「REJOIN-WAIT」に設定することで、再同期要求を受付ける処理状態になる（Ｓ１１１２）。【０１７５】
次に入出力同期部３１０は、他の計算機ノード１００からの再同期要求である、再同期処理Ｓ１１８のＳ１１８３により送信された「REJOIN-REQのノード間通信パケット」の到着を期待して、タイムアウトまでＷａｉｔする（Ｓ１１１３）。【０１７６】
再同期要求が検出されなかった場合（Ｓ１１１４の結果が「Ｎ」）、再同期検知処理Ｓ１１１を終了して入力同期処理を開始するために入出力同期部３１０はＳ１１２を起動する。再同期要求を検出した場合（Ｓ１１１４の結果が「Ｙ」）、再同期要求に応答するために入出力同期部３１０はＳ１１１５を起動する。【０１７７】
Ｓ１１１５では、入出力同期部３１０は、処理状態記憶部３１１の計算機ノード処理状態テーブル７００の処理状態識別子７０１を「REJOIN-ACK」に設定し、処理状態７０４を「REJOIN-ACK」に設定する。計算機ノード１００は再同期要求に応答する計算機ノード処理状態に遷移する。【０１７８】
次に入出力同期部３１０は、「REJOIN-ACKのノード間通信パケット」を作成するために、入出力決定処理カウンタ３１５値をノード間通信パケット６００の入出力決定処理カウンタ６０２に設定し、計算機ノード処理状態テーブル７００情報を計算機ノード処理状態６０３に設定する（Ｓ１１１６）。また決定入力管理テーブル８００情報と外部入力パケット記憶部３０１の外部入力パケット管理テーブル５５０情報を計算機ノード処理状態個別詳細情報６０４に設定する（Ｓ１１１７）。【０１７９】
作成した「REJOIN-ACKのノード間通信パケット」はノード間通信Ｉ／Ｆ１０５経由でマルチキャストで送信される。当該「REJOIN-ACKのノード間通信パケット」は、再同期要求を行った計算機ノード１００で処理中の、再同期処理Ｓ１１８のＳ１１８５で受信されることを期待する。（Ｓ１１１８）
次に入出力同期部３１０は、再同期要求を行った計算機ノード１００の再同期処理Ｓ１１８のＳ１１８１０から「JOINEDのノード間通信パケット」が到着することを期待して、タイムアウトまでＷａｉｔする（Ｓ１１１９）。【０１８０】
「JOINEDのノード間通信パケット」が受信されなかった場合（Ｓ１１２０の結果が「Ｎ」）、再同期要求を行った計算機ノード１００の再同期処理Ｓ１１８は失敗したと判断して、入出力同期部３１０は再同期検知処理Ｓ１１１を終了して入力同期処理を開始するためにＳ１１２を起動する。【０１８１】
「JOINEDのノード間通信パケット」が受信された場合（Ｓ１１２０の結果が「Ｙ」）、入出力同期部３１０はＳ１１２１で計算機ノード構成管理テーブル３１７の入力同期時計算機ノード総数３１７Ａを更新した後、再同期検知処理Ｓ１１１を終了して入力同期処理を開始するためにＳ１１２を起動する。【０１８２】
再同期処理Ｓ１１８の詳細を示す。【０１８３】
再同期要求を行う計算機ノード１００の入出力同期部３１０は、初めに処理状態記憶部３１１の計算機ノード処理状態テーブル７００の処理状態識別子７０１に「REJOIN-REQ」を設定し、処理状態７０４に「REJOIN-REQ」を設定設定することで、再同期要求を行う処理状態になる（Ｓ１１８１）。【０１８４】
次に入出力同期部３１０は、「REJOIN-REQのノード間通信パケット」を作成するために、ノード間通信パケット６００の計算機ノード処理状態６０３に計算機ノード処理状態テーブル７００情報を設定する（Ｓ１１８２）。【０１８５】
作成した「REJOIN-REQのノード間通信パケット」はノード間通信Ｉ／Ｆ１０５経由でマルチキャストで送信される。当該「REJOIN-REQのノード間通信パケット」は協調動作している系の中に居る計算機ノード１００が実行している再同期検知処理Ｓ１１１のＳ１１１４で受信されることを期待する。（Ｓ１１８３）
次に再同期要求に対する「REJOIN-ACKのノード間通信パケット」が返信されてくることを期待して、入出力同期部３１０はタイムアウトまでＷａｉｔする（Ｓ１１８４）。【０１８６】
「REJOIN-ACKのノード間通信パケット」が受信されない場合（Ｓ１１８５の結果が「Ｎ」）、再同期要求をリトライするため、入出力同期部３１０はＳ１１８１を起動する。「REJOIN-ACKのノード間通信パケット」が受信される場合（Ｓ１１８５の結果が「Ｙ」）、入出力同期部３１０はＳ１１８６を起動する。【０１８７】
Ｓ１１８６では入出力同期部３１０は、「REJOIN-ACKのノード間通信パケット」の入出力決定処理カウンタ６０２値を入出力決定処理カウンタ３１５に設定し、他計算機ノード１００と処理周期を一致させる（Ｓ１１８６）。【０１８８】
次に入出力同期部３１０は、「REJOIN-ACKのノード間通信パケット」の計算機ノード処理状態個別詳細情報６０４に設定された決定入力管理テーブル８００情報を取得して自計算機ノード１００の決定入力記憶部３１４の決定入力管理テーブル８００に設定し、同じく外部入力パケット管理テーブル５５０情報を取得して外部入力パケット記憶部３０１の外部入力パケット管理テーブル５５０に設定する（Ｓ１１８７）。【０１８９】
次に入出力同期部３１０は、処理状態記憶部３１１の計算機ノード処理状態テーブル７００の処理状態識別子７０１を「JOINED」に更新し、処理状態７０４を「JOINED」に更新して、自計算機ノード１００は再同期が完了した計算機ノード処理状態に遷移する（Ｓ１１８８）。【０１９０】
次に入出力同期部３１０は、「JOINEDのノード間通信パケット」を作成するために、ノード間通信パケット６００の計算機ノード処理状態６０３に計算機ノード処理状態テーブル７００情報を設定する（Ｓ１１８９）。【０１９１】
作成した「JOINEDのノード間通信パケット」はノード間通信Ｉ／Ｆ１０５経由でマルチキャストで送信される。当該「JOINEDのノード間通信パケット」は「REJOIN-ACKのノード間通信パケット」を返信した計算機ノード１００が実行している再同期検知処理Ｓ１１１のＳ１１２０で受信されることを期待する。（Ｓ１１９０）
「JOINEDのノード間通信パケット」を送信した後、入出力同期部３１０は再同期処理Ｓ１１８を完了して入力同期処理を開始するためにＳ１１２を起動する。
＜ケースを想定した実施態様＞
以降の説明では、処理対象入力パケット選定処理Ｓ１１４（入力多数決処理Ｓ６００までの一連の処理）と実行結果決定処理Ｓ１１６（および出力異常処理Ｓ１４００までの一連の処理）について、想定されるケースを当てはめることで、これまでの説明を補足する。具体的には、計算機ノード処理状態の経過に伴う計算機ノード１００の内部に保持される各テーブル状態や計算機ノード１００間で送受信されるノード間通信パケット６００情報内容の変化を示す。【０１９２】
補足説明における同期システム１は、三台の計算機ノード１００Ａ、計算機ノード１００Ｂ、計算機ノード１００Ｃから構成されるものとするがこれは一例に過ぎない。【０１９３】
処理対象入力パケット選定処理Ｓ１１４（入力多数決処理Ｓ６００までの一連の処理）については、二つのケースを当てはめて補足説明する。実行結果決定処理Ｓ１１６（出力異常処理Ｓ１４００までの一連の処理）については、一つケースを当てはめて補足説明する。【０１９４】
処理対象入力パケット選定処理Ｓ１１４の一つ目の補足説明では、計算機ノード１００Ｂにだけ端末２からの外部入力パケット５００の到達が遅延（「外部遅延」と称する）したケース（以下ケースＡと称す）を想定し、この結果一回目の外部入力パケット５００の情報の取り出しでは「多数決同意入力パケット」が決定できず、二回目の外部入力パケット５００の情報の取り出しで「多数決同意入力パケット」が決定できて、以降の処理が実行される例を説明する。【０１９５】
処理対象入力パケット選定処理Ｓ１１４の二つ目の補足説明では、計算機ノード１００Ｂへの外部遅延の発生に加えて、計算機ノード１００Ｃの処理開始契機が他の計算機ノード１００Ａ、１００Ｂより遅れる（「内部遅延」と称する）ケース（以下ケースＢと称す）を想定し、この結果一回目の外部入力パケット５００の情報の取り出しにおける「多数決同意入力パケット」の決定処理には計算機ノード１００Ｃは参加せず、なおかつ計算機ノード１００Ａ、１００Ｂの間でも「多数決同意入力パケット」の決定が出来ず、二回目の外部入力パケット５００の情報の取り出しで「多数決同意入力パケット」が決定出来て、以降の処理が実行される例を説明する。【０１９６】
実行結果決定処理Ｓ１１６の補足説では、計算機ノード１００Ｃの処理開始契機が遅れるケース（以下ケースＣと称す）を想定し、この結果アプリケーション２００の実行結果を計算機ノード１００Ａ、１００Ｂ、１００Ｃの間で共有させる処理（計算機ノード処理状態が「OUTPUT」）に計算機ノード１００Ｃは途中参加することとなり、Ｓ１１６〜Ｓ１４００の処理が実行される例を説明する。
＜外部遅延発生時の処理対象入力パケット選定処理（ケースＡ）＞
ケースＡにおける補足説明は図２７、図２８、図２９、図３０、図３１、図３２、図３３を用いて行う。【０１９７】
図２７は各計算機ノード１００A、１００B、１００Cの処理シーケンスの一例を示す。時間Ｔ１は処理対象入力パケット選定処理のＳ３００からＳ６０２に対応し、時間Ｔ２は次の処理周期におけるＳ３００からＳ５０９に対応し、時間Ｔ３は時間T２の処理結果を受けて実行されるＳ６０１からＳ６１１に対応する。また送信９０１はＳ４０２に対応し、ＴＯ９０２はＳ４０３に対応し、リスト作成９０３はＳ４０４からＳ５０８に対応し、ＴＯ９０４はＳ５０９に対応し、送信９０５はＳ４０２に対応し、ＴＯ９０６はＳ４０３に対応し、リスト作成９０７はＳ４０４からＳ５０８に対応し、ＴＯ９０８はＳ５０９に対応し、多数決定９０９はＳ６０１に対応し、状態更新９１０はＳ６０４からＳ６０９に対応し、送信９１１はＳ６１１に対応する。【０１９８】
図２８は各計算機ノードの外部入力パケット管理テーブル、計算機ノード処理状態テーブル、入出力決定処理カウンタの時間別の内容を示す。列９１２は計算機ノード１００Ａの状態であり、構成列のＳＥQ９１５は外部入力パケット管理テーブル５５０のシーケンス番号５０２を示し、ＷＳ９１６は計算機ノード処理状態テーブル７００の入力同期ステップ７１０を示し、ＳＴ９１７は計算機ノード処理状態テーブル７００の処理状態７０４を示し、ＣＮＴ９１８は入出力決定処理カウンタ３１５を示す。列９１３は計算機ノード１００Ｂの状態を示し、列９１４は計算機ノード１００Ｃの状態を示し、構成列は計算機ノードAの情報と同様である。行９２０は時間Ｔ１における状態を示し、行９２１は時間Ｔ２における状態を示し、行９２２は時間Ｔ３における状態を示す。【０１９９】
図２９は図２７に示す「送信」に対する各計算機ノードのノード間通信パケット６００の時間別内容を示す。行９４０は時間Ｔ１の送信９０１に対するノード間通信パケット６００内容を示し、構成行の行９４３は計算機ノード１００Ａの送信内容を示し、行９４４は計算機ノード１００Ｂの送信内容を示し、行９４５は計算機ノード１００Ｃの送信内容を示す。行９４１は時間Ｔ２の送信９０５に対するノード間通信パケット６００内容を示し、行９４２は時間Ｔ３の送信９１１に対するノード間通信パケット６００内容を示し、構成行は行９４０と同様である。【０２００】
図３０は図２７に示す「リスト作成」に対する各計算機ノードのノード間通信パケット６００の時間別内容を示す。行９６０は時間Ｔ１のリスト作成９０３に対するノード間通信パケット６００内容を示し、これは「送信」処理にて送受信したノード間通信パケット６００を結合した「受信結果リスト」を表す。構成行の行９６２は計算機ノード１００Ａの「送信」内容を示し、行９６３は計算機ノード１００Ｂの「送信」内容を示し、行９６４は計算機ノード１００Ｃの「送信」内容を示す。行９６１は時間Ｔ２のリスト作成９０７に対するノード間通信パケット６００内容を示し、構成行は行９６０と同様である。【０２０１】
図３１は任意の計算機ノードの計算機ノード構成管理テーブル３１７の時間別内容を示す。時間別内容は、計算機ノード１００A、１００B、１００Cにおいて同一である。行９８０は時間Ｔ１における計算機ノード構成管理テーブル３１７の計算機ノード識別子６０１列、入出力決定処理カウンタ６０２列、計算機ノード処理状態６０３列の状態を示す。行９８１は時間Ｔ２における計算機ノード構成管理テーブル３１７の保持情報を示し、行９８２はＴ３における計算機ノード構成管理テーブル３１７の保持情報を示す。【０２０２】
図３２は各計算機ノードの決定入力管理テーブル８００の内容を示す。図３３は計算機ノード１００Ｂの決定済み入力管理テーブル８１０の内容を示す。【０２０３】
次に図２７の処理シーケンスを追って、各計算機ノード１００A、１００B、１００Cの処理状態変化を説明する。【０２０４】
時間Ｔ１において、各計算機ノード１００A、１００B、１００Cは図２８の行９２０の状態で処理を開始する。計算機ノード１００Aは、ＷＳ９２４として「２」、ＳＴ９２５として「BEGIN」、ＣＮＴ９２６として「Ｃ０１０」の値を保持する。計算機ノード１００B、１００Cにおいても同値である。しかし外部入力パケット管理テーブル５５０のに保存している外部入力パケットの情報が異なる。具体的には計算機ノード１００Aはシーケンス番号が「２Ａ−１」と「２Ｂ−１」である外部入力パケット５００を受信して外部入力パケット管理テーブル５５０に当該パケットの情報を登録しているのに対し（枠９３０）、計算機ノード１００Bには外部入力パケット５００が到達していないので外部入力パケット管理テーブル５５０には外部入力パケットの情報が登録されておらず（枠９３１）、計算機ノード１００Ｃはシーケンス番号が「２Ｃ−１」である外部入力パケットのみを受信しているので、当該パケットの情報のみを外部入力パケット管理テーブル５５０に保持している（枠９３２）。尚、外部入力パケット５００の情報が登録されていない状態は「０」で示す。【０２０５】
送信９０１では、各計算機ノード１００Ａ、１００Ｂ、１００Ｃは各々、自身が外部ネットワーク３から取得（受信）した外部入力パケット５００の情報をノード間通信パケット６００の計算機ノード処理状態個別詳細情報６０４に設定して送出する。送出されたノード間通信パケット６００の内容は図２９の時間Ｔ１に示す（行９４０）。計算機ノード１００ＡはＷＳ９２４の値に従い二つの外部入力パケット５００（シーケンス番号「２Ａ−１」と「２Ｂ−１」の外部入力パケット）の情報を取得してノード間通信パケット６００に設定する（行９４３）。計算機ノード１００Ｂ、１００Ｃも二つの外部入力パケット５００の情報を取得しようとする。しかし、計算機ノード１００Ｂは外部入力パケットを受信していないため外部入力パケット５００の情報無しを示す「０」を二つノード間通信パケット６００に設定し（行９４４）、計算機ノード１００Ｃは取得できた一つの外部入力パケット５００（シーケンス番号「２Ｃ−１」の外部入力パケット）の情報ともう一つは「０」をノード間通信パケット６００に設定する（行９４５）。  
リスト作成９０３では送信９０１で送受信したノード間通信パケット６００を結合して「受信結果リスト」を作成し、各計算機ノード１００Ａ、１００Ｂ、１００Ｃ間で送受信することで計算機ノード間で保持する「受信結果リスト」内容を一致化させる。送受信されるノード間通信パケット６００の内容は図３０の時間Ｔ１に示す（行９６０）。【０２０６】
時間Ｔ１内で実行されるＳ６０１では「多数決同意入力パケット」の有無を判定するが、枠９６５には「多数決同意入力パケット」は存在しないため、各計算機ノード１００Ａ、１００Ｂ、１００ＣはＳ６０２で計算機ノード処理状態テーブル７００の入力同期ステップ７１０WSの値を「３」に変更して、次の周期（時間Ｔ２）のＳ３００を起動する。この時の計算機ノード構成管理テーブル３１７の状態を図３１の時間Ｔ１に示す（行９８０）。【０２０７】
時間Ｔ２開始状態の各計算機ノード１００A、１００B、１００Cの状態を図２８の時間Ｔ２に示す（行９２１）。計算機ノード１００AのＷＳ９２４は、時間Ｔ１におけるＳ６０２の実行により、値が「３」に変化しているが、これは計算機ノード１００B、１００Cも同様である。時間Ｔ１の処理を実行中に新たな外部入力パケット５００が到着し、時間Ｔ２開始時点で計算機ノード１００Aにはシーケンス番号「２Ｃ−１」の外部入力パケット５００の情報が外部入力パケット管理テーブル５５０に新たに追加され（枠９３３）、計算機ノード１００Bの外部入力パケット管理テーブル５５０にはシーケンス番号「２Ｂ−１」の外部入力パケット５００の情報が追加され（枠９３４）、計算機ノード１００Cの外部入力パケット管理テーブル５５０にはシーケンス番号「２Ｂ−１」の外部入力パケット５００の情報が追加される（枠９３５）。【０２０８】
送信９０５では各計算機ノード１００A、１００B、１００Cはそれぞれ三つの外部入力パケット５００の情報の取得を試みて、取得された外部入力パケット５００の情報をノード間通信パケット６００に設定して送出する。送出されるノード間通信パケット６００の内容を  図２９の時間Ｔ２に示す（行９４１）。入力同期ステップ７１０の値の変化が計算機ノード処理状態６０３の付加情報７０２に反映され（枠９３６）、計算機ノード処理状態個別詳細情報６０４には三つ分の外部入力パケット５００の情報が設定される（枠９３７）。【０２０９】
またこの時の計算機ノード構成管理テーブル３１７の状態を図３１の時間Ｔ２に示す（行９８１）。付加情報７０２の値が「３」に変更される（枠９８３）。【０２１０】
リスト作成９０７では送信９０５で送受信されたノード間通信パケット６００の内容に基づき各計算機ノードが「受信結果リスト」を作成し、計算機ノード１００Ａ、１００Ｂ、１００Ｃ間で「受信結果リスト」を送受信することで「受信結果リスト」の内容を一致させる。この時に送受信されるノード間通信パケット６００の内容を図３０の時間Ｔ２に示す（行９６１）。Ｓ６０１での「多数決同意入力パケット」の有無の判定において、時間Ｔ２では、シーケンス番号が「２Ｂ−１」と「２Ｃ−１」の外部入力パケットが「多数決同意入力パケット」として判定される（枠９６６）。「多数決同意入力パケット」を確認したことにより、時間Ｔ３の処理へと移る。【０２１１】
時間Ｔ３での多数決定９０９では「多数決同意入力パケット」としてシーケンス番号が「２Ｂ−１」と「２Ｃ−１」の外部入力パケット５００が選出される。【０２１２】
状態更新９１０では各計算機ノードは「多数決同意入力パケット」を基に決定入力管理テーブル８００と入出力決定処理カウンタ３１５の更新を行う。各計算機ノード１００A、１００B、１００Cはシーケンス番号「２Ｂ−１」と「２Ｃ−１」の外部入力パケット５００の情報を決定入力管理テーブル８００に設定する。この時の決定入力管理テーブル８００内容は図３２に示す。また同時にシーケンス番号「２Ｂ−１」と「２Ｃ−１」の外部入力パケット５００の情報を外部入力パケット管理テーブル５５０から削除する。「多数決同意入力パケット」の内、シーケンス番号が「２Ｂ−１」の外部入力パケット５００を外部ネットワーク３経由で自ら受信していない計算機ノード１００Bは、決定済み入力管理テーブル８１０にシーケンス番号が「２Ｂ−１」の外部入力パケット５００の情報をを設定する。この時の決定済み入力管理テーブル８１０の内容は図３３に示す。また各計算機ノード１００A、１００B、１００Cは入出力決定処理カウンタ３１５の値を「Ｃ０１１」に更新し、これが計算機ノード構成管理テーブル３１７に反映される（図３１の枠９８４）。状態更新９１０により、計算機ノード１００A、１００B、１００Cの状態は、図２８の時間Ｔ３（行９２２）の様に変化する。【０２１３】
送信９１１では各計算機ノード１００A、１００B、１００Cがそれぞれ決定したアプリケーション２００の処理対象となる外部入力パケット５００の情報を送受信して、各計算機ノード１００A、１００B、１００C間で共有する。この時送受信されるノード間通信パケット６００の内容は、図２９の時間Ｔ３（行９４２）に示す。
＜処理対象入力パケット選定処理の内部遅延発生の実行例（ケースB）＞
説明は図３４、図３５、図３６、図３７、図３８、図３９、図４０、図４１を用いて行う。【０２１４】
図３４は処理対象入力パケット選定処理の内部遅延発生の実行例における各計算機ノード１００A、１００B、１００Cの処理シーケンスを示す。時間Ｔ１は計算機ノード１００A、１００Bの処理対象入力パケット選定処理のＳ３００からＳ６０２の実行時間に対応し、時間Ｔ１’計算機ノード１００Cの処理対象入力パケット選定処理のＳ３００からＳ６０２の実行時間に対応する。時間Ｔ２はその次の実行周期におけるＳ３００からＳ５０９の実行時間に対応し、時間Ｔ３は時間T2の処理結果に基き実行されるＳ６０１からＳ６１１の実行時間に対応する。また送信１００１および送信１０１２はＳ４０２に対応し、ＴＯ１００２およびＴＯ１０１３はＳ４０３に対応し、リスト作成１００３はＳ４０４からＳ５０８に対応し、ＴＯ１００４はＳ５０９に対応し、送信１００５はＳ４０２に対応し、ＴＯ１００６はＳ４０３に対応し、リスト作成１００７はＳ４０４からＳ５０８に対応し、ＴＯ１００８はＳ５０９に対応し、多数決定１００９はＳ６０１に対応し、状態更新１０１０はＳ６０４からＳ６０９に対応し、送信１０１１はＳ６１１に対応する。【０２１５】
図３５はケースBにおける各計算機ノードの外部入力パケット管理テーブル、計算機ノード処理状態テーブル、入出力決定処理カウンタの時間別内容を示す。列および行の構成は、図２８と同様である。【０２１６】
図３６はケースBにおいて計算機ノード間で各計算機ノードが受信した外部入力パケット５００の内容を交換するために送受信されるノード間通信パケット６００の時間別内容を示す。列構成と行１０４２と行１０４３の行構成は図２９と同様であるが、時間Ｔ１および時間Ｔ１’ の行構成のみ異なっている。行１０４０は時間Ｔ１の送信１００１に対する計算機ノード１００Ａ、１００Ｂのノード間通信パケット６００内容を示し、行１０４１は時間Ｔ１’ の送信１０１２に対する計算機ノード１００Cのノード間通信パケット６００内容を示す。【０２１７】
図３７はケースBにおいて計算機ノード間で各計算機ノードが作成したリストを交換するために送受信されるノード間通信パケット６００の時間別内容を示す。列構成と行１０６１の行構成は図３０と同様であるが、行１０６０の行構成が異なる。行１０６０は時間Ｔ１のリスト作成１００３に対する計算機ノード１００Ａ、１００Ｂのノード間通信パケット６００内容を示す。行１０６４の空行は、計算機ノード１００Ｃがノード間通信を行っていないことを意味する。【０２１８】
図３８はケースBにおける計算機ノード１００Ａ、１００Ｂの計算機ノード構成管理テーブル３１７の時間別内容を示す。列構成と行１０８１と行１０８２の行構成は図３１と同様であるが、行１０８０の行構成が異なる。行１０８０は時間Ｔ１における計算機ノード構成管理テーブル３１７の内容を表し、計算機ノード１００Ａ、１００Ｂの情報のみ保持することを示す。行１０８５の空行は、計算機ノード１００Ｃが計算機ノード構成管理テーブル内に情報を保持していないことを意味する。【０２１９】
図３９はケースBにおける計算機ノード１００Ｃの計算機ノード構成管理テーブル３１７の時間別内容を示す。列構成と行１０９１と行１０９２の行構成は図３１と同様であるが、行１０９０の行構成が異なる。行１０９０は時間Ｔ１’ における計算機ノード構成管理テーブル３１７の内容を表し、計算機ノード１００Ｃの情報のみ保持することを示す。行１０９３および行１０９４の空白は、計算機ノード１００Ａ、１００Ｂが計算機ノード構成管理テーブルに情報を保持していないことを意味する。【０２２０】
図４０はケースBにおける各計算機ノードの決定入力管理テーブル８００の内容を示す。図４１はケースBにおける計算機ノード１００Ｂの決定済み入力管理テーブル８１０の内容を示す。【０２２１】
次に図３４の処理シーケンスを追って、各計算機ノード１００A、１００B、１００Cの処理状態変化を説明する。【０２２２】
時間Ｔ１において、各計算機ノード１００A、１００B、１００Cは図２８の行１０２０の状態で処理を開始する。計算機ノード１００AはＷＳ１０２５は「２」、ＳＴ１０２６は「BEGIN」、ＣＮＴ１０２７は「Ｃ０１０」の値を保持する。計算機ノード１００B、１００Cにおいても同値である。しかし外部入力パケット管理テーブル５５０に保存されている情報の内容が異なり、計算機ノード１００Aはシーケンス番号「２Ａ−１」と「２Ｂ−１」の外部入力パケットの情報を保持し（枠１０３１）、計算機ノード１００Ｂはシーケンス番号「２Ｃ−１」の外部入力パケットの情報のみを保持する（枠１０３２）。外部入力パケット５００の情報を保存していない場合は「０」で示す。計算機ノード１００Ｃは外部入力パケット５００情報を保持していない（枠１０３３）。【０２２３】
送信１００１では、計算機ノード１００Ａ、１００Ｂは取得した外部入力パケット５００の情報をノード間通信パケット６００の計算機ノード処理状態個別詳細情報６０４に設定して送出する。尚時間Ｔ１で計算機ノード１００Cには起動契機となる外部入力パケット５００が到着していないため、計算機ノード１００Ｃは送信１００１は行わない。送出されたノード間通信パケット６００の状態は図３６の時間Ｔ１に示す（行１０４０）。計算機ノード１００ＡはＷＳ１０２５の値に従い二つの外部入力パケット５００の情報（シーケンス番号が「２Ａ−１」と「２Ｂ−１」の外部入力パケットの情報）を取得してノード間通信パケット６００に設定する（行１０４４）。計算機ノード１００Ｂも二つの外部入力パケット５００の情報を取得しようとするが、取得できるのは１つの外部入力パケット５００だけなので、取得できた一つの外部入力パケット５００の情報（シーケンス番号「２Ｃ−１」の外部入力パケットの情報）ともう一つは「０」を設定する（行１０４５）。【０２２４】
時間Ｔ１’ になって、外部入力パケット５００を受信した計算機ノード１００Cは、当該外部入力パケット５００のシーケンス番号を用いて送信１０１２を行う。送出されたノード間通信パケット６００の内容を図３６の時間Ｔ１’ に示す（行１０４６）。【０２２５】
計算機ノード１００Ｃが送信１０１２を行っている間に、計算機ノード１００Ａ、１００Ｂは「受信結果リスト」を作成し、計算機ノード間で送信する（リスト作成１００３）。このリスト作成１００３で送受信するノード間通信パケット６００の内容を図３７の時間Ｔ１に示す（行１０６０）。「受信結果リスト」に計算機ノード１００Ｃが取得した外部入力パケット５００の情報は含まれていない（行１０６４）。【０２２６】
ＴＯ１００４で計算機ノード１００Ａ、１００Ｂは双方が送信１０１２で送信した「受信結果リスト」を取得し、Ｓ６０１で「多数決同意入力パケット」の有無を判定するが、枠１０６５に「多数決同意入力パケット」は存在しないため、計算機ノード１００Ａ、１００ＢはＳ６０２で計算機ノード処理状態テーブル７００の入力同期ステップ７１０の値を「３」に変更して時間Ｔ２内のＳ３００を起動する。【０２２７】
一方計算機ノード１００Ｃは、計算機ノード１００Ａ、１００Ｂから送信１００１で送信されるノード間通信パケット６００の受信を期待してＴＯ１０１３を実行するが、代わりにリスト作成１００３で送信された「受信結果リスト」を受信する。そして計算機ノード１００Cは、Ｓ５０４およびＳ５０５で計算機ノード処理状態の不一致を検出し、Ｓ５０６で計算機ノード処理状態テーブル７００のPenalty７０３の値を「１」に更新する。  計算機ノード１００Ａ、１００Ｂから計算機ノード１００Cが受信した「受信結果リスト」中に「多数決同意入力パケット」をが存在しないため、計算機ノード１００CはＳ６０２で計算機ノード処理状態テーブル７００の入力同期ステップ７１０の値を「３」に変更して時間Ｔ２内のＳ３００を起動する。【０２２８】
時間Ｔ１における計算機ノード１００Ａ、１００Ｂの計算機ノード構成管理テーブル３１７の内容を図３８に示す（行１０８０）。計算機ノード１００Ａ、１００Ｂは計算機ノード１００Ｃの情報を計算機ノード構成管理テーブルに保持していない（行１０８５の空行）。また時間Ｔ１’ における計算機ノード１００Ｃの計算機ノード構成管理テーブル３１７の状態を図３９に示す（行１０９０）。計算機ノード１００Ｃは計算機ノード１００Ａ、１００Ｂの情報は計算機ノード構成管理テーブルに保持していない（行１０９３、行１０９４の空行）。【０２２９】
時間Ｔ２の開始時点における各計算機ノード１００A、１００B、１００Cの状態を図３５の時間Ｔ２に示す（行１０２９）。計算機ノード１００AのＷＳ１０２３は、時間Ｔ１におけるＳ６０２の実行により、値が「３」に変化しているが、これは計算機ノード１００B、１００Cも同様である。計算機ノード１００Ｃには、時間Ｔ１’ の処理中に到着した新たな外部入力パケット５００の情報（シーケンス番号「２Ａ−１」の外部入力パケットの情報）が保持される（枠１０３４）。【０２３０】
送信１００５では各計算機ノード１００A、１００B、１００Cはそれぞれ三つの外部入力パケット５００情報の取得を試みて、取得された外部入力パケット５００情報をノード間通信パケット６００に設定して送出する。送出されるノード間通信パケット６００の状態を図３６の時間Ｔ２に示す（行１０４２）。計算機ノード１００Ｃが送出したノード間通信パケット６００には、時間Ｔ１’ のＳ５０６で更新されたPenalty７０３の値「１」が保持される（枠１０４７）。【０２３１】
リスト作成１００７では送信１００５で送受信されたノード間通信パケット６００から「受信結果リスト」を作成し、各計算機ノード１００Ａ、１００Ｂ、１００Ｃ間で「受信結果リスト」内容を一致化させる。この時に送受信されるノード間通信パケット６００の内容を図３７の時間Ｔ２に示す（行１０６１）。Ｓ６０１での「多数決同意入力パケット」の有無を判定において、時間Ｔ２では、シーケンス番号「２Ａ−１」の外部入力パケットが「多数決同意入力パケット」として判定される（枠１０６５と枠１０６６）。「多数決同意入力パケット」を確認したことにより、時間Ｔ３の処理へと移る。【０２３２】
時間Ｔ２における計算機ノード１００Ａ、１００Ｂの計算機ノード構成管理テーブル３１７の状態を図３８に示す（行１０８１）。計算機ノード１００Ａ、１００Ｂは同期した計算機ノード１００Ｃの情報を計算機ノード構成管理テーブルに反映させる（行１０８６）。また計算機ノード１００Ｃの計算機ノード構成管理テーブル３１７の状態を図３９に示す（行１０９１）。計算機ノード１００Ｃは計算機ノード１００Ａ、１００Ｂの情報を新たに計算機ノード構成管理テーブルに保持する（行１０９６と行１０９７）。【０２３３】
時間Ｔ３での多数決定９０９では「多数決同意入力パケット」としてシーケンス番号が「２Ａ−１」の外部入力パケットを選出する。状態更新９１０では「多数決同意入力パケット」を基に決定入力管理テーブル８００と入出力決定処理カウンタ３１５の更新を行う。各計算機ノード１００A、１００B、１００Cはシーケンス番号が「２Ａ−１」の外部入力パケット５００の情報を決定入力管理テーブル８００に設定する。この時の決定入力管理テーブル８００内容は図４０に示す。また同時にシーケンス番号が「２Ａ−１」の外部入力パケット５００の情報を外部入力パケット管理テーブル５５０から削除する。【０２３４】
「多数決同意入力パケット」となったシーケンス番号「２Ａ−１」の外部入力パケット５００を自ら受信していない計算機ノード１００Bは、決定済み入力管理テーブル８１０にシーケンス番号「２Ａ−１」の外部入力パケット５００の情報をを設定する。この時の決定済み入力管理テーブル８１０内容は図４１に示す。また各計算機ノード１００A、１００B、１００Cは入出力決定処理カウンタ３１５の値を「Ｃ０１１」に更新し、これが計算機ノード構成管理テーブル３１７に反映される（図３８の枠１０８７と図３９の枠１０９８）。状態更新９１０により、計算機ノード１００A、１００B、１００Cの状態は、図３５の時間Ｔ３（行１０３０）の様に変化する。【０２３５】
送信９１１では各計算機ノード１００A、１００B、１００Cがそれぞれ決定したアプリケーション２００の処理対象となる外部入力パケット５００情報を送受信して、各計算機ノード１００A、１００B、１００C間で共有する。この時送受信されるノード間通信パケット６００の内容は、図３６の時間Ｔ３（行１０４３）に示す。
＜実行結果決定処理（ケースC）＞
説明は図４２、図４３、図４４、図４５、図４６、図４７、図４８、図４９を用いて行う。【０２３６】
図４２は各計算機ノードの処理シーケンスを示す。【０２３７】
時間Ｔ１は計算機ノード１００A、１００Bの実行結果決定処理のＳ８０１からＳ９１３に対応し、時間Ｔ１’ は計算機ノード１００Cの実行結果決定処理のＳ８０１からＳ９１３に対応する。時間Ｔ２はＳ１００１からＳ１２０８に対応する。計算機ノード１００Bでは時間Ｔ３はＳ１３０１からＳ１３０８に対応し、時間Ｔ４はＳ１３０９以降の処理に対応する。計算機ノード１００A、１００Ｃでは時間Ｔ３はＳ１３０１からＳ１３１５に対応し、時間Ｔ４はＳ１３１６およびＳ１３１７以降の処理に対応する。また送信１１０１および送信１１０５はＳ８０４に対応し、ＴＯ１１０２およびＴＯ１１０６はＳ８０５に対応し、リスト作成１１０３はＳ８０６からＳ９１２に対応し、ＴＯ１１０４はＳ９１３に対応する。多数決定１１０７はＳ１００１からＳ１１０５に対応し、状態更新１１０８はＳ１１０１からＳ１１０４に対応し、送信１１０９はＳ１１０５に対応し、ＴＯ１１１０はＳ１１０６に対応し、リスト作成１１１９はＳ１１０７からＳ１２０８に対応する。状態更新１１２０はＳ１３０１からＳ１３０５に対応し、送信１１２１はＳ１３０６とＳ１３０７に対応し、ＴＯ１１２２はＳ１３０８に対応し、出力１１２３はＳ１３０９に対応する。状態更新１１２４はＳ１３０１からＳ１３１２に対応し、送信１１２５はＳ１３１３とＳ１３１４に対応し、ＴＯ１１２６はＳ１３１５に対応し、監視１１２７はＳ１３１６とＳ１３１７以降の処理に対応する。【０２３８】
図４３は時間Ｔ１およびＴ１'における送信（１１０１、１１０５）で送受信されるノード間通信パケットの内容を示す。計算機ノード処理状態個別詳細情報６０４には、各計算機ノード１００Ａ、１００Ｂ、１００Ｃで実行したアプリケーション２００の演算結果を保持する。行１１３１は時間Ｔ１の送信１１０１において送受信されたノード間通信パケット６００の内容を示し、具体的には構成行の行１１３３は計算機ノード１００Ａの送信内容を示し、行１１３４は計算機ノード１００Ｂの送信内容を示すが、行１１３５の空行は時間Ｔ１に計算機ノード１００Ｃは送信を行わなかったことを意味する。行１１３２は時間Ｔ１’ の送信１１０５において送受信される通信パケット６００の内容を示し、具体的には構成行の行１１３８は計算機ノード１００Ｃの送信内容を示すが、行１１３６と行１１３７の空行は計算機ノード１００Ａ、１００Ｂは送信していないことを意味する。【０２３９】
図４４は時間Ｔ２にて送信１１０９で各計算機ノード１００Ａ、１００Ｂ、１００Ｃ間で送受信されるノード間通信パケットの内容を示す。計算機ノード処理状態個別詳細情報６０４には、各計算機ノード１００Ａ、１００Ｂ、１００Ｃが決定した「リーダー選出結果」を保持する。行１１４０は時間Ｔ２の送信１１０９において送受信されるノード間通信パケット６００の内容を示し、具体的には構成行の行１１４１は計算機ノード１００Ａの送信内容を示し、行１１４２は計算機ノード１００Ｂの送信内容を示し、行１１４３は計算機ノード１００Ｃの送信内容を示す。【０２４０】
図４５は時間Ｔ３にて送信１１２１および１１２５で各計算機ノードが送受信するノード間通信パケットの内容を示す。【０２４１】
行１１５０は時間Ｔ３の送信１１２１および送信１１２５において送受信されるノード間通信パケット６００内容を示し、具体的には構成行の行１１５１は計算機ノード１００Ａの送信内容を示し、行１１５２は計算機ノード１００Ｂの送信内容を示し、行１１５３は計算機ノード１００Ｃの送信内容を示す。【０２４２】
図４６は時間Ｔ１のリスト作成１１０３において、計算機ノード１００Ａ、１００Ｂが送受信するノード間通信パケットの内容を示す。行１１６０は時間Ｔ１のリスト作成１１０３において計算機ノード１００Ａ、１００Ｂの間で送受信されるノード間通信パケット６００内容を示し、これは「送信」処理にて送受信したノード間通信パケット６００を結合した「受信結果リスト」を表す。構成行の行１１６１は計算機ノード１００Ａの「送信」内容を示し、行１１６２は計算機ノード１００Ｂの「送信」内容を示す。行１１６３の空行は、計算機ノード１００Ｃからはノード間通信パケット６００を受取っていないため、「受信結果リスト」に計算機ノード１００Cから受信したノード間通信パケットが含まれていないことを意味する。【０２４３】
図４７は時間Ｔ２のリスト作成１１１９において、各計算機ノード間で送受信されるノード間通信パケットの内容を示す。行１１７０はリスト作成１１１９において各計算機ノード１００Ａ、１００Ｂ、１００Ｃの間で送受信されるノード間通信パケット６００内容を示し、これは「送信」処理にて送受信したノード間通信パケット６００を結合した「受信結果リスト」を表す。構成行の行１１７１は計算機ノード１００Ａの「送信」内容を示し、行１１７２は計算機ノード１００Ｂの「送信」内容を示し、行１１７３は計算機ノード１００Ｃの「送信」内容を示す。【０２４４】
図４８は任意計算機ノードの計算機ノード構成管理テーブルの時間別内容を示す。時間別内容は、計算機ノード１００A、１００B、１００Cにおいて同一である。行１１８０は時間Ｔ１における計算機ノード構成管理テーブル３１７の計算機ノード識別子６０１列、入出力決定処理カウンタ６０２列、計算機ノード処理状態６０３列の状態を示す。行１１８１は時間Ｔ２における計算機ノード構成管理テーブル３１７の保持情報を示し、行１１８２はＴ３における計算機ノード構成管理テーブル３１７の保持情報を示す。入力同期時計算機ノード総数３１７Ａは入力同期完了時に設定された値（図４８中では「３」）であり、出力同期処理中は変更されない。【０２４５】
図４９は実行結果決定処理の実行例における任意計算機ノードの各計算機ノードの決定出力管理テーブルの内容を示す。【０２４６】
次に図４２の処理シーケンスを追って、各計算機ノード１００A、１００B、１００Cの処理状態変化を説明する。【０２４７】
送信１１０１で計算機ノード１００A、１００Bは選定入力パケット処理Ｓ１１５によるアプリケーション２００の演算結果「Ｘ」をノード間通信パケット６００の計算機ノード処理状態個別詳細情報６０４に設定して送出する。送出されたノード間通信パケット６００の内容は図４３の時間Ｔ１に示す（行１１３１）。計算機ノード１００Ｃは実行結果決定処理の開始が遅れているため、時間Ｔ１での送信は行っていない（行１１３５の空行）。【０２４８】
リスト作成１１０３では計算機ノード１００A、１００Bは送信１１０１で送受信したノード間通信パケット６００を結合して「受信結果リスト」を作成し、各計算機ノード１００A、１００B、１００Cに対して送信する。送出されたノード間通信パケット６００の内容を図４６に示す。「受信結果リスト」には、計算機ノード１００A、１００Bから受信した情報は含まれるが（行１１６１と行１１６２）、計算機ノード１００Ｃから受信した情報は含まれない（行１１６３の空行）。【０２４９】
計算機ノード１００A、１００BはTO１１０４で双方の「受信結果リスト」を取得し、多数決定１１０７の処理を開始する。【０２５０】
一方計算機ノード１００Ｃは時間Ｔ１’ で実行結果決定処理を開始し、送信１１０５でアプリケーション２００の演算結果「Ｘ」をノード間通信パケット６００の計算機ノード処理状態個別詳細情報６０４に設定して送出する。時間Ｔ１’ における送出されたノード間通信パケット６００の内容を図４３の時間Ｔ１’ に示す（行１１３２）。時間Ｔ１’ で送信を行っているは計算機ノード１００Ｃのみで（行１１３８）、計算機ノード１００A、１００Bは送信していない（行１１３７と行１１３８の空行）。【０２５１】
計算機ノード１００ＣはTO１１０６で計算機ノード１００A、１００Bからそれぞれの計算機ノードのアプリケーション２００による演算の演算結果を受信することを期待するが、代りにリスト作成１１０３で送信された「受信結果リスト」を受信する。Ｓ９０４およびＳ９０５で計算機ノード１００Cは計算機ノード処理状態の不一致を検出し、Ｓ９０６で計算機ノード１００Cha計算機ノード処理状態テーブル７００のPenalty７０３の値を「１」に更新する。計算機ノード１００Ｃは受信した「受信結果リスト」に自身のアプリケーション２００の演算結果を加えて「受信結果リスト」を作成し、多数決定１１０７の処理を開始する。【０２５２】
多数決定１１０７では、計算機ノード１００A、１００Bはリスト作成１１０３で共有した「受信結果リスト」を基にアプリケーション２００の演算結果の多数決判定を行う。  計算機ノード１００ＣはＴＯ１１０６で取得、作成した「受信結果リスト」を基に多数決判定を行う。本例では計算機ノード１００A、１００B、１００Ｃのアプリケーション２００の演算結果は全て同一の「Ｘ」であるため、「受信結果リスト」に含まれる全ての計算機ノードが「多数派」として判断される。【０２５３】
状態更新１１０８では「受信結果リスト」に含まれる計算機ノードから、リーダー候補となる計算機ノードを選出し、リーダー選出の順位付けを行う。計算機ノード１００A、１００Bが保持する「受信結果リスト」には「計算機ノード１００A、１００B」が含まれているため、何れもＳ１１０２で「計算機ノード１００A、１００B」を選出し、「計算機ノード１００B」を一位、「計算機ノード１００A」を二位と順位付けする（本例では計算機ノード識別子の値の降順で順位付けを行う）。一方計算機ノード１００Ｃが保持する「受信結果リスト」には「計算機ノード１００A、１００B、１００Ｃ」が含まれているため、「計算機ノード１００A、１００B、１００Ｃ」を選出し、「計算機ノード１００B」を一位、「計算機ノード１００A」を二位、「計算機ノード１００Ｃ」を三位と順位付けする。「計算機ノード１００Ｃ」は最も大きな計算機ノード識別子の値を持つが、Penalty７０３に「１」が設定されているため最下位の三位に順位付けされる。【０２５４】
送信１１０９では各計算機ノード１００A、１００B、１００Cは状態交信１１０８のリーダー選出結果をノード間通信パケット６００の計算機ノード処理状態個別詳細情報６０４に設定して送出する。送信されるノード間通信パケット６００の内容を図４４に示す。計算機ノード１００A、１００Bは「計算機ノード１００C」のリーダー選出順位は決定せずに送信する（枠１１４４と枠１１４５）。一方計算機ノード１００Cは自身のリーダー選出順位を付加して送信する（枠１１４６）。【０２５５】
リスト作成１１１９では計算機ノード１００A、１００B、１００C間で交換したリーダ選出順位を照合して結合した「受信結果リスト」の作成と共有を行う。「受信結果リスト」が設定された、リスト作成１１１９で送受信されるノード間通信パケット６００の内容を図４７に示す。計算機ノード１００A、１００Bが作成した「受信結果リスト」には、計算機ノード１００Cのリーダー選出順位が補完され、反映される（枠１１７４と枠１１７５）。【０２５６】
時間Ｔ３以降は、計算機ノード１００A、１００B、１００Cはリーダー選出順位に基き「リーダー」と「モニター」に分かれ、それぞれ異なる処理を行う。計算機ノード１００Bは「リーダー」になり、計算機ノード１００A、１００Cは「モニター」となる。【０２５７】
状態更新１１２０で計算機ノード１００Bは、リーダー選出順位により自身を「リーダー」と判断し、計算機ノード処理状態テーブル７００の処理状態７０４に「LEADER」を設定し、入出力決定処理カウンタ３１５の値を変更する。計算機ノード１００A、１００Ｃについては「モニター」と判断する。【０２５８】
一方状態更新１１２４で計算機ノード１００A、１００Ｃは、リーダー選出順位により自身を「モニター」と判断し、計算機ノード処理状態テーブル７００の処理状態７０４に「MONITOR」を設定し、入出力決定処理カウンタ３１５の値を変更する。計算機ノード１００Bについては「リーダー」と判断する。【０２５９】
状態更新１１２０および状態更新１１２４は、自他計算機ノードの情報および「リーダー／モニター」判断結果を計算機ノード構成管理テーブル３１７と決定出力管理テーブル３２１に反映する。時間Ｔ３における計算機ノード構成管理テーブル３１７の内容を図４８の時間Ｔ３（行１１８２）に、決定出力管理テーブル３２１の内容を図４９に示す。【０２６０】
送信１１２１および送信１１２５で、各計算機ノード１００A、１００B、１００Cは自身の計算機ノード処理状態を送信する。送信１１２１および送信１１２５で送信されるノード間通信パケット６００の内容を図４５に示す。各計算機ノード１００A、１００B、１００Cの更新された入出力決定処理カウンタ６０２値（枠１１５４）と、「リーダー／モニター」を示す処理状態７０４（枠１１５５）が通知される。【０２６１】
出力１１２３で「リーダー」である計算機ノード１００BはＳ１３０９を実行し、アプリケーション２００の演算結果である信号を外部に送信する。【０２６２】
監視１１２７において「モニター」である計算機ノード１００A、１００Ｃは、Ｓ１３１６およびＳ１３１７を実行して出力１１２３の信号送出を監視することで「リーダー」である計算機ノード１００Bの外部出力の正常／異常を判断し、再同期検知処理Ｓ１１１または出力異常処理Ｓ１４００を実行する。
【実施例２】
【０２６３】
次に別の実施形態として、既存の稼動中の多数決同期システムの系に新たな計算機ノードを加えた場合の動作説明を行う。【０２６４】
図５０は本発明の実施の形態の、新規計算機ノード追加における多数決同期システムの全体構成例である。同期システム１Ａは、計算機ノード１００Ａ、１００Ｂ、１００Ｃから構成される、既存稼動中の多数決同期システムの系を示す。計算機ノード１００Ｄは同期システム１Ａに新たに追加される計算機ノードであり、図１の計算機ノード１００Ａと同様のハードウェア構成、ソフトウェア構成を保持する。外部ネットワーク３は計算機ノード１００Ａ、１００Ｂ、１００Ｃおよび計算機ノード１００Ｄと端末２Ａ、２Ｂ、２Ｃを接続し、内部ネットワーク４は計算機ノード１００Ａ、１００Ｂ、１００Ｃおよび計算機ノード１００Ｄの間を接続する。同期システム１Ｂは計算機ノード１００Ｄ追加後の、計算機ノード１００Ａ、１００Ｂ、１００Ｃ、１００Ｄから構成される多数決同期システムの系を示す。【０２６５】
次に同期システム１Ａに計算機ノード１００Ｄを追加する時の動作説明を行う。なお動作説明は、外部ネットワーク３と内部ネットワーク４への計算機ノード１００Ｄ接続操作は省略し、接続が完了した状態から始める。【０２６６】
計算機ノード１００Ｄで基盤ソフトウェア３００の入出力同期部３１０が動作を開始すると、計算機ノード１００Dの入出力同期部３１０は再同期処理Ｓ１１８を実行し、Ｓ１１８３で「REJOIN-REQのノード間通信パケット」を内部ネットワーク４に接続された計算機ノード１００Ａ、１００Ｂ、１００Ｃに対してマルチキャストで送信する。そしてＳ１１８４で「REJOIN-ACKのノード間通信パケット」の到着を期待してタイムアウトまでＷａｉｔする。【０２６７】
計算機ノード１００Ａ、１００Ｂ、１００Ｃは、再同期検知処理Ｓ１１１のＳ１１１４で計算機ノード１００Ｄからの「REJOIN-REQのノード間通信パケット」を検出し、Ｓ１１１８で「REJOIN-ACKのノード間通信パケット」を計算機ノード１００Ｄを含む他の計算機ノードに対してマルチキャストで送信する。そして算機ノード１００Ｄからの「JOINEDのノード間通信パケット」の到着を期待してタイムアウトまでＷａｉｔする。【０２６８】
計算機ノード１００Ｄは計算機ノード１００Ａ、１００Ｂ、１００Ｃからの「REJOIN-ACKのノード間通信パケット」を受信すると、Ｓ１１８１０で「REJOIN-REQのノード間通信パケット」を計算機ノード１００Ａ、１００Ｂ、１００Ｃに対してマルチキャストで送信し、入力同期処理を開始するためにＳ１１２を起動する。
計算機ノード１００Ａ、１００Ｂ、１００Ｃは計算機ノード１００Ｄからの「REJOIN-REQのノード間通信パケット」の受信を確認すると、入力同期処理を開始するためにＳ１１２を起動する。【０２６９】
これ以降、多数決同期システムは計算機ノード１００−Ｄを加えた系（同期システム１−Ｂ）で端末２−Ａ、２−Ｂ、２−Ｃからの外部入力パケット５００を処理する。
【符号の説明】
【０２７０】
１：同期システム
２A、２B、２C：端末
１００A、１００B、１００C：計算機ノード
１０１：メモリ
１０２：プロセッサ
１０３：記憶装置
１０４：外部通信I/F
１０５：ノード間通信I/F
２００：アプリケーション
３００：基盤ソフトウェア
３０１：外部入力パケット記憶部
３１０：入出力同期部
４００：オペレーティングシステム
５００：外部入力パケット
６００：ノード間通信パケット
【図１】
2012056487.tif 000003
【図２】
2012056487.tif 000004
【図３】
2012056487.tif 000005
【図４】
2012056487.tif 000006
【図５】
2012056487.tif 000007
【図６】
2012056487.tif 000008
【図７】
2012056487.tif 000009
【図８】
2012056487.tif 000010
【図９】
2012056487.tif 000011
【図１０】
2012056487.tif 000012
【図１１】
2012056487.tif 000013
【図１２】
2012056487.tif 000014
【図１３】
2012056487.tif 000015
【図１４】
2012056487.tif 000016
【図１５】
2012056487.tif 000017
【図１６】
2012056487.tif 000018
【図１７】
2012056487.tif 000019
【図１８】
2012056487.tif 000020
【図１９】
2012056487.tif 000021
【図２０】
2012056487.tif 000022
【図２１】
2012056487.tif 000023
【図２２】
2012056487.tif 000024
【図２３】
2012056487.tif 000025
【図２４】
2012056487.tif 000026
【図２５】
2012056487.tif 000027
【図２６】
2012056487.tif 000028
【図２７】
2012056487.tif 000029
【図２８】
2012056487.tif 000030
【図２９】
2012056487.tif 000031
【図３０】
2012056487.tif 000032
【図３１】
2012056487.tif 000033
【図３２】
2012056487.tif 000034
【図３３】
2012056487.tif 000035
【図３４】
2012056487.tif 000036
【図３５】
2012056487.tif 000037
【図３６】
2012056487.tif 000038
【図３７】
2012056487.tif 000039
【図３８】
2012056487.tif 000040
【図３９】
2012056487.tif 000041
【図４０】
2012056487.tif 000042
【図４１】
2012056487.tif 000043
【図４２】
2012056487.tif 000044
【図４３】
2012056487.tif 000045
【図４４】
2012056487.tif 000046
【図４５】
2012056487.tif 000047
【図４６】
2012056487.tif 000048
【図４７】
2012056487.tif 000049
【図４８】
2012056487.tif 000050
【図４９】
2012056487.tif 000051
【図５０】
2012056487.tif 000052
【国際調査報告】
2012056487.tif 000053
2012056487.tif 000054
2012056487.tif 000055
2012056487.tif 000056