(57)【特許請求の範囲】
【請求項１】
読み出し対象として指定されたデータをメモリから読み出すとともに当該データに対応付けて前記メモリに格納された少なくとも２つのデータを前記メモリから読み出すメモリアクセス制御手段と、
前記メモリアクセス制御手段により読み出された少なくとも３つのデータの全てが同一ではない場合に多数を占めるデータを修復データとして特定するとともに少数となったデータの前記メモリにおける記憶領域を診断対象領域として特定する特定手段と、
前記診断対象領域へテストデータを書き込んだ後に前記診断対象領域からデータを読み出し、当該読み出したデータと書き込み前のテストデータとが一致する場合に前記修復データを用いて前記診断対象領域を修復する一方、一致しない場合にはハードエラーのエラー通知を行う診断修復手段と、を有し、
前記特定手段は、
前記メモリアクセス制御手段により読み出された少なくとも３つのデータのうちで多数を占めるデータの数が予め定めた閾値未満である場合には、前記エラー通知とは異なる第２のエラー通知を行う
ことを特徴とする診断修復装置。
【請求項２】
前記診断修復手段は、
互いに異なる複数のテストデータの各々を用いて、前記診断対象領域への書き込み、前記診断対象領域からの読み出し、および書き込み前との比較を行う
ことを特徴とする請求項１に記載の診断修復装置。
【請求項３】
前記診断修復手段は、構成ビットが互いに反転している２つのテストデータを用いることを特徴とする請求項２に記載の診断修復装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリについてソフトエラーの有無の診断およびソフトエラーの修復を行う技術に関する。
【背景技術】
【０００２】
ソフトエラーとは、メモリに記憶されているデータの一部のビット値が反転することを言う。ソフトエラーは、例えばアルファ線や中性子線、陽子線、重イオン線等の粒子線がメモリ素子等の半導体チップに突入することで引き起こされることが知られている。また、半導体チップの微細化が進むほどソフトエラーの発生頻度が高くなることが知られている。ソフトエラーは、メモリを構成するメモリ素子等の半導体チップの一部が物理的に壊れるハードエラーとは異なり、一時的な不良である。このため、メモリ素子をリセットしたり、データをリライト（再書き込み）したりすることによってソフトエラーを修復できることが一般に知られている。
【０００３】
ビット反転の有無の診断およびビット反転の発生したデータの修復については、誤り訂正符号（以下、「ＥＣＣ」（Ｅｒｒｏｒ  Ｃｏｒｒｅｃｔｉｏｎ  Ｃｏｄｅ）という）を利用することで実現できることが一般に知られている。より詳細に説明すると、ＥＣＣを利用することで単一ビット或いは２ビット以上が変化したのかを調べ、単一ビットだけが変化した場合にはそのビットを反転させることでデータを修復することができる。２ビット以上が変化した場合には、ＥＣＣ単独では修復できないが、既存のインターリーブ方式と併用することで、２ビット以上の誤りを修復可能となることが一般に知られている。また、ＥＣＣを利用した技術の他にも、ソフトエラーの診断等を実現する技術として特許文献１〜３および非特許文献１の各文献に開示の技術が提案されている。
【０００４】
特許文献１には、正データ（後の処理のためにメモリに書き込まれるデータそのままのデータ）と反転データ（正データの各ビットを反転させたデータ）とを予めメモリに保存しておき、正データにアクセスする時点でパリティチェックなどで異常の有無を判定し、異常があった場合には反転データを利用することが記載されている。
【０００５】
特許文献２には、電気自動車等に搭載される電動機駆動装置等のＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）或いはＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）についてのソフトエラーの有無の診断および修復技術が開示されている。より詳細に説明すると、特許文献２には、正データに加えて反転データとチェックコードをＥＰＲＯＭ等に格納しておき、車両のマスターキーが抜かれた時などの所定のタイミングでソフトエラーの有無を診断し、ソフトエラーがある場合にはその修復を行うことが記載されている。
【０００６】
特許文献３には、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が二重化された二重系システムにおけるメモリのソフトエラーの有無の診断および修復技術が開示されている。特許文献３には、メモリ内の３カ所にデータを保存し、二重系のＣＰＵの一方でアプリケーションプログラム等を実行する際に多数決でデータエラーの有無の判定および修復を行い、二重系のＣＰＵの他方を用いて修復が為されたか否かの検証を行う技術が記載されている。
【０００７】
非特許文献１にはＩＥＣ６１５０８−７  Ａ．５．７にＤｏｕｂｌｅ  ＲＡＭ  ｗｉｔｈ  ｈａｒｄｗａｒｅ  ｏｒ  ｓｏｆｔｗａｒｅ  ｃｏｍｐａｒｉｓｏｎ  ａｎｄ  ｒｅａｄ／ｗｒｉｔｅ  ｔｅｓｔによるメモリ診断方法が記載されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開平５−２１６７７１号公報
【特許文献２】特開２００２−５５８８５号公報
【特許文献３】特開２０１３−１０９５３２号公報
【非特許文献】
【０００９】
【非特許文献１】ＩＥＣ６１５０８  Ｆｕｎｃｔｉｏｎａｌ  ｓａｆｅｔｙ  ｏｆ  ｅｌｅｃｔｒｉｃａｌ／ｅｌｅｃｔｒｏｎｉｃａｌ／ｐｒｏｇｒａｍｍａｂｌｅ  ｅｌｅｃｔｒｏｎｉｃ  ｓａｆｅｔｙ−ｒｅｌａｔｅｄ  ｓｙｓｔｅｍｓ
【発明の概要】
【発明が解決しようとする課題】
【００１０】
メモリには、そのメモリの搭載されている機器の実運用の過程でデータの読み出しのみが行われるものと、任意のタイミングでデータの書き込みおよび読み出しが行われるものとがある。前者の代表例はＥＥＰＲＯＭであり、後者の代表例はＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）である。以下では、後者のメモリのことを「リアルタイムに読み書きされるメモリ」と呼ぶ。
【００１１】
リアルタイムに読み書きされるメモリについては、特定のタイミングで、または定期的にソフトエラーの有無の診断および修復を行う態様では実際に処理を実行するためにメモリからデータを読み出すタイミングと診断タイミングが一致するとは限らず、誤ったデータを用いて処理が実行される虞がある。このため、特許文献２に開示の技術は、リアルタイムに読み書きされるメモリについてのソフトエラーの有無の診断および修復には適さない。そもそも、特許文献２に開示の技術におけるデータ誤りの診断および修復対象はＥＰＲＯＭ或いはＥＥＰＲＯＭであり、ＲＡＭに格納されているデータのソフトエラーの検知や修復については考慮されていない。
【００１２】
特許文献１、特許文献３および非特許文献１に開示の技術、或いはＥＣＣを用いた技術は、リアルタイムに読み書きされるメモリについてのソフトエラーの有無の診断および修復に適用可能ではあるが、夫々以下のような問題がある。まず、特許文献１に開示の技術については、メモリからのデータの読み出しタイミングでエラーを検出することが記載されているものの、具体的な検出方法が不明確である。この検出方法について特許文献１にはパリティチェックを用いることを示唆する記載があるが、パリティチェックではエラーの検出能力が低いといった問題がある。また、特許文献１に開示の技術には、メモリの格納内容は修復されず、誤ったままになるといった問題もある。
【００１３】
特許文献３に記載の技術では、ＣＰＵの多重化が前提とされており、メモリから読み出したデータを用いて処理を実行するハードウェア（二重化されたＣＰＵのうちの一方）の他に検証のためのハードウェア（二重化されたＣＰＵのうちの他方）が別途必要になるといった問題がある。非特許文献１に記載の技術には、ソフトエラーの有無の診断はできるものの、メモリから読み出したデータの修復やメモリの格納内容の修復ができないといった問題がある。
【００１４】
ＥＣＣを利用する技術には以下のような問題がある。すなわち、ＥＣＣを用いてソフトエラーの有無の診断および修復を行う場合、ＥＣＣ対応のためにハードウェアのコストが増大する、といった問題がある。加えて、ＥＣＣを用いてソフトエラーの有無の診断および修復を行う態様には、インターリーブなどの特殊な方式と併用しない限り２ビット以上のソフトエラーを修復できないといった問題がある。また、ＥＣＣを利用した技術には、メモリから読み出したデータの誤りは訂正されるものの、メモリの格納内容は修復されず、誤ったままになるといった問題もある。
【００１５】
以上説明したように、リアルタイムに読み書きされるメモリについて、データ読出しのタイミングでソフトエラーの有無を診断し、ソフトエラーがあった場合にメモリの格納内容を修復することを、ハードウェアコストの増加を招くことなく実現する技術は従来なかった。
【００１６】
本発明は以上に説明した課題に鑑みて為されたものであり、データ読出しのタイミングでソフトエラーの有無を診断し、ソフトエラーがあった場合にメモリの格納内容を修復することを、ハードウェアコストの増加を招くことなく実現する技術、を提供することを目的とする。
【課題を解決するための手段】
【００１７】
上記課題を解決するために本発明は、以下のメモリアクセス制御手段、特定手段、および診断修復手段を有する診断修復装置を提供する。メモリアクセス制御手段は、読み出し対象として指定されたデータをメモリから読み出すとともに当該データに対応付けて前記メモリに格納された少なくとも２つのデータを前記メモリから読み出す。特定手段は、メモリアクセス制御手段により読み出された少なくとも３つのデータの全てが同一ではない場合に多数を占めるデータを修復データとして特定するとともに少数となったデータのメモリにおける記憶領域を診断対象領域として特定する。診断修復手段は、診断対象領域へテストデータを書き込んだ後に当該診断対象領域からデータを読み出し、当該読み出したデータと書き込み前のテストデータとが一致する場合には修復データを用いて診断対象領域を修復する一方、一致しない場合にはハードエラーのエラー通知を行う。
【００１８】
本発明においては、メモリアクセス制御手段により読み出された少なくとも３つのデータの全てが同一ではない場合、少数のデータは異常データと見做される。この異常データが格納されていた診断対象領域にテストデータを書き込んだ後に当該診断対象領域から読み出したデータと書き込み前のテストデータとが一致するのであれば、上記異常データはソフトエラーによるものと考えられる。ハードエラーが発生したのであれば、診断対象領域から読み出したデータと書き込み前のテストデータとが一致することはないからである。
【００１９】
本発明によれば、メモリ内の何れかの記憶領域にソフトエラーが発生したとしても、そのソフトエラーはデータ読み出しの際に修復される。このため、上記メモリがリアルタイムに読み書きされるメモリであっても、誤ったデータで処理が実行されることはなく、信頼性を担保することができる。加えて本発明では、特許文献３に開示の技術のように、検証のためのハードウェアが別途必要となることはない。つまり、本発明によれば、データ読出しのタイミングでソフトエラーの有無を診断し、ソフトエラーがあった場合にメモリの格納内容を修復することを、ハードウェアコストの増加を招くことなく実現することが可能になる。
【００２０】
より好ましい態様においては、特定手段は、メモリアクセス制御手段により読み出された少なくとも３つのデータのうちで多数を占めるデータの数が予め定めた閾値未満である場合には、ハードエラーのエラー通知とは異なる第２のエラー通知を行う。当該第２のエラー通知が為されたものの、ハードエラーのエラー通知が為されなかったのであれば、読み出し対象のデータおよび当該データに対応する少なくとも２つのデータの各々を格納する記憶領域のうち上記閾値以上の数の記憶領域においてソフトエラーが発生したことを意味する。つまり、診断修復装置のユーザは第２のエラー通知の有無を通じてソフトエラーが頻発しているか否かを把握することができる。また、第１および第２のエラー通知とともに、エラーの発見されたデータ（多数決において少数となったデータ、或いは書き込み前と一致しなかったテストデータ）そのものを通知しても良く、この場合はどのビットが怪しいかを診断修復装置のユーザに把握させることが可能になる。
【００２１】
上記テストデータは１種類だけでも良いが、互いに異なる複数のテストデータの各々を用いて、診断対象領域への書き込み、診断対象領域からの読み出し、および書き込み前との比較を行うことがより好ましく、構成ビットが互いに反転している２つのテストデータを用いて診断対象領域への書き込み、診断対象領域からの読み出し、および書き込み前との比較を行うことがさらに好ましい。構成ビットが互いに反転している２つのテストデータとは、テストデータのデータサイズが１バイトである場合には、０ｘｆｆと０ｘ００、或いは０ｘａａと０ｘ５５のようなデータのことを言う。０ｘ００のように全てのビットが０であるテストデータのみを用いて診断対象領域についてのハードウェアの有無の検出を行うと、ビット値が０のままとなるハードエラーを検出し損ねる虞がある。本態様によれば、ハードエラーの検出漏れを確実に回避することができる。
【００２２】
また、上記課題を解決するために、ＣＰＵ（或いはＣＰＵコア）などの一般的なコンピュータを上記メモリアクセス制御手段、特定手段および診断修復手段として機能させるプログラムを提供する態様も勿論考えられる。このようなプログラムの具体的な配布態様としては、フラッシュＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）などのコンピュータ読み取り可能な記録媒体に書き込んで配布する態様やインターネットなどの電気通信回線経由のダウンロードにより配布する態様が考えられる。
【発明の効果】
【００２３】
以上説明したように、本発明によれば、ハードウェアコストの増加を招くことなく、リアルタイムに読み書きされるメモリについてのソフトエラーの有無の診断および修復を、当該メモリからのデータ読出しのタイミングで行うことが可能になる。
【図面の簡単な説明】
【００２４】
【図１】本発明の一実施形態の診断修復装置１０のブロック構成の一例を示す図である。
【図２】データ管理テーブル１２の一例を示す図である。
【図３】構造体定義ファイル１３および構造体定義データ２１の一例を示す図である。
【図４】同診断修復装置１０が実行する処理の概要について説明するための図である。
【図５】同診断修復装置１０を実現可能なハードウェア構成の一例を示す図である。
【図６】ＣＰＵ３６がアプリケーションプログラムにしたがって実行する処理の流れを示すフローチャートである。
【図７】データ書込処理の流れを示すフローチャートである。
【図８】データ読出処理の流れを示すフローチャートである。
【図９】診断修復処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００２５】
以下、図面を参照しつつ本発明の実施形態について説明する。
＜診断修復装置１０の機能ブロック構成例＞
図１は、本実施形態における診断修復装置１０の機能ブロック構成の一例を示す図である。本実施形態における診断修復装置１０は例えばＣＰＵである。診断修復装置１０は、メモリ１１と、データ管理テーブル１２と、構造体定義ファイル１３と、各種アプリケーションプログラムを実行するプログラム実行部１４と、を有する。診断修復装置１０は、メモリ１１からのデータの読み出しの際にソフトエラーの有無を診断し、ソフトエラーがあった場合にはその修復を行う装置である。
【００２６】
メモリ１１は、例えばＲＡＭなどのリアルタイムに読み書き可能なメモリである。メモリ１１は、内部に複数の記憶領域を有する。図１に示す例では、メモリ１１内の複数の記憶領域のうち「データ領域１」、「データ領域２」、および「データ領域３」の３つの記憶領域が図示されている。本実施形態では、「データ領域１」、「データ領域２」、および「データ領域３」の各々がソフトエラーの有無の診断および修復対象となる。なお、本実施形態の診断修復装置１０は、アプリケーションプログラムの実行過程で参照／更新されるデータを格納するための領域としてレジスタ等を有しても良く、データを一時的に保存するキャッシュメモリ等を有しも良い。
【００２７】
プログラム実行部１４は例えばＣＰＵコアである。図１に示すようにプログラム実行部１４は、メモリアクセス制御手段１４ａ、特定手段１４ｂ、および診断修復手段１４ｃを有する。プログラム実行部１４に含まれるこれら３つの手段は、例えばＣ言語における関数等のサブルーチン化されたプログラムにしたがってＣＰＵコアを作動させることで実現されるソフトウェアモジュールである。例えば、メモリアクセス制御手段１４ａは、メモリ１１へデータを書き込むためのデータ書込関数のプログラム或いは同メモリ１１からデータを読み出すためのデータ読出関数のプログラムにしたがってＣＰＵコアを作動させることで実現される。特定手段１４ｂおよび診断修復手段１４ｃは上記データ読出関数にしたがってＣＰＵコアを作動させることで実現される。データ書込関数のプログラムおよびデータ読出関数のプログラムについては、アプリケーションプログラムの実行過程で適宜呼び出し可能なソフトウェアライブラリとして実装しておけば良い。
【００２８】
メモリアクセス制御手段１４ａは、データ書込処理とデータ読出処理を実行する。データ書込処理は、アプリケーションプログラムの実行過程でメモリ１１への書き込みを指示されたデータ（以下、書き込み対象データ）をメモリ１１内のデータ領域に書き込む処理である。データ読出処理は、アプリケーションプログラムの実行過程でメモリ１１からの読み出しを指示されたデータ（以下、読み出し対象データ）をメモリ１１内の該当データ領域から読み出す処理である。データ書込処理およびデータ読出処理の詳細については後に明らかする。特定手段１４ｂおよび診断修復手段１４ｃが実行する処理の詳細についても後に明らかにする。
【００２９】
データ管理テーブル１２は、メモリ１１のデータ領域の先頭アドレスを管理するテーブルである。データ管理テーブル１２は、メモリアクセス制御手段１４ａおよび診断修復手段１４ｃの各々からアクセス可能な共通領域に配置される。図２は、データ管理テーブル１２の一例を示す図である。図２に示すデータ管理テーブル１２は、「番号」および「名称」の２つの領域を有しているが、データ管理テーブル１２が有する領域は「番号」および「名称」の２つに限定される訳ではない。データ管理テーブル１２における「番号」領域には、データ管理テーブルに格納されているデータ（本実施形態では、「名称」領域に格納されるデータ）を一意に識別するための識別子が格納される。本実施形態では当該識別子として一連番号が用いられる。データ管理テーブル１２における「名称」領域には、メモリ１１内に設定された複数のデータ領域の各々の先頭アドレスが格納される。
【００３０】
構造体定義ファイル１３は、アプリケーションプログラム等において参照／更新されるデータのうちの構造体データのデータ構造を管理するファイルである。構造体データとは、構造体メンバと呼ばれるサブデータの集合体で構成されるデータである。図３（ａ）は、構造体定義データ２１を示し、図３（ｂ）は、図３（ａ）の構造体定義データ２１から得られる構造体定義ファイル１３を示し、図３（ｃ）は、構造体データのメモリ割り付け例を示す。構造体定義データとは、構造体データを定義するデータである。
図３（ａ）には、Ｃ言語で記述されたプログラムにおける構造体定義データ２１が示されている。周知のように、Ｃ言語では、「ｃｈａｒ」、「ｉｎｔ」、「ｌｏｎｇ」および「ｄｏｕｂｌｅ」の４種類のデータ型が定義されている。「ｃｈａｒ」は１バイトのデータ型であり、ＡＳＣＩＩコードなどの文字コード用のデータ型である。「ｉｎｔ」は、整数型であり、２バイトのデータサイズを有する。「ｌｏｎｇ」は、倍長整数型であり、４バイトのデータサイズを有する。「ｄｏｕｂｌｅ」は、倍精度実数型であり、８バイトのデータサイズを有する。なお、構造体メンバは配列であっても良く、［ｎ］はｎ個のデータよりなる一次元配列を意味する。
【００３１】
図３（ｂ）に示す構造体定義ファイル１３は、メモリアクセス制御手段１４ａ、および診断修復手段１４ｃの各々からアクセス可能な共通領域に配置される。構造体定義ファイル１３には、構造体データ毎に、その構造体データを構成する各構造体メンバの「データ名」、「当該構造体メンバのバイト数」、「当該構造体メンバの先頭の相対アドレス」が書き込まれている。なお、構造体メンバの先頭の相対アドレスとは、構造体データの先頭アドレスをアドレスの起算点とした場合における当該構造体メンバの先頭アドレスのことをいう。構造体定義ファイル１３を構成する項目は、「データ名」、「バイト数」、「先頭相対アドレス」等に限定される訳ではない。本実施形態では、図３（ａ）に示す構造体定義データ２１が診断修復装置１０に入力されると、診断修復装置１０は、各データをテーブルに変換して、図３（ｂ）に示す構造体定義ファイル１３を生成する。図３（ｃ）では、構造体定義ファイル１３をメモリ１１へ割り付けした例が示されている。ここで、上述した図１の例では、メモリ１１内のデータ領域は３つあるため、同じ領域割り付けがメモリ１１内の３か所に所定の形式（例えば、文字型、整数型、倍長整数型、倍精度実数型等のデータタイプやデータタイプに対応するバイト数等）で設定される。
【００３２】
本実施形態におけるメモリアクセス制御手段１４ａ、特定手段１４ｂおよび診断修復手段１４ｃの各々はＣ言語で記述されたプログラムにしたがってＣＰＵコアを作動させることで実現される。この場合、診断修復装置１０（ＣＰＵ）が実際の処理を実行する前、例えば上記プロブラムのコンパイル時に予め設定された構造体定義データ２１を用いて構造体定義ファイル１３を生成しても良い。構造体定義データ２１は、各種アプリケーションプログラムとともに外部から診断修復装置１０に与えられる。本実施形態の診断修復装置１０は、構造体定義データ２１を用いて構造対定義ファイル１３を生成するが、これに限定されるものではない。例えば構造体定義ファイル１３そのものをインターネットやＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）等の電気通信回線経由で外部から取得する態様であっても良く、また、ユーザ等からの入力により取得する態様であっても良い。
【００３３】
＜診断修復装置１０が実行する処理の概要＞
次いで、メモリ１１についてのソフトエラーの有無の診断および修復のために診断修復装置１０が実行する処理の概要について、図４を参照しつつ説明する。図４における（１）および（２）の処理はメモリアクセス制御手段１４ａが実行する処理である。具体的には、図４における（１）の処理はＣＰＵコアがデータ書込関数のプログラムにしたがって実行するデータ書込処理であり、図４における（２）の処理はＣＰＵコアがデータ読出関数にしたがって実行するデータ読出処理である。図４における（３）の処理および（４）の処理は何れもデータ読出関数のプログラムにしたがってＣＰＵコアが実行する処理である。図４の（３）の処理は特定手段１４ｂの処理であり、図４の（４）の処理は診断修復手段１４ｃの処理である。
【００３４】
図４では、データ領域１〜３のそれぞれはメモリ１１−１〜１１−３と表記されている。本実施形態のデータ書込処理、すなわち、図４における（１）の処理は、アプリケーションプログラムの実行過程でメモリ１１への書き込みを指示されたデータを当該メモリ１１へ書き込む処理である。図４の（１）に示すように、本実施形態のデータ書込処理では、メモリ１１へのデータ書き込みの際に、書き込み対象データは３つの異なる形式でデータ領域１〜３の各々へ書き込まれる。具体的には、メモリアクセス制御手段１４ａは、書き込み対象データそのままのデータ（以下、正データ）をデータ領域１に書き込み、当該正データに対応する２種類のデータをデータ領域２およびデータ領域３の各々に書き込む。より詳細に説明すると、メモリアクセス制御手段１４ａは、データ領域２には正データを１６進数ｆｆｆｆ（ハイバリュー（オールｆ））でＥＯＲ（排他的論理和）演算したデータ（反転データ）を書き込み、データ領域３には正データを予め設定された１又は複数の異なる所定のパターン（本実施形態では、１６進数ａａａａ）でＥＯＲ演算したデータ（パターンデータ）を書き込む。これは、ソフトエラー以外のビットエラー等のエラー検出もできるようにするためである。
【００３５】
上述した所定のパターンは１６進数ａａａａのように同一数字が連続するものに限定される訳ではなく、１６進数１２３４，４３２１のように昇順、降順になったものでも良い。また、１６進数０ａ０ａのように所定の２以上の値を交互に配列したパターンを用いても良い。また、パターンデータを生成するためのパターンを処理毎に変更しても良く、常に予め設定された固定のパターンを用いても良い。更に、上記パターンデータを生成するための演算は、ＥＯＲ演算に限定されるものではなく、例えば論理積演算等を用いても良く、処理毎或いは処理データの種類に応じて演算内容を異ならせても良い。なお、上記説明では、反転データの生成に用いる１６進数やパターンデータの生成に用いるパターンの桁数を４桁としたが、正データのバイト数に対応させた桁数を採用すれば良い。
【００３６】
本実施形態のデータ読出処理、すなわち、図４における（２）の処理は、アプリケーションプログラムの実行過程でメモリ１１からの読み出しを指示されたデータを当該メモリ１１から読み出す処理である。図４の（２）に示すように、本実施形態のデータ読出処理では、読み出し対象のデータ（正データ）とともに当該読み出し対象のデータに対応する２種類のデータ（すなわち、反転データおよびパタ−ンデータ）が読み出される。本実施形態では、これら３つのデータを用いて、各データの格納されていた記憶領域にソフトエラーが発生しているか否かの診断が行われ、ソフトエラーが検出された場合にはその修復が行われる。
【００３７】
より詳細に説明すると、メモリアクセス制御手段１４ａは、上記３つのデータ（正データ、反転データおよびパターンデータ）の各々が互いに一致するか否かの照合を行う。具体的には、メモリアクセス制御手段１４ａは、まず、メモリ１１−２から得られた反転データを１６進数ｆｆｆｆでＥＯＲ演算する前のデータに戻してから正データとの照合を行う。なお、両者が一致しているか否かの判断は、完全一致に限定されるものではなく、例えば所定の誤差範囲にあるか否かにより判断してもよい。照合の結果が不一致の場合には、メモリアクセス制御手段１４ａは、メモリエラーと判断する。次いで、メモリアクセス制御手段１４ａは、パターンデータと正データの照合を行う。この場合も、メモリアクセス制御手段１４ａは、パターンデータを元のデータに戻した後に正データと照合する。
【００３８】
正データと反転データの照合および正データとパターンデータの照合の何れにおいても一致が確認された場合には、正データを用いてアプリケーションプログラムにしたがった処理が実行される。これに対してメモリエラーと判定された場合、本実施形態では、図４における（３）の処理および（４）の処理が実行される。以下では、図４における（３）の処理と同（４）の処理とを「診断修復処理」と総称する。図４における（３）の処理は、特定手段１４ｂの処理である。特定手段１４ｂは、上記３つのデータで多数決を行い、多数のものを正常データと判定する。より詳細に説明すると、特定手段１４ｂは、上記３つのデータのうち互いに一致する２つのデータを正常データとするとともに、これら２つのデータとは一致しないデータの格納されていたデータ領域にメモリエラーが発生していると見做して当該データ領域を診断対象領域として特定する。なお、上記３つのデータの各々が互いに異なっていた場合には、特定手段１４ｂは、ハードエラーの発生を示すエラー通知を行い、診断修復処理を終了する。
【００３９】
図４には、メモリ１１−１が診断対象領域として特定された場合について例示されている。診断対象領域が特定されると、メモリエラーがソフトエラーによるものであるか否かを診断し、ソフトエラーである場合には上記正常データを修復データとしてそのソフトエラーを修復する処理（図４における（４）の処理）が診断修復手段１４ｃによって実行される。図４における（４）の処理では、診断修復手段１４ｃは、診断対象領域に所定のテストデータを書き込んだ後に当該診断対象領域からテストデータを読み出し、当該読み出したテストデータと書き込み前のテストデータとが一致する場合には、当該診断対象領域において発生したメモリエラーはソフトエラーであると見做して修復データを当該診断対象領域に書き込んで当該修復対象領域の格納データを修復する。前述したように、ソフトエラーはメモリ素子のリセット或いはデータの再書き込みによって修復できるからである。
以上が本実施形態における診断修復処理の概要である。
【００４０】
＜診断修復装置１０のハードウェア構成例＞
上述したように診断修復装置１０の特徴を顕著に示す各機能ブロック（すなわち、メモリアクセス制御手段１４ａ、特定手段１４ｂおよび診断修復手段１４ｃ）は何れもソフトウェアモジュールである。このため、これら各手段をＣＰＵに実現させるプログラム（具体的には前述した書込関数および読出関数のプログラム、以下、診断修復プログラム）を汎用のパーソナルコンピュータやサーバ等の一般的なコンピュータ装置にソフトウェアライブラリとしてインストールしておけば、上記コンピュータ装置の制御部（ＣＰＵ）に上記ソフトウェアライブラリを適宜読み出して実行させることで、当該コンピュータ装置を診断修復装置１０として機能させることができる。
【００４１】
図５は、診断修復装置１０として動作可能なコンピュータ装置のハードウェア構成の一例を示す図である。 図５に示すコンピュータ装置は、入力装置３１と、出力装置３２と、ドライブ装置３３と、補助記憶装置３４と、メモリ装置３５と、当該コンピュータ装置の制御中枢として機能するＣＰＵ３６と、ネットワーク接続装置３７と、これら各構成要素を接続するシステムバスＢと、を有する。
【００４２】
入力装置３１は、例えばマウス等のポインティングデバイスやキーボードである。入力装置３１は、各種操作信号をユーザの操作に応じてＣＰＵ３６に与える。これによりユーザの操作内容がＣＰＵ３６に伝達される。入力装置３１に対する操作により入力される操作信号の具体例としては、各種プログラムの実行を指示する信号等が挙げられる。
【００４３】
出力装置３２は、例えばディスプレイとその駆動回路とを有する。出力装置３２の有するディスプレイには、ＣＰＵ３６による制御の下、コンピュータ装置の利用を促す画面等や、各種プログラムの実行経過や実行結果等を表すデータが表示される。
【００４４】
図５に示すコンピュータ装置にインストールされる診断修復プログラムは、例えばＵＳＢ（Ｕｎｉｖｅｒｓａｌ  Ｓｅｒｉａｌ  Ｂｕｓ）メモリやＣＤ−ＲＯＭ等の可搬型の記録媒体３８等により提供される。診断修復プログラムを記録した記録媒体３８は、ドライブ装置３３にセット可能であり、記録媒体３８に記録された診断修復プログラムは、記録媒体３８からドライブ装置３３を介して補助記憶装置３４にインストールされる。
【００４５】
補助記憶装置３４は、例えばハードディスクである。補助記憶装置３４は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）をＣＰＵ３６に実現させるＯＳプログラムや前述した診断修復プログラム、図４における（１）〜（４）の各処理の実行の際に利用される各種データ（例えば、データ管理テーブル１２、構造体定義ファイル１３等）等を蓄積し、必要に応じて入出力することができる。
【００４６】
メモリ装置３５は、上述したメモリ１１に対応する。また、メモリ装置３５には、ＣＰＵ３６により補助記憶装置３４から読み出されたプログラム等がロードされる。なお、メモリ装置３５には、ＲＡＭの他にＲＯＭが含まれても良い。
【００４７】
ネットワーク接続装置３７は、例えばＮＩＣ（Ｎｅｔｗｏｒｋ  Ｉｎｔｅｒｆａｃｅ  Ｃａｒｄ）であり、インターネットやＬＡＮなどの電気通信回線に接続されている。ネットワーク装置３７はその接続先の電気通信回線から送信されてくるデータを受信してＣＰＵ３６へ引き渡す一方、ＣＰＵ３６から引き渡されたデータを上記電気通信回線へ送出する。これにより、図５に示すコンピュータ装置は、上記電気通信回線に接続されている他のコンピュータ装置とデータ通信することができる。ネットワーク接続装置３７は、ソフトウェアライブラリや図４における（１）〜（４）の各処理を実行する際に必要となる各種データを、上記電気通信回線に接続されている他のコンピュータ装置から取得（ダウンロード）する際に利用される。
【００４８】
＜本実施形態の診断修復装置の動作＞
次に、本実施形態の診断修復装置の動作を、フローチャートを用いて説明する。図６は、ＣＰＵ３６がアプリケーションプログラムにしたがって実行する処理の流れを示すフローチャートである。このアプリケーションプログラムにしたがってＣＰＵ３６が実行する処理の流れは以下の通りである。まず、ＣＰＵ３６は、アプリケーションプログラムの実行過程で使用するデータをメモリ装置３５から読み出すためにデータ読出関数を呼び出し、データ読出関数のプログラムにしたがってデータ読出処理を実行する（ステップＳ０１）。
【００４９】
データ読出処理を完了すると、ＣＰＵ３６はその処理結果が異常終了であったか否かを判定する（ステップＳ０２）。ステップＳ０２の判定結果がＹｅｓである場合にはＣＰＵ３６は異常処理（ステップＳ０５）を実行してアプリケーションプログラムの実行を完了する。これに対して、ステップＳ０２の判定結果がＮｏである場合にはＣＰＵ３６はアプリケーションプログラムのコードにしたがってアプリケーション処理を実行し（ステップＳ０３）、さらにその処理結果のデータをメモリ装置３５に書き込むためにデータ書込関数を呼び出し、データ書込処理を実行する（ステップＳ０４）。
【００５０】
以上がアプリケーションプログラムにしたがってＣＰＵ３６が実行する処理の流れである。なお、ステップＳ０３にて実行されるアプリケーション処理の処理内容はアプリケーションプログラムの種類に応じて定まる。以下では、データ書込処理、データ読出処理および診断修復処理について説明する。また、以下では、便宜上、データ書込処理を先に説明する。これは、データ読出処理における読み出し対象データは、データ書込処理によってメモリ装置３５に書き込まれたデータだからである。
【００５１】
＜データ書込処理の処理手順＞
図７は、データ書込処理の流れを示すフローチャートである。本実施形態においてデータ書込関数（関数名；ｗｓｄａｔ）を呼び出す際に指定するパラメータ（データ書込関数ｗｓｄａｔの引数）は、書き込みデータ名と書き込みデータである。以下では、データ書込関数ｗｓｄａｔを呼び出すコードの記述例が「ｒｉｎｆ＝ｗｓｄａｔ（ａ［２］＝２０）」である場合について説明する。これは、書き込みデータ名がａである整数型の配列の３番目（相対値）に整数値２０を書き込みデータとして書き込むことを意味している。上記コードの記述例においてｒｉｎｆはデータ書込関数ｗｓｄａｔの戻り値（例えば、書き込みの成否を示す関数値）を意味するが、図６に示すように、本実施形態ではこの戻り値は使用されない。
【００５２】
本実施形態では、データ書込関数ｗｓｄａｔを呼び出す際にパラメータとして書き込みデータ名と書き込みデータとを指定する例について説明するが、これに限定されるものではない。例えば連続した書き込みアドレスの各々にデータを書き込む場合には、書き込み先頭相対アドレスと、書き込みデータバイト数と、書き込みデータとをパラメータとして指定し、各データを関連付けて一括して書き込むこともできる。
【００５３】
データ書込関数ｗｓｄａｔにしたがって作動し、書き込みデータ名および書き込みデータを引き渡されたＣＰＵ３６は、データ書込処理を実行するメモリアクセス制御手段１４ａとして機能する。ＣＰＵ３６は、まず、図７に示すように、データ管理テーブル１２と構造体定義ファイル１３とを読み出し、書き込み先頭アドレスを計算する（ステップＳＡ０１）。なお、書き込み先頭アドレスについては、例えば「書き込み先頭アドレス＝データ領域１先頭アドレス＋書き込みデータ名先頭アドレス＋（相対値−１）×データ名バイト数」のような式を用いて算出することがきるが、これに限定されるものではない。
【００５４】
次に、ＣＰＵ３６は、パラメータのデータを構造体定義ファイル１３のデータ名に対応するバイト数分書き込む（ステップＳＡ０２）。例えば、整数型のデータ名であれば、ＣＰＵ３６は、２バイト分のデータを書き込む。次に、ＣＰＵ３６は、データ管理テーブル１２から「データ領域２」の先頭アドレスを読み出し、構造体定義ファイル１３を参照して書き込み先頭アドレスを計算する（ステップＳＡ０３）。ステップＳＡ０３の処理における計算では、上述したステップＳＡ０１における計算とデータ領域先頭アドレスのみが異なる。具体的には、「書き込み先頭アドレス＝データ領域２先頭アドレス＋書き込みデータ名先頭アドレス＋（相対値−１）×データ名バイト数」のような式を用いて書き込み先頭アドレスを計算することができる。
【００５５】
次に、ＣＰＵ３６は、書き込みデータと例えば１６進数ｆｆｆｆのＥＯＲ演算を行って反転データを生成し（ステップＳＡ０４）、その反転データを対応するデータ型のバイト数で書き込む（ステップＳＡ０５）。そのとき書き込むアドレスは、上述したステップＳＡ０３の処理で計算したアドレスに書き込む。
【００５６】
次に、ＣＰＵ３６は、データ管理テーブル１２から「データ領域３」の先頭アドレスを読み出し、構造体定義ファイル１３を参照して書き込み先頭アドレスを計算する（ステップＳＡ０６）。なお、ステップＳＡ０６における書き込み先頭アドレスの計算は、上述したステップＳＡ０３における計算と同様にデータ領域先頭アドレスが変わるのみである。具体的には、「書き込み先頭アドレス＝データ領域３先頭アドレス＋書き込みデータ名先頭アドレス＋（相対値−１）×データ名バイト数」のような式を用いて書き込み先頭アドレスを計算することができる。
【００５７】
次に、ＣＰＵ３６は、書き込みデータと所定のパターン（本実施形態では、１６進数ａａａａ）とのＥＯＲ演算を行ってパターンデータを生成し（ステップＳＡ０７）、そのパターンデータをステップＳＡ０６の処理にて計算されたアドレスから対応するデータ型のバイト数で書き込む（ステップＳＡ０８）。
以上がデータ書込処理の流れである。
【００５８】
＜データ読出処理の処理手順＞
次いでデータ読出処理について説明する。図８は、データ読出処理の流れを示すフローチャートである。本実施形態においてデータ読出関数（関数名：ｒｓｄａｔ）を呼び出す際に指定するパラメータ（データ読出関数ｒｓｄａｔの引数）は、読み出しデータ名と読み出しレジスタ名である。以下では、データ読出関数ｒｓｄａｔを呼び出すコードの記述例が「ｒｉｎｆ＝ｒｓｄａｔ（ｂ［４］、ｘ）」である場合について説明する。これは、読み出しデータ名がｂである倍長整数型の配列の５番目（相対値）を読み出しレジスタ名ｂのレジスタに読み出すことを意味している。上記コードの記述例においてｒｉｎｆはデータ読出関数ｒｓｄａｔの戻り値を意味する。この戻り値は、例えば「正常」（例えば、０）、「異常」（例えば、−１）、「データ修復」（例えば、１）の３種類の値の何れかである。本実施形態では、この戻り値に基づいて図６のステップＳ０２の判定が為される。
【００５９】
本実施形態では、データ読出関数ｒｓｄａｔを呼び出す際に、パラメータとして読み出しデータ名と読み出しレジスタ名とを指定する例について説明するが、これに限定されるものではない。例えば読み出しアドレスが連続したデータを読み出し先頭相対アドレスと、読み出しデータバイト数と、読み出しデータ領域とをパラメータとして、各データを関連付けて一括で読み出すこともできる。
【００６０】
データ読出関数ｒｓｄａｔにしたがって作動し、読み出しデータ名および読み出しレジスタ名を引き渡されたＣＰＵ３６は、データ読出処理を実行するメモリアクセス制御手段１４ａとして機能する。ＣＰＵ３６は、まず、図８に示すように、データ管理テーブル１２と構造体定義ファイル１３とを読み出し、読み出し先頭アドレスを計算する（ステップＳＢ０１）。なお、読み出し先頭アドレスについては、例えば「読み出し先頭アドレス１＝データ領域１先頭アドレス＋読み出しデータ名先頭アドレス＋（相対値−１）×データ名バイト数」、「読み出し先頭アドレス２＝データ領域２先頭アドレス＋読み出しデータ名先頭アドレス＋（相対値−１）×データ名バイト数」、「読み出し先頭アドレス３＝データ領域３先頭アドレス＋読み出しデータ名先頭アドレス＋（相対値−１）×データ名バイト数」のような式を用いて算出することがきるが、これに限定されるものではない。
【００６１】
ＣＰＵ３６は、読み出し先頭アドレス１、２、３から、各データ領域に書き込まれているデータを所定の読み出しデータバイト数で読み出す（ステップＳＢ０２）。以下では、上記の要領で読み込まれたデータを便宜上データ１、２、３とする。本実施形態では、データ１はデータ領域１から読み出される正データであり、データ２はデータ領域２から読み出される反転データであり、データ３はデータ領域３から読み出されるパターンデータである。
【００６２】
次に、ＣＰＵ３６は、データ２と１６進数ｆｆｆｆとのＥＯＲ演算を行うとともに、データ３と所定のパターン（１６進数ａａａａ）とのＥＯＲ演算を行う（ステップＳＢ０３）。以下では、前者の演算結果をデータａと呼び、後者の演算結果をデータｂと呼ぶ。ステップＳＢ０３の処理は、反転データおよびパターンデータを各々の算出元となった正データに戻すための処理である。なお、反転データおよびパターンデータの生成のための演算としてＥＯＲ演算以外の演算を用いる場合は、ステップＳＢ０３では当該演算の逆演算を行うようにすれば良い。
【００６３】
次に、ＣＰＵ３６は、データ１と、データａ，ｂとを照合し、データの一致を確認する（ステップＳＢ０４）。３つのデータが一致している場合（ステップＳＢ０５：Ｙｅｓ）には、ＣＰＵ３６は、データ１をデータ読み出しレジスタ名の示すレジスタにセットするとともに関数値に「正常」を示す値をセットして（ステップＳＢ０６）、データ読出処理を完了する。これに対して、３つのデータの中に他とは一致しないものが含まれていた場合（ステップＳＢ０５：Ｎｏ）には、ＣＰＵ３６は診断修復処理（すなわち、図４における（３）および（４）の処理）を実行する（ステップＳＢ０７）。
【００６４】
＜診断修復処理の処理手順＞
図９は診断修復処理の流れを示すフローチャートである。図９に示すように、本実施形態の診断修復処理は、ステップＳＣ０１〜ステップＳＣ１１の各処理によって構成されている。図９におけるステップＳＣ０１、ステップＳＣ０２およびステップＳＣ１１の各処理が、図４における（３）の処理、すなわち、特定手段１４ｂの処理であり、ステップＳＣ０３〜ステップＳＣ０１０の各処理が図４における（４）の処理、すなわち、診断修復手段１４ｃの処理である。図９に示すように、ＣＰＵ３６は、データ１、データａ、およびデータｂのうちの何れか２つのデータが一致するか否かを判定する（ステップＳＣ０１）。ステップＳＣ０１の判定結果がＮｏである場合、すなわち、データ１とデータａとが一致せず、データ１とデータｂとが一致せず、さらにデータａとデータｂも一致しない場合には、ＣＰＵ３６は関数値に「異常」を示す値（ハードエラーの発生を示す値）をセット（ステップＳＣ１１）して診断修復処理を完了する。これに対して、ステップＳＣ０１の判定結果がＹｅｓである場合、すなわち、データ１、データａ、およびデータｂのうちの何れか２つのデータが一致していた場合には、ＣＰＵ３６はステップＳＣ０２の処理を実行する。
【００６５】
ステップＳＣ０１の判定結果がＹｅｓである場合に実行されるステップＳＣ０２では、ＣＰＵ３６は、データ１、データａ、およびデータｂのうち他とは一致しなかったデータの格納先のデータ領域を診断対象領域として特定し、その診断対象領域のアドレスを記憶するとともに、データ１、データａ、およびデータｂのうちで互いに一致するデータのうちの一方を修復データとして特定し記憶する。つまり、本実施形態では、データ１、データａ、およびデータｂのうちで多数を占めるデータが修復データとなり、少数となったデータの格納先が診断対象領域となる。
【００６６】
上記の要領で診断対象領域が特定されると、ＣＰＵ３６は、診断対象領域におけるエラー原因がソフトエラーであるか否かを判定し、ソフトエラーであった場合には修復を行う。より詳細に説明すると、ＣＰＵ３６は、まず、診断対象領域に第１のテストデータ（本実施形態では、１６進数５５５５）を書き込む（ステップＳＣ０３）。なお、ステップＳＣ０３にて診断対象領域にデータを書き込む際には、ＣＰＵ３６は、キャッシュをスルーしてその書き込みを行う。次いで、ＣＰＵ３６は、診断対象領域からデータを読み出し（ステップＳＣ０４）、読み出したデータと上記書き込み前の第１のテストデータとが一致するか否かを判定する（ステップＳＣ０５）。ステップＳＣ０５の判定結果がＮｏの場合、すなわち、診断対象領域読み出したデータと第１のテストデータとが一致しなかった場合には、ＣＰＵ３６は、前述のステップＳＣ１１の処理を実行する。これに対して、ステップＳＣ０５の判定結果がＹｅｓであった場合は、ＣＰＵ３６は、診断対象領域に第２のテストデータ（本実施形態では、１６進数ａａａａ）を書き込む（ステップＳＣ０６）。なお、ステップＳＣ０６にて診断対象領域にデータを書き込む際も、ＣＰＵ３６はキャッシュをスルーしてその書き込みを行う。
【００６７】
次いで、ＣＰＵ３６は、診断対象領域からデータを読み出し（ステップＳＣ０７）、読み出したデータと上記書き込み前の第２のテストデータとが一致するか否かを判定する（ステップＳＣ０８）。ステップＳＣ０８の判定結果がＮｏの場合は、ＣＰＵ３６は前述のステップＳＣ１１の処理を実行する。これに対して、ステップＳＣ０８の判定結果がＹｅｓであった場合は、ＣＰＵ３６は診断対象領域について発生したデータエラーはソフトエラーであると判定し、診断対象領域に修復データを書き込む（ステップＳＣ０９）ことでその修復を行い、関数値に「データ修復」を示す値をセット（ステップＳＣ１０）して診断修復処理を終了する。
【００６８】
第２のテストデータは、第１のテストデータの構成ビットを反転させたデータである。本実施形態において第１のテストデータと第２のテストデータの２種類のテストデータを用いて診断対象領域の診断を行うのは、仮に第１のテストデータのみ、或いは第２のテストデータのみを用いて診断対象領域の診断を行うとハードエラーを検出し損ねる虞があるからである。例えば、最上位ビットが０のままとなるハードエラーが診断対象領域に発生している状況下で第２のテストデータのみを用いて診断対象領域の診断を行うと、このハードエラーを検出し損ねてしまう。構成ビットが互いに反転した関係にある２種類のテストデータを用いて診断対象領域の診断を行えば、ハードエラーの検出漏れを回避することができる。なお、本実施形態では第１および第２のテストデータとして１６進数５５５５および１６進数ａａａａの２種類を用いたが、１６進数００００と１６進数ｆｆｆｆを用いても良い。要は、構成ビットが互いに反転した関係にある２種類のテストデータを用いて診断対象領域の診断を行う態様であれば良い。また、１６進数００ａａと１６進数ｆｆａａと１６進数ｂｂ５５といった互いに異なる３種類のテストデータを用いても同様の効果を得ることは可能である。
【００６９】
ここで注目すべき点は、本実施形態によれば、メモリ装置３５からのデータの読み出しやアプリケーション処理、およびメモリ装置３５へのデータの書き込みを行うハードウェア（すなわち、ＣＰＵ３６）の他に、検証のためのハードウェアが別途必要になることはない、という点である。検証のためのハードウェアを別途必要としないため、本実施形態によれば、特許文献３に開示の技術のようにハードウェアコストが増加することはない。つまり、本実施形態によれば、ハードウェアコストの増加を招くことなく、リアルタイムに読み書きされるメモリについてのソフトエラーの有無の診断および修復を、当該メモリからのデータ読出しのタイミングで行うことが可能になる。
【００７０】
また、本実施形態では、ＥＣＣを用いる場合に比較してＣＰＵ３６に掛かる処理負荷が小さいといった利点もある。このように、本実施形態の診断修復装置１０は、ＣＰＵ３６に掛かる処理負荷が小さく、かつリアルタイムに読み書きされるメモリについてのソフトエラーの有無の診断および修復をハードウェアコストの増加を招くことなく実現することができる。このため、本実施形態の診断修復装置１０は、ソフトエラーの有無の診断および修復をリアルタイムかつ少ないハードウェアリソースで行うこと（すなわち、小規模・低コストなハードウェアにおいて小負荷で行うこと）を要求される電子機器に好適である。このような電子機器の具体例としては、自動車のコントローラであるＶＣＵ（Ｖｅｈｉｃｌｅ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）が挙げられる。
【００７１】
以上本発明の一実施形態について説明したが、この実施形態に以下の変形を加えても良い。
（１）上記実施形態では、正データ、反転データおよびパターンデータを各々１つずつ、すなわち合計３個のデータのうち多数を占めるデータを修復データとしてソフトエラーの修復を行った。しかし、多数を占めるデータの数が予め定められた閾値未満である場合には、当該多数のデータについても信頼性に疑義があると見做し、データ修復に換えてハードエラーの通知とは異なるエラー通知を行うようにしても良い。なお、上記閾値については、正データ、反転データおよび排他的論理和データの数の合計値以下で、かつ正データ、反転データおよびパターンデータの数の過半数の値よりも大きい値であれば良く、整数値である必要はない。
【００７２】
（２）上記実施形態では、正データ、反転データおよびパターンデータを各々１つずつ、すなわち合計３個のデータを用いてソフトエラーの発生の有無の診断を行った。しかし、２個の正データと２個の反転データと１つのパターンデータの合計５つのデータを用いてソフトエラーの発生の有無の診断行っても良く、７個以上の奇数個のデータを用いてソフトエラーの発生の有無の診断を行っても良い。また、上記閾値による判定を併用する態様であれば、正データ、反転データおよびパターンデータの数の合計値は偶数であっても良い。例えば６個のデータを用いる場合には上記閾値を３．１、４或いは５に設定しておけば良い。
【００７３】
（３）上記実施形態ではメモリアクセス制御手段１４ａ、特定手段１４ｂおよび診断修復手段１４ｃの各々をソフトウェアモジュールで実現したが、これら各手段のうちの何れか１つまたは複数を電子回路等のハードウェアで実現しても良い。また、上記実施形態では、ソフトエラーの診断および修復対象となるメモリ１１が診断修復装置１０に含まれていたが、メモリ１１が診断修復装置１０の外部に設けられていても良い。また、上記実施形態のメモリアクセス制御手段１４ａは、診断対象のメモリへのデータの書き込みを行うデータ書込処理と当該メモリからのデータの読み出しを行うデータ読出処理とを実行したが、データ書込処理については他の装置が行う態様であっても良い。
【００７４】
要するに本発明の診断修復装置は、読み出し対象として指定されたデータをメモリから読み出すとともに当該データに対応付けてメモリに格納された少なくとも２つのデータをメモリから読み出すメモリアクセス制御手段と、メモリアクセス制御手段により読み出された少なくとも３つのデータの全てが同一ではない場合に多数を占めるデータを修復データとして特定するとともに少数となったデータのメモリにおける記憶領域を診断対象領域として特定する特定手段と、診断対象領域へテストデータを書き込んだ後に診断対象領域からデータを読み出し、当該読み出したデータと書き込み前のテストデータとが一致する場合に修復データを用いて診断対象領域を修復する一方、一致しない場合にはハードエラーのエラー通知を行う診断修復手段とを有していれば良い。
【符号の説明】
【００７５】
１０…診断修復装置、１１…メモリ、１２…データ管理テーブル、１３…構造体定義ファイル、１４…プログラム実行部、１４ａ…メモリアクセス制御手段、１４ｂ…特定手段、１４ｃ…診断修復手段、３１…入力装置、３２…出力装置、３３…ドライブ装置、３４…補助記憶装置、３５…メモリ装置、３６…ＣＰＵ、３７…ネットワーク接続装置、３８…記録媒体、Ｂ…システムバス。
【図１】
0006555095.tif 000002
【図２】
0006555095.tif 000003
【図３】
0006555095.tif 000004
【図４】
0006555095.tif 000005
【図５】
0006555095.tif 000006
【図６】
0006555095.tif 000007
【図７】
0006555095.tif 000008
【図８】
0006555095.tif 000009
【図９】
0006555095.tif 000010