(57)【特許請求の範囲】
【請求項１】
データを保管するための方法であって、
書き込みデータを受信することと、
前記書き込みデータをｒ行×ｎ列のページに配列し、それぞれのページが複数のセクタを含むことと、
前記ページ上で複数の水平および垂直消去訂正コードを使用して前記書き込みデータをコード化することであって、第１の行はｔ１個のパリティ・ページを含み、ｔ１≧１であり、第２の行はｔ２個のパリティ・ページを含み、ｔ２≧ｔ１であり、第３の行はｔ３個のパリティ・ページを含み、ｔ３≧ｔ２であり、ｔｒ個のパリティ・ページを含み、ｔｒ≧ｔｒ−１およびｎ＞ｔｒ＞ｔ１であるｒ番目の行まで以下同様であり、前記コード化により、前記ｒ行のうちの任意の１行でｔｒ個までの消去からの回復が可能になり、残りのｒ−ｋ（ｋ＝１〜ｒ−２の整数）行のうちの任意の１行でｔｒ−ｋ個までの消去からの回復が可能になり、最後の残りの行でｔ１個までの消去からの回復が可能になるようになっており、前記コード化からの出力がコード化された書き込みデータを含むことと、
前記コード化された書き込みデータを、ストレージ・アレイ内のｎ個のストレージ・デバイス全域にわたって書き込みストライプとして書き込むこと
を含む、方法。
【請求項２】
前記書き込みストライプ内の任意の行のｔ１個の前記パリティ・ページが、そのデータ・ページが前記行の残りのｎ−ｔ１個のページになる、ｔ１消去訂正コードに対応する、請求項１記載の方法。
【請求項３】
前記水平および垂直消去訂正コードのうちの少なくとも１つが最大距離分離可能（ＭＤＳ）コードである、請求項１または請求項２記載の方法。
【請求項４】
前記ＭＤＳコードにより２つまでの消去からの回復が可能になり、前記ＭＤＳコードがぞれぞれのページをｚ−１個のセグメントに分割し、ｚが素数であり、前記ＭＤＳコードの長さｎが多くてもｚ＋１であり、
第１のパリティ・ページが、第１のデータ・ページと、第２のデータ・ページにαを掛けたものと、第３のデータ・ページにα２を掛けたものと、第４のデータ・ページにα３を掛けたものと、以下同様で、ｎ−２のデータ・ページにαｎ−３を掛けたものとの排他的論理和（ＸＯＲ）として計算され、αは次数ｚ−１の多項式の根であり、
第２のパリティ・ページが、最初のｎ−２のデータ・ページと、前記第１のパリティ・ページとのＸＯＲとして計算される、請求項３記載の方法。
【請求項５】
前記多項式が１＋ｘ＋ｘ２＋・・・ｘｚ−１である、請求項４記載の方法。
【請求項６】
前記ＭＤＳコードにより３つまでの消去からの回復が可能になり、前記ＭＤＳコードがぞれぞれのページをｚ−１個のセグメントに分割し、ｚが素数であり、前記コードの長さｎが多くてもｚ＋１であり、
第１のパリティ・ページが、第１のデータ・ページと、第２のデータ・ページにα２を掛けたものと、第３のデータ・ページにα４を掛けたものと、第４のデータ・ページにα６を掛けたものと、以下同様で、ｎ−３のデータ・ページにα２（ｎ−４）を掛けたものとのＸＯＲとして計算され、αは次数ｚ−１の多項式の根であり、
第２のパリティ・ページが、第１のデータ・ページと、第２のデータ・ページにαを掛けたものと、第３のデータ・ページにα２を掛けたものと、第４のデータ・ページにα３を掛けたものと、以下同様で、ｎ−３のデータ・ページにαｎ−４を掛けたものと、前記第１のパリティ・ページにαｎ−３を掛けたものとのＸＯＲとして計算され、
第３のパリティ・ページが、前記ｎ−３のデータ・ページと、前記第１および第２のパリティ・ページとのＸＯＲとして計算される、請求項３記載の方法。
【請求項７】
前記多項式が１＋ｘ＋ｘ２＋・・・ｘｚ−１である、請求項６記載の方法。
【請求項８】
ｔｒが２に等しい、請求項１記載の方法。
【請求項９】
ｔｒが３に等しい、請求項１記載の方法。
【請求項１０】
前記ストレージ・デバイスが、ハードディスク・ドライブおよびフラッシュ・ドライブのうちの１つである、請求項１記載の方法。
【請求項１１】
ストレージ・アレイにデータを保管するためのシステムであって、前記システムが、
複数のストレージ・デバイスを含むストレージ・アレイと、
請求項１ないし１０のいずれかに記載のステップを実行するために構成されたアレイ・コントローラと
を含む、システム。
【請求項１２】
ストレージ・アレイにデータを保管するためのコンピュータ・プログラムであって、
請求項１ないし１０のいずれかに記載のステップをコンピュータに実行させる、コンピュータ・プログラム。
【請求項１３】
ストレージ・アレイ内の消去を訂正するための方法であって、前記方法が、
複数のｎ個のストレージ・デバイスから読み取りストライプを受信することであって、前記読み取りストライプがｒ行×ｎ列に配列された複数ページのブロックを含み、それぞれの列が前記ストレージ・デバイスの１つに対応し、前記ページがデータ・ページとパリティ・ページとを含み、前記パリティ・ページが複数の水平および垂直消去訂正コードを使用して生成され、第１の行はｔ１個のパリティ・ページを含み、ｔ１≧１であり、第２の行はｔ２個のパリティ・ページを含み、ｔ２≧ｔ１であり、第３の行はｔ３個のパリティ・ページを含み、ｔ３≧ｔ２であり、ｔｒ個のパリティ・ページを含み、ｔｒ≧ｔｒ−１およびｎ＞ｔｒ＞ｔ１であるｒ番目の行まで以下同様になるようになっていることと、
前記読み取りストライプが少なくとも１つの消去されたページを含み、前記行のうちの１行が多くてもｔｒ個の消去を含み、ｒ−ｋ（ｋ＝１〜ｒ−２の整数）個の残りの行のうちの１行が多くてもｔｒ−ｋ個の消去を含み、最後の残りの行がｔ１個の消去を含むと決定するまで、決定することと、
前記ページのブロックならびに前記水平および垂直消去コードに応答して前記消去されたページを再構築することであって、前記再構築の結果、回復された読み取りストライプが得られること
を含む、方法。
【請求項１４】
前記水平および垂直消去訂正コードのうちの少なくとも１つが最大距離分離可能コードである、請求項１３記載の方法。
【請求項１５】
ｔｒが２に等しいかまたはｔｒが３に等しい、請求項１４記載の方法。
【請求項１６】
ストレージ・アレイ内の消去を訂正するためのコンピュータ・プログラムであって、
請求項１３ないし１５のいずれかに記載のステップをコンピュータに実行させる、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、ストレージ・システムに関し、より具体的には、ストレージ・アレイ（storage array）のためのネストされた複数消去訂正コード（nestedmultiple erasure correcting code）に関する。
【背景技術】
【０００２】
コンピュータ・システムは、ストレージ・デバイス上のデータの損失から保護するためにパリティ計算などのデータ冗長性方式を使用する。冗長ディスク・アレイ（ＲＡＩＤ）システムでは、データ値および関連パリティ値がディスク・ドライブ全域にわたってストライピングされる。ＲＡＩＤシステムは、典型的に、ハードディス・ドライブ（ＨＤＤ）アレイに保管された情報を破局的ディスク障害から保護するために使用される。普及している２つのＲＡＩＤ方式は、単一の破局的ディスク障害から保護するＲＡＩＤ５と、二重の破局的ディスク障害から保護するＲＡＩＤ６である。
【０００３】
フラッシュ・デバイスは、不揮発性ストレージ・デバイスの１つのタイプであって、大きいブロック単位で電気的に消去し再プログラムすることができるものである。ＨＤＤのように、フラッシュ・デバイスは、典型的に５１２バイトのセクタに媒体を分割する。フラッシュ・デバイスはさらに複数のセクタを集めてページを形成し、典型的に１ページあたり８つのセクタであり、それぞれのページが４０００または４キロ（ｋ）バイトを収容する。それぞれのセクタは、いくつかの誤り（典型的に単一ビット誤りであるが、バイト誤りなどのその他の可能性もあり得る）を訂正する誤り訂正コード（ＥＣＣ）によって保護される。普及している選択肢の１つは、８ビット訂正または１５ビット訂正ＢＣＨコードのようなＢｏｓｅ−Ｃｈａｕｄｈｕｒｉ−Ｈｏｃｑｕｅｎｇｈｅｍ（ＢＣＨ）コードであるが、多くの変形例も可能である。ＨＤＤのように、フラッシュ・デバイス内のページではハード誤り（ＨＥ）が発生する可能性がある。これは、たとえば、ページの１つのセクにおけるＢＣＨコードの誤り訂正能力を超えたときに発生する。ＨＤＤと比較すると、あるページがその書き込み持続存続期間の終わりに近づくにつれてまたはあるページがそのデータ保持存続期間の終わりに近づくにつれて、いずれの場合も、フラッシュ・デバイスの方がＢＣＨコードの能力を超える可能性が高い。したがって、フラッシュ・デバイス内のＨＥの数は、時間の経過につれて増加すると予想することができ、デバイス上に潜在的ＨＥが残る。
【先行技術文献】
【非特許文献】
【０００４】
【非特許文献１】１９９７年９月、Software, Practice& Experience、９９９〜１０１２、J.S.Plankによる「A Tutorial on Reed-Solomon Coding for Fault-Tolerance in RAID-likeSystems」
【非特許文献２】１９９３年、IEEE Transactions onInformation Theory、第３９巻、６６〜７７ページ、M.Blaum他による「New Array Codes for Multiple Phased Burst Correction」
【発明の概要】
【発明が解決しようとする課題】
【０００５】
フラッシュ・デバイスで構成されるアレイは、破局的デバイス障害とおそらくより優勢なＨＥとが結合した混合状態に遭遇する可能性がある。たとえば、フラッシュ・デバイスに保管された情報を保護するためにＲＡＩＤ５を使用すると、その結果、潜在的ＨＥが存在するときにデバイス障害が発生する可能性がある。したがって、ＲＡＩＤ５システム内のデバイスが破局的デバイス障害を経験し、他の何らかのデバイスのページにＨＥがある場合、このような事象が発生している行は情報を取り出すことができなくなる。ＲＡＩＤ６は第２のデバイス全体をパリティに専念させる必要があり、支配的障害がＨＥであるときに費用がかかる。
【課題を解決するための手段】
【０００６】
一実施形態はデータを保管するための方法である。この方法は書き込みデータを受信することを含む。書き込みデータは「ｒ」行×「ｎ」列のページに配列され、それぞれのページは複数のセクタを含む。書き込みデータは、そのページ上で複数の水平および垂直消去訂正コードを使用してコード化される。このコード化の結果、第１の行はｔ１個のパリティ・ページを含み、ｔ１≧１であり、第２の行はｔ２個のパリティ・ページを含み、ｔ２≧ｔ１であり、第３の行はｔ３個のパリティ・ページを含み、ｔ３≧ｔ２であり、ｔｒ個のパリティ・ページを含み、ｔｒ≧ｔｒ−１およびｎ＞ｔｒ＞ｔ１であるｒ番目の行まで以下同様になる。このコード化により、ｒ行のうちの任意の１行でｔｒ個までの消去からの回復が可能になり、残りのｒ−１行のうちの任意の１行でｔｒ−１個までの消去からの回復が可能になり、残りのｒ−２行のうちの任意の１行でｔｒ−２個までの消去からの回復が可能になるなど、このコード化により、最後の残りの行でｔ１個までの消去からの回復が可能になるようになっている。コード化された書き込みデータはこのコード化から出力される。コード化された書き込みデータは、ストレージ・アレイ内のｎ個のストレージ・デバイス全域にわたって書き込みストライプとして書き込まれる。
【０００７】
他の実施形態はストレージ・アレイにデータを保管するためのシステムである。このシステムはストレージ・アレイとアレイ・コントローラとを含む。ストレージ・アレイは複数のストレージ・デバイスを含む。アレイ・コントローラは、書き込みデータを受信し、書き込みデータをｒ行×ｎ列のページに配列するために構成される。アレイ・コントローラは、そのページ上で複数の水平および垂直消去訂正コードを使用して、書き込みデータをコード化する。このコード化の結果、第１の行はｔ１個のパリティ・ページを含み、ｔ１≧１であり、第２の行はｔ２個のパリティ・ページを含み、ｔ２≧ｔ１であり、第３の行はｔ３個のパリティ・ページを含み、ｔ３≧ｔ２であり、ｔｒ個のパリティ・ページを含み、ｔｒ≧ｔｒ−１およびｎ＞ｔｒ＞ｔ１であるｒ番目の行まで以下同様になる。このコード化により、ｒ行のうちの任意の１行でｔｒ個までの消去からの回復が可能になり、残りのｒ−１行のうちの任意の１行でｔｒ−１個までの消去からの回復が可能になり、残りのｒ−２行のうちの任意の１行でｔｒ−２個までの消去からの回復が可能になるなど、このコード化により、最後の残りの行でｔ１個までの消去からの回復が可能になるようになっている。コード化からの出力はコード化された書き込みデータを含む。アレイ・コントローラは、コード化された書き込みデータをストレージ・アレイ内のｎ個のストレージ・デバイス全域にわたって書き込みストライプとして書き込む。
【０００８】
他の実施形態はストレージ・アレイにデータを保管するためのコンピュータ・プログラム製品（computer program product）である。このコンピュータ・プログラム製品は、それによりコンピュータ可読プログラム・コードが実施されているコンピュータ可読記憶媒体を含む。このコンピュータ可読プログラム・コードは、書き込みデータを受信し、書き込みデータをｒ行×ｎ列のページに配列するために構成されたコンピュータ可読プログラム・コードを含む。このプログラム・コードは、そのページ上で複数の水平および垂直消去訂正コードを使用して、書き込みデータをコード化するためにさらに構成される。第１の行はｔ１個のパリティ・ページを含み、ｔ１≧１であり、第２の行はｔ２個のパリティ・ページを含み、ｔ２≧ｔ１であり、第３の行はｔ３個のパリティ・ページを含み、ｔ３≧ｔ２であり、ｔｒ個のパリティ・ページを含み、ｔｒ≧ｔｒ−１およびｎ＞ｔｒ＞ｔ１であるｒ番目の行まで以下同様であり、このコード化により、ｒ行のうちの任意の１行でｔｒ個までの消去からの回復が可能になり、残りのｒ−１行のうちの任意の１行でｔｒ−１個までの消去からの回復が可能になり、残りのｒ−２行のうちの任意の１行でｔｒ−２個までの消去からの回復が可能になるなど、このコード化により、最後の残りの行でｔ１個までの消去からの回復が可能になるようになっている。このプログラム・コードは、書き込みデータをストレージ・アレイ内のｎ個のストレージ・デバイス全域にわたって書き込みストライプとして書き込むためにさらに構成される。
【０００９】
他の一実施形態はストレージ・アレイ内の消去を訂正するための方法である。この方法は複数のｎ個のストレージ・デバイスから読み取りストライプを受信することを含む。読み取りストライプはｒ行×ｎ列に配列された複数ページのブロックを含み、それぞれの列はストレージ・デバイスの１つに対応する。ページはデータ・ページとパリティ・ページとを含む。パリティ・ページは複数の水平および垂直消去訂正コードを使用して生成され、第１の行はｔ１個のパリティ・ページを含み、ｔ１≧１であり、第２の行はｔ２個のパリティ・ページを含み、ｔ２≧ｔ１であり、第３の行はｔ３個のパリティ・ページを含み、ｔ３≧ｔ２であり、ｔｒ個のパリティ・ページを含み、ｔｒ≧ｔｒ−１およびｎ＞ｔｒ＞ｔ１であるｒ番目の行まで以下同様になるようになっている。この方法は、読み取りストライプが少なくとも１つの消去されたページを含み、その行のうちの１行が多くてもｔｒ個の消去を含み、ｒ−１個の残りの行のうちの１行が多くてもｔｒ−１個の消去を含み、ｒ−２個の残りの行のうちの１行が多くてもｔｒ−２個の消去を含むなど、最後の残りの行がｔ１個の消去を含むと決定するまで、決定することも含む。消去されたページは、そのページのブロックならびに水平および垂直消去コードに応答して再構築される。再構築の結果、回復された読み取りストライプが得られる。
【００１０】
他の一実施形態はストレージ・アレイ内の消去を訂正するためのコンピュータ・プログラム製品である。このコンピュータ・プログラム製品は、それによりコンピュータ可読プログラム・コードが実施されているコンピュータ可読記憶媒体を含む。このコンピュータ可読プログラム・コードは、複数のｎ個のストレージ・デバイスから読み取りストライプを受信するために構成されたコンピュータ可読プログラム・コードを含む。読み取りストライプはｒ行×ｎ列に配列された複数ページのブロックを含み、それぞれの列はストレージ・デバイスの１つに対応する。ページはデータ・ページとパリティ・ページとを含む。パリティ・ページは複数の水平および垂直消去訂正コードを使用して生成され、第１の行はｔ１個のパリティ・ページを含み、ｔ１≧１であり、第２の行はｔ２個のパリティ・ページを含み、ｔ２≧ｔ１であり、第３の行はｔ３個のパリティ・ページを含み、ｔ３≧ｔ２であり、ｔｒ個のパリティ・ページを含み、ｔｒ≧ｔｒ−１およびｎ＞ｔｒ＞ｔ１であるｒ番目の行まで以下同様になるようになっている。この方法は、読み取りストライプが少なくとも１つの消去されたページを含み、その行のうちの１行が多くてもｔｒ個の消去を含み、ｒ−１個の残りの行のうちの１行が多くてもｔｒ−１個の消去を含み、ｒ−２個の残りの行のうちの１行が多くてもｔｒ−２個の消去を含むなど、最後の残りの行がｔ１個の消去を含むと決定するまで、決定することも含む。消去されたページは、そのページのブロックならびに水平および垂直消去コードに応答して再構築される。再構築の結果、回復された読み取りストライプが得られる。
【００１１】
追加の特徴および利点は本発明の技法により実現される。本発明のその他の諸実施形態および諸態様は、本明細書に詳細に記載され、請求された本発明の一部と見なされる。その利点および特徴とともに本発明をより適切に理解するために、以下の説明および図面を参照されたい。
【００１２】
次に、例としてのみ、添付図面に関連して、本発明の諸実施形態について説明する。
【図面の簡単な説明】
【００１３】
【図１】一実施形態により複数消去訂正コードを提供するためのシステムのブロック図である。
【図２】一実施形態によるストレージ・システムを示す図である。
【図３】一実施形態によりコード化されたブロックの内容を示す図である。
【図４】一実施形態により消去訂正を実行するためのプロセス・フローである。
【図５】一実施形態により書き込みストライプをコード化するためのプロセス・フローである。
【図６】一実施形態により読み取りストライプをデコードするためのプロセス・フローである。
【発明を実施するための形態】
【００１４】
一実施形態では、ストレージ・システム内のデバイス障害とブロック障害の組み合わせとして発生するデータ損失から保護するために複数消去訂正コードを使用する。複数消去に耐えられるネストされた消去コードであって、１つの消去に耐えられる全体的な外部パリティを有するものが一実施形態によって使用される。ネストされたプロパティは、そのデータについて計算されるそれぞれの冗長性記号と、前に計算されたすべての冗長性記号によって特徴付けられる。単一のデバイスが故障した場合、本明細書に記載されている一実施形態はＲＡＩＤ６に匹敵する保護を提供するが、保管効率はＲＡＩＤ５に近くなる。
【００１５】
本明細書で使用する「消去訂正」という用語は、その位置が分かっている誤りを訂正することを指している。消去訂正は「誤り訂正」とは異なり、本明細書で使用する「誤り訂正」はその位置が分かっていない誤りを訂正することを指している。消去を訂正するには、誤りを訂正するのに必要な冗長性の量の約半分を必要とする。本明細書で使用する「ハード誤り」または「ＨＥ」という用語は消去（すなわち、位置が分かっている誤り）を指している。
【００１６】
Ｂｏｓｅ−Ｃｈａｕｄｈｕｒｉ−Ｈｏｃｑｕｅｎｇｈｅｍ（ＢＣＨ）コードなどの誤り訂正コード（ＥＣＣ）は、フラッシュ・デバイスにおける生ビット誤り率（raw bit error rate）を訂正後により低いレベルに低減するのに役立つが、最終レベルは依然としてストレージ・システムに関するターゲット生ビット誤り率より高い可能性がある。たとえば、１５ビット訂正ＢＣＨコードは、５１２バイト（Ｂ）セクタをデコードした後に、「．００１」の生ビット誤り率を２．７ｅ−９の生ビット誤り率に低下させることができる。しかし、この生ビット誤り率は、フラッシュ・デバイスにおけるＨＥの確率を表し、８ｅ−１４から８ｅ−１６に及ぶ可能性がある典型的なハードディスク・ドライブ（ＨＤＤ）のものよりかなり高い。高い誤り率は、フラッシュ・デバイスにおいて書き込み持続の終わり近くならびにデータ保持存続期間の終わり近くに発生する可能性がある。
【００１７】
ＥＣＣの誤り訂正能力を超えると、この事象は非常に高い確率で検出される。たとえば、１５ビット訂正ＢＣＨコードが実現され、１５個を超える誤りが発生した場合、ＢＣＨコード自体がこのような事象を検出する可能性が非常に高くなる。いずれの場合も、誤訂正（miscorrection）の確率が１ｅ−２６程度になることを保証するために、一般に巡回冗長コード（ＣＲＣ）が追加される。ＢＣＨコードが誤訂正を検出し損なうことは、徴候的にＨＤＤの書き込み脱落またはオフトラック書き込みと同等である。
【００１８】
当技術分野で知られているものであれば、どのような複数消去訂正コードでも一実施形態によって使用することができる。一実施形態によって使用される複数消去コードの一例はリード−ソロモン（ＲＳ）コードである。ＲＳコードは当技術分野で周知のものであり、複数の消去を訂正するために使用することができる。ＲＳコードは記号に基づくものであり、その記号のサイズは適用例次第である。ＲＡＩＤアーキテクチャに関連するＲＳコードに関するチュートリアルについては、１９９７年９月、Software, Practice & Experience、９９９〜１０１２、J.S.Plankによる「A Tutorial on Reed-SolomonCoding for Fault-Tolerance in RAID-like Systems」を参照されたい。
【００１９】
複数の消去の訂正のための効率的なコードのもう１つの系列は、１９９３年、IEEETransactions on Information Theory、第３９巻、６６〜７７ページ、M.Blaum他による「New Array Codes for Multiple Phased Burst Correction」に記載されている、Ｂｌａｕｍ−Ｒｏｔｈ  ９３（ＢＲ９３）コードによって示される。ＢＲ９３コードは、ガロア域演算を回避し、その代わりに排他的論理和（ＸＯＲ）演算のみを実行することにより、ＲＳコードより複雑ではなくなる傾向があるアレイ・コードである。
【００２０】
ＲＳおよびＢＲ９３コードはいずれも最大距離分離可能（ＭＤＳ）コードであり、消去を訂正するために冗長性を最適利用することを意味する。ＲＳおよびＢＲ９３コードは、本明細書に記載されている諸実施形態によって使用できる２つのタイプの複数消去訂正コードの例である。汎用型ＥＶＥＮＯＤＤコードまたは汎用型行対角コード（ＲＤＣ：row diagonal code）など、他の系列のコードも実現できるので、諸実施形態はこの２つのコードに限定されない。
【００２１】
図１は、一実施形態により複数消去訂正コードを使用して保護されるシステム１００のブロック図を示している。図１に示されているように、ホスト・コンピュータ１０２は、ストレージ・システム１１０内のアレイ・コントローラ１０４と通信状態にある。ストレージ・システム１１０は、ストレージ・デバイス０  １０６ａ、ストレージ・デバイス１  １０６ｂ、ストレージ・デバイス２  １０６ｃ、・・・ストレージ・デバイスＮ−１  １０６ｄというＮ個のストレージ・デバイス１０６（ここでＮは１より大きい）で構成されるストレージ・アレイ１０８にデータを保管する。一実施形態では、ホスト・データ（たとえば、データ・ビットとして表される）とともにパリティ・ビットがストレージ・デバイス１０６に保管される。一実施形態では、ストレージ・アレイ１０８内のストレージ・デバイス１０６がフラッシュ・デバイスによって実現される。一実施形態では、アレイは５個のフラッシュ・デバイスで構成され、それぞれのデバイスは３２ギガバイト（Ｇ）の記憶容量を有する。
【００２２】
図１に示されているように、アレイ・コントローラ１０４はストレージ・システム１１０の一部であり、他の実施形態では、アレイ・コントローラ１０４はホスト・コンピュータ１０２の一部である。
【００２３】
図２は、一実施形態による図１のストレージ・システム１１０を示している。ストレージ・システム１１０は、当業者によって知られている受信機、送信機、およびクロックなど、多数のその他の要素を含むことができるが、明瞭にするためにこれらは示されていない。図２に示されているように、アレイ・コントローラ１０４はエンコーダ２０２とデコーダ２０４とを含む。エンコーダ２０２は、１つまたは複数の書き込みデータ・ページを（たとえば、ホスト・コンピュータ１０２から）受信し、データ・ページとパリティ・ページの両方を含む書き込みストライプを生成するための書き込みプロセス中に使用される。一実施形態では、書き込みストライプはストレージ・アレイ１０８に書き込まれ、ストレージ・アレイ１０８内の複数の行にわたる。デコーダ２０４は、１つまたは複数のデータ・ページをストレージ・アレイ１０８から読み取るための読み取りプロセス中に使用される。１つのページ内の１つまたは複数のＨＥが検出されると、デコーダは、ストレージ・アレイ１０８からＨＥ（複数も可）が検出されているストライプ全体を読み取る。デコーダ２０４およびエンコーダ２０２はどちらも共用データ（たとえば、書き込みストライプを生成するためにエンコーダ２０２によって書き込みページに適用されたコード化のタイプを識別するためのデータ）にアクセスすることができる。読み取りストライプは、読み取りデータ・ページを生成するためにデコーダ２０４によって除去されるパリティ・ビットを含む。デコーダ２０４は、少なくとも１つのページの読み取り障害が発生したときに使用されるリコンストラクタ（reconstructor）２０６を含む。たとえば、１つのページの内部ＥＣＣの誤り訂正能力を超えたときに、読み取り障害が発生する。典型的に、誤っているページの位置は分かっており、したがって、誤り位置（たとえば、消去されたページ位置（複数も可））および読み取りストライプはリコンストラクタ２０６に送信され、これは消去されたページを取り出そうと試みる。
【００２４】
図３は、複数のストレージ・デバイス１０６の全域で保管されるアレイの一部分（本明細書では「ストライプ」ともいう）であって、複数消去訂正コードを使用してエンコーダ２０２によってコード化することができるものの内容を描写している。本明細書で使用する「ページ」という用語はメモリ・セルのグループを指している。一実施形態では、１つのページは４Ｋバイトであるが、他の諸実施形態では他のページ・サイズも実現することができる。本明細書で使用する「コード化ストライプ」という用語は、まとまって書き込みストライプを構成するページのグループであって、１つの単位として複数消去訂正コードでコード化されるものを指している。本明細書で使用する「デコーディング・ストライプ」という用語は、まとまって読み取りストライプを構成するページのグループであって、１つの単位として複数消去訂正コードでデコードされるものを指している。
【００２５】
図３に描写されているストライプは、３行×５列に配列されたページのブロックを含む。一実施形態では、それぞれの列はストレージ・デバイスの一部分を表している。図３に描写されているストライプでは、それぞれの位置はフラッシュ・メモリ・デバイス内の１つのページを表している。図３に示されているように、４つのページはパリティ・ビットを含むパリティ・ページ（ｐ０４、ｐ１４、ｐ２４、およびｐ２３と表示されているページ）であり、残りのページはデータ・ビットを含むデータ・ページ（ａ００、ａ１０、ａ２０、ａ０１、ａ１１、ａ２１、ａ０２、ａ１２、ａ２２、ａ０３、およびａ１３と表示されているページ）である。ページ読み取り障害が発生していることを検出し、任意の消去位置を識別するために、ＥＣＣ（たとえば、ＢＣＨ）またはＣＲＣが使用されると想定する。本明細書に記載されている諸実施形態では、このような読み取り障害を識別するために使用される方法にかかわらず、読み取り障害が報告されていると想定している。
【００２６】
以下に記述する図３のストライプにおけるデータ・ページおよびパリティ・ページの配列は、残りの１行の２つのＨＥとともに、任意の２行の最高１つのＨＥの回復を可能にする。ストライプ内の任意の４つのＨＥの回復を可能にする４消去訂正コードを使用することもできるが、ここでは例のためにのみ３行ストライプが示されているので、複雑さが増すことになる。適用例における典型的なストライプは１６行または３２行を必要とする。
【００２７】
パリティ・ページの配置は訂正ストライプごとに様々になる可能性がある。パリティ・ページはストライプ内のどこにでも配置することができるが、一般に、ボトルネック効果を回避するためにストライプごとに異なるデバイスに配置することが好ましい。１つのストライプ内の行および列の数は任意のものにすることができるので、図３に描写されているストライプはストライプ例の例示に過ぎない。加えて、パリティ・ページの配置は任意のものであり、図３に示されているもの以外の位置に配置することもできる。さらに、パリティ・ページの数は必要な回復次第で様々になる可能性がある。図３のストライプは、ストレージ・デバイスのサイズ次第で、垂直に非限定的に繰り返すことができる。たとえば、ストレージ・デバイスが３２Ｇのフラッシュ・デバイスであり、行数が１６に等しい場合、コード化ストライプは５００，０００回繰り返される。
【００２８】
一実施形態では、デコーダ２０４は、図３に示されているようにコード化されているストレージ・アレイ１０８からページＨＥを経験している読み取りストライプを受信する。一例として、ページａ０１、ａ１１、およびａ２１に対応する第２のストレージ・デバイスに破局的障害が発生しており、追加のＨＥがページａ１３で発生していると想定する。これら４つのページ消去は、以下に記述するデコード方式とともに図３に示されているストライプ構成を使用して回復することができる。一実施形態では、デコーダ２０４に位置するリコンストラクタ２０６によって回復が実行される。
【００２９】
図４は、一実施形態によりデコーダ２０４によって実現されるプロセス・フローを描写している。ブロック４０２では、ＥＣＣあるいはＣＲＣまたはその両方が、ページ読み取りが失敗したことを検出する。ブロック４０４では、読み取りページが失敗したページを含むストライプ内のすべてのページを読み取るための要求が送信される。ブロック４０６では、読み取りが失敗したページ（複数も可）の位置（複数も可）（すなわち、消去されたページ位置（複数も可））とともに読み取りストライプがリコンストラクタ２０６に送信される。ブロック４０８では、読み取りストライプ内の消去されたページ位置の数がこの方式の消去訂正能力を超えるかどうかが判断される。たとえば、１行が３つの消去を含む場合、この方式の消去訂正能力を超える。図３の例では、これは、２つの行がそれぞれ２つの消去を含む場合にも発生する。ブロック４０８で、読み取りストライプ内の消去されたページ位置の数がこの方式の能力を超えると判断された場合、誤り状態をデコーダ２０４に返すためのブロック４１４が実行される。ブロック４０８で、消去されたページ位置の数がこの方式の能力の範囲内であると判断された場合、ブロック４１０が実行される。ブロック４１０では、本明細書で後述するように、消去訂正コードを伴う方式を使用して、読み取りストライプが再構築される。ブロック４１２では、リコンストラクタ２０６は、回復された読み取りページを含む、回復された読み取りストライプをデコーダ２０４に出力する。
【００３０】
図５は、一実施形態により書き込みストライプをコード化するためのプロセス・フローである。一実施形態では、図５に描写されているプロセス・フローがエンコーダ２０２によって実行される。図３の１つ（アレイは３行を有し、２行は１つの消去について訂正することができ、１行は２つの消去について訂正することができる）として（１，１，２）消去訂正方式に関連して説明するが、その他の消去訂正方式を対象として含むように拡張することもできる。ブロック５０２では、「ｎ」列（たとえば、フラッシュ・デバイス）、「ｒ」行が存在し、「Ｌ」行が最高２つの消去について訂正される能力を有すると想定する。加えて、最初の「ｎ−２」列および（ｎ−１）番目の列の最初の「ｒ−Ｌ」ページがデータを含むと想定する。このアレイ内のページの残りはブランクであり、パリティ・ページを含むことになる。
【００３１】
図３の例では、５列（ｎ＝５）、３行（ｒ＝３）、およびＬ＝１が存在する。データ・ページは「ａ」、パリティ・ページは「ｐ」、未使用ページは「ｂ」、一時ページは「ｑ」または「ｃ」として表される。それぞれのページ・タイプの隣の下付き文字はアレイ内のページの位置を表している（たとえば、「ａ００」は行列内の行０、列０にあるデータ・ページである）。記号「＋」はＸＯＲ演算を表している。この実施形態のコード化により、これらの行のうちの任意の２行の１つの障害と残りの１行の２つの障害からの回復が可能になる。以下に示す説明では、一実施形態によりデータ・ページからパリティ・ページを入手する１つの方法を示している。以下のアレイは１１個のデータ・ページの位置を示している。
【表１】
0005945285.tif 000002
【００３２】
ブロック５０４では、単一パリティを使用して、最初の「ｒ−Ｌ」行がコード化される。その結果は、最後の列の最初の「ｒ−Ｌ」ページに書き込まれる。
【００３３】
この実施形態では、単一パリティを使用して、最初の２行のパリティが得られる。一実施形態では、第１の行のデータ・ページのＸＯＲを取ってｐ０４を入手し、第２の行のデータ・ページのＸＯＲを取ってｐ１４を入手することにより、そのパリティが得られる。
【表２】
0005945285.tif 000003
【００３４】
ブロック５０６では、２つの補助列（auxiliary column）ｑを入手するために、グローバル・パリティ（global parity）を有する２消去訂正コードを使用して、Ｒ行がコード化される。グローバル・パリティを有する消去訂正コードを構築する方法の一実施形態については本明細書で後述する。
【００３５】
最初の２（一般に、ｒ−Ｌ）行では、前述の２消去訂正コードの第１のパリティ記号を計算することで十分である。このような２消去訂正コードの第１のパリティ記号は、第１の行のｑ０３、第２の行のｑ１３、および第３の行のｑ２３によって示される。
【表３】
0005945285.tif 000004
【００３６】
ブロック５０８では、「（ｎ−１）番目」の列の「ｒ−Ｌ」個のデータ・ページと第１の補助列ｑの最初の「ｒ−Ｌ」個のページとのＸＯＲが取られる。本明細書に記載されているケースでは、ｒ−Ｌ＝２であり、そのＸＯＲはａ０３＋ｑ０３およびａ１３＋ｑ１３である。
【００３７】
補助列を使用してａ０３＋ｑ０３およびａ１３＋ｑ１３を計算するが、ここでａ０３およびａ１３は前のアレイに示されているデータ・ページである。
【表４】
0005945285.tif 000005
【００３８】
ブロック５１０では、Ｌ消去訂正コードを使用して、これらの「ｒ−Ｌ」個のページがコード化される。
【００３９】
したがって、この実施形態では、１消去訂正垂直コード（すなわち、単一パリティ）を使用して、補助列の最初の２つの要素のＸＯＲとしてｃ２３が計算される。
【表５】
0005945285.tif 000006
【００４０】
ブロック５１２では、ブロック５１０からのＬ個のパリティ・ページと、ブロック５０６で得られた両方の列の最後のＬ個のページとのＸＯＲが取られる。そのＸＯＲの結果は、ブロック５０２の元のアレイの最後の２列の最後の「Ｌ」個のページに書き込まれる。
【００４１】
したがって、この実施形態では、一番下の行のパリティが以下に示すように得られる。
【表６】
0005945285.tif 000007
【００４２】
これでコード化を完了し、結果として得られるアレイは以下に示す通りである。
【表７】
0005945285.tif 000008
【００４３】
結果として得られるコードはそれぞれの行が単一パリティを有するという点でＲＡＩＤ５と同様であり、それぞれの行の多くても１つの項目が消去される場合にＲＡＩＤ５を使用することができる。上記の実施形態では、３行および５列によるコード化の方法の１つを例示している。最初の２行は１つのパリティ・ページのみを伝達し、第３の行は２つのパリティ・ページを伝達し、したがって、指定１（第１の行は１パリティ）、１（第２の行は１パリティ）、２（第３の行は２パリティ）になる。
【００４４】
要約すると、上記のアレイは、「ｒ」行（ｒ＝３）×「ｎ」列（ｎ＝５）のページを含む。それぞれの行は「ｔ」個のパリティ・ページを有し、ここでｔ＞＝１である。第１の行は１つのパリティ・ページを含み（ｔ１＝１）、第２の行は１つのパリティ・ページを含み（ｔ２＝１）、第３の行は２つのパリティ・ページを含む（ｔ３＝２）。このコード化により、３行のうちの任意の１行から２（ｔ３）個までの消去を回復することができ、残りの２行のそれぞれから１（ｔ１，ｔ２）個までの消去を回復することができる。
【００４５】
一般に、諸実施形態は（１，１，．．．，１，２，２，．．．２）方式を有することサポートし、行数は２の数と同様に任意のものである。最後の行の最後の列を計算するときに垂直Ｌ消去訂正コードを使用してパリティを入手することを除いては、この一般的なケース（Ｌ個の２を有する）のコード化は（１，１，２）のケースの１と同様である。このようなコードは独立しており、水平コードとは異なる可能性があり、その選択肢は選択された特定の適用例によって決まる。以下の一実施形態は（１，１，２，２）コードの一実施形態を示している。
【００４６】
また、以下の一実施形態に示されているように、この構造は、１つの消去を含む１行、２つの消去を含む１行、および３つの消去を含む第３の行をサポートする（１，２，３）などの他のパラメータに拡張することができる。
【００４７】
図６は、一実施形態により書き込みストライプをデコードするためのプロセス・フローである。一実施形態では、図６に描写されているプロセスがデコーダ２０４によって実行される。図６のプロセス・フローは（１，１，２）消去訂正コードに関連して説明するが、その他の消去訂正コードを対象として含むように拡張することもできる。ブロック６０２では、２つの消去を含む多くても「Ｌ」行が存在し、残りの行は多くても１つの消去を含むと想定する。
【００４８】
以下のアレイ実施形態に示されているように、第１および第３の行では１つの消去が行われ（すなわち、そのページ上のデータが脱落している）、第２の行では２つの消去が行われている。ｉ番目の行およびｊ番目の列の消去はｅｉｊによって示される。
【表８】
0005945285.tif 000009
【００４９】
ブロック６０４では、ＲＡＩＤ５のように単一パリティを使用して、多くても１つの消去を含む行が訂正され、すなわち、対応する行の残りのページのＸＯＲを取ることにより、消去されたページが回復される。
【００５０】
したがって、このアレイ例を参照すると、第１の行のデータ脱落は第１の行の残存ページのＸＯＲを取ることによって回復され、第３の行のデータ脱落は第３の行の残存ページのＸＯＲを取ることによって回復される。これが可能であるのは、ｐ０４がａ００、ａ０１、ａ０２、およびａ０３のＸＯＲであるという特性を有し、ｐ２４がａ２０、ａ２１、ａ２２、およびａ２３のＸＯＲであるという特性を有するからである。この結果、以下のアレイが得られる。
【表９】
0005945285.tif 000010
【００５１】
ブロック６０６では、この時点で消去なしである少なくとも「ｒ−Ｌ」行のｑ個のパリティは、二重消去訂正コードを使用して計算される。
【００５２】
したがって、この実施形態を参照すると、第１および第３の行の２消去訂正コードの第１のパリティ・ページが得られる（ｑ０３およびｑ２３）。
【表１０】
0005945285.tif 000011
【００５３】
ブロック６０８では、少なくとも「ｒ−Ｌ」の消去なし行の「（ｎ−１）番目」の列のページと、ブロック６０６で得られた第１の列ｑとのＸＯＲが取られる。
【００５４】
したがって、この実施形態を参照すると、ａ０３＋ｑ０３およびｐ２３＋ｑ２３が得られる。前述の通り、ｐ２３＋ｑ２３＝ｃ２３である。
【表１１】
0005945285.tif 000012
【００５５】
ブロック６１０では、垂直Ｌ消去訂正コードを使用して、ブロック６０８の列で脱落している多くてもＬ個のページが取り出される。
【００５６】
この実施形態では、以下に示すように、垂直１消去訂正コードを使用して、第２の垂直記号が得られる。
【表１２】
0005945285.tif 000013
【００５７】
ブロック６１２では、二重消去訂正コードに対応するｑ個の項目を入手するために、ブロック６１０からのページと、２つの消去を有する行の最後の２列のページとのＸＯＲが取られる。
【００５８】
したがって、この実施形態では、ｑ１４がｑ１４＝（ａ１３＋ｑ１３）＋ｐ１４として得られる。
【表１３】
0005945285.tif 000014
【００５９】
ブロック６１４では、二重消去訂正コードを使用して、２つの消去を含む多くてもＬ行が訂正される。
【００６０】
この実施形態では、以下の右側に示されている行を使用する２消去訂正コードを使用して、第２の行の消去されたページが回復される。
【表１４】
0005945285.tif 000015
【００６１】
２消去訂正コードを適用した結果は以下に示す通りである。
【表１５】
0005945285.tif 000016
【００６２】
ブロック６１６では、ブロック６１０で得られたページとともに２つの消去を含む少なくともＬ行のデコードで得られた第１の列ｑと、ブロック６１４で生成されたページとのＸＯＲが取られる。
【００６３】
この実施形態を参照すると、ａ１３＋ｑ１３とｑ１３とのＸＯＲを取ることにより、ａ１３が得られる。
【表１６】
0005945285.tif 000017
【００６４】
以下のアレイに示されているように、デコードが完了する。
【表１７】
0005945285.tif 000018
【００６５】
（１，１，２，２）コード化プロセスの実施形態
この実施形態では、５列（ｎ＝５）および４行（ｒ＝４）が存在する。データ・ページは「ａ」、パリティ・ページは「ｐ」、未使用ページは「ｂ」、一時ページは「ｑ」または「ｃ」として表される。それぞれのページ・タイプの隣の下付き文字はアレイ内のページの位置を表している（たとえば、「ａ００」は行列内の行０、列０にあるデータ・ページである）。以下のアレイは１４個のデータ・ページの位置を示している。
【表１８】
0005945285.tif 000019
【００６６】
単一パリティを使用して、最初の２行のパリティが得られる。一実施形態では、第１の行のデータ・ページのＸＯＲを取ってｐ０４を入手し、第２の行のデータ・ページのＸＯＲを取ってｐ１４を入手することにより、そのパリティが得られる。
【表１９】
0005945285.tif 000020
【００６７】
次に、このアレイの最初の３（一般に、ｎ−２）列について考慮する。その行のページのＸＯＲを取ることによりゼロ・ページが得られるように、全体的なパリティ・チェックを有する２消去訂正コードを使用して、最後の２行がコード化される（たとえば、後述するＤｉＲＥコード）。最初の２行では、前述の２消去訂正コードの第１のパリティ記号を計算することで十分である。
【表２０】
0005945285.tif 000021
【００６８】
補助列を使用してａ０３＋ｑ０３およびａ１３＋ｑ１３を計算するが、ここでａ０３およびａ１３は前のアレイに示されているデータ・ページである。
【表２１】
0005945285.tif 000022
【００６９】
次に、２消去訂正垂直コードを使用して、補助列の最初の２つの項目からｃ２３およびｃ３３が計算される。
【表２２】
0005945285.tif 000023
【００７０】
一番下から２行分のパリティが以下に示すように得られる。
【表２３】
0005945285.tif 000024
【００７１】
これでコード化を完了し、結果として得られるアレイは以下に示す通りである。
【表２４】
0005945285.tif 000025
【００７２】
要約すると、上記のアレイは、ｒ行（ｒ＝４）×ｎ列（ｎ＝５）のページを含む。それぞれの行はｔ個のパリティ・ページを有し、ここでｔ＞＝１である。第１の行はｔ１個のパリティ・ページを含み（ｔ１＝１）、第２の行はｔ２個のパリティ・ページを含み（ｔ２＝１）、第３の行はｔ３個のパリティ・ページを含み（ｔ３＝２）、第４の行はｔ４個のパリティ・ページを含む（ｔ４＝２）。このコード化により、４行のうちの任意の２行から２個までの消去を回復することができ、残りの２行から１個までの消去を回復することができる。
【００７３】
（１，１，２，２）デコード・プロセスの実施形態
この実施形態では、５列（ｎ＝５）および４行（ｒ＝４）が存在する。データ・ページは「ａ」、パリティ・ページは「ｐ」、消去されたページは「ｅ」、未使用ページは「ｂ」、一時ページは「ｑ」または「ｃ」として表される。以下のアレイに示されているように、第１および第３の行では１つの消去が行われ（すなわち、そのページ上のデータが脱落している）、第２および第４の行では２つの消去が行われている。
【表２５】
0005945285.tif 000026
【００７４】
まず、第１の行の残存ページのＸＯＲを取ることにより、第１の行の脱落ページが回復され、第３の行の残存ページのＸＯＲを取ることにより、第３の行の脱落ページが回復される。この結果、以下のアレイが得られる。
【表２６】
0005945285.tif 000027
【００７５】
次に、第１および第３の行の２消去訂正コードの第１のパリティ・ページが得られる（ｑ０３およびｑ２３）。
【表２７】
0005945285.tif 000028
【００７６】
次に、ａ０３＋ｑ０３およびｐ２３＋ｑ２３が得られる。前述の通り、ｐ２３＋ｑ２３＝ｃ２３である。
【表２８】
0005945285.tif 000029
【００７７】
以下に示すように、垂直２消去訂正コードを使用して、第２および第４の垂直記号が得られる。
【表２９】
0005945285.tif 000030
【００７８】
次に、ｑ１４がｑ１４＝（ａ１３＋ｑ１３）＋ｐ１４として得られ、ｑ３４がｑ３４＝ｃ３３＋ｐ３４として得られる。
【表３０】
0005945285.tif 000031
【００７９】
以下の右側に示されている行を使用する２消去訂正コードを使用して、それぞれの行の２つの消去されたページが回復され、ここで、ｑ３３がｑ３３＝ｐ３３＋ｃ３３として得られる。
【表３１】
0005945285.tif 000032
【００８０】
２消去訂正コードを適用した結果は以下に示す通りである。
【表３２】
0005945285.tif 000033
【００８１】
次に、ｑ１３とａ１３＋ｑ１３とのＸＯＲを取ることにより、ａ１３が得られる。
【表３３】
0005945285.tif 000034
【００８２】
以下のアレイに示されているように、デコードが完了する。
【表３４】
0005945285.tif 000035
【００８３】
（１，２，３）コード化プロセスの実施形態
この実施形態では、５列（ｎ＝５）および３行（ｒ＝３）が存在する。データ・ページは「ａ」、パリティ・ページは「ｐ」、未使用ページは「ｂ」、一時ページは「ｑ」または「ｃ」として表される。それぞれのページ・タイプの隣の下付き文字はアレイ内のページの位置を表している（たとえば、「ａ００」は行列内の行０、列０にあるデータ・ページである）。以下のアレイは９個のデータ・ページの位置を示している。
【表３５】
0005945285.tif 000036
【００８４】
まず、水平３消去訂正コードを使用して、それぞれの行の最初の２つの項目がコード化され、次に、ａ０２とｐ０２とのＸＯＲが取られ、ａ１２とｐ１２とのＸＯＲが取られる。最終的に、ｑ２２は、ａ０２＋ｐ０２およびａ１２＋ｐ１２について１つの消去を訂正する垂直コードのパリティになる。この結果、以下の第２のアレイが得られる。
【表３６】
0005945285.tif 000037
【００８５】
次に、上記の水平３消去訂正コードを含む水平二重消去訂正コードを使用して、以下の第２のアレイ内のそれぞれの行に示されているｑが得られる。この時点でそれぞれの行は２つまでの消去を訂正することができ、第２のアレイ内のそれぞれの列は１つの消去を訂正することができる。
【表３７】
0005945285.tif 000038
【００８６】
上記のこの２つのアレイについてＸＯＲが取られ、以下の結果のアレイが得られるが、その行は２つの消去を訂正できるコードに含まれる。以下のアレイ内のそれぞれの行は、その線形性により、２つまでの消去を訂正することができ、ｃｉｊ＝ｐｉｊ＋ｑｉｊと示す。
【表３８】
0005945285.tif 000039
【００８７】
次に、以下の第２のアレイに示されているように、ａ０３とｒ０３とのＸＯＲが取られる。
【表３９】
0005945285.tif 000040
ａ０３＋ｃ０３は二重消去訂正垂直コードを使用して垂直にコード化され、ｓ１３およびｓ２３というラベルはこのような垂直コードに対応するパリティ・ページを示す。
【表４０】
0005945285.tif 000041
【００８８】
次に、第１のアレイ内に２消去訂正コードを含む１消去訂正コードを使用して、第２のアレイ内のそれぞれの行がコード化される。したがって、第２のアレイ内のそれぞれの列は２つの消去を訂正することができ、それぞれの行は１つの消去を訂正することができる。
【表４１】
0005945285.tif 000042
【００８９】
次に、これらのアレイについてＸＯＲが取られる。その結果の行は以下のアレイに示されるように１消去訂正コードにコード化され、ここで、ｔｉｊ＝ｃｉｊ＋ｓｉｊになる。このアレイでは、それぞれの行は、線形性のために、１つの消去を訂正することができる。これでコード化を完了する。
【表４２】
0005945285.tif 000043
【００９０】
（１，２，３）デコード・プロセスの実施形態
この実施形態では、第１の行に３つの消去、第２の行に１つの消去、第３の行に２つの消去が存在する。
【表４３】
0005945285.tif 000044
【００９１】
まず、単一パリティを使用して、１つの消去のみを含む行（すなわち、第２の行）が訂正される。
【表４４】
0005945285.tif 000045
【００９２】
次に、２消去訂正コードにより、第２の行の最初の３つの項目がコード化される。
【表４５】
0005945285.tif 000046
【００９３】
これらのアレイの両方の中間行についてＸＯＲが取られる。したがって、ｔｉｊ＋ｃｉｊ＝ｓｉｊになり、ここで、ｓｉｊはコード化において上記で示された垂直２消去訂正コードの一部である。以下の第２のアレイに示されているように、このような２消去訂正コードを使用して、最後の２列が取り出される。
【表４６】
0005945285.tif 000047
【００９４】
次に、これらのアレイのＸＯＲが取られ、その結果、以下のアレイが得られる。
【表４７】
0005945285.tif 000048
【００９５】
この時点ですべての行は２つの消去を訂正することができる。したがって、最後の行を訂正することができ、その結果、以下に示すアレイが得られる。
【表４８】
0005945285.tif 000049
【００９６】
以下の一番下のアレイに示されているように３つのパリティにより、アレイの最後の２行の最初の２つの項目がコード化される。
【表４９】
0005945285.tif 000050
【００９７】
両方のアレイの最後の２行のＸＯＲが取られ、その結果、一番下にある以下のアレイが得られ、ｑｉｊ＝ｃｉｊ＋ｐｉｊになる。
【表５０】
0005945285.tif 000051
【００９８】
それぞれの列は１つの消去を訂正することができ、垂直コードを使用して、第２のアレイ内の一番上から３つの項目が取り出され、その結果、以下のアレイが得られる。
【表５１】
0005945285.tif 000052
【００９９】
これらのアレイのＸＯＲが取られ、その結果、以下のアレイが得られ、そのそれぞれの行はこの時点で３消去訂正コードに含まれる。
【表５２】
0005945285.tif 000053
【０１００】
次に、第１の行の３つの消去が訂正され、その結果、以下のアレイが得られる。
【表５３】
0005945285.tif 000054
【０１０１】
次に、すべての記号が回復される。第１のステップはこのアレイと上記のアレイとのＸＯＲを取ることである。両方のアレイは以下に示す通りである。
【表５４】
0005945285.tif 000055
【０１０２】
この結果、以下の第１のアレイが得られ、次に、そのアレイと上記のアレイから得られる一番下のアレイとのＸＯＲが取られる。
【表５５】
0005945285.tif 000056
【０１０３】
以下のアレイに示されるように、これでデコードを完了する。
【表５６】
0005945285.tif 000057
【０１０４】
上記の方式と同様の結果を得るためのもう１つの方法は、同じ量の冗長性を有するＲＳコードを使用することである。たとえば、上記の（１，１，２）方式の実施形態では、冗長性の総量は４ページである。アレイ内の任意の４つの消去されたページを訂正できる４つの冗長ページを含むリード−ソロモン（ＲＳ）コードを実現することは可能である。この観点から見ると、ＲＳコードは本明細書に記載されているコードの諸実施形態より強力である。しかし、特に、この方式で比較的多数の行が存在する場合、典型的な実施形態では１６行または３２行が存在する場合に、ＲＳコードの複雑さは本明細書に記載されている方式の諸実施形態よりかなり増している。通常使用では、本明細書に記載されている方式は非常にＲＡＩＤ５に類似した動作を行い、それぞれの行の１つの消去から回復する。１行に２つの消去という珍しい事象が発生した場合のみ、本明細書に記載されたコードの能力全体が呼び出される。これに対して、ＲＳは、それぞれの障害ごとにコードの全長を使用する必要がある。このため、その実現例はあまり実用的ではなく、コード化およびデコード・プロセスが非常に複雑なものになる。
【０１０５】
技術的な効果および恩恵としては、冗長ディスク・アレイＲＡＩＤ６と同じ保護を提供できるが、保管効率はＲＡＩＤ５に近いものになることである。したがって、一実施形態を使用して、所与の量の冗長性についてストライプ障害に対する保護を最大限にすることができる。
【０１０６】
２つの消去を訂正し、全体的なパリティ・チェックを有する対角行コード化（ＤｉＲＥ：Diagonal-Row Encoding）コードのコード化の実施形態
（１，１，２）方式など、本明細書に記載されている方式は、最も長いコードがパリティ・チェック・コードである、ネストされたコードのシステムを含む。したがって、本明細書に記載されているコードは、全体的なパリティ・チェックを有し、より一般的には、ネスティング・プロパティを有する。特に、任意のコードワードのすべての要素のＸＯＲはゼロである。ＥＶＥＮＯＤＤまたはＲＤＰなどの周知のアレイ・コードには全体的なパリティ・チェック記号がない。ＲＤＰはネストされるが、長い方のコード（対角パリティに基づく）はＭＤＳではなく、したがって、本明細書に記載されているコードでは使用できない。
【０１０７】
後述する実施形態コードは、（Ｚ−１）行×多くても（Ｚ＋１）列のアレイを含み、ここでｚは素数である。以下の実施形態では、ｚ＝５である場合、アレイは４行×６列を含み、位置は以下のように指定される。一実施形態では、Ｌ００、Ｌ０１、Ｌ０２、Ｌ０３、Ｌ０４、およびＬ０５は、６つの異なるストレージ・デバイス上に位置する６つの異なるページからのセグメントである。この実施形態に示されているように、Ｌ００、Ｌ１０、Ｌ２０、Ｌ３０は同じページからのセグメントである。したがって、以下のアレイは６つのストレージ・デバイスのそれぞれからの１ページを表しており、それぞれのページは４つのセグメントに分割されている。最後の行（Ｌ４ｘ）は、仮想行（imaginary row）であり、計算のみに使用される。
【表５７】
0005945285.tif 000058
【０１０８】
このアレイの以下の内容を想定するが、ここで値「ｂ」は、その位置に現在、値がないことを示している。
【表５８】
0005945285.tif 000059
【０１０９】
まず、それぞれの対角線のパリティを計算すると、以下のアレイの値が得られる。Ｌ０４は「１」に等しく、これはＬ４０、Ｌ３１、Ｌ２２、およびＬ１３によって形成される対角線のパリティである。Ｌ１４は「０」に等しく、これはＬ４１、Ｌ３２、Ｌ２３、およびＬ００によって形成される対角線のパリティである。Ｌ２４は「１」に等しく、これはＬ４２、Ｌ３３、Ｌ１０、およびＬ０１によって形成される対角線のパリティである。Ｌ３４は「０」に等しく、これはＬ４３、Ｌ２０、Ｌ１１、およびＬ０２によって形成される対角線のパリティである。Ｌ４４は「１」に等しく、これはＬ３０、Ｌ２１、Ｌ１２、およびＬ０３によって形成される対角線のパリティである。
【表５９】
0005945285.tif 000060
【０１１０】
次に、パリティ列（列４）のそれぞれの要素と、列４の最後の位置の保管ビット、すなわち、Ｌ４４＝１とのＸＯＲが取られる。列４のそれぞれの要素と「１」とのＸＯＲを取ることにより、それぞれの対角線が奇数パリティを有する、以下のアレイが得られる。
【表６０】
0005945285.tif 000061
【０１１１】
次に、行のパリティ（この実施形態では常に偶数）を見つけることにより、以下のアレイに示されているように、コード化が完了する。
【表６１】
0005945285.tif 000062
【０１１２】
２消去ＤｉＲＥコードのパリティ・チェック行列の実施形態
ＢＲ９３に教示されているように、ｆ（ｘ）＝１＋ｘ＋ｘ２＋・・・＋ｘｚ−１によって生成される環（ring）について考慮するが、ここでｚは素数であり、αは回転モジュロ（rotationmodulo）ｆ（ｘ）とする。この場合、ＤｉＲＥコードに関するパリティ・チェック行列は以下のように示される。
【表６２】
0005945285.tif 000063
【０１１３】
ｆ（ｘ）によって生成された環においてパリティ・チェック行列Ｈによって定義されるコードは、ｚ＝５の場合に上記の実施形態に示されている記述と同等である。
【０１１４】
２消去のデコード：  第１のケース、最後の列の消去
このケースはコード化に類似しており、この実施形態は脱落している仮想項目に充填することから始まる。
【表６３】
0005945285.tif 000064
【０１１５】
その結果、以下のアレイが得られる。
【表６４】
0005945285.tif 000065
【０１１６】
次に、対角パリティ・コード化の逆を使用して、第３の列のデコードが実行される。この結果、以下のアレイが得られる。
【表６５】
0005945285.tif 000066
【０１１７】
回復された列（第３の列）の項目と、以下に示されているような第３の列の最後の項目とのＸＯＲが取られる。
【表６６】
0005945285.tif 000067
【０１１８】
この結果、以下のアレイが得られる。
【表６７】
0005945285.tif 000068
【０１１９】
以下のアレイに示されているように、水平パリティを計算することにより、デコードが完了する。
【表６８】
0005945285.tif 000069
【０１２０】
デコードされた値は、仮想行なしで、以下のアレイに示す通りである。
【表６９】
0005945285.tif 000070
【０１２１】
２消去のデコード：  第２のケース、最初のｚ列における２つの消去
この実施形態は脱落している仮想項目を０で充填することから始まる。
【表７０】
0005945285.tif 000071
【０１２２】
この結果、以下のアレイが得られる。
【表７１】
0005945285.tif 000072
【０１２３】
次に、最後の列のパリティが計算され、すなわち、最後の列の１の数が奇数である場合、パリティは１になり、このような数が偶数である場合、パリティは０になる。この場合、最後の列は３つの１を含み、したがって、最後の列のパリティは１になる。このパリティ値１は、以下に示されているようにアレイの最後の行に書き込まれる。
【表７２】
0005945285.tif 000073
【０１２４】
次に、対角パリティ・コード化の逆を使用して、第３の列のデコードが実行される。再帰は、消去された列の１つの最後の項目を通る対角線から始まり、水平に継続される。この結果、以下のアレイが得られる。
【表７３】
0005945285.tif 000074
【０１２５】
デコードされた値は、仮想行なしで、以下のアレイに示す通りである。
【表７４】
0005945285.tif 000075
【０１２６】
ｚ＝５の場合に３つの消去を訂正するＤｉＲＥコードのコード化の実施形態
ｚ＝５である場合、アレイは４行×６列を含み、位置は以下のように指定される。最後の行（Ｌ４ｘ）は、仮想行であり、計算のみに使用される。
【表７５】
0005945285.tif 000076
【０１２７】
このアレイの以下の内容を想定するが、ここで値「ｂ」は、その位置に現在、値がないことを示している。
【表７６】
0005945285.tif 000077
【０１２８】
この実施形態では、第４の列を入手するために、傾斜２の線を使用する。まず、傾斜２の線のそれぞれのパリティを計算すると、以下のアレイの値が得られる。Ｌ０３は「０」に等しく、これはＬ１０、Ｌ４１、およびＬ２２によって形成される線のパリティである。Ｌ１３は「０」に等しく、これはＬ２０、Ｌ０１、およびＬ３２によって形成される線のパリティである。Ｌ２３は「１」に等しく、これはＬ３０、Ｌ１１、およびＬ４２によって形成される線のパリティである。Ｌ３３は「１」に等しく、これはＬ４０、Ｌ２１、およびＬ０２によって形成される線のパリティである。Ｌ４３は「０」に等しく、これはＬ００、Ｌ３１、およびＬ１２によって形成される線のパリティである。結果のアレイは以下に示す通りである。
【表７７】
0005945285.tif 000078
【０１２９】
次に、第４の列のそれぞれの要素と、このような列の最後の位置の保管ビットとのＸＯＲが取られる。このようなビットは０であるので、その列は元のままである。以下のアレイは傾斜２の線による計算されたコード化を反映している。この実施形態では、傾斜２のそれぞれの線は偶数パリティを有する。
【表７８】
0005945285.tif 000079
【０１３０】
これで傾斜２の線のコード化を完了する。上記の前の実施形態のように最後の２列が得られるが、これはコードのネスト性を反映している。デコードされた値は、仮想行なしで、以下のアレイに示す通りである。
【表７９】
0005945285.tif 000080
【０１３１】
３つの消去をデコードするために、ＢＲ９３で開発された再帰法を使用することができる。４つ以上の消去の場合、パリティ・チェック行列のネストされた表現が拡張される。しかし、４つ以上の消去の場合、コードは必ずしもすべての素数ｚについてＭＤＳではない。いくつかの素数は、４つのパリティを含むＭＤＳであるコードを提供する（すなわち、４つの消去を訂正することができる）が、いくつかの素数はそうではない。しかし、ほとんどの適用例では、３つのパリティで十分である。最終的に、ネストされた構造は、ガロア域ＧＦ（２ｂ）内の根であるαによって実施することができる。この場合、この構造は、有限体に関するＲＳコードのものと非常に似ている。コード化およびデコードは正規のＲＳコードのケースと同様であり、当業者であれば、ネストされたケースにおいてＲＳ手順を容易に適用できるはずである。
【０１３２】
ｚ＝５の場合、ＤｉＲＥコードは６以下の長さを有する。それぞれのページは１キロバイト（Ｋ）のセグメントに分割することができ、それぞれの１Ｋセグメントはコードの細分性を規定する。しかし、適用例によっては、６つのデバイスでは少なすぎる場合があり、より長いコードを使用する必要がある可能性がある。典型的なページ・サイズは４Ｋであるので、細分性が２の累乗であることは都合のよいことであり、したがって、１に２の累乗が加えられると素数が得られると判断される。このような累乗の１つは素数ｚ＝１７に対応する１６である。この場合、１８以下の長さのＤｉＲＥコードが使用され、細分性は２５６バイト（Ｂ）のブロックによって示される。
【０１３３】
３消去ＤｉＲＥコードのパリティ・チェック行列の実施形態
３つの消去を訂正するＤｉＲＥコードに関するパリティ・チェック行列は以下のように示される。
【表８０】
0005945285.tif 000081
【０１３４】
この行列を２消去コードのパリティ・チェック行列の上記の実施形態と比較すると、ＤｉＲＥコードのネストされた構造を理解することができる。実際に、そのパリティ・チェック行列の最後の２行は２つの消去を訂正するコードのパリティ・チェック行列に対応し、したがって、３消去訂正コードが２消去訂正コードにネストされる。同様に、２つの消去を訂正するＤｉＲＥコードは単一パリティ・コードにネストされる。
【０１３５】
コード化式の実施形態
一実施形態は、（ｚ−１）行×最大（ｚ＋１）列の寸法を有するアレイに適用され、ｚは素数である。この実施形態のコードは、最初のｚ−１列を最後の２列にコード化し、以下の特徴を有する。１．このコードはＭＤＳであり、すなわち、消去された任意の２列を回復することができ、２．このコードはグローバル・パリティ・チェックを有し、すなわち、コード化された任意の行のＸＯＲは０であり、３．１および２の特徴の場合、コード化においてＸＯＲの数を最小限にし、４．デコードおよびコード化は簡単明瞭である（コード化はデコードの特別なケースである）。
【０１３６】
情報ページをａｉ，ｊ、０≦ｉ、ｊ≦ｚ−２で示し、２つのパリティ列をｐｉおよびｑｉ、０≦ｉ≦ｚ−２で示す。パリティ列を入手する方法を記述する際に以下の規則を使用する。すなわち、＜ｍ＞ｚ＝ｎはｍ≡ｎ（ｍｏｄ  ｚ）を意味し、０≦ｎ＜ｚである（たとえば、＜８＞５＝３）。ここで、
Ｓ＝ａｚ−２−ｊ，ｊのＸＯＲ、ｊ＝０〜ｚ−２
とする。
次に、０≦ｉ≦ｚ−２の場合、
ｐｉ＝Ｓとａ＜ｉ−ｊ−１＞ｚ，ｊのＸＯＲとのＸＯＲ、ｊ＝０〜ｚ−２およびｊ≠ｉ
ｑｉ＝ｐｉとａｉ，ｊのＸＯＲとのＸＯＲ、ｊ＝０〜ｚ−２
である。
【０１３７】
ｑ列が全体的なパリティ列であることは注目に値する。
【０１３８】
したがって、上記のように、２つまでの消去からの回復を可能にするＭＤＳコードを実現するために上記の計算が使用される。このＭＤＳコードはそれぞれのページをｚ−１個のセグメント（ｚは素数である）に分割し、このコードの長さは多くてもｚ＋１である。第１のパリティ・ページｐは、（第１のデータ・ページ）ＸＯＲ（第２のデータ・ページにαを掛けたもの）ＸＯＲ（第３のデータ・ページにα２を掛けたもの）ＸＯＲ・・・（ｎ−２のデータ・ページにαｎ−３を掛けたもの）として計算される。この実施形態では、αは次数ｚ−１の上記の多項式の根である。第２のパリティ・ページｑは、ｐ  ＸＯＲ（第１のデータ・ページ）ＸＯＲ（第２のデータ・ページ）ＸＯＲ（第３のデータ・ページ）ＸＯＲ・・・（ｎ−２のデータ・ページ）として計算される。
【０１３９】
このコードは複数消去に拡張することができる。３つの消去の場合、このコードは引き続きＭＤＳである。その他の場合、選択された素数によって決まる。たとえば、このコードが３つの消去を訂正できる場合、情報は最初のｚ−２列によって示され、ａｉ，ｊ、０≦ｉ≦ｚ−２、０≦ｊ≦ｚ−３であり、ｒｉ、０≦ｉ≦ｚ−２とし、パリティ列ｚ−２のページを示す。次に、ｒｉは以下のように得られる。ここで、
Ｓ２＝ａ＜−５−２ｊ＞ｚ，ｊのＸＯＲ、ｊ＝０〜ｚ−３
とする。
次に、０≦ｉ≦ｚ−２の場合、
ｃｉ＝Ｓ２とａ＜ｉ−４−２ｊ＞ｚ，ｊのＸＯＲとのＸＯＲ、ｊ＝０〜ｚ−３およびｉ≠＜２ｊ＋３＞ｚ
である。
【０１４０】
次の２列、ｐおよびｑ列は、ｃ列が入手されると、以前のように入手される。
【０１４１】
したがって、上記のように、３つまでの消去からの回復を可能にするＭＤＳコードを実現するために上記の計算が使用される。このＭＤＳコードはそれぞれのページをｚ−１個のセグメント（ｚは素数である）に分割し、このコードの長さは多くてもｚ＋１である。第１のパリティ・ページｃは、（第１のデータ・ページ）ＸＯＲ（第２のデータ・ページにα２を掛けたもの）ＸＯＲ（第３のデータ・ページにα４を掛けたもの）ＸＯＲ・・・（ｎ−３のデータ・ページにα２（ｎ−４）を掛けたもの）として計算される。この実施形態では、αは次数ｚ−１の上記の多項式の根である。第２のパリティ・ページｐは、（第１のデータ・ページ）ＸＯＲ（第２のデータ・ページにαを掛けたもの）ＸＯＲ（第３のデータ・ページにα２を掛けたもの）ＸＯＲ・・・（ｎ−３のデータ・ページにαｎ−４を掛けたもの）ＸＯＲ（第１のパリティ・ページにαｎ−３を掛けたもの）として計算される。第３のパリティ・ページｑは、（第１のデータ・ページ）ＸＯＲ（第２のデータ・ページ）ＸＯＲ・・・（ｎ−３のデータ・ページ）ＸＯＲ（第１のパリティ・ページｃ）ＸＯＲ（第２のパリティ・ページｐ）として計算される。
【０１４２】
デコード式の実施形態
この実施形態は２つの消去を処理するが、３つ以上の消去に拡張することもできる。この実施形態では、消去は列ｉおよびｊで行われ、０≦ｉ＜ｊ≦ｚである。０≦ｔ≦ｚ−２である場合、ａｔ，ｚ−１＝ｐｔおよびａｔ，ｚ＝ｑｔとする。ｊ＝ｚおよびｊ＜ｚという２つのケースを区別する。最初のケースｊ＝ｚについて考慮する。ここで、
Ｓ＝ａ＜ｉ−１−ｊ＞ｚ，ｊのＸＯＲ、ｊ＝０〜ｚ−２およびｊ≠ｉ
とする。
次に、０≦ｔ≦ｚ−２の場合、
ａｔ，ｉ＝Ｓとａ＜ｔ＋ｉ−ｊ＞ｚ，ｊのＸＯＲとのＸＯＲ、ｊ＝０〜ｚ−２、ｊ≠ｉ、およびｊ≠＜ｔ＋ｉ＋１＞ｚ
ａｔ，ｚ＝ｑｔ＝ａｔ，ｊのＸＯＲ、ｊ＝０〜ｚ−１
である。
次に、ｊ＜ｚのケースについて考慮する。ここで、
Ｓ＝ａｔ，ｚのＸＯＲ、ｔ＝０〜ｚ−２
とする。
さらに、ａｚ−１，ｍ＝０、０≦ｍ≦ｚとする。
次に、０≦Ｌ≦ｚ−２の場合、以下の式を計算する。
ａ＜−（ｊ−１）（Ｌ＋１）−１＞ｚ，ｊ＝Ｓとａ＜−（ｊ−１）（Ｌ＋１）＋ｊ−ｔ＞ｚ，ｔのＸＯＲとのＸＯＲ、ｔ＝０〜ｚ−１およびｔ≠ｊ
ａ＜−（ｊ−１）（Ｌ＋１）−１＞ｚ，ｊ＝ａ＜−（ｊ−１）（Ｌ＋１）−１＞ｚ，ｔのＸＯＲ、ｔ＝０〜ｚおよびｔ≠ｊ
【０１４３】
本明細書で使用する用語は、特定の実施形態のみを記述するためのものであって、本発明を限定するためのものではない。本明細書で使用する「a」、「an」、および「the」という単数形は、文脈が明らかにそうではない場合を示さない限り、複数形も含むためのものである。「comprises」あるいは「comprising」またはその両方の用語は、本明細書で使用する場合、所定の特徴、整数、ステップ、動作、要素、あるいはコンポーネント、またはこれらの組み合わせの存在を指定するが、１つまたは複数のその他の特徴、整数、ステップ、動作、要素、コンポーネント、あるいはそのグループ、またはこれらの組み合わせの存在または追加を排除しないことがさらに理解されるであろう。
【０１４４】
以下の特許請求の範囲内のすべての手段またはステップならびに機能要素に対応する構造、材料、行為、およびそれと同等のものは、具体的に請求されている他の請求要素と組み合わせてその機能を実行するための任意の構造、材料、または行為を含むためのものである。本発明の説明は、例示および解説のために提示されたものであり、網羅するためまたは開示された形式に本発明を限定するためのものではない。多くの変更および変形は、本発明の範囲および精神を逸脱せずに当業者にとって明白なものになる。この実施形態は、本発明の原理および実用的な適用例を最も良く説明するため、ならびにその他の当業者が企図された特定の用途に適した様々な変更を含む様々な実施形態について本発明を理解できるようにするために、選択され記載されたものである。
【０１４５】
さらに、当業者によって認識されるように、本発明の諸態様は、システム、方法、またはコンピュータ・プログラム製品として実施することができる。したがって、本発明の諸態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、またはソフトウェアとハードウェアの諸態様を組み合わせる実施形態の形を取ることができ、いずれも本明細書では一般に「回路」、「モジュール」、または「システム」と呼ぶことができる。さらに、本発明の諸態様は、そこにコンピュータ可読プログラム・コードが実施されている１つまたは複数のコンピュータ可読媒体に実施されたコンピュータ・プログラム製品の形を取ることができる。
【０１４６】
１つまたは複数のコンピュータ可読媒体の任意の組み合わせを使用することができる。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体にすることができる。コンピュータ可読記憶媒体は、たとえば、電子、磁気、光、電磁、赤外線、または半導体のシステム、装置、またはデバイス、あるいは上記のものの任意の適切な組み合わせにすることができるが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例（非網羅的リスト）としては、１つまたは複数のワイヤを有する電気接続、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、光学記憶装置、磁気記憶装置、あるいは上記のものの任意の適切な組み合わせを含むであろう。本明細書の文脈では、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによりあるいはそれに関連して使用するためのプログラムを収容または保管することができる任意の有形媒体にすることができる。
【０１４７】
コンピュータ可読信号媒体は、たとえば、ベースバンド内でまたは搬送波の一部として、そこにコンピュータ可読プログラム・コードが実施されている伝搬データ信号を含むことができる。このような伝搬信号は、電磁、光、またはそれらの任意の適切な組み合わせを含むがこれらに限定されない様々な形のうちのいずれかを取ることができる。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体ではなく、命令実行システム、装置、またはデバイスによりあるいはそれに関連して使用するためのプログラムを通信、伝搬、または輸送することができる任意のコンピュータ可読媒体にすることができる。
【０１４８】
コンピュータ可読媒体上に実施されたプログラム・コードは、無線、有線、光ファイバ・ケーブル、ＲＦなど、あるいは上記のものの任意の適切な組み合わせを含むがこれらに限定されない任意の適切な媒体を使用して伝送することができる。
【０１４９】
本発明の諸態様に関する動作を実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語ならびに「Ｃ」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、１つまたは複数のプログラミング言語の任意の組み合わせで作成することができる。プログラム・コードは、完全にユーザのコンピュータ上で、一部分はユーザのコンピュータ上で、スタンドアロン・ソフトウェア・パッケージとして、一部分はユーザのコンピュータ上でしかも一部分はリモート・コンピュータ上で、あるいは完全にリモート・コンピュータまたはサーバ上で実行することができる。後者のシナリオでは、ローカル・エリア・ネットワーク（ＬＡＮ）または広域ネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してリモート・コンピュータがユーザのコンピュータに接続される場合もあれば、（たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して）外部コンピュータに接続が行われる場合もある。
【０１５０】
本発明の諸態様は、本発明の諸実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品の流れ図あるいはブロック図またはその両方に関連して上記で記載されている。流れ図あるいはブロック図またはその両方の各ブロックおよび流れ図あるいはブロック図またはその両方内の複数ブロックの組み合わせは、コンピュータ・プログラム命令によって実現可能であることが理解されるであろう。これらのコンピュータ・プログラム命令は、汎用コンピュータ、特殊目的コンピュータ、またはその他のプログラマブル・データ処理装置のプロセッサに提供し、コンピュータまたはその他のプログラマブル・データ処理装置のプロセッサにより実行された命令が流れ図あるいはブロック図またはその両方の１つまたは複数のブロックに指定された機能／行為を実現するための手段を作成するようなマシンを生産することができる。
【０１５１】
また、これらのコンピュータ・プログラム命令は、コンピュータ可読媒体に保管された命令が流れ図あるいはブロック図またはその両方の１つまたは複数のブロックに指定された機能／行為を実現する命令を含む装置（article of manufacture）を生産するような特定の方法で機能するよう、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイスに指示することができるコンピュータ可読媒体に保管することもできる。
【０１５２】
また、コンピュータ・プログラム命令は、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイス上にロードし、コンピュータまたはその他のプログラマブル装置上で実行された命令が流れ図あるいはブロック図またはその両方の１つまたは複数のブロックに指定された機能／行為を実現するためのプロセスを提供するようなコンピュータで実行されるプロセスを生産するように、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイス上で一連の動作ステップを実行させることもできる。
【０１５３】
図面内の流れ図およびブロック図は、本発明の様々な諸実施形態によるシステム、方法、およびコンピュータ・プログラム製品について可能な実現例のアーキテクチャ、機能、および動作を例示している。この点に関しては、流れ図またはブロック図内の各ブロックは、指定の論理機能（複数も可）を実現するための１つまたは複数の実行可能命令を含む、コードのモジュール、セグメント、または一部分を表すことができる。また、いくつかの代替実現例では、ブロック内に示された機能は図面内に示された順序から外れて行われる可能性があることにも留意されたい。たとえば、連続して示されている２つのブロックは、関係する機能次第で、実際にはほぼ同時に実行される場合もあれば、ときには逆の順序で実行される場合もある。また、ブロック図あるいは流れ図またはその両方の各ブロックおよびブロック図あるいは流れ図またはその両方内の複数ブロックの組み合わせは、指定の機能または行為を実行する特殊目的ハードウェアベースのシステムあるいは特殊目的ハードウェアとコンピュータ命令との組み合わせによって実現可能であることも留意されるであろう。
【図１】
0005945285.tif 000082
【図２】
0005945285.tif 000083
【図３】
0005945285.tif 000084
【図４】
0005945285.tif 000085
【図５】
0005945285.tif 000086
【図６】
0005945285.tif 000087