(57)【要約】【課題】チェックポイントに戻ってリトライ動作を行う装置において、ウォッチドッグタイマによるシステムの初期化処理や、割り込み信号による割込み処理等によってデータが書き換えられることを防止し、正常なシステム回復を実現することができるコンピュータシステム等を提供する。【解決手段】チェックポイント時点までメインメモリのデータを回復させる処理の最初の処理として、ウォッチドッグタイマを初期化する（Ｓ１０５）。又は、チェックポイント時点までメインメモリのデータを回復させる処理の最初の処理として、割込コントローラを割り込み禁止状態に設定し、チェックポイント時点までメインメモリのデータ及びＣＰＵのレジスタのデータを回復させた後に、割込コントローラの割り込み禁止状態を解除する。【選択図】図３
2009169515.tif 000002
【特許請求の範囲】
【請求項１】
ＣＰＵと、
前記ＣＰＵのデータバスに接続されたシステム回復装置と、
前記システム回復装置を介して前記ＣＰＵと接続されたメインメモリと、
を備えたコンピュータシステムであって、
前記システム回復装置は、
エラー発生時に、前記メインメモリ及び前記ＣＰＵ内の所定のデータを、予め指定したエラー発生前の時点であるチェックポイントの値に戻すシステム回復のためのシステム回復手段と、
前記ＣＰＵにプログラムの実行を前記チェックポイントから再開させるためのリトライ手段と、
前記システム回復手段による前記システム回復中、前記システム回復手段によって戻された前記データの書き換えを防止するシステム回復保証手段と、
を備えることを特徴とするコンピュータシステム。
【請求項２】
前記システム回復保証手段は、システム回復後も、所定時間、前記システム回復手段によって戻されたデータの書き換えを防止すること、
を特徴とする請求項１に記載のコンピュータシステム。
【請求項３】
前記コンピュータシステムは、ウォッチドッグタイマを備え、
前記システム回復保証手段は、前記システム回復手段がシステム回復の動作を開始する前に、前記ウォッチドッグタイマのカウント値の初期化を行うこと、
を特徴とする請求項１又は請求項２に記載のコンピュータシステム。
【請求項４】
前記コンピュータシステムは、カウント値の読み出しと書込みが可能なウォッチドッグタイマを備え、
前記システム回復保証手段は、
チェックポイントとして指定された時点の前記ウォッチドッグタイマのカウント値を、前記ウォッチドッグタイマから読み出して保持しておき、
前記システム回復手段がシステム回復の動作を開始する前に、前記ウォッチドッグタイマのカウント値を初期化し、
前記リトライ手段の動作開始前に、保持しておいた前記カウント値を前記ウォッチドッグタイマに書き込むこと、
を特徴とする請求項１又は請求項２に記載のコンピュータシステム。
【請求項５】
前記システム回復装置は、前記ＣＰＵの命令バスにも接続されており、
前記システム回復保証手段は、前記ウォッチドッグタイマに対する操作を、少なくとも一の命令コードを前記命令バスに供給して前記ＣＰＵに実行させること、
を特徴とする請求項３又は請求項４に記載のコンピュータシステム。
【請求項６】
前記コンピュータシステムは、ＣＰＵに対する割り込みを行う割込コントローラを備え、
前記システム回復保証手段は、前記システム回復手段がシステム回復の動作を開始する前に、前記割込コントローラに対する割込み禁止の設定を行うこと、
を特徴とする請求項１又は請求項２に記載のコンピュータシステム。
【請求項７】
前記システム回復保証手段は、チェックポイントとして指定されたときの前記割込コントローラの設定情報を読み出して保持し、前記リトライ手段によるリトライ動作の開始前に、保持しておいた前記設定情報を前記割込コントローラに書き込むこと、
を特徴とする請求項６に記載のコンピュータシステム。
【請求項８】
前記システム回復装置は、前記ＣＰＵの命令バスにも接続されており、
前記システム回復保証手段は、前記割込コントローラに対する操作を、少なくとも一の命令コードを前記命令バスに供給して前記ＣＰＵに実行させること、
を特徴とする請求項６又は請求項７に記載のコンピュータシステム。
【請求項９】
前記システム回復装置は、前記ＣＰＵの命令バスにも接続されており、
前記システム回復手段は、前記システム回復中における前記メモリ上のデータの回復中に、前記ＣＰＵの命令バスへＮＯＰ命令を出力すること、
を特徴とする請求項１乃至請求項８のいずれかに記載のコンピュータシステム。
【請求項１０】
前記システム回復装置は、前記ＣＰＵの命令バスにも接続されており、
前記リトライ手段は、関数からの復帰命令を前記ＣＰＵの命令バスに出力することにより、前記ＣＰＵにプログラムの実行を前記チェックポイントから再開させること、
を特徴とする請求項１乃至請求項９のいずれかに記載のコンピュータシステム。
【請求項１１】
前記システム回復保証手段は、システム回復中であることを示す信号を外部へ出力すること、
を特徴とする請求項１乃至請求項１０のいずれかに記載のコンピュータシステム。
【請求項１２】
前記システム回復保証手段は、前記ＣＰＵが出力する割込応答信号が入力されるように構成されており、前記割込応答信号がアサートされている間、前記システム回復手段にシステム回復動作の開始を待機させること、
を特徴とする請求項１乃至請求項１１のいずれかに記載のコンピュータシステム。
【請求項１３】
前記システム回復保証手段は、前記ＣＰＵに入力されるウェイト信号が入力されるように構成されており、前記ウェイト信号がアサートされている間、前記システム回復手段にシステム回復動作の開始を待機させること、
を特徴とする請求項１乃至請求項１２のいずれかに記載のコンピュータシステム。
【請求項１４】
前記システム回復保証手段は、前記ＣＰＵからデータバスについてのバス権応答信号が入力されるように構成されており、前記バス権応答信号がアサートされている間、前記システム回復手段にシステム回復動作の開始を待機させること、
を特徴とする請求項１乃至請求項１３のいずれかに記載のコンピュータシステム。
【請求項１５】
請求項１乃至請求項１４のいずれかに記載のコンピュータシステムにおける前記システム回復装置の前記各手段を備えることを特徴とするシステム回復装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ソフトエラーの発生を検知した際に、チェックポイントまでシステムの状態をロールバックさせて処理をリトライさせることが可能なコンピュータシステム等に関する。
【背景技術】
【０００２】
従来、宇宙線や電磁ノイズによりデータの一部が反転するソフトエラーという現象が知られている。ソフトエラーによる障害を防止するため、航空・宇宙分野のコンピュータや、一部のビジネス用途のコンピュータでは、誤り訂正符号の利用やマイクロコンピュータの多重化などの、さまざまなシステム回復の技術が利用されている。自動車制御の分野でも、ブレーキ、ステアリング及びシフトなどの安全性に関わる制御装置の電子化が進んでおり、ソフトエラー対策も課題の一つと言われている。
【０００３】
従来のソフトエラー対策の方法は、大きく、空間冗長に基づく方法と、時間冗長に基づく方法とに分類できる。
空間冗長に基づく方法としては、ＥＣＣなど誤り訂正符号によりデータ化けを修正する方法や、パリティ符号など、誤り検出符号によりデータ化けを検出して訂正する方法、あるいは、システムの構成を多重化し、出力の多数決をとる方法が知られている。
【０００４】
しかしながら、誤り訂正符号や誤り検出符合を使った方法は、データの一部が反転した場合にしか対応できず、複数のデータがまとまって反転した場合などには対応できないという問題がある。また、システムの構成を多重化した場合、消費電力や製造コストが増加するという問題がある。
【０００５】
一方、時間冗長に基づく方法としては、ソフトエラーが一時的に発生する事象であることに着目し、処理を複数回行って比較し、正しい処理結果を得る方法が考案されている。
この方式では、システムの構成を多重化した場合と比べ、低コストで実現可能というメリットがある。しかし、全ての処理を複数回実行するために処理の実行時間が長くなり、リアルタイム性が必要とされる制御には適さない。
【０００６】
この問題に対しては、エラーが発生したときのみ、エラーが発生した部分の処理をチェックポイントまで戻って処理をリトライする装置が提案されている。
下記の特許文献１に記載された装置では、チェックポイントでＣＰＵの汎用レジスタ、プログラムカウンタ、及び、スタックポインタの値をメモリの特定の領域に格納するとともに、チェックポイント以降はＣＰＵがメモリに書込みを行う前に、書込み対象のアドレスのメモリからデータの読み出しを行い、読み出したデータを退避用メモリに格納する。
【０００７】
エラー発生時には、前記退避用メモリに格納されたデータ、及び、チェックポイント時点でメモリに記憶した、汎用レジスタ、プログラムカウンタ、及び、スタックポインタの値をメモリ及びＣＰＵに書き戻す。
【０００８】
ソフトエラーは一時的な現象であり、連続して発生する確率は非常に低いため、書き戻した時点から処理を再開することにより、システムを回復することができる。
【特許文献１】特開平９−８１４０５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
マイクロコンピュータでは通常、診断用のプログラムにより、エラー検出が行われる。しかしながら、マイクロコンピュータ内の、ソフトウエアから直接操作できないメモリ、例えばプログラムカウンタ、スタックポインタ、及び、リンクポインタなどでソフトエラーによるデータの反転が起こると、場合によっては診断用のプログラムが実行されず、エラー検出自体が行われない。
【００１０】
また、エラー検出が行われないだけではなく、マイクロコンピュータが暴走状態となり、正常な処理を実行できない場合もある。
このような場合を想定して、一般的なマイクロコンピュータにはウォッチドッグタイマが用意されている。このウォッチドッグタイマは、ＣＰＵの処理と並列にカウント動作を行うフリーランタイマである。
【００１１】
マイクロコンピュータが正常な動作を行っている場合、プログラムからウォッチドッグタイマのカウント値が定期的に初期化される。
一方、マイクロコンピュータが正常な動作を行っていない場合は、カウンタ値は初期化されないため、カウンタ値がオーバーフローする。このとき、ウォッチドッグタイマからＣＰＵに対して割込み信号又はリセット信号が出力され、これらの信号を受けたＣＰＵは正常動作に復帰するための初期化処理を行う。
【００１２】
ところで、前記のチェックポイントに戻って処理をリトライする装置において、ウォッチドッグタイマが存在する場合は、ウォッチドッグタイマの残りカウント値が少ないと、システムを回復させる途中又は回復直後に、ウォッチドッグタイマによるシステムの初期化処理が行われてしまい、正常にリトライ動作を行えないという場合が生じる。
【００１３】
また、ウォッチドッグタイマによる初期化の他に、ＣＰＵに対して割り込みがかけられることによりＣＰＵが割り込み処理を開始する場合も、正常なリトライ動作を妨げる要因となり得る。
【００１４】
本願発明は、このような問題にかんがみなされたものであり、チェックポイントに戻ってリトライ動作を行う装置において、ウォッチドッグタイマによるシステムの初期化処理や、割り込み信号による割込み処理等によってデータが書き換えられることを防止し、正常なシステム回復を実現することができるコンピュータシステム等を提供することを目的とする。
【課題を解決するための手段】
【００１５】
上記課題を解決するためになされた請求項１に記載のコンピュータシステムは、ＣＰＵと、ＣＰＵのデータバスに接続されたシステム回復装置と、システム回復装置を介してＣＰＵと接続されたメインメモリと、を備えたコンピュータシステムであって、システム回復装置は、システム回復手段と、リトライ手段と、システム回復保証手段と、を備える。システム回復手段は、エラー発生時に、メインメモリ及びＣＰＵ内の所定のデータ（汎用レジスタ、プログラムカウンタ、及び、スタックポインタ等の値）を、予め指定したエラー発生前の時点であるチェックポイントの値に戻すシステム回復のための手段である。また、リトライ手段は、ＣＰＵにプログラムの実行をチェックポイントから再開させるための手段である。また、システム回復保証手段は、システム回復手段によるシステム回復中、システム回復手段によって戻されたデータの書き換えを防止する手段である。
【００１６】
このようなコンピュータシステムによれば、システム回復中は、システム回復手段により戻されたメインメモリ及びＣＰＵ内の所定のデータについての書き換えが、システム回復保証手段によって防止されるため、システム回復後のリトライ動作を正常に行うことができる。
【００１７】
また、システム回復保証手段は、システム回復中だけではなくシステム回復後も、所定時間、システム回復手段によって戻されたデータの書き換えを防止するようになっていてもよい（請求項２）。なぜなら、システム回復中に外部環境の変化が進み、その影響により、リトライ後にＣＰＵがその変化に対応した動作を行う前に、システム回復手段によって戻された上述した所定のデータが書き換えられてしまうおそれがあるからである。なお、所定の時間としては、例えば、リトライ後にＣＰＵが上記変化に対応する動作を行える程度の時間が適している。
【００１８】
このようなコンピュータシステムによれば、より確実に、システム回復後のリトライ動作を正常に行うことができる。
なお、適用例の一つとしては、コンピュータシステムがウォッチドッグタイマを備えている場合が考えられる。なぜなら、システム回復中にウォッチドッグタイマが作動し、メインメモリ内及びＣＰＵ内のデータが初期化されてしまう可能性があるからである。このようなことを防止するため、コンピュータシステムがウォッチドッグタイマを備えている場合、システム回復手段がシステム回復の動作を開始する前に、システム回復保証手段がウォッチドッグタイマのカウント値の初期化を行うようになっているとよい（請求項３）。
【００１９】
このようになっていれば、システム回復中にウォッチドッグタイマが作動し、ＣＰＵ内のデータが初期化されてしまうことを防止できる。なお、ウォッチドッグタイマのカウント値が、カウント開始状態からＣＰＵを初期化させる状態になるまでの間にシステム回復を終えることが前提であることは言うまでもない。
【００２０】
また、コンピュータシステムが備えているウォッチドッグタイマが、カウント値を読み出したり書き込んだりすることができるものである場合には、ウォッチドッグタイマのカウント値についてもチェックポイントの状態と整合を取るようにしてシステム回復後のリトライ動作を行うようになっているとよい。すなわち、システム回復保証手段は、チェックポイントとして指定された時点のウォッチドッグタイマのカウント値を読み出して保持しておき、システム回復手段がシステム回復の動作を開始する前に、ウォッチドッグタイマのカウント値を初期化し、リトライ手段の動作開始前に、保持しておいたカウント値をウォッチドッグタイマに書き込むようになっているとよい（請求項４）。
【００２１】
このようになっていれば、ウォッチドッグタイマのカウント値についてもチェックポイント時点と整合が取れた状態でシステム回復後のリトライ動作が実行される。
ところで、上述した各コンピュータシステムにおいて、システム回復保証手段によるウォッチドッグタイマに対する操作は、システム回復保証手段自らが直接行うようになっていてもよいし、ＣＰＵに開始指令（例えば、割り込み信号）を出すことによってＣＰＵに行わせるようになっていてもよい。また、ＣＰＵに開始指令を出すことによって行わせる場合は、具体的な処理を、アプリケーション等のプログラムが格納されたメモリから出力される命令コードによりＣＰＵに行わせるようになっていてもよいが、システム回復装置がＣＰＵの命令バスにも接続されている場合には、システム回復保証手段は、ウォッチドッグタイマに対する操作を、少なくとも一の命令コードを命令バスに供給してＣＰＵに実行させるようになっていてもよい（請求項５）。なお、ここでいうウォッチドッグタイマに対する操作というのは、ウォッチドッグタイマのカウント値の初期化、ウォッチドッグタイマのカウント値の保持、又は、ウォッチドッグタイマに対してカウント値を書き込むことの少なくともいずれか一つを意味する。もちろん、全てであってもよい。
【００２２】
このようになっていれば、ウォッチドッグタイマに対する操作に関し、ＣＰＵに確実に実行させることができる。
また、ウォッチドッグタイマによってリトライ動作が妨げられる場合の他に、ＣＰＵに対して割り込みがかけられてＣＰＵが割り込み処理を開始することによっても、正常なリトライ動作が妨げられる場合がある。そこで、コンピュータシステムが、ＣＰＵに対して割り込みを行う割込コントローラを備える場合には、システム回復保証手段は、システム回復手段がシステム回復の動作を開始する前に、割込コントローラに対する割込み禁止の設定を行うようになっているとよい（請求項６）。
【００２３】
このようになっていれば、システム回復中に、ＣＰＵに対して割り込みがかけられ、ＣＰＵが割り込み処理を開始してＣＰＵ内の所定のデータを書き換えてしまうことを防止することができる。
【００２４】
なお、ＣＰＵが処理を再開する際（リトライ動作開始時）に、割込コントローラの状態がチェックポイントの状態に一致しているとよい。つまり、システム回復保証手段は、チェックポイントとして指定されたときの割込コントローラの設定情報を読み出して保持し、リトライ手段によるリトライ動作の開始前に、保持しておいた設定情報を割込コントローラに書き込むようになっているとよい（請求項７）。
【００２５】
このようになっていれば、リトライ動作開始時に、割込コントローラの状態がチェックポイントの状態に一致するため、割込コントローラの状態情報を参照するような処理のリトライを正常に行うことができる。
【００２６】
ところで、上述した各コンピュータシステムにおいて、システム回復保証手段による割込コントローラに対する操作は、システム回復保証手段自らが直接行うようになっていてもよいし、ＣＰＵに開始指令（例えば、割り込み信号）を出すことによってＣＰＵに行わせるようになっていてもよい。また、ＣＰＵに開始指令を出すことによって行わせる場合は、具体的な処理を、アプリケーション等のプログラムが格納されたメモリから出力される命令コードによりＣＰＵに行わせるようになっていてもよいが、システム回復装置が、ＣＰＵの命令バスにも接続されている場合には、システム回復保証手段は、割込コントローラに対する操作を、少なくとも一の命令コードを命令バスに供給してＣＰＵに実行させるようになっていてもよい（請求項８）。なお、ここでいう割込コントローラに対する操作というのは、割込コントローラ対する割り込み禁止の設定、割込コントローラの設定情報の保持、又は、割込コントローラに対して設定情報を書き込むことの少なくともいずれか一つを意味する。もちろん、全てであってもよい。
【００２７】
このようになっていれば、割込コントローラに対する操作に関し、ＣＰＵに確実に実行させることができる。
また、システム回復装置がＣＰＵの命令バスにも接続されている場合には、システム回復手段は、システム回復中におけるメモリ上のデータの回復中に、ＣＰＵの命令バスへＮＯＰ命令を出力するようになっているとよい（請求項９）。
【００２８】
このようになっていれば、メモリ上のデータを回復させている際に、ＣＰＵが動作して回復したデータを上書きしてしまうことを防止でき、結果としてリトライ動作を確実に実行させることができる。
【００２９】
また、システム回復装置がＣＰＵの命令バスにも接続されている場合には、リトライ手段は、関数からの復帰命令をＣＰＵの命令バスに出力することにより、ＣＰＵにプログラムの実行をチェックポイントから再開させるようになっているとよい（請求項１０）。
【００３０】
このようになっていれば、リトライ時にＣＰＵ内のパイプライン（命令バッファ）に残っている未実行の命令が実行されて回復したデータを上書きしてしまうことを防止でき、結果としてリトライ動作を確実に実行させることができる。
【００３１】
ところで、システム回復保証手段は、システム回復中であることを示す信号を外部へ出力するようになっているとよい（請求項１１）。ここでいう「外部」というのは、他のシステムや他の装置等を意味する。
【００３２】
このようになっていれば、システム回復を確実に行わせるための動作（例えば、システム回復中にデータ送信を中断するといった動作）を、他の装置等に行わせることが可能になる。また、例えば他の装置のオペレーティングシステムやデバッガなどと連携をとりながらシステム回復処理を行うことも可能になる。
【００３３】
ところで、既に割込処理が実行されているときに、システム回復動作が実行されてしまうケースも考えられる。そこで、ＣＰＵが出力する割込応答信号がシステム回復保証手段へ入力されるようにコンピュータシステムを構成し、システム回復保証手段は、割込応答信号がアサートされている間、システム回復手段にシステム回復動作の開始を待機させるようになっているとよい（請求項１２）。
【００３４】
このようになっていれば、割込処理が実行されている間はシステム回復手段によるシステム回復動作が開始されない。したがって、システム回復動作と割込処理とが重なることによって、システム回復動作に弊害が生じることを防止することができる。したがって、本発明のコンピュータシステムは、正常なリトライ動作が行うことができる。
【００３５】
また、ＣＰＵは、メモリアクセスの際などに、メモリコントローラ等からウェイト信号が入力されて待機状態に移行するケースがある（いわゆるウェイト状態）。したがって、ＣＰＵがウェイト状態に移行している場合には、システム回復動作を行うことができないことが考えられる。そこで、ＣＰＵに入力されるウェイト信号がシステム回復保証手段へ入力されるようにコンピュータシステムを構成し、システム回復保証手段は、ウェイト信号がアサートされている間、システム回復手段にシステム回復動作の開始を待機させるようになっているとよい（請求項１３）。
【００３６】
このようになっていれば、ＣＰＵがウェイト状態であることによって、システム回復動作の開始が失敗することを防止できる。
また、ＣＰＵに接続されたデータバスがＣＰＵ等によって占有されている場合に、システム回復手段がデータバスを介してメモリにアクセスすることができず、システム回復動作を行うことができないケースが考えられる。そこで、ＣＰＵからデータバスについてのバス権応答信号がシステム回復保証手段へ入力されるようにコンピュータシステムを構成し、システム回復保証手段は、バス権応答信号がアサートされている間、システム回復手段にシステム回復動作の開始を待機させるようになっているとよい（請求項１４）。
【００３７】
このようになっていれば、データバスが占有されていることによって、システム回復動作の開始が失敗することを防止することができる。
ところで、請求項１乃至請求項１４のいずれかに記載のコンピュータシステムにおけるシステム回復装置の各手段を備えるシステム回復装置を単体として構成してもよい（請求項１５）。このようなシステム回復装置を、ＣＰＵやメモリや他のシステム等と組み合わせることにより、上述した各コンピュータシステムが奏する効果と同様の効果を発揮させることができる。
【発明を実施するための最良の形態】
【００３８】
以下、本発明が適用された実施形態について図面を用いて説明する。なお、本発明の実施の形態は、下記の実施形態に何ら限定されることはなく、本発明の技術的範囲に属する限り種々の形態をとりうる。
【００３９】
［構成の説明］
図１は、実施形態のコンピュータシステム５の概略構成を示す説明図である。コンピュータシステム５は、システム回復装置１１と、ＲＯＭ２１と、ＣＰＵ２２と、メインメモリ２３と、ウォッチドッグタイマ２４と、割込コントローラ２５と、待避用メモリ２６とを備え、これらはバスや信号線によって接続されている。なお、このバスや信号線に関し、可読性を高めるために図１では一部省略されている。
【００４０】
（１）システム回復装置１１
システム回復装置１１は、システム回復保証手段１２と、システム回復手段１３と、リトライ手段１４と、制御回路１５とを備える。
【００４１】
システム回復保証手段１２は、システム回復手段１３によるシステム回復中に、システム回復手段１３によって戻されたＣＰＵ２２内のデータやメインメモリ２３内のデータが書き換えられることを防止する機能を実現するモジュールである。具体的な実現方法については後述する。
【００４２】
システム回復手段１３は、チェックポイント時点の状態のメインメモリ２３及びＣＰＵ２２内の所定のデータを待避用メモリ２６に待避させておき、コンピュータシステム５にソフトエラーがエラー発生した際、待避させておいたデータを元の位置に戻すシステム回復機能を実現するモジュールである。
【００４３】
なお、ＣＰＵ２２内の所定のデータというのは、ＣＰＵ２２の汎用レジスタ、プログラムカウンタ、及び、スタックポインタ等のＣＰＵ内の更新可能なデータ記憶部に記憶されたデータを意味する。また、メインメモリ２３内のデータを待避させる方法としては、チェックポイント時点以降、ＣＰＵ２２によりメインメモリ２３のデータが書き換えられるアドレス位置のデータを待避させる方法（方法Ａ）と、ＣＰＵ２２が使用しているメインメモリ２３上の領域全体のデータを待避させる方法（方法Ｂ）の二つの方法が考えられる。それぞれの方法の詳細については、後述する。
【００４４】
リトライ手段１４は、システム回復手段１３によってシステム回復が行われた後に、チェックポイントからプログラムの実行をＣＰＵ２２に再開させるための機能を実現するモジュールである。具体的には、サブルーチン復帰命令の戻り先を、チェックポイント直後に実行した命令が格納された位置にしておき、サブルーチン復帰命令によってプログラム実行再開を実現する。詳細については後述する。
【００４５】
制御回路１５は、システム回復保証手段１２、システム回復手段１３、及び、リトライ手段１４を制御するための回路である。
以上、システム回復装置１１が備える各手段を説明したが、システム回復保証手段１２、システム回復手段１３、リトライ手段１４、制御回路１５の各モジュールは、それぞれが周知のマイコン等から構成されて実現されてもよいし、一又は数個の高機能なマイコンが実行するプログラムによって各モジュールが実現されていてもよい。また、システム回復保証手段１２は、ＲＯＭ２１及びＣＰＵ２２の命令バスに接続され、システム回復手段１３及びリトライ手段１４は、ＣＰＵ２２の命令バス、ＣＰＵ２２のデータバス、メインメモリ２３、ウォッチドッグタイマ２４、割込コントローラ２５及び待避用メモリ２６に接続されている。また、制御回路１５は、図示しないエラー検知装置等から発せされるソフトエラー発生通知信号が入力可能であるとともに、ＣＰＵ２２が発する割り込み応答信号，バスのホールド信号，バス権応答信号が入力可能に構成されている。なお、ホールド信号とは、バスの使用権がＣＰＵ２２から他の外部回路へ移行したことを示す信号である。つまり、本実施形態のコンピュータシステム５では、バスが解放されたことを示す信号である。また、バス権応答信号とは、バスの使用権をＣＰＵ２２が保有していることを示す信号である。
【００４６】
（２）ＲＯＭ２１
ＲＯＭ２１は、不揮発性の記憶メモリであり、プログラム等が記憶されている。
（３）ＣＰＵ２２
ＣＰＵ２２は、各種の演算ユニット、汎用レジスタ、プログラムカウンタ、スタックポインタ等を備え、各種の演算処理を実行する。なお、以下においては、汎用レジスタ、プログラムカウンタ、スタックポインタ等をまとめてレジスタと称す。
【００４７】
（４）メインメモリ２３
メインメモリ２３は、ＤＲＡＭ等の書き換え可能なメモリから構成され、各種のデータやプログラム等の一時的な記憶領域として利用される。
【００４８】
（５）ウォッチドッグタイマ２４
ウォッチドッグタイマ２４は、ＣＰＵの処理と並列にカウント動作を行うフリーランタイマであり、ＣＰＵ２２等からカウント値が初期化されずに所定のカウント値に達すると、ＣＰＵ２２に対して割込信号又はリセット信号を出力し、ＣＰＵ２２を初期化させる。
【００４９】
（６）割込コントローラ２５
割込コントローラ２５は、周知の割込コントローラであり、所定の割込要因が発生すると、ＣＰＵ２２に対して割込信号を出力する。なお、割込コントローラ２５は、コントロールレジスタやステータスレジスタ等を有し、これらの値を外部から読み出したり書き込んだりすることができるように構成されている。
【００５０】
（７）待避用メモリ２６
待避用メモリ２６は、ＤＲＡＭ等の書き換え可能なメモリから構成され、システム回復のために必要なデータを記憶するための記憶領域として利用される。
【００５１】
［動作状態の説明］
次に、システム回復装置１１が取り得る各動作状態及びそれらの動作状態間の遷移について、各実施形態に分けて説明する。
【００５２】
［第一実施形態］
図２は、第一実施形態のシステム回復装置１１が取り得る各動作状の遷移について説明するための遷移図である。なお、第一実施形態におけるシステム回復装置１１は、メインメモリ２３内のデータを待避させる方法として、上述した方法Ａ（ＣＰＵ２２によりメインメモリ２３のデータが書き換えられるアドレス位置のデータのみを待避させる方法）を用いる。
【００５３】
（１）初期状態
この状態は、図１に示すコンピュータシステム５全体のリセットが行われた直後の状態である。その後、システム回復装置１１に対してリセット信号がアサートされることにより、システム回復装置１１は、アイドル状態に遷移する。
【００５４】
（２）アイドル状態
この状態は、チェックポイント時点までコンピュータシステム５を回復するのに必要なデータの収集や、システム回復動作が行われていない状態である。ＣＰＵ２２で実行されているプログラムからチェックポイントの作成が指示されると、レジスタ中のデータのチェックポイント作成状態に遷移する。なお、チェックポイントの作成の指示は、例えば、システム回復装置１１の制御回路１５のコントロールレジスタへの書き込みによって行われたり、特定のアドレスに割り付けられたチェックポイント作成用関数がＣＰＵ２２において呼び出されて実行され、命令バスにチェックポイント作成用のプログラムのコードが配置されているＲＯＭのアドレスが出力されたことをシステム回復装置１１が検出したことをもって行われたりするようになっているとよい。
【００５５】
また、アイドル状態において、回復不能と判断されるエラー、例えばシステム回復装置１１自体のエラーや、ソフトエラーが一定回数以上検出された場合などには、初期状態へ遷移する。
【００５６】
（３）レジスタ中のデータのチェックポイント作成状態
この状態は、チェックポイント時点におけるＣＰＵ２２内のレジスタのデータをシステム回復装置１１が待避用メモリ２６に退避させる動作を実行している状態である。具体的な待避動作としては、システム回復手段１３がＣＰＵ２２に対してレジスタ−メモリ間データ転送命令をＣＰＵ２２の命令バスに出力することにより、ＣＰＵ２２内の各データを待避用メモリ２６に待避させる。なお、システム回復手段１３が上記転送命令を出力する替わりに、ＲＯＭ２１等から読み出されてＣＰＵ２２で実行されるソフトウェア（チェックポイント作成用関数）が実行されることにより実現されるようになっていてもよい。
【００５７】
必要なデータの待避が全て行われると、メモリ上のデータのチェックポイント作成状態へ遷移する。なお、必要なデータの退避が終了したか否かは、システム回復装置１１の制御回路１５内のコントロールレジスタへの書込みがあったかどうか、予め決められた特定のレジスタのデータが退避されたかどうか、退避順序があらかじめ決められている場合は、Ｎ個目のデータの取り込みが行われたかどうか、又は、各レジスタが退避されるメモリ領域があらかじめ決められている場合は、特定のメモリ領域に対する書込みが行われたかどうか、を検出することにより行われるようになっているとよい。
【００５８】
なお、以前のチェックポイントのデータが待避用メモリ２６に記憶されている場合は、古いデータが上書きされる。
レジスタ中のデータのチェックポイント作成状態において、回復不能と判断されるエラー、例えばシステム回復装置１１自体のエラーや、ソフトエラーが一定回数以上検出された場合などには、初期状態へ遷移する。
【００５９】
（４）メモリ上のデータのチェックポイント作成状態
この状態は、チェックポイント時点のメインメモリ２３上のデータをシステム回復装置１１（具体的にはシステム回復手段１３）が待避用メモリ２６に退避させる動作を実行している状態である。待避は、チェックポイント時点以降、ＣＰＵ２２によりメインメモリ２３のデータが書き換えられるアドレス位置のデータを待避させる方法（方法Ａ）によって行われる。つまり、方法Ａは、チェックポイント時点以降に書き換えられるメインメモリ２３内のデータを、その書き換えられる都度、待避用メモリ２６に転送させることによって、チェックポイント時点の状態のデータ待避が行われる方法である。
【００６０】
この方法Ａは、メインメモリ２３上のデータをＣＰＵ２２が書き換えることを、システム回復手段１３がＣＰＵ２２のアドレス信号及び書込み信号をモニタすることによって検知する。検知すると、システム回復手段１３がＣＰＵ２２対してウェイト信号を出力し、ＣＰＵ２２が停止している間に、メインメモリ２３の書込み先にあるデータを待避用メモリ２６に退避させる。待避が完了すると、ＣＰＵ２２に対するウェイト信号を解除する。ウェイト信号が解除されると、システム回復手段１３は、ＣＰＵ２２がメインメモリ２３に書き込もうとしていたデータをＣＰＵ２２に代わって書き込む。その後、再び、ＣＰＵ２２によるメインメモリ２３上のデータの書き換えをモニタする。
【００６１】
なお、この方法Ａを採用する場合、待避用メモリ２６に退避するデータは、ＣＰＵ２２の書込み先アドレスと、書き込み先にあったデータを組として扱い、配列リストに順番に追加していく方法が適当である。
【００６２】
また、以前のチェックポイントのデータが待避用メモリ２６に記憶されている場合は、古いデータが上書きされる。
メモリ上のデータのチェックポイント作成状態において、回復不能と判断されるエラー、例えばシステム回復装置１１自体のエラーや、ソフトエラーが一定回数以上検出された場合などには、初期状態へ遷移する。また、メモリ上のデータのチェックポイント作成状態において、ソフトエラーが発生したことを示すエラー通知がシステム回復装置１１に通知された場合は、後述するメモリ回復状態に遷移する。また、メモリ上のデータのチェックポイント作成状態が予め定められた時間続いた場合は、レジスタ中のデータのチェックポイント作成状態へ移行する。
【００６３】
（５）メモリ回復状態
この状態は、コンピュータシステム５においてソフトエラーが発生したことを示すエラー通知がシステム回復装置１１に通知されたことにより、システム回復装置１１が、チェックポイント時点までメインメモリ２３の状態を回復させる動作を実行中の状態である。
【００６４】
以下、システム回復装置１１がメモリ回復状態において実行する処理について、図３のフローチャートを用いて説明する。なお、この処理は、制御回路１５が各手段を制御して実行する。
【００６５】
まず、システム回復保証手段１２が、ウォッチドッグタイマ２４の初期化用命令コードを図示しない内部のメモリ領域から読み出し、ＣＰＵ２２の命令バスに出力する（Ｓ１０５）。これにより、ＣＰＵ２２が、ウォッチドッグタイマ２４のカウンタを初期化する。なお、命令コードとしては、例えば、ウォッチドッグタイマのコントロールレジスタのリセットビットに”１”を書き込むデータ転送命令が挙げられる。また、システム回復保証手段１２は、ＣＰＵ２２においてウォッチドッグタイマ初期化用の命令コードが実行されるまで、又は、メモリ回復状態から後述するレジスタ回復状態へ遷移するまでの間に、ＣＰＵ２２による新たなデータ書き換え（書き戻したデータの上書き）を防止するため、ウォッチドッグタイマ初期化用の命令コードの前後にＮＯＰ命令を付加するようになっている。
【００６６】
続いて、システム回復保証手段１２は、バス権リクエスト信号をＣＰＵ２２に対して送り、ＣＰＵ２２からバスの利用権を奪い、ＣＰＵ２２によるメインメモリ２３に対するメモリアクセスを停止させる（Ｓ１１０）。
【００６７】
続いて、システム回復手段１３は、待避用メモリ２６に待避させておいたメインメモリ２３のデータを全てメインメモリ２３に書き戻したか否かを判定する（Ｓ１１５）。この判定は、待避用メモリ２６に記憶されている配列リストの最終アクセス位置に基づいて判定する。この判定の結果、全ての待避データをメインメモリ２３に書き戻したと判定した場合には（Ｓ１１５：Ｙｅｓ）、メモリ回復状態における処理（本処理）を終えてレジスタ回復状態へ遷移する。一方、全ての待避データをメインメモリ２３に書き戻していないと判定した場合には（Ｓ１１５：Ｎｏ）、Ｓ１２０へ処理を移行する。
【００６８】
Ｓ１２０では、システム回復手段１３が、まだ書き戻していないデータを待避用メモリ２６から一つ読み出し、対応するメインメモリ２３のアドレス番地に書き込む。なお、書き戻しは、システム回復手段１３が、待避用メモリ２６に記憶されている配列リストの末尾から順にたどり未処理のデータの組を一つ選択して読み出し、書込み先アドレスで示されるメインメモリ２３の位置にデータを書き込むことによって行われる。また、Ｓ１２０では、同時に、システム回復保証手段１２が、ＣＰＵ２２の命令バスにＮＯＰ命令の命令コードを出力する。その後、上述したＳ１１０へ処理を戻す。
【００６９】
以上の処理を終えることにより、メインメモリ２３の内容がチェックポイント時点の状態に戻る。なお、メモリ回復状態において上記処理を実行している際に、ソフトエラーが発生したことを示すエラー通知がシステム回復装置１１に通知された場合は、上記処理を最初から実行する。
【００７０】
（６）レジスタ回復状態
この状態は、システム回復装置１１が、チェックポイント時点までメインメモリ２３の状態を回復させる動作を終了した後に移行する状態であり、システム回復装置１１がチェックポイント時点までＣＰＵ２２のレジスタのデータを回復させる動作を実行中の状態である。
【００７１】
以下、システム回復装置１１がレジスタ回復状態において実行する処理について、図４のフローチャートを用いて説明する。なお、この処理は、制御回路１５が各手段を制御して実行する。
【００７２】
まず、システム回復保証手段１２が、ウォッチドッグタイマ２４の初期化用命令コードを図示しない内部のメモリ領域から読み出し、ＣＰＵ２２の命令バスに出力する（Ｓ１５５）。これにより、ＣＰＵ２２が、ウォッチドッグタイマ２４のカウンタを初期化する。なお、一つ前の状態であるメモリ回復状態においてウォッチドッグタイマ２４が初期化された後、レジスタ回復状態に遷移してレジスタ回復動作が終了するまでの時間が、ウォッチドッグタイマ２４のカウント値が０からＣＰＵ２２に対してリセット信号を出力するようになるまでの時間に比較して十分に短い場合には、本ステップ（Ｓ１５５）を省いてもよい。
【００７３】
続いて、システム回復手段１３は、待避用メモリ２６に待避させておいたＣＰＵ２２のレジスタのデータを全てＣＰＵ２２に転送したか否かを判定する（Ｓ１６０）。この判定は、待避用メモリ２６に記憶されているレジスタの待避データの最終アクセス位置に基づいて判定する。この判定の結果、全てのレジスタの待避データをＣＰＵ２２に書き戻したと判定した場合には（Ｓ１６０：Ｙｅｓ）、Ｓ１７０へ処理を移行する。一方、全てのレジスタの待避データをＣＰＵ２２に書き戻していないと判定した場合には（Ｓ１６０：Ｎｏ）、Ｓ１６５へ処理を移行する。
【００７４】
Ｓ１６５では、システム回復手段１３が、まだ書き戻していない待避用メモリ２６中のレジスタのデータをＣＰＵ２２のレジスタに転送するメモリ−レジスタ間データ転送命令をＣＰＵ２２の命令バスに出力する。これにより、ＣＰＵ２２が、待避用メモリ２６に記憶されている未選択のレジスタのデータを一つ選択して読み出し、対応するレジスタにデータを書き込む。その後、上述したＳ１６０へ処理を戻す。
【００７５】
一方、Ｓ１７０では、リトライ手段１４が、チェックポイント時点からの処理のリトライをＣＰＵ２２に実行させる。具体的には、リトライ手段１４が、関数からの復帰命令（サブルーチンから呼び出しもとのメインルーチンに戻る際に実行される命令）をＣＰＵ２２の命令バスに出力することにより行う。つまり、チェックポイント作成時には、関数への分岐命令やジャンプ命令が実行され、それにより、リンクポインタにチェックポイントが作られた後の次の命令のアドレスが格納される。そして、復帰命令が実行されると、リンクポインタの値をプログラムカウンタに設定する動作が行われるので、リンクポインタを含むレジスタのデータが回復されていれば、復帰命令が実行されることにより、チェックポイントが作られた後の命令から処理が再開される（図５の説明記載参照）。したがって、関数からの復帰命令をＣＰＵ２２に実行させることにより処理のリトライを実現できる。
【００７６】
以上の処理を終えることにより、ＣＰＵ２２のレジスタの内容がチェックポイント時点の状態に戻り、ＣＰＵ２２が処理のリトライを開始する。なお、ＣＰＵ２２がチェックポイント時点から処理のリトライを開始すると、システム回復装置１１は、メモリ上のデータのチェックポイント作成状態へ遷移する。
【００７７】
（７）第一実施形態の効果
第一実施形態のシステム回復装置１１によれば、システム回復中は、システム回復手段１３により戻されたメインメモリ２３及びＣＰＵ２２のレジスタのデータについての書き換えが、システム回復保証手段１２によって防止されるため、システム回復後のリトライ動作を正常に行うことができる。
【００７８】
具体的には、システム回復手段１３がシステム回復のための動作を開始する前に、システム回復保証手段１２がウォッチドッグタイマ２４のカウンタの初期化を行うようになっている（Ｓ１０５，Ｓ１５５参照）。このため、システム回復中にウォッチドッグタイマ２４が作動し、ＣＰＵ２２のレジスタのデータが初期化されてしまうことを防止できる。
【００７９】
また、システム回復保証手段１２は、ウォッチドッグタイマ２４に対する操作を、ＣＰＵ２２の命令バスに命令コードを供給してＣＰＵ２２に実行させるようになっている（Ｓ１０５，Ｓ１５５参照）。このため、ウォッチドッグタイマ２４に対する操作に関し、ＣＰＵ２２に確実に実行させることができる。
【００８０】
また、システム回復手段１３は、システム回復中におけるメインメモリ２３上のデータの回復中に、ＣＰＵ２２の命令バスへＮＯＰ命令を出力するようになっている（Ｓ１０５参照）。このため、メインメモリ２３上のデータを回復させている際に、ＣＰＵ２２が動作して回復したデータを上書きしてしまうことを防止でき、結果としてリトライ動作を確実に実行させることができる。
【００８１】
また、リトライ手段１４は、関数からの復帰命令をＣＰＵ２２の命令バスに出力することにより、ＣＰＵ２２にプログラムの実行をチェックポイントから再開させるようになっている（Ｓ１７０参照）。このため、リトライ時にパイプライン（命令バッファ）に残っている未実行の命令が実行されて回復したデータを上書きしてしまうことを防止でき、結果としてリトライ動作を確実に実行させることができる。
【００８２】
［第二実施形態］
次に第二実施形態について説明する。図６は、第二実施形態のシステム回復装置１１が取り得る各動作状の遷移について説明するための遷移図である。なお、第二実施形態におけるシステム回復装置１１は、メインメモリ２３内のデータを待避させる方法として、上述した方法Ｂ（メインメモリ２３上の領域全体のデータを待避させる方法）を用いる。以下、第一実施形態の場合との相違点を中心に説明する。
【００８３】
（１）初期状態
第一実施形態と同様である。
（２）アイドル状態
第一実施形態と異なる点は、アイドル状態において、ソフトエラーが発生したことを示すエラー通知がシステム回復装置１１に通知された場合、後述するメモリ回復状態に遷移する点である。
【００８４】
（３）レジスタ中のデータのチェックポイント作成状態
第一実施形態と同様である。
（４）メモリ上のデータのチェックポイント作成状態
第一実施形態と異なる点は、メモリ上のデータの待避方法である。第一実施形態では、チェックポイント時点以降、ＣＰＵ２２によりメインメモリ２３のデータが書き換えられるアドレス位置のデータを待避させる方法（方法Ａ）によって待避が行われた。つまり、チェックポイント時点以降に書き換えられるメインメモリ２３内のデータを、その書き換えられる都度、待避用メモリ２６に転送させることによって、チェックポイント時点の状態のデータ待避が行われた。
【００８５】
それに対し、第二実施形態では、チェックポイント時点におけるメインメモリ２３上の全データを待避させる（方法Ｂ）。この待避は、ＣＰＵ２２がメモリへのロード命令（メモリ−レジスタ間データ転送命令）を実行することによって実現するようになっていてもよいし、ＤＭＡコントローラが存在する場合には、ＣＰＵ２２がそのＤＭＡコントローラを制御することにより実現するようになっていてもよい。また、第二実施形態では、第一実施形態の場合と異なり、書き込み先アドレスとデータとを組にした配列リストとして待避用メモリ２６に待避させる必要はなく、アドレス順にデータのみを待避用メモリ２６に待避させれば足りる。
【００８６】
なお、上記動作を行うＣＰＵ２２への命令は、ＣＰＵ２２で実行されるソフトウエア（チェックポイント作成用関数）に含まれることによって行われるようになっていてもよいし、システム回復装置１１がＣＰＵ２２に対して命令を供給することにより実現するようになっていてもよい。
【００８７】
メモリ上のデータのチェックポイント作成状態において、回復不能と判断されるエラー、例えばシステム回復装置１１自体のエラーや、ソフトエラーが一定回数以上検出された場合などには、初期状態へ遷移する。また、メモリ上のデータのチェックポイント作成状態において、メインメモリ２３上の全データの待避を完了した場合は、アイドル状態へ遷移する。
【００８８】
（５）メモリ回復状態
メモリ回復状態は、上述したメモリ上のデータのチェックポイント作成状態における処理に対応して、メモリの回復方法が第一実施形態の場合と異なる。第一実施形態では、書き戻しの際、システム回復装置１１が、待避用メモリ２６に記憶されている配列リストの末尾から順にたどり未処理のデータの組を一つ選択して読み出し、書込み先アドレスで示されるメインメモリ２３の位置にデータを書き込むことによって行うようになっていたが（図３のＳ１２０）、第二実施形態では、待避用メモリ２６に記憶されているデータを順に読み出し、先に書き込んだメインメモリ２３のアドレス位置の次の位置にデータを書き込むように動作する。
【００８９】
（６）レジスタ回復状態
第一実施形態では、ＣＰＵ２２のレジスタの回復がなされ、ＣＰＵ２２がチェックポイント時点から処理をリトライすると、システム回復装置１１はメモリ上のデータのチェックポイント作成状態へ遷移したが、第二実施形態では、システム回復装置１１は、アイドル状態へ遷移する。
【００９０】
（７）第二実施形態の効果
第二実施形態のシステム回復装置１１によっても第一実施形態と同様の効果を奏する。また、メインメモリ２３内のデータを待避させる方法として、方法Ｂ（メインメモリ２３上の領域全体のデータを待避させる方法）を用いるため、ＣＰＵ２２が未書き換えのメインメモリ２３のデータについてもチェックポイント時点まで戻るため、よりリトライの成功確率が高い。
【００９１】
［第三実施形態］
次に第三実施形態について説明する。第三実施形態におけるシステム回復装置１１は、メモリ回復状態におけるウォッチドッグタイマ２４の初期化に先立ち、ウォッチドッグタイマ２４の設定データ（コントロールレジスタ、ステータスレジスタ、カウンタ等のデータ）を待避用メモリ２６に待避させておき、メモリ回復が行われた後に、待避させておいた設定データをウォッチドッグタイマ２４に書き戻す点で、第一実施形態のシステム回復装置１１と異なる。以下、第一実施形態の場合との相違点を中心に説明する。
【００９２】
（１）初期状態
第一実施形態と同様である。
（２）アイドル状態
第一実施形態と同様である。
【００９３】
（３）レジスタ中のデータのチェックポイント作成状態
この状態は、チェックポイント時点におけるＣＰＵ２２内のレジスタのデータをシステム回復装置１１が待避用メモリ２６に退避させる動作を実行している状態である。
【００９４】
以下、システム回復装置１１がレジスタ中のデータのチェックポイント作成状態において実行する処理について、図７のフローチャートを用いて説明する。なお、この処理は、制御回路１５が各手段を制御して実行する。
【００９５】
まず、システム回復保証手段１２が、ウォッチドッグタイマ２４の設定データをＣＰＵ２２の汎用レジスタに転送させる命令コードを図示しない内部のメモリ領域から読み出し、ＣＰＵ２２の命令バスに出力する（Ｓ２０５）。すると、ＣＰＵ２２が上記命令を実行し、ウォッチドッグタイマ２４の設定データが汎用レジスタに格納される。なお、上記命令としては、例えば、転送元をウォッチドッグタイマ２４のコントロールレジスタ、ステータスレジスタ、カウンタ等にし、転送先をＣＰＵ２２の汎用レジスタとしたデータ転送命令が適当である。また、使用するＣＰＵ２２の汎用レジスタにもともと入っていたデータは、一旦メインメモリ２３に待避させておき、後述するＳ２１０が終了した後に書き戻すようになっているとよい。
【００９６】
続いて、システム回復保証手段１２は、ＣＰＵ２２の汎用レジスタに格納されたそれぞれの設定データを待避用メモリ２６の特定場所に格納する命令コードをＣＰＵ２２の命令バスに出力する（Ｓ２１０）。この結果、ウォッチドッグタイマ２４の設定データが待避用メモリ２６に待避される。なお、設定データがコントロールレジスタのデータ、ステータスレジスタのデータ、カウンタのデータ（カウンタ値）等、複数のデータから構成される場合は、Ｓ２０５，Ｓ２１０がその数だけ繰り返される。
【００９７】
続いて、システム回復手段１３は、ＣＰＵ２２のレジスタのデータを全て待避用メモリ２６に待避させたか否かを判定する（Ｓ２２０）。この判定は、例えば、待避用メモリ２６に待避させたデータ数に基づいて判定する。この判定の結果、ＣＰＵ２２のレジスタのデータを全て待避用メモリ２６に待避させたと判定した場合には（Ｓ２２０：Ｙｅｓ）、レジスタ中のデータのチェックポイント作成状態における処理（本処理）を終えてメモリ上のデータのチェックポイント作成状態に遷移する。一方、ＣＰＵ２２のレジスタのデータを全て待避用メモリ２６に待避させていないと判定した場合には（Ｓ２２０：Ｎｏ）、Ｓ２２５へ処理を移行する。
【００９８】
Ｓ２２５では、システム回復手段１３が、まだ待避用メモリ２６に待避させていないＣＰＵ２２のレジスタのデータを待避させる命令（レジスタ−メモリ間データ転送命令）をＣＰＵ２２の命令バスに出力する。これにより、ＣＰＵ２２が、レジスタのデータの一つを待避用メモリ２６に待避させる。その後、制御回路１５は、上述したＳ１６０へ処理を戻す。
【００９９】
なお、以前のチェックポイントのデータが待避用メモリ２６に記憶されている場合は、古いデータが上書きされる
レジスタ中のデータのチェックポイント作成状態において、回復不能と判断されるエラー、例えばシステム回復装置１１自体のエラーや、ソフトエラーが一定回数以上検出された場合などには、初期状態へ遷移する。
【０１００】
（４）メモリ上のデータのチェックポイント作成状態
第一実施形態と同様である。
（５）メモリ回復状態
第一実施形態と同様である。
【０１０１】
（６）レジスタ回復状態
この状態は、システム回復装置１１が、チェックポイント時点までメインメモリ２３の状態を回復させる動作を終了した後に移行する状態であり、システム回復装置１１がチェックポイント時点までＣＰＵ２２のレジスタのデータを回復させる動作を実行中の状態である。
【０１０２】
以下、システム回復装置１１がレジスタ回復状態において実行する処理について、図８のフローチャートを用いて説明する。なお、この処理は、制御回路１５が各手段を制御して実行する。
【０１０３】
まず、システム回復保証手段１２が、待避用メモリ２６からウォッチドッグタイマ２４の設定データを読み出させるＣＰＵ２２の命令コードをＣＰＵ２２の命令バスに出力する（Ｓ２５５）。この結果、ＣＰＵ２２は、待避用メモリ２６からウォッチドッグタイマ２４の設定データを読み出し、汎用レジスタの一つに格納する。
【０１０４】
続いて、システム回復保証手段１２は、ＣＰＵ２２の汎用レジスタの一つに格納されているウォッチドッグタイマ２４の設定データを、ウォッチドッグタイマ２４のカウンタ等にセットさせるＣＰＵ２２の命令コードをＣＰＵ２２の命令バスに出力する（Ｓ２６０）。この結果、ＣＰＵ２２は、Ｓ２５５で汎用レジスタの一つに格納したウォッチドッグタイマ２４の設定データを、ウォッチドッグタイマ２４のカウンタ等にセットする。なお、設定データがコントロールレジスタのデータ、ステータスレジスタのデータ、カウンタのデータ（カウンタ値）等、複数のデータから構成される場合は、Ｓ２５５，Ｓ２６０がその数だけ繰り返される。
【０１０５】
続いて、システム回復手段１３が、待避用メモリ２６に待避させておいたＣＰＵ２２のレジスタのデータを全てＣＰＵ２２に転送したか否かを判定する（Ｓ２６５）。この判定は、例えば、待避用メモリ２６に記憶されているレジスタの待避データの最終アクセス位置に基づいて判定する。この判定の結果、全てのレジスタの待避データをＣＰＵ２２に書き戻したと判定した場合には（Ｓ２６５：Ｙｅｓ）、レジスタ回復状態における処理（本処理）を終えてメモリ上のデータのチェックポイント作成状態に遷移する。一方、全てのレジスタの待避データをＣＰＵ２２に書き戻していないと判定した場合には（Ｓ２６５：Ｎｏ）、Ｓ２７０へ処理を移行する。
【０１０６】
Ｓ２７０では、システム回復手段１３が、まだ書き戻していない待避用メモリ２６中のデータをＣＰＵ２２のレジスタに転送するメモリ−レジスタ間データ転送命令をＣＰＵ２２の命令バスに出力する。これにより、ＣＰＵ２２が、待避用メモリ２６に記憶されている未選択のレジスタのデータを一つ選択して読み出し、対応するレジスタにデータを書き込む。その後、上述したＳ２６５へ処理を戻す。
【０１０７】
一方、Ｓ２７５では、リトライ手段１４が、チェックポイント時点からの処理のリトライをＣＰＵ２２に実行させる。具体的には、リトライ手段１４が、関数からの復帰命令（サブルーチンから呼び出しもとのメインルーチンに戻る際に実行される命令）をＣＰＵ２２の命令バスに出力することにより行う。つまり、チェックポイント作成時には、関数への分岐命令やジャンプ命令が実行され、それにより、リンクポインタにチェックポイントが作られた後の次の命令のアドレスが格納される。そして、復帰命令が実行されると、リンクポインタの値をプログラムカウンタに設定する動作が行われるので、リンクポインタを含むレジスタのデータが回復されていれば、復帰命令が実行されることにより、チェックポイントが作られた後の命令から処理が再開される（図５の説明記載参照）。したがって、関数からの復帰命令をＣＰＵ２２に実行させることにより処理のリトライを実現できる。
【０１０８】
以上の処理を終えることにより、ＣＰＵ２２のレジスタの内容がチェックポイント時点の状態に戻り、ＣＰＵ２２が処理のリトライを開始する。なお、ＣＰＵ２２がチェックポイント時点から処理のリトライを開始すると、システム回復装置１１は、メモリ上のデータのチェックポイント作成状態へ遷移する。
【０１０９】
（７）第三実施形態の効果
第三実施形態のシステム回復装置１１では、システム回復保証手段１２が、チェックポイントとして指定された時点のウォッチドッグタイマ２４のカウント値等の設定データを読み出して待避用メモリ２６に保持させておき（Ｓ２０５，Ｓ２１０）、リトライ手段１４が動作を開始する前に、待避用メモリ２６に保持させておいたカウント値等の設定データをウォッチドッグタイマ２４のカウンタ等に書き込むようになっている（Ｓ２５５，Ｓ２６０）。このため、ウォッチドッグタイマの設定データについてもチェックポイント時点と整合が取れた状態でシステム回復後のリトライ動作が実行される。したがって、よりリトライの成功確率が高い。
【０１１０】
［第四実施形態］
次に第四実施形態について説明する。第一実施形態では、メモリ回復状態における最初の処理として、ウォッチドッグタイマ２４を初期化したが（図３のＳ１０５参照）、第四実施形態では替わりに割込コントローラ２５を割り込み禁止状態に設定する。また、第四実施形態は、レジスタ回復状態においてレジスタの回復を終えた後に、割込コントローラ２５を割り込み禁止状態を解除する。以下、第一実施形態の場合との相違点を中心に説明する。
【０１１１】
（１）初期状態
第一実施形態と同様である。
（２）アイドル状態
第一実施形態と同様である。
【０１１２】
（３）レジスタ中のデータのチェックポイント作成状態
第一実施形態と同様である。
（４）メモリ上のデータのチェックポイント作成状態
第一実施形態と同様である。
【０１１３】
（５）メモリ回復状態
この状態は、コンピュータシステム５においてソフトエラーが発生したことを示すエラー通知がシステム回復装置１１に通知されたことにより、システム回復装置１１が、チェックポイント時点までメインメモリ２３の状態を回復させる動作を実行中の状態である。
【０１１４】
以下、システム回復装置１１がメモリ回復状態において実行する処理について、図９のフローチャートを用いて説明する。なお、この処理は、制御回路１５が各手段を制御して実行する。
【０１１５】
まず、システム回復保証手段１２が、割込コントローラ２５を割り込み禁止状態に設定する命令コードを図示しない内部のメモリ領域から読み出し、ＣＰＵ２２の命令バスに出力する（Ｓ３０５）。これにより、ＣＰＵ２２が、割込コントローラ２５を割り込み禁止状態に設定する。なお、命令コードとしては、例えば、割込コントローラ２５のコントロールレジスタの各割込禁止ビットに”１”を書き込むデータ転送命令が挙げられる。また、システム回復保証手段１２は、ＣＰＵ２２において割込コントローラ２５を割り込み禁止状態に設定する命令コードが実行されるまで、又は、メモリ回復状態から後述するレジスタ回復状態へ遷移するまでの間に、ＣＰＵ２２による新たなデータ書き換え（書き戻したデータの上書き）を防止するため、割込コントローラ２５を割り込み禁止状態に設定する命令コードの前後にＮＯＰ命令を付加するようにしてもよい。
【０１１６】
続いて、システム回復保証手段１２は、バス権リクエスト信号をＣＰＵ２２に対して送り、ＣＰＵ２２からバスの利用権を奪い、ＣＰＵ２２によるメインメモリ２３に対するメモリアクセスを停止させる（Ｓ３１０）。
【０１１７】
続いて、システム回復手段１３は、待避用メモリ２６に待避させておいたメインメモリ２３のデータを全てメインメモリ２３に書き戻したか否かを判定する（Ｓ３１５）。この判定は、待避用メモリ２６に記憶されている配列リストの最終アクセス位置に基づいて判定する。この判定の結果、全ての待避データをメインメモリ２３に書き戻したと判定した場合には（Ｓ３１５：Ｙｅｓ）、メモリ回復状態における処理（本処理）を終えてレジスタ回復状態へ遷移する。一方、全ての待避データをメインメモリ２３に書き戻していないと判定した場合には（Ｓ３１５：Ｎｏ）、Ｓ３２０へ処理を移行する。
【０１１８】
Ｓ３２０では、システム回復手段１３が、まだ書き戻していないデータを待避用メモリ２６から一つ読み出し、対応するメインメモリ２３のアドレス番地に書き込む。なお、書き戻しは、システム回復手段１３が、待避用メモリ２６に記憶されている配列リストの末尾から順にたどり未処理のデータの組を一つ選択して読み出し、書込み先アドレスで示されるメインメモリ２３の位置にデータを書き込むことによって行われる。また、Ｓ３２０では、同時に、システム回復保証手段１２が、ＣＰＵ２２の命令バスにＮＯＰ命令の命令コードを出力する。その後、上述したＳ３１０へ処理を戻す。
【０１１９】
以上の処理を終えることにより、メインメモリ２３の内容がチェックポイント時点の状態に戻る。なお、メモリ回復状態において上記処理を実行している際に、ソフトエラーが発生したことを示すエラー通知がシステム回復装置１１に通知された場合は、上記処理を最初から実行する。
【０１２０】
（６）レジスタ回復状態
この状態は、システム回復装置１１が、チェックポイント時点までメインメモリ２３の状態を回復させる動作を終了した後に移行する状態であり、システム回復装置１１がチェックポイント時点までＣＰＵ２２のレジスタのデータを回復させる動作を実行中の状態である。
【０１２１】
以下、システム回復装置１１がレジスタ回復状態において実行する処理について、図１０のフローチャートを用いて説明する。なお、この処理は、制御回路１５が各手段を制御して実行する。
【０１２２】
まず、システム回復手段１３が、待避用メモリ２６に待避させておいたＣＰＵ２２のレジスタのデータを全てＣＰＵ２２に転送したか否かを判定する（Ｓ３５５）。この判定は、待避用メモリ２６に記憶されているレジスタの待避データの最終アクセス位置に基づいて判定する。この判定の結果、全ての待避データをＣＰＵ２２に書き戻したと判定した場合には（Ｓ３５５：Ｙｅｓ）、Ｓ３６５に処理を移行する。一方、全ての待避データをＣＰＵ２２に書き戻していないと判定した場合には（Ｓ３５５：Ｎｏ）、Ｓ３６０へ処理を移行する。
【０１２３】
Ｓ３６０では、システム回復手段１３が、まだ書き戻していない待避用メモリ２６中のデータをＣＰＵ２２のレジスタに転送するメモリ−レジスタ間データ転送命令をＣＰＵ２２の命令バスに出力する。これにより、ＣＰＵ２２が、待避用メモリ２６に記憶されている未選択のレジスタのデータを一つ選択して読み出し、対応するレジスタにデータを書き込む。その後、上述したＳ３５５へ処理を戻す。
【０１２４】
一方、Ｓ３６５では、システム回復保証手段１２が、割込コントローラ２５を割り込み可能状態に設定する命令コードを図示しない内部のメモリ領域から読み出し、ＣＰＵ２２の命令バスに出力する。これにより、ＣＰＵ２２が、割込コントローラ２５を割り込み可能状態に設定する。なお、命令コードとしては、例えば、割込コントローラ２５のコントロールレジスタの各割込禁止ビットに”０”を書き込むデータ転送命令が挙げられる。
【０１２５】
続くＳ３７０では、リトライ手段１４が、チェックポイント時点からの処理のリトライをＣＰＵ２２に実行させる。具体的には、リトライ手段１４が、関数からの復帰命令（サブルーチンから呼び出しもとのメインルーチンに戻る際に実行される命令）をＣＰＵ２２の命令バスに出力することにより行う。つまり、チェックポイント作成時には、関数への分岐命令やジャンプ命令が実行され、それにより、リンクポインタにチェックポイントが作られた後の次の命令のアドレスが格納される。そして、復帰命令が実行されると、リンクポインタの値をプログラムカウンタに設定する動作が行われるので、リンクポインタを含むレジスタのデータが回復されていれば、復帰命令が実行されることにより、チェックポイントが作られた後の命令から処理が再開される（図５の説明記載参照）。したがって、関数からの復帰命令をＣＰＵ２２に実行させることにより処理のリトライを実現できる。
【０１２６】
以上の処理を終えることにより、ＣＰＵ２２のレジスタの内容がチェックポイント時点の状態に戻り、ＣＰＵ２２が処理のリトライを開始する。なお、ＣＰＵ２２がチェックポイント時点から処理のリトライを開始すると、システム回復装置１１は、メモリ上のデータのチェックポイント作成状態へ遷移する。
【０１２７】
（７）第四実施形態の効果
第四実施形態のシステム回復装置１１では、システム回復手段１３がシステム回復の動作を開始する前に、システム回復保証手段１２が、割込コントローラ２５に対する割込み禁止の設定を行うようになっている（Ｓ３０５）。このため、システム回復中に、ＣＰＵ２２に対して割り込みがかけられ、ＣＰＵ２２が割り込み処理を開始してレジスタのデータを書き換えてしまうことを防止することができる。
【０１２８】
また、システム回復保証手段１２は、割込コントローラ２５に対する操作を、ＣＰＵ２２の命令バスに命令コードを供給してＣＰＵ２２に実行させるようになっている（Ｓ３０５）。このため、割込コントローラ２５に対する操作に関し、ＣＰＵ２２に確実に実行させることができる。
【０１２９】
［第五実施形態］
次に第五実施形態について説明する。第五実施形態におけるシステム回復装置１１は、第四実施形態のシステム回復装置１１をさらに発展させたものである。具体的には、第五実施形態におけるシステム回復装置１１は、メモリ回復状態において、割込コントローラ２５を割り込み禁止状態に設定することに先立ち割込コントローラ２５の設定データ（割込禁止レジスタ、ステータスレジスタ等のデータ）を読み出して待避させ、レジスタ回復状態においてレジスタの回復を終えた後、割込コントローラ２５の割り込み禁止状態を解除する前に、待避させておいた設定データを割込コントローラ２５に設定する。以下、第四実施形態の場合との相違点を中心に詳細を説明する。
【０１３０】
（１）初期状態
第四実施形態と同様である。
（２）アイドル状態
第四実施形態と同様である。
【０１３１】
（３）レジスタ中のデータのチェックポイント作成状態
この状態は、チェックポイント時点におけるＣＰＵ２２内のレジスタのデータをシステム回復装置１１が待避用メモリ２６に退避させる動作を実行している状態である。
【０１３２】
以下、システム回復装置１１がレジスタ中のデータのチェックポイント作成状態において実行する処理について、図１１のフローチャートを用いて説明する。なお、この処理は、制御回路１５が各手段を制御して実行する。
【０１３３】
まず、システム回復保証手段１２が、割込コントローラ２５の設定データを読み出す命令コードを図示しない内部のメモリ領域から読み出し、ＣＰＵ２２の命令バスに出力する（Ｓ４０５）。これにより、ＣＰＵ２２が、割込コントローラ２５の設定データを読み出す。なお、使用するＣＰＵ２２の汎用レジスタにもともと入っていたデータは、一旦メインメモリ２３に待避させておき、後述するＳ４１０が終了した後に書き戻すようになっているとよい。
【０１３４】
続いて、システム回復保証手段１２が、割込コントローラ２５の設定データを待避用メモリ２６の特定場所に格納させる命令コードを図示しない内部のメモリ領域から読み出し、ＣＰＵ２２の命令バスに出力する（Ｓ４１０）。これにより、ＣＰＵ２２が、割込コントローラ２５の設定データを待避用メモリ２６の特定場所に格納させる。なお、設定データが複数のデータから構成される場合は（コントロールレジスタのデータやステータスレジスタのデータ等から構成される場合は）、Ｓ４０５，Ｓ４１０がその数だけ繰り返される。
【０１３５】
続いて、システム回復手段１３は、ＣＰＵ２２のレジスタのデータを全て待避用メモリ２６に待避させたか否かを判定する（Ｓ４１５）。この判定は、例えば、待避用メモリ２６に待避させたデータ数に基づいて判定する。この判定の結果、ＣＰＵ２２のレジスタのデータを全て待避用メモリ２６に待避させたと判定した場合には（Ｓ４１５：Ｙｅｓ）、レジスタ中のデータのチェックポイント作成状態における処理（本処理）を終えてメモリ上のデータのチェックポイント作成状態に遷移する。一方、ＣＰＵ２２のレジスタのデータを全て待避用メモリ２６に待避させていないと判定した場合には（Ｓ４１５：Ｎｏ）、Ｓ４２０へ処理を移行する。
【０１３６】
Ｓ４２０では、システム回復手段１３が、まだ待避用メモリ２６に待避させていないＣＰＵ２２のレジスタのデータを待避させる命令（レジスタ−メモリ間データ転送命令）をＣＰＵ２２の命令バスに出力する。これにより、ＣＰＵ２２が、レジスタのデータの一つを待避用メモリ２６に待避させる。その後、制御回路１５は、上述したＳ４１５へ処理を戻す。
【０１３７】
なお、以前のチェックポイントのデータが待避用メモリ２６に記憶されている場合は、古いデータが上書きされる
レジスタ中のデータのチェックポイント作成状態において、回復不能と判断されるエラー、例えばシステム回復装置１１自体のエラーや、ソフトエラーが一定回数以上検出された場合などには、初期状態へ遷移する。
【０１３８】
（４）メモリ上のデータのチェックポイント作成状態
第四実施形態と同様である。
（５）メモリ回復状態
第四実施形態と同様である。
【０１３９】
（６）レジスタ回復状態
この状態は、システム回復装置１１が、チェックポイント時点までメインメモリ２３の状態を回復させる動作を終了した後に移行する状態であり、システム回復装置１１がチェックポイント時点までＣＰＵ２２のレジスタのデータを回復させる動作を実行中の状態である。
【０１４０】
以下、システム回復装置１１がレジスタ回復状態において実行する処理について、図１２のフローチャートを用いて説明する。なお、この処理は、制御回路１５が各手段を制御して実行する。
【０１４１】
まず、システム回復手段１３が、待避用メモリ２６に待避させておいたＣＰＵ２２のレジスタのデータを全てＣＰＵ２２に転送したか否かを判定する（Ｓ４５５）。この判定は、待避用メモリ２６に記憶されているレジスタの待避データの最終アクセス位置に基づいて判定する。この判定の結果、全ての待避データをＣＰＵ２２に書き戻したと判定した場合には（Ｓ４５５：Ｙｅｓ）、Ｓ４６５へ処理を移行する。一方、全ての待避データをＣＰＵ２２に書き戻していないと判定した場合には（Ｓ４５５：Ｎｏ）、Ｓ４６０へ処理を移行する。
【０１４２】
Ｓ４６０では、システム回復手段１３が、まだ書き戻していない待避用メモリ２６中のデータをＣＰＵ２２のレジスタに転送するメモリ−レジスタ間データ転送命令をＣＰＵ２２の命令バスに出力する。これにより、ＣＰＵ２２が、待避用メモリ２６に記憶されている未選択のレジスタのデータを一つ選択して読み出し、対応するレジスタにデータを書き込む。その後、上述したＳ４５５へ処理を戻す。
【０１４３】
一方、Ｓ４６５では、待避用メモリ２６から割込コントローラ２５の設定データをＣＰＵ２２に読み出させるための命令コードを、システム回復保証手段１２が図示しない内部のメモリ領域から読み出し、ＣＰＵ２２の命令バスに出力する。これにより、ＣＰＵ２２が待避用メモリ２６から割込コントローラ２５の設定データを読み出す。
【０１４４】
続くＳ４７０では、待避用メモリ２６から読み出された割込コントローラ２５の設定データを割込コントローラ２５に設定させるための命令コードを、システム回復保証手段１２が図示しない内部のメモリ領域から読み出し、ＣＰＵ２２の命令バスに出力する。これにより、ＣＰＵ２２が割込コントローラ２５の設定データを待避用メモリ２６から読み出した設定データによって割込コントローラ２５に設定する。なお、設定データが複数のデータから構成される場合は、Ｓ４６５，Ｓ４７０がその数だけ繰り返される。
【０１４５】
続くＳ４７５では、割込コントローラ２５を割り込み可能状態に設定させるための命令コードを、システム回復保証手段１２が図示しない内部のメモリ領域から読み出し、ＣＰＵ２２の命令バスに出力する。これにより、ＣＰＵ２２が割込コントローラ２５を割り込み可能状態に設定する。なお、命令コードとしては、例えば、割込コントローラ２５のコントロールレジスタの各割込禁止ビットに”０”を書き込むデータ転送命令が挙げられる。
【０１４６】
続くＳ４８０では、リトライ手段１４が、チェックポイント時点からの処理のリトライをＣＰＵ２２に実行させる。具体的には、リトライ手段１４が、関数からの復帰命令（サブルーチンから呼び出しもとのメインルーチンに戻る際に実行される命令）をＣＰＵ２２の命令バスに出力することにより行う。つまり、チェックポイント作成時には、関数への分岐命令やジャンプ命令が実行され、それにより、リンクポインタにチェックポイントが作られた後の次の命令のアドレスが格納される。そして、復帰命令が実行されると、リンクポインタの値をプログラムカウンタに設定する動作が行われるので、リンクポインタを含むレジスタのデータが回復されていれば、復帰命令が実行されることにより、チェックポイントが作られた後の命令から処理が再開される（図５の説明記載参照）。したがって、関数からの復帰命令をＣＰＵ２２に実行させることにより処理のリトライを実現できる。
【０１４７】
以上の処理を終えることにより、ＣＰＵ２２のレジスタの内容がチェックポイント時点の状態に戻り、ＣＰＵ２２が処理のリトライを開始する。なお、ＣＰＵ２２がチェックポイント時点から処理のリトライを開始すると、システム回復装置１１は、メモリ上のデータのチェックポイント作成状態へ遷移する。
【０１４８】
（７）第五実施形態の効果
第五実施形態のシステム回復装置１１では、システム回復保証手段１２が、チェックポイントとして指定されたときの割込コントローラ２５の設定データを読み出して保持し（Ｓ４０５，Ｓ４１０）、リトライ手段１４によるリトライ動作の開始前に、保持しておいた設定データを割込コントローラ２５に書き込むようになっている（Ｓ４６５，Ｓ４７０）。このため、トライ動作開始時に、割込コントローラの状態がチェックポイントの状態に一致するため、割込コントローラ２５の状態情報を参照するような処理のリトライを正常に行うことができる。
【０１４９】
［第六実施形態］
次に第六実施形態について説明する。図１３は、第六実施形態のシステム回復装置１１が取り得る各動作状の遷移について説明するための遷移図である。なお、第六実施形態は第一実施形態をより発展させたものであり、第六実施形態におけるシステム回復装置１１は、待避用メモリ２６にデータ待避用の領域を２つ持つように構成されており、チェックポイント作成時にはそれらを交互に使用し、システムの回復時には最新のデータを使用してシステムを回復させるように構成されている。
【０１５０】
これにより、図１３のような動作状態の遷移を行う。すなわち、第一実施形態では、レジスタ中のデータのチェックポイント作成状態及びメモリ上のデータのチェックポイント作成状態において回復不能と判断されるエラー、例えばシステム回復装置１１自体のエラーや、ソフトエラーが一定回数以上検出された場合などには、初期状態へ遷移するようになっていたが（図２参照）、第六実施形態では、メモリ回復状態に遷移する。
【０１５１】
したがって、第六実施形態のコンピュータシステム５は、チェックポイント作成状態においても、先のチェックポイント作成状態からのリトライが可能であり、よりシステムの安全性が高い。
【０１５２】
［第七実施形態］
次に第七実施形態について説明する。図１４は、第七実施形態のシステム回復装置１１が取り得る各動作状の遷移について説明するための遷移図である。なお、第七実施形態は第二実施形態をより発展させたものであり、第七実施形態におけるシステム回復装置１１は、待避用メモリ２６にデータ待避用の領域を２つ持つように構成されており、チェックポイント作成時にはそれらを交互に使用し、システムの回復時には最新のデータを使用してシステムを回復させるように構成されている。
【０１５３】
これにより、図１４のような動作状態の遷移を行う。すなわち、第二実施形態では、レジスタ中のデータのチェックポイント作成状態及びメモリ上のデータのチェックポイント作成状態において回復不能と判断されるエラー、例えばシステム回復装置１１自体のエラーや、ソフトエラーが一定回数以上検出された場合などには、初期状態へ遷移するようになっていたが（図６参照）、第七実施形態では、メモリ回復状態に遷移する。
【０１５４】
したがって、第七実施形態のコンピュータシステム５は、チェックポイント作成状態においても、先のチェックポイント作成状態からのリトライが可能であり、よりシステムの安全性が高い。
【その他の実施形態】
【０１５５】
次に、その他の実施形態について説明する。
（１）システム回復保証手段１２は、システム回復中だけではなくシステム回復後に再度ＣＰＵ２２がウォッチドッグタイマ２４のカウンタを初期化するようにしてもよい。このようになっていれば、システム回復後（リトライ直後）にウォッチドッグタイマ２４が機能してＣＰＵ２２が初期化されてしまうことを防止できる。その結果、より確実に、コンピュータシステム５をリトライさせることができる。
【０１５６】
（２）システム回復装置１１は、システム回復中であることを示す信号をシステム回復装置１１の外部へ出力するようにするとよい。外部としては、他のコンピュータシステムや他の情報処理装置等を意味する。このようになっていれば、システム回復を確実に行わせるための動作（例えば、システム回復中にデータ送信を行わないといった動作）を、他のコンピュータシステムや他の情報処理装置に行わせることが可能になる。また、例えば他の情報処理装置のオペレーティングシステムやデバッガなどと連携をとりながらシステム回復処理を行うことも可能になる。
【０１５７】
（３）システム回復保証手段１２は、割込応答信号がアサートされている間、システム回復手段１３にシステム回復動作の開始を待機させるようになっているとよい。つまり、メモリ回復状態における図３等の処理を開始するに先立ち、制御回路１５が割込応答信号の状態を検知し、割込応答信号がアサートされている場合には、割込応答信号がネゲートされるのを待って、図３等の処理を開始するようになっているとよい。
【０１５８】
このようになっていれば、ＣＰＵ２２において割込処理が実行されている間はシステム回復手段１３によるシステム回復動作が開始されず、割込処理が終了した後にシステム回復動作が開始されるため、システム回復動作と割込処理とが重なることによって、システム回復動作に弊害が生じることを防止できる。この結果、コンピュータシステム５が、正常なリトライ動作を行うことができる。
【０１５９】
（４）システム回復保証手段１２は、ＣＰＵ２２に入力されるウェイト信号がアサートされている間、システム回復手段１３にシステム回復動作の開始を待機させるようになっているとよい。つまり、メモリ回復状態における図３等の処理を開始するに先立ち、制御回路１５がＣＰＵ２２に入力されるウェイト信号の状態を検知し、ウェイト信号がアサートされている場合には、ウェイト信号がネゲートされるのを待って、図３等の処理を開始するようになっているとよい。
【０１６０】
このようになっていれば、ＣＰＵ２２がウェイトしている間はシステム回復手段１３によるシステム回復動作が開始されず、ウェイトが解除された後にシステム回復動作が開始されるため、システム回復動作が正常に実行できないことを防止できる。この結果、コンピュータシステム５が、正常なリトライ動作を行うことができる。
【０１６１】
（５）システム回復保証手段１２は、バス権応答信号がアサートされている間、システム回復手段１３にシステム回復動作の開始を待機させるようになっているとよい。つまり、メモリ回復状態における図３等の処理を開始するに先立ち、制御回路１５がバス権応答信号の状態を検知し、バス権応答信号がアサートされている場合には、バス権応答信号がネゲートされるのを待って、図３等の処理を開始するようになっているとよい。
【０１６２】
このようになっていれば、データバスが占有されている間はシステム回復手段１３によるシステム回復動作が開始されず、データバスが空いた後にシステム回復動作が開始されるため、システム回復動作が正常に実行できないことを防止できる。この結果、コンピュータシステム５が、正常なリトライ動作を行うことができる。
【０１６３】
（６）例えば、上記第一実施形態と上記第四実施形態とを組み合わせるようにしてもよい。つまり、ウォッチドッグタイマ２４の初期化と割込コントローラ２５を割り込み禁止状態の設定との両方を実行するようにしてもよい。また、同様に、上述した各実施形態を矛盾しないように組み合わせると良い。
【図面の簡単な説明】
【０１６４】
【図１】コンピュータシステムの概略構成を示す説明図である。
【図２】第一実施形態のシステム回復装置が取り得る各動作状の遷移を説明するための遷移図である。
【図３】第一実施形態のメモリ回復状態において実行される処理を説明するためのフローチャートである。
【図４】第一実施形態のレジスタ回復状態において実行される処理を説明するためのフローチャートである。
【図５】チェックポイント時点から処理がリトライされることを説明するための説明記載である。
【図６】第二実施形態のシステム回復装置が取り得る各動作状の遷移を説明するための遷移図である。
【図７】第三実施形態のレジスタ中のデータのチェックポイント作成状態において実行される処理を説明するためのフローチャートである。
【図８】第三実施形態のレジスタ回復状態において実行される処理を説明するためのフローチャートである。
【図９】第四実施形態のメモリ回復状態において実行される処理を説明するためのフローチャートである。
【図１０】第四実施形態のレジスタ回復状態において実行される処理を説明するためのフローチャートである。
【図１１】第五実施形態のメモリ回復状態において実行される処理を説明するためのフローチャートである。
【図１２】第五実施形態のレジスタ回復状態において実行される処理を説明するためのフローチャートである。
【図１３】第六実施形態のシステム回復装置が取り得る各動作状の遷移を説明するための遷移図である。
【図１４】第七実施形態のシステム回復装置が取り得る各動作状の遷移を説明するための遷移図である。
【符号の説明】
【０１６５】
５…コンピュータシステム、１１…システム回復装置、１２…システム回復保証手段、１３…システム回復手段、１４…リトライ手段、１５…制御回路、２１…ＲＯＭ、２２…ＣＰＵ、２３…メインメモリ、２４…ウォッチドッグタイマ、２５…割込コントローラ、２６…待避用メモリ。
【図１】
2009169515.tif 000003
【図２】
2009169515.tif 000004
【図３】
2009169515.tif 000005
【図４】
2009169515.tif 000006
【図５】
2009169515.tif 000007
【図６】
2009169515.tif 000008
【図７】
2009169515.tif 000009
【図８】
2009169515.tif 000010
【図９】
2009169515.tif 000011
【図１０】
2009169515.tif 000012
【図１１】
2009169515.tif 000013
【図１２】
2009169515.tif 000014
【図１３】
2009169515.tif 000015
【図１４】
2009169515.tif 000016