(57)【特許請求の範囲】
【請求項１】
周期的にプログラムを実行する現用系計算機と、前記現用系計算機からの現用系計算機切り替に備えて用意された待機系計算機とで構成される多重化計算機の記憶領域一致化装置であって、
前記現用系計算機の周期におけるプログラムの実行時間割合を求める稼働割合計算部と、
前記プログラムの稼働により発生する現用系計算機の記憶領域と待機系計算機の記憶領域の差分を求める記憶領域差分計算部と、
前記稼働割合計算部から受け取ったプログラムの実行時間割合と、前記記憶領域差分計算部から受け取った現用系計算機の記憶領域と待機系計算機の記憶領域の差分データ量に基づいて、現用系計算機で実行し、待機系計算機で実行していない処理を待機系計算機で実行することにより待機系計算機の記憶領域を現用系計算機の記憶領域に一致させるか、現用系計算機の記憶領域と待機系計算機の記憶領域の差分データを現用系計算機から待機系計算機へ送付し、待機系計算機の記憶領域へ反映させることにより待機系計算機の記憶領域を現用系計算機の記憶領域に一致させるかを選択する処理時間判定部とを備えることを特徴とする多重化計算機の記憶領域一致化装置。
【請求項２】
前記処理時間判定部は現用系計算機と待機系計算機を接続する通信路の速度を基に現用系計算機から待機系計算機へ送付するデータの転送時間を求め、求めた転送時間により現用系計算機で実行し待機系計算機で実行していない処理を待機系計算機で実行するか、現用系計算機の記憶領域と待機系計算機の記憶領域の差分データを現用系計算機から待機系計算機へ送付し、待機系計算機の記憶領域へ反映させるかを選択することを特徴とする請求項１に記載の多重化計算機の記憶領域一致化装置。
【請求項３】
前記プログラムの入力データと出力データを記憶する処理記憶部を備え、
処理時間判定部が現用系計算機で実行し待機系計算機で実行していない処理を待機系計算機で実行するとき、前記処理記憶部が記憶した入力データと出力データを用いて待機系計算機で前記プログラムを実行させることにより待機系計算機の記憶領域を現用系計算機の記憶領域に一致させることを特徴とする請求項２に記載の多重化計算機の記憶領域一致化装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、多重化システムにおける現用系と待機系間のデータ一致化装置に関する。
【背景技術】
【０００２】
多重化システムは、業務を実行する現用系計算機と、現用系を監視して異常を検知したときにその業務を引き継ぐ待機系計算機から構成される。この現用系で異常が発生したときに待機系が業務を引き継ぐ一連の処理を系切替処理と呼ぶ。この系切替時間は、システムのダウンタイム時間に直結するため、系切替の時間を短縮する技術が開発されてきた。
【０００３】
その体表的な技術が現用系と待機系の処理を一致化しながら業務を実行する同期システム制御技術である。現用系と待機系ともに同じ処理を行うため、現用系の異常が発生した場合でも、待機系計算機が現用系の業務を引き継ぐための処理が殆ど不要となる。一方、多重系間での同期対象は、業務を実行するタスクの挙動であり、多くの同期システムにおいてはＯＳレイヤでのスケジュール同期が実施されている。ＯＳレイヤでの同期実装の場合、同期が必要なタスクを特定しない点で汎用性が高いが、スケジューラレベルでの同期が必要なスケジュール同期の実装は複雑であり同期に必要な処理のオーバーヘッドも大きい。そのため、近年、ミドルレイヤでの同期システム実装が注目を浴びている。
【０００４】
特に、同期処理が必要なタスクが特定でき、そのタスクの順序制御がミドルレイヤ可能な制御システムにおいては、タスクの挙動に影響を及ぼす外部入力とＯＳレイヤで発生するタイマーやシグナルイベントの内部入力の同期さえ保証できれば容易に同期システムの実装が可能である。
【０００５】
一方、多重化システムにおいては系切替時間以外に、異常が発生した計算機を復旧し再び多重系構成に戻す多重系復旧時間もシステムの高信頼性を確保するには欠かせない要素である。特に現用系1台と待機系1台のみで構成される2重系システムにおいては1回の異常発生のみ許容されるシステムとなるため、高可用性や高信頼性の確保のためには可能な限り素早く予備の計算機の立ち上げなどをして多重系復旧を行う必要がある。多重系復旧処理においては、現用系のタスクの内部状態、例えば、共有資源であるメモリや通信ソケット等を復旧先の計算機のタスクの内部状態と一致させる必要がある。タスク内部状態一致処理の汎用的な実現は難しく、多くのシステムの場合、共有メモリを設けてある特定の処理ポイントに到達すると現在のタスクの状態を前記共有メモリ上ですべて書き出すタスクモデルを採用することで解決している。前記タスクモデルの場合、多重系復旧に必要な復旧先への現用系のタスク状態一致化処理は、タスク状態がすべて書き出されている共有メモリの転送することによって実現している。転送された共有メモリの内容を復旧先の計算機のメモリにコピーすることにより現用系計算機で実行されるタスクの状態を復元し、現用系の状態と再同期が可能となる。しかし、前記共有メモリが大きい場合は、1回の転送で復旧処理の終了できず、複数回の転送処理が必要となる。複数転送が発生した場合、転送処理の間に現用系のタスクが再び業務処理を行い特定の処理ポイントへ到達する。
【０００６】
その時点で転送中の共有メモリ内タスク状態と現在の現用系のタスク状態が異なってしまう。この異なる内容を前記転送処理中の共有メモリとの差分という。前記転送処理が終了すると、次は転送処理中に発生した共有メモリの差分を転送する。前記差分が1回の転送ですむ量まで収束すると多重系復旧処理は終了することができる。
【０００７】
多重系復旧処理として特許文献1では、一定周期を待ち、前記周期内でタスクが処理を終了し次の周期待ちに入った時間を前述した特定の処理ポイントとし、前記周期内の差分作成と転送によるタスクの状態一致化手段が記載されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開2009-217505
【発明の概要】
【発明が解決しようとする課題】
【０００９】
特許文献1の方法は、一致化対象のデータのメモリ領域の差分を転送し、多重系復旧を行っているが、タスクによっては、前記メモリ領域をすべて更新する場合がある。この場合、転送する差分の量が多くなり多重系復旧に時間がかかる。
【課題を解決するための手段】
【００１０】
タスク挙動に影響を及ぼす入力、例えば、外部入力内容と計算機の内部で発生するイベントの内容を現用系と待機系間で一致させる同期処理を持ち、多重系復旧時間を短縮するために一致化対象となるデータの差分の量及び、タスクの処理開始からタスク状態が確定できる特定の処理ポイントまでのタスク実行時間と次のタスクの処理開始までの時間の割合を基に復旧手段を選択する。前記特定の処理ポイントまでのタスク実行時間より次のタスクの処理開始までの時間の割合が大きい場合、前記同期処理によって現用系と待機系間で一致させるタスクへの入力のログを現用系で作成し、復旧先の計算機へ転送し復旧先の計算機のタスクにて復元する高速リプレイ手段を提供する。高速リプレイは現用系から転送された入力ログから入力データを読出し、復旧先の計算機のタスクへ入力データとして与え、現用系の処理をリプレイ（再現または復元）させ、現用系のタスク状態と一致化させる方法である。前記リプレイ処理は現用系のタスクでは存在した前記特定の処理ポイントから次のタスクの処理開始までの待ち時間をなくすことで現用系のタスクの状態へ追いつく時間を短縮する。
【発明の効果】
【００１１】
本発明によれば、多重系復旧において現用系と待機系（または多重系復旧先）の一致化対象のデータの差分転送手段と、タスク挙動に影響を及ぼす入力のログを現用系から待機系へ転送し待機系で高速リプレイする手段が選択でき、前記データの差分が大きい場合でも多重系復旧時間の短縮が可能である。
【図面の簡単な説明】
【００１２】
【図１】本発明の代表的な実施形態におけるハードウェア構成図。
【図２】本発明の代表的な実施形態における、ソフトウェアプログラム構成図。
【図３（ａ）】本発明の代表的な実施形態における、タスク管理テーブル図
【図３（ｂ）】本発明の代表的な実施形態における、タイマー管理テーブル図
【図３（ｃ）】本発明の代表的な実施形態における、シグナル管理テーブル図
【図３（ｄ）】本発明の代表的な実施形態における、領域管理テーブル図
【図４（ａ）】本発明の代表的な実施形態における、同期データ管理テーブル図
【図４（ｂ）】本発明の代表的な実施形態における、一致化データ管理テーブル図
【図５】本発明の代表的な実施形態における、タスク処理とタイミング図
【図６】本発明の代表的な実施形態における、現用系と待機系間の入力同期処理フロー図。
【図７】本発明の代表的な実施形態における、現用系と待機系間の多重系復旧処理フロー図。
【図８】本発明の代表的な実施形態における、高速リプレイ処理フロー図。
【図９】本発明の代表的な実施形態における、入力同期ログ作成フロー図。
【図１０】本発明の代表的な実施形態における、入力同期ログ転送処理と待機系の高速リプレイ処理フロー図。
【図１１】本発明の代表的な実施形態における、差分転送処理フロー図。
【図１２】本発明の代表的な実施形態における、差分作成処理フロー図。
【図１３】本発明の代表的な実施形態における、処理時間判定部の処理フロー図。
【図１４】本発明の代表的な実施形態における、稼動割計算部の処理フロー図
【図１５】本発明の代表的な実施形態における、記憶領域差分計算部の処理フロー図
【発明を実施するための形態】
【実施例１】
【００１３】
図１は本発明における多重系を構成するためのハードウェア構成の一例であり、少なくとも1台の現用系計算機10と、少なくとも1台の待機系計算機20から構成される。各計算機は少なくとも、OSを含むソフトウェアプログラムを実行する演算装置11と、前記プログラムおよびその実行に必要なデータを格納する記憶装置12と、多重系間でデータの送受信を行う通信装置１の13を備える。ここで記憶装置12は、例えばRAMやハードディスクなどである。また、通信装置１の13は、例えばLANアダプタなどである。
【００１４】
現用系計算機10と待機系計算機20は通信装置１の13で通信を行い、通信装置１の13は内部ネットワーク31で接続される。現用系計算機10と待機系計算機20はOSを含むソフトウェアプログラム含め対称的な構成をとる。前記現用系計算機10と待機系計算機20は通信装置2の14で外部ネットワーク32とつながっており、外部ネットワーク32は例えばネットワークスイッチなどで構成され、外部ネットワーク32につながっている外部の計算機とのデータの送受信を行う。
【００１５】
図２は本発明を実施する一形態におけるソフトウェアプログラムの構成図である。記憶装置内12で記憶され、演算装置11によって実行される。
【００１６】
本実施例においては、現用系計算機10と待機系計算機20間でのデータ一致化の対象は、タスク81がタスクの処理結果とタスク81の内部状態を記録する、後述の領域管理テーブルで管理されるメモリやディスクのブロックである。タスク81は少なくても１つ以上であり、予め実行順序が設定されている。そのため、外部ネットワーク32からの外部入力と前記計算機内で発生するタイマーイベントやシグナル等の内部イベントを現用系計算機10と待機系計算機20間で同期させると、タスク81の処理結果と内部状態は両系において一致することが可能である。以下、本発明を実現するためのソフトウェアプログラムの構成について説明する。
【００１７】
本構成は大きく４つのレイヤで構成されている。OSレイヤと、データ一致化ミドル51と通信ミドル61とタスク管理ミドル71からなるミドルレイヤと前記ミドルレイヤの機能を利用し特定の処理を行うタスク81のタスクレイヤ及び前記ミドルレイヤとタスクレイヤの処理結果や状態を記録しておく管理テーブルレイヤから構成される。OS 41は、スケジュール機能とタイマー機能とソフトウェアシグナル（以下、シグナル）機能と演算装置11と記憶装置12と通信装置13を制御する機能をもつソフトウェアであり、例えばLinux（登録商標）などがある。データ一致化ミドル51は現用系計算機10と待機系計算機20の多重系間でのデータ一致化を実現するソフトウェアプログラムであり、前述したOSの41の機能を活用し、後述する同期データ管理テーブル52の内容を待機系計算機11に送信しデータ一致化を実現する。また、後述する一致化データ管理テーブル53と稼働割計算部54と記憶領域差分計算部55と処理時間判定部56を備え、現用系計算機10または待機系計算機20に障害が発生した場合、障害発生した計算機のタスク81の処理状態を現用系計算機のタスク81の状態に一致化するデータ一致化を実現する。
【００１８】
通信ミドル61は通信装置2から受信したデータをタスクへ引き渡し、また、タスクからのデータを通信装置2で外部ネットワーク32へ送信する処理を行う。タスク管理ミドル71はタスクへ、タスクの起動と停止、タイマー設定、他タスクと共有する記憶領域のメモリの割当及び他タスクへのシグナル送信機能を提供するAPIを備えている。タスク管理ミドル71の前記APIの機能はOS41が提供している機能を活用して実現する。タスクは、少なくても１つ以上存在していてタスク管理ミドル71が提供するAPIを利用して特定の処理を実現する。また、制御系をはじめとする一定周期で同処理を反復的に行うシステムでは、複数のタスクが１つのグループになって、予め決まった順序でシーケンシャルに動作し、目的の処理を遂行するケースが多い。シーケンシャル動作はあるタスクが終了した時点でそのタスクが次に動作すべきタスクの起動をかけることで実現するケースが多く、OSの機能を活用してもよいし、タスク管理ミドル71でAPIでシーケンシャル処理を実現する機能を提供してもよい。
【００１９】
また、タスクの周期動作は処理開始のタイマーを設定することによって、生成する。タイマー設定はOSの機能を活用してもよいし、タスク管理ミドル71でAPIのシーケンシャル処理を実現する機能を提供してもよい。タスク管理ミドル71はタスクからのAPIの呼び出しで後述する各種管理テーブルのそれぞれの値として設定する。また、各種管理テーブルの内容（または値）は同期データ管理テーブル52のデータの内容として設定される。
【００２０】
図３(a)-(d)はタスク管理ミドル71の管理テーブルの図である。
まず、図３(a)に示すタスク管理テーブル72について説明する。タスクの実行情報はタスク管理ミドル71によりタスク管理テーブルへ格納される。  タスク識別子は記録されたタスクを識別するための情報である。
【００２１】
IPC識別子はタスクの開始や停止に使われるIPC資源を特定する情報である。タスクからタスク管理ミドル71が受け取り、タスク管理テーブルに格納される。IPC資源は例えばPOSIXのセマフォやメッセージボックスがある。
【００２２】
また、IPC資源は、前記タスク管理ミドル71が前記タスクのシーケンシャル処理を実現するために、他のタスクを起動及び停止するために使用される。
【００２３】
領域識別子はタスクが使用する記憶領域を識別するための情報で、メモリでもディスクでもよい。タスクの起動時に、前記タスク管理ミドルが前記OSの機能を利用し必要な領域を割当し、その領域を識別するために前記タスク管理ミドルが動的に付与し登録する情報である。この識別子は、前記領域の詳細情報が記録されている後述する領域管理テーブル75を特定するために使用される。
【００２４】
開始終了は少なくても１つ以上のタスクから構成される周期タスクにおいて、１周期内で最初に動作する先頭タスクと最後に動作する後尾タスクを特定するための情報である。
前記先頭タスク及び後尾タスクを特定する情報設定機能は、前記タスク管理ミドル71が提供する。前記情報登録専用の外部設定ファイルを用意し、前記タスク管理ミドル71の初期処理として前記外部設定ファイルの読み込みにより登録してもよい。
前記先頭タスクには”S”と後尾タスクには”E”という識別子が設定される。それ以外のタスクに対しては”0”と設定される。
【００２５】
図３(b)はタイマー管理テーブル73の図である。タスクはタイマーによって予め決められた時刻に起動されるものがある。例えば毎日09時00分に行う処理がある場合や50ms毎に行う処理がある場合、タスク管理ミドル71経由で下記の情報を登録する。登録する時刻、周期をOSへ登録し、OSがタイマーを発火されると、そのタイマーイベントを前記タスク管理ミドル71が受信し、登録元のタスクへ通知する。
【００２６】
タスク識別子は登録されるタスクを識別するための情報で、OSのPIDに相当するものである。前記タスク管理ミドル71がタイマーイベントの受信時にイベントの通知先を判別するための情報である。
【００２７】
タイマー識別子はタスクが登録した後述する開始時刻、インターバル、のタイマー内容を識別するための情報である。
【００２８】
開始時刻はタイマーの最初の発火時刻情報である。本実施例は、時間分秒ミリ秒までの設定とする。
【００２９】
インターバルは周期的にタイマーを発火する時間間隔の情報である。本実施例ではミリ秒の粒度で設定する。
【００３０】
図３(c)はシグナル管理テーブル74の図である。タスクは他タスクへ送信するシグナルを前記タスク管理ミドル71経由でシグナル管理テーブル74へ登録する。タスク管理ミドル71はOS41のシグナル機能、例えばkillを利用して登録したシグナルの実行を行う。
【００３１】
タスク識別子はシグナル登録元で送信元のアプリを識別する情報である。
【００３２】
シグナル識別子はタスクが登録したシグナルを識別するための情報である。
【００３３】
シグナル内容はタスク管理ミドル71が、利用するOSのシグナル情報である。例えば、POSIXのsiginfo構造体などがある。
【００３４】
図３(d)は領域管理テーブル75の図である。タスク管理ミドル71は予め一定領域の記憶領域を確保し、タスクが管理ミドル71へ予め定められたサイズ単位の領域の割当を依頼する。
本実施例ではタスク管理ミドル71が管理している記憶領域の現用系計算機10と待機系計算機20間でのデータ一致化の対象とする。
タスクからタスク管理ミドル71経由で下記の情報を登録する。
【００３５】
領域識別子は割り当てた記憶領域を識別するためにタスク管理ミドル71が付与する情報である。割り当てた後にタスク管理ミドル71はタスク管理テーブル72に割り当てた記憶領域のアドレス情報である開始アドレスと、
タスクから要求された領域のサイズの情報であるサイズを書き込む。
【００３６】
図4(a)(b)はデータ一致化ミドル51の管理テーブル図である。
【００３７】
図4(a)は現用系計算機10と待機系計算機20間で行われる同期用データ内容を示す同期データ管理テーブルである。前記現用系計算機は、外部ネットワーク32からの入力データ及び計算機内部のイベント発生状態を同期データとして内部ネットワーク31を通じて待機系計算機へ送信する。以下、テーブルの内容について説明する。
【００３８】
STATUSは同期処理の状態を示す。STARTは同期開始状態でENDは同期終了状態を示す。
【００３９】
SIZEは同期データ管理テーブルに設定されたデータの合計サイズを示す。
【００４０】
データソース識別子は同期対象のデータを識別するもので、外部ネットワークからの入力データや計算機内部のイベントがある。入力データのデータソースには、通信ミドル61、タスク管理テーブル72、タイマー管理テーブル73、シグナル管理テーブル74などがある。
【００４１】
データは同期対象のデータ内容であり、各データソースが提供する内容が設定される。例えば、データソースの通信ミドル61の場合、後述する図6の入力同期処理に必要な入力データ（IN_001）、タスク管理テーブル72の場合、タスク管理テーブル72のIPC識別子情報(IPC_3)、タイマー管理テーブル73の場合、タイマー管理テーブル73に登録している前記タスク管理ミドル71がOSから受信したタイマーイベントのタイマー情報(TR1)、シグナル管理テーブル74の場合、タイマー管理テーブル74に登録している前記タスク管理ミドル71がOSから受信したシグナルイベントのシグナル情報(SIG_1)が設定される。
【００４２】
サイズは各データのサイズである。
【００４３】
ロジカルクロックはテーブルに設定されたデータが発生順序を示す情報であり値が大きいほど発生順は遅い。
【００４４】
発生時刻はデータの発生時刻情報である。1970年からの時間をミリ秒で表している整数である。
【００４５】
図4(b)は現用系計算機10と待機系計算機20間で行われるデータ一致化のために現用系計算機10から待機系計算機20へ送信するデータ管理情報を示す一致化データ管理テーブルである。現用系計算機10または、待機系計算機20に障害が発生した場合、待機系計算機に交代または前記障害発生した計算機の再起動による多重系復旧の時、復旧対象の計算機と現用系計算機10の処理状態を一致化するために、現用系計算機10から復旧対象計算機へ送信するデータを管理するための情報が設定される。以下、テーブル内容について説明する。
【００４６】
一致化データ識別子は現用系計算機10と復旧対象計算機の処理状態の一致化で利用されるデータ種類を示す。LOGは先頭タスクの処理開始から後尾タスクの処理終了までの、同期テーブル管理テーブル52に記録される現用系計算機が処理する入力データとタスク管理ミドル61が処理するOSから通知される内部イベントの内容である。DIFFは先頭タスクが処理する直前の領域管理テーブル75の記憶領域の内容と後尾タスクの処理終了後の前記領域管理テーブル75の記憶領域の内容の差分情報を示す。LOG及びDIFFの作成処理は入力同期ログ作成処理503と差分作成処理903でそれぞれ詳細に説明する。
【００４７】
データ数はLOGとDIFFの作成された数を示す。初期設定値は0である。管理情報はLOGとDIFFの保存先番地とデータサイズを管理する。保存先番地はLOGとDIFFの保存先の記憶領域の番地を示す。サイズはLOGとDIFFのデータサイズを示す。
【００４８】
図5はタスク処理とタイミングの概要で、同期処理にかかわる前記ソフトウェアプログラムの動作タイミングと関連パラメータについて説明する。
【００４９】
周期（T）92はタスクの動作周期である。この周期は、データ一致化ミドル51において、タスク管理テーブル72の開始終了情報から先頭タスクを判別し、タイマー管理テーブル73から該当タスクのタイマーインターバル情報を読み出すことで求められる。
【００５０】
P93は少なくても１つ以上で構成されるタスクのタスクグループの処理時間の合計を示す。タスク管理テーブル72の開始終了情報から先頭タスクを判別し、タイマー管理テーブル73から該当タスクのタイマーインターバル情報を読み出して算出した処理周期開始の時刻から、タスク管理テーブルの開始終了情報から判別した後尾タスクの処理終了を実行した時刻までの時間を示す。
【００５１】
Q94は周期待ち時間を示す。後尾タスクの処理終了時刻から、先頭タスクの処理開始までの待ち時間を示す。
【００５２】
INQ_T95は通信ミドル61が外部ネットワーク32からの入力データをバッファリングする時間を示す。タスクグループの処理開始時間から後述する入力同期通信処理開始までの時間である。
【００５３】
ST96は現用系計算機10が待機系計算機20へ同期データ送信するのに必要な時間である。同期データ管理テーブル52のサイズを内部ネットワーク31の通信帯域で割った時間である。前記同期処理通信は本ST 96の値から、前記タスクグループの処理開始時間の直前まで終了するようにデータ一致化ミドル51は同期処理通信開始の時間を制御する。
【００５４】
AP制御処理とイベント処理97はタスクグループの処理中でOS 41から発生するタイマーやシグナルイベントをタスク管理ミドルで処理し、タスクグループに通知する。さらに、データ一致化ミドル51へ通知する。この通知によってデータ一致化ミドル51は、計算機内部で発生するイベント情報を同期データ管理テーブルへ設定することが可能である。
【００５５】
以下、データ一致化ミドル51の入力同期処理と多重系復旧処理について説明する。
【００５６】
図6は現用系計算機10と待機系計算機20間での外部ネットワーク32からの入力データに関する、データ一致化ミドル51の同期処理を示す。以下、各処理ステップを説明する。
【００５７】
ステップ101は初期設定。ミドルレイヤのソフトウェアプログラムの起動等の初期化やタスクの登録等タスクの処理開始のための初期処理を行う。ステップ102はデータ一致化ミドル51はタスク管理ミドル71からのイベント待ちを行う。ステップ103はタスク管理ミドル71からの通知イベントが後尾タスクの処理終了か判断する。通知イベントとしては後述するステップ107で設定したタイマーイベントもあり、タイマーイベントの場合、後述するステップ111の処理を行う。ステップ104はステップ103で後尾タスクの処理終了であれば（Ｙ）、処理終了の時刻T1を取得する。ステップ105はタスク管理テーブル72の開始終了情報から先頭タスクの識別子を読出し、タイマー管理テーブル73のタイマーインターバル情報から先頭タスクの次の処理開始時刻T2を算出する。ステップ106は同期通信処理時間STと前記T2とT1の差から算出した周期待ち時間Qの大きさを比較する。
【００５８】
ステップ107はSTがQより小さい場合（Ｙ）、同期通信処理開始タイマーを、OS41へ設定する。タイマー発火時間は、QとSTの差分である。このように同期通信処理開始を遅らせることで、通信ミドル61がバッファリングする入力データの量を大きくすることが可能である。可能であれば1回の同期通信処理で処理する入力データの量を大きくすることで、同期通信で発生するオーバーヘッドの軽減とシステムの応答性の向上が図れる。次にステップ102へ戻る。
ステップ111はSTがQより小さくない場合（Ｎ）、入力データの同期をするための同期通信処理を行う。まず、データ一致化ミドル内部で管理しているロジカルクロックLCに１を加算する。
【００５９】
ステップ112は通信ミドル61がバッファリングしていた入力データを同期データ管理テーブル52に設定する。入力データは１つ以上であってもよい。テーブルのデータ識別子は通信ミドルで、データは入力データで、サイズはデータのサイズでロジカルクロックにはステップ111で加算したロジカルクロックを、発生時刻は現在時刻を設定する。ステップ113はステップ112で設定した同期データ管理テーブル52を待機系計算機20へ送信する。また、同期データ管理テーブル52のSTATUSにSTARTを設定し入力同期の開始を示す。
【００６０】
ステップ114は待機系計算機20からの入力同期完了通知を待つ。ステップ115は同期データ管理テーブル52のSTATUSに入力同期の終了を示すENDに設定し、ステップ102へ戻る。
【００６１】
一方、待系計算機20はステップ113に対して以下の処理を行う。ステップ201は現用系計算機10からの同期データを受信する。ステップ202は同期データから入力データ情報を読出し、待機系計算機20の通信ミドル61のバッファリングした入力データとの整合性処理を行う。例えば、受信した同期データからの入力データのシリアル番号等の順の合わせ、待機系計算機20の通信ミドル61のバッファリングした入力データの並べ変え処理がある。待系計算機20のデータ一致化ミドルは通信ミドル61へ入力処理開始通知をし、通信ミドル61は待機系計算機のタスクへ入力データを渡す。それによって、タスクは処理開始を行う。前述したように、前現用系計算機10と待機系計算機20は同じソフトウェアプログラム構造を持っており、同じ処理順序でタスク81を動作させているため、同じ入力データをタスクへ引き渡すことで、タスクの処理結果及び内部状態は一致させることができる。ステップ203は入力同期完了を現用系計算機10へ送信する。
【００６２】
図7は、現用系計算機10または待機系計算機20に障害が発生した場合、障害発生した前記計算機を復旧する処理の流れを示す。ステップ301は障害復旧が必要な待機系計算機20からの復旧要求を待つ。ステップ302は待機系計算機20からの復旧要求がある場合、後尾タスク81の処理終了を待つ。復旧処理は、現用系計算機10のタスク81の処理に影響を及ばないように周期待ち時間Q94の時間を利用して行う。
【００６３】
ステップ303は領域管理テーブル75の記憶領域の内容をすべてメモリにコピーする。ステップ304はコピーしたメモリを待機系計算機20へ転送する。転送処理のオーバーヘッドの軽減を考え、転送処理専用の子プロセスを生成し、タスクが実行している別の演算装置11のコアで実行してもよい。ステップ305は後述する高速リプレイ前処理を行う。本実施例では、後述する高速リプレイ処理は子プロセスを生成し前記の別コアで実施する例を示す。この場合、本ステップでは、高速リプレイ処理の子プロセスへの前処理開始通知となる。前処理開始通知はUNIX（登録商標） DOMAIN等のプロセス間通信機構等を利用する。
【００６４】
ステップ306は後述する差分転送前処理を行う。本実施例では、後述する差分転送処理は子プロセスを生成し前記の別コアで実施する例を示す。この場合、本ステップでは、差分転送処理の子プロセスへの前処理開始通知となる。ステップ307はステップ304で送信したメモリのコピー完了受信を待つ。送信メモリのコピーは待機系計算機20で実行されコピー完了を現用系計算機10へ通信する。詳細は後述する。
【００６５】
ステップ308ではメモリコピー完了を受信すると、ステップ304からステップ307までに現用系計算機10のタスクが処理した周期T92の合計時間RD311の間に変更された記憶領域の内容の復旧手段を選定し、復旧処理を行う処理時間判定部56を呼び出す。処理時間判定部56による復旧手段の選択と復旧処理は後述する。
【００６６】
一方、待機系計算機20はステップ301に対して以下の処理を行う。ステップ401は待機系計算機20は初期設定処理として、ステップ101と同様に、ミドルレイヤのソフトウェアプログラムの起動等の初期化やタスクの登録等タスクの処理開始のための初期処理を行う。ステップ402は現用系計算機10のタスク81との処理結果及び内部状態を一致させ、多重系の復旧するために、現用系計算機10へ復旧要求送信を行う。要求送信によって、ステップ301からの処理が現用系計算機10にて行われる。ステップ403はメモリコピー用のメモリ内容の受信を待つ。ステップ404は領域管理テーブル75から記憶領域情報を読出し、受信したメモリ内容のコピー先を確認する。
【００６７】
ステップ405は受信したメモリを読出し領域にコピーする。ステップ406は現用系計算機10へメモリコピー完了を送信する。ステップ407はステップ308で選定された復旧処理から復旧処理イベントを受信し、復旧処理を行う。詳細は後述する。
【００６８】
図8は高速リプレイ処理を示す。ステップ501は処理要求を待つ。処理要求として、ステップ305からの高速リプレイ前処理の要求と、ステップ308にて復旧手段として高速リプレイが選定された場合、後述する入力同期ログ転送要求がある。ステップ502はステップ305からの高速リプレイ前処理の要求か判断する。ステップ503は高速リプレイ前処理の要求の場合（Ｙ）、入力同期ログ作成処理を行う。本実施例では入力同期ログ作成処理のオーバーヘッドを考え、入力同期ログ作成処理専用の子プロセスを生成し、タスクが実行している別の演算装置11のコアで実行する。
入力同期ログは、図6で示した入力同期処理で設定した同期データ管理テーブルのログと計算機の内部イベントのログからなるものである。処理詳細は後述する。ステップ511は入力同期ログ転送要求の場合（Ｎ）、入力同期ログ転送処理を行う。処理詳細は後述する。
【００６９】
図9はステップ503の入力同期ログ作成処理を示す。ステップ601は入力同期ログ作成終了通知受信かを判断する。ステップ602は入力ログ作成終了通信を受信した場合（Ｙ）、入力同期ログ作成を終了する。ステップ611は入力ログ作成終了通信を受信してない場合（Ｎ）、図6の入力同期通信処理(ST)の終了を待つ。終了の判断は、同期管理テーブル52のSTATUS情報を読出し、同期が完了しているかどうか判断する。STATUS情報がENDであれば同期完了と判断しステップ612に進む。
【００７０】
ステップ612は同期データ管理テーブル52の内容をコピーし、同期データ管理テーブル52の新規インスタンスをメモリ上で作成する。コピーによって新規インスタンスの同期データ管理テーブル52には、現時点で外部ネットワーク32からの入力データが設定される。ステップ613は前記データ一致化ミドル51の内部ロジカルクロックLCに１を加算し、現在時刻を取得し、新規作成した同期データ管理テーブル52のロジカルクロックと発生時刻の情報に設定する。
【００７１】
ステップ614はタスク管理ミドル71からのタイマーやシグナル発生イベントの通知を待つ。多重系復旧時は、同期データ管理テーブル52の内容コピーによる入力データだけではなく、入力データを処理するタスク81の処理に影響を与えるタイマーイベントやシグナルイベントの発生内容も内部入力として活用することで、待機系計算機20のタスク81の状態を、現用系計算機10の入力ログの内容でリプレイできる。ステップ615は前記タスク管理ミドル71からのイベント通知があるか判断する。ステップ616はイベント通知があれば（Ｙ）、データ一致化ミドル51の内部ロジカルクロックLCに１を加算し、現在時刻を取得する。ステップ617はイベントがタイマーの場合、同期データ管理テーブル52のデータソース情報を、73で設定し、タイマー管理テーブル73から同タイマー識別子、例えばTR1に設定しているタイマー情報をデータとして設定する。また、そのデータのサイズTR_SIZEをサイズに設定する。またステップ616で取得したロジカルクロックと現在時刻を発生時刻として設定する。イベントがシグナルの場合は、前シグナル管理テーブル74をもって同様な処理を行う。次に、同期データ管理テーブル52のSIZE情報に設定したデータのサイズを加算する。
【００７２】
ステップ621はイベント通知がなければ（Ｎ）、タスク管理ミドル71からの通知により、後尾タスクの処理が終了したか判断する。判断がＮであれば、ステップ614に戻りイベント通知を待つ。判断がＹであれば、ステップ622に進む。
【００７３】
ステップ622は図4(b)の一致化データ管理テーブルの一致化データ識別子LOGの管理情報の保存先番地に前記ステップ612で作成したメモリの番地情報を設定し、そのメモリ上でコピーされた同期データ管理テーブル52のSIZE情報を管理情報のサイズに設定する。また、前記LOGのデータ数に１を加算する。次に、ステップ601に戻る。このステップで新規インスタンスの同期データ管理テーブル52はステップ304からタスクが処理したR回目、R+1回目のように、処理周期R+n回目の周期の入力同期ログの入力.logとしてメモリ上に保存される。
【００７４】
図10は図9で作成した入力同期ログの転送と待機系計算機20の高速リプレイ処理を示す。まず、ステップ511の入力同期ログ転送処理を説明する。ステップ701は図9で作成したすべての入力同期ログを転送する。ステップ304と同様にタスク81が実行している別の演算装置11のコアで実行している転送処理専用の子プロセスを利用して転送してもよい。
【００７５】
ステップ702は待機系計算機20からリプレイ処理完了通知を待つ。ステップ703は転送が必要な前記入力同期ログがあるか判断する。ステップ702のリプレイ完了待ちの間に作成された入力同期ログが存在するかを判断するためである。もし、存在すれば（Ｙ）、ステップ701に戻る。ステップ711は転送すべき入力同期ログがなければ（Ｎ）、図8のステップ503の処理に対して入力同期ログ作成終了通知を行う。ステップ712は入力同期ログ転送処理を終了する。
【００７６】
一方、待系計算機20は前記ステップ701に対して以下の処理を行う。ステップ801は現用系計算機10から転送された入力同期ログを受信し、そのログ内容を読みだす。ステップ802は受信した入力同期ログの数分だけ下記ステップを繰り返す。ステップ803はログ数分の処理が終了されると（Ｙ）、リプレイ終了通知を現用系計算機10へ送信する。ステップ811は受信した入力同期ログから同期データ管理テーブル52のデータソース情報から61の入力データをすべて読出し、待機系計算機20の通信ミドル61へ入力データを渡す。
【００７７】
また、待系計算機20のデータ一致化ミドル51は通信ミドル61へ入力処理開始通知をし、通信ミドル61は待機系計算機のタスクへ入力データを渡す。それによって、タスクは処理開始を行う。前述したように、前現用系計算機10と待機系計算機20は同じソフトウェアプログラム構造を持っており、同じ処理順序でタスク81を動作させているため、同じ入力データをタスクへ引き渡すことで、タスクの処理結果及び内部状態は一致させることができる。図6の入力同期処理に示したステップ113の現用系計算機10のデータ一致化ミドル51から送信される入力データの代わりに、本ステップでは前記ステップ801で受信した入力ログから取り出し、待機系計算機20の通信ミドル61へ入力データを渡すことで入力同期を実現している。
【００７８】
ステップ812は受信した入力同期ログに対して同期データ管理テーブル52のデータソース識別子に記載のタイマー管理テーブルのタイマーイベントや前記データソース識別子に記載のシグナル管理テーブルにあるシグナルイベントログを、ロジカルクロックLCの値が小さい順に並べ替える。また、同期データ管理テーブル52のデータソース識別子に記載の通信ミドルに設定されているデータ(IN_001)の設定時刻である発生時刻情報に対して、イベントログの発生の相対時間を算出し、待機系計算機20のOS41にタイマーイベント設定を行う。ステップ813はステップ812で設定したタイマーイベントか待機系計算機20の後尾タスクの終了イベントかを判断する。
【００７９】
ステップ814は設定したタイマーイベントか判断する。もし、後尾タスクの終了イベントであれば（Ｎ）、ステップ811に戻ると、先頭タスクの開始を行う。つまり、高速リプレイ処理は、821に示すように周期待ち時間Q94を省くことで、現用系計算機10のタスクの状態に追いつく時間を短縮する。短縮度合いは、タスク81の処理時間P93に対する周期待ち時間Q94の割合に比例する。詳細は、図13の復旧手段選択処理にて説明する。ステップ815は設定したタイマーイベントであれば（Ｙ）、待機系計算機20のタスク管理ミドル71へタイマー／シグナルイベントを通知する。図5のAP制御処理とイベント処理97に示したように、現用系計算機10で、タイマー／シグナルイベント通知を行うOS41の処理を、本処理でデータ一致化ミドル51が行う。
【００８０】
図11はもう一つの多重系復旧手段である差分転送処理を示す。ステップ901は処理要求を待つ。処理要求として、ステップ306からの差分転送前処理の要求と、ステップ308にて復旧手段として差分転送が選定された場合の、差分転送要求がある。ステップ902は前記ステップ306からの差分転送前処理の要求か判断する。ステップ903は処理要求が差分転送前処理であれば（Ｙ）、差分作成処理を行う。ステップ304のように、差分作成処理のオーバーヘッドを考え、差分作成処理専用の子プロセスを生成し、タスクが実行している別の演算装置11のコアで実行してもよい。詳細は後述する。
【００８１】
ステップ912は差分転送要求の場合（Ｎ）、ステップ903で作成した転送可能な差分があるか判断する。ステップ912は差分が存在すれば（Ｙ）、ステップ913へ進む。なければ（Ｎ）ステップ921の差分作成終了へ進む。ステップ913はステップ903で作成した差分を待機系計算機20へ転送する。ステップ304のように、転送処理のオーバーヘッドを考え、転送処理専用の子プロセスを生成し、タスク81が実行している別の演算装置11のコアで実行してもよい。
【００８２】
ステップ914は待機系計算機20からの差分コピー完了通知を待つ。待機系計算機20は現用系計算機10が送信した差分をコピーし、差分コピー完了を現用系計算機10へ通知する。差分コピー完了通知を受信すると、ステップ911へ戻る。ステップ921はステップ903の処理に対して差分作成終了通知を行い、ステップ901へ戻る。
【００８３】
図12はステップ903の差分作成処理を示す。ステップ1001は差分作成終了通知受信したか判断する。ステップ1002は終了通知を受信した場合（Ｙ）、差分作成処理を終了する。ステップ1011は終了通知を受信しなかった場合（Ｎ）、ステップ304で送信した記憶領域の更新の監視フラグがONされているか判断する。ステップ1012は記憶領域の更新の監視フラグがONの場合（Ｙ）、後尾タスク81の処理終了が実行されたか確認する。処理終了が実行されていなければステップ1001へ戻る。
【００８４】
ステップ1013は記憶領域の更新をチェックする。例えば、記憶領域がメモリでOS41がLinux(登録商標)であれば、/proc/pid/pagemapのファイル内容を確認することでミドルレイヤでもチェックは可能である。ステップ1014は記憶領域の更新があった場合、内容をコピーする。このステップでステップ304からタスクが処理したR回目、R+1回目のように、処理周期R+n回目のまでの処理の差分が1031のように差分.glbとしてメモリ上で保存される。もし、記憶領域がメモリであれば、ページ単位で記録され、ページ単位サイズ、例えば4KBの複数の差分.glbが作成される。差分.glbの数は、変更された記憶領域のサイズをページ単位で割った整数となる。そのため、前記タスク81の処理によっては、データ一致化対象の領域の全サイズの量の差分.glbが作成される可能性がある。この差分の量が一定量を超えると差分転送による多重系復旧において復旧時間が長くなり、復旧不可能となる場合がある。そのため、図10の高速リプレイによる復旧処理に切り替える判断が必要となる。その判断は、図13の復旧手段選択処理にて説明する。
【００８５】
ステップ1015は図4(b)の一致化データ管理テーブル53の一致化データ識別子のDIFFの情報を更新する。まず、ステップ1014で作成した差分のメモリ番地を一致化データ管理テーブル53の一致化データ識別子のDIFFの管理情報の保存先番地に設定し、差分のサイズを管理情報のサイズに設定する。次に、一致化データ管理テーブル53のデータ数に１を加算する。
【００８６】
ステップ1016は差分コピーが完了すると、記憶領域の更新の監視フラグをOFFとする。また、記憶領域変更監視処理のリセットを行う。例えば、記憶領域がメモリでOS41がLinuxであれば、/proc/pid/clear_refsのファイル内容を設定することでミドルレイヤでも更新監視のクリア処理が可能である。以上のステップにより図5のタスクの処理時間P93の間の更新をチェックし、タスクの周期待ち時間Q94で差分を作成することになる。次に、ステップ1001に戻る。
【００８７】
図13は処理時間判定部56に行う復旧処理時間に基づく復旧手段選択処理を示す。ステップ1101は稼動割計算部54を呼び出し、図5の周期Tの１周期内における実行時間Pに対する周期待ち時間Qの割合の[Q/P]を算出する。ステップ1102は記憶領域差分計算部55を呼び出し、1031の差分総量（Δ）に対する内部ネットワークの転送量である帯域（N）の割合の[N/Δ]を算出する。ステップ1103はステップ1101で算出した[Q/P]と、ステップ1102で算出した[N/Δ]に１（周期）を引いた（[N/Δ]−１）の量を比較する。
【００８８】
ステップ1104は[Q/P]が大きければ、高速リプレイ処理要求処理として、ステップ501に対して入力同期ログ転送要求を送信し、高速リプレイによる多重系復旧を実施する。ステップ1105は[Q/P]が大きくなければ、ステップ901に対して差分転送要求を送信し、差分転送による多重系復旧を実施する。
【００８９】
ステップ1103の判断の根拠を以下に説明にする。まず、関連用語を纏める。
【００９０】
M[byte]：データ一致化対象の記憶領域の総量
N[byte/秒]：内部ネットワーク31の転送量。帯域
T[秒]：図5のタスク実行周期時間
P[秒]：図5の周期内のタスク実行時間の合計
Q[秒]：図5の周期内のタスク次の周期までの待ち時間
Δ[byte]：1031の多重系復旧に必要な記憶領域の差分の総量
以上のパラメータにより以下の性質が導ける。
L1. データ一致化対象の記憶領域の総量を待機系計算機20へ転送する時間（311のRD）で現用系計算機10のタスク81が実行できる周期の回数は以下となる。
【００９１】
周期の回数＝M/N × 1/T
L2. 図10の高速リプレイ処理で、待機系計算機20が現用系計算機10の処理に追いつくまでの時間（αＴ）は以下の計算式で算出できる。
【００９２】
αＴ  ＝（M/N × 1/T）/[Q/P]
L3. 図11の差分転送処理で待機系計算機20が現用系計算機10の処理に追いつくまでの時間（αＴ）は以下の計算式で算出できる。
【００９３】
αＴ  ＝（M/N × 1/T）/（[N/Δ]−１）
L3-1. 図11の差分転送処理による多重系復旧処理時間が収束する条件は以下である。
【００９４】
[N/Δ]  ＞  １回の周期時間
L4. L2とL3から、多重系復旧時間を短縮するには現用系計算機10の処理に追いつくまでの時間（αＴ）を短くする手段を選択する必要があり、[Q/P]と（[N/Δ]−１）を比較し、この値が大きい方が手段を選べば、αＴが小さくなるので多重系復旧時間を短縮することができる。
図14は稼動割合計算部の処理を示す。
【００９５】
ステップ1201は前記タイマー管理テーブル73から先頭タスク81が設定しているタイマーインターバル情報を取得し、t1に設定する。
【００９６】
ステップ1202は入力同期作成処理503で作成された入力ログの内容である同期データ管理テーブル52のデータソース識別子61の発生時刻を読込、先頭タスク81の処理開始時刻として、t2に設定する。まず、図9の入力同期ログ作成処理において入力同期処理後にデータソース識別子61のログが作成される。また、図6の入力同期処理終了後に先頭タスクの処理開始が行われるため、先頭タスクの処理開始時刻として利用可能である。ただし、前述したように図5のPの算出方法でのタスクの開始時刻算出も可能であり、その算出方法については本実施例に限定されるものではない。
【００９７】
ステップ1203は同期データ管理テーブル52のデータソース識別子72から、後尾タスクの終了時に利用されるIPC_3の発生時刻を読込、後尾タスクの終了時刻t3を設定する。
【００９８】
ステップ1204はステップ1202で設定したt2と前記ステップ1203で設定したt3の差からタスクグループの処理時間Pを算出する。
【００９９】
ステップ1205はステップ1201で設定したt1にステップ1202で設定したt2を加算し先頭タスクが次に処理開始を行う時刻を算出する。また、算出した時刻とステップ1203で設定したt3との差からタスクグループの待ち時間Qを算出する。
【０１００】
ステップ1206はステップ1204で算出したタスクグループの処理時間Pに対してステップ1205で算出したタスクグループの待ち時間Qの割合を算出する。
図15は記憶領域差分計算部の処理を示す。
【０１０１】
ステップ1301は一致化データ管理テーブル53の一致化データ識別子DIFFのデータ数を読込む。
【０１０２】
ステップ1302はデータ数分の、一致化データ管理テーブル53の一致化データ識別子DIFFの管理情報のサイズの合計を算出し、図７のRD間で作成された記憶領域の差分の総量Δを算出する。
【０１０３】
ステップ1303は内部ネットワークの帯域を取得し、ステップ1302で算出した差分の総量Δに対する割合N/Δを算出する。
【符号の説明】
【０１０４】
10…現用系計算機、11…演算装置、12…記憶装置、13…通信装置１、14…通信装置2、20…待機系計算機、31…現用系計算機と待機系計算機間を接続するLAN、32…現用系計算機と待機系計算機を外部計算機と接続する外部ネットワーク、41…OS、51…データ一致化ミドル、52…同期データ管理テーブル、53…一致化データ管理テーブル、54…稼動割計算部、55…記憶領域差分計算部、56…処理時間判定部、61…通信ミドル、71…タスク管理ミドル、72…タスク管理テーブル、73…タイマー管理テーブル、74…シグナル管理テーブル、75…領域管理テーブル、81…タスク、91…タスク処理とタイミング概要、92…周期、93…実行時間P、94…周期待ち時間Q、95…外部入力バッファリング時間INQ_T、96…入力同期通信処理時間ST、97…タスク制御処理とイベント処理
【図１】
0006446315.tif 000002
【図２】
0006446315.tif 000003
【図３（ａ）】
0006446315.tif 000004
【図３（ｂ）】
0006446315.tif 000005
【図３（ｃ）】
0006446315.tif 000006
【図３（ｄ）】
0006446315.tif 000007
【図４（ａ）】
0006446315.tif 000008
【図４（ｂ）】
0006446315.tif 000009
【図５】
0006446315.tif 000010
【図６】
0006446315.tif 000011
【図７】
0006446315.tif 000012
【図８】
0006446315.tif 000013
【図９】
0006446315.tif 000014
【図１０】
0006446315.tif 000015
【図１１】
0006446315.tif 000016
【図１２】
0006446315.tif 000017
【図１３】
0006446315.tif 000018
【図１４】
0006446315.tif 000019
【図１５】
0006446315.tif 000020