(57)【要約】【課題】障害原因発生から障害顕在化までに時差がある場合でも、障害を克服して、正常にプロセスの処理を続ける。【解決手段】実行部１１０は、プロセスを実行する。状態記憶部１２３は、複数の中間時点それぞれについて、実行部１１０の状態を記憶する。実行部１１０に障害が発生した場合、状態巻戻部１３３は、実行部１１０の状態を、中間時点における状態に戻す。実行部１１０に更に障害が発生した場合、状態巻戻部１３３は、実行部１１０の状態を、もっと前の中間時点における状態に戻す。【選択図】図４
2011022959.tif 000002
【特許請求の範囲】
【請求項１】
データを記憶する記憶装置と、データを処理する処理装置と、実行部と、状態記憶部と、状態巻戻部とを有し、
上記実行部は、上記処理装置を用いて、プロセスを実行し、
上記状態記憶部は、上記記憶装置を用いて、上記実行部が上記プロセスを実行している途中の複数の中間時点それぞれについて、上記中間時点における上記実行部の状態を記憶し、
上記状態巻戻部は、上記処理装置を用いて、上記実行部に障害が発生した場合に、上記状態記憶部が記憶した状態のうちいずれかの中間時点の状態に、上記実行部の状態を戻し、上記実行部に更に障害が発生した場合に、上記状態記憶部が記憶した状態のうち、上記実行部の状態を戻した中間時点よりも前の中間時点における状態に、上記実行部の状態を戻すことを特徴とするプロセス実行装置。
【請求項２】
上記状態巻戻部は、上記処理装置を用いて、上記実行部に障害が発生した場合に、上記状態記憶部が記憶した状態のうち、最も新しい中間時点の状態に、上記実行部の状態を戻し、
上記状態記憶部は、上記処理装置を用いて、記憶した状態のうち、上記状態巻戻部が上記実行部の状態を戻した中間時点の状態を削除することを特徴とする請求項１に記載のプロセス実行装置。
【請求項３】
上記状態記憶部は、上記記憶装置を用いて、最初の中間時点における上記実行部の状態として、上記実行部を初期化した状態を記憶することを特徴とする請求項１または請求項２に記載のプロセス実行装置。
【請求項４】
上記状態巻戻部は、上記処理装置を用いて、上記実行部に更に障害が発生した場合であって、上記実行部の状態を戻した中間時点よりも前の中間時点における状態を、上記状態記憶部が記憶していない場合に、上記実行部に上記プロセスの実行を中断させることを特徴とする請求項１乃至請求項３のいずれかに記載のプロセス実行装置。
【請求項５】
上記プロセス実行装置は、更に、複数の上記実行部と、系切替部とを有し、
上記実行部のうち第一の実行部は、上記処理装置を用いて、常用系として、上記プロセスを実行し、
上記実行部のうち第二の実行部は、上記処理装置を用いて、待機系として、上記プロセスを実行し、
上記状態記憶部は、上記記憶装置を用いて、複数の上記実行部それぞれについて、上記中間時点における上記実行部の状態を記憶し、
上記系切替部は、上記処理装置を用いて、上記第一の実行部に障害が発生した場合に、上記第二の実行部を常用系に切り替え、上記第一の実行部を待機系に切り替えることを特徴とする請求項１乃至請求項４のいずれかに記載のプロセス実行装置。
【請求項６】
上記第二の実行部は、上記処理装置を用いて、待機系として、上記状態記憶部が上記第一の実行部について状態を記憶した中間時点よりも前の中間時点で待機し、
上記状態巻戻部は、上記処理装置を用いて、上記系切替部が上記第一の実行部を常用系から待機系に切り替えた場合に、上記状態記憶部が上記第二の実行部について状態を記憶した中間時点よりも前の中間時点の状態に、上記第一の実行部の状態を戻すことを特徴とする請求項５に記載のプロセス実行装置。
【請求項７】
上記第二の実行部は、上記処理装置を用いて、待機系として、初期化処理を実行したのち、上記プロセスを実行し、
上記系切替部は、上記処理装置を用いて、上記第一の実行部に障害が発生した場合であって、上記状態巻戻部が上記第一の実行部の状態を戻すべき中間時点における状態を、上記状態記憶部が記憶していない場合に、上記第二の実行部を常用系に切り替え、上記第一の実行部を待機系に切り替えることを特徴とする請求項５または請求項６に記載のプロセス実行装置。
【請求項８】
上記状態記憶部は、上記処理装置を用いて、上記実行部が上記プロセスの実行を終了した場合に、記憶した上記実行部の状態を削除することを特徴とする請求項１乃至請求項７のいずれかに記載のプロセス実行装置。
【請求項９】
データを記憶する記憶装置とデータを処理する処理装置とを有するコンピュータを、請求項１乃至請求項８のいずれかに記載のプロセス実行装置として機能させることを特徴とするコンピュータプログラム。
【請求項１０】
データを記憶する記憶装置とデータを処理する処理装置とを有するプロセス実行装置が、プロセスを実行するプロセス実行方法において、
上記処理装置が、上記プロセスを実行し、
上記記憶装置が、上記処理装置が上記プロセスを実行している途中の複数の中間時点それぞれについて、上記中間時点における状態を記憶し、
上記処理装置が、上記プロセスの実行に障害が発生した場合に、上記記憶装置が記憶した状態のうちいずれかの中間時点の状態に、状態を戻し、
上記処理装置が、上記プロセスの実行に更に障害が発生した場合に、上記記憶装置が記憶した状態のうち、状態を戻した中間時点よりも前の中間時点における状態に、状態を戻すことを特徴とするプロセス実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、プロセス実行時に発生した障害に対処するプロセス実行装置に関する。
【背景技術】
【０００２】
プロセス実行を二重化し、先行系の処理を少し遅れて追いかける形で後続系が処理を実行し、先行系に障害が発生した場合に備える技術がある。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００３−１５９００号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
障害の原因が障害顕在化よりも前に発生していた場合、障害がまだ顕在化していない後続系にも既に障害の原因が発生している可能性がある。その場合、後続系にも同じ障害が発生するため、障害を克服することができない。
この発明は、例えば上記のような課題を解決するためになされたものであり、障害の原因発生と障害顕在化との間に時差がある場合であっても、障害を克服し、正常に処理を続けることができるようにすることを目的とする。
【課題を解決するための手段】
【０００５】
この発明にかかるプロセス実行装置は、データを記憶する記憶装置と、データを処理する処理装置と、実行部と、状態記憶部と、状態巻戻部とを有し、
上記実行部は、上記処理装置を用いて、プロセスを実行し、
上記状態記憶部は、上記記憶装置を用いて、上記実行部が上記プロセスを実行している途中の複数の中間時点それぞれについて、上記中間時点における上記実行部の状態を記憶し、
上記状態巻戻部は、上記処理装置を用いて、上記実行部に障害が発生した場合に、上記状態記憶部が記憶した状態のうちいずれかの中間時点の状態に、上記実行部の状態を戻し、上記実行部に更に障害が発生した場合に、上記状態記憶部が記憶した状態のうち、上記実行部の状態を戻した中間時点よりも前の中間時点における状態に、上記実行部の状態を戻すことを特徴とする。
【発明の効果】
【０００６】
この発明にかかるプロセス実行装置によれば、実行部の状態を中間時点における状態に戻して処理をやり直しても再び障害が発生する場合に、実行部の状態をそれよりも前の中間時点における状態に戻して処理をやり直すので、障害の原因が早い段階で発生していた場合であっても、それよりも前の中間時点から処理をやり直すことができ、障害を克服して、正常に処理を続けることができる。
【図面の簡単な説明】
【０００７】
【図１】実施の形態１におけるプロセス実行装置１００の全体構成の一例を示す全体構成図。
【図２】実施の形態１におけるプロセス実行装置１００の外観の一例を示す斜視図。
【図３】実施の形態１におけるプロセス実行装置１００のハードウェア資源の一例を示す図。
【図４】実施の形態１におけるプロセス実行装置１００の機能ブロックの構成の一例を示すブロック構成図。
【図５】実施の形態１における障害処理Ｓ５１０の流れの一例を示すフローチャート図。
【図６】実施の形態１におけるプロセス実行装置１００の動作の一例を示す模式図。
【図７】実施の形態１におけるプロセス実行装置１００の動作の一例を示す模式図。
【図８】実施の形態１におけるプロセス実行装置１００の動作の一例を示す模式図。
【図９】実施の形態１におけるプロセス実行装置１００の動作の一例を示す模式図。
【図１０】実施の形態１におけるプロセス実行装置１００の動作の一例を示す模式図。
【図１１】実施の形態２におけるプロセス実行装置１００の機能ブロックの構成の一例を示すブロック構成図。
【図１２】実施の形態２における障害処理Ｓ５１０の流れの一例を示すフローチャート図。
【図１３】実施の形態２におけるプロセス実行装置１００の動作の一例を示す模式図。
【図１４】実施の形態２におけるプロセス実行装置１００の動作の一例を示す模式図。
【図１５】実施の形態２におけるプロセス実行装置１００の動作の一例を示す模式図。
【図１６】実施の形態２におけるプロセス実行装置１００の動作の一例を示す模式図。
【図１７】実施の形態３におけるプロセス実行装置１００の動作の一例を示す模式図。
【図１８】実施の形態４におけるプロセス実行装置１００の動作の一例を示す模式図。
【図１９】実施の形態５におけるプロセス実行装置１００の全体構成の一例を示す全体構成図。
【図２０】実施の形態５における実行処理Ｓ５５０の流れの一例を示すフローチャート図。
【図２１】実施の形態５における系切替処理Ｓ５９０の流れの一例を示すフローチャート図。
【図２２】実施の形態６における実行処理Ｓ５５０の流れの一例を示すフローチャート図。
【図２３】実施の形態６における系切替処理Ｓ５９０の流れの一例を示すフローチャート図。
【図２４】実施の形態６における障害処理Ｓ５１０の流れの一例を示すフローチャート図。
【図２５】実施の形態６におけるプロセス実行装置１００の動作の一例を示す模式図。
【図２６】実施の形態６におけるプロセス実行装置１００の動作の一例を示す模式図。
【図２７】実施の形態６におけるプロセス実行装置１００の動作の一例を示す模式図。
【発明を実施するための形態】
【０００８】
実施の形態１．
実施の形態１について、図１〜図１０を用いて説明する。
【０００９】
図１は、この実施の形態におけるプロセス実行装置１００の全体構成の一例を示す全体構成図である。
プロセス実行装置１００は、所定のプロセスを実行する装置である。プロセス実行装置１００は、実行部１１０、障害処理部１２０を有する。
実行部１１０は、プロセス実行装置１００の主要部であり、実際にプロセスを実行する部分である。実行部１１０は、外部からプロセスの実行に必要なパラメータなどを入力し、入力したパラメータに基づいてプロセスを実行し、実行した結果を外部に出力する。
障害処理部１２０は、実行部１１０におけるプロセスの実行を監視し、障害が発生した場合にその障害に対処する処理を行う。
【００１０】
図２は、この実施の形態におけるプロセス実行装置１００の外観の一例を示す斜視図である。
プロセス実行装置１００は、システムユニット９１０、ＣＲＴ（Ｃａｔｈｏｄｅ・Ｒａｙ・Ｔｕｂｅ）やＬＣＤ（液晶）の表示画面を有する表示装置９０１、キーボード９０２（Ｋｅｙ・Ｂｏａｒｄ：Ｋ／Ｂ）、マウス９０３、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ・Ｄｉｓｋ・Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６、スキャナ装置９０７などのハードウェア資源を備え、これらはケーブルや信号線で接続されている。
システムユニット９１０は、コンピュータであり、ファクシミリ機９３２、電話器９３１とケーブルで接続され、また、ローカルエリアネットワーク９４２（ＬＡＮ）、ゲートウェイ９４１を介してインターネット９４０に接続されている。
【００１１】
図３は、この実施の形態におけるプロセス実行装置１００のハードウェア資源の一例を示す図である。
プロセス実行装置１００は、プログラムを実行するＣＰＵ９１１（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータ、プロセッサともいう）を備えている。ＣＰＵ９１１は、バス９１２を介してＲＯＭ９１３、ＲＡＭ９１４、通信装置９１５、表示装置９０１、キーボード９０２、マウス９０３、ＦＤＤ９０４、ＣＤＤ９０５、プリンタ装置９０６、スキャナ装置９０７、磁気ディスク装置９２０と接続され、これらのハードウェアデバイスを制御する。磁気ディスク装置９２０の代わりに、光ディスク装置、メモリカード読み書き装置などの記憶装置でもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。これらは、記憶装置あるいは記憶部の一例である。通信装置９１５、キーボード９０２、スキャナ装置９０７、ＦＤＤ９０４などは、入力部、入力装置の一例である。
また、通信装置９１５、表示装置９０１、プリンタ装置９０６などは、出力部、出力装置の一例である。
【００１２】
通信装置９１５は、ファクシミリ機９３２、電話器９３１、ＬＡＮ９４２等に接続されている。通信装置９１５は、ＬＡＮ９４２に限らず、インターネット９４０、ＩＳＤＮ等のＷＡＮ（ワイドエリアネットワーク）などに接続されていても構わない。インターネット９４０或いはＩＳＤＮ等のＷＡＮに接続されている場合、ゲートウェイ９４１は不用となる。
磁気ディスク装置９２０には、オペレーティングシステム９２１（ＯＳ）、ウィンドウシステム９２２、プログラム群９２３、ファイル群９２４が記憶されている。プログラム群９２３のプログラムは、ＣＰＵ９１１、オペレーティングシステム９２１、ウィンドウシステム９２２により実行される。
【００１３】
上記プログラム群９２３には、以下に述べる実施の形態の説明において「〜部」として説明する機能を実行するプログラムが記憶されている。プログラムは、ＣＰＵ９１１により読み出され実行される。
ファイル群９２４には、以下に述べる実施の形態の説明において、「〜の判定結果」、「〜の計算結果」、「〜の処理結果」として説明する情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示などのＣＰＵの動作に用いられる。抽出・検索・参照・比較・演算・計算・処理・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリやキャッシュメモリやバッファメモリに一時的に記憶される。
また、以下に述べる実施の形態の説明において説明するフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ミニディスク、ＤＶＤ（Ｄｉｇｉｔａｌ・Ｖｅｒｓａｔｉｌｅ・Ｄｉｓｋ）等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００１４】
また、以下に述べる実施の形態の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ＲＯＭ９１３に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組み合わせ、さらには、ファームウェアとの組み合わせで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、磁気ディスク、フレキシブルディスク、光ディスク、コンパクトディスク、ミニディスク、ＤＶＤ等の記録媒体に記憶される。プログラムはＣＰＵ９１１により読み出され、ＣＰＵ９１１により実行される。すなわち、プログラムは、以下に述べる「〜部」としてコンピュータを機能させるものである。あるいは、以下に述べる「〜部」の手順や方法をコンピュータに実行させるものである。
【００１５】
図４は、この実施の形態におけるプロセス実行装置１００の機能ブロックの構成の一例を示すブロック構成図である。
実行部１１０は、初期化実行部１１１、内部状態記憶部１１２、パラメータ入力部１１３、処理実行部１１４、結果出力部１１５を有する。障害処理部１２０は、チェックポイント判定部１２１、状態取得部１２２、状態記憶部１２３、障害判定部１３１、巻戻時点判定部１３２、状態巻戻部１３３を有する。
【００１６】
初期化実行部１１１は、ＣＰＵ９１１を用いて、初期化処理を実行する。初期化実行部１１１は、例えば、プロセス実行装置１００の起動時や再起動時などに、初期化処理を実行する。初期化処理において、初期化実行部１１１は、例えば、内部状態記憶部１１２が記憶したデータを初期化する。
内部状態記憶部１１２は、ＲＡＭ９１４を用いて、実行部１１０の内部状態を表わすデータを記憶する。実行部１１０の内部状態には、例えば、内部変数の値や、スタックの状態などがある。
パラメータ入力部１１３は、ＣＰＵ９１１を用いて、プロセスのパラメータを入力する。
処理実行部１１４は、ＣＰＵ９１１を用いて、プロセスの処理を実行する。処理実行部１１４は、パラメータ入力部１１３が入力したパラメータや、内部状態記憶部１１２が記憶したデータが表わす内部状態などに基づいて、処理を実行する。処理実行部１１４が処理を実行した途中経過や次回のプロセス実行のために保持しておくべきデータなどは、内部状態記憶部１１２が記憶する。
結果出力部１１５は、ＣＰＵ９１１を用いて、処理実行部１１４が処理を実行した結果を外部に出力する。
【００１７】
チェックポイント判定部１２１は、ＣＰＵ９１１を用いて、実行部１１０におけるプロセスの処理がチェックポイントに到達したか否かを判定する。チェックポイントとは、プロセスを実行している途中の所定の時点（中間時点）のことである。例えば、プロセスが複数の工程を含む場合、１つの工程が終わるごとにチェックポイントを設ける。これにより、例えば、何らかの障害によりプロセスの実行が途中で止まってしまった場合でも、プロセスの処理がどの工程まで進んだかがわかる。
【００１８】
状態取得部１２２は、実行部１１０におけるプロセスの処理がチェックポイントに到達したとチェックポイント判定部１２１が判定した場合に、ＣＰＵ９１１を用いて、内部状態記憶部１１２が記憶したデータをすべて取得する。
状態記憶部１２３は、磁気ディスク装置９２０を用いて、状態取得部１２２が取得したデータを記憶する。これにより、そのチェックポイントにおける実行部１１０の内部状態が記録される。何らかの障害によりプロセスの実行が途中で止まってしまった場合、状態記憶部１２３が記憶したデータを内部状態記憶部１１２に書き戻せば、そのチェックポイントの時点における状態に、実行部１１０の状態を戻すことができるので、その時点から処理を再開することができる。また、状態記憶部１２３は、各チェックポイントごとに、状態取得部１２２が取得したデータを記憶する。これにより、あるチェックポイントの時点における状態に、実行部１１０の状態を戻して処理を再開したがうまくいかなかったような場合、別のチェックポイントの時点における状態に、実行部１１０の状態を戻すことができる。
【００１９】
障害判定部１３１は、ＣＰＵ９１１を用いて、実行部１１０を監視し、何らかの障害により実行部１１０の処理が途中で止まっていないかを判定する。例えば、障害判定部１３１は、内部状態記憶部１１２が記憶したデータを監視して、正常な値であるか否かを判定し、異常値である場合に、実行部１１０に障害が発生していると判定する。あるいは、障害判定部１３１は、結果出力部１１５が結果を出力する間隔を監視して、前回の結果出力から所定の時間が経過しても、次の結果が出力されない場合に、実行部１１０に障害が発生していると判定する。
【００２０】
巻戻時点判定部１３２は、ＣＰＵ９１１を用いて、状態記憶部１２３が記憶した複数のチェックポイントの時点における状態のうち、どの時点における状態に、実行部１１０の状態を戻すかを判定する。
【００２１】
状態巻戻部１３３は、実行部１１０に障害が発生していると障害判定部１３１が判定した場合に、ＣＰＵ９１１を用いて、巻戻時点判定部１３２が判定した時点における実行部１１０の状態を表わすデータを状態記憶部１２３から読み出し、内部状態記憶部１１２に書き込む。
【００２２】
図５は、この実施の形態における障害処理Ｓ５１０の流れの一例を示すフローチャート図である。
障害処理Ｓ５１０において、障害処理部１２０は、チェックポイントにおける実行部１１０の状態を記録し、障害が発生した場合に、チェックポイントにおける状態に、実行部１１０の状態を戻して、復旧を試みる。障害処理Ｓ５１０は、障害判定工程Ｓ５１１、チェックポイント判定工程Ｓ５１２、状態消去工程Ｓ５２１、状態取得工程Ｓ５２２、状態記憶工程Ｓ５２３、状態判定工程Ｓ５２４、巻戻時点前進工程Ｓ５２５、巻戻時点判定工程Ｓ５３１、処理中断工程Ｓ５３２、状態巻戻工程Ｓ５３３、巻戻時点後退工程Ｓ５３４を有する。
【００２３】
障害判定工程Ｓ５１１において、障害判定部１３１は、ＣＰＵ９１１を用いて、実行部１１０に障害が発生しているか否かを判定する。
障害が発生していると判定した場合、巻戻時点判定工程Ｓ５３１へ進む。
障害が発生していないと判定した場合、チェックポイント判定工程Ｓ５１２へ進む。
【００２４】
チェックポイント判定工程Ｓ５１２において、チェックポイント判定部１２１は、ＣＰＵ９１１を用いて、実行部１１０におけるプロセスの処理がチェックポイントに到達したか否かを判定する。
まだチェックポイントに到達していないと判定した場合、障害判定工程Ｓ５１１に戻る。
最後のチェックポイントに到達したと判定した場合、状態消去工程Ｓ５２１へ進む。なお、最後のチェックポイントは、プロセス実行が終了した時点に設けられているものとする。
それ以外のチェックポイントに到達したと判定した場合、状態取得工程Ｓ５２２へ進む。
【００２５】
状態消去工程Ｓ５２１において、状態記憶部１２３は、ＣＰＵ９１１を用いて、記憶したデータを消去する。最後のチェックポイントは、プロセス実行が終了した時点に設けられているので、最後のチェックポイントに到達したということは、そのプロセスの実行が正常に終了したということを意味する。それ以前のチェックポイントにおける状態に、実行部１１０の状態を戻す必要がなくなるので、状態記憶部１２３は、記憶したデータを消去して、記憶領域を開放し、次回のプロセス実行に備える。
その後、障害処理Ｓ５１０を終了する。
【００２６】
状態取得工程Ｓ５２２において、状態取得部１２２は、ＣＰＵ９１１を用いて、内部状態記憶部１１２が記憶したデータをすべて取得する。
状態記憶工程Ｓ５２３において、状態記憶部１２３は、磁気ディスク装置９２０を用いて、状態取得工程Ｓ５２２で状態取得部１２２が取得したデータを、チェックポイント判定工程Ｓ５１２でチェックポイント判定部１２１が到達したと判定したチェックポイントに対応するデータとして記憶する。
【００２７】
状態判定工程Ｓ５２４において、巻戻時点判定部１３２は、ＣＰＵ９１１を用いて、チェックポイント判定工程Ｓ５１２でチェックポイント判定部１２１が到達したと判定したチェックポイントに対応するデータを、状態記憶部１２３がそれまで記憶していたか否かを判定する。これにより、今回の実行部１１０におけるプロセスの処理において、そのチェックポイントまで到達したのが初めてであるのか、それとも、そのチェックポイントを通過したのち、障害が発生して実行部１１０の状態を戻した結果、再びそのチェックポイントに到達したのかがわかる。
そのチェックポイントに到達したのが初めてであると判定した場合、巻戻時点前進工程Ｓ５２５へ進む。
そのチェックポイントに前にも到達したことがあると判定した場合、障害判定工程Ｓ５１１に戻る。
【００２８】
巻戻時点前進工程Ｓ５２５において、巻戻時点判定部１３２は、ＣＰＵ９１１を用いて、チェックポイント判定工程Ｓ５１２でチェックポイント判定部１２１が到達したと判定したチェックポイントを、巻戻時点と判定する。巻戻時点判定部１３２は、磁気ディスク装置９２０を用いて、判定した結果を記憶する。
その後、障害判定工程Ｓ５１１に戻る。
【００２９】
巻戻時点判定工程Ｓ５３１において、巻戻時点判定部１３２は、ＣＰＵ９１１を用いて、記憶した判定結果に基づいて、巻戻時点と判定したチェックポイントを判別する。
巻戻時点と判定したチェックポイントが存在しない場合、処理中断工程Ｓ５３２へ進む。これは、例えば、実行部１１０におけるプロセスの処理が最初のチェックポイントに到達するよりも前に実行部１１０に障害が発生した場合や、障害発生により、最初のチェックポイントにおける状態に実行部１１０の状態を戻して処理を再開したが、再び障害が発生した場合などである。すなわち、実行部１１０の状態を戻すべきチェックポイントが存在しない場合である。
巻戻時点と判定したチェックポイントが存在する場合は、状態巻戻工程Ｓ５３３へ進む。
【００３０】
処理中断工程Ｓ５３２において、状態巻戻部１３３は、ＣＰＵ９１１を用いて、内部状態記憶部１１２が記憶したデータを書き換えて、実行部１１０における今回のプロセス処理を中断させる。実行部１１０の状態を戻すべきチェックポイントが存在しないので、これ以上、実行部１１０の処理を続けることができないからである。その後、状態消去工程Ｓ５２１へ進む。
実行部１１０は、パラメータ入力部１１３が入力したパラメータを破棄して、プロセスの処理を終了する。処理実行部１１４は、異常終了したという結果を出力する。その後、パラメータ入力部１１３が次のパラメータを入力した場合、実行部１１０は、次のプロセスの処理を開始する。
【００３１】
状態巻戻工程Ｓ５３３において、状態巻戻部１３３は、ＣＰＵ９１１を用いて、巻戻時点判定工程Ｓ５３１で巻戻時点判定部１３２が判別したチェックポイントについて、状態記憶部１２３が記憶したデータを取得する。状態巻戻部１３３は、ＣＰＵ９１１を用いて、取得したデータを内部状態記憶部１１２に書き込む。その後、巻戻時点後退工程Ｓ５３４へ進む。
実行部１１０は、内部状態記憶部１１２が記憶したデータが書き換えられたことにより、そのチェックポイントの時点における状態に戻り、その状態からプロセスの処理を再開する。
【００３２】
巻戻時点後退工程Ｓ５３４において、巻戻時点判定部１３２は、ＣＰＵ９１１を用いて、状態記憶部１２３が記憶したデータのうち、状態巻戻工程Ｓ５３３で状態巻戻部１３３が内部状態記憶部１１２に書き込んだデータに対応するチェックポイントよりも１つ前のチェックポイントを、巻戻時点であると判定する。状態巻戻工程Ｓ５３３で状態巻戻部１３３が内部状態記憶部１１２に書き込んだデータに対応するチェックポイントが最初のチェックポイントである場合、それよりも前のチェックポイントが存在しないので、巻戻時点判定部１３２は、巻戻時点となるチェックポイントが存在しないと判定する。巻戻時点判定部１３２は、磁気ディスク装置９２０を用いて、判定した結果を記憶する。
その後、障害判定工程Ｓ５１１に戻る。
【００３３】
図６は、この実施の形態におけるプロセス実行装置１００の動作の一例を示す模式図である。
【００３４】
プロセス開始時６０１において、パラメータ入力部１１３がパラメータを入力し、処理実行部１１４がプロセスの処理を開始する。この時点における状態記憶部１２３の記憶内容６１１は、空である。すなわち、状態記憶部１２３は、チェックポイントにおける状態を表わすデータをいずれも記憶していない。
【００３５】
処理実行部１１４の処理が第一チェックポイント６０２まで到達すると、チェックポイント判定部１２１がそのことを判定し、内部状態記憶部１１２が記憶したデータを状態取得部１２２が取得して、第一チェックポイント６０２に対応するデータとして、状態記憶部１２３が記憶する。この時点における状態記憶部１２３の記憶内容６１２は、第一チェックポイント６０２における状態６５２だけである。
今回のプロセス処理において、処理実行部１１４の処理が第一チェックポイント６０２まで到達したのは初めてなので、巻戻時点判定部１３２は、第一チェックポイント６０２を巻戻時点と判定する。
【００３６】
処理実行部１１４の処理が第二チェックポイント６０３まで到達すると、チェックポイント判定部１２１がそのことを判定し、内部状態記憶部１１２が記憶したデータを状態取得部１２２が取得して、第二チェックポイント６０３に対応するデータとして、状態記憶部１２３が記憶する。この時点における状態記憶部１２３の記憶内容６１３は、第一チェックポイント６０２における状態６５２と、第二チェックポイント６０３における状態６５３との２つである。
今回のプロセス処理において、処理実行部１１４の処理が第二チェックポイント６０３まで到達したのは初めてなので、巻戻時点判定部１３２は、第二チェックポイント６０３を巻戻時点と判定する。
【００３７】
処理実行部１１４の処理が第三チェックポイント６０４まで到達すると、チェックポイント判定部１２１がそのことを判定し、内部状態記憶部１１２が記憶したデータを状態取得部１２２が取得して、第三チェックポイント６０４に対応するデータとして、状態記憶部１２３が記憶する。この時点における状態記憶部１２３の記憶内容６１４は、第一チェックポイント６０２における状態６５２と、第二チェックポイント６０３における状態６５３と、第三チェックポイント６０４における状態６５４との３つである。
今回のプロセス処理において、処理実行部１１４の処理が第三チェックポイント６０４まで到達したのは初めてなので、巻戻時点判定部１３２は、第三チェックポイント６０４を巻戻時点と判定する。
【００３８】
このように、処理実行部１１４の処理が順調に進んでいくにつれ、状態記憶部１２３は、各チェックポイントにおける実行部１１０の状態を表わすデータを蓄積していく。また、巻戻時点判定部１３２が巻戻時点と判定するチェックポイントは、処理の進行に伴って進んでいく。
【００３９】
ここで、処理実行部１１４の処理が第四チェックポイント６０５に到達する前に、実行部１１０に障害が発生したと仮定する。障害判定部１３１がそのことを判定し、状態巻戻部１３３は、巻戻時点判定部１３２の判定結果に基づいて、実行部１１０の状態を第三チェックポイント６０４における状態６５４に戻す。処理実行部１１４は、第三チェックポイント６０４から処理を再開する。
【００４０】
図７は、この実施の形態におけるプロセス実行装置１００の動作の一例を示す模式図である。
【００４１】
処理実行部１１４が第三チェックポイント６０４から処理を再開した時点において、状態記憶部１２３の記憶内容６１５は、処理再開前の記憶内容６１４と同じである。巻戻時点判定部１３２は、一つ前のチェックポイント、すなわち第二チェックポイント６０３を巻戻時点と判定する。
【００４２】
処理実行部１１４の処理が第四チェックポイント６０５に到達する前に、再び障害が発生したと仮定する。障害判定部１３１がそのことを判定し、状態巻戻部１３３は、巻戻時点判定部１３２の判定結果に基づいて、実行部１１０の状態を第二チェックポイント６０３における状態６５３に戻す。処理実行部１１４は、第二チェックポイント６０３から処理を再開する。
【００４３】
第三チェックポイント６０４に戻って処理をやり直したにも関わらず、再び障害が発生したということは、障害が顕在化したのは、第三チェックポイント６０４通過後であるが、障害の原因は、第三チェックポイント６０４到達前に発生していた可能性がある。
プロセス実行装置１００は、再び障害が発生した場合、直前のチェックポイントではなく、その一つ前のチェックポイントに戻って、処理をやり直す。これにより、直前のチェックポイント到達前に障害の原因が発生していた場合であっても、障害を克服し、正常に処理を続けることができる。
【００４４】
図８は、この実施の形態におけるプロセス実行装置１００の動作の一例を示す模式図である。
【００４５】
処理実行部１１４が第二チェックポイント６０３から処理を再開した時点において、状態記憶部１２３の記憶内容６１６は、処理再開前の記憶内容６１５と同じである。巻戻時点判定部１３２は、更に一つ前のチェックポイント、すなわち、第一チェックポイント６０２を巻戻時点と判定する。
【００４６】
処理実行部１１４の処理が第三チェックポイント６０４に再び到達すると、チェックポイント判定部１２１がそのことを判定し、内部状態記憶部１１２が記憶したデータを状態取得部１２２が取得して、第三チェックポイント６０４に対応するデータとして、状態記憶部１２３が記憶する。この時点における状態記憶部１２３の記憶内容６１７は、第一チェックポイント６０２における状態６５２と、第二チェックポイント６０３における状態６５３と、第三チェックポイント６０４における状態６５４との３つである。このうち、第三チェックポイント６０４における状態６５４は、二回目の到達時における状態である。
今回のプロセス処理において、処理実行部１１４の処理が第三チェックポイント６０４まで到達したのは二回目なので、巻戻時点判定部１３２は、巻戻時点を進めない。したがって、巻戻時点は、第一チェックポイント６０２のままである。
【００４７】
処理実行部１１４の処理が第四チェックポイント６０５に到達する前に、三たび障害が発生したと仮定する。障害判定部１３１がそのことを判定し、状態巻戻部１３３は、巻戻時点判定部１３２の判定結果に基づいて、実行部１１０の状態を第一チェックポイント６０２における状態６５２に戻す。処理実行部１１４は、第一チェックポイント６０２から処理を再開する。
【００４８】
このように、同じところで障害が繰り返し発生して処理が先に進まない場合、プロセス実行装置１００は、処理を再開するチェックポイントを一つずつ前に戻していく。これにより、障害の原因が発生する前のチェックポイントから処理を再開できれば、障害を克服し、正常に処理を続けることができる。
【００４９】
図９は、この実施の形態におけるプロセス実行装置１００の動作の一例を示す模式図である。
【００５０】
処理実行部１１４が第二チェックポイント６０３から処理を再開し、第三チェックポイント６０４を通過したのち、同じところでは障害が発生せず、第四チェックポイント６０５に到達したと仮定する。チェックポイント判定部１２１がそのことを判定し、内部状態記憶部１１２が記憶したデータを状態取得部１２２が取得して、第三チェックポイント６０４に対応するデータとして、状態記憶部１２３が記憶する。この時点における状態記憶部１２３の記憶内容６１８は、第一チェックポイント６０２における状態６５２と、第二チェックポイント６０３における状態６５３と、第三チェックポイント６０４における状態６５４と、第四チェックポイント６０５における状態６５５との４つである。
今回のプロセス処理において、処理実行部１１４の処理が第四チェックポイント６０５まで到達したのは初めてなので、巻戻時点判定部１３２は、第四チェックポイント６０５を巻戻時点と判定する。
【００５１】
処理実行部１１４の処理が最終チェックポイント６０６に到達する前に、またもや障害が発生したと仮定する。障害判定部１３１がそのことを判定し、状態巻戻部１３３は、巻戻時点判定部１３２の判定結果に基づいて、実行部１１０の状態を第四チェックポイント６０５における状態６５５に戻す。処理実行部１１４は、第四チェックポイント６０５から処理を再開する。
【００５２】
このように、繰り返し障害が発生した場合であっても、前に障害が発生した時点よりも後まで処理が進んだ場合には、前に発生していた障害の原因は除去され、新たな障害の原因が発生したと考えられる。この場合、プロセス実行装置１００は、更に前のチェックポイントに戻るのではなく、直前のチェックポイントに戻って、処理を再開する。
【００５３】
図１０は、この実施の形態におけるプロセス実行装置１００の動作の一例を示す模式図である。
【００５４】
第四チェックポイント６０５を通過したのち、障害が発生せずに、最終チェックポイント６０６に到達したと仮定する。チェックポイント判定部１２１がそのことを判定し、状態記憶部１２３は、記憶したデータを消去する。これにより、状態記憶部１２３の記憶内容６１９は、空になる。
【００５５】
この実施の形態におけるプロセス実行装置１００は、データを記憶する記憶装置（磁気ディスク装置９２０）と、データを処理する処理装置（ＣＰＵ９１１）と、実行部１１０と、状態記憶部１２３と、状態巻戻部１３３とを有する。
上記実行部１１０は、上記処理装置を用いて、プロセスを実行する。
上記状態記憶部１２３は、上記記憶装置を用いて、上記実行部１１０が上記プロセスを実行している途中の複数の中間時点（チェックポイント）それぞれについて、上記中間時点における上記実行部１１０の状態を記憶する。
上記状態巻戻部１３３は、上記処理装置を用いて、上記実行部１１０に障害が発生した場合に、上記状態記憶部１２３が記憶した状態のうちいずれかの中間時点の状態に、上記実行部１１０の状態を戻し、上記実行部１１０に更に障害が発生した場合に、上記状態記憶部１２３が記憶した状態のうち、上記実行部１１０の状態を戻した中間時点よりも前の中間時点における状態に、上記実行部１１０の状態を戻す。
【００５６】
この実施の形態におけるプロセス実行装置１００によれば、実行部１１０の状態を中間時点における状態に戻して処理をやり直しても再び障害が発生する場合に、実行部１１０の状態をそれよりも前の中間時点における状態に戻して処理をやり直すので、障害の原因が早い段階で発生していた場合であっても、それよりも前の中間時点から処理をやり直すことができ、障害を克服して、正常に処理を続けることができる。
【００５７】
この実施の形態におけるプロセス実行装置１００において、上記状態巻戻部１３３は、上記処理装置を用いて、上記実行部１１０に更に障害が発生した場合であって、上記実行部１１０の状態を戻した中間時点よりも前の中間時点における状態を、上記状態記憶部１２３が記憶していない場合に、上記実行部１１０に上記プロセスの実行を中断させる。
【００５８】
この実施の形態におけるプロセス実行装置１００によれば、更に前の中間時点における状態を状態記憶部１２３が記憶していない場合に、実行部１１０の処理を中断させるので、実行部１１０が入力したパラメータに異常があるなど、いくら処理をやり直しても障害が発生する場合に、処理の続行を断念し、次のプロセスの処理に移ることができる。
【００５９】
この実施の形態におけるプロセス実行装置１００は、データを記憶する記憶装置（磁気ディスク装置９２０）とデータを処理する処理装置（ＣＰＵ９１１）とを有するコンピュータを、上記プロセス実行装置１００として機能させるコンピュータプログラムにより、実現することができる。
【００６０】
この実施の形態におけるコンピュータプログラムによれば、実行部１１０の状態を中間時点における状態に戻して処理をやり直しても再び障害が発生する場合に、実行部１１０の状態をそれよりも前の中間時点における状態に戻して処理をやり直すので、障害の原因が早い段階で発生していた場合であっても、それよりも前の中間時点から処理をやり直し、障害を克服して、正常に処理を続けるプロセス実行装置１００を得ることができる。
【００６１】
この実施の形態におけるプロセス実行装置１００が、プロセスを実行するプロセス実行方法は、以下の工程を有する。
上記処理装置が、上記プロセスを実行する（実行工程）。
上記記憶装置が、上記処理装置が上記プロセスを実行している途中の複数の中間時点（チェックポイント）それぞれについて、上記中間時点における状態を記憶する（状態記憶工程）。
上記処理装置が、上記プロセスの実行に障害が発生した場合に、上記記憶装置が記憶した状態のうちいずれかの中間時点の状態に、状態を戻す（第一状態巻戻工程）。
上記処理装置が、上記プロセスの実行に更に障害が発生した場合に、上記記憶装置が記憶した状態のうち、状態を戻した中間時点よりも前の中間時点における状態に、状態を戻す（第二状態巻戻工程）。
【００６２】
この実施の形態におけるプロセス実行方法によれば、状態を中間時点における状態に戻して処理をやり直しても再び障害が発生する場合に、状態をそれよりも前の中間時点における状態に戻して処理をやり直すので、障害の原因が早い段階で発生していた場合であっても、それよりも前の中間時点から処理をやり直し、障害を克服して、正常に処理を続けることができる。
【００６３】
以上説明したシステム再起動装置（プロセス実行装置１００）は、プロセスの処理途中にある複数のチェックポイントを検出するチェックポイント検出装置（チェックポイント判定部１２１）を備え、障害が発生したことを検出する障害発生検出装置（障害判定部１３１）を備え、障害発生時にシステム（実行部１１０）の再起動を行うプロセス再起動装置（状態巻戻部１３３）を備え、障害発生時におけるシステム再起動時にシステムを直近のチェックポイントの状態に戻して再起動を試み、再起動失敗時にはさらにチェックポイントを１つ前の状態に戻し、以後再起動が成功するまで再起動を試みる再起動試行装置（障害処理部１２０）を設ける。
【００６４】
システム再起動装置は、プロセス処理を実行するプロセス処理部（実行部１１０）、チェックポイントにおいてメモリ内容のスナップショットを採取するチェックポイント処理部（状態取得部１２２）、採取したスナップショットを蓄積するスナップショット蓄積部（状態記憶部１２３）、プロセス処理中の障害発生を検出する障害検出部（障害判定部１３１）、障害発生時にプロセス処理部の再起動を指示する再起動指示部（巻戻時点判定部１３２）、スナップショット蓄積部のスナップショットデータをプロセス処理部に書き戻す状態復帰指示部（状態巻戻部１３３）を有する。
【００６５】
プロセス処理部のプロセス処理には、任意の処理実行間隔でチェックポイントというポイントが埋め込まれている。プロセス処理部がプロセス処理を実行し、チェックポイントに達すると、チェックポイント処理部が呼び出される。チェックポイント処理部は、プロセス処理実行部（処理実行部１１４）の内部メモリ（内部状態記憶部１１２）の内容をダンプして、これをスナップショットとしてスナップショット蓄積部に保存する。こうして、スナップショット蓄積部には、時系列順にプロセス処理実行部の内部メモリ情報が蓄積される。
プロセス処理の実行中に障害が発生し、プロセス処理部のプロセス処理がダウンした場合、障害検出部が障害発生を検出する。障害検出した障害検出部は、再起動指示部にプロセス処理部を再起動するよう、指示を出す。再起動の指示を受けた再起動指示部は、状態復帰指示部に直近のスナップショットをプロセス処理部に書き戻すよう指示を出す。指示を受けた状態復帰指示部は、スナップショット蓄積部から直近のスナップショットを取り出し、プロセス処理部の内部のメモリに書きこむ。その後、再起動指示部は、プロセス処理部に再起動の指示を出す。再起動の指示を受けたプロセス処理部は、状態復帰指示部から受け取った内部のメモリ内容を元にプロセス処理を再起動させる。
このとき、もし再びプロセス処理実行部に障害が発生した場合、上記の手順で再び再起動の指示を出すことになるが、再起動指示部は、状態復帰指示部に対して、直近からさらに１つ前のスナップショットをプロセス処理部に書き戻すように指示を出して、プロセス処理部に再起動を指示する。以降、プロセス処理部が正常に動作するまで、スナップショットを順に以前のものに戻していく。
【００６６】
以上のように、プロセス処理に障害が発生した場合に再起動時に直近かまたはそれに近い状態にメモリ内容を戻してからプロセス処理の再起動を行うようにしているので、プロセス処理の再起動時に最初から処理をすることなく正常な処理状態に戻すことができ、再起動時間を短縮することができる。
【００６７】
以上説明したシステム再起動装置（プロセス実行装置１００）は、プロセスがチェックポイントに達した時点で、システムのメモリ状態やＣＰＵ状態などの情報をスナップショット蓄積部（状態記憶部１２３）に吸い上げ、そのプロセスの処理が終了するまで蓄積し続け、プロセスの終了と同時に上記情報を破棄するスナップショット管理部（状態記憶部１２３）を設ける。
【００６８】
システム再起動装置は、プロセス処理を実行するプロセス処理部（実行部１１０）、チェックポイントにおいてメモリ内容のスナップショットを採取するチェックポイント処理部（状態取得部１２２）、採取したスナップショットを蓄積するスナップショット蓄積部（状態記憶部１２３）、プロセス処理中の障害発生を検出する障害検出部（障害判定部１３１）、障害発生時にプロセス処理部の再起動を指示する再起動指示部（巻戻時点判定部１３２）、スナップショット蓄積部のスナップショットデータをプロセス処理部に書き戻す状態復帰指示部（状態巻戻部１３３）、プロセス処理のスナップショットの蓄積の指示や、スナップショットが必要なくなった際にスナップショットの破棄を指示するスナップショット管理部（状態記憶部１２３）を有する。
【００６９】
プロセス処理部のプロセス処理には任意の処理間隔でチェックポイントが挿入されている。このチェックポイントにプロセス処理が到達すると、スナップショット管理部が動作し、以下の動作を行う。
チェックポイントがプロセス処理の最初にあった場合、プロセスの状態のスナップショットを取得し、入力情報をキーにしてスナップショット管理部に新規登録を行う。
チェックポイントがプロセス処理の中間にあった場合、プロセスの状態のスナップショットを取得し、入力情報をキーにしてスナップショット管理部に追加登録を行う。
チェックポイントがプロセス処理の終端にあった場合、入力情報をキーに登録されているスナップショットを全て破棄する。
【００７０】
以上のように、プロセスの処理途中に設けたチェックポイントを通過する際にプロセスの状態のスナップショットを登録、削除することにより、プロセスに直接関連付けられるスナップショットのみを蓄積できることから、スナップショット蓄積部に蓄積されるデータ量を抑えることができる。
【００７１】
以上説明したシステム再起動装置（プロセス実行装置１００）は、スナップショット蓄積部（状態記憶部１２３）に蓄積した全てのチェックポイントの状態に戻して再起動を試みたが再起動失敗した場合、その入力データ自体を無効として破棄し、次の入力データでプロセス処理を再開する入力データ判断装置（状態巻戻部１３３）を設ける。
【００７２】
システム再起動装置は、プロセス処理を実行するプロセス処理部（実行部１１０）、チェックポイントにおいてメモリ内容のスナップショットを採取するチェックポイント処理部（状態取得部１２２）、採取したスナップショットを蓄積するスナップショット蓄積部（状態記憶部１２３）、プロセス処理中の障害発生を検出する障害検出部（障害判定部１３１）、障害発生時にプロセス処理部の再起動を指示する再起動指示部（巻戻時点判定部１３２）、スナップショット蓄積部のスナップショットデータをプロセス処理部に書き戻す状態復帰指示部（状態巻戻部１３３）、全てのスナップショットを使用して再起動を試みたが失敗した際に入力データを破棄して次の入力データで再起動を行う入力データ破棄判断部（巻戻時点判定部１３２）を有する。
【００７３】
プロセス処理部のプロセスが障害を起こして再起動指示部がスナップショットでシステムの状態を復旧しながら再起動を行うが再起動失敗を繰り返し、スナップショット蓄積部に蓄積されている最後のスナップショットを使用して再起動を行う。このとき、次のチェックポイントまでプロセス処理部のプロセスが実行された場合は、プロセス再起動が成功したと判断し、通常の動作を行う。もし次のチェックポイントまでに再起動に失敗した場合、状態復帰指示部は、入力データ判断部に再起動失敗の通知を行う。通知を受けた入力データ破棄判断部は、再起動指示部に現在の入力データを破棄し次の入力データでプロセス再起動を行うよう指示する。プロセス再起動の指示を受けた再起動指示部は、現在プロセス処理部に渡している入力データを破棄し、次の入力データをプロセス処理部に渡し、プロセスの再起動を行う。プロセス処理部は、現在の入力データを破棄し次の入力データでプロセスの処理を実行する。
【００７４】
以上のように、全てのスナップショットを使ってプロセスの再起動を試して失敗した場合でも現在の入力データを破棄して次のデータで処理続行するため、プロセス再起動時間を短縮でき、効率よくシステムを稼動することができる。
【００７５】
実施の形態２．
実施の形態２について、図１１〜図１６を用いて説明する。
なお、実施の形態１と共通する部分については、同一の符号を付し、説明を省略する。
【００７６】
図１１は、この実施の形態におけるプロセス実行装置１００の機能ブロックの構成の一例を示すブロック構成図である。
プロセス実行装置１００は、実施の形態１で説明した巻戻時点判定部１３２を有さず、その代わり、状態削除部１３４を有する。
【００７７】
状態巻戻部１３３は、障害判定部１３１が実行部１１０に障害が発生したと判定した場合に、状態記憶部１２３が記憶したデータのうち、最も新しいチェックポイントに対応するデータを状態記憶部１２３から読み出し、内部状態記憶部１１２に書き込む。これにより、実行部１１０の状態がそのチェックポイントの時点における状態に戻り、処理実行部１１４は、そのチェックポイントから処理を再開する。
【００７８】
状態削除部１３４は、状態記憶部１２３が記憶したデータを状態巻戻部１３３が内部状態記憶部１１２に書き込んで、実行部１１０の状態をあるチェックポイントの時点の状態に戻した場合に、ＣＰＵ９１１を用いて、状態記憶部１２３が記憶したデータのなかから、状態記憶部１２３が内部状態記憶部１１２に書き込んだデータを削除する。
実行部１１０に再び障害が発生した場合、一回書き戻したデータは削除されているので、状態巻戻部１３３が、実行部１１０の状態を再び同じ状態に戻すことはない。
【００７９】
図１２は、この実施の形態における障害処理Ｓ５１０の流れの一例を示すフローチャート図である。
障害処理Ｓ５１０は、実施の形態１で説明した状態判定工程Ｓ５２４、巻戻時点前進工程Ｓ５２５、巻戻時点後退工程Ｓ５３４を有さず、その代わり、状態削除工程Ｓ５３５を有する。
【００８０】
巻戻時点判定工程Ｓ５３１において、状態巻戻部１３３は、ＣＰＵ９１１を用いて、いずれかのチェックポイントにおける状態を表わすデータを状態記憶部１２３が記憶しているか否かを判定する。
状態記憶部１２３がデータを記憶していないと判定した場合、処理中断工程Ｓ５３２へ進む。
状態記憶部１２３がデータを記憶していると判定した場合、状態巻戻工程Ｓ５３３へ進む。
【００８１】
状態巻戻工程Ｓ５３３において、状態巻戻部１３３は、ＣＰＵ９１１を用いて、状態記憶部１２３が記憶したデータのうち、一番後ろのチェックポイントに対応するデータを読み出し、内部状態記憶部１１２に書き込む。
その後、状態削除工程Ｓ５３５へ進む。
【００８２】
状態削除工程Ｓ５３５において、状態削除部１３４は、ＣＰＵ９１１を用いて、状態記憶部１２３が記憶したデータのうち、状態巻戻工程Ｓ５３３で状態巻戻部１３３が読み出したデータを削除する。
その後、障害判定工程Ｓ５１１に戻る。
【００８３】
図１３は、この実施の形態におけるプロセス実行装置１００の動作の一例を示す模式図である。
【００８４】
プロセス開始時６０１において、状態記憶部１２３の記憶内容６２１は、空である。
処理実行部１１４の処理が第一チェックポイント６０２まで到達すると、状態記憶部１２３の記憶内容６２２に、第一チェックポイント６０２における状態６５２が追加される。
処理実行部１１４の処理が第二チェックポイント６０３まで到達すると、状態記憶部１２３の記憶内容６２３に、第二チェックポイント６０３における状態６５３が追加される。
処理実行部１１４の処理が第三チェックポイント６０４まで到達すると、状態記憶部１２３の記憶内容６２４に、第三チェックポイント６０４における状態６５４が追加される。
このように、処理実行部１１４の処理が順調に進んでいる限り、状態記憶部１２３が記憶するデータの内容は、実施の形態１の場合と同じである。
【００８５】
処理実行部１１４の処理が第四チェックポイント６０５に到達する前に、障害が発生したと仮定する。状態記憶部１２３が記憶したデータのうち一番最後のデータは第三チェックポイント６０４に対応するデータなので、状態巻戻部１３３は、実行部１１０の状態を第三チェックポイント６０４における状態６５４に戻す。処理実行部１１４は、第三チェックポイント６０４から処理を再開する。
【００８６】
図１４は、この実施の形態におけるプロセス実行装置１００の動作の一例を示す模式図である。
【００８７】
処理実行部１１４が第三チェックポイント６０４から処理を再開すると、状態記憶部１２３が記憶したデータのなかから第三チェックポイント６０４に対応するデータを状態削除部１３４が削除する。状態記憶部１２３の記憶内容６２５は、第一チェックポイント６０２における状態６５２と、第二チェックポイント６０３における状態６５３との２つになる。
【００８８】
処理実行部１１４の処理が第四チェックポイント６０５に到達する前に、再び障害が発生したと仮定する。状態記憶部１２３が記憶したデータのうち一番最後のデータは第二チェックポイント６０３に対応するデータなので、状態巻戻部１３３は、実行部１１０の状態を第二チェックポイント６０３における状態６５３に戻す。処理実行部１１４は、第二チェックポイント６０３から処理を再開する。
【００８９】
このように、処理を再開した時点のデータを、状態削除部１３４が状態記憶部１２３から削除するので、同じところで再び障害が発生した場合、処理実行部１１４は、一つ前のチェックポイントに戻って、処理を再開する。これにより、直前のチェックポイントに到達するよりも前の時点で障害の原因が発生していた場合であっても、障害発生前の時点から処理を再開することができるので、障害を克服し、正常に処理を続けることができる。
【００９０】
図１５は、この実施の形態におけるプロセス実行装置１００の動作の一例を示す模式図である。
【００９１】
処理実行部１１４が第二チェックポイント６０３から処理を再開すると、状態記憶部１２３が記憶したデータのなかから第二チェックポイント６０３に対応するデータを状態削除部１３４が削除する。状態記憶部１２３の記憶内容６２６は、第一チェックポイント６０２における状態６５２だけになる。
【００９２】
処理実行部１１４の処理が第三チェックポイント６０４に再び到達すると、状態記憶部１２３は、内部状態記憶部１１２が記憶したデータを、第三チェックポイント６０４に対応する新たなデータとして記憶する。状態記憶部１２３の記憶内容６２７は、第一チェックポイント６０２における状態６５２と、第三チェックポイント６０４における新しい状態６５４との２つになる。
【００９３】
処理実行部１１４の処理が第四チェックポイント６０５に到達する前に、三たび障害が発生したと仮定する。状態記憶部１２３が記憶したデータのうち一番最後のデータは第三チェックポイント６０４に対応するデータなので、状態巻戻部１３３は、実行部１１０の状態を第三チェックポイント６０４における状態６５４に戻す。処理実行部１１４は、第三チェックポイント６０４から処理を再開する。
【００９４】
同じところで障害が発生した場合であっても、直前のチェックポイントにおける状態が前回とは異なるので、障害の原因が異なる可能性がある。したがって、直前のチェックポイントから処理をやり直してみる価値がある。プロセス実行装置１００は、前のチェックポイントに戻って処理をやり直し、それよりも後のチェックポイントを通過してそのチェックポイントにおける状態が更新された場合には、状態が更新されたチェックポイントに戻って、処理をやり直す。これにより、更に前のチェックポイントに戻らなくても、障害を克服し、正常に処理を続けることができる場合がある。
【００９５】
図１６は、この実施の形態におけるプロセス実行装置１００の動作の一例を示す模式図である。
【００９６】
処理実行部１１４が再び第三チェックポイント６０４から処理を再開すると、状態記憶部１２３が記憶したデータのなかから第三チェックポイント６０４に対応するデータを状態削除部１３４が、削除する。状態記憶部１２３の記憶内容６２８は、第一チェックポイント６０２における状態６５２だけになる。
【００９７】
処理実行部１１４の処理が第四チェックポイント６０５に到達する前に、四たび障害が発生したと仮定する。状態記憶部１２３が記憶したデータのうち一番最後のデータは第一チェックポイント６０２に対応するデータなので、状態巻戻部１３３は、実行部１１０の状態を第一チェックポイント６０２における状態６５２に戻す。処理実行部１１４は、第一チェックポイント６０２から処理を再開する。
【００９８】
状態が更新されたチェックポイントに戻って処理を再開しても、同じところで障害が発生する場合には、新たな障害の原因が発生したと考えるよりも、もっと前の時点に障害の原因があると考えるほうが妥当である。プロセス実行装置１００は、前に戻ったチェックポイントよりも更に前のチェックポイントに戻り、処理をやり直す。これにより、障害の原因発生前の時点から処理を再開することができれば、障害を克服し、正常に処理を続けることができる。
【００９９】
この実施の形態におけるプロセス実行装置１００において、上記状態巻戻部１３３は、上記処理装置（ＣＰＵ９１１）を用いて、上記実行部１１０に障害が発生した場合に、上記状態記憶部１２３が記憶した状態のうち、最も新しい中間時点（チェックポイント）の状態に、上記実行部１１０の状態を戻す。
上記状態記憶部（状態削除部１３４）は、上記処理装置を用いて、記憶した状態のうち、上記状態巻戻部１３３が上記実行部１１０の状態を戻した中間時点の状態を削除する。
【０１００】
この実施の形態におけるプロセス実行装置１００によれば、上記状態巻戻部１３３が上記実行部１１０の状態を戻した中間時点の状態を状態記憶部（状態削除部１３４）が削除するので、巻戻時点の管理が容易になる。また、繰り返し障害が発生したプロセスについて、状態記憶部１２３が記憶する状態の数が減るので、状態記憶部１２３が使用する記憶領域が少なくなる。
【０１０１】
以上説明したシステム再起動装置（プロセス実行装置１００）は、障害発生時にシステム（実行部１１０）を直近のチェックポイントの状態に戻して再起動を試みたが再起動失敗した場合、そのチェックポイントで取得した情報は無効として破棄するチェックポイント情報破棄判断部（状態削除部１３４）を設ける。
【０１０２】
システム再起動装置は、プロセス処理を実行するプロセス処理部（実行部１１０）、チェックポイントにおいてメモリ内容のスナップショットを採取するチェックポイント処理部（状態取得部１２２）、採取したスナップショットを蓄積するスナップショット蓄積部（状態記憶部１２３）、プロセス処理中の障害発生を検出する障害検出部（障害判定部１３１）、障害発生時にプロセス処理部の再起動を指示する再起動指示部（状態巻戻部１３３）、スナップショット蓄積部のスナップショットデータをプロセス処理部に書き戻す状態復帰指示部（状態巻戻部１３３）、障害発生時にスナップショットが必要なくなった際にスナップショットの破棄を指示するチェックポイント情報破棄判断部（状態削除部１３４）を有する。
【０１０３】
障害検出部で検出した障害に対し、状態復帰指示部は、スナップショット蓄積部からスナップショットを取り出してプロセス処理部の状態を復帰するとともに、チェックポイント破棄判断部に再起動するスナップショットとして登録する。この状態で、再起動指示部からの指示でプロセスの再起動を行い、プロセスが次のチェックポイントに到達することによりプロセスが正常に動作したという判断を状態復帰指示部からチェックポイント情報破棄判断部に通知し、チェックポイント破棄判断部は当該スナップショットは有効として、スナップショット蓄積部に当該スナップショットを保持するように指示する。もし、プロセスの再起動時、次のチェックポイントに到達することなくプロセスに障害が発生した場合、状態復帰指示部は、チェックポイント破棄判断部に再起動が失敗したことを通知する。チェックポイント破棄判断部は、当該スナップショットは問題ありと判断して、スナップショット蓄積部に当該スナップショットを破棄する。
【０１０４】
以上のように、スナップショット蓄積部に無効なスナップショットの情報を蓄積することがなくなり、新たなチェックポイントを通過しながら複数回障害発生して再起動を行うことになっても、スナップショット蓄積部からは常に時系列の逆順でスナップショットを取り出せばよいことになり、再起動時のスナップショット取り出しを効率よく行うことができる。
【０１０５】
実施の形態３．
実施の形態３について、図１７を用いて説明する。
この実施の形態におけるプロセス実行装置１００の構成は、実施の形態１または実施の形態２で説明したプロセス実行装置１００と同様なので、説明を省略し、異なる点のみを説明する。
【０１０６】
チェックポイント判定部１２１は、実行部１１０がプロセスの処理を開始した場合に、ＣＰＵ９１１を用いて、実行部１１０におけるプロセスの処理がチェックポイントに到達したと判定する。すなわち、プロセスの開始時点に、最初のチェックポイントを設ける。
実行部１１０がプロセスの処理を開始すると、実行部１１０におけるプロセスの処理がチェックポイントに到達したとチェックポイント判定部１２１が判定するので、内部状態記憶部１１２が記憶したデータを状態取得部１２２が取得し、状態記憶部１２３が記憶する。
【０１０７】
図１７は、この実施の形態におけるプロセス実行装置１００の動作の一例を示す模式図である。
【０１０８】
処理実行部１１４がプロセスの処理を開始すると、実行部１１０の処理が第一チェックポイント６０２に到達したとチェックポイント判定部１２１が判定し、内部状態記憶部１１２が記憶したデータを状態取得部１２２が取得して、状態記憶部１２３が記憶する。したがって、プロセス開始の時点で、状態記憶部１２３は、記憶内容６３１として、プロセス開始時の状態６５２を表わすデータを記憶している。
【０１０９】
処理実行部１１４の処理が第二チェックポイント６０３に到達する前に障害が発生したと仮定する。状態記憶部１２３がプロセス開始時の状態６５２を記憶しているので、巻戻時点判定部１３２は、処理実行部１１４の状態をプロセス開始時の状態６５２に戻す。処理実行部１１４は、第一チェックポイント６０２（プロセス開始時点）から処理を再開する。
【０１１０】
実施の形態１や実施の形態２におけるプロセス実行装置１００は、プロセス開始直後など、最初のチェックポイントまで処理実行部１１４の処理が到達する前に障害が発生した場合、実行部１１０の状態を戻すべきチェックポイントが存在しないので、プロセスの処理を中断する。この実施の形態におけるプロセス実行装置１００は、プロセス開始直後に障害が発生した場合であっても、実行部１１０の状態を戻すべきチェックポイント（プロセス開始時）が存在するので、その状態に実行部１１０の状態を戻して、処理を再開することができる。
【０１１１】
実施の形態４．
実施の形態４について、図１８を用いて説明する。
この実施の形態におけるプロセス実行装置１００の構成は、実施の形態１〜実施の形態３で説明したプロセス実行装置１００と同様なので、異なる点のみを説明する。
【０１１２】
状態取得部１２２は、あらかじめ、ＣＰＵ９１１を用いて、初期化実行部１１１が初期化処理を実行した直後に内部状態記憶部１１２が記憶しているデータ（以下「初期化状態データ」と呼ぶ。）を取得しておく。状態記憶部１２３は、あらかじめ、磁気ディスク装置９２０を用いて、状態取得部１２２が取得した初期化状態データを、プロセスの一番最初の時点に対応するデータとして記憶しておく。
また、状態記憶部１２３は、プロセス実行が終了した場合やプロセス実行が中断した場合、ＣＰＵ９１１を用いて、記憶したデータを消去する。ただし、状態記憶部１２３は、初期化状態データだけは残し、ＣＰＵ９１１を用いて、それ以外のデータを削除する。
【０１１３】
図１８は、この実施の形態におけるプロセス実行装置１００の動作の一例を示す模式図である。
【０１１４】
実行部１１０がプロセスの処理を開始する前の時点において、状態記憶部１２３は、記憶内容６３２として、初期化状態６５１を表わすデータを記憶している。
したがって、プロセス開始直後に障害が発生した場合であっても、実行部１１０の状態を戻すべきチェックポイント（初期化実行時）が存在するので、その状態に実行部１１０の状態を戻して、処理を再開することができる。
また、もっとあとの時点で障害が発生し、実行部１１０の状態を戻して処理をやり直しても、障害を克服できない場合、プロセスの処理を開始した時点における実行部１１０の内部状態に障害の原因がある可能性がある。そのような場合、初期化処理を実行してからプロセスの処理を再開することにより、障害を克服でき、正常に処理を続けることができる。
【０１１５】
更に、実施の形態３と同様、プロセスの開始時にも、実行部１１０がチェックポイントに到達したとチェックポイント判定部１２１が判定する構成であれば、処理実行部１１４がプロセスの処理を開始した時点で、状態記憶部１２３は、記憶内容６３３として、初期化状態６５１とプロセス開始時における状態６５２との２つを表わすデータを記憶している。
したがって、プロセス開始直後に障害が発生し、プロセス開始時の状態に実行部１１０の状態を戻して処理を再開したが、再び障害が発生した場合であっても、まだ更に実行部１１０の状態を戻すべきチェックポイント（初期化実行時）が存在するので、その状態に実行部１１０の状態を戻して、もう一度、処理を再開することができる。
【０１１６】
この実施の形態におけるプロセス実行装置１００において、上記状態記憶部１２３は、上記記憶装置（磁気ディスク装置９２０）を用いて、最初の中間時点（チェックポイント）における上記実行部１１０の状態として、上記実行部１１０を初期化した状態を記憶する。
【０１１７】
この実施の形態におけるプロセス実行装置１００によれば、中間時点における状態に実行部１１０の状態を戻して処理をやり直しても障害を克服できない場合に、初期化した状態に実行部１１０の状態を戻して処理をやり直すので、プロセス開始時における実行部１１０の状態に障害の原因がある場合でも、障害を克服し、正常に処理を続けることができる。
【０１１８】
なお、初期化実行部１１１が初期化処理を実行した直後の状態６５１を、状態記憶部１２３があらかじめ記憶しておくのではなく、状態記憶部１２３が記憶しているデータのなかに、実行部１１０の状態を戻すべきチェックポイントに対応するものがなくなった時点で、初期化実行部１１１が初期化処理を実行し、その後、処理実行部１１４がプロセスの処理を再開する構成としてもよい。
【０１１９】
以上説明したシステム再起動装置（プロセス実行装置１００）は、スナップショット蓄積部（状態記憶部１２３）に蓄積した全てのチェックポイントの状態に戻して再起動を試みたが再起動失敗した場合、そのプロセスの内部で保持しているデータに異常があると判断して内部データを全て初期化し、同じ入力データでプロセス処理を再開する内部データ初期化装置（初期化実行部１１１）を設ける。
【０１２０】
システム再起動装置は、プロセス処理を実行するプロセス処理部（実行部１１０）、チェックポイントにおいてメモリ内容のスナップショットを採取するチェックポイント処理部（状態取得部１２２）、採取したスナップショットを蓄積するスナップショット蓄積部（状態記憶部１２３）、プロセス処理中の障害発生を検出する障害検出部（障害判定部１３１）、障害発生時にプロセス処理部の再起動を指示する再起動指示部（状態巻戻部１３３）、スナップショット蓄積部のスナップショットデータをプロセス処理部に書き戻す状態復帰指示部（状態巻戻部１３３）、全てのスナップショットを使用して再起動を試みたが失敗した際に内部情報を全て初期化して再起動を行う内部データ初期化部（初期化実行部１１１）を有する。
【０１２１】
プロセス処理部のプロセスが障害を起こして再起動指示部がスナップショットでシステムの状態を復旧しながら再起動を行うが再起動失敗を繰り返し、スナップショット蓄積部に蓄積されている最後のスナップショットを使用して再起動を行う。このとき、次のチェックポイントまでプロセス処理部のプロセスが実行された場合は、プロセス再起動が成功したと判断し、通常の動作を行う。もし次のチェックポイントまでに再起動に失敗した場合、状態復帰指示部は内部データ初期化部に再起動失敗の通知を行う。通知を受けた内部データ初期化部は、プロセス初期化に対してプロセス処理に使用する内部情報を全て初期値にするように指示をする。その後、再起動指示部にプロセス再起動を指示する。プロセス再起動の指示を受けた再起動指示部は、現在の入力データをプロセス処理部に与えてプロセスの起動を指示ずる。プロセスの起動指示を受けたプロセス処理部は再起動指示部から入力データを受け取り、プロセスの処理を開始する。
【０１２２】
以上のように、全てのスナップショットを使ってプロセスの再起動を試して失敗した場合でもプロセス自体の内部情報を初期化することによりシステムをダウンさせることなくプロセスの再起動を行うことができるため、システム全体の再起動時間を短縮でき、効率よくシステムを稼動することができる。
【０１２３】
実施の形態５．
実施の形態５について、図１９〜図２１を用いて説明する。
なお、実施の形態１〜実施の形態４と共通する部分については、同一の符号を付し、説明を省略する。
【０１２４】
図１９は、この実施の形態におけるプロセス実行装置１００の全体構成の一例を示す全体構成図である。
プロセス実行装置１００は、２つの実行部１１０、２つの障害処理部１２０、系切替部１８０を有する。
系切替部１８０は、ＣＰＵ９１１を用いて、２つの実行部１１０のうち、いずれか一方を常用系とし、他方を待機系とする。系切替部１８０は、ＣＰＵ９１１を用いて、いずれの実行部１１０を常用系とするかを判定し、判定した結果を実行部１１０や障害処理部１２０に対して通知する。
系切替部１８０は、ＣＰＵ９１１を用いて、外部からパラメータなどを入力して、常用系・待機系双方の実行部１１０に対して通知する。また、系切替部１８０は、常用系の実行部１１０が出力したプロセス実行の結果を取得し、外部に出力する。
【０１２５】
それぞれの障害処理部１２０は、ＣＰＵ９１１を用いて、対応する実行部１１０におけるプロセスの実行を監視し、障害が発生した場合にその障害に対処する処理を行う。実行部１１０が常用系である場合と待機系である場合とでは、障害に対する対処が異なる。障害処理部１２０は、ＣＰＵ９１１を用いて、系切替部１８０からの通知に基づいて、対応する実行部１１０が常用系であるか待機系であるかを判断し、判断結果に基づいて、障害に対処する。
また、障害処理部１２０は、ＣＰＵ９１１を用いて、実行部１１０における障害の発生状況などを系切替部１８０に通知する。系切替部１８０は、ＣＰＵ９１１を用いて、障害処理部１２０からの通知に基づいて、いずれの実行部１１０を常用系とするかを判定する。
【０１２６】
図２０は、この実施の形態における実行処理Ｓ５５０の流れの一例を示すフローチャート図である。
実行処理Ｓ５５０において、実行部１１０は、プロセスを実行する。実行処理Ｓ５５０は、系判定工程Ｓ５５１、初期化工程Ｓ５５２、プロセス実行工程Ｓ５５３を有する。
【０１２７】
系判定工程Ｓ５５１において、実行部１１０は、ＣＰＵ９１１を用いて、系切替部１８０からの通知に基づいて、自身が常用系であるか待機系であるかを判定する。
常用系であると判定した場合、プロセス実行工程Ｓ５５３へ進む。
待機系であると判定した場合、初期化工程Ｓ５５２へ進む。
【０１２８】
初期化工程Ｓ５５２において、実行部１１０（初期化実行部１１１）は、ＣＰＵ９１１を用いて、初期化処理を実行する。
プロセス実行工程Ｓ５５３において、実行部１１０（処理実行部１１４）は、ＣＰＵ９１１を用いて、プロセスを実行する。
【０１２９】
このように、常用系の実行部１１０は、前回のプロセス終了時の状態を引き継いで、次のプロセスを実行するのに対し、待機系の実行部１１０は、初期化処理を実行してから、次のプロセスを実行する。前回のプロセス終了時の状態に異常があることが原因で、常用系の実行部１１０に障害が発生した場合、待機系の実行部１１０は、正常にプロセスを実行できる。
【０１３０】
図２１は、この実施の形態における系切替処理Ｓ５９０の流れの一例を示すフローチャート図である。
系切替処理Ｓ５９０において、系切替部１８０は、常用系・待機系を管理し、実行部１１０における障害の発生状況に基づいて、系の切替えを行う。系切替処理Ｓ５９０は、パラメータ入力工程Ｓ５９１、常用系状況判定工程Ｓ５９２、切替工程Ｓ５９３、旧待機系状況判定工程Ｓ５９４、結果出力工程Ｓ５９５を有する。
【０１３１】
パラメータ入力工程Ｓ５９１において、系切替部１８０は、ＣＰＵ９１１を用いて、外部からパラメータを入力する。系切替部１８０は、ＣＰＵ９１１を用いて、常用系・待機系を問わず、２つの実行部１１０に対して、入力したパラメータを通知する。
これにより、常用系の実行部１１０は、前回のプロセス終了時の状態を引き継いで、プロセスの実行を開始する。また、待機系の実行部１１０は、初期化処理実行ののち、プロセスの実行を開始する。なお、待機系の実行部１１０は、あらかじめ初期化処理を実行しておき、パラメータ入力後すぐに、プロセスの実行を開始する構成であってもよい。
【０１３２】
常用系状況判定工程Ｓ５９２において、系切替部１８０は、ＣＰＵ９１１を用いて、常用系である実行部１１０におけるプロセスの実行状況を判定する。
プロセスの実行が終了したと判定した場合、結果出力工程Ｓ５９５へ進む。
プロセスの実行が中断したと判定した場合、切替工程Ｓ５９３へ進む。
プロセスの実行が終了も中断もしていないと判定した場合、常用系状況判定工程Ｓ５９２を繰り返す。
【０１３３】
例えば、実施の形態１で説明したように、実行部１１０に障害が発生したが、状態を戻すべきチェックポイントが存在しない場合、障害処理部１２０が、実行部１１０におけるプロセスの実行を中断させる。障害処理部１２０は、ＣＰＵ９１１を用いて、そのことを系切替部１８０に通知する。系切替部１８０は、ＣＰＵ９１１を用いて、障害処理部１２０からの通知に基づいて、実行部１１０におけるプロセスの実行が中断したと判定する。
また、実行部１１０におけるプロセスの実行が終了した場合、実行部１１０は、プロセス実行の結果を出力する。系切替部１８０は、ＣＰＵ９１１を用いて、実行部１１０が出力した結果を取得し、実行部１１０におけるプロセスの実行が終了したと判定する。
【０１３４】
切替工程Ｓ５９３において、系切替部１８０は、ＣＰＵ９１１を用いて、待機系の実行部１１０を常用系に切り替え、常用系の実行部１１０を待機系に切り替える。
旧待機系の実行部１１０は、この時点で既にプロセスの実行を開始している。場合によっては、既にプロセスの実行を終了し、結果を出力している場合もある。また、入力したパラメータに異常があった場合など、初期化処理実行後にプロセスを実行しても、やはり障害が発生する場合には、既にプロセスの実行を中断している場合もある。
【０１３５】
旧待機系状況判定工程Ｓ５９４において、系切替部１８０は、ＣＰＵ９１１を用いて、新常用系（＝旧待機系）である実行部１１０におけるそのプロセスの実行状況を判定する。
そのプロセスの実行が終了していると判定した場合、結果出力工程Ｓ５９５へ進む。
そのプロセスの実行が中断していると判定した場合、パラメータ入力工程Ｓ５９１に戻る。すなわち、そのプロセスの続行を断念し、次のプロセスに備える。
そのプロセスの実行が終了も中断もしていないと判定した場合、旧待機系状況判定工程Ｓ５９４を繰り返す。
【０１３６】
結果出力工程Ｓ５９５において、系切替部１８０は、ＣＰＵ９１１を用いて、常用系である実行部１１０が出力した結果を取得する。系切替部１８０は、ＣＰＵ９１１を用いて、取得した結果を外部に出力する。
その後、パラメータ入力工程Ｓ５９１に戻り、次のプロセスに備える。
【０１３７】
このように、常用系である実行部１１０がプロセスの実行を開始した時点における状態に異常があったことが原因で障害が発生した場合、待機系である実行部１１０が初期化処理実行後にプロセスを実行した結果を、プロセス実行装置１００の出力とする。これにより、障害を克服することができる。
また、待機系である実行部１１０が先行してプロセスを実行しておくので、障害が発生したことによる遅延を少なくすることができる。すなわち、プロセス実行装置１００は、あまり遅延することなく、結果を出力することができる。
また、プロセス実行装置１００が入力したパラメータ自体に異常があり、それが原因で障害が発生する場合には、常用系でも（旧）待機系でも障害が発生し、プロセスを続行することができない。そのような場合でも、待機系である実行部１１０が先行してプロセスを実行しておくことにより、いずれにしても障害が発生することを早く検知できる。したがって、そのプロセスの続行を早期に断念し、次のプロセスに移ることができる。これは、トラフィックが多く、プロセスの実行待ち行列が発生するような場合に、特に有効である。
【０１３８】
なお、この例では、複数の実行部１１０に対応する複数の障害処理部１２０を設け、それぞれの障害処理部１２０が、それぞれ対応する実行部１１０を管理する構成について説明したが、一つの障害処理部１２０が、複数の実行部１１０を管理する構成であってもよい。
【０１３９】
この実施の形態におけるプロセス実行装置１００は、更に、複数の上記実行部１１０と、系切替部１８０とを有する。
上記実行部のうち第一の実行部１１０は、上記処理装置を用いて、常用系として、上記プロセスを実行する。
上記実行部のうち第二の実行部１１０は、上記処理装置を用いて、待機系として、上記プロセスを実行する。
上記状態記憶部１２３は、上記記憶装置を用いて、複数の上記実行部１１０それぞれについて、上記中間時点における上記実行部１１０の状態を記憶する。
上記系切替部１８０は、上記処理装置を用いて、上記第一の実行部１１０に障害が発生した場合に、上記第二の実行部１１０を常用系に切り替え、上記第一の実行部１１０を待機系に切り替える。
【０１４０】
この実施の形態におけるプロセス実行装置１００によれば、常用系である実行部１１０に障害が発生した場合に、待機系である実行部１１０を常用系に切り替えるので、早期に障害に対処することができる。
【０１４１】
この実施の形態におけるプロセス実行装置１００において、上記第二の実行部１１０は、上記処理装置を用いて、待機系として、初期化処理を実行したのち、上記プロセスを実行する。
上記系切替部１８０は、上記処理装置を用いて、上記第一の実行部１１０に障害が発生した場合であって、上記状態巻戻部１３３が上記第一の実行部１１０の状態を戻すべき中間時点における状態を、上記状態記憶部１２３が記憶していない場合に、上記第二の実行部１１０を常用系に切り替え、上記第一の実行部１１０を待機系に切り替える。
【０１４２】
この実施の形態におけるプロセス実行装置１００によれば、常用系である実行部１１０に障害が発生する前に、待機系である実行部１１０が、初期化処理を実行したのちプロセスを実行するので、プロセス開始時の内部状態に異常があったことが原因で障害が発生した場合など初期化処理を実行すれば正常にプロセスを実行できる場合に、速やかに、障害を克服することができる。
【０１４３】
以上説明したシステム再起動装置を設けた二重系システム（プロセス実行装置１００）は、常用系で通常の処理を行うと同時に待機系で内部データを初期化させたプロセスで入力データを処理し、障害発生時にスナップショット蓄積部（状態記憶部１２３）に蓄積される全てのチェックポイントの状態からの再起動に失敗した場合に、待機系の出力データを有効なデータとする出力データ切り替え装置（系切替部１８０）を設ける。
【０１４４】
システム再起動装置は、常用系のプロセス処理を実行するプロセス処理部（実行部１１０）、常用系のチェックポイントにおいてメモリ内容のスナップショットを採取するチェックポイント処理部（チェックポイント判定部１２１）、常用系の採取したスナップショットを蓄積するスナップショット蓄積部（状態記憶部１２３）、常用系のプロセス処理中の障害発生を検出する障害検出部（障害判定部１３１）、常用系の障害発生時にプロセス処理部の再起動を指示する再起動指示部（巻戻時点判定部１３２）、常用系のスナップショット蓄積部のスナップショットデータをプロセス処理部に書き戻す状態復帰指示部（状態巻戻部１３３）、常用系の全てのスナップショットを使用して再起動を試みたが失敗した際に系の切り替えを通知する系切り替え通知部、待機系のチェックポイントにおいてメモリ内容のスナップショットを採取するチェックポイント処理部（状態取得部１２２）、待機系の採取したスナップショットを蓄積するスナップショット蓄積部（状態記憶部１２３）、系の切り替え通知を受信する系切り替え受信部、常用系のシステムから系切り替えの通知があった場合に待機系に系切り替えの通知を行う系切り替え部（系切替部１８０）、待機系でプロセスの内部情報の初期化を指示する内部データ初期化部（初期化実行部１１１）を有する。
【０１４５】
常用系のプロセス処理部が入力データを入力として処理を行うとき、待機系のプロセス処理部も同様に同じ入力データで処理を行う。ただし、常用系のプロセス処理部は通常の場合と同様にプロセス処理部の内部データを保持したまま実行するのに対して、待機系のプロセス処理部は内部データを初期化してから入力データを入力して処理を実行する点が異なる。
常用系のプロセス処理部が障害を起こして再起動指示部がスナップショットでシステムの状態を復旧しながら再起動を行うが再起動失敗を繰り返し、スナップショット蓄積部に蓄積されている最後のスナップショットを使用して再起動を行う。このとき、次のチェックポイントまでプロセス処理部のプロセスが実行された場合は、プロセス再起動が成功したと判断し、通常の動作を行う。もし次のチェックポイントまでに再起動に失敗した場合、障害検出部は、常用系での処理続行を断念し、系切り替え部に系の切り替えを通知するとともに自身を待機系にする。系の切り替え通知を受け取った系切り替え部は、現在、待機系の系切り替え受信部に対し、常用系に移行するよう通知を行う。待機系の系切り替え受信部は受け取った系切り替え通知をプロセス処理部に通知し、常用系として必要な処理部を起動して常用系に移行する。
【０１４６】
以上のように、待機系であらかじめプロセス処理部の内部情報を初期化した状態で処理を実行させておくことにより、常用系で全てのスナップショットを使ってプロセスの再起動を試して失敗した場合でも、系を切り替えることによりプロセス自体の内部情報を初期化することと同等の処理を迅速に行わせることができるため、システム全体の再起動時間を短縮でき、効率よくシステムを稼動することができる。
【０１４７】
実施の形態６．
実施の形態６について、図２２〜図２７を用いて説明する。
この実施の形態におけるプロセス実行装置１００の構成は、実施の形態５と同様なので、説明を省略し、異なる点のみを説明する。
【０１４８】
図２２は、この実施の形態における実行処理Ｓ５５０の流れの一例を示すフローチャート図である。
実行処理Ｓ５５０は、パラメータ取得工程Ｓ５６１、待機工程Ｓ５６２、ステップ実行工程Ｓ５６３、チェックポイント判定工程Ｓ５６４、結果通知工程Ｓ５６５を有する。
【０１４９】
パラメータ取得工程Ｓ５６１において、パラメータ入力部１１３は、ＣＰＵ９１１を用いて、系切替部１８０からパラメータを取得する。
待機工程Ｓ５６２において、処理実行部１１４は、ＣＰＵ９１１を用いて、プロセスの次のステップを実行してよいか否かを判定する。
次のステップへ進んでよいと判定した場合、ステップ実行工程Ｓ５６３へ進む。
次のステップに進まずに待つべきと判定した場合、待機工程Ｓ５６２を繰り返す。
【０１５０】
次のステップを実行してはいけない場合には、いくつかの場合がある。例えば、処理実行部１１４の処理がチェックポイントに到達し、内部状態記憶部１１２が記憶しているデータを、状態取得部１２２が読み出している場合、読み出し中に次のステップの実行を開始すると、内部状態記憶部１１２が記憶しているデータが変わってしまうので、読み出しが終わるまで待つ必要がある。
また、障害が発生して、状態巻戻部１３３が内部状態記憶部１１２にデータを書き込んでいる場合も、書き込みが終わるまで待つ必要がある。
【０１５１】
更に、この実施の形態におけるプロセス実行装置１００において、待機系の実行部１１０は、常用系の実行部１１０が次のチェックポイントに到達するまで、その一つ前のチェックポイントで待つ。待機系の実行部１１０は、系切替部１８０からの通知に基づいて、常用系の実行部１１０が次のチェックポイントに到達したか否かを判定する。
常用系の実行部１１０が問題なく次のチェックポイントまで到達するのを待ってから、待機系の実行部１１０がそのあとを追ってプロセスを実行するので、原則として、待機系の実行部１１０では、障害が発生しない。
【０１５２】
ステップ実行工程Ｓ５６３において、処理実行部１１４は、ＣＰＵ９１１を用いて、プロセスの次のステップを実行する。
チェックポイント判定工程Ｓ５６４において、処理実行部１１４は、ＣＰＵ９１１を用いて、プロセスの実行がチェックポイントに到達したか否かを判定する。
まだチェックポイントに到達していないと判定した場合、ステップ実行工程Ｓ５６３に戻り、次のステップを実行する。
最後のチェックポイントに到達したと判定した場合、結果通知工程Ｓ５６５へ進む。
それ以外のチェックポイントに到達したと判定した場合、待機工程Ｓ５６２に戻り、内部状態記憶部１１２が記憶したデータを状態取得部１２２が読み出し終わるのを待つ。
【０１５３】
結果通知工程Ｓ５６５において、結果出力部１１５は、ＣＰＵ９１１を用いて、処理実行部１１４がプロセスを実行した結果を、系切替部１８０に対して通知する。
その後、パラメータ取得工程Ｓ５６１に戻り、次のプロセスに備える。
【０１５４】
ステップ実行工程Ｓ５６３あるいはチェックポイント判定工程Ｓ５６４を実行中に、実行部１１０に障害が発生したと障害判定部１３１が判定した場合、状態巻戻部１３３は、実行部１１０を強制的に待機工程Ｓ５６２に戻す。実行部１１０は、状態巻戻部１３３が内部状態記憶部１１２にデータを書き込み終わるのを待つ。
また、いずれかの工程を実行中に、実行部１１０に障害が発生したと障害判定部１３１が判定し、実行部１１０におけるプロセスの実行を中断させると状態巻戻部１３３が判定した場合、状態巻戻部１３３は、実行部１１０を強制的にパラメータ取得工程Ｓ５６１に戻す。
【０１５５】
図２３は、この実施の形態における系切替処理Ｓ５９０の流れの一例を示すフローチャート図である。
系切替処理Ｓ５９０は、パラメータ入力工程Ｓ５９１、常用系状況判定工程Ｓ５９２、切替工程Ｓ５９３、結果出力工程Ｓ５９５を有する。
【０１５６】
常用系状況判定工程Ｓ５９２において、系切替部１８０は、ＣＰＵ９１１を用いて、常用系である実行部１１０におけるプロセスの実行状況を判定する。
プロセスの実行が終了したと判定した場合、結果出力工程Ｓ５９５へ進む。プロセス実行装置１００は、そのプロセスの実行を正常に終了する。
プロセスの実行が中断したと判定した場合、パラメータ入力工程Ｓ５９１に戻る。プロセス実行装置１００は、そのプロセスの実行を断念し、次のプロセスに備える。
プロセスの実行が終了も中断もしていない場合のうち、プロセスの実行に障害が発生していると判定した場合は、切替工程Ｓ５９３へ進む。
プロセスの実行が終了も中断もしていない場合のうち、プロセスが正常に実行されていると判定した場合、常用系状況判定工程Ｓ５９２を繰り返す。
【０１５７】
切替工程Ｓ５９３において、系切替部１８０は、ＣＰＵ９１１を用いて、常用系である実行部１１０を待機系に切り替え、待機系である実行部１１０を常用系に切り替える。
その後、常用系状況判定工程Ｓ５９２に戻る。
【０１５８】
図２４は、この実施の形態における障害処理Ｓ５１０の流れの一例を示すフローチャート図である。
障害処理Ｓ５１０は、実施の形態１で説明した工程に加えて、系判定工程Ｓ５４１、待機判定工程Ｓ５４２を有する。
【０１５９】
系判定工程Ｓ５４１において、障害処理部１２０は、ＣＰＵ９１１を用いて、系切替部１８０からの通知に基づいて、対応する実行部１１０が常用系であるか待機系であるかを判定する。
常用系であると判定した場合、障害判定工程Ｓ５１１へ進む。
待機系であると判定した場合、待機判定工程Ｓ５４２へ進む。
【０１６０】
待機判定工程Ｓ５４２において、障害処理部１２０は、ＣＰＵ９１１を用いて、対応する（待機系である）実行部１１０にプロセスの実行をさせてよいか否かを判定する。障害処理部１２０は、ＣＰＵ９１１を用いて、対応する実行部１１０に判定した結果を通知する。実行部１１０は、障害処理部１２０からの通知に基づいて、次のステップを実行するか待機するかを判定する。
対応する実行部１１０にプロセスの実行をさせてよいと判定した場合、チェックポイント判定工程Ｓ５１２へ進む。
対応する実行部１１０を待機させると判定した場合、系判定工程Ｓ５４１に戻る。
【０１６１】
状態判定工程Ｓ５２４において、巻戻時点判定部１３２は、ＣＰＵ９１１を用いて、２つの実行部１１０それぞれについて、それより前にそのチェックポイントに到達したことがあるか否かを判定する。例えば、巻戻時点判定部１３２は、２つの障害処理部１２０それぞれの状態記憶部１２３が、そのチェックポイントに対応するデータをそれまで記憶していたか否かを判定することにより、それより前にそのチェックポイントに到達したことがあるか否かを判定する。
２つの実行部１１０のいずれもが、それより前にそのチェックポイントに到達したことがなく、今回が初めてであると判定した場合、巻戻時点前進工程Ｓ５２５へ進む。
２つの実行部１１０のいずれかが、それより前にそのチェックポイントに到達したことがあると判定して場合、系判定工程Ｓ５４１に戻る。
【０１６２】
巻戻時点前進工程Ｓ５２５において、巻戻時点判定部１３２は、ＣＰＵ９１１を用いて、チェックポイント判定工程Ｓ５１２でチェックポイント判定部１２１が到達したと判定したチェックポイントの１つ前のチェックポイントを、巻戻時点と判定する。到達したチェックポイントが最初のチェックポイントである場合、それよりも１つ前のチェックポイントが存在しないので、巻戻時点判定部１３２は、巻戻時点となるチェックポイントがまだ存在しないと判定する。巻戻時点判定部１３２は、磁気ディスク装置９２０を用いて、判定した結果を記憶する。
また、もう一つの障害処理部１２０の巻戻時点判定部１３２は、ＣＰＵ９１１を用いて、更にその１つ前のチェックポイントを巻戻時点と判定する。到達したチェックポイントが最初あるいは２番目のチェックポイントである場合、それよりも２つ前のチェックポイントが存在しないので、もう一つの巻戻時点判定部１３２は、巻戻時点となるチェックポイントがまだ存在しないと判定する。もう一つの巻戻時点判定部１３２は、磁気ディスク装置９２０を用いて、判定した結果を記憶する。
その後、系判定工程Ｓ５４１に戻る。
【０１６３】
巻戻時点後退工程Ｓ５３４において、巻戻時点判定部１３２は、ＣＰＵ９１１を用いて、状態記憶部１２３が記憶したデータのうち、状態巻戻工程Ｓ５３３で状態巻戻部１３３が内部状態記憶部１１２に書き込んだデータに対応するチェックポイントよりも２つ前のチェックポイントを、巻戻時点であると判定する。状態巻戻工程Ｓ５３３で状態巻戻部１３３が内部状態記憶部１１２に書き込んだデータに対応するチェックポイントが最初もしくは２番目のチェックポイントである場合、それよりも２つ前のチェックポイントが存在しないので、巻戻時点判定部１３２は、巻戻時点となるチェックポイントが存在しないと判定する。巻戻時点判定部１３２は、磁気ディスク装置９２０を用いて、判定した結果を記憶する。
その後、系判定工程Ｓ５４１に戻る。
【０１６４】
図２５は、この実施の形態におけるプロセス実行装置１００の動作の一例を示す模式図である。
【０１６５】
プロセス開始時６０１において、常用系の実行部１１０では、パラメータ入力部１１３がパラメータを入力し、処理実行部１１４がプロセスの処理を開始する。待機系の実行部１１０では、常用系の処理実行部１１４の処理が第一チェックポイント６０２に到達するまで、処理実行部１１４がプロセスの処理を開始せずに待機する。
【０１６６】
常用系の処理実行部１１４の処理が第一チェックポイント６０２まで到達すると、待機系の処理実行部１１４がプロセスの処理を開始する。この時点において、常用系の状態記憶部１２３の記憶内容６４１ａは、第一チェックポイント６０２における状態６５２ａだけである。また、待機系の状態記憶部１２３の記憶内容６４１ｂは、空である。いずれかの処理実行部１１４の処理が第一チェックポイント６０２まで到達したのはこれが初めてであるが、第一チェックポイント６０２は最初のチェックポイントなので、常用系の巻戻時点判定部１３２は、巻戻時点がまだ存在しないと判定する。また、待機系の巻戻時点判定部１３２も、巻戻時点がまだ存在しないと判定する。
【０１６７】
待機系の処理実行部１１４の処理が第一チェックポイント６０２まで到達した時点で、常用系の処理実行部１１４は第二チェックポイント６０３にまだ到達していなかったとすると、待機系の処理実行部１１４は、常用系の処理実行部１１４の処理が第二チェックポイント６０３に到達するまで待機する。待機系の状態記憶部１２３の記憶内容６４２ｂは、第一チェックポイント６０２における状態６５２ｂだけである。第一チェックポイント６０２には、常用系の処理実行部１１４が既に到達しているので、待機系の巻戻時点判定部１３２は、巻戻時点を進めず、巻戻時点がまだ存在しないと判定したままの状態を保つ。
【０１６８】
常用系の処理実行部１１４の処理が第二チェックポイント６０３まで到達すると、待機系の処理実行部１１４がプロセスの処理を再開する。この時点において、常用系の状態記憶部１２３の記憶内容６４２ａは、第一チェックポイント６０２における状態６５２ａと第二チェックポイント６０３における状態６５３ａとの２つになる。いずれかの処理実行部１１４の処理が第二チェックポイント６０３まで到達したは初めてなので、常用系の巻戻時点判定部１３２は、一つ前の第一チェックポイント６０２を巻戻時点と判定する。また、待機系の巻戻時点判定部１３２は、第一チェックポイント６０２より更に一つ前のチェックポイントが存在しないので、巻戻時点がまだ存在しないと判定する。
【０１６９】
待機系の処理実行部１１４の処理が第二チェックポイント６０３に到達するよりも早く、常用系の処理実行部１１４の処理が第三チェックポイント６０４まで到達したとする。常用系の状態記憶部１２３の記憶内容６４３ａは、第一チェックポイント６０２における状態６５２ａと、第二チェックポイント６０３における状態６５３ａと、第三チェックポイント６０４における状態６５４ａとの３つになる。いずれかの処理実行部１１４の処理が第三チェックポイント６０４まで到達したのは初めてなので、常用系の巻戻時点判定部１３２は、一つ前の第二チェックポイント６０３を巻戻時点と判定する。また、待機系の巻戻時点判定部１３２は、第二チェックポイント６０３より更に一つ前の第一チェックポイント６０２を、巻戻時点と判定する。
【０１７０】
待機系の処理実行部１１４の処理が第二チェックポイント６０３まで到達した時点で、常用系の処理実行部１１４の処理は第三チェックポイント６０４を通過しているので、待機系の処理実行部１１４は待機せず、そのままプロセスの処理を続行する。待機系の状態記憶部１２３の記憶内容６４３ｂは、第一チェックポイント６０２における状態６５２ｂと第二チェックポイント６０３における状態６５３ｂとの２つになる。第一チェックポイント６０２には、常用系の処理実行部１１４が既に到達しているので、待機系の巻戻時点判定部１３２は、巻戻時点を進めず、第一チェックポイント６０２を巻戻時点と判定したままの状態を保つ。
【０１７１】
常用系の処理実行部１１４の処理が第四チェックポイント６０５に到達する前に、障害が発生したと仮定する。系切替部１８０は、常用系と待機系とを切り替える。
旧待機系（新常用系）の処理実行部１１４は、プロセスの処理をそのまま続行する。
旧常用系（新待機系）の状態巻戻部１３３は、巻戻時点判定部１３２の判定結果に基づいて、実行部１１０の状態を第二チェックポイント６０３における状態６５３ａに戻す。旧常用系（新待機系）の処理実行部１１４は、第二チェックポイント６０３から処理を再開する。
【０１７２】
図２６は、この実施の形態におけるプロセス実行装置１００の動作の一例を示す模式図である。
【０１７３】
新待機系（旧常用系）の処理実行部１１４が第二チェックポイント６０３から処理を再開した時点において、巻戻時点判定部１３２は、第二チェックポイント６０３より２つ前のチェックポイントが存在しないので、巻戻時点が存在しないと判定する。
【０１７４】
新常用系（旧待機系）の処理実行部１１４の処理が第三チェックポイント６０４まで到達すると、新常用系の状態記憶部１２３の記憶内容６４４ｂは、第一チェックポイント６０２における状態６５２ｂと、第二チェックポイント６０３における状態６５３ｂと、第三チェックポイント６０４における状態６５４ｂとの３つになる。第三チェックポイント６０４には、旧常用系（新待機系）の処理実行部１１４が既に到達しているので、新常用系（旧待機系）の巻戻時点判定部１３２は、巻戻時点を進めず、第一チェックポイント６０２を巻戻時点を判定したままの状態を保つ。
【０１７５】
新常用系（旧待機系）の処理実行部１１４の処理が第四チェックポイント６０５に到達する前に、再び障害が発生したと仮定する。系切替部１８０は、常用系と待機系とを切り替える。
新新常用系（新待機系・旧常用系）の処理実行部１１４は、プロセスの処理をそのまま続行する。
新新待機系（新常用系・旧待機系）の状態巻戻部１３３は、巻戻時点判定部１３２の判定結果に基づいて、実行部１１０の状態を第一チェックポイント６０２における状態６５２ｂに戻す。新新待機系（新常用系・旧待機系）の処理実行部１１４は、第一チェックポイント６０２から処理を再開する。
【０１７６】
図２７は、この実施の形態におけるプロセス実行装置１００の動作の一例を示す模式図である。
【０１７７】
新新待機系の処理実行部１１４が第一チェックポイント６０２から処理を再開した時点において、巻戻時点判定部１３２は、第一チェックポイント６０２より２つ前のチェックポイントが存在しないので、巻戻時点が存在しないと判定する。
この時点において、新新常用系の状態記憶部１２３の記憶内容６４５ａは、第一チェックポイント６０２における状態６５２ａと、第二チェックポイント６０３における状態６５３ａと、第三チェックポイント６０４における状態６５４ａとの３つである。また、新新待機系の状態記憶部１２３の記憶内容６４５ｂは、第一チェックポイント６０２における状態６５２ｂと、第二チェックポイント６０３における状態６５３ｂと、第三チェックポイント６０４における状態６５４ｂとの３つである。
【０１７８】
したがって、いずれかの処理実行部１１４の処理が第四チェックポイント６０５に到達するまで、巻戻時点判定部１３２は、巻戻時点を進めない。
もし仮に、その前に、新新常用系の処理実行部１１４に障害が発生したとすると、系切替部１８０が常用系と待機系とを切り替える。新新新待機系（新新常用系）の処理実行部１１４は、状態を戻すべきチェックポイントが存在しないので、そのプロセスの処理を中断する。
更に、新新新常用系（新新待機系）の処理実行部１１４にも障害が発生すると、系切替部１８０が常用系と待機系とを切り替える。新新新新待機系（新新新常用系・新新待機系）の処理実行部１１４は、状態を戻すべきチェックポイントが存在しないので、そのプロセスの処理を中断する。新新新新常用系（新新新待機系・新新常用系）の処理実行部１１４が既にそのプロセスの処理を中断しているので、系切替部１８０は、そのプロセスの続行を断念し、次のプロセスに備える。
【０１７９】
障害が発生せず、新新常用系の処理実行部１１４の処理が第四チェックポイント６０５まで到達したと仮定する。新新常用系の状態記憶部１２３の記憶内容６４６ａは、第一チェックポイント６０２における状態６５２ａと、第二チェックポイント６０３における状態６５３ａと、第三チェックポイント６０４における状態６５４ａと、第四チェックポイント６０５における状態６５５ａとの４つになる。いずれかの処理実行部１１４の処理が第四チェックポイント６０５まで到達したのは初めてなので、新新常用系の巻戻時点判定部１３２は、一つ前の第三チェックポイント６０４を巻戻時点と判定する。また、新新待機系の巻戻時点判定部１３２は、第三チェックポイント６０４の更に一つ前の第二チェックポイント６０３を巻戻時点と判定する。
【０１８０】
このように、障害発生に備え、常用系の実行部１１０のあとを追いかけて待機系の実行部１１０がプロセスの処理を実行するので、常用系の実行部１１０に障害が発生した場合、待機系を常用系に切り替えることにより、迅速に障害に対処することができる。
特に、障害が繰り返し発生し、２つ以上前のチェックポイントに戻って処理を再開する場合であっても、待機系の実行部１１０は、常に常用系の実行部１１０よりチェックポイント一つ後ろを追いかけているので、チェックポイント一つ分の遅延しか発生せず、処理のやり直しによる遅延を最小限に抑えることができる。
【０１８１】
この実施の形態におけるプロセス実行装置１００において、上記第二の実行部１１０は、上記処理装置を用いて、待機系として、上記状態記憶部１２３が上記第一の実行部１１０について状態を記憶した中間時点（チェックポイント）よりも前の中間時点で待機する。
上記状態巻戻部１３３は、上記処理装置を用いて、上記系切替部１８０が上記第一の実行部１１０を常用系から待機系に切り替えた場合に、上記状態記憶部１２３が上記第二の実行部１１０について状態を記憶した中間時点よりも前の中間時点の状態に、上記第一の実行部１１０の状態を戻す。
【０１８２】
この実施の形態におけるプロセス実行装置１００によれば、常用系の実行部１１０より前の中間時点で待機系の実行部１１０が待機するので、障害発生時に系切替部１８０が常用系と待機系とを切り替えることにより、障害に迅速に対処することができる。また、待機系に切り替えられた旧常用系の実行部１１０は、それよりも前の中間時点に戻ってプロセスの処理をやり直すので、常用系に切り替えられた旧待機系の実行部１１０にも障害が発生した場合、系切替部１８０が再び常用系と待機系とを切り替えることにより、障害に迅速に対処することができる。
【０１８３】
以上説明したシステム再起動装置を設けた二重系システム（プロセス実行装置１００）は、常用系が通常の処理を行っている間は、待機系は常に一つ前のチェックポイントで待機するようにし、障害発生時には待機系から常用系に切り替わった系が処理実行を行い、待機系に切り替わった系はさらに一つ前のチェックポイントまで戻って待機する系切り替え装置（系切替部１８０）を設ける。
【０１８４】
システム再起動装置は、常用系のプロセス処理を実行するプロセス処理部（実行部１１０）、常用系のチェックポイントにおいてメモリ内容のスナップショットを採取するチェックポイント処理部（状態取得部１２２）、常用系の採取したスナップショットを蓄積するスナップショット蓄積部（状態記憶部１２３）、常用系のプロセス処理中の障害発生を検出する障害検出部（障害判定部１３１）、常用系の障害発生時にプロセス処理部の再起動を指示する再起動指示部（巻戻時点判定部１３２）、常用系のスナップショット蓄積部のスナップショットデータをプロセス処理部に書き戻す状態復帰指示部（状態巻戻部１３３）、常用系の全てのスナップショットを使用して再起動を試みたが失敗した際に系の切り替えを通知する系切り替え通知部、待機系のチェックポイントにおいてメモリ内容のスナップショットを採取するチェックポイント処理部（状態取得部１２２）、待機系の採取したスナップショットを蓄積するスナップショット蓄積部（状態記憶部１２３）、系の切り替え通知を受信する系切り替え受信部、常用系のシステムから系切り替えの通知があった場合に待機系に系切り替えの通知を行う系切り替え部（系切替部１８０）、常用系より遅延させて待機系でプロセスを実行させる処理依頼遅延部を有する。
【０１８５】
常用系のプロセス処理部が入力データを入力として処理を行うとき、待機系のプロセス処理部も同様に同じ入力データで処理を行う。ただし、常用系のプロセス処理部は入力データが与えられた時点で直ちに処理を開始するのに対して、待機系のプロセス処理部は入力データが与えられたとき、最低限常用系が最初のチェックポイントを通過する程度のある一定の時間を遅延させてから処理を実行する点が異なる。
常用系のプロセス処理部および待機系のプロセス処理部は、それぞれチェックポイントを通過する際にスナップショットをそれぞれ常用系のスナップショット蓄積部及び待機系のスナップショット蓄積部に蓄積する。ここで、常用系のプロセス処理部が障害を起こし、障害検出部が障害を検出したとき、障害検出部は系切り替え通知部に系の切り替えを通知し、待機系に必要な処理部を起動して自身の系を待機系に移行する。系切り替え通知部は、系切り替え部を経由して系切り替え受信部に待機系を常用系に切り替えるように通知を行い、系切り替え受信部は、待機系のプロセス処理部に常用系として処理するよう通知を行う。このときプロセス処理部は、内部情報と入力データのチェックを行い、内部情報に問題があれば内部情報の初期化を行い、入力データに問題があれば入力データを破棄する。また、常用系から待機系に切り替えた系については、スナップショット２つ分を戻してプロセスの状態を復旧し、内部情報と入力データのチェックを前記と同様に行ってからプロセス処理を再開する。
【０１８６】
以上のように、待機系の処理をチェックポイント一つ分程度遅延させて実行させ、障害発生時には系を切り替えて入力データや内部情報のチェックをしながらプロセスを再起動させることにより、プロセスの再起動を迅速に行うことができ、さらに待機系ではさらにもう一つ分チェックポイントを戻した状態から再起動を行うため、繰り返し障害が発生した場合でも、再び系を切り替えることにより迅速にプロセスの再起動を行うことができる。
【符号の説明】
【０１８７】
１００  プロセス実行装置、１１０  実行部、１１１  初期化実行部、１１２  内部状態記憶部、１１３  パラメータ入力部、１１４  処理実行部、１１５  結果出力部、１２０  障害処理部、１２１  チェックポイント判定部、１２２  状態取得部、１２３  状態記憶部、１３１  障害判定部、１３２  巻戻時点判定部、１３３  状態巻戻部、１３４  状態削除部、１８０  系切替部、６０１  プロセス開始時、６０２  第一チェックポイント、６０３  第二チェックポイント、６０４  第三チェックポイント、６０５  第四チェックポイント、６０６  最終チェックポイント、６１１〜６４６  記憶内容、６５１〜６５５  状態、９０１  表示装置、９０２  キーボード、９０３  マウス、９０４  ＦＤＤ、９０５  ＣＤＤ、９０６  プリンタ装置、９０７  スキャナ装置、９１０  システムユニット、９１１  ＣＰＵ、９１２  バス、９１３  ＲＯＭ、９１４  ＲＡＭ、９１５  通信装置、９２０  磁気ディスク装置、９２１  ＯＳ、９２２  ウィンドウシステム、９２３  プログラム群、９２４  ファイル群、９３１  電話器、９３２  ファクシミリ機、９４０  インターネット、９４１  ゲートウェイ、９４２  ＬＡＮ。
【図１】
2011022959.tif 000003
【図２】
2011022959.tif 000004
【図３】
2011022959.tif 000005
【図４】
2011022959.tif 000006
【図５】
2011022959.tif 000007
【図６】
2011022959.tif 000008
【図７】
2011022959.tif 000009
【図８】
2011022959.tif 000010
【図９】
2011022959.tif 000011
【図１０】
2011022959.tif 000012
【図１１】
2011022959.tif 000013
【図１２】
2011022959.tif 000014
【図１３】
2011022959.tif 000015
【図１４】
2011022959.tif 000016
【図１５】
2011022959.tif 000017
【図１６】
2011022959.tif 000018
【図１７】
2011022959.tif 000019
【図１８】
2011022959.tif 000020
【図１９】
2011022959.tif 000021
【図２０】
2011022959.tif 000022
【図２１】
2011022959.tif 000023
【図２２】
2011022959.tif 000024
【図２３】
2011022959.tif 000025
【図２４】
2011022959.tif 000026
【図２５】
2011022959.tif 000027
【図２６】
2011022959.tif 000028
【図２７】
2011022959.tif 000029