(57)【要約】【課題】メモリを用いたデータ処理の安全性及び継続性を向上させる。【解決手段】予め設定されたアプリケーションによる処理を実行し、実行された処理結果を比較してデータの診断及び修復を行う診断修復装置において、所定のデータを３以上の複数のデータ領域に記憶する記憶手段と、前記所定のデータを前記３以上の複数のデータ領域に異なる形式で書き込み、前記アプリケーションの実行時に前記３以上の複数のデータ領域にそれぞれ書き込んだデータを読み込んで照合し、照合の結果が不一致であった場合に所定の修復を行い、修復後のデータを用いて前記アプリケーションを実行する処理プログラム実行手段と、前記アプリケーションを実行した結果と、少なくとも１つの他の診断修復装置で前記アプリケーションを実行した結果とを照合する照合処理手段とを有することにより、上記課題を解決する。【選択図】図１
2013109532.tif 000002
【特許請求の範囲】
【請求項１】
予め設定されたアプリケーションによる処理を実行し、実行された処理結果を比較してデータの診断及び修復を行う診断修復装置において、
所定のデータを３以上の複数のデータ領域に記憶する記憶手段と、
前記所定のデータを前記３以上の複数のデータ領域に異なる形式で書き込み、前記アプリケーションの実行時に前記３以上の複数のデータ領域にそれぞれ書き込んだデータを読み込んで照合し、照合の結果が不一致であった場合に所定の修復を行い、修復後のデータを用いて前記アプリケーションを実行する処理プログラム実行手段と、
前記アプリケーションを実行した結果と、少なくとも１つの他の診断修復装置で前記アプリケーションを実行した結果とを照合する照合処理手段とを有することを特徴とする診断修復装置。
【請求項２】
前記記憶手段は、
前記異なる形式として、入力されたデータ、前記データの反転データ、及び前記データと所定のパターンとの論理演算により得られるパターンデータのうち、少なくとも２つの形式を前記３以上の複数のデータ領域に書き込むことを特徴とする請求項１に記載の診断修復装置。
【請求項３】
前記処理プログラム実行手段は、
前記所定の修復処理として、読み出した３以上の複数のデータの多数決判定により正常データを決定し、決定された正常データを前記データ領域に書き込むことを特徴とする請求項１又は２に記載の診断修復装置。
【請求項４】
前記照合処理手段は、
前記アプリケーションを実行した結果と、前記アプリケーションを実行するタイミングに同期させて前記他の診断修復装置で前記アプリケーションを実行した結果とを照合し、照合が不一致であった場合に、前記アプリケーションを前回実行して得られた結果を用いて照合を行うことを特徴とする請求項１乃至３の何れか１項に記載の診断修復装置。
【請求項５】
前記プログラム実行手段は、所定のダイバース診断手法により設定された条件で前記アプリケーションを複数回実行し、
前記照合処理手段は、前記複数回実行された結果に基づいて照合を行うことを特徴とする請求項１乃至４の何れか１項に記載の診断修復装置。
【請求項６】
予め設定されたアプリケーションによる処理を実行し、実行された処理結果を比較してデータの診断及び修復を行う診断修復方法において、
所定のデータを記憶手段の３以上の複数のデータ領域に記憶する記憶ステップと、
前記所定のデータを前記３以上の複数のデータ領域に異なる形式で書き込み、前記アプリケーションの実行時に前記３以上の複数のデータ領域にそれぞれ書き込んだデータを読み込んで照合し、照合の結果が不一致であった場合に所定の修復を行い、修復後のデータを用いて前記アプリケーションを実行する処理プログラム実行ステップと、
前記アプリケーションを実行した結果と、少なくとも１つの他の診断修復方法で前記アプリケーションを実行した結果とを照合する照合処理ステップとを有することを特徴とする診断修復方法。
【請求項７】
前記記憶ステップは、
前記異なる形式として、入力されたデータ、前記データの反転データ、及び前記データと所定のパターンとの論理演算により得られるパターンデータのうち、少なくとも２つの形式を前記３以上の複数のデータ領域に書き込むことを特徴とする請求項６に記載の診断修復方法。
【請求項８】
前記処理プログラム実行ステップは、
前記所定の修復処理として、読み出した３以上の複数のデータの多数決判定により正常データを決定し、決定された正常データを前記データ領域に書き込むことを特徴とする請求項６又は７に記載の診断修復方法。
【請求項９】
前記照合処理ステップは、
前記アプリケーションを実行した結果と、前記アプリケーションを実行するタイミングに同期させて前記他の診断修復方法で前記アプリケーションを実行した結果とを照合し、照合が不一致であった場合に、前記アプリケーションを前回実行して得られた結果を用いて照合を行うことを特徴とする請求項６乃至８の何れか１項に記載の診断修復方法。
【請求項１０】
前記プログラム実行ステップは、所定のダイバース診断手法により設定された条件で前記アプリケーションを複数回実行し、
前記照合処理ステップは、前記複数回実行された結果に基づいて照合を行うことを特徴とする請求項６乃至９の何れか１項に記載の診断修復方法。
【請求項１１】
コンピュータを、
請求項１乃至５の何れか１項に記載の診断修復装置が有する各手段として機能させるための診断修復プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、診断修復装置、診断修復方法、及び診断修復プログラムに係り、特に、メモリを用いたデータ処理の安全性及び継続性を向上させるための診断修復装置、診断修復方法、及び診断修復プログラムに関する。
【背景技術】
【０００２】
従来では、例えば放射線等により生じるデータ処理後の一過性のソフトエラー現象を減少させるため、メモリ（以下、必要に応じて「メモリ装置」という）に格納された処理後のデータに対して診断を行う技術が存在する。ここで、ソフトエラーとは、例えばメモリである半導体チップの一部が壊れる等の不良（ハードエラー）ではなく、記憶しておいたデータの一部だけが反転してしまう等の不良を意味する。このようなソフトエラーは、例えばアルファ線や中性子線、陽子線、重イオン線等の粒子線が半導体チップに突入することで引き起こされ、また粒子線が半導体チップを通過する時間は極めて短く、ほんの一瞬である等の特徴が知られている。また、ソフトエラーは、プリント板の細密化により発生しやすくなる。
【０００３】
ここで、従来では、例えばリアルタイムに読み書きするメモリにおけるソフトエラーの修復に関して、メモリ素子をリセットしたり、リライト（再書き込み）したりすることによって正常な動作に戻すことができることが知られている（例えば、非特許文献１参照）。また、非特許文献１では、ソフトエラー対策として、誤り訂正符号（以下、「ＥＣＣ」（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ  Ｃｏｄｅ）という）の検出において、チェック情報である単一ビット或いは２ビット以上が変化したのを調べたり、単一ビットだけが変化したかを決定し、そのビットを補数値に反転させることによってデータを訂正したりすることが示されている。また、既存のインターリーブ方式とＥＣＣとの併用も示されている。
【０００４】
また、従来では、予め正データとその反転データを保存しておき、データアクセス時のパリティチェック等で異常を検出した場合に、その反転データを利用する手法が知られている（例えば、特許文献１参照）。また、従来では、予め正データとその反転データとチェックコードとを格納しておき、マスターキーを抜く時点等のデータを監視して修復する手法が知られている。更に、従来では、ソフトウェアエラーが生じた場合に、そのソフトウェアの実行時に使用したハードウェアであるＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）やメモリに対して診断を行う手法が知られている（例えば、非特許文献２参照）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開平５−２１６７７１号公報
【特許文献２】特開２００２−５５８８５号公報
【非特許文献】
【０００６】
【非特許文献１】ｄｅｓｉｇｎ  ｆｅａｔｕｒｅ、２００５年２月、「ｈｔｔｐ：／／ｅｄｎｊａｐａｎ．ｃａｎｃｏｍ−ｊ．ｃｏｍ／ｃｏｎｔｅｎｔ／ｉｓｓｕｅ／２００５／０２／ｆｅａｔｕｒｅ／ｆｅａｔｕｒｅ０２．ｈｔｍｌ」
【非特許文献２】ＩＥＣ６１５０８  Ｆｕｎｃｔｉｏｎａｌ  ｓａｆｅｔｙ  ｏｆ  ｅｌｅｃｔｒｉｃａｌ／ｅｌｅｃｔｒｏｎｉｃ／ｐｒｏｇｒａｍｍａｂｌｅ  ｅｌｅｃｔｒｏｎｉｃ  ｓａｆｅｔｙ−ｒｅｌａｔｅｄ  ｓｙｓｔｅｍｓ（ＩＥＣ６１５０８−７；Ａ．５．７（Ｄｏｕｂｌｅ  ＲＡＭ  ｗｉｔｈ  ｈａｒｄｗａｒｅ  ｏｒ  ｓｏｆｔｗａｒｅ  ｃｏｍｐａｒｉｓｏｎ  ａｎｄ  ｒｅａｄ／ｗｒｉｔｅ  ｔｅｓｔ））
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、リアルタイムに読み書きするメモリにおいて、非特許文献１に示されているような複雑なＥＣＣを搭載するには、ハードウェアコストが増大してしまう。また、非特許文献１に示されている手法では、インターリーブ等の特殊な方式と併用しないと２ビット以上のデータ修正ができない。また、ＥＣＣの検出では、エラーを発生したメモリへの再書き込みを行わないため、メモリのソフトエラー修復ができない。
【０００８】
また、従来のソフトエラーの診断は、特定のタイミング又は定期的に行われる。したがって、従来では、実際に所定の処理を行うためにメモリを読むタイミングと、診断するためにメモリを読むタイミングとが異なり、処理するデータを読み込んだタイミングでソフトエラーを検出・修復できない可能性がある。つまり、ソフトエラーの診断では、エラー検出修復タイミングと、処理に使用するためのメモリ読み込みタイミングとが同時であり、エラー検出・修復したデータを用いて処理をする必要がある。
【０００９】
また、特許文献１に示されているような方法は、メモリを取り出す時にエラーを検出するが、その検出方法が不明確である。例えば、特許文献１には、パリティチェックの記載があるが、パリティチェックではエラー検出能力が低い。また、特許文献１の手法では、エラーが発生したメモリへの再書き込みを行わないため、メモリのソフトエラーの修復ができない。
【００１０】
また、特許文献２に示されているような手法は、監視する時期が指定されておらず、所定の処理を行う場合に使用するタイミングでメモリのソフトエラーを検出することができず、エラーデータで処理する可能性があり、データの信頼性を担保できない。
【００１１】
また、特許文献２に示されている手法では、対象がＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ），ＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ−Ｏｎｌｙ  Ｍｅｍｏｒｙ）を想定しており、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）についてのソフトエラーの検知及び修復については示されておらず、またチェックコードが必要になる等の処理の負荷が増加するため、リアルタイムでのメモリ使用には適用できない。
【００１２】
更に、非特許文献２に記載されている「ＩＥＣ６１５０８−７  Ａ．５．７  Ｄｏｕｂｌｅ  ＲＡＭ」は、メモリアクセス時にソフトエラーを検出できるが、データの修復及びソフトエラーの修復ができない。したがって、上述したような手法では、メモリ等を用いたシステム上のデータ処理の安全性及び継続性を向上させることができなかった。
【００１３】
本発明は、上述した課題に鑑みてなされたものであって、メモリを用いたデータ処理の安全性及び継続性を向上させるための診断修復装置、診断修復方法、及び診断修復プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
上述した課題を解決するために、本発明は、以下の特徴を有する課題を解決するための手段を採用している。
【００１５】
本発明は、予め設定されたアプリケーションによる処理を実行し、実行された処理結果を比較してデータの診断及び修復を行う診断修復装置において、所定のデータを３以上の複数のデータ領域に記憶する記憶手段と、前記所定のデータを前記３以上の複数のデータ領域に異なる形式で書き込み、前記アプリケーションの実行時に前記３以上の複数のデータ領域にそれぞれ書き込んだデータを読み込んで照合し、照合の結果が不一致であった場合に所定の修復を行い、修復後のデータを用いて前記アプリケーションを実行する処理プログラム実行手段と、前記アプリケーションを実行した結果と、少なくとも１つの他の診断修復装置で前記アプリケーションを実行した結果とを照合する照合処理手段とを有することを特徴とする診断修復装置。
【００１６】
また本発明は、予め設定されたアプリケーションによる処理を実行し、実行された処理結果を比較してデータの診断及び修復を行う診断修復方法において、所定のデータを記憶手段の３以上の複数のデータ領域に記憶する記憶ステップと、前記所定のデータを前記３以上の複数のデータ領域に異なる形式で書き込み、前記アプリケーションの実行時に前記３以上の複数のデータ領域にそれぞれ書き込んだデータを読み込んで照合し、照合の結果が不一致であった場合に所定の修復を行い、修復後のデータを用いて前記アプリケーションを実行する処理プログラム実行ステップと、前記アプリケーションを実行した結果と、少なくとも１つの他の診断修復方法で前記アプリケーションを実行した結果とを照合する照合処理ステップとを有することを特徴とする。
【００１７】
また本発明は、コンピュータを、上述した診断修復装置が有する各手段として機能させるための診断修復プログラムである。
【００１８】
なお、本発明の構成要素、表現又は構成要素の任意の組み合わせを、方法、装置、システム、コンピュータプログラム、記録媒体、データ構造等に適用したものも本発明の態様として有効である。
【発明の効果】
【００１９】
本発明によれば、メモリを用いたデータ処理の安全性及び継続性を向上させることができる。
【図面の簡単な説明】
【００２０】
【図１】本実施形態における診断修復装置のブロック構成の一例を示す図である。
【図２】本実施形態における診断修復の概要について説明するための図である。
【図３】本実施形態における診断修復処理が実現可能なハードウェア構成の一例を示す図である。
【図４】診断修復処理手順の一例を示すフローチャートである。
【図５】データ書込関数の処理手順の一例を示すフローチャートである。
【図６】図５のデータ書込関数処理手順に対応するデータの書き込みの一例を示す図である。
【図７】データ管理テーブルの一例を示す図である。
【図８】構造体定義ファイルの一例を示す図である。
【図９】データ読込関数の処理手順の一例を示すフローチャートである。
【図１０】照合処理手順の一例を示すフローチャートである。
【図１１】照合先の処理が先行している場合の照合処理を説明するための図である。
【図１２】照合先の処理が遅行している場合の照合処理を説明するための図である。
【図１３】照合データファイルの一例を示す図である。
【発明を実施するための形態】
【００２１】
＜本発明について＞
本発明は、例えばリアルタイムでデータを読み書きするメモリ等の記憶手段のソフトエラーを検知し、例えば多数決原理等を用いてメモリ等のソフトエラーの修復や検証等の診断を行うことで、リアルタイム性を保持しつつ、安全性、信頼性、可用性、及びコスト面等を改善する。
【００２２】
また、本発明では、例えばダイバース（ｄｉｖｅｒｓｅ）診断手法を用いて診断を実施することで、同一出力であっても処理方式を別にすることにより一過性エラー以外のＣＰＵやメモリの異常等を、より適切に診断することができる。
【００２３】
ここで、本発明における「ダイバース診断手法」を以下のように定義する。ダイバース診断手法とは、例えば、所定の入力データを読み込み、同一のデータを出力する場合に、その入力データの読み込む機器（装置等）や処理方式等を別にして得られる結果を診断するものである。
【００２４】
更に、具体的に説明すれば、ダイバース診断手法は、例えば取得したあるデータに対して何らかのデータ処理を行う場合には、そのプログラム言語の違いやアルゴリズムの違い、バージョンの違い、コンパイラの違い、コンパイラのパラメータの違い、また複数のタスクを実行する場合には、その実行順序の違い、装置の違い（ここで、装置の違いには、例えば同種類の２つの装置や他社製品による異なる装置といった概念も含む）等といった、それぞれ異なる条件において処理された結果を用いて診断する手法をいう。なお、ダイバース診断手法における異なる条件については、本発明においてはこれに限定されるものではない。また、ダイバース診断手法により設定される条件は、上記の違いのうち何れか１つでもよく、複数を組み合わせてもよい。
【００２５】
また、本発明では、ダイバースにより得られるそれぞれの誤差範囲やデータの誤差範囲について、予め設定しておき、その設定された範囲において一致しているか否かを判断したり、適宜多数決により、その処理結果が正常か異常かを判断することによりソフトエラーの安全性を向上させる。
【００２６】
以下に、本発明における診断修復装置、診断修復方法、及び診断修復プログラムを好適に実施した形態について、図面を用いて説明する。
【００２７】
＜診断修復装置のブロック構成例＞
図１は、本実施形態における診断修復装置のブロック構成の一例を示す図である。ここで、図１に示す診断修復装置１０−１，１０−２は、複数の診断修復装置が多重化されていることを示すものであり、各装置を区別するため１０−１，１０−２としているが、これらは同一の構成を有している。そこで、以下の説明では、便宜上、診断修復装置１０−１のみを用いて各構成による機能を説明する。また、本実施形態における診断修復装置１０−１，１０−２は、各ＣＰＵ（例えば、ＣＰＵ１，ＣＰＵ２等）で処理される機能として定義することもできる。
【００２８】
診断修復装置１０−１は、記憶手段としてのメモリ１１と、データ管理テーブル１２と、構造体定義ファイル１３と、処理プログラム実行手段１４と、照合データファイル１５と、照合処理手段１６と、通信手段１７と、時間管理手段１８とを有するよう構成されている。
【００２９】
メモリ１１は、例えばリアルタイムに読み書き可能なメモリ（例えば、ＲＡＭ等）である。また、メモリ１１は、内部に複数のデータ領域を有する。図１の例では、メモリ１１内の複数のデータ領域のうち、ソフトエラーを検出及び修復対象とする領域を、「データ領域１」、「データ領域２」、「データ領域３」に区分して管理する。なお、本実施形態において、データ領域の数はこれに限定されるものではないが、データ領域のデータを用いて多数決による判定を行う場合もあるため、データ領域の数は３以上の奇数であることが好ましい。
【００３０】
また、本実施形態では、所定の処理内容にて処理されるデータを格納する領域としてレジスタ等を有していてもよく、その他にもアクセスするデータを一時的に保存するキャッシュメモリ等を有していてもよい。
【００３１】
データ管理テーブル１２は、処理プログラム１４に含まれるデータ書込関数１４ａ及びデータ読込関数１４ｂの何れか、又は、両方の関数からアクセスできる共通領域に配置され、メモリ１１のデータ領域の先頭アドレスを管理する。
【００３２】
構造体定義ファイル１３は、データ書込関数１４ａ及びデータ読込関数１４ｂの何れか、又は、両方の関数からアクセスできる共通領域に配置され、例えば各データ名、当該データ名のバイト数、当該データ名の先頭の相対アドレス等を定義した情報を管理する。ここで、例えば上述した各関数がＣ言語の場合には、プロブラムのコンパイル時等のように診断修復装置１０−１（ＣＰＵ）が実際の処理を実行する前に、予め設定された構造体定義データ２１から取得したデータを変換して構造体定義ファイル１３として構築することもできる。
【００３３】
処理プログラム実行手段１４は、少なくともデータ書込関数１４ａ及びデータ読込関数１４ｂを有する。データ書込関数１４ａは、メモリ１１内のデータ領域に所定のデータを所定の形式等で書き込むための関数である。また、データ読込関数１４ｂは、メモリ１１内のデータ領域からデータを読み込み、メモリの診断やデータ及びソフトエラーの修復等を行うための関数である。
【００３４】
つまり、処理プログラム実行手段１４は、ソフトエラー検出対象のデータの書き込みや読み込みを行うアプリケーション処理プロブラムとして、データ書込関数１４ａ及びデータ読込関数１４ｂを有する。
【００３５】
更に、処理プログラム実行手段１４は、各種アプリケーション１４ｃを有する。各種アプリケーション１４ｃには、異なる処理を行う複数のアプリケーションが含まれている。処理プログラム実行手段１４は、予め設定された処理内容に応じて各種アプリケーション１４ｃからアプリケーションを選択し、選択したアプリケーションに対応した処理プログラム（アプリケーション処理プログラム）を実行し、実行した結果を照合データファイル１５に出力する。
【００３６】
ここで、各種アプリケーション１４ｃによるアプリケーション処理プロブラムは、例えば診断修復装置１０−１（ＣＰＵ１）と診断修復装置１０−２（ＣＰＵ２）とで同じ入力に対し、所定の制御命令等により同じ出力をするプロブラムである。つまり、アプリケーション処理プロブラムは、例えば上述したＣＰＵ１とＣＰＵ２とで同じアルゴリズムで処理をするか、又は上述したダイバース診断手法を適用し、入力に対して別の処理アルゴリズム等を用いた処理を行い、同じ出力をするといったダイバース化による処理を行う。本実施形態では、ダイバース化を行うことで、例えばプログラムや設計のミス等による共通原因の故障を検出し回避することができる。
【００３７】
照合データファイル１５は、例えば診断修復装置１０−１（ＣＰＵ１）における処理プログラム実行手段１４の処理結果と、診断修復装置１０−２（ＣＰＵ２）における処理プログラム実行手段１４の処理結果とを照合することで、修復したデータを検証して診断するためのデータを格納する。なお、照合データファイル１５は、今までの処理結果の履歴情報（例えば、前回データ、今回データ等）を格納することもできる。
【００３８】
照合処理手段１６は、照合処理として、例えば診断修復装置１０−１における処理プログラム実行手段１４の処理結果と、診断修復装置１０−２における処理プログラム実行手段１４の処理結果とを照合することで、所定結果が一致しているか否かを確認し、修復したデータを検証して診断するための処理を行う。なお、一致しているか否かの判断は、完全一致に限定されるものではなく、例えば所定の誤差範囲にあるか否かにより判断してもよい。
【００３９】
また、照合処理手段１６は、多重化された診断修復装置のそれぞれの今回分の処理結果データ（今回データ）を対象に照合を行ってもよく、各診断修復装置における処理のタイミング等に対応させて、例えば前回分の処理結果データ（前回データ）等を用いて照合を行ってもよい。
【００４０】
通信手段１７は、診断修復装置１０−１と診断修復装置１０−２とで、データの送受信を可能とする。具体的には、通信手段１７により、例えば診断・修復結果の照合等を行う。
【００４１】
時間管理手段１８は、処理プログラム実行手段１４において予め設定された少なくとも１つの処理（アプリケーション）を実行させるための時間を管理する。また、時間管理手段１８は、多重化された他の診断修復装置との実行の同期を取るための時間を管理する。したがって、多重化された各診断修復装置１０における各時間管理手段１８は、通信ネットワーク等により同期が取れるように接続されていてもよい。
【００４２】
なお、本実施形態においては、これに限定されるものではなく、例えば各診断修復装置１０の処理プログラム実行手段１４で同期させて所定の処理が実行されるように制御する管理制御装置等を設け、その管理制御装置から多重化された各診断修復装置１０に対して所定の処理を実行させる時間情報を出力するようにしてもよい。これにより、本実施形態では、時間管理によるリアルタイムな診断修復処理を実現することができる。
【００４３】
構造体定義データ２１は、外部から取得されるデータの構造体が定義されたデータである。本実施形態では、構造体定義データ２１を変換して構造対定義ファイル１３を取得しているが、本発明においてはこれに限定されるものではなく、例えば構造体定義ファイル１３そのものを外部から直接取得してもよい。なお、外部からの取得は、他の装置からインターネットやＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等の通信ネットワークを介して取得してもよく、ユーザ等からの入力により設定されてもよい。
【００４４】
ここで、診断修復装置１０−２は、多重化した診断修復装置１０−１と同等のブロック構成を有し、上述した各機能に対応する処理を行う。なお、診断修復装置１０−２は、多重化した診断修復装置１０−１と並行して処理を行ったり、異なるタイミングで処理を行うことができ、これらはユーザ等により予め設定することができる。また、図１の例において、診断修復装置１０−２（ＣＰＵ２）は、診断修復装置１０−１（ＣＰＵ１）と並列二重化システムを構成しているが、本発明においてはこれに限定されるものではなく、診断修復装置１０を三重以上の構成にして多重化システムを構成してもよい。
【００４５】
＜診断修復の概要について＞
ここで、本実施形態における診断修復の概要について図を用いて説明する。図２は、本実施形態における診断修復の概要について説明するための図である。本実施形態では、図２に示すように、リアルタイムに読み書きするメモリ１１について、以下の手順で、メモリの診断、読み込みデータの修復、及びメモリ１１のソフトエラーの修復を行う。なお、図２では、上述したデータ領域１〜３をそれぞれメモリ１１−１〜１１−３とする。
【００４６】
まず、本実施形態では、図２の（１）に示すように、データ書き込み時に、所定のデータを例えば３つの異なる形式でデータ領域へ書き込む。書き込むデータ形式は、例えばそのままのデータ（正データ）や、正データを１６進数ｆｆｆｆ（ハイバリュー（オールｆ））でＥＯＲ（排他的論理和）演算したデータ（反転データ）、正データを予め設定された１又は複数の異なる所定のパターン（例えば、１６進数ａａａａ、ａｂｃｄ、４３２１、０ａ０ａ等）でＥＯＲ演算したデータ（パターンデータ）とし、それらのデータを選択的に用いてソフトエラー以外のビットエラー等のエラー検出もできるようにする。更に、本実施形態では、後述する図２の（５）に示す照合処理を行うことで、データの信頼性を向上させ、チェックサム等の付加的データを不要とする。
【００４７】
なお、上述した所定のパターンは、１６進数ａａａａのように同一数字が連続するものでもよく、１６進数１２３４，４３２１のように昇順、降順になったものでもよく、１６進数０ａ０ａのように所定の２以上の値を交互に配列されたものでもよい。また、上述したデータのパターンは、処理毎に変更してもよく、常に予め設定されたパターンに固定されていてもよい。更に、本実施形態における演算内容は、上述したＥＯＲ演算に限定されるものではなく、例えば論理積演算等の所定の演算を用いてもよく、各処理毎や処理データの内容に応じて演算手法を任意に設定してもよい。なお、上述した１６進数ｆｆｆｆやａａａａ等の付加データの桁数は、説明の便宜上４桁で示しているが、実際には、正データのバイト数に対応させた桁数が設定される。
【００４８】
次に、本実施形態では、処理に使用するタイミングで図２の（２）に示すデータの読み込みを行う。また読み込み時に図２の（１）の処理でメモリ１１−１に書き込んだ正データと、メモリ１１−２に書き込んだ１６進数ｆｆｆｆでＥＯＲ演算した反転データとを照合して一致を確認する。ここで、照合時には、メモリ１１−２から得られた反転データを、１６進数ｆｆｆｆでＥＯＲ演算する前のデータに戻してから照合を行う。なお、一致しているか否かの判断は、完全一致に限定されるものではなく、例えば所定の誤差範囲にあるか否かにより判断してもよい。照合の結果が不一致の場合には、メモリエラーと判断する。
【００４９】
更に、本実施形態では、メモリ１１−３に書き込んだパターンデータを用い、上述した正データと照合して一致を確認する。なお、パターン処理と照合する場合には、例えばデータ３のパターンデータを１６進数ａａａａが付加される前に戻した後に、データ１と照合する。つまり、ここでの照合は、正データ、反転データ、パターンデータの３つのデータで照合して一致を確認する。
【００５０】
次に、本実施形態では、図２の（３）の処理として、上述した図２の（２）の処理でメモリエラーが発生したと判断した場合に、メモリ１１−１〜１１−３で書き込んだ３つの領域のデータで多数決を行い、多数のものを正常データと判定する。つまり、上述の例では、３つのデータのうち、同じデータが２つあるデータを正常データとする。
【００５１】
また、判定により得られた正常データを実際の所定の処理に使用すると共に、当該正常データをメモリエラーと判定されたメモリに所定の形式で書き込み、ソフトエラーを修復する。
【００５２】
次に、本実施形態では、図２の（４）の処理として、メモリエラーと判定したメモリ（図２の例では、メモリ１１−１）に書き込んだデータを再読み込みし、書き込んだデータと再読み込みしたデータとが一致するか否かを判定し、一致しない場合には、ハードエラーとみなして、所定のハードエラー処理を行う。
【００５３】
次に、本実施形態では、図２の（５）の処理として、二重系以上の多重化システムで、当該システム（例えば、ＣＰＵ１）で修復したデータを使用した処理結果と、他システム（例えば、ＣＰＵ２）における該当する処理結果との照合を行う。この照合において、一致した場合には、修復データが正しいことが検証される。また、一致しない場合には、エラーとして所定のエラー処理を行う。
【００５４】
なお、図２の例では、本実施形態では、メモリ１１−１に正データ、メモリ１１−２に反転データ、メモリ１１−３にパターンデータを書き込んだが、本発明においてはこれに限定されるものではなく、例えばメモリ１１−２，１１−３にそれぞれ異なるパターンを正データに付加したパターンデータを書き込んでもよい。更に、本実施形態では、例えばデータ領域を５つ用意し、そのうちの１つには正データを書き込み、残りの４つには、反転データを２つ、異なるパターンを用いて得られたパターンデータを２つ書き込んでもよく、また４つとも異なるパターンを用いて得られたパターンデータを書き込んでもよい。どのデータ領域にどのようなデータを書き込むかについては、データの内容等に応じて選択的に設定することができる。
【００５５】
＜ハードウェア構成例＞
ここで、上述した診断修復装置１０（１０−１，１０−２を含む）においては、各機能をコンピュータに実行させることができる実行プログラム（診断修復プログラム）を生成し、例えば汎用のパーソナルコンピュータ、サーバ等にその実行プログラムをインストールすることにより、本発明における診断修復処理等を実現することができる。
【００５６】
ここで、本実施形態における診断修復処理が実現可能なコンピュータのハードウェア構成例について図を用いて説明する。図３は、本実施形態における診断修復処理が実現可能なハードウェア構成の一例を示す図である。
【００５７】
図３におけるコンピュータ本体には、入力装置３１と、出力装置３２と、ドライブ装置３３と、補助記憶装置３４と、メモリ装置３５と、各種制御を行うＣＰＵ３６と、ネットワーク接続装置３７とを有するよう構成されており、これらはシステムバスＢで相互に接続されている。
【００５８】
入力装置３１は、ユーザ等が操作するキーボード及びマウス等のポインティングデバイスを有しており、ユーザ等からの各種プログラムの実行指示等の各種操作信号を入力する。
【００５９】
出力装置３２は、本発明における処理を行うためのコンピュータ本体を操作するのに必要な各種ウィンドウやデータ等を表示するディスプレイを有し、ＣＰＵ３６が有する制御プログラムにより、上述したアプリケーション処理プロブラム等の各種プログラムの実行経過や結果等を表示することができる。
【００６０】
ここで、本発明においてコンピュータ本体にインストールされる実行プログラムは、例えばＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）メモリやＣＤ−ＲＯＭ等の可搬型の記録媒体３８等により提供される。プログラムを記録した記録媒体３８は、ドライブ装置３３にセット可能であり、記録媒体３８に含まれる実行プログラムが、記録媒体３８からドライブ装置３３を介して補助記憶装置３４にインストールされる。
【００６１】
補助記憶装置３４は、ハードディスク等のストレージ手段であり、本発明における実行プログラムやコンピュータに設けられた制御プログラム、本発明における診断修復処理を実行するために必要な各種データ（例えば、データ管理テーブル１２、構造体定義ファイル１３、照合データファイル１５等）等を蓄積し、必要に応じて入出力を行うことができる。
【００６２】
メモリ装置３５は、上述したメモリ１１に相当する記憶手段である。また、メモリ手段３５は、ＣＰＵ３６により補助記憶装置３４から読み出された実行プログラム等を格納する。なお、メモリ装置３５は、ＲＡＭやＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）等からなる。
【００６３】
ＣＰＵ３６は、例えばＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）等の制御プログラム、及びメモリ装置３５等に格納されている実行プログラム、処理プログラム実行手段１４等が有するアプリケーション処理プログラム等に基づいて、各種演算や各ハードウェア構成部とのデータの入出力等、コンピュータ全体の処理を制御して、診断修復処理における各処理を実現することができる。なお、プログラムの実行中に必要な各種情報等は、補助記憶装置３４から取得することができ、また実行結果等を格納することもできる。
【００６４】
ネットワーク接続装置３７は、通信ネットワーク等と接続することにより、実行プログラム等を通信ネットワークに接続されている外部装置等から取得（ダウンロード）したり、プログラムを実行することで得られた実行結果又は本発明における実行プログラム自体を外部装置等に提供することができる。また、ネットワーク接続手段３７は、通信ネットワーク等を介して外部装置から、本発明における診断修復処理を実施するために必要な各種データ（例えば、構造体定義データ２１等）を取得することができる。
【００６５】
上述したようなハードウェア構成により、本発明における診断修復処理を実行することができる。また、プログラムをインストールすることにより、汎用のパーソナルコンピュータ等で本発明における診断修復処理を容易に実現することができる。
【００６６】
＜診断修復処理手順＞
次に、本実施形態における診断修復処理手順の一例について、フローチャートを用いて説明する。図４は、診断修復処理手順の一例を示すフローチャートである。図４において、診断修復処理は、上述したアプリケーション処理プロブラム等を用いて処理が行われる。
【００６７】
まず、診断修復処理は、データ書込関数１４ａを呼び出し、予め設定されたメモリ１１内の複数のデータ領域に対して、所定のデータを所定の形式で書き込む処理を実行する（Ｓ０１）。このとき、所定の形式とは、例えば上述したように、そのままのデータ（正データ）、正データの反転データ、正データに所定のパターンを付加したパターンデータ等から任意に選択される。
【００６８】
次に、診断修復処理は、データ読込関数を呼び出して対応する処理を実行する（Ｓ０２）。具体的には、各データ領域のデータを読み出して照合により一致を確認する。ここで、診断修復処理は、照合結果に基づくデータ読込関数の関数値が正常終了であるか否かを判断する（Ｓ０３）。なお、Ｓ０３の処理では、例えば「正常終了であるか」、「データ修復処理を行うか」、「異常終了であるか」が判断される。
【００６９】
診断修復処理は、Ｓ０３の処理において、「データ修復処理を行う」と判断された場合、所定のデータ修復を行い、修復したデータをメモリ１１内の所定のデータ領域に記憶するデータ修復処理を行う（Ｓ０４）。なお、所定のデータ領域とは、照合の結果が一致しなかったデータ領域のみであってもよく、全データ領域であってもよい。
【００７０】
また、Ｓ０３の処理において、「正常終了である」と判断された場合、又は、上述したＳ０４の処理が終了した場合には、予め設定された少なくとも１つのアプリケーション処理プログラムを実行する所定のアプリケーション処理を行う（Ｓ０５）。また、その処理結果を照合処理データとして、例えば実行した各処理を識別するための「処理番号」と、「照合処理データ」と、「データ修復の有無」とを含む情報を照合データファイル１５に書き込む（Ｓ０６）。
【００７１】
その後、診断修復処理は、例えば多重化された他の診断修復装置における所定の処理の結果が書き込まれた照合処理データファイルとの照合処理を行う（Ｓ０７）。なお、本実施形態では、Ｓ０７の処理を行わなくてもよい。また、診断修復処理は、上述するＳ０３の処理において、「異常終了である」と判断された場合、その旨をユーザ等に通知する所定の異常処理を行う（Ｓ０８）。また、本実施形態では、メモリのハードエラーをデータ読込関数１４ｂの実行時等に検知した場合、メモリハードエラーに対応する所定の異常処理等を行う。
【００７２】
ここで、上述した照合データファイル１５に書き込まれる「処理番号」とは、例えば処理プロブラム毎に付与された診断修復装置（ＣＰＵ）内で一意の番号であり、例えば多重化された２つの診断修復装置（ＣＰＵ１とＣＰＵ２）において、同一の処理を行う処理プログラムに対しては、同一の処理番号が付与される。また、上述した「照合処理データ」は、所定のアプリケーション処理の結果として生成されたデータ等を示す。更に、上述したデータ修復処理における「データ修復の有無」の判断は、例えば実際にデータ修復を行った場合に、データ修復ありを示すフラグや文字、識別情報等をセットする。
【００７３】
＜データ書込関数１４ａの処理手順＞
次に、上述したデータ書込関数の処理手順例について、フローチャートを用いて説明する。図５は、データ書込関数の処理手順の一例を示すフローチャートである。また、図６は、図５のデータ書込関数処理手順に対応するデータの書き込みの一例を示す図である。
【００７４】
ここで、本実施形態におけるデータ書込関数１４ａのパラメータは、書込データ名と書込データである。以下の説明では、関数の記述例として、例えば「ｒｉｎｆ＝ｗｓｄａｔ（ａ［３］＝２０）」の場合を示す。これは、書込データ名が、後述する図８（ｂ）で定義したように整数型ａの３番目（相対値）、書込データが２０であることを示している。更に、ｒｉｎｆは関数値であるが、本実施形態におけるデータ書込関数１４ａでは使用しない。
【００７５】
なお、本実施形態では、書込データ名と書込データとを指定する例を記載しているが、本発明においてはこれに限定されるものではなく、他の関数を用いて、例えば書込アドレスが連続したデータを書込先頭相対アドレスと、書込データバイト数と、書込データとをパラメータとして、各データを関連付けて一括で書き込むこともできる。
【００７６】
図５の例において、データ書込関数１４ａは、データ管理テーブル１２と構造体定義ファイル１３とを読み込み、書込先頭アドレスを計算する（Ｓ１１）。なお、Ｓ１１の処理における計算例は、例えば「書込先頭アドレス＝データ領域１先頭アドレス＋書込データ名先頭アドレス＋（相対値−１）×データ名バイト数」のような式を用いて算出することがきるが、本発明においてはこれに限定されるものではない。
【００７７】
次に、データ書込関数１４ａは、パラメータのデータを構造体定義ファイル１３のデータ名に対応するバイト数分書き込む（Ｓ１２）。例えば、整数型の場合には、２バイト書き込まれる。
【００７８】
次に、データ書込関数１４ａは、データ管理テーブル１２から「データ領域２」の先頭アドレスを読み込み、構造体定義ファイル１３から書込先頭アドレスを計算する（Ｓ１３）。Ｓ１３の処理における計算は、例えば上述したＳ１１における処理の計算に対してデータ領域先頭アドレスが変わるのみであり、具体的には、「書込先頭アドレス＝データ領域２先頭アドレス＋書込データ名先頭アドレス＋（相対値−１）×データ名バイト数」のような式を用いて算出することができるが、本発明においてはこれに限定されるものではない。
【００７９】
次に、データ書込関数１４ａは、書込データに例えば１６進数ｆｆｆｆのＥＯＲ演算を付加し（Ｓ１４）、その付加したデータ（反転データ）を対応するデータ型のバイト数で書き込む（Ｓ１５）。そのとき書き込むアドレスは、上述したＳ１３の処理で計算したアドレスに書き込む。
【００８０】
次に、データ書込関数１４ａは、データ管理テーブル１２から「データ領域３」の先頭アドレスを読み込み、構造体定義ファイル１３から書込先頭アドレスを計算する（Ｓ１６）。なお、ここでの計算は、例えば上述したＳ０１の処理での計算と同様にデータ領域先頭アドレスが変わるのみである。具体的には、「書込先頭アドレス＝データ領域３先頭アドレス＋書込データ名先頭アドレス＋（相対値−１）×データ名バイト数」のような式を用いて算出することができるが、本発明においてはこれに限定されるものではない。
【００８１】
次に、データ書込関数１４ａは、書込データに例えば所定のパターンである１６進数ａａａａのＥＯＲ演算を付加し（Ｓ１７）、その付加したデータ（パターンデータ）をＳ１６の処理にて計算されたアドレスから対応するデータ型のバイト数で書き込む（Ｓ１８）。上述した処理により、図６に示すように、先頭相対アドレスからａ［３］の領域に整数型２バイト×４０のデータが書き込まれる。
【００８２】
＜データ管理テーブル１２について＞
ここで、上述したデータ管理テーブル１２の具体例について図を用いて説明する。図７は、データ管理テーブルの一例を示す図である。図７に示すデータ管理テーブルは、項目として、例えば「番号」、「名称」等を有しているが、本発明においてはこれに限定されるものではない。
【００８３】
データ管理テーブル１２は、メモリ１１内に設定された複数のデータ領域が「番号」で識別され、各番号毎に、データ書込関数１４ａ及びデータ読込関数１４ｂ内で使用されるメモリ１１内の各データ領域の先頭アドレスが格納される。なお、先頭アドレスが変わる場合には、対象のデータ領域のアドレスが更新される。
【００８４】
＜構造体定義ファイル１３について＞
次に、上述した構造体定義ファイル１３の具体例について図を用いて説明する。図８は、構造体定義ファイルの一例を示す図である。なお、図８（ａ）は、構造体定義データ２１を示し、図８（ｂ）は、図８（ａ）の構造体定義データ２１から得られる構造体定義ファイル１３を示し、図８（ｃ）は、メモリ割り付けの一例を示している。
【００８５】
図８（ａ）に示す構造体定義データ２１は、例えばＣ言語を使用する場合の構造体定義データ２１の例を示している。ここで、「ｃｈａｒ」は文字型であり１文字１バイトで構成されている。また、「ｉｎｔ」は、整数型であり１データ２バイトで構成されている。また「ｌｏｎｇ」は、倍長整数型であり１データ４バイトで構成されている。また、「ｄｏｕｂｌｅ」は、倍精度実数型であり１データ８バイトで構成されている。
【００８６】
なお、各型（例えば、整数型等）のデータ名は、複数設定することもできる。また、［ｎ］は、データ領域がｎデータ分であることを示している。
【００８７】
図８（ｂ）に示す構造体定義ファイル１３は、図１に示すデータ書込関数１４ａ及びデータ読込関数１４ｂの何れか、又は、両方の関数からアクセスできる共通領域に配置され、例えば「データ名」、「当該データ名のバイト数」、「当該データ名の先頭の相対アドレス」等を管理する。なお、図８（ｂ）に示す構造体定義ファイル１３の項目としては、例えば「データ名」、「バイト数」、「先頭相対アドレス」等があるが、本発明においてはこれに限定されるものではない。
【００８８】
本実施形態では、図８（ａ）に示す構造体定義データ２１の入力し、各データをテーブルに変換して、図８（ｂ）に示す構造体定義ファイル１３が構築される。
【００８９】
図８（ｃ）では、構造体定義ファイル１３をメモリ１１へ割り付けした例を示している。ここで、上述した図１の例では、メモリ１１内のデータ領域は３つあるため、同じ領域割り付けがメモリ１１内の３か所に所定の形式（例えば、文字型、整数型、倍長整数型、倍精度実数型等のデータタイプやデータタイプに対応するバイト数等）で設定される。
【００９０】
＜データ読込関数１４ｂの処理手順＞
次に、上述したデータ読込関数１４ｂの処理手順例についてフローチャートを用いて説明する。図９は、データ読込関数の処理手順の一例を示すフローチャートである。
【００９１】
ここで、本実施形態におけるデータ読込関数１４ｂのパラメータは、読込データ名と読込レジスタ名である。また、関数値は、例えば「正常」、「異常」、「データ修復」の３種類である。以下の説明では、関数の記述例として、「ｒｉｎｆ＝ｒｓｄａｔ（ｂ［５］，ｘ）」の場合を示す。これは、読込データ名が、上述した図８で定義したように倍長整数型ｂの５番目（相対値）、読込データ格納領域がｘであることを示す。また、ｒｉｎｆは関数値であるが、本実施形態におけるデータ読込関数１４ｂでは使用しない。
【００９２】
なお、本実施形態では、読込データ名と読込レジスタ名とを指定する例を記載しているが、本発明においてはこれに限定されるものではなく、他の関数を用いて、例えば読込アドレスが連続したデータを読込先頭相対アドレスと、読込データバイト数と、読込データ領域とをパラメータとして、各データを関連付けて一括して読み込むこともできる。
【００９３】
図９の例において、データ読込関数１４ｂは、データ管理テーブル１２と構造体定義ファイル１３とを読み込み、データ領域１、２、３の読込先頭アドレスを計算する（Ｓ２１）。なお、Ｓ２１の処理における計算例は、例えば「読込先頭アドレス１＝データ領域１先頭アドレス＋読込データ名先頭アドレス＋（相対値−１）×データ名バイト数」、「読込先頭アドレス２＝データ領域２先頭アドレス＋読込データ名先頭アドレス＋（相対値−１）×データ名バイト数」、「読込先頭アドレス３＝データ領域３先頭アドレス＋読込データ名先頭アドレス＋（相対値−１）×データ名バイト数」のような式を用いて算出することができるが、本発明においてはこれに限定されるものではない。
【００９４】
次に、データ読込関数１４ｂは、読込アドレス１，２，３から、各データ領域に書き込まれているデータを所定の読込データバイト数で読み込む（Ｓ２２）。このときのそれぞれの読込データを、便宜上データ１，２，３とする。次に、データ読込関数１４ｂは、データ２を１６進数ｆｆｆｆ、データ３を所定のパターンデータ（１６進数ａａａａ）でＥＯＲ演算する（Ｓ２３）。このときのそれぞれのデータを、便宜上データａ，データｂとする。具体的には、例えば「データａ＝“データ２”  ＥＯＲ  “１６進数ｆｆｆｆ”」、「データｂ＝“データ３”  ＥＯＲ  “１６進数ａａａａ”」の演算を行う。上述の処理は、データ書込関数１４ａにより、データ領域２（データ２）には正データに対して１６進数ｆｆｆｆを付加した反転データが書き込まれ、データ領域３（データ３）には正データに対して１６進数ａａａａを付加したパターンデータが書き込まれているため、これらのデータを付加前のデータに戻すために、同一の付加データを用いてＥＯＲ演算を行う。
【００９５】
なお、上述したデータ書込関数１４ａで付加データをＥＯＲ演算以外の演算手法で付加した場合、データ読込関数１４ｂは、その付加データの内容や演算手法等に対応させて、データ２及びデータ３が付加前のデータに戻るような付加データや演算手法を用いて処理が行われる。
【００９６】
次に、データ読込関数１４ｂは、データ１と、データａ，ｂとを照合し、データの一致を確認する（Ｓ２４）。ここで、３つのデータが一致しているか否かを判断し（Ｓ２５）、一致していない場合（Ｓ２５において、ＮＯ）、次に、２つのデータが一致しているか否かを判断する（Ｓ２６）。
【００９７】
ここで、データ読込関数１４ｂは、２つのデータが一致している場合（Ｓ２６において、ＹＥＳ）、当該一致データを読込データの正常データとする（Ｓ２７）。
【００９８】
次に、データ読込関数１４ｂは、正常データを不一致データのアドレスに書き込む（Ｓ２８）。ここで、例えばキャシュメモリを使用している場合には、キャッシュメモリのみが更新されるため、キャッシュメモリをスルーして、不一致データのアドレスに書き込むようにする。つまり、上述したキャッシュメモリをスルーするとは、例えばキャッシュメモリとメモリ１１内の所定のデータ領域の両方に正常データを書き込むことを意味する。
【００９９】
次に、データ読込関数１４ｂは、当該書込データのアドレスからデータを読み込む（Ｓ２９）。なお、この場合にもキャシュメモリをスルーする。ここで、上述したキャッシュメモリをスルーするとは、例えばキャッシュメモリからではなく、メモリ１１内の所定のデータ領域からデータを読み込むことを意味する。
【０１００】
次に、書込データと読込データとが一致しているか否かを判断し（Ｓ３０）、一致している場合（Ｓ３０において、ＹＥＳ）、メモリデータが修復されたと判断し、発生したエラーはソフトエラーと判断する。その後、データ読込関数１４ｂは、関数値に「データ修復」を設定し（Ｓ３１）、関数の処理を終了する。
【０１０１】
また、データ読込関数１４ｂは、Ｓ３０の処理において、書込データと読込データとが一致していない場合（Ｓ３０において、ＮＯ）、Ｓ２８におけるリライト処理でもデータが修復しないため、ハードエラーと判断し、関数値に「異常」を設定し（Ｓ３２）、関数を終了する。なお、データ読込関数１４ｂは、Ｓ２６の処理において、２つのデータが一致していない場合（Ｓ２６において、ＮＯ）、３つ全てのデータが一致していないことになるため、エラーと判断し、関数値に「異常」を設定する（Ｓ３２）。
【０１０２】
また、データ読込関数１４ｂは、上述したＳ２５の処理において、３つのデータが一致する場合（Ｓ２５において、ＹＥＳ）、関数値に「正常終了」を設定し、データ１を正常データとし（Ｓ３３）、関数の処理を終了する。
【０１０３】
＜照合処理手順＞
次に、上述した照合処理手順の一例についてフローチャートを用いて説明する。図１０は、照合処理手順の一例を示すフローチャートである。図１０に示す照合処理は、例えばある診断修復装置１０（ＣＰＵ）での一連の処理シーケンスが完了した時点で起動する。したがって、一定周期の起動で一連の処理シーケンスを行うシステムでは、同様に一定周期で照合処理が起動する。
【０１０４】
ここで、以下の説明では、照合先ＣＰＵをＣＰＵ１とし、照合元ＣＰＵをＣＰＵ２とし、各照合データファイルには、所定のアプリケーション処理を実施した今回分と前回分の処理結果（今回データ、前回データ）が存在するものとする。
【０１０５】
また、本実施形態において、例えば照合元ＣＰＵ（ＣＰＵ２）でデータ修復をした場合には、照合先ＣＰＵ（ＣＰＵ１）へ当該処理番号と照合処理データとを送信し、照合を依頼する。また、本実施形態において、例えば照合先ＣＰＵ（ＣＰＵ１）が照合失敗と判断した場合には、照合元ＣＰＵ（ＣＰＵ２）で所定の異常処理を行う。
【０１０６】
また、本実施形態において、照合先ＣＰＵ（ＣＰＵ１）は、照合元ＣＰＵ（ＣＰＵ２）から照合データ（データ修復をした処理番号と照合処理データ）を受信し、その受信した照合データから所定の照合処理を行い、照合成功／照合失敗を照合元ＣＰＵ（ＣＰＵ２）に送信する。この場合、照合先ＣＰＵ（ＣＰＵ１）は、正常であるため、異常処理は行わない。
【０１０７】
ここで、ＣＰＵ１とＣＰＵ２とは、互いに照合先と照合元とになり得るため、照合元と照合先との両方のＣＰＵにて照合処理が行われることになる。なお、本実施形態では、これに限定されるものではなく、例えば予め設定したＣＰＵのみで照合処理を行ってもよい。以下の説明では、照合元と照合先との両方の機能を持つ照合処理手順について説明する。
【０１０８】
まず、照合処理は、照合送信データを作成する（Ｓ４１）。具体的には、例えば照合データファイル１５のデータ修復ありのアプリケーション処理番号と当該アプリケーション処理番号の照合処理データとで照合先のＣＰＵへ送信する伝文（照合データ）を作成する。
【０１０９】
次に、照合処理は、照合先のＣＰＵへ照合データを送信する（Ｓ４２）。なお、メモリの修復がない場合には、アプリケーション処理番号を０とし、照合処理データを空欄として送信する。なお、本実施形態では、アプリケーション処理番号が０の場合に、照合処理データを送信しなくてもよい。
【０１１０】
次に、照合処理は、照合元のＣＰＵから照合データを受信する（Ｓ４３）。なお、受信した伝文（照合データ）の構成は、送信した伝文と同じく、例えば照合データファイルのデータ修復ありのアプリケーション処理番号及び照合処理データであり、データ修復がない場合にはアプリケーション処理番号が０である。
【０１１１】
ここで、照合処理は、照合元での修復なし、すなわち処理番号が０（処理番号＝０）であるか否かを判断する（Ｓ４４）。照合処理は、処理番号が０でない場合（Ｓ４４において、ＮＯ）、照合データファイル１５の今回データの処理番号及び当該処理番号の照合処理データに、受信したアプリケーション処理番号及び照合処理データと一致するものがあるか否かを判断する（Ｓ４５）。照合処理は、一致するものがない場合（Ｓ４５において、ＮＯ）、照合データファイル１５の前回データの処理番号及び当該処理番号の照合処理データに、受信したアプリケーション処理番号及び照合処理データが一致するものがあるか否かを判断する（Ｓ４６）。
【０１１２】
ここで、照合処理は、一致するものがある場合（Ｓ４６において、ＹＥＳ）、Ｓ４４の処理において処理番号＝０である場合（Ｓ４４において、ＹＥＳ）、又はＳ４５の処理において、照合処理データが一致する場合（Ｓ４５において、ＹＥＳ）、照合成功を照合元ＣＰＵへ送信する（Ｓ４７）。また、照合処理は、Ｓ４６の処理において、一致しない場合（Ｓ４６において、ＮＯ）、照合失敗を照合先ＣＰＵへ送信する（Ｓ４８）。
【０１１３】
次に、照合処理は、照合結果として照合成功又は照合失敗のデータを照合先から受信し（Ｓ４９）、受信データとの照合が失敗であるか否かを判断する（Ｓ５０）。ここで、照合失敗である場合（Ｓ５０において、ＹＥＳ）、その旨をユーザ等に通知する所定の異常処理を行う（Ｓ５１）。異常処理では、メモリ修復の検証が不成功となったため、当該状況に対応して予め設定された異常処理を行う。また、照合処理は、照合が成功した場合（Ｓ５０において、ＮＯ）、照合処理を終了する。
【０１１４】
＜照合の具体例と照合データファイル１５について＞
次に、本実施形態における照合の具体例と照合データファイル１５の具体例について図を用いて説明する。図１１は、照合先の処理が先行している場合の照合処理を説明するための図である。また、図１２は、照合先の処理が遅行している場合の照合処理を説明するための図である。また、図１３は、照合データファイルの一例を示す図である。
【０１１５】
ここで、図１１及び図１２は、時間軸における各処理の通信タイムチャートを示しており、例えば、「処理番号１→処理番号２→処理番号３→照合処理」を１つのサイクルとして、照合元ＣＰＵ（ＣＰＵ２）で２回（Ａ１，Ａ２）及び照合先ＣＰＵ（ＣＰＵ１）で２回（Ｂ１，Ｂ２）の処理が、同期と取りながら繰り返し処理を行っている。また、図１１及び図１２では、一例として「（ａ）処理番号２の入力に変化がない場合」と、「（ｂ）処理番号２の入力に変化がある場合」とを示している。
【０１１６】
また、図１３に示す照合データファイル１５は、複数の照合データの履歴情報が蓄積されている。例えば、図１３（ａ）では、今回データを示し、図１３（ｂ）は、前回データを示しているが、本発明においてはこれに限定されるものではなく、更に過去のデータを蓄積しておいてもよい。また、今回データと前回データとの違いは、単に処理回数の違いに限定されるものではなく、例えば上述したダイバース化による処理の違い等も含む。図１１及び図１２の例では、Ａ１，Ｂ１が前回データ（図１３（ｂ））に対応し、Ａ２，Ｂ２が今回データ（図１３（ａ））に対応する。
【０１１７】
図１３に示す照合データファイル１５の項目としては、例えば「処理番号」、「照合処理データ」、「データ修復」等があるが、本発明においてはこれに限定されるものではない。例えば、図１３（ａ）に示す今回データは、照合先ＣＰＵ（ＣＰＵ１）の最新のデータを格納する。また、処理番号は、ＣＰＵのアプリケーション処理単位に一意に付加した番号である。同一処理番号では、ＣＰＵ１とＣＰＵ２とが同じデータを入力し、処理結果となるようにアプリケーション処理として所定の処理を実行させる。このとき、上述したダイバース化によるアプリケーション処理を行ってもよい。
【０１１８】
また、照合データファイル１５には、各アプリケーション処理の時系列の順番に処理番号を格納する。照合処理データは、当該処理番号のアプリケーション処理の処理結果を格納する。したがって、例えば、処理番号２において「１＋２＝３」の演算処理（所定のアプリケーション処理プログラム）を行った場合には、処理番号２の照合処理データは３となる。また、照合データファイル１５の「データ修復」の項目には、当該処理をするためのメモリデータでデータ修復が発生したか否かの有無を格納する。
【０１１９】
また、図１３（ｂ）に示す前回データは、照合先ＣＰＵ（ＣＰＵ１）で一連の処理シーケンスが完了し、上述した図１０に示すような照合処理が完了した時点で図１３（ａ）に示す今回データをコピーしたものである。この時点で図１０（ａ）の今回データの領域は初期化される。ここで、処理番号は、照合先ＣＰＵ（ＣＰＵ１）と照合元ＣＰＵ（ＣＰＵ２）とで周期的に同一処理をしているため、両方のＣＰＵとも同じ番号が周期的に繰り返される。
【０１２０】
次に、照合の具体例について説明する。図１１及び図１２に示すＣＰＵ１及びＣＰＵ２は、上述した診断修復装置１０の機能を有し、互いに照合先にも照合元にもなり得る。ここで、照合先ＣＰＵ（ＣＰＵ１）と照合元ＣＰＵ（ＣＰＵ２）とは、時間管理手段１８を設けてお互いの処理タイミングを同期させていたとしても各ＣＰＵの負荷や処理性能等の影響により完全に同期を取ることは困難である。そのため、本実施形態では、例えば照合先ＣＰＵ（ＣＰＵ１）が照合元ＣＰＵ（ＣＰＵ２）より先行している場合と遅行している場合とでそれぞれの処理を行う。
【０１２１】
まず、図１１に示すように、照合先ＣＰＵ（ＣＰＵ１）が照合元ＣＰＵ（ＣＰＵ２）より先行し、Ａ１で処理番号２のメモリ修復があったとしても、メモリ修復により処理番号２の内容に変化がない場合（図１１の（ａ））、照合先ＣＰＵ（ＣＰＵ１）のＢ２における照合処理では、処理番号２についての入力の変化がないため、Ａ１の照合受信データとＢ２の今回データとが一致する。
【０１２２】
また、Ａ１で処理番号２のメモリ修復があった後に処理番号２の入力変化がある場合（図１１の（ｂ））、照合先ＣＰＵ（ＣＰＵ１）のＢ２における照合処理では、処理番号２の入力データに変化があるため、Ａ１の照合受信データと、ＣＰＵ１の今回データ（Ｂ２）とは一致しない。この場合、本実施形態では、Ａ１の照合受信データと、ＣＰＵ１の前回データ（Ｂ１）とを比較する。そして、図１１（ｂ）の例では、その場合にお互いのデータが一致する。このように、本実施形態では、照合処理に対して前の履歴情報（例えば、前回データ等）を利用することで、今回データ同士（１回）の照合エラーで直ちにシステムを終了させることなく、拡張した照合処理を実現することができる。これにより、本実施形態では、データ処理の安全性及び継続性を向上させたリアルタイムな診断修復処理を実現することができる。
【０１２３】
また、図１２に示すように、照合先ＣＰＵ（ＣＰＵ１）が照合元ＣＰＵ（ＣＰＵ２）より遅行している場合において、Ａ２の処理番号２のメモリ修復があったとしても、メモリ修復により処理番号２に変化がない場合（図１２（ａ））でも、Ａ２の照合受信データと、ＣＰＵ１の今回データ（Ｂ２）とが一致する。
【０１２４】
また、Ａ２で処理番号２のメモリ修復があった後に処理番号２の入力変化がある場合（図１２（ｂ））、Ａ２の処理番号２では、入力後にメモリ修復が行われて、処理番号２の内容が修復されているため、Ａ２の照合受信データと、ＣＰＵ１の今回データ（Ｂ２）とが一致する。つまり、図１２の例において、メモリ修復成功の場合には、処理番号２の照合処理データは、今回データと一致することになる。
【０１２５】
なお、上述した本実施形態では、３つのデータ領域に対して照合処理を行い、二重化したＣＰＵ（診断修復装置１０）を用いて処理を行っているが、本発明においてはこれに限定されるものではなく、ＣＰＵを三重以上に多重化し、多重化したものについてそれぞれ照合処理を行って、多数決処理等により異常の有無を診断するようにしてもよい。
【０１２６】
上述したように本発明によれば、メモリを用いたデータ処理の安全性及び継続性を向上させることができる。具体的には、本発明は、ＲＡＭ等のメモリに対するソフトエラーを診断・検出し、読み込みデータの修復とメモリ内のデータを修復する。
【０１２７】
また、本発明では、照合が一致しない場合に、当該タイミングで予め所定の形式で書き込んだデータを読み込み、それらを多数決で修復データを判定し、読み込みデータを修復すると共に、メモリに再書き込みをすることでソフトエラーを解消する。
【０１２８】
したがって、本発明によれば、ＥＣＣハードウェアが必要なく、低コストでソフトエラーの検出及び修復をすることができる。また、本発明では、実際に所定の処理を行うタイミングでリアルタイムにソフトエラーの検出及び修復ができ、所定の処理に正しいデータを使用することができる。また、本発明では、ＥＣＣで対応できない複数ビットのエラー検出と修復を行うことができる。
【０１２９】
また、本発明では、修復後のアプリケーション処理結果を多重化システム間で照合することで、メモリデータに余分なチェックサム等の追加処理をすることなくソフトエラー修復の検証をすることができ、リアルタイムにデータ書込み、読込みが可能となる。また、本発明では、修復後のアプリケーション処理結果を多重化システム間で照合することで、メモリのソフトエラーと同時に発生したメモリ以外のＣＰＵやレジスタ等のソフトエラーを検出することができる。
【０１３０】
また、本発明では、二重系以上の多重化システムにより修復データの正確性を照合により検証することができる。更に、本発明では、照合処理に対して、履歴情報（例えば、前回データ等）を利用することで、今回データ同士の照合エラーで直ちにシステムを終了させることなく、拡張した照合処理を実現することができる。これにより、本発明では、データ処理の安全性及び継続性を向上させたリアルタイムな診断修復処理を実現することができる。
【０１３１】
また、本発明では、照合もアプリケーション処理単位で行うことにより、多重化システム間で同一のアプリケーション処理を行う必要がなく、多重化システム間のアプリケーション処理のダイバーシティを確保することができる。したがって、本発明では、ソフトエラーに対するロバスト性が向上し、システムの安全性と可用性とを向上させることができる。
【０１３２】
以上本発明の好ましい実施例について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形、変更が可能である。
【符号の説明】
【０１３３】
１０  診断修復装置
１１  メモリ（記憶手段）
１２  データ管理テーブル
１３  構造体定義ファイル
１４  処理プログラム実行手段
１５  照合データファイル
１６  照合処理手段
１７  通信手段
１８  時間管理手段
２１  構造体定義データ
３１  入力装置
３２  出力装置
３３  ドライブ装置
３４  補助記憶装置
３５  メモリ装置
３６  ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）
３７  ネットワーク接続装置
３８  記録媒体
【図１】
2013109532.tif 000003
【図２】
2013109532.tif 000004
【図３】
2013109532.tif 000005
【図４】
2013109532.tif 000006
【図５】
2013109532.tif 000007
【図６】
2013109532.tif 000008
【図７】
2013109532.tif 000009
【図８】
2013109532.tif 000010
【図９】
2013109532.tif 000011
【図１０】
2013109532.tif 000012
【図１１】
2013109532.tif 000013
【図１２】
2013109532.tif 000014
【図１３】
2013109532.tif 000015