(57)【要約】【課題】周期駆動タスクの周期抜けを防止するとともに複数の計算機の間において短時間で各タスク処理状態の再同期を完了すること。【解決手段】多重系システムは、複数の計算機において全てのタスクが停止中に、復旧対象の計算機と稼働中の計算機との間で各タスクの処理状態を一致させ、上記各タスクのうち複数の周期駆動タスクの周期の開始時刻が定期的に揃うように周期の開始時刻を調整し、各タスクの周期駆動タスクの開始時刻が揃う直前の所定期間に亘って周期駆動タスクの実行を抑止する。【選択図】図３
2019021257.tif 000002
【特許請求の範囲】
【請求項１】
複数の計算機において各タスクが同一の処理を実行する多重系システムにおいて、
前記複数の計算機において前記各タスクが全て停止中に、前記複数の計算機のうちの復旧対象の計算機についてそのタスクの処理状態を稼働中の計算機のタスクの処理状態に合わせることにより、前記複数の計算機の間において前記各タスクの処理状態を一致させて記各タスクが再度前記同一の処理を同期して実行可能な状態とする状態一致化部と、
前記各タスクのうち周期的に駆動する複数の周期駆動タスクの周期の開始時刻が定期的に揃うように前記複数の周期駆動タスクの周期の開始時刻を調整する開始時刻調整部と、
前記複数の周期駆動タスクの開始時刻が揃う直前の所定期間に亘って前記複数の周期駆動タスク以外のタスクの実行を規制するタスク実行抑止部と、
を備えることを特徴とする多重系システム。
【請求項２】
前記状態一致化部は、
前記直前の所定期間において、前記各タスクの処理状態の差分を前記稼働中の計算機から前記復旧対象の計算機に転送することを特徴とする請求項１に記載の多重系システム。
【請求項３】
前記開始時刻調整部は、
前記複数の周期駆動タスクのうちのいずれか所定の周期駆動タスクの初回周期の開始時刻を、既に稼働中の他の周期駆動タスクの周期の開始時刻に合わせるように調整することを特徴とする請求項１に記載の多重系システム。
【請求項４】
前記開始時刻調整部は、
前記複数の周期駆動タスクのうち所定の周期駆動タスクの初回周期の開始時刻を決定する際、前記所定の周期駆動タスクの第一の周期と、前記複数の周期駆動タスクのうち既に稼働中の周期駆動タスクの周期の開始時刻が揃う第二の周期と、の最大公約数の整数倍を前記第二の周期の開始時刻に加算した時刻を、前記所定の周期駆動タスクの初回周期の開始時刻と設定することを特徴とする請求項１に記載の多重系システム。
【請求項５】
前記状態一致化部は、
前記直前の所定期間に前記各タスクの処理状態を一致させる際、前記各タスクのうち前記周期駆動タスクよりも優先して実行されるべき高優先タスクによって更新される処理状態を極力後に一致させ、かつ、
前記タスク実行抑止部は、
前記直前の所定期間において例外的に前記高優先タスクの実行を許容し、
前記状態一致化部は、
その後前記高優先タスクが実行された後、当該高優先タスクによってさらに更新された処理状態を再度前記複数の計算機の間で一致させることを特徴とする請求項１に記載の多重系システム。
【請求項６】
複数の計算機において各タスクが同一の処理を実行する多重系システムにおける再同期方法において、
前記多重系システムが、前記複数の計算機において前記各タスクが全て停止中に、前記複数の計算機のうちの復旧対象の計算機についてそのタスクの処理状態を稼働中の計算機のタスクの処理状態に合わせることにより、前記複数の計算機の間において前記各タスクの処理状態を一致させて記各タスクが再度前記同一の処理を同期して実行可能な状態とする状態一致化ステップと、
前記多重系システムが、前記各タスクのうち周期的に駆動する複数の周期駆動タスクの周期の開始時刻が定期的に揃うように前記複数の周期駆動タスクの周期の開始時刻を調整する開始時刻調整ステップと、
前記多重系システムが、前記複数の周期駆動タスクの開始時刻が揃う直前の所定期間に亘って前記複数の周期駆動タスク以外のタスクの実行を規制するタスク実行抑止ステップと、
を有することを特徴とする多重系システムにおける再同期方法。
【請求項７】
前記状態一致化ステップでは、
前記多重系システムが、前記直前の所定期間において、前記各タスクの処理状態の差分を前記稼働中の計算機から前記復旧対象の計算機に転送することを特徴とする請求項６に記載の多重系システムにおける再同期方法。
【請求項８】
前記開始時刻調整ステップでは、
前記多重系システムが、前記複数の周期駆動タスクのうちのいずれか所定の周期駆動タスクの初回周期の開始時刻を、既に稼働中の他の周期駆動タスクの周期の開始時刻に合わせるように調整することを特徴とする請求項６に記載の多重系システムにおける再同期方法。
【請求項９】
前記開始時刻調整ステップでは、
前記多重系システムが、前記複数の周期駆動タスクのうち所定の周期駆動タスクの初回周期の開始時刻を決定する際、前記所定の周期駆動タスクの第一の周期と、前記複数の周期駆動タスクのうち既に稼働中の周期駆動タスクの周期の開始時刻が揃う第二の周期と、の最大公約数の整数倍を前記第二の周期の開始時刻に加算した時刻を、前記所定の周期駆動タスクの初回周期の開始時刻と設定することを特徴とする請求項６に記載の多重系システムにおける再同期方法。
【請求項１０】
前記状態一致化ステップでは、
前記多重系システムが、前記直前の所定期間に前記各タスクの処理状態を一致させる際、前記各タスクのうち前記周期駆動タスクよりも優先して実行されるべき高優先タスクによって更新される処理状態を極力後に一致させ、かつ、
前記タスク実行抑止ステップでは、
前記多重系システムが、前記直前の所定期間において例外的に前記高優先タスクの実行を許容し、
前記状態一致化ステップでは、
その後前記高優先タスクが実行された後、前記多重系システムが、当該高優先タスクによってさらに更新された処理状態を再度前記複数の計算機の間で一致させることを特徴とする請求項６に記載の多重系システムにおける再同期方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、多重系システム及び多重系システムにおける再同期方法に関し、特に、復旧対象の計算機について、そのタスクの処理状態を稼働中の計算機のタスクの処理状態に一致させることにより再同期して動作するように構成された多重系システムに適用して好適なものである。
【背景技術】
【０００２】
ある種の多重系システムでは複数の計算機が同期して動作する。すなわち、多重系システムでは、各計算機上では一つ以上のタスク（ソフトウェアプログラム）が動作し、これらのタスクに同一の入力を与え、同一の処理を実行させ、同一の出力を同一のタイミングで得る。そして、これらの出力を比較照合し、一致した場合のみシステムの外部に出力する。ここで、複数の計算機の一部の計算機が障害により動作を停止したとしても、残りの他の計算機が稼働し続ける限り、システム全体として無停止を実現することができる。
【０００３】
しかしながら、停止中の計算機をそのままにしておくといずれ稼働中の計算機が存在しなくなるため、多重系システムはシステム全体として停止してしまう。そこで、多重系システムでは、復旧対象である当該停止中の計算機で駆動されるべきタスクの内部状態を稼働中の計算機のタスクの内部状態に一致させ、再び同期して動作させる。ここでいう「タスクの内部状態」は、タスクが動作をするために必要なデータ群を示しており、例えば、タスクが管理するメモリ内容、共有メモリの内容、記憶装置上のファイル及び通信バッファの内容が挙げられる。
【０００４】
多重系システムにおける再同期方法として、三段階のフェーズに分けて実施する技術が存在している。第一のフェーズでは、動作中のタスクの実行を停止せずに稼働中の計算機のタスクの内部状態を全て復旧対象の計算機に転送する。第二のフェーズでは、稼働中の計算機のタスクの内部状態について前回転送時から更新された分を徐々に転送していく。この内部状態の更新量が十分少なくなったとき、第三のフェーズに移行する。第三のフェーズでは、稼働中の計算機において、タスクの内部状態を更新し得る全タスクを一時停止させ、前回転送してから更新されたタスクの内部状態を全て復旧対象の計算機に転送し、稼働中の計算機及び復旧対象の計算機のタスクの内部状態を一致させる。その後、停止中のタスクの実行を再開することで、停止中であった計算機は、稼働中の計算機と同様に同期しつつ動作するようになる。
【０００５】
ここで、第三フェーズにおいて、任意のタイミング、あるいは任意の期間、タスクの実行を一時停止させた場合、周期動作するタスクの周期抜けなどが発生する。これは、特にリアルタイム性を必要とする制御システムでは発生してはならない事象である。
【０００６】
このような事象が発生しないようにするため、従来の多重系システムでは、外部ネットワークに接続される第一の計算機及び第二の計算機がそれぞれ、周期駆動ソフトウェアと、通信駆動ソフトウェアと、これらソフトウェアの駆動による処理データを記憶するメモリとを備えている（特許文献１参照）。第一の計算機は、第一の計算機及び第二の計算機に共通化した処理内容で複数の機能を発揮させるメモリ一致化機構、タイマ一致化機構及び受信一致化機構を備えることにより、メモリに記憶された処理データを第二の計算機に転送して周期抜け及び受信抜けを防止しつつ再同期させる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００９−２１７５０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
近年、マルチコアプロセッサが普及しており、多数のタスクを並列に実行することができるようになっている。すなわち、複数の周期駆動タスク及びイベント駆動タスクを並列動作させたり、バッチ処理のような比較的処理時間が長いタスクを平行して実行させることが可能となっている。
【０００９】
しかしながら、多数の周期駆動タスク及び処理時間の長いタスクを並列動作させている場合、前述した方法による再同期は必ずしも望ましく機能しない。例えば、周期が１であり、平均処理時間が０．５で動作する二つの周期駆動タスクが動作している場合、一方の周期駆動タスクが当該周期の処理を終えて次の周期を待つ際に他方の周期駆動タスクが新しい周期の処理を開始すると、多重系システムでは、前述した第三フェーズの処理を実行するのに十分な時間を確保できず再同期に失敗し続けることになる。第三フェーズに亘って周期駆動タスクを一時的に停止することも考えられるが、周期抜けが発生したり応答性要件を満たさないおそれもある。一方、イベント駆動タスクも、その駆動契機及び処理時間によっては周期駆動タスクが次の周期を待っている間に亘って動作し続けてしまう状況があり得る。
【００１０】
本発明は以上の点を考慮してなされたもので、複数の計算機上でタスクが動作する多重系システムにおいてタスクの周期抜けを防止するとともに複数の計算機の間において短時間でタスクの処理状態の同期を完了することができる多重系システム及び多重系システムにおける再同期方法を提案しようとするものである。
【課題を解決するための手段】
【００１１】
かかる課題を解決するため、本発明においては、複数の計算機において各タスクが同一の処理を実行する多重系システムにおいて、前記複数の計算機において前記各タスクが全て停止中に、前記複数の計算機のうちの復旧対象の計算機についてそのタスクの処理状態を稼働中の計算機のタスクの処理状態に合わせることにより、前記複数の計算機の間において前記各タスクの処理状態を一致させて各タスクが再度前記同一の処理を同期して実行可能な状態とする状態一致化部と、前記各タスクのうち周期的に駆動する複数の周期駆動タスクの周期の開始時刻が定期的に揃うように前記複数の周期駆動タスクの周期の開始時刻を調整する開始時刻調整部と、前記複数の周期駆動タスクの開始時刻が揃う直前の所定期間に亘って前記複数の周期駆動タスク以外のタスクの実行を規制するタスク実行抑止部と、を備えることを特徴とする。
【００１２】
また、本発明においては、複数の計算機において各タスクが同一の処理を実行する多重系システムにおける再同期方法において、前記多重系システムが、前記複数の計算機において前記各タスクが全て停止中に、前記複数の計算機のうちの復旧対象の計算機についてそのタスクの処理状態を稼働中の計算機のタスクの処理状態に合わせることにより、前記複数の計算機の間において前記各タスクの処理状態を一致させて記各タスクが再度前記同一の処理を同期して実行可能な状態とする状態一致化ステップと、前記多重系システムが、前記各タスクのうち周期的に駆動する複数の周期駆動タスクの周期の開始時刻が定期的に揃うように前記複数の周期駆動タスクの周期の開始時刻を調整する開始時刻調整ステップと、前記多重系システムが、前記複数の周期駆動タスクの開始時刻が揃う直前の所定期間に亘って前記複数の周期駆動タスク以外のタスクの実行を規制するタスク実行抑止ステップと、を有することを特徴とする。
【発明の効果】
【００１３】
本発明によれば、複数の計算機上でタスクが動作する多重系システムにおいてタスクの周期抜けを防止するとともに複数の計算機の間において短時間でタスクの処理状態の同期を完了することができる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態による多重系システムの概略構成例を示すブロック図である。
【図２】図１に示す計算機の構成例を示すブロック図である。
【図３】計算機において動作するソフトウェア及びテーブルの構成例を示すブロック図である。
【図４】再同期周期管理テーブルの具体例である。
【図５】周期駆動タスク管理テーブルの具体例である。
【図６】周期駆動タスクの動作の一例を示すフローチャートである。
【図７】イベント駆動タスクの動作の一例を示すフローチャートである。
【図８】周期駆動タスクの周期タイマ登録処理の一例を示すフローチャートである。
【図９】図１７及び図１８を説明するための再同期周期管理テーブルの具体例である。
【図１０】図１７及び図１８を説明するための周期駆動タスク管理テーブルの具体例である。
【図１１】状態一致化処理の一例を示すフローチャートである。
【図１２】図１１に示す状態一致化処理におけるタスクの処理状態の更新箇所抽出処理の一例を示すフローチャートである。
【図１３】図１１に示す更新済処理状態転送処理の詳細な内容の一例を示すフローチャートである。
【図１４】状態一致化処理の一例を示すフローチャートである。
【図１５】再同期中断タイマが作動した際の処理の一例を示すフローチャートである。
【図１６】タスク実行可否判定処理の一例を示すフローチャートである。
【図１７】第２の実施の形態における周期タイマ登録処理の一例を示すフローチャートである。
【図１８】図１７において次の再同期周期開始時刻を算出する方法の一例を示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、図面について、本発明の一実施の形態について詳述する。ある種の多重系システムでは、複数の計算機におけるタスクの内部状態の同期方法（以下「再同期方法」ともいう）を、第一のフェーズ、第二のフェーズ及び第三のフェーズという３段階のフェーズに分けて実施している。
【００１６】
具体的には、第一のフェーズにおいては、動作中のタスクの実行を停止せずに稼働中の計算機のタスクの内部状態を全て復旧対象の計算機に転送する。第二のフェーズにおいては、稼働中の計算機のタスクの内部状態のうち前回転送した時から更新された分を徐々に転送していく。この内部状態の更新量が十分少なくなると、次のような第三のフェーズに移行する。
【００１７】
第三のフェーズにおいては、まず、稼働中の計算機において、タスクの内部状態を更新し得る全タスクを一時停止させ、前回転送してから更新されたタスクの内部状態を全て復旧対象の計算機に転送し、稼働中の計算機及び復旧対象の計算機のタスクの内部状態を一致させる。その後、停止中のタスクの実行を再開することで、復旧対象の計算機は、上述した稼働中の計算機と同様に、同期して動作するようになる。
【００１８】
本実施の形態では、このような多重系システムにおいてそのような第三フェーズを、後述するように新たな第三フェーズと第四フェーズとに分けて実施することにより、復旧対象の計算機を稼働中の計算機に再同期させている。以下、具体的に説明する。
【００１９】
（１）第１の実施の形態
（１−１）ハードウェア構成例
図１は、第１の実施の形態による多重系システム１の概略構成例を示す。
多重系システム１は、複数のタスクが稼働する複数の計算機１０〜１２を備えており、一例として計算機１０〜１２を備えている。各計算機１０〜１２は、内部ネットワーク５０を介して互いに情報を交換する。
【００２０】
上述した各計算機１０〜１２上では、同一のタスク群が同期しながら動作する。すなわち、各計算機１０〜１２上で動作する各タスクは、外部装置４０または照合装置３０から、内部ネットワーク５０及び通信装置１０４を介して同一のデータを受信し、同一のタイミングで同一の処理を実行し、同一の処理結果を得る。各タスクは、内部ネットワーク５０を介して照合装置３０に対して、上記処理の結果を出力する。
【００２１】
照合装置３０は、各計算機１０〜１２から受信した上記処理の結果を比較し、正しいと判定された処理結果のみを外部装置４０に出力する。なお、各計算機１０〜１２上では、上記処理の結果に影響を与えない限り、それらのタスクに同期して動作しない他のタスクが動作してもよい。
【００２２】
図２は、図１に示す計算機１０の構成例を示す。計算機１１，１２は、計算機１０と同様な構成であるため、これらについては説明を省略する。
【００２３】
計算機１０は、少なくとも上記処理を実行するタスク（ソフトウェアプログラム）及びデータ等を格納するメモリ１０２と、メモリ１０２上のソフトウェアプログラムを実行するＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１と、データが格納される記憶装置１０３と、内部ネットワーク５０を介してデータを送受信する通信装置１０４と、計時機能によってタスクの起床タイミングを制御するタイマ装置１０６と、を備えている。なお、照合装置３０及び外部装置４０は、計算機１０と同様のハードウェア構成としても良いため、その説明を省略する。
【００２４】
（１−２）ソフトウェア構成例
図３は、計算機１０において動作するソフトウェア及びテーブルの構成例を示すブロック図である。なお、計算機１１，１２も、計算機１０と同様なソフトウェア及びテーブルを備えるため、これらの説明を省略する。
【００２５】
計算機１０は、再同期部７０、タスクスケジューラ８０、タイマ部８１、タスク９０、再同期周期管理テーブル６００及び周期駆動タスク管理テーブル７００を備えている。
【００２６】
タスク９０は、当該多重系システムにおいて業務を行うソフトウェアプログラムの集合である。このタスク９０は、周期的に駆動される周期駆動タスク、周期駆動タスクではないタスクであって所定の契機で駆動するタスク（以下「イベント駆動タスク」という）、及び、バッチ処理等を実行するタスクを含んでいる。
【００２７】
タスクスケジューラ８０は、タスク９０またはその他ソフトウェアプログラムが実行可能な状態にある際、所定のアルゴリズムに基づきそのうちの一つを選択し、ＣＰＵ１０１にこの選択した１つを実行させる。計算機１０〜１２が複数のＣＰＵ１０１を備えている場合、各ＣＰＵ１０１ごとに上記タスクなどが選択され実行される。
【００２８】
タイマ部８１は、少なくとも、周期駆動タスクが一定の周期で駆動するための契機を与えたり、タイムアウト処理を実現するための機能を提供する。例えば、後述する図５に示す行７１０のように、周期開始時刻７０３が１００であり、かつ、周期Ｔ（周期７０４の値に相当）が３である周期駆動タスク（タスク識別子＝３であるタスク）が登録されている場合、タイマ部８１は、時刻が１００，１０３，１０６のタイミングにおいて、タスク識別子７０１が１であるタスクに駆動の契機を与える。
【００２９】
再同期部７０は、復旧対象である計算機１１のタスクの処理状態を、稼働中の計算機１０のタスクの処理状態に一致させ、この計算機１１を再び稼働中の状態にし、多重系を構成する残りの計算機１２と同期して動作させるための機能を提供する。
【００３０】
再同期部７０は、タスク実行抑止部７１及び状態一致化部７２を備えている。稼働中または停止中であるかに関わらず、計算機１０のみならず計算機１１，１２は、計算機１０と同様に構成されている。ここで、一例として、複数の計算機１０〜１２のうち計算機１０を稼働中の計算機と仮定する一方、残りの計算機１１，１２のうち計算機１１を再同期させる必要がある復旧対象の計算機と仮定する。
【００３１】
計算機１０の状態一致化部７２は、再同期の開始要求を受け取ると、タスクの状態の内容またはその差分を、内部ネットワーク５０を介して送信し、計算機１１の状態一致化部７２がこれを受信する。さらに計算機１１の状態一致化部７２は、予め起動しておいたタスク群に対し、上記受信したタスクの状態の内容またはその差分を反映させる。なお、状態一致化部７２による詳細な処理内容については後述する。
【００３２】
再同期周期管理テーブル６００は、全ての周期駆動タスクの周期の開始時刻が一致する時刻及び周期を管理する。各周期駆動タスクは、当該周期の処理を終えた後、次の周期の開始時刻までに亘って何も実行しない状態（アイドル状態）となる。このため、上記周期の開始時刻が一致する時刻の直前の一定期間に亘って、周期駆動タスクが動作を開始しないことが期待される。この期間は、再同期処理の第三フェーズ以降を実施する期間として好適である。再同期周期管理テーブル６００の詳細な構成については後述する。
【００３３】
周期駆動タスク管理テーブル７００は、稼働中の周期駆動タスクごとに、初回周期の開始時刻と、駆動される周期Ｔとを管理する。タスクスケジューラ８０及びタイマ部８１は、周期駆動タスク管理テーブル７００を参照し、上述のように管理された適切なタイミングにおいて各周期駆動タスクを駆動する。周期駆動タスク管理テーブル７００の詳細な構成については後述する。
【００３４】
図４は、再同期周期管理テーブル６００の一例を示す。再同期周期管理テーブル６００は、そのカラムとして、更新時刻６０１、再同期周期開始時刻ｔＲ、及び再同期周期ＴＲを有する。
【００３５】
更新時刻６０１は、当該行を更新した時刻を示す。再同期周期開始時刻６０２は、稼働中の全周期駆動タスクの周期開始時刻が一致する時刻の一つを表す。再同期周期６０３は、上述した一致する時刻と次に一致する時刻との時間間隔を表す。
【００３６】
再同期周期管理テーブル６００は、周期駆動タスクが、後述する周期タイマ登録処理を実施する度に更新される。図示の例では、更新時刻６０１が１００である時に行６１０の内容が登録され、更新時刻６０１が１０４である時に行６２０の内容が登録されたことを示す。
【００３７】
この再同期周期管理テーブル６００は、実際には、このように過去の更新履歴（更新時刻６０１が１００である時の行６１０の内容に相当）を保持する必要はなく、最新の再同期周期開始時刻ｔＲ（再同期周期開始時刻６０２の値に相当）及び再同期周期ＴＲ（再同期周期６０３の値に相当）のみ（行６２０の内容に相当）を保持していれば十分である。
【００３８】
図５は、周期駆動タスク管理テーブル７００の一例を示す。周期駆動タスク管理テーブル７００は、そのカラムとして、タスク識別子７０１、要求周期開始時刻７０２、周期開始時刻７０３及び周期７０４を有する。
【００３９】
タスク識別子７０１は、タイマ作動時に駆動させる周期駆動タスクを特定するための識別子である。要求周期開始時刻７０２は、初回周期の開始時刻として指示された時刻を示す。図示の例においては、タスク識別子が１であるタスクについて、当該初回周期の開始時刻が周期タイマ登録を実施しようとした時刻と同一であることを仮定している。周期開始時刻７０３は、周期開始時刻の調整機能により調整された初回周期の開始時刻を示しており、要求周期開始時刻７０２以降の時刻となる。
【００４０】
周期７０４は、周期駆動タスクから要求された周期を示しており、当該周期タスクが周期処理を実行する時間間隔を表している。例えば、行７１０の内容によれば、タスク識別子７０１が１であるタスクは、開始時刻が１００である時点から周期３ごとに、時刻１００，１０３，１０６において起動されることを意味している。
【００４１】
（１−３）多重系システムにおける再同期方法
（１−３−１）周期駆動タスクの動作例
図６は、周期駆動タスクの周期駆動タスク処理の一例を示す。周期駆動タスクは、起動が開始されると、初期化処理としてタスクの状態の初期化等を行う（ステップＳ４０１）。
【００４２】
次に周期タイマ登録処理が実施され（ステップＳ４０２）、この周期タイマ登録処理によって設定された所定の周期でタイマ部８１が作動するようにする。このとき、初めて当該タイマ部８１が作動する時刻も併せて指定される。
【００４３】
その後、タイマ部８１が作動するまで待ち処理を実行し続け（ステップＳ４０３）、タイマ部８１が作動した後、当該周期における周期処理を実施する（ステップＳ４０４）。この周期処理では、周期駆動タスクの処理状態に従って一意に動作するものとし、処理結果は周期駆動タスクの処理状態に反映され、次の周期以降でも利用する。周期駆動タスクは、周期処理を終えると、ステップＳ４０３に戻り、再び待ち処理を続ける。なお、周期タイマ登録の詳細については後述する。
【００４４】
（１−３−２）イベント駆動タスクの動作例
図７は、イベント駆動タスクによるイベント駆動タスク処理の一例を示す。イベント駆動タスクは、起動が開始されると、初期化処理として、例えばタスクの状態の初期化を実行する（ステップＳ５０１）。イベント駆動タスクは、その後、当該タスクの起床要因となるイベントが発生するまで実行を停止する（ステップＳ５０２）。起床要因となるイベント発生後、イベント駆動タスクは、タスク実行可否判定を行う（ステップＳ５０３）。
【００４５】
実行抑止と判定された場合は、イベント駆動タスクは、その実行抑止が解除されるまでの間に亘って実行を一時停止する。タスク実行可否判定の詳細は後述する。一方、タスク実行可否判定において実行可と判定された場合、イベント駆動タスクは、イベント処理を実行する（ステップＳ５０４）。
【００４６】
イベント処理では、イベント駆動タスクが、前述したタスクの処理状態に従って一意に動作するものとし、処理結果はタスクの処理状態に反映され、次回以降の起床時でも利用する。イベント駆動タスクは、イベント処理を終えるとステップＳ５０２に戻り、再びイベントの待ち処理を継続する。
【００４７】
（１−３−３）多重系システムによる再同期方法
多重系システム１は以上のような構成であり、次にその動作例として、多重系システム１における再同期方法について説明する。本実施の形態では、多重系システム１における再同期方法として、周期駆動タスクの開始周期を調整している。以下に説明する図８〜１０は、当該調整機能の一例を示すフローチャートである。
【００４８】
図８は、周期駆動タスクの周期タイマ登録処理（図６のステップＳ４０２参照）の詳細な一例を示す。ここでは、要求周期開始時刻がｔｒｅｑ（要求周期開始時刻７０２）であり、かつ、周期がＴ（周期７０４の値に相当）である周期タイマ登録要求があった場合を例示している。
【００４９】
まず、タイマ部８１は、再同期周期管理テーブル６００が空かである否かをチェックする（ステップＳ８０１）。タイマ部８１は、再同期周期管理テーブル６００が空であった場合、周期開始時刻ｔ（周期開始時刻７０３の値に相当）にｔｒｅｑを代入し（ステップＳ８０２）、再同期周期開始時刻ｔＲ（再同期周期開始時刻６０２の値に相当）にｔｒｅqを代入するとともに、再同期周期ＴＲ（再同期周期６０３の値に相当）にＴを代入する（ステップＳ８０３）。
【００５０】
一方、タイマ部８１は、再同期周期管理テーブル６００が空でなかった場合、tを次の再同期周期開始時刻にセットする（ステップＳ８０５）。すなわち、タイマ部８１は、ｔｒｅｑ＜ｔＲ＋ｎ・ＴＲ＝ｔ（ｎは整数）を満たす最小のｔを求める。
【００５１】
続けて、タイマ部８１は、再同期周期開始時刻ｔＲに上記ｔをセットし（ステップＳ８０６）、さらに再同期周期ＴＲを全周期駆動タスク（当該周期駆動タスクを含む）の周期７０４の最小公倍数にセットする（ステップＳ８０７）。最後にタイマ部８１は、周期駆動タスク管理テーブル７００の新規行に、当該周期駆動タスクに関する周期開始時刻ｔ及び周期Ｔを登録する（ステップＳ８０４）。
【００５２】
ここで、図８の具体的な処理の流れについて、図６及び図７の具体例を用いて説明する。初期状態として、図６に示す再同期周期管理テーブル６００及び図７に示す周期駆動タスク管理テーブル７００は空であるとする。本実施の形態では、その後、時刻が１００である時に周期が３（周期７０４の値に相当）であり、時刻が１０４である時に周期が４であり、時刻が１１０である時に周期が６である、周期タイマを登録する場合を考える。
【００５３】
まず、時刻が１００である時、再同期周期管理テーブル６００は空であるため、タイマ部８１は、再同期周期管理テーブル６００に、再同期周期開始時刻６０２を１００にセットするとともに再同期周期６０３を３にセットする。さらにタイマ部８１は、周期駆動タスク管理テーブル７００に、周期開始時刻が１００であり、かつ、周期が３であるエントリ（タスク識別子が１であるタスクに相当）を登録する。
【００５４】
次にタイマ部８１は、周期駆動タスク管理テーブル７００に、時刻が１０４である時に周期７０４が４である周期タイマを登録する。次の再同期周期の開始時刻は１００＋２・３＝１０６であるため、タイマ部８１は、周期駆動タスク管理テーブル７００に、周期開始時刻７０３に１０６をセットする。タイマ部８１は、再同期周期管理テーブル６００において再同期周期開始時刻６０２を同様に１０６に更新し、再同期周期を、３と４の公倍数である１２に更新する。
【００５５】
続いて、タイマ部８１は、時刻が１１０である時に周期が６である周期タイマを登録する。次の再同期周期の開始時刻は１０６＋１・１２＝１１８であるので、タイマ部８１は、周期駆動タスク管理テーブル７００において、周期開始時刻７０３を１１８とするとともに周期を６（周期７０４の値に相当）として登録する。再同期周期６０３は、３と４と６との最小公倍数である１２と更新すべきであるが、現在の値と等しい場合、タイマ部８１は、再同期周期管理テーブル６００を更新しなくても良い。
【００５６】
以上のような手順によると、少なくとも全周期駆動タスクの周期の最小公倍数で表される周期にて、全周期駆動タスクの周期の開始時刻が一致する時刻が現れる。すなわち、上記一致する時刻の直前は、最も長時間に亘って、周期駆動タスクが動作しない時間帯であることが期待できる。つまり、遅くとも、上記最小公倍数で示される周期時間を待てば、周期駆動タスクの実行を阻害することなく、例えば複数の計算機１０，１１の間における再同期を完了可能となることが期待される。
【００５７】
次に、再同期部７０のメイン処理である状態一致化部７２について説明する。ここで、一致させる状態について補足しておく。実際に再同期を実現するためには様々な「処理状態」を一致させる必要がある。このような処理状態は、例えば、各タスクのメモリ内容、共有メモリ、ファイル及び通信バッファに関する状態である。本実施の形態では、例えば照合装置３０の共有メモリ上に全ての処理状態が格納されていると仮定し、処理状態の一致化をするものとして説明する。その理由としては、一般に状態一致化のために必要な転送データの多くはメモリ上に格納された処理データであり、それ以外の処理状態の転送は短時間で実施できることが見込まれるためである。共有メモリに対して状態一致化できれば、タスクのプライベートなメモリに対して応用することもできる。
【００５８】
図１１は、状態一致化処理の一例を示す。この状態一致化処理は、状態一致化部７２によって、前述した第一フェーズ及び第二フェーズとして実行される処理である。
【００５９】
状態一致化部７２は、計算機１０の起動に併せて起動される。状態一致化部７２は、再同期状態を「停止中」にセットし（ステップＳ１３０１）、再同期要求が発生するまで待機処理を実行する（ステップＳ１３０２）。
【００６０】
状態一致化部７２は、その後再同期要求が発生すると、再同期状態を「第一フェーズ」にセットし（ステップＳ１３０３）、タスクの処理状態の更新記録を開始する（ステップＳ１３０４）。ここでいうタスクの処理状態とは、例えばメモリ１０２上に置かれたデータのうち、タスクの処理内容を一意に定め得るデータを示す。このようにタスクの処理状態がメモリ１０２上のデータを指す場合、更新を記録する方法としては、ページテーブルのダーティビットを使用する方法が存在している。この方法では、メモリ１０２のメモリ領域を所定のサイズのブロックに分割したものをページと呼び、このページの状態は、図示しないページテーブルを用いて管理される。例えば、このページテーブルによって管理されるダーティビットは、当該ページ内の任意の領域に対して書き込みが発生した場合、ハードウェアによって「１」にセットされる。従って、タスクの状態が格納されたメモリ１０２上のページについて、ページテーブルのダーティビットを０にクリアすることにより、更新を記録することができる。その後、ダーティビットが１になっていた場合、更新があったとみなされる。
【００６１】
ここで、更新記録の開始処理中に当該メモリ１０２の内容が更新されることを防ぐため、当該メモリを参照し得る全タスクの実行を一時停止させる必要がある。この一時停止期間は十分短いので、周期駆動タスクの周期抜けの要因にはならない。
【００６２】
続いて、状態一致化部７２は、タスクの処理状態を全て、再同期させるべき復旧対象の計算機１１に転送する（ステップＳ１３０５）。
【００６３】
状態一致化部７２は、タスクの処理状態を全て停止計算機１１に転送した後、再同期状態を「第二フェーズ」にセットする（ステップＳ１３０６）。さらに状態一致化部７２は、後述する「更新ＬＲＵ（Ｌａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）リスト」の内容をクリアする（ステップＳ１３０７）。更新ＬＲＵリストは、新旧二つのリストを含むが、両方ともクリアされる。
【００６４】
その後、状態一致化部７２は、適当なタイミングにて、タスクの処理状態の更新箇所を抽出する（ステップＳ１３０８）。この抽出方法の詳細については後述する。
【００６５】
続いて、状態一致化部７２は、このように抽出した更新箇所から更新量を算出し（ステップＳ１３０９）、その更新量が閾値以上であるか否かを判定する（ステップＳ１３１０）。この閾値は、ユーザによって定められた固定値であっても良いし、従前の方法（例えば特許文献１に記載の方法）により求めた値であっても良い。
【００６６】
ステップＳ１３１０において更新量が閾値以上だった場合、すなわち、状態一致化部７２は、各タスクの更新された処理状態（差分）を順次稼働中の計算機１０から復旧対象の計算機１１に転送し（ステップＳ１３１１）、全て転送が完了したらステップＳ１３０９に戻ってこれを実行する。一方、ステップＳ１３１０において更新量が閾値未満であった場合、状態一致化部７２は、後述する第三フェーズへと進む。
【００６７】
図１２は、図１１に示す状態一致化処理におけるタスクの処理状態の更新箇所抽出処理（図１１のステップＳ１３０８参照）の詳細な処理内容の一例を示す。この処理においては、状態一致化部７２が、ワーキング領域として、更新ビットマップ及び更新ＬＲＵリストという２種類のデータ構造を利用する。
【００６８】
更新ビットマップは、更新が行われたページをビットマップで管理する。例えば処理状態を格納するメモリ領域の先頭ページ（０番目のページ）の内容が更新された場合、状態一致化部７２は、更新ビットマップの０番目のビットを１にセットする。メモリ領域の先頭から何番目のページかを示す値はＰａｇｅ  Ｆｒａｍｅ  Ｎｕｍｂｅｒ（以下「ＰＦＮ」と省略する）と呼ばれる。
【００６９】
一方、更新ＬＲＵリストは、最近更新されたページのＰＦＮを管理する。リストの先頭側には最近更新されたページのＰＦＮが格納される一方、リストの末尾側には最も過去に更新されたページのＰＦＮが格納される。特に、本実施の形態においては、更新ＬＲＵリストを用いて、高い応答性を必要とする優先度の高いイベント駆動タスクによって更新されるページについて管理する。本実施の形態では、新旧２つの更新ＬＲＵリスト（新更新ＬＲＵリスト及び旧更新ＬＲＵリスト）を用いてページを管理する。
【００７０】
まず、状態一致化部７２は、処理状態の更新箇所を抽出中に更新が実行されることを防ぐため、全タスクの実行を一時停止する（ステップＳ１４０１）。続いて、状態一致化部７２は、更新ビットマップ及び新ＬＲＵリストをクリアする（ステップＳ１４０２，Ｓ１４０３）。
【００７１】
次に状態一致化部７２は、例えば前述の方法を用いて、更新がされたページを調べ、そのＰＦＮを得る（ステップＳ１４０４）。一般にページの更新の有無の検出はタスク単位で実施される。状態一致化部７２は、そのタスクが「高優先」と予め指定されたイベント駆動タスクであるかどうか判定する（ステップＳ１４０５）。
【００７２】
そのタスクが「高優先」と指定されてない場合、状態一致化部７２は、上述のように得られたＰＦＮに対応する更新ビットマップ上のビットを１にセットする（ステップＳ１４０６）。一方、そのタスクが「高優先」と指定されている場合、状態一致化部７２は、当該ＰＦＮが旧更新ＬＲＵリスト上に存在すればそれを取り除き（ステップＳ１４０７）、当該ＰＦＮを新更新ＬＲＵリストの先頭に登録する（ステップＳ１４０８）。
【００７３】
状態一致化部７２は、処理状態を格納するメモリ領域の全ページの更新有無についてスキャンが完了したと判定されるまで（ステップＳ１４０９）、以上のようなステップＳ１４０４〜Ｓ１４０８を繰り返し実行する。
【００７４】
状態一致化部７２は、全ページのスキャンが完了した後、処理状態の更新記録をリセットし（ステップＳ１４１０）、全タスクの実行の一時停止を解除する（ステップＳ１４１１）。
【００７５】
ここで、ステップＳ１４１０において、前述の更新有無の検出方法を用いるならば、ページテーブルのダーティビットが１にセットされているページが更新箇所であり、このダーティビットを０にクリアすることで、更新記録がリセットされる。ステップＳ１４０１〜ステップＳ１４１１までの一時停止期間は十分短いため、周期駆動タスクの周期抜けが発生せず、高優先と指定されたタスクの応答性低下への影響も小さく抑えることができる。
【００７６】
図１３は、図１１に示す更新済処理状態転送処理（図１１のステップＳ１３１１参照）の詳細な内容の一例を示す。
【００７７】
まず、状態一致化部７２は、前述のように作成した更新ビットマップから、新更新ＬＲＵリスト上にあるＰＦＮに対応するビットを０クリアする（ステップＳ１５０１）。その後、状態一致化部７２は、更新ビットマップ上で１にセットされているビットに対応するＰＦＮのページについて、稼働中の計算機１０から、再同期させるべき復旧対象の計算機１１に転送する（ステップＳ１５０２）。
【００７８】
続いて、状態一致化部７２は、新更新ＬＲＵリストの末尾から順に、対応するページをステップＳ１５０２と同様に転送する（ステップＳ１５０３）。最後に状態一致化部７２は、新更新ＬＲＵリストの後ろに旧更新ＬＲＵリストを繋ぎ、これを旧更新ＬＲＵリストとする（ステップＳ１５０４）。
【００７９】
以下、図１４及び図１５を用いて状態一致化処理の第三フェーズ及び第四フェーズについて説明する。
【００８０】
図１４は、状態一致化処理における第三フェーズの一例を示す。まず、状態一致化部７２は、再同期状態を「第三フェーズ」にセットし（ステップＳ１６０１）、再同期中断タイマをセットする（ステップＳ１６０２）。再同期中断タイマを作動させる時刻としては、次の周期駆動タスクが駆動する時刻以前に設定される。これは、その設定時刻までに第三フェーズ及び第四フェーズが完了しなかった場合、処理を中断して、第二フェーズに戻ることができるようにするためである。再同期中断タイマの詳細については後述する。
【００８１】
次に状態一致化部７２は、稼働中のタスクが停止するまで待ち処理を継続する（ステップＳ１６０３）。これは、全ての同期対象のタスクについて、周期駆動タスクであれば待ち処理（図６のステップＳ４０３に相当）の状態を継続することを意味する一方、イベント駆動タスクであればイベント待ち処理（図７のステップＳ５０２に相当）の状態を継続することを意味する。
【００８２】
その後、状態一致化部７２は、図１１に示すステップＳ１３０８と同様に、タスクの処理状態の更新箇所を抽出し（ステップＳ１６０４）、その更新量がゼロであるか否かをチェックする（ステップＳ１６０５）。
【００８３】
ステップＳ１６０５において更新量がゼロでない場合、状態一致化部７２は、図１１のステップＳ１３１１と同様に、更新がなされたタスクの処理状態を転送し（ステップＳ１６０６）、ステップＳ１６０４に戻ってこれを実行する。すなわち、状態一致化部７２は、複数の周期駆動タスクの開始時刻が揃う直前の所定期間である再同期期間に、各タスクの処理状態の差分を稼働中の計算機１０から復旧対象の計算機１１に転送する。
【００８４】
一方、ステップＳ１６０５において更新量がゼロであった場合、状態一致化部７２は、再同期状態を「第四フェーズ」にセットし（ステップＳ１６０７）、残りのタスクの状態を稼働中の計算機１０から再同期させるべき復旧対象の計算機１１に転送する（ステップＳ１６０８）。すなわち、状態一致化部７２は、複数の周期駆動タスクの開始時刻が揃う直前の所定期間である再同期期間に、各タスクの処理状態の差分を稼働中の計算機１０から復旧対象の計算機１１に転送する。ここでいうタスクの状態とは、ステップＳ１３１１やステップＳ１６０６で転送したタスクの処理状態以外であって一致化が必要な「状態」を示している。一般に、この種の「状態」情報は少量であり、転送は短時間で実施できることが期待できる。
【００８５】
状態一致化部７２は、そのような転送が完了した後、再同期中断タイマを停止し（ステップＳ１６０９）、再同期状態を「停止中」にリセットし（ステップＳ１６１０）、タスクの実行抑止の解除を要請した後（ステップＳ１６１１）、再同期要求待ち（図１１のステップＳ１３０２）に戻ってこれを実行する。なお、タスクの実行抑止については後述する。
【００８６】
図１５は、再同期中断タイマが作動した際の処理の一例を示す。図示の例では、状態一致化処理における第三フェーズ及び第四フェーズを中断する様子を示している。
【００８７】
再同期中断タイマは、ステップＳ１６０２において指定した時刻を経過した後、図１４のステップＳ１６０３〜Ｓ１６０８の任意のタイミングにおいて作動が開始される。
【００８８】
この際、状態一致化部７２は、再同期状態を「第二フェーズ」にセットし直し（ステップＳ１７０１）、タスクの実行抑止を解除し（ステップＳ１７０２）、ステップＳ１３１１に戻ってこれを実行する。すなわち、状態一致化部７２は、第三フェーズ及び第四フェーズを中断し（ステップＳ１７０３）、第二フェーズからやり直して実行する。
【００８９】
図１６は、タスク実行可否判定処理の一例を示す。タスク実行可否判定処理は、再同期部７０のタスク実行抑止部７１によって実行される。このタスク実行可否判定処理は、図７に示すイベント駆動タスクに関するステップＳ５０３において呼び出されて実行される。
【００９０】
まず、タスク実行抑止部７１は、再同期状態が第四フェーズであるか否かを判定する（ステップＳ１８０１）。
【００９１】
ステップＳ１８０１において再同期状態が第四フェーズである場合、タスク実行抑止部７１は、タスクの実行抑止とする（ステップＳ１８１０）。この場合、タスク実行抑止部７１は、ステップＳ１６１１またはステップＳ１７０２において実行抑止が解除されるまで、当該タスクの実行を規制している。
【００９２】
一方、ステップＳ１８０１において再同期状態が第四フェーズでなかった場合、タスク実行抑止部７１は、当該タスクが、高優先と指定されたタスクか否かを判定する（ステップＳ１８０２）。当該タスクが高優先と指定されたタスクである場合、タスク実行抑止部７１は、当該タスクについて実行を許可し（ステップＳ１８２０）、ステップＳ５０４に進んでこれを実行する。一方、当該タスクが高優先と指定されたタスクではない場合、タスク実行抑止部７１は、再同期状態が第三フェーズであるか否かを判定する（ステップＳ１８０３）。
【００９３】
タスク実行抑止部７１は、再同期状態が第三フェーズである場合には当該タスクの実行を抑止する一方（ステップＳ１８１０）、再同期状態が第三フェーズでない場合には再同期状態が第二フェーズであるか否かを判定する（ステップＳ１８０４）。
【００９４】
再同期状態が第二フェーズではない場合、すなわち、再同期状態が第一フェーズまたは「停止中」である場合、タスク実行抑止部７１は当該タスクの実行を許可する（ステップＳ１８２０）。一方、再同期状態が第二フェーズである場合、タスク実行抑止部７１は、当該タスクの予想完了時刻が再同期期間の末尾の所定期間内に含まれるか否かを判定する（ステップＳ１８０５）。
【００９５】
タスク実行抑止部７１は、当該タスクの予想完了時刻が当該末尾の所定期間内に含まれる場合には当該タスクの実行を抑止する一方（ステップＳ１８１０）、当該タスクの予想完了時刻が当該末尾の所定期間内に含まれない場合には当該タスクの実行を許可する（ステップＳ１８２０）。
【００９６】
その後、高優先と指定されたタスクが実行された後、多重系システム１では、状態一致化部７２が、当該高優先タスクによってさらに更新された処理状態を再度複数の計算機１０，１１などの間で転送して一致させる。
【００９７】
ここで、前述したステップＳ１８０５についてさらに詳しく説明する。まず、当該タスクの予想完了時刻は、現在時刻（当該タスクのイベント処理ステップＳ５０４を開始させる時刻）に対して、イベント処理時間の予想される最大処理時間を加算した時刻に相当する。
【００９８】
タスク実行抑止部７１は、予め最大処理時間が判明している場合には、イベント駆動タスクごとにその時間を設定しておき、ステップＳ１８０５にて参照する一方、予め上記最大処理時間が判明していない場合には、統計的な手法によりその時間を予測する。
【００９９】
具体的には、タスク実行抑止部７１は、ステップＳ５０４におけるイベント処理時間をタスクごとに集計し、その平均及び標準偏差を算出し、この平均をこの標準偏差に加えて、予測される最大処理時間を算出する。再同期期間の末尾については、タスク実行抑止部７１が、再同期周期管理テーブル６００の再同期周期開始時刻６０２及び再同期周期６０３に基づいて、次の再同期周期の開始時刻を求めることにより算出することができる。
【０１００】
ステップＳ１８０５における「末尾の所定期間」は、再同期部７０の第三フェーズ及び第四フェーズを完了させるのに十分な時間を表しており、タスクの処理状態の更新頻度、内部ネットワーク５０の通信帯域に応じて定められる。
【０１０１】
ここで、ステップＳ１６０４〜ステップＳ１６０６のループが実行されている間に亘って、高優先と指定されているイベント駆動タスクは動作可能である。逆に、高優先と指定されているイベント駆動タスクが動作不可能となるのは、ステップＳ１４０１〜ステップＳ１４１１までの一時停止期間、及び、ステップＳ１６０７〜ステップＳ１６１０までの第四フェーズの期間である。しかしながら、これらの期間は短く、高優先と指定されているイベント駆動タスクの応答性への影響を小さく抑えることができる。
【０１０２】
さらに、高優先のタスクにより頻繁に更新される処理状態の転送を極力後で実施することにより、第三フェーズの間に、高優先と指定されているイベント駆動タスクが動作したとしても、何度も同じ処理状態を転送してしまう確率を低くすることができる。併せて、上記末尾の所定時間内に第三フェーズ及び第四フェーズが完了しない状況を避けることができる。従って、本実施の形態によれば、高優先と指定されているイベント駆動タスクの応答性を維持しつつ、再同期期間内に再同期処理を完了させる可能性をより高くすることができる。
【０１０３】
互いに異なる周期を有する複数の周期駆動タスクが動作している場合、再同期周期（再同期周期６０３の値に相当）が長くなってしまうことがある。その場合、一見すると、再同期処理の第三フェーズ及び第四フェーズを実行するのに好適であってこれら複数の周期駆動タスクが一定の時間に亘って動作しない期間が到来するまで、長時間待つ必要が生じることも考え得る。この場合、上記好適な期間が到来するタイミングで、バッチ処理のような長時間に亘って動作を継続するイベント駆動タスクが毎回駆動されると、いつになっても再同期処理を完了させることができないことになってしまう。
【０１０４】
そこで、上述したステップＳ１８０５のような予想完了時刻に関する判定を実施して上述した好適な期間と被って実行される可能性があるイベント駆動タスクの実行を予め抑止することにより、複数の計算機１０，１１等の間で最後の差分転送が上記末尾の所定期間内までに完了することを保証して、複数の計算機１０，１１等の間で再同期処理を短期間に完了する可能性を高めることができる。なお、処理時間の長いイベント駆動タスクは、一般に優先度が相対的に低く設定されることが多いため、多少の時間に亘ってその実行が抑止されたとしても影響は小さい。
【０１０５】
以上説明したように、イベント駆動タスクの実行抑止を適宜実施することにより、周期駆動タスクの周期抜けを起こさず、高優先と指定されているタスクの応答性を低下させないようにしつつ複数の計算機１０，１１等の間において短時間で再同期を完了し易くすることができる。
【０１０６】
また本実施の形態では、上述した複数の駆動タスクの駆動が原則として規制される再同期期間と、バッチ処理などのタスクの実行期間とが被らないようにすることにより、上記最後の差分転送が上記末尾の所定期間内までに完了することを保証することができる。
【０１０７】
（２）第２の実施の形態
第２の実施の形態による多重系システム１Ａは、第１の実施の形態による多重系システム１とほぼ同様な構成であるとともにほぼ同様な動作を実行するため、両者における同様な構成及び動作については説明を省略し、以下、異なる点を中心に説明する。
【０１０８】
図１７は、第２の実施の形態における周期タイマ登録処理の一例を示す。なお、ステップＳ９０１〜Ｓ９０４は、それぞれ、図８に示すステップＳ８００〜８０４と同一の処理であるため、説明を省略する。
【０１０９】
ステップＳ９０１において再同期周期管理テーブル６００が空ではない場合、まず、タイマ部８１は、再同期周期ＴＲ（再同期周期６０３の値に相当）と、周期Ｔ（周期７０４の値に相当）との最大公約数Ｇを算出する（ステップＳ９０５）。
【０１１０】
次にタイマ部８１は、ｔｒｅｑ＜ｔＲ＋ｎ・Ｇ＝ｔ（ｎは整数）を満たす最小のｔを算出し、この最少のｔを調整後の周期開始時刻ｔ（周期開始時刻７０３の値に相当）とする（ステップＳ９０６）。
【０１１１】
続いて、タイマ部８１は、次の再同期周期開始時刻ｔＲ’を算出し（ステップＳ９０７）、この再同期周期開始時刻ｔＲを上記次の再同期周期開始時刻ｔＲ’で更新する（ステップＳ９０８）。さらにタイマ部８１は、再同期周期ＴＲを全周期駆動タスクの周期の最小公倍数に更新する（ステップＳ９０９）。
【０１１２】
図１８は、図１７において次の再同期周期開始時刻ｔＲ’を算出する方法の一例を示す。まず、タイマ部８１は、初期状態としてｔ０にｔＲをセットするとともに、ｔ１にｔをセットする（ステップＳ１００１）。ここで、タイマ部８１は、ｔ０とｔ１とを比較する（ステップＳ１００２）。
【０１１３】
ｔ０とｔ１とが等しい場合、タイマ部８１は、次の再同期周期開始時刻ｔＲ’をこのときのｔ１にセットし（ステップＳ１００３）、当該処理を終了する（ステップＳ１００４）。
【０１１４】
一方、ｔ０とｔ１とが異なる場合、タイマ部８１は、その大小について比較する（ステップＳ１００５）。タイマ部８１は、ｔ０がｔ１より小さければｔ０にＴＲを加算し（ステップＳ１００６）、ステップＳ１００２に戻って実行する一方、ｔ０がｔ１より大きければｔ１にＴを加算し（ステップＳ１００７）、ステップＳ１００２に戻って実行する。
【０１１５】
以下、図１７及び図１８の手順に従って周期開始時刻（周期開始時刻７０３の値に相当）を調整する場合について、図９及び図１０に示す具体例を用いて説明する。再同期周期管理テーブル６００（図９参照）及び周期駆動タスク管理テーブル７００（図１０参照）は、初期状態として空であるものとする。なお、周期駆動タスクの要求周期開始時刻（要求周期開始時刻７０２の値に相当）及び周期（周期７０４の値に相当）は、図５に例示するこれらと同様であるものとする。
【０１１６】
時刻１００において周期（周期７０４の値に相当）が３である周期タイマを登録する際の処理は、第１の実施の形態において説明した図６及び図７を用いた手法と同様である。次に、要求周期開始時刻（要求周期開始時刻７０２の値に相当）が１０４であり、かつ、周期（周期７０４の値に相当）が４である周期タイマを登録する一例について説明する。
【０１１７】
この際、再同期周期（再同期周期６０３の値）と周期（周期７０４の値）との最大公約数は、３と４との最大公約数であるため、１となる。従って、周期開始時刻ｔ（周期開始時刻７０３の値に相当）は、１０４＜１００＋ｎ・１＝ｔ（ｎは整数）を満たす最小の値として１０５が得られる。
【０１１８】
時刻１０９において、再同期周期の開始時刻と、当該周期駆動タスクの周期の開始時刻とが一致するので、タスク実行抑止部７１は、この一致する時刻を新たな再同期周期開始時刻ｔＲ（再同期周期開始時刻６０２の値に相当）と設定する。タスク実行抑止部７１は、再同期周期（再同期周期６０３の値に相当）について３と４との最小公倍数である１２で更新する。
【０１１９】
その後、要求周期開始時刻７０２が１１０であり、かつ、周期（周期７０４の値に相当）が６である周期タイマを登録する場合を考える。再同期周期（再同期周期６０３の値に相当）と周期（周期７０４の値に相当）との最大公約数は１２であり、これは、６の最大公約数であるため、６となる。従って、周期開始時刻ｔ（周期開始時刻７０３の値に相当）は、１１０＜１０９＋ｎ・６＝ｔ（ｎは整数）を満たす最小の値として１１５となる。
【０１２０】
再同期周期６０３については、１２と６との最小公倍数は１２であり、これは現在の値と等しいので、タスク実行抑止部７１は、再同期周期管理テーブル６００を更新しなくても良い。
【０１２１】
以上により、タスク識別子７０１が２であるタスクの周期開始時刻（周期開始時刻７０３の値に相当）は、第１の実施の形態では１０６であったが（図８参照）、第２の実施の形態では１０５に短縮されるとともに、タスク識別子７０１が３であるタスクの周期開始時刻は、第１の実施の形態では１１８であったが、第２の実施の形態では１１５に短縮された。
【０１２２】
前述した第１の実施の形態では、図８に示した手法を用いた場合、一見すると、これから実行を開始する周期駆動タスクの初回周期の開始時刻に関して、最大で、再同期周期管理テーブル６００の再同期周期６０３にセットされている時間に亘って遅延が発生する可能性があるようにも思える。しかしながら、第２の実施の形態によれば、図１７及び図１８に示した手法を用いることにより、周期駆動タスクの初回周期の開始時刻の遅延量を抑制することができる。
【０１２３】
（３）その他の実施形態
上記実施形態は、本発明を説明するための例示であり、本発明をこれらの実施形態にのみ限定する趣旨ではない。本発明は、その趣旨を逸脱しない限り、様々な形態で実施することができる。例えば、上記実施形態では、各種プログラムの処理をシーケンシャルに説明したが、特にこれにこだわるものではない。従って、処理結果に矛盾が生じない限り、処理の順序を入れ替え又は並列に動作するように構成しても良い。また、上記実施形態における各処理ブロックを含むプログラムは、例えばコンピュータが読み取り可能な非一時的記憶媒体に格納されている形態であっても良い。
【産業上の利用可能性】
【０１２４】
本発明は、復旧対象の計算機について、そのタスクの処理状態を稼働中の計算機のタスクの処理状態に一致させて再度同期して動作するように構成された多重系システム多重系システム及び多重系システムにおける再同期方法に広く適用することができる。
【符号の説明】
【０１２５】
１……多重系システム、１０，１１，１２……計算機、７０……再同期部、７１……タスク実行抑止部、７２……状態一致化部、８０……タスクスケジューラ、８１……タイマ部、９０……タスク、６００……再同期周期管理テーブル、７００……周期駆動タスク管理テーブル。
【図１】
2019021257.tif 000003
【図２】
2019021257.tif 000004
【図３】
2019021257.tif 000005
【図４】
2019021257.tif 000006
【図５】
2019021257.tif 000007
【図６】
2019021257.tif 000008
【図７】
2019021257.tif 000009
【図８】
2019021257.tif 000010
【図９】
2019021257.tif 000011
【図１０】
2019021257.tif 000012
【図１１】
2019021257.tif 000013
【図１２】
2019021257.tif 000014
【図１３】
2019021257.tif 000015
【図１４】
2019021257.tif 000016
【図１５】
2019021257.tif 000017
【図１６】
2019021257.tif 000018
【図１７】
2019021257.tif 000019
【図１８】
2019021257.tif 000020