(58)【調査した分野】(Int.Cl.,DB名)
読み出し対象として指定されたデータをメモリから読み出すとともに当該データに対応付けて前記メモリに格納された少なくとも2つのデータを前記メモリから読み出すメモリアクセス制御手段と、
前記メモリアクセス制御手段により読み出された少なくとも3つのデータの全てが同一ではない場合に多数を占めるデータを修復データとして特定するとともに少数となったデータの前記メモリにおける記憶領域を診断対象領域として特定する特定手段と、
前記診断対象領域へテストデータを書き込んだ後に前記診断対象領域からデータを読み出し、当該読み出したデータと書き込み前のテストデータとが一致する場合に前記修復データを用いて前記診断対象領域を修復する一方、一致しない場合にはハードエラーのエラー通知を行う診断修復手段と、を有し、
前記特定手段は、
前記メモリアクセス制御手段により読み出された少なくとも3つのデータのうちで多数を占めるデータの数が予め定めた閾値未満である場合には、前記エラー通知とは異なる第2のエラー通知を行う
ことを特徴とする診断修復装置。
【発明の概要】
【発明が解決しようとする課題】
【0010】
メモリには、そのメモリの搭載されている機器の実運用の過程でデータの読み出しのみが行われるものと、任意のタイミングでデータの書き込みおよび読み出しが行われるものとがある。前者の代表例はEEPROMであり、後者の代表例はRAM(Random Access Memory)である。以下では、後者のメモリのことを「リアルタイムに読み書きされるメモリ」と呼ぶ。
【0011】
リアルタイムに読み書きされるメモリについては、特定のタイミングで、または定期的にソフトエラーの有無の診断および修復を行う態様では実際に処理を実行するためにメモリからデータを読み出すタイミングと診断タイミングが一致するとは限らず、誤ったデータを用いて処理が実行される虞がある。このため、特許文献2に開示の技術は、リアルタイムに読み書きされるメモリについてのソフトエラーの有無の診断および修復には適さない。そもそも、特許文献2に開示の技術におけるデータ誤りの診断および修復対象はEPROM或いはEEPROMであり、RAMに格納されているデータのソフトエラーの検知や修復については考慮されていない。
【0012】
特許文献1、特許文献3および非特許文献1に開示の技術、或いはECCを用いた技術は、リアルタイムに読み書きされるメモリについてのソフトエラーの有無の診断および修復に適用可能ではあるが、夫々以下のような問題がある。まず、特許文献1に開示の技術については、メモリからのデータの読み出しタイミングでエラーを検出することが記載されているものの、具体的な検出方法が不明確である。この検出方法について特許文献1にはパリティチェックを用いることを示唆する記載があるが、パリティチェックではエラーの検出能力が低いといった問題がある。また、特許文献1に開示の技術には、メモリの格納内容は修復されず、誤ったままになるといった問題もある。
【0013】
特許文献3に記載の技術では、CPUの多重化が前提とされており、メモリから読み出したデータを用いて処理を実行するハードウェア(二重化されたCPUのうちの一方)の他に検証のためのハードウェア(二重化されたCPUのうちの他方)が別途必要になるといった問題がある。非特許文献1に記載の技術には、ソフトエラーの有無の診断はできるものの、メモリから読み出したデータの修復やメモリの格納内容の修復ができないといった問題がある。
【0014】
ECCを利用する技術には以下のような問題がある。すなわち、ECCを用いてソフトエラーの有無の診断および修復を行う場合、ECC対応のためにハードウェアのコストが増大する、といった問題がある。加えて、ECCを用いてソフトエラーの有無の診断および修復を行う態様には、インターリーブなどの特殊な方式と併用しない限り2ビット以上のソフトエラーを修復できないといった問題がある。また、ECCを利用した技術には、メモリから読み出したデータの誤りは訂正されるものの、メモリの格納内容は修復されず、誤ったままになるといった問題もある。
【0015】
以上説明したように、リアルタイムに読み書きされるメモリについて、データ読出しのタイミングでソフトエラーの有無を診断し、ソフトエラーがあった場合にメモリの格納内容を修復することを、ハードウェアコストの増加を招くことなく実現する技術は従来なかった。
【0016】
本発明は以上に説明した課題に鑑みて為されたものであり、データ読出しのタイミングでソフトエラーの有無を診断し、ソフトエラーがあった場合にメモリの格納内容を修復することを、ハードウェアコストの増加を招くことなく実現する技術、を提供することを目的とする。
【課題を解決するための手段】
【0017】
上記課題を解決するために本発明は、以下のメモリアクセス制御手段、特定手段、および診断修復手段を有する診断修復装置を提供する。メモリアクセス制御手段は、読み出し対象として指定されたデータをメモリから読み出すとともに当該データに対応付けて前記メモリに格納された少なくとも2つのデータを前記メモリから読み出す。特定手段は、メモリアクセス制御手段により読み出された少なくとも3つのデータの全てが同一ではない場合に多数を占めるデータを修復データとして特定するとともに少数となったデータのメモリにおける記憶領域を診断対象領域として特定する。診断修復手段は、診断対象領域へテストデータを書き込んだ後に当該診断対象領域からデータを読み出し、当該読み出したデータと書き込み前のテストデータとが一致する場合には修復データを用いて診断対象領域を修復する一方、一致しない場合にはハードエラーのエラー通知を行う。
【0018】
本発明においては、メモリアクセス制御手段により読み出された少なくとも3つのデータの全てが同一ではない場合、少数のデータは異常データと見做される。この異常データが格納されていた診断対象領域にテストデータを書き込んだ後に当該診断対象領域から読み出したデータと書き込み前のテストデータとが一致するのであれば、上記異常データはソフトエラーによるものと考えられる。ハードエラーが発生したのであれば、診断対象領域から読み出したデータと書き込み前のテストデータとが一致することはないからである。
【0019】
本発明によれば、メモリ内の何れかの記憶領域にソフトエラーが発生したとしても、そのソフトエラーはデータ読み出しの際に修復される。このため、上記メモリがリアルタイムに読み書きされるメモリであっても、誤ったデータで処理が実行されることはなく、信頼性を担保することができる。加えて本発明では、特許文献3に開示の技術のように、検証のためのハードウェアが別途必要となることはない。つまり、本発明によれば、データ読出しのタイミングでソフトエラーの有無を診断し、ソフトエラーがあった場合にメモリの格納内容を修復することを、ハードウェアコストの増加を招くことなく実現することが可能になる。
【0020】
より好ましい態様においては、特定手段は、メモリアクセス制御手段により読み出された少なくとも3つのデータのうちで多数を占めるデータの数が予め定めた閾値未満である場合には、ハードエラーのエラー通知とは異なる第2のエラー通知を行う。当該第2のエラー通知が為されたものの、ハードエラーのエラー通知が為されなかったのであれば、読み出し対象のデータおよび当該データに対応する少なくとも2つのデータの各々を格納する記憶領域のうち上記閾値以上の数の記憶領域においてソフトエラーが発生したことを意味する。つまり、診断修復装置のユーザは第2のエラー通知の有無を通じてソフトエラーが頻発しているか否かを把握することができる。また、第1および第2のエラー通知とともに、エラーの発見されたデータ(多数決において少数となったデータ、或いは書き込み前と一致しなかったテストデータ)そのものを通知しても良く、この場合はどのビットが怪しいかを診断修復装置のユーザに把握させることが可能になる。
【0021】
上記テストデータは1種類だけでも良いが、互いに異なる複数のテストデータの各々を用いて、診断対象領域への書き込み、診断対象領域からの読み出し、および書き込み前との比較を行うことがより好ましく、構成ビットが互いに反転している2つのテストデータを用いて診断対象領域への書き込み、診断対象領域からの読み出し、および書き込み前との比較を行うことがさらに好ましい。構成ビットが互いに反転している2つのテストデータとは、テストデータのデータサイズが1バイトである場合には、0xffと0x00、或いは0xaaと0x55のようなデータのことを言う。0x00のように全てのビットが0であるテストデータのみを用いて診断対象領域についてのハードウェアの有無の検出を行うと、ビット値が0のままとなるハードエラーを検出し損ねる虞がある。本態様によれば、ハードエラーの検出漏れを確実に回避することができる。
【0022】
また、上記課題を解決するために、CPU(或いはCPUコア)などの一般的なコンピュータを上記メモリアクセス制御手段、特定手段および診断修復手段として機能させるプログラムを提供する態様も勿論考えられる。このようなプログラムの具体的な配布態様としては、フラッシュROM(Read Only Memory)などのコンピュータ読み取り可能な記録媒体に書き込んで配布する態様やインターネットなどの電気通信回線経由のダウンロードにより配布する態様が考えられる。
【発明の効果】
【0023】
以上説明したように、本発明によれば、ハードウェアコストの増加を招くことなく、リアルタイムに読み書きされるメモリについてのソフトエラーの有無の診断および修復を、当該メモリからのデータ読出しのタイミングで行うことが可能になる。
【発明を実施するための形態】
【0025】
以下、図面を参照しつつ本発明の実施形態について説明する。
<診断修復装置10の機能ブロック構成例>
図1は、本実施形態における診断修復装置10の機能ブロック構成の一例を示す図である。本実施形態における診断修復装置10は例えばCPUである。診断修復装置10は、メモリ11と、データ管理テーブル12と、構造体定義ファイル13と、各種アプリケーションプログラムを実行するプログラム実行部14と、を有する。診断修復装置10は、メモリ11からのデータの読み出しの際にソフトエラーの有無を診断し、ソフトエラーがあった場合にはその修復を行う装置である。
【0026】
メモリ11は、例えばRAMなどのリアルタイムに読み書き可能なメモリである。メモリ11は、内部に複数の記憶領域を有する。
図1に示す例では、メモリ11内の複数の記憶領域のうち「データ領域1」、「データ領域2」、および「データ領域3」の3つの記憶領域が図示されている。本実施形態では、「データ領域1」、「データ領域2」、および「データ領域3」の各々がソフトエラーの有無の診断および修復対象となる。なお、本実施形態の診断修復装置10は、アプリケーションプログラムの実行過程で参照/更新されるデータを格納するための領域としてレジスタ等を有しても良く、データを一時的に保存するキャッシュメモリ等を有しも良い。
【0027】
プログラム実行部14は例えばCPUコアである。
図1に示すようにプログラム実行部14は、メモリアクセス制御手段14a、特定手段14b、および診断修復手段14cを有する。プログラム実行部14に含まれるこれら3つの手段は、例えばC言語における関数等のサブルーチン化されたプログラムにしたがってCPUコアを作動させることで実現されるソフトウェアモジュールである。例えば、メモリアクセス制御手段14aは、メモリ11へデータを書き込むためのデータ書込関数のプログラム或いは同メモリ11からデータを読み出すためのデータ読出関数のプログラムにしたがってCPUコアを作動させることで実現される。特定手段14bおよび診断修復手段14cは上記データ読出関数にしたがってCPUコアを作動させることで実現される。データ書込関数のプログラムおよびデータ読出関数のプログラムについては、アプリケーションプログラムの実行過程で適宜呼び出し可能なソフトウェアライブラリとして実装しておけば良い。
【0028】
メモリアクセス制御手段14aは、データ書込処理とデータ読出処理を実行する。データ書込処理は、アプリケーションプログラムの実行過程でメモリ11への書き込みを指示されたデータ(以下、書き込み対象データ)をメモリ11内のデータ領域に書き込む処理である。データ読出処理は、アプリケーションプログラムの実行過程でメモリ11からの読み出しを指示されたデータ(以下、読み出し対象データ)をメモリ11内の該当データ領域から読み出す処理である。データ書込処理およびデータ読出処理の詳細については後に明らかする。特定手段14bおよび診断修復手段14cが実行する処理の詳細についても後に明らかにする。
【0029】
データ管理テーブル12は、メモリ11のデータ領域の先頭アドレスを管理するテーブルである。データ管理テーブル12は、メモリアクセス制御手段14aおよび診断修復手段14cの各々からアクセス可能な共通領域に配置される。
図2は、データ管理テーブル12の一例を示す図である。
図2に示すデータ管理テーブル12は、「番号」および「名称」の2つの領域を有しているが、データ管理テーブル12が有する領域は「番号」および「名称」の2つに限定される訳ではない。データ管理テーブル12における「番号」領域には、データ管理テーブルに格納されているデータ(本実施形態では、「名称」領域に格納されるデータ)を一意に識別するための識別子が格納される。本実施形態では当該識別子として一連番号が用いられる。データ管理テーブル12における「名称」領域には、メモリ11内に設定された複数のデータ領域の各々の先頭アドレスが格納される。
【0030】
構造体定義ファイル13は、アプリケーションプログラム等において参照/更新されるデータのうちの構造体データのデータ構造を管理するファイルである。構造体データとは、構造体メンバと呼ばれるサブデータの集合体で構成されるデータである。
図3(a)は、構造体定義データ21を示し、
図3(b)は、
図3(a)の構造体定義データ21から得られる構造体定義ファイル13を示し、
図3(c)は、構造体データのメモリ割り付け例を示す。構造体定義データとは、構造体データを定義するデータである。
図3(a)には、C言語で記述されたプログラムにおける構造体定義データ21が示されている。周知のように、C言語では、「char」、「int」、「long」および「double」の4種類のデータ型が定義されている。「char」は1バイトのデータ型であり、ASCIIコードなどの文字コード用のデータ型である。「int」は、整数型であり、2バイトのデータサイズを有する。「long」は、倍長整数型であり、4バイトのデータサイズを有する。「double」は、倍精度実数型であり、8バイトのデータサイズを有する。なお、構造体メンバは配列であっても良く、[n]はn個のデータよりなる一次元配列を意味する。
【0031】
図3(b)に示す構造体定義ファイル13は、メモリアクセス制御手段14a、および診断修復手段14cの各々からアクセス可能な共通領域に配置される。構造体定義ファイル13には、構造体データ毎に、その構造体データを構成する各構造体メンバの「データ名」、「当該構造体メンバのバイト数」、「当該構造体メンバの先頭の相対アドレス」が書き込まれている。なお、構造体メンバの先頭の相対アドレスとは、構造体データの先頭アドレスをアドレスの起算点とした場合における当該構造体メンバの先頭アドレスのことをいう。構造体定義ファイル13を構成する項目は、「データ名」、「バイト数」、「先頭相対アドレス」等に限定される訳ではない。本実施形態では、
図3(a)に示す構造体定義データ21が診断修復装置10に入力されると、診断修復装置10は、各データをテーブルに変換して、
図3(b)に示す構造体定義ファイル13を生成する。
図3(c)では、構造体定義ファイル13をメモリ11へ割り付けした例が示されている。ここで、上述した
図1の例では、メモリ11内のデータ領域は3つあるため、同じ領域割り付けがメモリ11内の3か所に所定の形式(例えば、文字型、整数型、倍長整数型、倍精度実数型等のデータタイプやデータタイプに対応するバイト数等)で設定される。
【0032】
本実施形態におけるメモリアクセス制御手段14a、特定手段14bおよび診断修復手段14cの各々はC言語で記述されたプログラムにしたがってCPUコアを作動させることで実現される。この場合、診断修復装置10(CPU)が実際の処理を実行する前、例えば上記プロブラムのコンパイル時に予め設定された構造体定義データ21を用いて構造体定義ファイル13を生成しても良い。構造体定義データ21は、各種アプリケーションプログラムとともに外部から診断修復装置10に与えられる。本実施形態の診断修復装置10は、構造体定義データ21を用いて構造対定義ファイル13を生成するが、これに限定されるものではない。例えば構造体定義ファイル13そのものをインターネットやLAN(Local Area Network)等の電気通信回線経由で外部から取得する態様であっても良く、また、ユーザ等からの入力により取得する態様であっても良い。
【0033】
<診断修復装置10が実行する処理の概要>
次いで、メモリ11についてのソフトエラーの有無の診断および修復のために診断修復装置10が実行する処理の概要について、
図4を参照しつつ説明する。
図4における(1)および(2)の処理はメモリアクセス制御手段14aが実行する処理である。具体的には、
図4における(1)の処理はCPUコアがデータ書込関数のプログラムにしたがって実行するデータ書込処理であり、
図4における(2)の処理はCPUコアがデータ読出関数にしたがって実行するデータ読出処理である。
図4における(3)の処理および(4)の処理は何れもデータ読出関数のプログラムにしたがってCPUコアが実行する処理である。
図4の(3)の処理は特定手段14bの処理であり、
図4の(4)の処理は診断修復手段14cの処理である。
【0034】
図4では、データ領域1〜3のそれぞれはメモリ11−1〜11−3と表記されている。本実施形態のデータ書込処理、すなわち、
図4における(1)の処理は、アプリケーションプログラムの実行過程でメモリ11への書き込みを指示されたデータを当該メモリ11へ書き込む処理である。
図4の(1)に示すように、本実施形態のデータ書込処理では、メモリ11へのデータ書き込みの際に、書き込み対象データは3つの異なる形式でデータ領域1〜3の各々へ書き込まれる。具体的には、メモリアクセス制御手段14aは、書き込み対象データそのままのデータ(以下、正データ)をデータ領域1に書き込み、当該正データに対応する2種類のデータをデータ領域2およびデータ領域3の各々に書き込む。より詳細に説明すると、メモリアクセス制御手段14aは、データ領域2には正データを16進数ffff(ハイバリュー(オールf))でEOR(排他的論理和)演算したデータ(反転データ)を書き込み、データ領域3には正データを予め設定された1又は複数の異なる所定のパターン(本実施形態では、16進数aaaa)でEOR演算したデータ(パターンデータ)を書き込む。これは、ソフトエラー以外のビットエラー等のエラー検出もできるようにするためである。
【0035】
上述した所定のパターンは16進数aaaaのように同一数字が連続するものに限定される訳ではなく、16進数1234,4321のように昇順、降順になったものでも良い。また、16進数0a0aのように所定の2以上の値を交互に配列したパターンを用いても良い。また、パターンデータを生成するためのパターンを処理毎に変更しても良く、常に予め設定された固定のパターンを用いても良い。更に、上記パターンデータを生成するための演算は、EOR演算に限定されるものではなく、例えば論理積演算等を用いても良く、処理毎或いは処理データの種類に応じて演算内容を異ならせても良い。なお、上記説明では、反転データの生成に用いる16進数やパターンデータの生成に用いるパターンの桁数を4桁としたが、正データのバイト数に対応させた桁数を採用すれば良い。
【0036】
本実施形態のデータ読出処理、すなわち、
図4における(2)の処理は、アプリケーションプログラムの実行過程でメモリ11からの読み出しを指示されたデータを当該メモリ11から読み出す処理である。
図4の(2)に示すように、本実施形態のデータ読出処理では、読み出し対象のデータ(正データ)とともに当該読み出し対象のデータに対応する2種類のデータ(すなわち、反転データおよびパタ−ンデータ)が読み出される。本実施形態では、これら3つのデータを用いて、各データの格納されていた記憶領域にソフトエラーが発生しているか否かの診断が行われ、ソフトエラーが検出された場合にはその修復が行われる。
【0037】
より詳細に説明すると、メモリアクセス制御手段14aは、上記3つのデータ(正データ、反転データおよびパターンデータ)の各々が互いに一致するか否かの照合を行う。具体的には、メモリアクセス制御手段14aは、まず、メモリ11−2から得られた反転データを16進数ffffでEOR演算する前のデータに戻してから正データとの照合を行う。なお、両者が一致しているか否かの判断は、完全一致に限定されるものではなく、例えば所定の誤差範囲にあるか否かにより判断してもよい。照合の結果が不一致の場合には、メモリアクセス制御手段14aは、メモリエラーと判断する。次いで、メモリアクセス制御手段14aは、パターンデータと正データの照合を行う。この場合も、メモリアクセス制御手段14aは、パターンデータを元のデータに戻した後に正データと照合する。
【0038】
正データと反転データの照合および正データとパターンデータの照合の何れにおいても一致が確認された場合には、正データを用いてアプリケーションプログラムにしたがった処理が実行される。これに対してメモリエラーと判定された場合、本実施形態では、
図4における(3)の処理および(4)の処理が実行される。以下では、
図4における(3)の処理と同(4)の処理とを「診断修復処理」と総称する。
図4における(3)の処理は、特定手段14bの処理である。特定手段14bは、上記3つのデータで多数決を行い、多数のものを正常データと判定する。より詳細に説明すると、特定手段14bは、上記3つのデータのうち互いに一致する2つのデータを正常データとするとともに、これら2つのデータとは一致しないデータの格納されていたデータ領域にメモリエラーが発生していると見做して当該データ領域を診断対象領域として特定する。なお、上記3つのデータの各々が互いに異なっていた場合には、特定手段14bは、ハードエラーの発生を示すエラー通知を行い、診断修復処理を終了する。
【0039】
図4には、メモリ11−1が診断対象領域として特定された場合について例示されている。診断対象領域が特定されると、メモリエラーがソフトエラーによるものであるか否かを診断し、ソフトエラーである場合には上記正常データを修復データとしてそのソフトエラーを修復する処理(
図4における(4)の処理)が診断修復手段14cによって実行される。
図4における(4)の処理では、診断修復手段14cは、診断対象領域に所定のテストデータを書き込んだ後に当該診断対象領域からテストデータを読み出し、当該読み出したテストデータと書き込み前のテストデータとが一致する場合には、当該診断対象領域において発生したメモリエラーはソフトエラーであると見做して修復データを当該診断対象領域に書き込んで当該修復対象領域の格納データを修復する。前述したように、ソフトエラーはメモリ素子のリセット或いはデータの再書き込みによって修復できるからである。
以上が本実施形態における診断修復処理の概要である。
【0040】
<診断修復装置10のハードウェア構成例>
上述したように診断修復装置10の特徴を顕著に示す各機能ブロック(すなわち、メモリアクセス制御手段14a、特定手段14bおよび診断修復手段14c)は何れもソフトウェアモジュールである。このため、これら各手段をCPUに実現させるプログラム(具体的には前述した書込関数および読出関数のプログラム、以下、診断修復プログラム)を汎用のパーソナルコンピュータやサーバ等の一般的なコンピュータ装置にソフトウェアライブラリとしてインストールしておけば、上記コンピュータ装置の制御部(CPU)に上記ソフトウェアライブラリを適宜読み出して実行させることで、当該コンピュータ装置を診断修復装置10として機能させることができる。
【0041】
図5は、診断修復装置10として動作可能なコンピュータ装置のハードウェア構成の一例を示す図である。
図5に示すコンピュータ装置は、入力装置31と、出力装置32と、ドライブ装置33と、補助記憶装置34と、メモリ装置35と、当該コンピュータ装置の制御中枢として機能するCPU36と、ネットワーク接続装置37と、これら各構成要素を接続するシステムバスBと、を有する。
【0042】
入力装置31は、例えばマウス等のポインティングデバイスやキーボードである。入力装置31は、各種操作信号をユーザの操作に応じてCPU36に与える。これによりユーザの操作内容がCPU36に伝達される。入力装置31に対する操作により入力される操作信号の具体例としては、各種プログラムの実行を指示する信号等が挙げられる。
【0043】
出力装置32は、例えばディスプレイとその駆動回路とを有する。出力装置32の有するディスプレイには、CPU36による制御の下、コンピュータ装置の利用を促す画面等や、各種プログラムの実行経過や実行結果等を表すデータが表示される。
【0044】
図5に示すコンピュータ装置にインストールされる診断修復プログラムは、例えばUSB(Universal Serial Bus)メモリやCD−ROM等の可搬型の記録媒体38等により提供される。診断修復プログラムを記録した記録媒体38は、ドライブ装置33にセット可能であり、記録媒体38に記録された診断修復プログラムは、記録媒体38からドライブ装置33を介して補助記憶装置34にインストールされる。
【0045】
補助記憶装置34は、例えばハードディスクである。補助記憶装置34は、OS(Operating System)をCPU36に実現させるOSプログラムや前述した診断修復プログラム、
図4における(1)〜(4)の各処理の実行の際に利用される各種データ(例えば、データ管理テーブル12、構造体定義ファイル13等)等を蓄積し、必要に応じて入出力することができる。
【0046】
メモリ装置35は、上述したメモリ11に対応する。また、メモリ装置35には、CPU36により補助記憶装置34から読み出されたプログラム等がロードされる。なお、メモリ装置35には、RAMの他にROMが含まれても良い。
【0047】
ネットワーク接続装置37は、例えばNIC(Network Interface Card)であり、インターネットやLANなどの電気通信回線に接続されている。ネットワーク装置37はその接続先の電気通信回線から送信されてくるデータを受信してCPU36へ引き渡す一方、CPU36から引き渡されたデータを上記電気通信回線へ送出する。これにより、
図5に示すコンピュータ装置は、上記電気通信回線に接続されている他のコンピュータ装置とデータ通信することができる。ネットワーク接続装置37は、ソフトウェアライブラリや
図4における(1)〜(4)の各処理を実行する際に必要となる各種データを、上記電気通信回線に接続されている他のコンピュータ装置から取得(ダウンロード)する際に利用される。
【0048】
<本実施形態の診断修復装置の動作>
次に、本実施形態の診断修復装置の動作を、フローチャートを用いて説明する。
図6は、CPU36がアプリケーションプログラムにしたがって実行する処理の流れを示すフローチャートである。このアプリケーションプログラムにしたがってCPU36が実行する処理の流れは以下の通りである。まず、CPU36は、アプリケーションプログラムの実行過程で使用するデータをメモリ装置35から読み出すためにデータ読出関数を呼び出し、データ読出関数のプログラムにしたがってデータ読出処理を実行する(ステップS01)。
【0049】
データ読出処理を完了すると、CPU36はその処理結果が異常終了であったか否かを判定する(ステップS02)。ステップS02の判定結果がYesである場合にはCPU36は異常処理(ステップS05)を実行してアプリケーションプログラムの実行を完了する。これに対して、ステップS02の判定結果がNoである場合にはCPU36はアプリケーションプログラムのコードにしたがってアプリケーション処理を実行し(ステップS03)、さらにその処理結果のデータをメモリ装置35に書き込むためにデータ書込関数を呼び出し、データ書込処理を実行する(ステップS04)。
【0050】
以上がアプリケーションプログラムにしたがってCPU36が実行する処理の流れである。なお、ステップS03にて実行されるアプリケーション処理の処理内容はアプリケーションプログラムの種類に応じて定まる。以下では、データ書込処理、データ読出処理および診断修復処理について説明する。また、以下では、便宜上、データ書込処理を先に説明する。これは、データ読出処理における読み出し対象データは、データ書込処理によってメモリ装置35に書き込まれたデータだからである。
【0051】
<データ書込処理の処理手順>
図7は、データ書込処理の流れを示すフローチャートである。本実施形態においてデータ書込関数(関数名;wsdat)を呼び出す際に指定するパラメータ(データ書込関数wsdatの引数)は、書き込みデータ名と書き込みデータである。以下では、データ書込関数wsdatを呼び出すコードの記述例が「rinf=wsdat(a[2]=20)」である場合について説明する。これは、書き込みデータ名がaである整数型の配列の3番目(相対値)に整数値20を書き込みデータとして書き込むことを意味している。上記コードの記述例においてrinfはデータ書込関数wsdatの戻り値(例えば、書き込みの成否を示す関数値)を意味するが、
図6に示すように、本実施形態ではこの戻り値は使用されない。
【0052】
本実施形態では、データ書込関数wsdatを呼び出す際にパラメータとして書き込みデータ名と書き込みデータとを指定する例について説明するが、これに限定されるものではない。例えば連続した書き込みアドレスの各々にデータを書き込む場合には、書き込み先頭相対アドレスと、書き込みデータバイト数と、書き込みデータとをパラメータとして指定し、各データを関連付けて一括して書き込むこともできる。
【0053】
データ書込関数wsdatにしたがって作動し、書き込みデータ名および書き込みデータを引き渡されたCPU36は、データ書込処理を実行するメモリアクセス制御手段14aとして機能する。CPU36は、まず、
図7に示すように、データ管理テーブル12と構造体定義ファイル13とを読み出し、書き込み先頭アドレスを計算する(ステップSA01)。なお、書き込み先頭アドレスについては、例えば「書き込み先頭アドレス=データ領域1先頭アドレス+書き込みデータ名先頭アドレス+(相対値−1)×データ名バイト数」のような式を用いて算出することがきるが、これに限定されるものではない。
【0054】
次に、CPU36は、パラメータのデータを構造体定義ファイル13のデータ名に対応するバイト数分書き込む(ステップSA02)。例えば、整数型のデータ名であれば、CPU36は、2バイト分のデータを書き込む。次に、CPU36は、データ管理テーブル12から「データ領域2」の先頭アドレスを読み出し、構造体定義ファイル13を参照して書き込み先頭アドレスを計算する(ステップSA03)。ステップSA03の処理における計算では、上述したステップSA01における計算とデータ領域先頭アドレスのみが異なる。具体的には、「書き込み先頭アドレス=データ領域2先頭アドレス+書き込みデータ名先頭アドレス+(相対値−1)×データ名バイト数」のような式を用いて書き込み先頭アドレスを計算することができる。
【0055】
次に、CPU36は、書き込みデータと例えば16進数ffffのEOR演算を行って反転データを生成し(ステップSA04)、その反転データを対応するデータ型のバイト数で書き込む(ステップSA05)。そのとき書き込むアドレスは、上述したステップSA03の処理で計算したアドレスに書き込む。
【0056】
次に、CPU36は、データ管理テーブル12から「データ領域3」の先頭アドレスを読み出し、構造体定義ファイル13を参照して書き込み先頭アドレスを計算する(ステップSA06)。なお、ステップSA06における書き込み先頭アドレスの計算は、上述したステップSA03における計算と同様にデータ領域先頭アドレスが変わるのみである。具体的には、「書き込み先頭アドレス=データ領域3先頭アドレス+書き込みデータ名先頭アドレス+(相対値−1)×データ名バイト数」のような式を用いて書き込み先頭アドレスを計算することができる。
【0057】
次に、CPU36は、書き込みデータと所定のパターン(本実施形態では、16進数aaaa)とのEOR演算を行ってパターンデータを生成し(ステップSA07)、そのパターンデータをステップSA06の処理にて計算されたアドレスから対応するデータ型のバイト数で書き込む(ステップSA08)。
以上がデータ書込処理の流れである。
【0058】
<データ読出処理の処理手順>
次いでデータ読出処理について説明する。
図8は、データ読出処理の流れを示すフローチャートである。本実施形態においてデータ読出関数(関数名:rsdat)を呼び出す際に指定するパラメータ(データ読出関数rsdatの引数)は、読み出しデータ名と読み出しレジスタ名である。以下では、データ読出関数rsdatを呼び出すコードの記述例が「rinf=rsdat(b[4]、x)」である場合について説明する。これは、読み出しデータ名がbである倍長整数型の配列の5番目(相対値)を読み出しレジスタ名bのレジスタに読み出すことを意味している。上記コードの記述例においてrinfはデータ読出関数rsdatの戻り値を意味する。この戻り値は、例えば「正常」(例えば、0)、「異常」(例えば、−1)、「データ修復」(例えば、1)の3種類の値の何れかである。本実施形態では、この戻り値に基づいて
図6のステップS02の判定が為される。
【0059】
本実施形態では、データ読出関数rsdatを呼び出す際に、パラメータとして読み出しデータ名と読み出しレジスタ名とを指定する例について説明するが、これに限定されるものではない。例えば読み出しアドレスが連続したデータを読み出し先頭相対アドレスと、読み出しデータバイト数と、読み出しデータ領域とをパラメータとして、各データを関連付けて一括で読み出すこともできる。
【0060】
データ読出関数rsdatにしたがって作動し、読み出しデータ名および読み出しレジスタ名を引き渡されたCPU36は、データ読出処理を実行するメモリアクセス制御手段14aとして機能する。CPU36は、まず、
図8に示すように、データ管理テーブル12と構造体定義ファイル13とを読み出し、読み出し先頭アドレスを計算する(ステップSB01)。なお、読み出し先頭アドレスについては、例えば「読み出し先頭アドレス1=データ領域1先頭アドレス+読み出しデータ名先頭アドレス+(相対値−1)×データ名バイト数」、「読み出し先頭アドレス2=データ領域2先頭アドレス+読み出しデータ名先頭アドレス+(相対値−1)×データ名バイト数」、「読み出し先頭アドレス3=データ領域3先頭アドレス+読み出しデータ名先頭アドレス+(相対値−1)×データ名バイト数」のような式を用いて算出することがきるが、これに限定されるものではない。
【0061】
CPU36は、読み出し先頭アドレス1、2、3から、各データ領域に書き込まれているデータを所定の読み出しデータバイト数で読み出す(ステップSB02)。以下では、上記の要領で読み込まれたデータを便宜上データ1、2、3とする。本実施形態では、データ1はデータ領域1から読み出される正データであり、データ2はデータ領域2から読み出される反転データであり、データ3はデータ領域3から読み出されるパターンデータである。
【0062】
次に、CPU36は、データ2と16進数ffffとのEOR演算を行うとともに、データ3と所定のパターン(16進数aaaa)とのEOR演算を行う(ステップSB03)。以下では、前者の演算結果をデータaと呼び、後者の演算結果をデータbと呼ぶ。ステップSB03の処理は、反転データおよびパターンデータを各々の算出元となった正データに戻すための処理である。なお、反転データおよびパターンデータの生成のための演算としてEOR演算以外の演算を用いる場合は、ステップSB03では当該演算の逆演算を行うようにすれば良い。
【0063】
次に、CPU36は、データ1と、データa,bとを照合し、データの一致を確認する(ステップSB04)。3つのデータが一致している場合(ステップSB05:Yes)には、CPU36は、データ1をデータ読み出しレジスタ名の示すレジスタにセットするとともに関数値に「正常」を示す値をセットして(ステップSB06)、データ読出処理を完了する。これに対して、3つのデータの中に他とは一致しないものが含まれていた場合(ステップSB05:No)には、CPU36は診断修復処理(すなわち、
図4における(3)および(4)の処理)を実行する(ステップSB07)。
【0064】
<診断修復処理の処理手順>
図9は診断修復処理の流れを示すフローチャートである。
図9に示すように、本実施形態の診断修復処理は、ステップSC01〜ステップSC11の各処理によって構成されている。
図9におけるステップSC01、ステップSC02およびステップSC11の各処理が、
図4における(3)の処理、すなわち、特定手段14bの処理であり、ステップSC03〜ステップSC010の各処理が
図4における(4)の処理、すなわち、診断修復手段14cの処理である。
図9に示すように、CPU36は、データ1、データa、およびデータbのうちの何れか2つのデータが一致するか否かを判定する(ステップSC01)。ステップSC01の判定結果がNoである場合、すなわち、データ1とデータaとが一致せず、データ1とデータbとが一致せず、さらにデータaとデータbも一致しない場合には、CPU36は関数値に「異常」を示す値(ハードエラーの発生を示す値)をセット(ステップSC11)して診断修復処理を完了する。これに対して、ステップSC01の判定結果がYesである場合、すなわち、データ1、データa、およびデータbのうちの何れか2つのデータが一致していた場合には、CPU36はステップSC02の処理を実行する。
【0065】
ステップSC01の判定結果がYesである場合に実行されるステップSC02では、CPU36は、データ1、データa、およびデータbのうち他とは一致しなかったデータの格納先のデータ領域を診断対象領域として特定し、その診断対象領域のアドレスを記憶するとともに、データ1、データa、およびデータbのうちで互いに一致するデータのうちの一方を修復データとして特定し記憶する。つまり、本実施形態では、データ1、データa、およびデータbのうちで多数を占めるデータが修復データとなり、少数となったデータの格納先が診断対象領域となる。
【0066】
上記の要領で診断対象領域が特定されると、CPU36は、診断対象領域におけるエラー原因がソフトエラーであるか否かを判定し、ソフトエラーであった場合には修復を行う。より詳細に説明すると、CPU36は、まず、診断対象領域に第1のテストデータ(本実施形態では、16進数5555)を書き込む(ステップSC03)。なお、ステップSC03にて診断対象領域にデータを書き込む際には、CPU36は、キャッシュをスルーしてその書き込みを行う。次いで、CPU36は、診断対象領域からデータを読み出し(ステップSC04)、読み出したデータと上記書き込み前の第1のテストデータとが一致するか否かを判定する(ステップSC05)。ステップSC05の判定結果がNoの場合、すなわち、診断対象領域読み出したデータと第1のテストデータとが一致しなかった場合には、CPU36は、前述のステップSC11の処理を実行する。これに対して、ステップSC05の判定結果がYesであった場合は、CPU36は、診断対象領域に第2のテストデータ(本実施形態では、16進数aaaa)を書き込む(ステップSC06)。なお、ステップSC06にて診断対象領域にデータを書き込む際も、CPU36はキャッシュをスルーしてその書き込みを行う。
【0067】
次いで、CPU36は、診断対象領域からデータを読み出し(ステップSC07)、読み出したデータと上記書き込み前の第2のテストデータとが一致するか否かを判定する(ステップSC08)。ステップSC08の判定結果がNoの場合は、CPU36は前述のステップSC11の処理を実行する。これに対して、ステップSC08の判定結果がYesであった場合は、CPU36は診断対象領域について発生したデータエラーはソフトエラーであると判定し、診断対象領域に修復データを書き込む(ステップSC09)ことでその修復を行い、関数値に「データ修復」を示す値をセット(ステップSC10)して診断修復処理を終了する。
【0068】
第2のテストデータは、第1のテストデータの構成ビットを反転させたデータである。本実施形態において第1のテストデータと第2のテストデータの2種類のテストデータを用いて診断対象領域の診断を行うのは、仮に第1のテストデータのみ、或いは第2のテストデータのみを用いて診断対象領域の診断を行うとハードエラーを検出し損ねる虞があるからである。例えば、最上位ビットが0のままとなるハードエラーが診断対象領域に発生している状況下で第2のテストデータのみを用いて診断対象領域の診断を行うと、このハードエラーを検出し損ねてしまう。構成ビットが互いに反転した関係にある2種類のテストデータを用いて診断対象領域の診断を行えば、ハードエラーの検出漏れを回避することができる。なお、本実施形態では第1および第2のテストデータとして16進数5555および16進数aaaaの2種類を用いたが、16進数0000と16進数ffffを用いても良い。要は、構成ビットが互いに反転した関係にある2種類のテストデータを用いて診断対象領域の診断を行う態様であれば良い。また、16進数00aaと16進数ffaaと16進数bb55といった互いに異なる3種類のテストデータを用いても同様の効果を得ることは可能である。
【0069】
ここで注目すべき点は、本実施形態によれば、メモリ装置35からのデータの読み出しやアプリケーション処理、およびメモリ装置35へのデータの書き込みを行うハードウェア(すなわち、CPU36)の他に、検証のためのハードウェアが別途必要になることはない、という点である。検証のためのハードウェアを別途必要としないため、本実施形態によれば、特許文献3に開示の技術のようにハードウェアコストが増加することはない。つまり、本実施形態によれば、ハードウェアコストの増加を招くことなく、リアルタイムに読み書きされるメモリについてのソフトエラーの有無の診断および修復を、当該メモリからのデータ読出しのタイミングで行うことが可能になる。
【0070】
また、本実施形態では、ECCを用いる場合に比較してCPU36に掛かる処理負荷が小さいといった利点もある。このように、本実施形態の診断修復装置10は、CPU36に掛かる処理負荷が小さく、かつリアルタイムに読み書きされるメモリについてのソフトエラーの有無の診断および修復をハードウェアコストの増加を招くことなく実現することができる。このため、本実施形態の診断修復装置10は、ソフトエラーの有無の診断および修復をリアルタイムかつ少ないハードウェアリソースで行うこと(すなわち、小規模・低コストなハードウェアにおいて小負荷で行うこと)を要求される電子機器に好適である。このような電子機器の具体例としては、自動車のコントローラであるVCU(Vehicle Control Unit)が挙げられる。
【0071】
以上本発明の一実施形態について説明したが、この実施形態に以下の変形を加えても良い。
(1)上記実施形態では、正データ、反転データおよびパターンデータを各々1つずつ、すなわち合計3個のデータのうち多数を占めるデータを修復データとしてソフトエラーの修復を行った。しかし、多数を占めるデータの数が予め定められた閾値未満である場合には、当該多数のデータについても信頼性に疑義があると見做し、データ修復に換えてハードエラーの通知とは異なるエラー通知を行うようにしても良い。なお、上記閾値については、正データ、反転データおよび排他的論理和データの数の合計値以下で、かつ正データ、反転データおよびパターンデータの数の過半数の値よりも大きい値であれば良く、整数値である必要はない。
【0072】
(2)上記実施形態では、正データ、反転データおよびパターンデータを各々1つずつ、すなわち合計3個のデータを用いてソフトエラーの発生の有無の診断を行った。しかし、2個の正データと2個の反転データと1つのパターンデータの合計5つのデータを用いてソフトエラーの発生の有無の診断行っても良く、7個以上の奇数個のデータを用いてソフトエラーの発生の有無の診断を行っても良い。また、上記閾値による判定を併用する態様であれば、正データ、反転データおよびパターンデータの数の合計値は偶数であっても良い。例えば6個のデータを用いる場合には上記閾値を3.1、4或いは5に設定しておけば良い。
【0073】
(3)上記実施形態ではメモリアクセス制御手段14a、特定手段14bおよび診断修復手段14cの各々をソフトウェアモジュールで実現したが、これら各手段のうちの何れか1つまたは複数を電子回路等のハードウェアで実現しても良い。また、上記実施形態では、ソフトエラーの診断および修復対象となるメモリ11が診断修復装置10に含まれていたが、メモリ11が診断修復装置10の外部に設けられていても良い。また、上記実施形態のメモリアクセス制御手段14aは、診断対象のメモリへのデータの書き込みを行うデータ書込処理と当該メモリからのデータの読み出しを行うデータ読出処理とを実行したが、データ書込処理については他の装置が行う態様であっても良い。
【0074】
要するに本発明の診断修復装置は、読み出し対象として指定されたデータをメモリから読み出すとともに当該データに対応付けてメモリに格納された少なくとも2つのデータをメモリから読み出すメモリアクセス制御手段と、メモリアクセス制御手段により読み出された少なくとも3つのデータの全てが同一ではない場合に多数を占めるデータを修復データとして特定するとともに少数となったデータのメモリにおける記憶領域を診断対象領域として特定する特定手段と、診断対象領域へテストデータを書き込んだ後に診断対象領域からデータを読み出し、当該読み出したデータと書き込み前のテストデータとが一致する場合に修復データを用いて診断対象領域を修復する一方、一致しない場合にはハードエラーのエラー通知を行う診断修復手段とを有していれば良い。