"予め設定されたアプリケーションによる処理を実行し、実行された処理結果を比較してデータの診断及び修復を行う診断修復装置において、所定のデータを3以上の複数のデータ領域に記憶する記憶手段と、前記所定のデータを前記3以上の複数のデータ領域に異なる形式で書き込み、前記アプリケーションの実行時に前記3以上の複数のデータ領域にそれぞれ書き込んだデータを読み込んで照合し、照合の結果が不一致であった場合に所定の修復を行い、修復後のデータを用いて前記アプリケーションを実行する処理プログラム実行手段と、前記アプリケーションを実行した結果と、少なくとも1つの他の診断修復装置で前記アプリケーションを実行した結果とを照合する照合処理手段とを有することを特徴とする診断修復装置。前記記憶手段は、前記異なる形式として、入力されたデータ、前記データの反転データ、及び前記データと所定のパターンとの論理演算により得られるパターンデータのうち、少なくとも2つの形式を前記3以上の複数のデータ領域に書き込むことを特徴とする請求項1に記載の診断修復装置。前記処理プログラム実行手段は、前記所定の修復処理として、読み出した3以上の複数のデータの多数決判定により正常データを決定し、決定された正常データを前記データ領域に書き込むことを特徴とする請求項1又は2に記載の診断修復装置。前記照合処理手段は、前記アプリケーションを実行した結果と、前記アプリケーションを実行するタイミングに同期させて前記他の診断修復装置で前記アプリケーションを実行した結果とを照合し、照合が不一致であった場合に、前記アプリケーションを前回実行して得られた結果を用いて照合を行うことを特徴とする請求項1乃至3の何れか1項に記載の診断修復装置。前記プログラム実行手段は、所定のダイバース診断手法により設定された条件で前記アプリケーションを複数回実行し、前記照合処理手段は、前記複数回実行された結果に基づいて照合を行うことを特徴とする請求項1乃至4の何れか1項に記載の診断修復装置。予め設定されたアプリケーションによる処理を実行し、実行された処理結果を比較してデータの診断及び修復を行う診断修復方法において、所定のデータを記憶手段の3以上の複数のデータ領域に記憶する記憶ステップと、前記所定のデータを前記3以上の複数のデータ領域に異なる形式で書き込み、前記アプリケーションの実行時に前記3以上の複数のデータ領域にそれぞれ書き込んだデータを読み込んで照合し、照合の結果が不一致であった場合に所定の修復を行い、修復後のデータを用いて前記アプリケーションを実行する処理プログラム実行ステップと、前記アプリケーションを実行した結果と、少なくとも1つの他の診断修復方法で前記アプリケーションを実行した結果とを照合する照合処理ステップとを有することを特徴とする診断修復方法。前記記憶ステップは、前記異なる形式として、入力されたデータ、前記データの反転データ、及び前記データと所定のパターンとの論理演算により得られるパターンデータのうち、少なくとも2つの形式を前記3以上の複数のデータ領域に書き込むことを特徴とする請求項6に記載の診断修復方法。前記処理プログラム実行ステップは、前記所定の修復処理として、読み出した3以上の複数のデータの多数決判定により正常データを決定し、決定された正常データを前記データ領域に書き込むことを特徴とする請求項6又は7に記載の診断修復方法。前記照合処理ステップは、前記アプリケーションを実行した結果と、前記アプリケーションを実行するタイミングに同期させて前記他の診断修復方法で前記アプリケーションを実行した結果とを照合し、照合が不一致であった場合に、前記アプリケーションを前回実行して得られた結果を用いて照合を行うことを特徴とする請求項6乃至8の何れか1項に記載の診断修復方法。前記プログラム実行ステップは、所定のダイバース診断手法により設定された条件で前記アプリケーションを複数回実行し、前記照合処理ステップは、前記複数回実行された結果に基づいて照合を行うことを特徴とする請求項6乃至9の何れか1項に記載の診断修復方法。コンピュータを、請求項1乃至5の何れか1項に記載の診断修復装置が有する各手段として機能させるための診断修復プログラム。しかしながら、リアルタイムに読み書きするメモリにおいて、非特許文献1に示されているような複雑なECCを搭載するには、ハードウェアコストが増大してしまう。また、非特許文献1に示されている手法では、インターリーブ等の特殊な方式と併用しないと2ビット以上のデータ修正ができない。また、ECCの検出では、エラーを発生したメモリへの再書き込みを行わないため、メモリのソフトエラー修復ができない。また、従来のソフトエラーの診断は、特定のタイミング又は定期的に行われる。したがって、従来では、実際に所定の処理を行うためにメモリを読むタイミングと、診断するためにメモリを読むタイミングとが異なり、処理するデータを読み込んだタイミングでソフトエラーを検出修復できない可能性がある。つまり、ソフトエラーの診断では、エラー検出修復タイミングと、処理に使用するためのメモリ読み込みタイミングとが同時であり、エラー検出修復したデータを用いて処理をする必要がある。また、特許文献1に示されているような方法は、メモリを取り出す時にエラーを検出するが、その検出方法が不明確である。例えば、特許文献1には、パリティチェックの記載があるが、パリティチェックではエラー検出能力が低い。また、特許文献1の手法では、エラーが発生したメモリへの再書き込みを行わないため、メモリのソフトエラーの修復ができない。また、特許文献2に示されているような手法は、監視する時期が指定されておらず、所定の処理を行う場合に使用するタイミングでメモリのソフトエラーを検出することができず、エラーデータで処理する可能性があり、データの信頼性を担保できない。また、特許文献2に示されている手法では、対象がEPROMErasableProgrammableReadOnlyMemory,EEPROMElectricallyErasableProgrammableRead-OnlyMemoryを想定しており、RAMRandomAccessMemoryについてのソフトエラーの検知及び修復については示されておらず、またチェックコードが必要になる等の処理の負荷が増加するため、リアルタイムでのメモリ使用には適用できない。更に、非特許文献2に記載されているIEC61508-7A.5.7DoubleRAMは、メモリアクセス時にソフトエラーを検出できるが、データの修復及びソフトエラーの修復ができない。したがって、上述したような手法では、メモリ等を用いたシステム上のデータ処理の安全性及び継続性を向上させることができなかった。本発明は、上述した課題に鑑みてなされたものであって、メモリを用いたデータ処理の安全性及び継続性を向上させるための診断修復装置、診断修復方法、及び診断修復プログラムを提供することを目的とする。上述した課題を解決するために、本発明は、以下の特徴を有する課題を解決するための手段を採用している。本発明は、予め設定されたアプリケーションによる処理を実行し、実行された処理結果を比較してデータの診断及び修復を行う診断修復装置において、所定のデータを3以上の複数のデータ領域に記憶する記憶手段と、前記所定のデータを前記3以上の複数のデータ領域に異なる形式で書き込み、前記アプリケーションの実行時に前記3以上の複数のデータ領域にそれぞれ書き込んだデータを読み込んで照合し、照合の結果が不一致であった場合に所定の修復を行い、修復後のデータを用いて前記アプリケーションを実行する処理プログラム実行手段と、前記アプリケーションを実行した結果と、少なくとも1つの他の診断修復装置で前記アプリケーションを実行した結果とを照合する照合処理手段とを有することを特徴とする診断修復装置。また本発明は、予め設定されたアプリケーションによる処理を実行し、実行された処理結果を比較してデータの診断及び修復を行う診断修復方法において、所定のデータを記憶手段の3以上の複数のデータ領域に記憶する記憶ステップと、前記所定のデータを前記3以上の複数のデータ領域に異なる形式で書き込み、前記アプリケーションの実行時に前記3以上の複数のデータ領域にそれぞれ書き込んだデータを読み込んで照合し、照合の結果が不一致であった場合に所定の修復を行い、修復後のデータを用いて前記アプリケーションを実行する処理プログラム実行ステップと、前記アプリケーションを実行した結果と、少なくとも1つの他の診断修復方法で前記アプリケーションを実行した結果とを照合する照合処理ステップとを有することを特徴とする。また本発明は、コンピュータを、上述した診断修復装置が有する各手段として機能させるための診断修復プログラムである。なお、本発明の構成要素、表現又は構成要素の任意の組み合わせを、方法、装置、システム、コンピュータプログラム、記録媒体、データ構造等に適用したものも本発明の態様として有効である。本発明によれば、メモリを用いたデータ処理の安全性及び継続性を向上させることができる。<本発明について>本発明は、例えばリアルタイムでデータを読み書きするメモリ等の記憶手段のソフトエラーを検知し、例えば多数決原理等を用いてメモリ等のソフトエラーの修復や検証等の診断を行うことで、リアルタイム性を保持しつつ、安全性、信頼性、可用性、及びコスト面等を改善する。また、本発明では、例えばダイバースdiverse診断手法を用いて診断を実施することで、同一出力であっても処理方式を別にすることにより一過性エラー以外のCPUやメモリの異常等を、より適切に診断することができる。ここで、本発明におけるダイバース診断手法を以下のように定義する。ダイバース診断手法とは、例えば、所定の入力データを読み込み、同一のデータを出力する場合に、その入力データの読み込む機器装置等や処理方式等を別にして得られる結果を診断するものである。更に、具体的に説明すれば、ダイバース診断手法は、例えば取得したあるデータに対して何らかのデータ処理を行う場合には、そのプログラム言語の違いやアルゴリズムの違い、バージョンの違い、コンパイラの違い、コンパイラのパラメータの違い、また複数のタスクを実行する場合には、その実行順序の違い、装置の違いここで、装置の違いには、例えば同種類の2つの装置や他社製品による異なる装置といった概念も含む等といった、それぞれ異なる条件において処理された結果を用いて診断する手法をいう。なお、ダイバース診断手法における異なる条件については、本発明においてはこれに限定されるものではない。また、ダイバース診断手法により設定される条件は、上記の違いのうち何れか1つでもよく、複数を組み合わせてもよい。また、本発明では、ダイバースにより得られるそれぞれの誤差範囲やデータの誤差範囲について、予め設定しておき、その設定された範囲において一致しているか否かを判断したり、適宜多数決により、その処理結果が正常か異常かを判断することによりソフトエラーの安全性を向上させる。以下に、本発明における診断修復装置、診断修復方法、及び診断修復プログラムを好適に実施した形態について、図面を用いて説明する。<診断修復装置のブロック構成例>図1は、本実施形態における診断修復装置のブロック構成の一例を示す図である。ここで、図1に示す診断修復装置10-1,10-2は、複数の診断修復装置が多重化されていることを示すものであり、各装置を区別するため10-1,10-2としているが、これらは同一の構成を有している。そこで、以下の説明では、便宜上、診断修復装置10-1のみを用いて各構成による機能を説明する。また、本実施形態における診断修復装置10-1,10-2は、各CPU例えば、CPU1,CPU2等で処理される機能として定義することもできる。診断修復装置10-1は、記憶手段としてのメモリ11と、データ管理テーブル12と、構造体定義ファイル13と、処理プログラム実行手段14と、照合データファイル15と、照合処理手段16と、通信手段17と、時間管理手段18とを有するよう構成されている。メモリ11は、例えばリアルタイムに読み書き可能なメモリ例えば、RAM等である。また、メモリ11は、内部に複数のデータ領域を有する。図1の例では、メモリ11内の複数のデータ領域のうち、ソフトエラーを検出及び修復対象とする領域を、データ領域1、データ領域2、データ領域3に区分して管理する。なお、本実施形態において、データ領域の数はこれに限定されるものではないが、データ領域のデータを用いて多数決による判定を行う場合もあるため、データ領域の数は3以上の奇数であることが好ましい。また、本実施形態では、所定の処理内容にて処理されるデータを格納する領域としてレジスタ等を有していてもよく、その他にもアクセスするデータを一時的に保存するキャッシュメモリ等を有していてもよい。データ管理テーブル12は、処理プログラム14に含まれるデータ書込関数14a及びデータ読込関数14bの何れか、又は、両方の関数からアクセスできる共通領域に配置され、メモリ11のデータ領域の先頭アドレスを管理する。構造体定義ファイル13は、データ書込関数14a及びデータ読込関数14bの何れか、又は、両方の関数からアクセスできる共通領域に配置され、例えば各データ名、当該データ名のバイト数、当該データ名の先頭の相対アドレス等を定義した情報を管理する。ここで、例えば上述した各関数がC言語の場合には、プロブラムのコンパイル時等のように診断修復装置10-1CPUが実際の処理を実行する前に、予め設定された構造体定義データ21から取得したデータを変換して構造体定義ファイル13として構築することもできる。処理プログラム実行手段14は、少なくともデータ書込関数14a及びデータ読込関数14bを有する。データ書込関数14aは、メモリ11内のデータ領域に所定のデータを所定の形式等で書き込むための関数である。また、データ読込関数14bは、メモリ11内のデータ領域からデータを読み込み、メモリの診断やデータ及びソフトエラーの修復等を行うための関数である。つまり、処理プログラム実行手段14は、ソフトエラー検出対象のデータの書き込みや読み込みを行うアプリケーション処理プロブラムとして、データ書込関数14a及びデータ読込関数14bを有する。更に、処理プログラム実行手段14は、各種アプリケーション14cを有する。各種アプリケーション14cには、異なる処理を行う複数のアプリケーションが含まれている。処理プログラム実行手段14は、予め設定された処理内容に応じて各種アプリケーション14cからアプリケーションを選択し、選択したアプリケーションに対応した処理プログラムアプリケーション処理プログラムを実行し、実行した結果を照合データファイル15に出力する。ここで、各種アプリケーション14cによるアプリケーション処理プロブラムは、例えば診断修復装置10-1CPU1と診断修復装置10-2CPU2とで同じ入力に対し、所定の制御命令等により同じ出力をするプロブラムである。つまり、アプリケーション処理プロブラムは、例えば上述したCPU1とCPU2とで同じアルゴリズムで処理をするか、又は上述したダイバース診断手法を適用し、入力に対して別の処理アルゴリズム等を用いた処理を行い、同じ出力をするといったダイバース化による処理を行う。本実施形態では、ダイバース化を行うことで、例えばプログラムや設計のミス等による共通原因の故障を検出し回避することができる。照合データファイル15は、例えば診断修復装置10-1CPU1における処理プログラム実行手段14の処理結果と、診断修復装置10-2CPU2における処理プログラム実行手段14の処理結果とを照合することで、修復したデータを検証して診断するためのデータを格納する。なお、照合データファイル15は、今までの処理結果の履歴情報例えば、前回データ、今回データ等を格納することもできる。照合処理手段16は、照合処理として、例えば診断修復装置10-1における処理プログラム実行手段14の処理結果と、診断修復装置10-2における処理プログラム実行手段14の処理結果とを照合することで、所定結果が一致しているか否かを確認し、修復したデータを検証して診断するための処理を行う。なお、一致しているか否かの判断は、完全一致に限定されるものではなく、例えば所定の誤差範囲にあるか否かにより判断してもよい。また、照合処理手段16は、多重化された診断修復装置のそれぞれの今回分の処理結果データ今回データを対象に照合を行ってもよく、各診断修復装置における処理のタイミング等に対応させて、例えば前回分の処理結果データ前回データ等を用いて照合を行ってもよい。通信手段17は、診断修復装置10-1と診断修復装置10-2とで、データの送受信を可能とする。具体的には、通信手段17により、例えば診断修復結果の照合等を行う。時間管理手段18は、処理プログラム実行手段14において予め設定された少なくとも1つの処理アプリケーションを実行させるための時間を管理する。また、時間管理手段18は、多重化された他の診断修復装置との実行の同期を取るための時間を管理する。したがって、多重化された各診断修復装置10における各時間管理手段18は、通信ネットワーク等により同期が取れるように接続されていてもよい。なお、本実施形態においては、これに限定されるものではなく、例えば各診断修復装置10の処理プログラム実行手段14で同期させて所定の処理が実行されるように制御する管理制御装置等を設け、その管理制御装置から多重化された各診断修復装置10に対して所定の処理を実行させる時間情報を出力するようにしてもよい。これにより、本実施形態では、時間管理によるリアルタイムな診断修復処理を実現することができる。構造体定義データ21は、外部から取得されるデータの構造体が定義されたデータである。本実施形態では、構造体定義データ21を変換して構造対定義ファイル13を取得しているが、本発明においてはこれに限定されるものではなく、例えば構造体定義ファイル13そのものを外部から直接取得してもよい。なお、外部からの取得は、他の装置からインターネットやLANLocalAreaNetwork等の通信ネットワークを介して取得してもよく、ユーザ等からの入力により設定されてもよい。ここで、診断修復装置10-2は、多重化した診断修復装置10-1と同等のブロック構成を有し、上述した各機能に対応する処理を行う。なお、診断修復装置10-2は、多重化した診断修復装置10-1と並行して処理を行ったり、異なるタイミングで処理を行うことができ、これらはユーザ等により予め設定することができる。また、図1の例において、診断修復装置10-2CPU2は、診断修復装置10-1CPU1と並列二重化システムを構成しているが、本発明においてはこれに限定されるものではなく、診断修復装置10を三重以上の構成にして多重化システムを構成してもよい。<診断修復の概要について>ここで、本実施形態における診断修復の概要について図を用いて説明する。図2は、本実施形態における診断修復の概要について説明するための図である。本実施形態では、図2に示すように、リアルタイムに読み書きするメモリ11について、以下の手順で、メモリの診断、読み込みデータの修復、及びメモリ11のソフトエラーの修復を行う。なお、図2では、上述したデータ領域1~3をそれぞれメモリ11-1~11-3とする。まず、本実施形態では、図2の1に示すように、データ書き込み時に、所定のデータを例えば3つの異なる形式でデータ領域へ書き込む。書き込むデータ形式は、例えばそのままのデータ正データや、正データを16進数ffffハイバリューオールfでEOR排他的論理和演算したデータ反転データ、正データを予め設定された1又は複数の異なる所定のパターン例えば、16進数aaaa、abcd、4321、0a0a等でEOR演算したデータパターンデータとし、それらのデータを選択的に用いてソフトエラー以外のビットエラー等のエラー検出もできるようにする。更に、本実施形態では、後述する図2の5に示す照合処理を行うことで、データの信頼性を向上させ、チェックサム等の付加的データを不要とする。なお、上述した所定のパターンは、16進数aaaaのように同一数字が連続するものでもよく、16進数1234,4321のように昇順、降順になったものでもよく、16進数0a0aのように所定の2以上の値を交互に配列されたものでもよい。また、上述したデータのパターンは、処理毎に変更してもよく、常に予め設定されたパターンに固定されていてもよい。更に、本実施形態における演算内容は、上述したEOR演算に限定されるものではなく、例えば論理積演算等の所定の演算を用いてもよく、各処理毎や処理データの内容に応じて演算手法を任意に設定してもよい。なお、上述した16進数ffffやaaaa等の付加データの桁数は、説明の便宜上4桁で示しているが、実際には、正データのバイト数に対応させた桁数が設定される。次に、本実施形態では、処理に使用するタイミングで図2の2に示すデータの読み込みを行う。また読み込み時に図2の1の処理でメモリ11-1に書き込んだ正データと、メモリ11-2に書き込んだ16進数ffffでEOR演算した反転データとを照合して一致を確認する。ここで、照合時には、メモリ11-2から得られた反転データを、16進数ffffでEOR演算する前のデータに戻してから照合を行う。なお、一致しているか否かの判断は、完全一致に限定されるものではなく、例えば所定の誤差範囲にあるか否かにより判断してもよい。照合の結果が不一致の場合には、メモリエラーと判断する。更に、本実施形態では、メモリ11-3に書き込んだパターンデータを用い、上述した正データと照合して一致を確認する。なお、パターン処理と照合する場合には、例えばデータ3のパターンデータを16進数aaaaが付加される前に戻した後に、データ1と照合する。つまり、ここでの照合は、正データ、反転データ、パターンデータの3つのデータで照合して一致を確認する。次に、本実施形態では、図2の3の処理として、上述した図2の2の処理でメモリエラーが発生したと判断した場合に、メモリ11-1~11-3で書き込んだ3つの領域のデータで多数決を行い、多数のものを正常データと判定する。つまり、上述の例では、3つのデータのうち、同じデータが2つあるデータを正常データとする。また、判定により得られた正常データを実際の所定の処理に使用すると共に、当該正常データをメモリエラーと判定されたメモリに所定の形式で書き込み、ソフトエラーを修復する。次に、本実施形態では、図2の4の処理として、メモリエラーと判定したメモリ図2の例では、メモリ11-1に書き込んだデータを再読み込みし、書き込んだデータと再読み込みしたデータとが一致するか否かを判定し、一致しない場合には、ハードエラーとみなして、所定のハードエラー処理を行う。次に、本実施形態では、図2の5の処理として、二重系以上の多重化システムで、当該システム例えば、CPU1で修復したデータを使用した処理結果と、他システム例えば、CPU2における該当する処理結果との照合を行う。この照合において、一致した場合には、修復データが正しいことが検証される。また、一致しない場合には、エラーとして所定のエラー処理を行う。なお、図2の例では、本実施形態では、メモリ11-1に正データ、メモリ11-2に反転データ、メモリ11-3にパターンデータを書き込んだが、本発明においてはこれに限定されるものではなく、例えばメモリ11-2,11-3にそれぞれ異なるパターンを正データに付加したパターンデータを書き込んでもよい。更に、本実施形態では、例えばデータ領域を5つ用意し、そのうちの1つには正データを書き込み、残りの4つには、反転データを2つ、異なるパターンを用いて得られたパターンデータを2つ書き込んでもよく、また4つとも異なるパターンを用いて得られたパターンデータを書き込んでもよい。どのデータ領域にどのようなデータを書き込むかについては、データの内容等に応じて選択的に設定することができる。<ハードウェア構成例>ここで、上述した診断修復装置1010-1,10-2を含むにおいては、各機能をコンピュータに実行させることができる実行プログラム診断修復プログラムを生成し、例えば汎用のパーソナルコンピュータ、サーバ等にその実行プログラムをインストールすることにより、本発明における診断修復処理等を実現することができる。ここで、本実施形態における診断修復処理が実現可能なコンピュータのハードウェア構成例について図を用いて説明する。図3は、本実施形態における診断修復処理が実現可能なハードウェア構成の一例を示す図である。図3におけるコンピュータ本体には、入力装置31と、出力装置32と、ドライブ装置33と、補助記憶装置34と、メモリ装置35と、各種制御を行うCPU36と、ネットワーク接続装置37とを有するよう構成されており、これらはシステムバスBで相互に接続されている。入力装置31は、ユーザ等が操作するキーボード及びマウス等のポインティングデバイスを有しており、ユーザ等からの各種プログラムの実行指示等の各種操作信号を入力する。出力装置32は、本発明における処理を行うためのコンピュータ本体を操作するのに必要な各種ウィンドウやデータ等を表示するディスプレイを有し、CPU36が有する制御プログラムにより、上述したアプリケーション処理プロブラム等の各種プログラムの実行経過や結果等を表示することができる。ここで、本発明においてコンピュータ本体にインストールされる実行プログラムは、例えばUSBUniversalSerialBusメモリやCD-ROM等の可搬型の記録媒体38等により提供される。プログラムを記録した記録媒体38は、ドライブ装置33にセット可能であり、記録媒体38に含まれる実行プログラムが、記録媒体38からドライブ装置33を介して補助記憶装置34にインストールされる。補助記憶装置34は、ハードディスク等のストレージ手段であり、本発明における実行プログラムやコンピュータに設けられた制御プログラム、本発明における診断修復処理を実行するために必要な各種データ例えば、データ管理テーブル12、構造体定義ファイル13、照合データファイル15等等を蓄積し、必要に応じて入出力を行うことができる。メモリ装置35は、上述したメモリ11に相当する記憶手段である。また、メモリ手段35は、CPU36により補助記憶装置34から読み出された実行プログラム等を格納する。なお、メモリ装置35は、RAMやROMReadOnlyMemory等からなる。CPU36は、例えばOSOperatingSystem等の制御プログラム、及びメモリ装置35等に格納されている実行プログラム、処理プログラム実行手段14等が有するアプリケーション処理プログラム等に基づいて、各種演算や各ハードウェア構成部とのデータの入出力等、コンピュータ全体の処理を制御して、診断修復処理における各処理を実現することができる。なお、プログラムの実行中に必要な各種情報等は、補助記憶装置34から取得することができ、また実行結果等を格納することもできる。ネットワーク接続装置37は、通信ネットワーク等と接続することにより、実行プログラム等を通信ネットワークに接続されている外部装置等から取得ダウンロードしたり、プログラムを実行することで得られた実行結果又は本発明における実行プログラム自体を外部装置等に提供することができる。また、ネットワーク接続手段37は、通信ネットワーク等を介して外部装置から、本発明における診断修復処理を実施するために必要な各種データ例えば、構造体定義データ21等を取得することができる。上述したようなハードウェア構成により、本発明における診断修復処理を実行することができる。また、プログラムをインストールすることにより、汎用のパーソナルコンピュータ等で本発明における診断修復処理を容易に実現することができる。<診断修復処理手順>次に、本実施形態における診断修復処理手順の一例について、フローチャートを用いて説明する。図4は、診断修復処理手順の一例を示すフローチャートである。図4において、診断修復処理は、上述したアプリケーション処理プロブラム等を用いて処理が行われる。まず、診断修復処理は、データ書込関数14aを呼び出し、予め設定されたメモリ11内の複数のデータ領域に対して、所定のデータを所定の形式で書き込む処理を実行するS01。このとき、所定の形式とは、例えば上述したように、そのままのデータ正データ、正データの反転データ、正データに所定のパターンを付加したパターンデータ等から任意に選択される。次に、診断修復処理は、データ読込関数を呼び出して対応する処理を実行するS02。具体的には、各データ領域のデータを読み出して照合により一致を確認する。ここで、診断修復処理は、照合結果に基づくデータ読込関数の関数値が正常終了であるか否かを判断するS03。なお、S03の処理では、例えば正常終了であるか、データ修復処理を行うか、異常終了であるかが判断される。診断修復処理は、S03の処理において、データ修復処理を行うと判断された場合、所定のデータ修復を行い、修復したデータをメモリ11内の所定のデータ領域に記憶するデータ修復処理を行うS04。なお、所定のデータ領域とは、照合の結果が一致しなかったデータ領域のみであってもよく、全データ領域であってもよい。また、S03の処理において、正常終了であると判断された場合、又は、上述したS04の処理が終了した場合には、予め設定された少なくとも1つのアプリケーション処理プログラムを実行する所定のアプリケーション処理を行うS05。また、その処理結果を照合処理データとして、例えば実行した各処理を識別するための処理番号と、照合処理データと、データ修復の有無とを含む情報を照合データファイル15に書き込むS06。その後、診断修復処理は、例えば多重化された他の診断修復装置における所定の処理の結果が書き込まれた照合処理データファイルとの照合処理を行うS07。なお、本実施形態では、S07の処理を行わなくてもよい。また、診断修復処理は、上述するS03の処理において、異常終了であると判断された場合、その旨をユーザ等に通知する所定の異常処理を行うS08。また、本実施形態では、メモリのハードエラーをデータ読込関数14bの実行時等に検知した場合、メモリハードエラーに対応する所定の異常処理等を行う。ここで、上述した照合データファイル15に書き込まれる処理番号とは、例えば処理プロブラム毎に付与された診断修復装置CPU内で一意の番号であり、例えば多重化された2つの診断修復装置CPU1とCPU2において、同一の処理を行う処理プログラムに対しては、同一の処理番号が付与される。また、上述した照合処理データは、所定のアプリケーション処理の結果として生成されたデータ等を示す。更に、上述したデータ修復処理におけるデータ修復の有無の判断は、例えば実際にデータ修復を行った場合に、データ修復ありを示すフラグや文字、識別情報等をセットする。<データ書込関数14aの処理手順>次に、上述したデータ書込関数の処理手順例について、フローチャートを用いて説明する。図5は、データ書込関数の処理手順の一例を示すフローチャートである。また、図6は、図5のデータ書込関数処理手順に対応するデータの書き込みの一例を示す図である。ここで、本実施形態におけるデータ書込関数14aのパラメータは、書込データ名と書込データである。以下の説明では、関数の記述例として、例えばrinf=wsdata[3]=20の場合を示す。これは、書込データ名が、後述する図8bで定義したように整数型aの3番目相対値、書込データが20であることを示している。更に、rinfは関数値であるが、本実施形態におけるデータ書込関数14aでは使用しない。なお、本実施形態では、書込データ名と書込データとを指定する例を記載しているが、本発明においてはこれに限定されるものではなく、他の関数を用いて、例えば書込アドレスが連続したデータを書込先頭相対アドレスと、書込データバイト数と、書込データとをパラメータとして、各データを関連付けて一括で書き込むこともできる。図5の例において、データ書込関数14aは、データ管理テーブル12と構造体定義ファイル13とを読み込み、書込先頭アドレスを計算するS11。なお、S11の処理における計算例は、例えば書込先頭アドレス=データ領域1先頭アドレス書込データ名先頭アドレス相対値-1×データ名バイト数のような式を用いて算出することがきるが、本発明においてはこれに限定されるものではない。次に、データ書込関数14aは、パラメータのデータを構造体定義ファイル13のデータ名に対応するバイト数分書き込むS12。例えば、整数型の場合には、2バイト書き込まれる。次に、データ書込関数14aは、データ管理テーブル12からデータ領域2の先頭アドレスを読み込み、構造体定義ファイル13から書込先頭アドレスを計算するS13。S13の処理における計算は、例えば上述したS11における処理の計算に対してデータ領域先頭アドレスが変わるのみであり、具体的には、書込先頭アドレス=データ領域2先頭アドレス書込データ名先頭アドレス相対値-1×データ名バイト数のような式を用いて算出することができるが、本発明においてはこれに限定されるものではない。次に、データ書込関数14aは、書込データに例えば16進数ffffのEOR演算を付加しS14、その付加したデータ反転データを対応するデータ型のバイト数で書き込むS15。そのとき書き込むアドレスは、上述したS13の処理で計算したアドレスに書き込む。次に、データ書込関数14aは、データ管理テーブル12からデータ領域3の先頭アドレスを読み込み、構造体定義ファイル13から書込先頭アドレスを計算するS16。なお、ここでの計算は、例えば上述したS01の処理での計算と同様にデータ領域先頭アドレスが変わるのみである。具体的には、書込先頭アドレス=データ領域3先頭アドレス書込データ名先頭アドレス相対値-1×データ名バイト数のような式を用いて算出することができるが、本発明においてはこれに限定されるものではない。次に、データ書込関数14aは、書込データに例えば所定のパターンである16進数aaaaのEOR演算を付加しS17、その付加したデータパターンデータをS16の処理にて計算されたアドレスから対応するデータ型のバイト数で書き込むS18。上述した処理により、図6に示すように、先頭相対アドレスからa[3]の領域に整数型2バイト×40のデータが書き込まれる。<データ管理テーブル12について>ここで、上述したデータ管理テーブル12の具体例について図を用いて説明する。図7は、データ管理テーブルの一例を示す図である。図7に示すデータ管理テーブルは、項目として、例えば番号、名称等を有しているが、本発明においてはこれに限定されるものではない。データ管理テーブル12は、メモリ11内に設定された複数のデータ領域が番号で識別され、各番号毎に、データ書込関数14a及びデータ読込関数14b内で使用されるメモリ11内の各データ領域の先頭アドレスが格納される。なお、先頭アドレスが変わる場合には、対象のデータ領域のアドレスが更新される。<構造体定義ファイル13について>次に、上述した構造体定義ファイル13の具体例について図を用いて説明する。図8は、構造体定義ファイルの一例を示す図である。なお、図8aは、構造体定義データ21を示し、図8bは、図8aの構造体定義データ21から得られる構造体定義ファイル13を示し、図8cは、メモリ割り付けの一例を示している。図8aに示す構造体定義データ21は、例えばC言語を使用する場合の構造体定義データ21の例を示している。ここで、charは文字型であり1文字1バイトで構成されている。また、intは、整数型であり1データ2バイトで構成されている。またlongは、倍長整数型であり1データ4バイトで構成されている。また、doubleは、倍精度実数型であり1データ8バイトで構成されている。なお、各型例えば、整数型等のデータ名は、複数設定することもできる。また、[n]は、データ領域がnデータ分であることを示している。図8bに示す構造体定義ファイル13は、図1に示すデータ書込関数14a及びデータ読込関数14bの何れか、又は、両方の関数からアクセスできる共通領域に配置され、例えばデータ名、当該データ名のバイト数、当該データ名の先頭の相対アドレス等を管理する。なお、図8bに示す構造体定義ファイル13の項目としては、例えばデータ名、バイト数、先頭相対アドレス等があるが、本発明においてはこれに限定されるものではない。本実施形態では、図8aに示す構造体定義データ21の入力し、各データをテーブルに変換して、図8bに示す構造体定義ファイル13が構築される。図8cでは、構造体定義ファイル13をメモリ11へ割り付けした例を示している。ここで、上述した図1の例では、メモリ11内のデータ領域は3つあるため、同じ領域割り付けがメモリ11内の3か所に所定の形式例えば、文字型、整数型、倍長整数型、倍精度実数型等のデータタイプやデータタイプに対応するバイト数等で設定される。<データ読込関数14bの処理手順>次に、上述したデータ読込関数14bの処理手順例についてフローチャートを用いて説明する。図9は、データ読込関数の処理手順の一例を示すフローチャートである。ここで、本実施形態におけるデータ読込関数14bのパラメータは、読込データ名と読込レジスタ名である。また、関数値は、例えば正常、異常、データ修復の3種類である。以下の説明では、関数の記述例として、rinf=rsdatb[5],xの場合を示す。これは、読込データ名が、上述した図8で定義したように倍長整数型bの5番目相対値、読込データ格納領域がxであることを示す。また、rinfは関数値であるが、本実施形態におけるデータ読込関数14bでは使用しない。なお、本実施形態では、読込データ名と読込レジスタ名とを指定する例を記載しているが、本発明においてはこれに限定されるものではなく、他の関数を用いて、例えば読込アドレスが連続したデータを読込先頭相対アドレスと、読込データバイト数と、読込データ領域とをパラメータとして、各データを関連付けて一括して読み込むこともできる。図9の例において、データ読込関数14bは、データ管理テーブル12と構造体定義ファイル13とを読み込み、データ領域1、2、3の読込先頭アドレスを計算するS21。なお、S21の処理における計算例は、例えば読込先頭アドレス1=データ領域1先頭アドレス読込データ名先頭アドレス相対値-1×データ名バイト数、読込先頭アドレス2=データ領域2先頭アドレス読込データ名先頭アドレス相対値-1×データ名バイト数、読込先頭アドレス3=データ領域3先頭アドレス読込データ名先頭アドレス相対値-1×データ名バイト数のような式を用いて算出することができるが、本発明においてはこれに限定されるものではない。次に、データ読込関数14bは、読込アドレス1,2,3から、各データ領域に書き込まれているデータを所定の読込データバイト数で読み込むS22。このときのそれぞれの読込データを、便宜上データ1,2,3とする。次に、データ読込関数14bは、データ2を16進数ffff、データ3を所定のパターンデータ16進数aaaaでEOR演算するS23。このときのそれぞれのデータを、便宜上データa,データbとする。具体的には、例えばデータa=データ2EOR16進数ffff、データb=データ3EOR16進数aaaaの演算を行う。上述の処理は、データ書込関数14aにより、データ領域2データ2には正データに対して16進数ffffを付加した反転データが書き込まれ、データ領域3データ3には正データに対して16進数aaaaを付加したパターンデータが書き込まれているため、これらのデータを付加前のデータに戻すために、同一の付加データを用いてEOR演算を行う。なお、上述したデータ書込関数14aで付加データをEOR演算以外の演算手法で付加した場合、データ読込関数14bは、その付加データの内容や演算手法等に対応させて、データ2及びデータ3が付加前のデータに戻るような付加データや演算手法を用いて処理が行われる。次に、データ読込関数14bは、データ1と、データa,bとを照合し、データの一致を確認するS24。ここで、3つのデータが一致しているか否かを判断しS25、一致していない場合S25において、NO、次に、2つのデータが一致しているか否かを判断するS26。ここで、データ読込関数14bは、2つのデータが一致している場合S26において、YES、当該一致データを読込データの正常データとするS27。次に、データ読込関数14bは、正常データを不一致データのアドレスに書き込むS28。ここで、例えばキャシュメモリを使用している場合には、キャッシュメモリのみが更新されるため、キャッシュメモリをスルーして、不一致データのアドレスに書き込むようにする。つまり、上述したキャッシュメモリをスルーするとは、例えばキャッシュメモリとメモリ11内の所定のデータ領域の両方に正常データを書き込むことを意味する。次に、データ読込関数14bは、当該書込データのアドレスからデータを読み込むS29。なお、この場合にもキャシュメモリをスルーする。ここで、上述したキャッシュメモリをスルーするとは、例えばキャッシュメモリからではなく、メモリ11内の所定のデータ領域からデータを読み込むことを意味する。次に、書込データと読込データとが一致しているか否かを判断しS30、一致している場合S30において、YES、メモリデータが修復されたと判断し、発生したエラーはソフトエラーと判断する。その後、データ読込関数14bは、関数値にデータ修復を設定しS31、関数の処理を終了する。また、データ読込関数14bは、S30の処理において、書込データと読込データとが一致していない場合S30において、NO、S28におけるリライト処理でもデータが修復しないため、ハードエラーと判断し、関数値に異常を設定しS32、関数を終了する。なお、データ読込関数14bは、S26の処理において、2つのデータが一致していない場合S26において、NO、3つ全てのデータが一致していないことになるため、エラーと判断し、関数値に異常を設定するS32。また、データ読込関数14bは、上述したS25の処理において、3つのデータが一致する場合S25において、YES、関数値に正常終了を設定し、データ1を正常データとしS33、関数の処理を終了する。<照合処理手順>次に、上述した照合処理手順の一例についてフローチャートを用いて説明する。図10は、照合処理手順の一例を示すフローチャートである。図10に示す照合処理は、例えばある診断修復装置10CPUでの一連の処理シーケンスが完了した時点で起動する。したがって、一定周期の起動で一連の処理シーケンスを行うシステムでは、同様に一定周期で照合処理が起動する。ここで、以下の説明では、照合先CPUをCPU1とし、照合元CPUをCPU2とし、各照合データファイルには、所定のアプリケーション処理を実施した今回分と前回分の処理結果今回データ、前回データが存在するものとする。また、本実施形態において、例えば照合元CPUCPU2でデータ修復をした場合には、照合先CPUCPU1へ当該処理番号と照合処理データとを送信し、照合を依頼する。また、本実施形態において、例えば照合先CPUCPU1が照合失敗と判断した場合には、照合元CPUCPU2で所定の異常処理を行う。また、本実施形態において、照合先CPUCPU1は、照合元CPUCPU2から照合データデータ修復をした処理番号と照合処理データを受信し、その受信した照合データから所定の照合処理を行い、照合成功/照合失敗を照合元CPUCPU2に送信する。この場合、照合先CPUCPU1は、正常であるため、異常処理は行わない。ここで、CPU1とCPU2とは、互いに照合先と照合元とになり得るため、照合元と照合先との両方のCPUにて照合処理が行われることになる。なお、本実施形態では、これに限定されるものではなく、例えば予め設定したCPUのみで照合処理を行ってもよい。以下の説明では、照合元と照合先との両方の機能を持つ照合処理手順について説明する。まず、照合処理は、照合送信データを作成するS41。具体的には、例えば照合データファイル15のデータ修復ありのアプリケーション処理番号と当該アプリケーション処理番号の照合処理データとで照合先のCPUへ送信する伝文照合データを作成する。次に、照合処理は、照合先のCPUへ照合データを送信するS42。なお、メモリの修復がない場合には、アプリケーション処理番号を0とし、照合処理データを空欄として送信する。なお、本実施形態では、アプリケーション処理番号が0の場合に、照合処理データを送信しなくてもよい。次に、照合処理は、照合元のCPUから照合データを受信するS43。なお、受信した伝文照合データの構成は、送信した伝文と同じく、例えば照合データファイルのデータ修復ありのアプリケーション処理番号及び照合処理データであり、データ修復がない場合にはアプリケーション処理番号が0である。ここで、照合処理は、照合元での修復なし、すなわち処理番号が0処理番号=0であるか否かを判断するS44。照合処理は、処理番号が0でない場合S44において、NO、照合データファイル15の今回データの処理番号及び当該処理番号の照合処理データに、受信したアプリケーション処理番号及び照合処理データと一致するものがあるか否かを判断するS45。照合処理は、一致するものがない場合S45において、NO、照合データファイル15の前回データの処理番号及び当該処理番号の照合処理データに、受信したアプリケーション処理番号及び照合処理データが一致するものがあるか否かを判断するS46。ここで、照合処理は、一致するものがある場合S46において、YES、S44の処理において処理番号=0である場合S44において、YES、又はS45の処理において、照合処理データが一致する場合S45において、YES、照合成功を照合元CPUへ送信するS47。また、照合処理は、S46の処理において、一致しない場合S46において、NO、照合失敗を照合先CPUへ送信するS48。次に、照合処理は、照合結果として照合成功又は照合失敗のデータを照合先から受信しS49、受信データとの照合が失敗であるか否かを判断するS50。ここで、照合失敗である場合S50において、YES、その旨をユーザ等に通知する所定の異常処理を行うS51。異常処理では、メモリ修復の検証が不成功となったため、当該状況に対応して予め設定された異常処理を行う。また、照合処理は、照合が成功した場合S50において、NO、照合処理を終了する。<照合の具体例と照合データファイル15について>次に、本実施形態における照合の具体例と照合データファイル15の具体例について図を用いて説明する。図11は、照合先の処理が先行している場合の照合処理を説明するための図である。また、図12は、照合先の処理が遅行している場合の照合処理を説明するための図である。また、図13は、照合データファイルの一例を示す図である。ここで、図11及び図12は、時間軸における各処理の通信タイムチャートを示しており、例えば、処理番号1→処理番号2→処理番号3→照合処理を1つのサイクルとして、照合元CPUCPU2で2回A1,A2及び照合先CPUCPU1で2回B1,B2の処理が、同期と取りながら繰り返し処理を行っている。また、図11及び図12では、一例としてa処理番号2の入力に変化がない場合と、b処理番号2の入力に変化がある場合とを示している。また、図13に示す照合データファイル15は、複数の照合データの履歴情報が蓄積されている。例えば、図13aでは、今回データを示し、図13bは、前回データを示しているが、本発明においてはこれに限定されるものではなく、更に過去のデータを蓄積しておいてもよい。また、今回データと前回データとの違いは、単に処理回数の違いに限定されるものではなく、例えば上述したダイバース化による処理の違い等も含む。図11及び図12の例では、A1,B1が前回データ図13bに対応し、A2,B2が今回データ図13aに対応する。図13に示す照合データファイル15の項目としては、例えば処理番号、照合処理データ、データ修復等があるが、本発明においてはこれに限定されるものではない。例えば、図13aに示す今回データは、照合先CPUCPU1の最新のデータを格納する。また、処理番号は、CPUのアプリケーション処理単位に一意に付加した番号である。同一処理番号では、CPU1とCPU2とが同じデータを入力し、処理結果となるようにアプリケーション処理として所定の処理を実行させる。このとき、上述したダイバース化によるアプリケーション処理を行ってもよい。また、照合データファイル15には、各アプリケーション処理の時系列の順番に処理番号を格納する。照合処理データは、当該処理番号のアプリケーション処理の処理結果を格納する。したがって、例えば、処理番号2において12=3の演算処理所定のアプリケーション処理プログラムを行った場合には、処理番号2の照合処理データは3となる。また、照合データファイル15のデータ修復の項目には、当該処理をするためのメモリデータでデータ修復が発生したか否かの有無を格納する。また、図13bに示す前回データは、照合先CPUCPU1で一連の処理シーケンスが完了し、上述した図10に示すような照合処理が完了した時点で図13aに示す今回データをコピーしたものである。この時点で図10aの今回データの領域は初期化される。ここで、処理番号は、照合先CPUCPU1と照合元CPUCPU2とで周期的に同一処理をしているため、両方のCPUとも同じ番号が周期的に繰り返される。次に、照合の具体例について説明する。図11及び図12に示すCPU1及びCPU2は、上述した診断修復装置10の機能を有し、互いに照合先にも照合元にもなり得る。ここで、照合先CPUCPU1と照合元CPUCPU2とは、時間管理手段18を設けてお互いの処理タイミングを同期させていたとしても各CPUの負荷や処理性能等の影響により完全に同期を取ることは困難である。そのため、本実施形態では、例えば照合先CPUCPU1が照合元CPUCPU2より先行している場合と遅行している場合とでそれぞれの処理を行う。まず、図11に示すように、照合先CPUCPU1が照合元CPUCPU2より先行し、A1で処理番号2のメモリ修復があったとしても、メモリ修復により処理番号2の内容に変化がない場合図11のa、照合先CPUCPU1のB2における照合処理では、処理番号2についての入力の変化がないため、A1の照合受信データとB2の今回データとが一致する。また、A1で処理番号2のメモリ修復があった後に処理番号2の入力変化がある場合図11のb、照合先CPUCPU1のB2における照合処理では、処理番号2の入力データに変化があるため、A1の照合受信データと、CPU1の今回データB2とは一致しない。この場合、本実施形態では、A1の照合受信データと、CPU1の前回データB1とを比較する。そして、図11bの例では、その場合にお互いのデータが一致する。このように、本実施形態では、照合処理に対して前の履歴情報例えば、前回データ等を利用することで、今回データ同士1回の照合エラーで直ちにシステムを終了させることなく、拡張した照合処理を実現することができる。これにより、本実施形態では、データ処理の安全性及び継続性を向上させたリアルタイムな診断修復処理を実現することができる。また、図12に示すように、照合先CPUCPU1が照合元CPUCPU2より遅行している場合において、A2の処理番号2のメモリ修復があったとしても、メモリ修復により処理番号2に変化がない場合図12aでも、A2の照合受信データと、CPU1の今回データB2とが一致する。また、A2で処理番号2のメモリ修復があった後に処理番号2の入力変化がある場合図12b、A2の処理番号2では、入力後にメモリ修復が行われて、処理番号2の内容が修復されているため、A2の照合受信データと、CPU1の今回データB2とが一致する。つまり、図12の例において、メモリ修復成功の場合には、処理番号2の照合処理データは、今回データと一致することになる。なお、上述した本実施形態では、3つのデータ領域に対して照合処理を行い、二重化したCPU診断修復装置10を用いて処理を行っているが、本発明においてはこれに限定されるものではなく、CPUを三重以上に多重化し、多重化したものについてそれぞれ照合処理を行って、多数決処理等により異常の有無を診断するようにしてもよい。上述したように本発明によれば、メモリを用いたデータ処理の安全性及び継続性を向上させることができる。具体的には、本発明は、RAM等のメモリに対するソフトエラーを診断検出し、読み込みデータの修復とメモリ内のデータを修復する。また、本発明では、照合が一致しない場合に、当該タイミングで予め所定の形式で書き込んだデータを読み込み、それらを多数決で修復データを判定し、読み込みデータを修復すると共に、メモリに再書き込みをすることでソフトエラーを解消する。したがって、本発明によれば、ECCハードウェアが必要なく、低コストでソフトエラーの検出及び修復をすることができる。また、本発明では、実際に所定の処理を行うタイミングでリアルタイムにソフトエラーの検出及び修復ができ、所定の処理に正しいデータを使用することができる。また、本発明では、ECCで対応できない複数ビットのエラー検出と修復を行うことができる。また、本発明では、修復後のアプリケーション処理結果を多重化システム間で照合することで、メモリデータに余分なチェックサム等の追加処理をすることなくソフトエラー修復の検証をすることができ、リアルタイムにデータ書込み、読込みが可能となる。また、本発明では、修復後のアプリケーション処理結果を多重化システム間で照合することで、メモリのソフトエラーと同時に発生したメモリ以外のCPUやレジスタ等のソフトエラーを検出することができる。また、本発明では、二重系以上の多重化システムにより修復データの正確性を照合により検証することができる。更に、本発明では、照合処理に対して、履歴情報例えば、前回データ等を利用することで、今回データ同士の照合エラーで直ちにシステムを終了させることなく、拡張した照合処理を実現することができる。これにより、本発明では、データ処理の安全性及び継続性を向上させたリアルタイムな診断修復処理を実現することができる。また、本発明では、照合もアプリケーション処理単位で行うことにより、多重化システム間で同一のアプリケーション処理を行う必要がなく、多重化システム間のアプリケーション処理のダイバーシティを確保することができる。したがって、本発明では、ソフトエラーに対するロバスト性が向上し、システムの安全性と可用性とを向上させることができる。以上本発明の好ましい実施例について詳述したが、本発明は係る特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形、変更が可能である。"