(57)【要約】【課題】多ビットのメモリ故障であっても、効率よく、主記憶装置が使用不可になることを回避する。【解決手段】主記憶装置２の初期化において、主記憶装置初期化／故障検出部６は、キャッシュメモリ５のキャッシュ有効フラグ４ａに’０’を設定し、キャッシュメモリ５を無効とする。その後、主記憶装置２のＳバイト領域に検査データＷを記憶させた後に、主記憶装置２のＳバイト領域を読み取った後、検査データＷの反転データである検査データＷＷを主記憶装置２のＳバイト領域に記憶させて、そのＳバイト領域のデータを読み取る。検査データＷ，ＷＷと読み取ったデータとが同じでない場合、主記憶装置２のＳバイト領域が異常と見なし、そのＳバイト領域をキャッシュメモリ５の任意のメモリ領域に割り付けて該Ｓバイト領域を救済する。【選択図】図１
2008065745.tif 000002
【特許請求の範囲】
【請求項１】
主記憶装置と、前記主記憶装置のキャッシュとなる補助メモリと、前記補助メモリの制御を行う補助メモリ制御部とを有し、
前記主記憶装置におけるメモリ故障の検出を任意の期間に実行し、前記主記憶装置にメモリ故障が検出された際に、前記メモリ故障の記憶領域をアクセス禁止とする故障検出制御部を備えたことを特徴とする記憶装置。
【請求項２】
請求項１記載の記憶装置において、
前記故障検出制御部は、
前記主記憶装置におけるメモリ故障の記憶領域を、前記補助メモリの任意の領域に割り付ける処理を行うことを特徴とする記憶装置。
【請求項３】
請求項１または２記載の記憶装置において、
前記補助メモリは、
前記主記憶装置のメモリ故障の領域の代替となっていることを示す常駐フラグを有し、
前記故障検出制御部は、
前記常駐フラグが設定されている場合、前記主記憶装置におけるメモリ故障の記憶領域を前記補助メモリの任意の領域に割り付けた後、前記補助メモリの任意の領域を前記主記憶装置の記憶領域としてアクセス可能となるように処理することを特徴とする記憶装置。
【請求項４】
請求項１〜３のいずれか１項に記載の記憶装置において、
前記故障検出制御部は、
前記主記憶装置におけるメモリ故障の検出処理を、前記記憶装置の初期化期間に実行することを特徴とする記憶装置。
【請求項５】
請求項１〜４のいずれか１項に記載の記憶装置において、
前記補助メモリ制御部は、
前記補助メモリの有効／無効を設定する補助メモリ設定部を備え、
前記故障検出制御部が、前記主記憶装置におけるメモリ故障の検出、および前記メモリ故障の記憶領域の救済が終了するまで、前記補助メモリを無効とし、前記主記憶装置へのアクセスに前記補助メモリが影響しないように制御することを特徴とする記憶装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶装置の信頼性の向上技術に関し、特に、キャッシュメモリを用いた主記憶装置におけるメモリ故障の救済に有効な技術に関する。
【背景技術】
【０００２】
近年、画像処理装置やパーソナルコンピュータなどの電子システムには、データの書き換えが可能な記憶装置が広く用いられている。記憶装置には、高性能や高信頼性を実現するために、リードエラーなどのエラー訂正を行うために様々な技術が用いられている。
【０００３】
この種の記憶装置において、該記憶装置のデータを回復する技術として、たとえば、異常発生ブロックのデータを回復後にキャッシュメモリ上の常駐領域にセーブすることにより正常動作を継続するものが知られている（特許文献１参照）。
【０００４】
また、記憶装置のソフトエラーによりメモリビットの反転を対策する技術として、メモリアクセス時における訂正可能エラーの検出に応答してそのエラーアドレスに対するメモリパトロールを実行し、その記憶内容を回復可能とするものがある（特許文献２参照）。
【特許文献１】特開２００２−１２３３７２号公報
【特許文献２】特開平０５−２３３４７２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところが、上記のような記憶装置のエラー回復技術では、次のような問題点があることが本発明者により見い出された。
【０００６】
すなわち、上記した特許文献１，２では、いずれもデータに冗長性を持たせた際にデータが回復可能な場合の技術である。記憶装置に冗長性を持たせる場合、該記憶装置のコストが大きくなってしまうという問題がある。それにより、低コストが要求される記憶装置では、冗長性を持たせる余裕がなくなってしまう恐れがある。
【０００７】
また、冗長性によってデータ回復が可能なケースは、破損の度合いが軽い場合（たとえば、１ビット程度）に限られており、破損の度合いが重い場合には、エラー回復ができないという問題がある。
【０００８】
本発明の目的は、多ビットのメモリ故障であっても、効率よく、主記憶装置が使用不可になることを回避することのできる技術を提供することにある。
【０００９】
本発明の前記ならびにそのほかの目的と新規な特徴については、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１０】
本願において開示される発明のうち、代表的なものの概要を簡単に説明すれば、次のとおりである。
【００１１】
本発明は、主記憶装置と、該主記憶装置のキャッシュとなる補助メモリと、該補助メモリの制御を行う補助メモリ制御部とを有し、主記憶装置におけるメモリ故障の検出を任意の期間に実行し、主記憶装置にメモリ故障が検出された際に、そのメモリ故障の記憶領域をアクセス禁止とする故障検出制御部を備えたものである。
【００１２】
また、本願のその他の発明の概要を簡単に示す。
【００１３】
本発明は、前記故障検出制御部が、主記憶装置におけるメモリ故障の記憶領域を、補助メモリの任意の領域に割り付ける処理を行うものである。
【００１４】
また、本発明は、前記補助メモリが、主記憶装置のメモリ故障の領域の代替となっていることを示す常駐フラグを有し、故障検出制御部が、常駐フラグが設定されている場合、主記憶装置におけるメモリ故障の記憶領域を補助メモリの任意の領域に割り付けた後、補助メモリの任意の領域を主記憶装置の記憶領域としてアクセス可能となるように処理するものである。
【００１５】
さらに、本発明は、前記故障検出制御部が、主記憶装置におけるメモリ故障の検出処理を、記憶装置の初期化期間に実行するものである。
【００１６】
また、本発明は、前記補助メモリ制御部が、補助メモリの有効／無効を設定する補助メモリ設定部を備え、故障検出制御部が、主記憶装置におけるメモリ故障の検出、およびメモリ故障の記憶領域の救済が終了するまで、補助メモリを無効とし、主記憶装置へのアクセスに補助メモリが影響しないように制御するものである。
【発明の効果】
【００１７】
本願において開示される発明のうち、代表的なものによって得られる効果を簡単に説明すれば以下のとおりである。
【００１８】
（１）記憶装置におけるメモリ故障を検出し、補助メモリにより代替して救済するので、多ビットのメモリ故障であっても効率よく救済することができる。
【００１９】
（２）上記（１）により、記憶装置の信頼性を大幅に向上させることができる。
【発明を実施するための最良の形態】
【００２０】
以下、本発明の実施の形態を図面に基づいて詳細に説明する。なお、実施の形態を説明するための全図において、同一の部材には原則として同一の符号を付し、その繰り返しの説明は省略する。
【００２１】
図１は、本発明の一実施の形態による記憶装置の構成例を示すブロック図、図２は、図１の記憶装置における初期化動作の一例を示すフローチャート、図３は、図２のステップＳ１０２の処理における詳細なフローチャートである。
【００２２】
本実施の形態において、記憶装置１は、図１に示すように、主記憶装置２、主記憶制御回路３、キャッシュ制御回路４、キャッシュメモリ５、主記憶装置初期化／故障検出部６、および主記憶故障通知部７から構成されている。
【００２３】
この記憶装置１は、たとえば、パーソナルコンピュータや画像処理システムなどの情報システム、アドレス付けされた大容量記憶装置を用いて構成される様々な電子システムに適用可能である。
【００２４】
主記憶装置２は、書き換え可能な記憶装置であり、先頭アドレスから末尾アドレスまで連続したアドレスが割り付けられている。主記憶装置１には、主記憶制御回路３が接続されている。
【００２５】
主記憶制御回路３は、主記憶装置２をアクセスするときのデータバス幅や、ウェイト数などを制御する。この主記憶制御回路３には、補助メモリ制御部として機能するキャッシュ制御回路４が接続されている。キャッシュ制御回路４には、補助メモリとして機能するキャッシュメモリ５が接続されている。
【００２６】
キャッシュ制御回路４は、キャッシュメモリ５の制御を行う。キャッシュ制御回路４は、補助メモリ設定部として機能するキャッシュ有効フラグ４ａ、およびＬＲＵ（Ｌｅａｓｔ  Ｒｅｃｅｎｔｌｙ  Ｕｓｅｄ）ベクタ４ｂをそれぞれ有している。
【００２７】
キャッシュ有効フラグ４ａに’１’を設定するとキャッシュメモリ５が有効となり、キャッシュ有効フラグ４ａに’０’を設定するとキャッシュメモリ５が無効になる。
【００２８】
ＬＲＵベクタ４ｂは、キャッシュメモリ５のエントリ数Ｎに対し、（Ｎ＊（Ｎ−１）／２）個のビットからなるベクタである。このＬＲＵベクタ４ｂは、キャッシュメモリ５のエントリの中から最も古く使用されたエントリを見つけることを目的とするベクタである。ＬＲＵベクタ４ｂは、キャッシュメモリ５のＮ個のエントリが使用された順序を記録する。
【００２９】
キャッシュメモリ５は、たとえば、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）などからなる高速メモリであり、使用頻度の高いデータなどが格納される。
【００３０】
故障検出制御部として機能する主記憶装置初期化／故障検出部６は、専用ハードウェア、または、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）とプログラムからなり、後述するアルゴリズム（図２、および図３）を実現する。
【００３１】
主記憶装置初期化／故障検出部６は、読み書き可能でＳバイト幅のレジスタ６ａ，６ｂ，６ｃ、およびＳバイト幅のデータである開始アドレスＡＳ、終了アドレスＡＥ、検査データＷ，ＷＷをそれぞれ有している。
【００３２】
開始アドレスＡＳは、主記憶装置２の先頭アドレスである。終了アドレスＳＥは、主記憶装置２の開始アドレスＡＳに主記憶装置２のサイズを足した数である。開始アドレスＡＳ、ならびに終了アドレスＡＥは、キャッシュメモリ５のデータブロックサイズＬで割り切れる数と仮定して一般性を失わない。
【００３３】
検査データＷは、Ｓバイトの任意のデータである。たとえば、Ｓバイトの全ビットが１であるデータでよい。主記憶装置２の検査対象のアドレスから始まるＳバイトに検査データＷを書き込んだ後に当該アドレスから始まるＳバイトを読み込んだ時に、読み込んだ値が検査データＷと等しければ正常と判断し、等しくなければ異常と判断する。検査データＷＷは、検査データＷをビット毎に反転した値である。
【００３４】
検査データＷとそれを反転した検査データＷＷとを検査データとして使うことにより、主記憶装置２の検査対象アドレスから始まるＳバイトの領域に０固定となる不良ビット、または１固定となる不良ビットがあることを発見することができる。
【００３５】
主記憶故障通知部７は、記憶装置１を用いるシステムに対して主記憶装置２の故障発生状況をＬＥＤ（Ｌｉｇｈｔ  Ｅｍｉｔｔｉｎｇ  Ｄｉｏｄｅ）などを点灯させて知らせる。
【００３６】
主記憶故障通知部７において、救済不可表示部１３は、ＯＮの状態で主記憶装置２に救済できなかった故障が発生したことを表示し、ＯＦＦの状態でそのような故障がないことを示し、縮退運転表示部１４は、ＯＮの状態で主記憶装置２に故障があり、キャッシュメモリ５に故障箇所を含むブロックをマッピングして稼動中であることを表示し、ＯＦＦの状態でそのような状態でないことを示す。
【００３７】
また、主記憶制御回路３、キャッシュ制御回路４、記憶装置初期化／故障検出部６、ならびに主記憶故障通知部７は、バス１５から各々に設けられたバス接続子を介して相互に接続されている。バス１５は、発信元経路識別子、コマンド、アドレス、データの４つ組みからなるパケットを受け取り、当該アドレスが割り付いているバス接続子へ経路を介して転送する。
【００３８】
パケットの発信元経路識別子はパケットを発信した経路を識別するための数字である。パケットのコマンドは要求と応答からなる。要求にはリード要求とライト要求があり、応答にはリード応答、ライト応答がある。
【００３９】
リード要求、ライト要求、リード応答、ライト応答はアクセスサイズ１バイト、２バイト、４バイト、８バイトに細分化されている。パケットのアドレスはパケットのコマンドがリード要求またはライト要求の時に有意であり、転送先のアドレスからなる。
【００４０】
バケットのデータはパケットのコマンドがライト要求、または、リード応答の時に有意であり、ライト要求ではライトするデータ、リード応答ではリードしたデータからなる。
【００４１】
各バス接続子にはお互いに重ならないアドレス範囲が割り付けられている。アドレス範囲に対応した経路を作り、主記憶制御回路３には、経路３４１、キャッシュ制御回路４には経路３４２と経路３４３、主記憶装置初期化／故障検出部６には、経路３４４、主記憶故障通知部７には、経路３４５を介してバス１５と接続している。
【００４２】
特に、キャッシュ制御回路４には、経路３４２と経路３４３の２つの経路があり、経路３４２は主記憶装置２のアドレス範囲に対応した経路であり、経路３４３はキャッシュ有効フラグ４ａ、およびＬＲＵベクタ４ｂを集結した領域のアドレス範囲に対応した経路である。
【００４３】
経路３４１、経路３４２、経路３４３、経路３４４、経路３４５に対して、パケットの発信元経路識別子に記述する経路識別子を互いに異なる数字として割り当てている。
【００４４】
次に、キャッシュメモリ５の構成について説明する。
【００４５】
キャッシュメモリ５は、Ｎエントリのフルアソシエイティブキャッシュである。言い換えればインデックス数が１のＮウェイキャッシュである。Ｎ個のエントリそれぞれに対してデータブロック８、アドレスタグ９、不一致フラグ１０、有効フラグ１１、常駐フラグ１２という読み書き可能な記憶領域がある。
【００４６】
各エントリの有効フラグ１１は当、該エントリが有効か無効かを示す。有効フラグ１１が’１’のエントリは有効であり、有効フラグ１１が’０’のエントリは無効である。
【００４７】
有効フラグ１１が’１’のエントリのデータブロック８、アドレスタグ９、不一致フラグ１０、常駐フラグ１２は有意な値を持ち、有効フラグ１１が’０’のエントリのデータブロック８、アドレスタグ９、不一致フラグ１０、常駐フラグ１２は意味の無い値を持ち使用しない。
【００４８】
データブロック８は、エントリ毎にＬバイト幅のデータを記憶する。Ｌは２のｐ乗である。アドレスタグ９は、当該エントリのデータブロック８が主記憶装置２におけるどのアドレスのブロックのデータを持つかを示す。
【００４９】
主記憶装置２のアドレスＫ番地を含むブロックのアドレスタグはＫ／Ｌである。主記憶装置２のアドレス空間のビット幅がＭビットとすると、アドレスタグ９のビット幅は（Ｍ−ｐ）である。
【００５０】
不一致フラグ１０は、当該エントリのデータブロック８の記憶する内容と、アドレスタグ９が示す主記憶装置２のブロックの内容とが一致するか否かを示す。一致する場合は’０’、一致しない場合は’１’となるように設定する。
【００５１】
常駐フラグ１２は、当該エントリをキャッシュメモリ５に常駐するか否かを指示する。常駐フラグ１２が’１’のエントリはアドレスタグ９がさす主記憶装置２のブロックの内容がデータブロック８に常駐するようにキャッシュ制御回路４が保護する。
【００５２】
キャッシュメモリ５の各エントリのデータブロック８、アドレスタグ９、不一致フラグ１０、有効フラグ１１、常駐フラグ１２、および、キャッシュ有効フラグ４ａとＬＲＵベクタ４ｂは、主記憶装置初期化／故障検出部６からバス１５を経由して直接読み書きできる。
【００５３】
続いて、キャッシュ制御回路４の動作について説明する。
【００５４】
キャッシュ有効フラグ４ａが’０’の時、キャッシュメモリ５は無効となる、すなわち、バス１５から経路３４２を介する主記憶装置２へのアクセスは直接主記憶装置２へ転送される。
【００５５】
キャッシュ有効フラグ４ａが’１’の時、キャッシュメモリ５は有効となる、すなわち、バス１５から経路３４２を介する主記憶装置２へのアクセスはキャッシュメモリ５の状態に応じた影響を受ける。
【００５６】
ＬＲＵベクタ４ｂは、キャッシュメモリ５のエントリ数Ｎ個に対し、（Ｎ＊（Ｎ−１）／２）個のビットからなる。（Ｎ＊（Ｎ−１）／２）は、Ｎ個から２個を選ぶときの組み合わせの個数である。
【００５７】
Ｎ個のエントリから任意に選んだ第ｉエントリと第ｊエントリ、但しｉ＜ｊ、の関係を表す場所は、ＬＲＵベクタ４ｂの中の決まったビット（ｉ，ｊ）に割り付けられている。第ｉエントリが第ｊエントリより古い時期に使用された場合、ビット（ｉ，ｊ）の値は’０’、第ｉエントリが第ｊエントリより新しい時期に使用された場合、ビット（ｉ，ｊ）の値は’１’とする。
【００５８】
ＬＲＵベクタ４ｂには、２の（Ｎ＊（Ｎ−１）／Ｎ）乗個の状態がありえるが、そのうち有効な状態はＮ個の順列からなるＮ！個、すなわち、Ｎの階乗個である。つまり、ＬＲＵベクタ４ｂはキャッシュメモリ５のＮ個のエントリが最も古く使用された順序を記録することができる。
【００５９】
キャッシュ制御回路４は、キャッシュメモリ５の第ｉエントリが使用された時に、ＬＲＵベクタ４ｂのビットのうち、第ｉエントリに関するビットをアップデートすることで、ＬＲＵベクタ４ｂにＮ個のエントリが最も古く使用された順序を保持する。
【００６０】
以下、キャッシュ有効フラグ４ａが’１’を前提に、主記憶装置２へのアクセスがリードの場合とライトの場合に分けてキャッシュ制御装置４、およびキャッシュメモリ５の動作についてそれぞれ説明する。
【００６１】
まず、主記憶装置２へのアクセスがリードの場合、バス１５から経路３４２を介してアドレスＸに対してＴバイトのリード要求コマンドのパケットがキャッシュ制御回路４へ転送された時、キャッシュ制御回路４は以下の動作Ｄ１０１〜Ｄ１０８の動作を行う。
【００６２】
アドレスＸをデータブロック３１０のバイト幅Ｌで割り算した値の整数部Ｘ／Ｌに対し、アドレスタグ９がＸ／Ｌと一致、かつ、有効フラグ１１が１のエントリが存在する場合Ｄ１０２へ行き、存在しない場合は動作Ｄ１０３へ行く（動作Ｄ１０１）。
【００６３】
アドレスタグ９がＸ／Ｌと一致したエントリのデータブロック８からアドレスＸに該当するＴバイトのデータＤを読み込む。当該エントリが使用されたので当該エントリが最も新しく使用された状態を示すべくＬＲＵベクタ４ｂをアップデートし動作Ｄ１０８へ行く（動作Ｄ１０２）。
【００６４】
キャッシュメモリ５のエントリＮ個の中から有効フラグ１１が’０’（無効）のエントリが有る場合は動作Ｄ１０４へ行き、有効フラグ１１が’０’のエントリが無い場合は動作Ｄ１０５へ行く（動作Ｄ１０３）。
【００６５】
無効エントリがある場合には、有効フラグ１１が’０’（無効）のエントリを任意に選び、動作Ｄ１０７へ行く（動作Ｄ１０４）。また、無効エントリがない場合には、キャッシュメモリ５のＮ個のエントリ全てにおいて常駐フラグ１２が’１’（常駐）の場合、主記憶装置２からアドレスＸから始まるＴバイトのデータＤを読み込み、動作Ｄ１０８へ行き、常駐フラグ１２が’０’（非常駐）のエントリが有る場合は、常駐フラグが’１’（常駐）のエントリを除外したエントリの中で最も古く使われたエントリをＬＲＵベクタ４ｂから探す。探したエントリの不一致フラグ１０が’１’（不一致）の場合は動作Ｄ１０６へ行き、’０’（一致）の場合は動作Ｄ１０７へ行く（動作Ｄ１０５）。
【００６６】
当該エントリは主記憶装置２より新しいデータを持つとみなし、主記憶装置２へデータブロック８の値を書き込む操作を行う。当該エントリのアドレスタグ９の値をＱとし、主記憶装置２の（Ｑ＊Ｌ）番地から始まるＬバイトに当該エントリのデータブロック８にあるＬバイトの値を書き込み、動作Ｄ１０７へ行く（動作Ｄ１０６）。
【００６７】
当該エントリに対しアドレスタグ９をＸ／Ｌに設定し、データブロック８に主記憶装置２の（（Ｘ／Ｌ）＊Ｌ）番地からＬバイトを読み込み、常駐フラグ１２を’０’（非常駐）に設定し、不一致フラグ１０を’０’（一致）に設定し、有効フラグ１１を’１’（有効）に設定し、データブロック８からアドレスＸに該当するＴバイトのデータＤを読み込こむ（動作Ｄ１０７）。当該エントリが使用されたので当該エントリが最も新しく使用された状態を示すべくＬＲＵベクタ４ｂをアップデートする（動作Ｄ１０７）。
【００６８】
続いて、リード要求元にリード応答コマンドのパケットでリードしたデータＤを転送する（動作Ｄ１０８）。
【００６９】
以上の動作Ｄ１０１〜Ｄ１０８の手続きにおいて、常駐フラグ１２が’１’（常駐）のエントリがキャッシュメモリ５に常駐するように保護されている。常駐フラグ１２が’１’（常駐）のエントリは主記憶装置２の故障領域の代替として活用しているためである。
【００７０】
続いて、主記憶装置２へのアクセスがライトの場合について説明する。
【００７１】
バス１５から経路３４２を介してアドレスＸに対してＴバイトのライト要求コマンドのパケットがキャッシュ制御回路４へ転送された時、キャッシュ制御回路４は以下の動作Ｄ２０１〜Ｄ２０８の動作を行う。
【００７２】
なお、以下の説明ではライトアロケート方式を採用するがノンライトアロケート方式でも本発明の趣旨を曲げずに適用することができる。また、コピーバック方式とライトスルー方式の２方式のうちコピーバック方式を採用するが、ライトスルー方式でも本発明の趣旨を曲げずに適用することができる。
【００７３】
まず、アドレスＸをデータブロック８のバイト幅Ｌで割り算した値の整数部Ｘ／Ｌに対し、アドレスタグ９がＸ／Ｌと一致し、かつ、有効フラグ１１が’１’のエントリが存在する場合には動作Ｄ２０２へ行き、存在しない場合は動作Ｄ２０３へ行く（動作Ｄ２０１）。
【００７４】
動作Ｄ２０１において、エントリが存在する場合、アドレスタグ９がＸ／Ｌと一致したエントリのデータブロック８のアドレスＸに該当するＴバイトにライト要求データを書き込む。当該エントリの不一致フラグ１０に’１’（不一致）を設定する。当該エントリが使用されたので当該エントリが最も新しく使用された状態を示すべくＬＲＵベクタ４ｂをアップデートして動作Ｄ２０８に行く（動作Ｄ２０２）。
【００７５】
動作Ｄ２０１でエントリが存在しない場合において、キャッシュメモリ５のエントリＮ個の中から有効フラグ１１が’０’（無効）のエントリが有る場合は動作Ｄ２０４へ行き、有効フラグが’０’のエントリがない場合は動作Ｄ２０５へ行く（動作Ｄ２０３）。
【００７６】
無効エントリが有る場合、有効フラグ１１が’０’（無効）のエントリを任意に選び、動作Ｄ２０７へ行く（動作Ｄ２０４）。
【００７７】
動作Ｄ２０３で有効フラグ１１が’０’のエントリがない場合において、キャッシュメモリ５のＮ個のエントリ全てにおいて常駐フラグ１２が’１’（常駐）の場合、主記憶装置２のアドレスＸから始まるＴバイトにライト要求データを読み込み、動作Ｄ２０８へ行く（動作Ｄ２０５）。また、常駐フラグ１２が’０’（非常駐）のエントリが有る場合は、常駐フラグが’１’（常駐）のエントリを除外したエントリの中で最も古く使われたエントリをＬＲＵベクタ４ｂから探す。探したエントリの不一致フラグ１０が’１’（不一致）の場合は、動作Ｄ２０６へ行き、’０’（一致）の場合は、動作Ｄ２０７へ行く（動作Ｄ２０５）。
【００７８】
動作Ｄ２０５で不一致の場合、当該エントリは主記憶装置２より新しいデータを持つとみなし主記憶装置２へデータブロック８の値を書き込む操作を行う。当該エントリのアドレスタグ９の値をＱとし、主記憶装置２の（Ｑ＊Ｌ）番地から始まるＬバイトに当該エントリのデータブロック８にあるＬバイトの値を書き込み、動作Ｄ２０７へ行く（動作Ｄ２０６）。
【００７９】
当該エントリに対し、アドレスタグ９をＸ／Ｌに設定し、データブロック８に主記憶装置２の（（Ｘ／Ｌ）＊Ｌ）番地からＬバイトを読み込み（ライトアロケート方式の特徴）、常駐フラグ１２を’０’（非常駐）に設定し、不一致フラグ１０を’１’（不一致）に設定し、有効フラグ１１を’１’（有効）に設定し、データブロック８のアドレスＸに該当するＴバイトにライト要求データを書き込む（コピーバッグ方式のため、主記憶装置２へデータの書き込みは行わない）。
【００８０】
当該エントリが使用されたので当該エントリが最も新しく使用された状態を示すべくＬＲＵベクタ４ｂをアップデートする（動作Ｄ２０７）。
【００８１】
続いて、ライト要求元にライト応答コマンドのパケットを転送する（動作Ｄ２０８）。
【００８２】
以上の動作Ｄ２０１〜Ｄ２０８の手続きにおいて常駐フラグ１２が’１’（常駐）のエントリがキャッシュメモリ５に常駐するように保護されている。常駐フラグ１２が’１’（常駐）のエントリは主記憶装置２の故障領域の代替として活用しているためである。
【００８３】
図２は、本実施の形態による記憶装置１の初期化動作の一例を示すフローチャートである。
【００８４】
まず、システムに電源が投入されたことなどにより、初期化のイベントが発生すると、システムで利用可能とするための主記憶装置２の初期化が行われる（ステップＳ１０１）。このステップＳ１０１の処理では、データ経路のビット幅、主記憶装置２へのアクセスタイミングなどを主記憶制御回路３に設定する処理などを行う。
【００８５】
続いて、主記憶装置２のテスト、故障箇所の摘出、および故障箇所の救済を行う（ステップＳ１０２）。このステップＳ１０２の処理においては、図３を用いて詳しく説明する。
【００８６】
このステップＳ１０２の処理において、主記憶装置２が正常、あるいは主記憶装置２に異常な領域があるがキャッシュメモリ５、およびキャッシュ制御回路４によって該領域が救済された場合には、主記憶装置２の初期化以降に続くシステム起動処理を行う（ステップＳ１０３）。ステップＳ１０３の処理では、主記憶装置２を用いるシステムの初期化を行い、その初期化が終了後に該システムが稼動する。
【００８７】
図３は、図２のステップＳ１０２における主記憶装置２の故障箇所の摘出、および故障箇所救済の動作を行う際の主記憶装置初期化／故障検出部６の処理例を示したフローチャートである。
【００８８】
まず、主記憶装置２の故障検出兼救済の処理が開始されると、主記憶装置初期化／故障検出部６は、キャッシュメモリ５のキャッシュ有効フラグ４ａに’０’を設定する（ステップＳ２０１）。すなわち、キャッシュメモリ５を無効とする。
【００８９】
キャッシュメモリ５が無効ということは、主記憶装置２へのアクセスにキャッシュメモリ５が影響しないことを示すことになる。この場合、キャッシュメモリ５の初期化が済むまで、該キャッシュメモリ５は無効とする。
【００９０】
また、ステップＳ２０１の処理では、キャッシュメモリ５の全エントリの有効フラグ１１に’０’を設定して全エントリを無効とし、該キャッシュメモリ５の全エントリの常駐フラグ１２に’０’を設定し全エントリを非常駐とする。
【００９１】
続いて、主記憶装置初期化／故障検出部６は、救済不可表示部１３、および縮退運転表示部１４をそれぞれＯＦＦ、すなわち正常状態に初期化する（ステップＳ２０２）。これ以降、主記憶装置２に異常が発見された際には、救済不可表示部１３、または縮退運転表示部１４がその異常状態を表示する。
【００９２】
その後、主記憶装置初期化／故障検出部６は、レジスタ６ａに主記憶装置２の検査の開始アドレスＡＳを設定する（ステップＳ２０３）。そして、レジスタ６ａの値を先頭アドレスとする主記憶装置２のＳバイト領域に検査データＷを記憶させた後に、該レジスタ６ａの値を先頭アドレスとする主記憶装置２のＳバイト領域を読み取った値をレジスタ６ｂの値とする（ステップＳ２０４）。
【００９３】
レジスタ６ａの値を先頭アドレスとする主記憶装置２のＳバイト領域に検査データＷＷを記憶させた後に、レジスタ６ａの値を先頭アドレスとする主記憶装置２のＳバイト領域を読み取った値をレジスタ６ｃの値とする（ステップＳ２０５）。
【００９４】
レジスタ６ｂと検査データＷとが等しく、かつ、レジスタ６ｃと検査データＷＷとが等しい場合には、レジスタ６ａの値を先頭アドレスとする主記憶装置２のＳバイト領域が正常と見なし、その他の場合に当該領域が異常と見なす。
【００９５】
ここで、当該領域が正常の場合は、当該領域に関する処理を終了し、ステップＳ２１１の処理へ進む。また、当該領域が異常の場合は当該領域の故障を救済すべく、ステップＳ２０７へ進む（ステップＳ２０６）。
【００９６】
レジスタ６ａがさすアドレスのエントリがキャッシュメモリ５に既に常駐しているか否かをチェックし、既に常駐している場合には異常な領域が既に救済されているのでステップＳ２１１の処理を実行し、常駐していない場合は異常な領域を救済すべくステップＳ２０８の処理へ進む（ステップＳ２０７）。
【００９７】
レジスタ６ａが持つアドレスをＹとして具体的に説明すると、キャッシュメモリ５のエントリをスキャンして常駐フラグ１２が’１’（常駐）、有効フラグ１１が’１’（有効）、かつアドレスタグ９がＹ／Ｌとなるエントリが有れば既に異常な領域を含むエントリがキャッシュメモリ５に常駐しているのでステップＳ２１１の処理に進み、なければステップＳ２０８の処理へ進む。
【００９８】
一般にデータブロック８のサイズＬは検査データＷや検査データＷＷのサイズＳより大きいため異常な領域が既に常駐していることが有り得る。
【００９９】
そして、レジスタ６ａがさすアドレスのエントリをキャッシュメモリ５に新規に常駐可能か否かを調べ、常駐が可能な場合は異常な領域を救済すべくステップＳ２０９の処理へ進み、不可能な場合は異常な領域の救済不可とみなし、ステップＳ２１４の処理へ進む（ステップＳ２０８）。
【０１００】
具体的に説明すると、キャッシュメモリ５のエントリをスキャンして常駐フラグ１２が’０’（常駐）（このとき有効フラグ１１も’０’（無効）のはずである）のエントリが見つかれば新規に常駐化可能とみなし、ステップＳ２０９の処理へ進み、見つからなければ救済不可とみなしステップＳ２１４の処理へ進む。
【０１０１】
ステップＳ２１４の処理では、主記憶装置２が救済不可な記憶域を持つことになるので、救済不可表示部１３をＯＮにして異常終了となる（ステップＳ２１４）。
【０１０２】
また、ステップＳ２０９の処理では、キャッシュメモリ５のエントリを登録する。つまり、レジスタ６ａの値をＹとすると、当該エントリに対して次の動作を行う。データブロック８の全ビットをゼロに初期化し、アドレスタグに（Ｙ／Ｌ）を設定し、不一致フラグ１０に‘０’（一致）を設定し、有効フラグ１１に‘１’（有効）を設定し、常駐フラグ１２に‘１’（常駐）を設定する。ここで不一致フラグ１０の設定値に関しては‘０’（一致）を設定する実装と‘１’（不一致）を設定する実装の両方があり得るが故障ブロック救済の観点から特に重要ではない。常駐フラグ１２に‘１’（常駐）を設定することにより主記憶装置２の故障領域からの読み込むアクセスが禁止され、故障領域がデータブロック８で代替される（ステップＳ２０９）。
【０１０３】
続いて、縮退運転表示部１４をＯＮにする（ステップＳ２１０）。縮退運転とは主記憶装置２に故障した記憶域があるが当該域をキャッシュメモリ５のエントリで代替することにより継続動作可能な状態を表す。
【０１０４】
その後、主記憶装置２の次のアドレス領域を検査すべく、既に検査したアドレスをもつレジスタ６ａにＳバイトを加算する（ステップＳ２１１）。レジスタ６ａがさすアドレスが主記憶装置２の領域を超えたか否かをチェックし（ステップＳ２１２）、超えていない場合にはステップＳ２０４からの処理を再び実行する。終了アドレスＡＥは主記憶装置２の開始アドレスＡＳに主記憶装置２のサイズを加算した値を持つ。
【０１０５】
また、レジスタ６ａがさすアドレスが主記憶装置２の領域を超えている場合、キャッシュ有効フラグ４ａに’１’を設定する。即ちキャッシュメモリ５を有効にし、正常終了となる。
【０１０６】
それにより、本実施の形態によれば、主記憶装置２における任意の記憶領域が不良となっても、主記憶装置初期化／故障検出部６がその不良を検出し、キャッシュメモリ５により代替して稼働することができるので、記憶装置１の信頼性を大幅に向上させることができる。
【０１０７】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【産業上の利用可能性】
【０１０８】
本発明は、記憶装置におけるメモリ故障の救済技術に適している。
【図面の簡単な説明】
【０１０９】
【図１】本発明の一実施の形態による記憶装置の構成例を示すブロック図である。
【図２】図１の記憶装置における初期化動作の一例を示すフローチャートである。
【図３】図２のステップＳ１０２の処理における詳細なフローチャートである。
【符号の説明】
【０１１０】
１  記憶装置
２  主記憶装置
３  主記憶制御回路
４  キャッシュ制御回路
４ａ  キャッシュ有効フラグ
４ｂ  ＬＲＵベクタ
５  キャッシュメモリ
６  主記憶装置初期化／故障検出部
６ａ〜６ｃ  レジスタ
７  主記憶故障通知部
８  データブロック
９  アドレスタグ
１０  不一致フラグ
１１  有効フラグ
１２  常駐フラグ
１３  救済不可表示部
１４  縮退運転表示部
１５  バス
【図１】
2008065745.tif 000003
【図２】
2008065745.tif 000004
【図３】
2008065745.tif 000005