(57)【要約】【課題】  記憶媒体から検索されたデータにおけるエラーは、記憶媒体から複数のデータブロックを検索することにより訂正される。【解決手段】  複数のデータブロックに関連付けられる複数の冗長ブロックは、記憶媒体から検索される。記憶媒体から検索された複数のデータブロックからのエラーを有するデータブロックの数は、決定される。エラーを有するデータブロックの数が冗長ブロックの数を上回る場合、データブロックは、データセグメントにおいて訂正される。ここで、データセグメントは、記憶媒体から検索された複数のデータブロックの各々の一部分からのデータを含む。【選択図】        図４
2005135572.tif 000002
【特許請求の範囲】
【請求項１】
記憶媒体から検索されたデータにおけるエラーを訂正する方法であって、
前記記憶媒体から複数のデータブロックを検索するステップと、
前記複数のデータブロックに関連付けられる複数の冗長ブロックを前記記憶媒体から検索するステップと、
前記記憶媒体から検索された前記複数のデータブロックから、エラーを有するデータブロックの数を決定するステップと、
前記エラーを有するデータブロックの数が前記記憶媒体から検索された冗長ブロックの数を上回るかどうかを判断するステップと、
前記エラーを有するデータブロックの数が前記冗長ブロックの数を上回る場合、データセグメントにおける前記データブロックを訂正するステップとを含み、データセグメントは前記記憶媒体から検索された前記複数のデータブロックの各々の一部分からのデータを含む、方法。
【請求項２】
前記エラーを有するデータブロックの数が前記冗長ブロックの数を超えない場合、前記冗長ブロックを用いて前記データブロックを訂正するステップをさらに含む、請求項１に記載の方法。
【請求項３】
エラーを有するデータブロックの数を決定するステップは、
検索されたデータブロックに関連付けられるチェックサムを前記記憶媒体から検索するステップと、
前記検索されたデータブロックに基づいて新しいチェックサムを生成するステップと、
前記検索されたデータブロックがエラーを有するかどうかを判断するために前記検索されたチェックサムを前記新しいチェックサムと比較するステップとを含む、請求項１に記載の方法。
【請求項４】
前記チェックサムは巡回冗長コードである、請求項３に記載の方法。
【請求項５】
データセグメントにおける前記データブロックを訂正するステップは、データセグメントについて、
ａ）シンドロームを得るステップと、
ｂ）前記得られたシンドロームに基づいてエラー位置の多項式を生成するステップと、
ｃ）前記エラー位置の多項式を用いて前記データセグメント内のエラー位置を決定するステップと、
ｄ）前記データセグメント内において前記決定されたエラー位置に基づいてエラー値を生成するステップと、
ｅ）前記生成されたエラー値を用いて前記データセグメント内の前記決定されたエラー位置におけるデータを訂正するステップとを含む、請求項１に記載の方法。
【請求項６】
ａ）はさらに、
前記検索されたデータブロックに基づいて１つ以上の新しい冗長ブロックを生成するステップと、
前記１つ以上の新しい冗長ブロックと前記検索された冗長ブロックとに基づいて１つ以上の残余ブロックを生成するステップと、
データセグメントのために、前記１つ以上の残余ブロックに基づいてシンドロームを生成するステップとを含む、請求項５に記載の方法。
【請求項７】
データセグメントに対する前記残余ブロックが０である場合、
前記データセグメントにエラーがないと判断するステップと、
別のデータセグメントについてａ）〜ｅ）を繰返すステップとをさらに含む、請求項６に記載の方法。
【請求項８】
ｂ）は、前記得られたシンドロームと前記エラー位置の多項式の係数とに基づいて前記データセグメントに２つ未満のエラーが存在するかどうかを判断するステップを含む、請求項５に記載の方法。
【請求項９】
前記データセグメントに２つ未満のエラーが存在する場合、前記得られたシンドロームのうちの２つのシンドロームに基づいて前記データセグメント内の第１のエラー位置を決定する、請求項８に記載の方法。
【請求項１０】
前記得られたシンドロームのうちの２つのシンドロームに基づいて前記データセグメント内における第２のエラー位置を決定するステップをさらに含み、前記第２のエラー位置を決定するのに用いられる前記２つのシンドロームのうち少なくとも１つは、前記第１のエラー位置を決定するのに用いられる前記２つのシンドロームのうち少なくとも１つとは異なり、前記第１のエラー位置と前記第２のエラー位置とが同じであるならば、前記データセグメント内における前記第１のエラー位置が確認される、請求項９に記載の方法。
【請求項１１】
前記得られたシンドロームのうちの２つのシンドロームに基づいて前記データセグメント内における第３のエラー位置を決定するステップをさらに含み、前記第３のエラー位置を決定するのに用いられる前記２つのシンドロームのうち少なくとも１つは、前記第１および前記第２のエラー位置を決定するのに用いられる前記２つのシンドロームのうち少なくとも１つとは異なり、前記データセグメント内における前記第１のエラー位置は、前記第１のエラー位置と前記第２のエラー位置と前記第３のエラー位置とが同じであるかどうか確認される、請求項１０に記載の方法。
【請求項１２】
前記エラー値は前記シンドロームのうちの１つである、請求項９に記載の方法。
【請求項１３】
前記データセグメントに２つのエラーが存在する場合、表を用いて前記エラー位置の多項式を解く、請求項８に記載の方法。
【請求項１４】
前記データセグメントに２つのエラーが存在する場合、エラーを有する前記データセグメント内の２つのエラー位置を決定するために網羅的な探索を用いて前記エラー位置の多項式を解く、請求項８に記載の方法。
【請求項１５】
前記網羅的な探索は、チェックサムによってエラーを有していると示されるデータブロックに対応する前記データセグメントにおける位置で実行される、請求項１４に記載の方法。
【請求項１６】
前記網羅的な探索を実行することにより、前記データセグメントにおける３つ以上の位置にエラーがあることが見出された場合、前記データセグメントが訂正不可能であると判断する、請求項１４に記載の方法。
【請求項１７】
前記シンドロームと前記エラー位置とに基づいてエラー値が生成される、請求項１４に記載の方法。
【請求項１８】
ｅ）は、前記決定されたエラー位置のために訂正されたデータを得るために、前記生成されたエラー値と前記決定されたエラー位置におけるデータとを乗算するステップを含む、請求項５に記載の方法。
【請求項１９】
別のデータセグメントについてａ）〜ｅ）を繰返すステップをさらに含む、請求項５に記載の方法。
【請求項２０】
記憶媒体から検索されたデータにおけるエラーを訂正するシステムであって、
データバッファを含み、前記データバッファは、
前記記憶媒体から検索された複数のデータブロックと、
前記記憶媒体から検索された前記複数のデータブロックに関連付けられる複数の冗長ブロックとを含み、前記システムはさらに、
プロセッサを含み、前記プロセッサは以下のステップを実行するよう構成され、前記以下のステップは、
前記記憶媒体から検索された前記複数のデータブロックから、エラーを有するデータブロックの数を決定するステップと、
前記エラーを有するデータブロックの数が前記記憶媒体から検索される冗長ブロックの数を上回るかどうかを判断するステップと、
前記エラーを有するデータブロックの数が前記冗長ブロックの数を上回る場合、データセグメントにおける前記データブロックを訂正するステップとを含み、データセグメントは、前記記憶媒体から検索された前記複数のデータブロックの各々の一部分からのデータを含む、システム。
【請求項２１】
前記エラーを有するデータブロックの数が前記冗長ブロックの数を超えない場合、前記冗長ブロックを用いて前記データブロックを訂正するステップをさらに含む、請求項２０に記載のシステム。
【請求項２２】
前記データブロックはデータセグメントにおいて以下のステップを実行することによって訂正され、前記以下のステップは、データセグメントについて、
ａ）シンドロームを得るステップと、
ｂ）前記得られたシンドロームに基づいてエラー位置の多項式を生成するステップと、
ｃ）前記エラー位置の多項式を用いて前記データセグメント内のエラー位置を決定するステップと、
ｄ）前記データセグメント内における前記決定されたエラー位置に基づいてエラー値を生成するステップと、
ｅ）前記生成されたエラー値を用いて前記データセグメント内の前記決定されたエラー位置におけるデータを訂正するステップとを含む、請求項２０に記載のシステム。
【請求項２３】
ｂ）は、前記得られたシンドロームと前記エラー位置の多項式の係数とに基づいて前記データセグメントに２つ未満のエラーが存在するかどうかを判断するステップを含む、請求項２２に記載のシステム。
【請求項２４】
前記データセグメントに２つ未満のエラーが存在する場合、前記得られたシンドロームのうちの２つのシンドロームに基づいて前記データセグメント内の第１のエラー位置を決定する、請求項２３に記載のシステム。
【請求項２５】
前記エラー値は前記シンドロームのうちの１つである、請求項２４に記載のシステム。
【請求項２６】
前記データセグメントに２つのエラーが存在する場合、表を用いて前記エラー位置の多項式を解く、請求項２３に記載のシステム。
【請求項２７】
前記データセグメントに２つのエラーが存在する場合、エラーを有する前記データセグメント内における２つのエラー位置を決定するために網羅的な探索を用いて前記エラー位置の多項式を解く、請求項２３に記載のシステム。
【請求項２８】
前記網羅的な探索は、チェックサムによってエラーを有していると示されるデータブロックに対応する前記データセグメントにおける位置で実行される、請求項２７に記載のシステム。
【請求項２９】
前記網羅的な探索を実行することにより前記データセグメントにおける３つ以上の位置にエラーがあることが見出される場合、前記データセグメントが訂正不可能であると判断する、請求項２７に記載のシステム。
【請求項３０】
エラー値は、前記シンドロームと前記エラー位置とに基づいて生成される、請求項２７に記載のシステム。
【請求項３１】
ｅ）は、前記決定されたエラー位置のために訂正されたデータを得るために、前記生成されたエラー値と前記決定されたエラー位置におけるデータとを乗算するステップを含む、請求項２２に記載のシステム。
【請求項３２】
別のデータセグメントについて、ａ）〜ｅ）を繰返すステップをさらに含む、請求項２２に記載のシステム。
【請求項３３】
記憶媒体から検索されたデータにおけるエラーをコンピュータに訂正させるためのコンピュータ実行可能な命令を含むコンピュータ読取り可能な記憶媒体であって、前記記憶媒体は、以下のステップをコンピュータに実行させるための命令を含み、前記以下のステップは、
前記記憶媒体から複数のデータブロックを検索するステップと、
前記複数のデータブロックに関連付けられる複数の冗長ブロックを前記記憶媒体から検索するステップと、
前記記憶媒体から検索された前記複数のデータブロックから、エラーを有するデータブロックの数を決定するステップと、
前記エラーを有するデータブロックの数が前記記憶媒体から検索された冗長ブロックの数を上回るかどうかを判断するステップと、
前記エラーを有するデータブロックの数が前記冗長ブロックの数を上回る場合、データセグメントにおける前記データブロックを訂正するステップとを含み、データセグメントは前記記憶媒体から検索された前記複数のデータブロックの各々の一部分からのデータを含む、コンピュータ読取り可能な記憶媒体。
【請求項３４】
前記エラーを有するデータブロックの数が前記冗長ブロックの数を超えない場合、前記冗長ブロックを用いて前記データブロックを訂正するステップをさらに含む、請求項３３に記載のコンピュータ読取り可能な記憶媒体。
【請求項３５】
データセグメントにおける前記データブロックを訂正するステップは、
データセグメントについて、
ａ）シンドロームを得るステップと、
ｂ）前記得られたシンドロームに基づいてエラー位置の多項式を生成するステップと、
ｃ）前記エラー位置の多項式を用いて前記データセグメント内のエラー位置を決定するステップと、
ｄ）前記データセグメント内における前記決定されたエラー位置に基づいてエラー値を生成するステップと、
ｅ）前記生成されたエラー値を用いて前記データセグメント内の前記決定されたエラー位置におけるデータを訂正するステップとを含む、コンピュータ読取り可能な記憶媒体。
【請求項３６】
ｂ）は、前記得られたシンドロームと前記エラー位置の多項式の係数とに基づいて前記データセグメントに２つ未満のエラーが存在するかどうかを判断するステップを含む、請求項３５に記載のコンピュータ読取り可能な記憶媒体。
【請求項３７】
前記データセグメントに２つ未満のエラーが存在する場合、前記得られたシンドロームのうちの２つのシンドロームに基づいて前記データセグメント内における第１のエラー位置を決定する、請求項３６に記載のコンピュータ読取り可能な記憶媒体。
【請求項３８】
前記エラー値は前記シンドロームのうちの１つである、請求項３７に記載のコンピュータ読取り可能な記憶媒体。
【請求項３９】
前記データセグメントに２つのエラーが存在する場合、テーブルを用いて前記エラー位置の多項式を解く、請求項３６に記載のコンピュータ読取り可能な記憶媒体。
【請求項４０】
前記データセグメントに２つのエラーが存在する場合、エラーを有する前記データセグメント内における２つのエラー位置を決定するために網羅的な探索を用いて前記エラー位置の多項式を解く、請求項３６に記載のコンピュータ読取り可能な記憶媒体。
【請求項４１】
前記網羅的な探索は、チェックサムによってエラーを有していると示されるデータブロックに対応する前記データセグメントにおける位置で実行される、請求項４０に記載のコンピュータ読取り可能な記憶媒体。
【請求項４２】
前記網羅的な探索を実行することにより前記データセグメントにおける３つ以上の位置にエラーがあることが見出された場合、前記データセグメントが訂正不可能であると判断する、請求項４０に記載のコンピュータ読取り可能な記憶媒体。
【請求項４３】
エラー値は、前記シンドロームと前記エラー位置とに基づいて生成される、請求項４０に記載のコンピュータ読取り可能な記憶媒体。
【請求項４４】
ｅ）は、前記決定されたエラー位置のために訂正されたデータを得るために、前記生成されたエラー値と前記決定されたエラー位置におけるデータとを乗算するステップを含む、請求項３５に記載のコンピュータ読取り可能な記憶媒体。
【請求項４５】
別のデータセグメントについて、ａ）〜ｅ）を繰返すステップをさらに含む、請求項３５に記載のコンピュータ読取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
背景
１．発明の分野
この出願は、概して、記憶媒体から検索されたデータを訂正することに関し、より特定的には、エラーを有するデータブロックが冗長ブロックよりも多く存在するデータを訂正することに関する。
【０００２】
関連する出願の相互参照
本願は２００３年１０月１０日付けで出願され、「エラーを有するデータブロックが冗長ブロックよりも多く存在するデータの訂正（Correcting Data Having More Data Blocks with Errors than Redundancy Blocks）」と題され、先に仮出願された米国仮出願連続番号第６０／５１０，６５７号と、これと同様に題され、２００３年１０月１７日付けで出願された米国出願第１０／６８８，０２７号との優先権を主張し、その全体が引用によりこの明細書中に援用されている。
【背景技術】
【０００３】
２．関連技術
記憶装置における記憶媒体にデータを書込むことにより、データが記憶装置に記憶される。記憶されたデータは、記憶媒体からそのデータを読出すことにより記憶装置から後で検索することができる。しかしながら、いくつかの理由で、記憶装置から検索されたデータにはエラーが存在する可能性がある。すなわち、記憶されたデータを検索することができなくなるか、または記憶媒体に元々記憶されているデータとは異なることとなる。たとえば、記憶媒体に記憶されたデータの一部分が時間が経つにつれて劣化する可能性があり、このため、記憶されたデータのその部分を後で適切に読出すことができなくなる。
【発明の開示】
【発明が解決しようとする課題】
【０００４】
このようなエラーを訂正する従来の技術では、データのために冗長ブロックの組が生成され、そのデータと共に記憶媒体に記憶される。記憶されたデータが後に検索され、エラーが検出されると、冗長ブロックを用いて検索されたデータが訂正される。典型的には、エラーを有するデータブロックが冗長ブロックよりも多く該データに存在する場合、該データを訂正することができない。
【課題を解決するための手段】
【０００５】
概要
具体的な一実施例においては、記憶媒体から検索されたデータにおけるエラーは、複数のデータブロックを記録媒体から検索することによって訂正される。複数のデータブロックに関連付けられる複数の冗長ブロックがまた記憶媒体から検索される。記憶媒体から検索された複数のデータブロックからエラーを有するデータブロックの数が決定される。エラーを有するデータブロックの数が冗長ブロックの数を上回ると、データブロックはデータセグメントにおいて訂正される。ここで、データセグメントは記憶媒体から検索された複数のデータブロックの各々の一部分からのデータを含んでいる。
【発明を実施するための最良の形態】
【０００６】
詳細な説明
以下の説明では多数の特定の構成、パラメータなどを記載する。しかしながら、このよ
うな説明が、この発明の範囲を限定するものとして意図されるのではなく、具体的な実施例をより良く説明するために提供されていることを認識されたい。
【０００７】
図１を参照すると、記憶装置１０４に接続されたホスト端末１０２が示される。ホストコンピュータ１０２は如何なる種類のコンピュータ、たとえばパーソナルコンピュータ、ワークステーション、サーバなどであってもよい。記憶装置１０４は如何なる種類の記憶装置、たとえばテープドライブ、ハードドライブなどであってもよい。ホスト端末１０２を任意の数の記憶装置１０４に接続することができ、任意の数のホスト端末１０２を１つ以上の記憶装置１０４に接続できることを認識されたい。
【０００８】
図１を引続き参照すると、具体的な一実施例においては、記憶装置１０４は、記憶装置１０４に記憶されるデータのエラーを検出し訂正するよう構成される。より具体的には、記憶装置１０４に記憶されるデータが検索されると、記憶装置１０４は、誤り訂正符号（ＥＣＣ）冗長ブロックとも称される冗長ブロックを用いて、たとえば検索されたデータが記憶装置１０４に元々記憶されていたデータとは異なる場合、または記憶されたデータを検索できない場合などに、検索されたデータにおけるエラーを訂正するよう構成される。加えて、この発明の具体的な実施例においては、巡回冗長検査（ＣＲＣ）コードなどのチェックサムを用いて、検索されたデータにおけるエラーを検出する。しかしながら、冗長ブロックを用いてエラーを検出し、さらにそれらエラーを訂正し得ることを認識されたい。
【０００９】
図１に示される実施例においては、記憶装置１０４は記憶媒体１０６、チャネルおよび読出／書込ヘッド１０８、プロセッサ１１０、ならびにエラー検出／訂正ユニット１１２を含む。記憶装置１０４においては、データは記憶媒体１０６に記憶される。読出／書込ヘッド１０８は記憶媒体１０６に対するデータの読出および／または書込を実行する。プロセッサ１１０は、チャネルおよび読出／書込ヘッド１０８の動作を含む記憶装置１０４の動作を制御する。後により詳細に説明されるように、エラー検出／訂正ユニット１１２は記憶媒体１０６に記憶されるデータにおけるエラーを検出して訂正する。
【００１０】
この発明の具体的な実施例においては、エラー検出／訂正ユニット１１２はデータバッファ１１４、冗長ブロックエンコーダ／デコーダ１１６、およびＣＲＣエンコーダ／デコーダ１１８を含む。データが記憶媒体１０６に記憶されるべき場合、データはホスト端末１０２から受取られ、データバッファ１１４に書込まれる。冗長ブロックエンコーダ／デコーダ１１６およびＣＲＣエンコーダ／デコーダ１１８は、データバッファ１１４におけるデータのために冗長ブロックおよびＣＲＣコードを生成する。次いで、読出／書込ヘッド１０８がデータならびに生成された冗長ブロックおよびＣＲＣコードを記憶媒体１０６に書込む。
【００１１】
データが記憶媒体１０６から読出されるべき場合、読出／書込ヘッド１０８は記憶媒体１０６からデータバッファ１１４にデータおよび冗長ブロックを読出す。後により詳細に説明されるように、記憶媒体１０６から読出されるデータにおけるいずれのエラーも、ＣＲＣコードおよび冗長ブロックを用いて検出および訂正される。次いで、データがホスト端末１０２に転送され得る。
【００１２】
具体的な一実施例においては、データは、キャッシュに記憶されるデータレコードにおいてホスト端末１０２と記憶装置１０４との間で転送される。データレコードは予め定められた長さ、たとえば２ｋバイト、４ｋバイト、６ｋバイトなどの長さのデータブロックに分割される。しかしながら、さまざまな長さのデータブロックを用いてもよいことを認識されたい。
【００１３】
この発明の具体的な実施例においては、データブロックが記憶媒体１０６から検索された後、ＣＲＣコードを用いて、検索されたデータブロックにおけるエラーを検出するが、ここで、検索されたデータブロックにおけるエラーは、データが記憶媒体１０６に元々記憶されていた場合のデータブロックにおけるデータと検索されたデータブロックにおけるデータとが異なることを示している。より具体的には、記憶媒体１０６にデータブロックを記憶する前に、データブロックのためにＣＲＣコードが生成され、そのデータブロックと共に記憶媒体１０６に記憶される。データブロックが後に検索されると、検索されたデータブロックのために新しいＣＲＣコードが生成される。次いで、新しいＣＲＣコードが記憶媒体１０６から検出されたＣＲＣコードと比較され、これは検索されたデータブロックに対応しており、検索されたデータブロックを記憶媒体１０６に記憶する前に、検索されたデータブロックのために元々生成されたものである。新しいＣＲＣコードと検索されたＣＲＣコードとが異なる場合、そのデータブロックのためにエラーが検出される。
【００１４】
加えて、この発明の具体的な実施例においては、冗長ブロックを用いて、検索されたデータブロックにおけるエラーを訂正する。より具体的には、データブロックを記憶媒体１０６に記憶する前に、そのデータブロックに基づいて冗長ブロックが生成され、データブロックと共に記憶媒体１０６に記憶される。後により詳細に説明されるように、データブロックが後に検索されると、エラーを有していると識別されるデータブロックが冗長ブロックを用いて訂正される。
【００１５】
具体的な一実施例においては、冗長ブロック２０４はＢＣＨ（Bose-Chaudhuri-Hocquenghem）符号であり、より特定的にはリード・ソロモン（Reed-Solomon）符号である。リード・ソロモン符号のより詳細な説明については、その全体が引用によりこの明細書中に援用される、ＭＩＴプレス（MIT Press）のピーターソン（Peterson）およびウェルドン（Weldon）による「誤り訂正符号（Error Correcting Codes）」第２版（１９７２年）を参照されたい。しかしながら、さまざまな種類の誤り訂正符号を用い得ることを認識されたい。
【００１６】
具体的な一実施例においては、データブロックの組、冗長ブロックの組、およびＣＲＣコードの組は、「エンティティ」と称されるグループとして一緒に読出および書込が行われ得る。たとえば、図２を参照すると、１６個のデータブロック２０４、４個の冗長ブロック２０６、および２０個のＣＲＣコード２０８を有するエンティティ２０２が示される。しかしながら、エンティティ２０２がさまざまな数のデータブロック２０４、冗長ブロック２０４およびＣＲＣコード２０８を含み得ることを認識されたい。加えて、上述のように、冗長ブロックを用いて、検索されたデータブロックにおけるエラーを検出し、さらに訂正することもできる。したがって、ＣＲＣコード２０８は冗長ブロックの組と置換えることができる。
【００１７】
図２は、エンティティ２０２がデータバッファ１１４（図１）に記憶されている形を示す。しかしながら、エンティティ２０２が図２に示される形で物理的に存在する必要がないことを認識されたい。エンティティ２０２におけるデータと、より特定的にはデータブロック２０４におけるデータとが単一のファイルに対応する必要がないことも認識されたい。代わりに、具体的な一実施例においては、ホスト端末１０２（図１）から受取ったデータはインタリーブされる。したがって、特定のデータブロック２０４におけるデータはホスト端末１０２（図１）から受取った別個のファイルの部分に対応し得る。
【００１８】
図２はまた、エンティティ２０２のデータブロック２０４と冗長ブロック２０６とＣＲＣコード２０８との間の論理関係を示す。図３を参照すると、データブロック２０４と冗長ブロック２０６とＣＲＣコード２０８との間の論理関係をより明瞭に説明するために、エンティティ２０２の部分がより詳細に示される。
【００１９】
図３に示されるように、ＣＲＣコード２０８はデータブロック２０４または冗長ブロック２０６に対応しており、データブロック２０４または冗長ブロック２０６におけるエラーを検出するために用いられる。たとえば、ＣＲＣコードＣＲＣ19はエンティティ２０２のデータブロックＤ19に対応する。したがって、データブロックＤ19におけるエラーを検出するために、記憶媒体１０６（図１）からデータブロックＤ19を検索した後、検索されたデータブロックＤ19のために新しいＣＲＣコードＣＲＣ19′が生成される。次いで、記憶媒体１０６（図１）から検索され、検索されたデータブロックＤ19（すなわちＣＲＣコードＣＲＣ19）に対応するＣＲＣコードと、新しいＣＲＣコードＣＲＣ19′とが比較される。新しいＣＲＣコードＣＲＣ19′と検索されたＣＲＣコードＣＲＣ19とが異なる場合、データブロックＤ19のためにエラーが検出される。
【００２０】
この発明の具体的な実施例においては、１つの冗長ブロックを用いてエンティティ２０２の１つのデータブロック２０４を訂正し得る。したがって、図２に示される例においては、全部で４個の冗長ブロック２０６を用いて、全部で１６個のデータブロック２０４を有するエンティティ２０２のうち全部で４個のデータブロック２０４を訂正し得る。たとえば、冗長ブロックＥ3を用いてエンティティ２０２の第１のデータブロックを訂正し得る。冗長ブロックＥ2を用いてエンティティ２０２の第２のデータブロックを訂正し得る。冗長ブロックＥ1を用いてエンティティ２０２の第３のデータブロックを訂正し得る。冗長ブロックＥ0を用いてエンティティ２０２の第４のデータブロックを訂正し得る。
【００２１】
この発明の具体的な実施例においては、各冗長ブロック２０６は、エンティティ２０２のすべてのデータブロックにおけるデータに基づいて生成される。たとえば、冗長ブロックＥ0、Ｅ1、Ｅ2およびＥ3は各々、データブロックＤ4、Ｄ2…Ｄ19におけるデータに基づいて生成される。上述のとおり、図１を参照すると、冗長ブロックは冗長ブロックエンコーダ１１６によって生成される。また上述されたように、冗長ブロックは、ホスト端末１０２から受取ったデータのために最初に生成される。次いで、生成された冗長ブロックと受取られたデータとが記憶媒体１０６に記憶される。
【００２２】
さらに図３を参照すると、冗長ブロックＥ0、Ｅ1、Ｅ2およびＥ3は同じ組のデータ（すなわち、エンティティ２０２のデータブロック２０４）に基づいて生成されるが、各冗長ブロック２０６は互いに固有である。より具体的には、この発明の実施例においては、冗長ブロックＥ0、Ｅ1、Ｅ2およびＥ3はＢＣＨ符号であり、より特定的にはリード・ソロモン符号である。冗長ブロックＥ0、Ｅ1、Ｅ2およびＥ3は冗長ブロックエンコーダ１１６（図１）を用いて生成される。例示的なエンコーダの説明については、その全体が引用によりこの明細書中に援用される、１９９２年８月４日付けで発行され、「長いバーストエラーに対するエラー検出および訂正システム（Error Detection and Correction System for Long Burst Errors）」と題される米国特許第５，１３６，５９２号を参照されたい。
【００２３】
図４を参照すると、記憶媒体から検索されたデータを訂正するための例示的なプロセス４０２が示される。より具体的には、図４は、記憶装置の動作を指示するコンピュータ実行可能な命令を含むコンピュータプログラムとして実現される例示的なプロセス４０２を示す。たとえば、図１を参照すると、図４に示されるプロセスは記憶装置１０４のプロセッサ１１０の動作を指示し得る。しかしながら、例示的なプロセス４０２（図４）が特定用途向け集積回路（ＡＳＩＣ）などのハードウェアにおいて実現可能であることを認識されたい。
【００２４】
図４を参照すると、冗長ブロックの組がデータブロックの組のために事前に生成され、冗長ブロックの組とデータブロックの組とが事前に記憶媒体に記憶されているとプロセス４０２が仮定していることを認識されたい。したがって、図２に示される例では、４個の
冗長ブロック２０６は１６個のデータブロック２０４のために事前に生成および記憶されている。上述のように、任意の数のデータブロックのために任意の数の冗長ブロックを生成および記憶し得ることを認識されたい。
【００２５】
再び図４を参照すると、４０４において、データブロックの組と冗長ブロックの組とが記憶媒体から検索される。加えて、この発明の具体的な実施例においては、ＣＲＣコードなどのチェックサムの組が記憶媒体から検索される。上述のように、ＣＲＣコードの組ではなく冗長ブロックの別の組を用いることができる。
【００２６】
４０６において、エラーを有するデータブロックの数が決定される。上述のように、ＣＲＣコードなどのチェックサムを用いて、エラーを有するデータブロックを識別することができる。
【００２７】
より特定的には、記憶装置１０４（図１）がテープドライブであり、記憶媒体１０６（図１）が磁気テープである具体的な一実施例においては、データブロックおよび冗長ブロックが磁気テープから読出され、データバッファに記憶される。データブロックまたは冗長ブロックが読出されると、データブロックまたは冗長ブロックに対応するＣＲＣコードもまた磁気テープから読出される。磁気テープから読出されたデータブロックまたは冗長ブロックに基づいて新しいＣＲＣコードが生成され、次に、この新しいＣＲＣコードが検索されたＣＲＣコードと比較される。新しいＣＲＣコードと検索されたＣＲＣコードとが異なる場合、エラーが検出され、検索されたデータブロックまたは冗長ブロックはエラーを有するものとしてフラグを立てられる。したがって、この具体的な実施例においては、ＣＲＣコードは検索されたデータブロックおよび冗長ブロックと共にデータバッファに記憶されない。しかしながら、後に使用するためにＣＲＣコードを記憶できることを認識されたい。加えて、データブロック、冗長ブロックおよびＣＲＣコードは磁気テープから検索されて一緒にデータバッファに記憶され得、次いで、エラーを有するデータブロックおよび／または冗長ブロックが、データバッファに記憶されたＣＲＣコードを用いて識別され得る。
【００２８】
４０８において、エラーを有するデータブロックの数が冗長ブロックの数と比較される。図２に示される例においては、冗長ブロックの数は４個である。
【００２９】
４１０において、エラーを有するデータブロックの数が冗長ブロックの数以下である場合、すなわち冗長ブロックの数に等しいかまたはそれ未満である場合、データブロックは冗長ブロックを用いて訂正される。より特定的には、上述のように、１つの冗長ブロックを用いて、記憶媒体から検索されたデータブロックの組における１つのデータブロックを訂正し得る。したがって、エラーを有するデータブロックの数が冗長ブロックの数以下である場合、冗長ブロックを用いて、エラーを有するすべてのデータブロックを訂正し得る。冗長ブロックを用いてデータを訂正する例示的なプロセスのより詳細な説明については、その全体が引用によりこの明細書中に援用される、２００３年６月３日付けで出願され、「冗長ブロックを用いるデータの訂正（Correcting Data Using Redundancy Blocks）」と題される米国特許出願連続番号第１０／４５４，４２０号を参照されたい。
【００３０】
４１２において、エラーを有するデータブロックの数が冗長ブロックの数よりも多い場合、データブロックは、各データブロックからのデータの一部分をそれぞれ含むデータセグメントにおいて訂正される。たとえば、図１を参照すると、エンティティ２０２の列２１０は、各データブロック２０４からのデータの一部分と各冗長ブロック２０６の一部分とを含む。エンティティ２０２の各列２１０は、この明細書においては符号語２１０と称される。したがって、データセグメントは、データブロック２０４からのデータを有する符号語２１０の部分に対応する。具体的な一実施例においては、符号語２１０はエンティ
ティ２０２においてデータブロック２０４および冗長ブロック２０６の各々の８ビットの記号を含む。したがって、データブロック２０４が２ｋバイトの長さである場合、２０００個の符号語と２０００個のデータセグメントとが存在する。しかしながら、符号語２１０およびデータブロック２０４はどのような長さであってもよいことを認識されたい。
【００３１】
図５を参照すると、データブロックの数が冗長ブロックの数よりも多い場合にデータを訂正するための例示的なプロセス５０２が示される。より特定的には、データブロックの各データセグメントは例示的なプロセス５０２に従って処理される。図４に示されるプロセス４０２と同様に、例示的なプロセス５０２は、記憶装置の動作を指示するコンピュータ実行可能な命令を含むコンピュータプログラムとして実現可能である。たとえば、図１を参照すると、図５に示されるプロセスは記憶装置１０４のプロセッサ１１０の動作を指示し得る。しかしながら、例示的なプロセス５０２（図５）は、特定用途向け集積回路（ＡＳＩＣ）などのハードウェアにおいて実現可能であることを認識されたい。
【００３２】
図５を再び参照すると、５０２において、部分的なシンドロームとしても公知のシンドロームが、処理されているデータセグメントのために得られる。シンドロームの数は冗長ブロックの数に対応する。したがって、図３に示される例においては、データセグメントに対して４つのシンドローム（すなわち、Ｓ0、Ｓ1、Ｓ2およびＳ3）が得られる。
【００３３】
具体的な一実施例においては、シンドロームは、冗長ブロックに基づいて生成される残余ブロックから計算される。より特定的には、この発明の具体的な実施例においては、新しい冗長ブロックは、検索されたデータブロックに基づいて生成される。検索されたデータブロックに基づいて新しい冗長ブロックを生成する際に、４０８（図４）においてエラーを有していると識別されたデータブロックは、すべて０を含むダミーのデータブロックと置換えられる。代替的には、新しい冗長ブロックは、エラーを有していると識別されたデータブロックを保持しつつ、検索されたデータブロックに基づいて生成され得る。加えて、この発明の具体的な実施例においては、図１を参照すると、新しい冗長ブロックは、冗長ブロックエンコーダ１１８を用いて生成される。次いで、残余ブロックは、新しい冗長ブロックと検索された冗長ブロックとに基づいて生成される。より具体的には、残余ブロックは、新しい冗長ブロックと検索された冗長ブロックとの間で排他的論理和（ＸＯＲ）演算を実行することによって生成される。数学的には、残余ブロックは、検索された符号語を生成多項式で割った剰余である。次いで、残余ブロックからシンドロームが計算される。
【００３４】
たとえば、シンドロームＳ0、Ｓ1、Ｓ2およびＳ3は以下の式を用いて計算され得る。
【００３５】
【数１】
2005135572.tif 000003
【００３６】
ここで、Ｒ0、Ｒ1、Ｒ2およびＲ3は、冗長ブロックに基づいて生成された残余ブロックの部分であり、αはガロア体における基本要素である。式（１）を用いてシンドロームＳ0、Ｓ1、Ｓ2およびＳ3を計算するには１６回の乗算演算が必要とされる可能性があることに留意されたい。Ｒ0、Ｒ1、Ｒ2およびＲ3が０である場合、データセグメントにはエラー
がないことにも留意されたい。この場合、次のデータセグメントが処理される。シンドロームＳ0、Ｓ1、Ｓ2およびＳ3が、残余ブロックに基づいて生成されるのではなく、直接得られ得ることを認識されたい。
【００３７】
５０６において、エラー位置の多項式は、得られたシンドロームに基づいて生成される。エラー位置の多項式は、エラー位置において数値が求められる場合、０に等しい。以下は、２つのエラー（式２ａ）および１つのエラー（式２ｂ）に対するエラー位置の多項式の定義である。
【００３８】
【数２】
2005135572.tif 000004
【００３９】
ここで、ｘはエラー位置であり、σ0、σ1は係数である。バーレカンプ・マッシィ・アルゴリズム（Berlekamp-Massey algorithm）などのさまざまな公知のアルゴリズムを用いてエラー位置の多項式を解くことができることを認識されたい。
【００４０】
具体的な一実施例においては、エラー位置の多項式は、データセグメントに２つ未満のエラーが存在するかどうか最初に判断することによって計算される。より特定的には、以下の行列式が計算される。
【００４１】
【数３】
2005135572.tif 000005
【００４２】
行列式（３）は、Ｄ＝Ｓ0Ｓ2＋Ｓ12である。
【００４３】
行列式（３）が０である場合、データセグメントには２つ未満のエラーが存在する。この場合、エラー位置の多項式の項（式（２ｂ））は以下の式を用いて計算される。
【００４４】
【数４】
2005135572.tif 000006
【００４５】
Ｓ0が０である場合、検査されているデータセグメントにはエラーが存在しないことに留意されたい。しかしながら、上述のように、具体的な一実施例においては、シンドロームは残余から計算され、データセグメントは、データセグメントに対応する残余が０でないときに検査される。したがって、この場合、Ｓ0が０である場合、このプロセスを用い
てもデータセグメントを訂正することができない。
【００４６】
行列式（３）が０でない場合、データセグメントには２つ以上のエラーが存在する。この場合、エラー位置の多項式の項（式（２ａ））は以下の式を用いて計算される。
【００４７】
【数５】
2005135572.tif 000007
【００４８】
式（５ａ）〜（５ｃ）を解くには６回の乗算演算と２回の除算演算とが必要とされる可能性があることに留意されたい。代替的には、式（５ａ）〜（５ｃ）を解くには８回の乗算演算と１回の反転演算とが必要とされる可能性がある。
【００４９】
５０８において、データセグメント内のエラーの位置はエラー位置の多項式から決定される。より特定的には、データセグメント内のエラーの位置は、エラー位置の多項式の根を決定することにより決定される。上述のように、エラー位置の多項式は、エラーを有する位置において数値が求められる場合、０である。
【００５０】
したがって、データセグメントにエラーが１つ存在する場合、データセグメント内のエラーの位置は、シンドロームのうちの２つのシンドロームを用いて決定され得る。この発明の例においては、データセグメント内のエラーの位置は、式（４ｂ）と（２ｂ）とを組合せることにより決定され得る。
【００５１】
【数６】
2005135572.tif 000008
【００５２】
エラー位置をさらに確認するために、別のシンドロームの組合せを用いてエラー位置を決定することができる。エラー位置は、この発明の例において以下のとおり計算され得る。
【００５３】
【数７】
2005135572.tif 000009
【００５４】
シンドロームが０であるかまたはエラー位置が同じでない場合、エラー位置は正しくない。この発明の例においては、Ｓ1またはＳ2が０に等しいかまたはｘがｘ′およびｘ″に
等しくない場合、エラー位置ｘは正しくない。これらの付加的なチェックにより、単一のエラーの失敗−訂正率が約２24の５にまで低減される。
【００５５】
データセグメントに２つのエラーが存在する場合、式（５ａ）〜（５ｃ）によって決定される項を有する式（２ａ）の根を解くことによってデータセグメント内のエラーの位置が決定され得る。しかしながら、ガロア体の数学的処理では二次方程式を用いることができないので、式（２ａ）の根を解くのにテーブルが用いられる。
【００５６】
代替的には、チェン・サーチ（Chien Search）などの網羅的な探索が用いられる。より特定的には、式（２ａ）はデータセグメント内の潜在的なエラー位置の各々において評価される。より特定的には、上述のように、具体的な一実施例においては、ＣＲＣコードなどのチェックサムは、エラーを有するデータブロックを示すために用いられる。しかしながら、チェックサムがデータブロック全体に対応するので、チェックサムによってエラーを有していると示されるデータブロックに対応するデータセグメント内の位置はエラーを有するかまたは有さない可能性がある。したがって、式（２ａ）は、チェックサムによって潜在的にエラーを有していると示されるデータセグメント内の各位置において評価される。正確に２つのエラー位置が見出されない場合、探索が失敗し、データセグメントは訂正不可能となる。各々の位置をテストするには２回の乗算演算と２回の加算演算とが必要とされる可能性があることに留意されたい。
【００５７】
５１０において、エラー値は、データセグメント内において決定されたエラー位置に基づいて生成される。データセグメントに１つのエラーが存在する場合、エラー値は単にシンドロームである。したがって、この発明の例においては、エラー値、すなわちＹ0は以下のとおりである。
【００５８】
【数８】
2005135572.tif 000010
【００５９】
データセグメントに２つのエラーが存在する場合、エラー値、すなわちＹ0およびＹ1は、以下の式を用いて決定することができる。
【００６０】
【数９】
2005135572.tif 000011
【００６１】
次に、Ｙ0およびＹ1のために式（９）が解かれる。
【００６２】
【数１０】
2005135572.tif 000012
【００６３】
Ｙ0およびＹ1を計算するには２回の乗算演算と２回の除算演算とが必要とされる可能性があることに留意されたい。代替的には、Ｙ0およびＹ1は４回の乗算演算と１回の反転演算とを用いて計算されてもよい。
【００６４】
５１２において、データセグメントにおけるエラーは、エラー値を用いて訂正することができる。より特定的には、データセグメントにおける位置にある誤ったデータが、５１０において決定された位置に対するエラー値で乗算されて、データセグメント内の位置に対する正しいデータが生成される。
【００６５】
上述のように、プロセス５０２は別のデータセグメントについて繰返されてもよい。より特定的には、具体的な一実施例においては、エンティティ２０２（図２）の各データセグメントはプロセス５０２に従って処理される。
【００６６】
具体的な実施例を記載してきたが、この発明の精神および／または範囲から逸脱することなくさまざまな変更を加えることができる。したがって、この発明は、添付の図面に示されかつ上記に述べられる特定の形態に限定されるものと解釈されるべきではない。
【図面の簡単な説明】
【００６７】
【図１】例示的な記憶装置に接続される例示的なホスト端末を示す図である。
【図２】データブロック、冗長ブロック、巡回冗長検査コードの組を有する例示的なエンティティを示す図である。
【図３】図２の例示的なエンティティの部分を示す図である。
【図４】記憶媒体から検索されたデータを訂正する例示的なプロセスを示す図である。
【図５】データブロックの数が冗長ブロックの数よりも多い場合にデータを訂正する例示的なプロセスを示す図である。
【符号の説明】
【００６８】
１０２  ホスト端末、１０４  記憶装置、１０６  記憶媒体、１０８  チャネルおよび読出／書込ヘッド、１１０  プロセッサ、１１２  エラー検出／訂正ユニット、１１４  データバッファ、１１６  冗長ブロックエンコーダ／デコーダ、１１８  ＣＲＣエンコーダ／デコーダ。
【図１】
2005135572.tif 000013
【図２】
2005135572.tif 000014
【図３】
2005135572.tif 000015
【図４】
2005135572.tif 000016
【図５】
2005135572.tif 000017
【外国語明細書】
2005135572000001.pdf