(54)【発明の名称】ストレージ・アレイにデータを保管するための方法、システム、およびコンピュータ・プログラム、ならびにストレージ・アレイ内の消去を訂正するための方法およびコンピュータ・プログラム
(58)【調査した分野】(Int.Cl.,DB名)
前記MDSコードにより2つまでの消去からの回復が可能になり、前記MDSコードがぞれぞれのページをz−1個のセグメントに分割し、zが素数であり、前記MDSコードの長さnが多くてもz+1であり、
第1のパリティ・ページが、第1のデータ・ページと、第2のデータ・ページにαを掛けたものと、第3のデータ・ページにα2を掛けたものと、第4のデータ・ページにα3を掛けたものと、以下同様で、n−2のデータ・ページにαn−3を掛けたものとの排他的論理和(XOR)として計算され、αは次数z−1の多項式の根であり、
第2のパリティ・ページが、最初のn−2のデータ・ページと、前記第1のパリティ・ページとのXORとして計算される、請求項3記載の方法。
前記MDSコードにより3つまでの消去からの回復が可能になり、前記MDSコードがぞれぞれのページをz−1個のセグメントに分割し、zが素数であり、前記コードの長さnが多くてもz+1であり、
第1のパリティ・ページが、第1のデータ・ページと、第2のデータ・ページにα2を掛けたものと、第3のデータ・ページにα4を掛けたものと、第4のデータ・ページにα6を掛けたものと、以下同様で、n−3のデータ・ページにα2(n−4)を掛けたものとのXORとして計算され、αは次数z−1の多項式の根であり、
第2のパリティ・ページが、第1のデータ・ページと、第2のデータ・ページにαを掛けたものと、第3のデータ・ページにα2を掛けたものと、第4のデータ・ページにα3を掛けたものと、以下同様で、n−3のデータ・ページにαn−4を掛けたものと、前記第1のパリティ・ページにαn−3を掛けたものとのXORとして計算され、
第3のパリティ・ページが、前記n−3のデータ・ページと、前記第1および第2のパリティ・ページとのXORとして計算される、請求項3記載の方法。
【発明を実施するための形態】
【0014】
一実施形態では、ストレージ・システム内のデバイス障害とブロック障害の組み合わせとして発生するデータ損失から保護するために複数消去訂正コードを使用する。複数消去に耐えられるネストされた消去コードであって、1つの消去に耐えられる全体的な外部パリティを有するものが一実施形態によって使用される。ネストされたプロパティは、そのデータについて計算されるそれぞれの冗長性記号と、前に計算されたすべての冗長性記号によって特徴付けられる。単一のデバイスが故障した場合、本明細書に記載されている一実施形態はRAID6に匹敵する保護を提供するが、保管効率はRAID5に近くなる。
【0015】
本明細書で使用する「消去訂正」という用語は、その位置が分かっている誤りを訂正することを指している。消去訂正は「誤り訂正」とは異なり、本明細書で使用する「誤り訂正」はその位置が分かっていない誤りを訂正することを指している。消去を訂正するには、誤りを訂正するのに必要な冗長性の量の約半分を必要とする。本明細書で使用する「ハード誤り」または「HE」という用語は消去(すなわち、位置が分かっている誤り)を指している。
【0016】
Bose−Chaudhuri−Hocquenghem(BCH)コードなどの誤り訂正コード(ECC)は、フラッシュ・デバイスにおける生ビット誤り率(raw bit error rate)を訂正後により低いレベルに低減するのに役立つが、最終レベルは依然としてストレージ・システムに関するターゲット生ビット誤り率より高い可能性がある。たとえば、15ビット訂正BCHコードは、512バイト(B)セクタをデコードした後に、「.001」の生ビット誤り率を2.7e
−9の生ビット誤り率に低下させることができる。しかし、この生ビット誤り率は、フラッシュ・デバイスにおけるHEの確率を表し、8e
−14から8e
−16に及ぶ可能性がある典型的なハードディスク・ドライブ(HDD)のものよりかなり高い。高い誤り率は、フラッシュ・デバイスにおいて書き込み持続の終わり近くならびにデータ保持存続期間の終わり近くに発生する可能性がある。
【0017】
ECCの誤り訂正能力を超えると、この事象は非常に高い確率で検出される。たとえば、15ビット訂正BCHコードが実現され、15個を超える誤りが発生した場合、BCHコード自体がこのような事象を検出する可能性が非常に高くなる。いずれの場合も、誤訂正(miscorrection)の確率が1e
−26程度になることを保証するために、一般に巡回冗長コード(CRC)が追加される。BCHコードが誤訂正を検出し損なうことは、徴候的にHDDの書き込み脱落またはオフトラック書き込みと同等である。
【0018】
当技術分野で知られているものであれば、どのような複数消去訂正コードでも一実施形態によって使用することができる。一実施形態によって使用される複数消去コードの一例はリード−ソロモン(RS)コードである。RSコードは当技術分野で周知のものであり、複数の消去を訂正するために使用することができる。RSコードは記号に基づくものであり、その記号のサイズは適用例次第である。RAIDアーキテクチャに関連するRSコードに関するチュートリアルについては、1997年9月、Software, Practice & Experience、999〜1012、J.S.Plankによる「A Tutorial on Reed-SolomonCoding for Fault-Tolerance in RAID-like Systems」を参照されたい。
【0019】
複数の消去の訂正のための効率的なコードのもう1つの系列は、1993年、IEEETransactions on Information Theory、第39巻、66〜77ページ、M.Blaum他による「New Array Codes for Multiple Phased Burst Correction」に記載されている、Blaum−Roth 93(BR93)コードによって示される。BR93コードは、ガロア域演算を回避し、その代わりに排他的論理和(XOR)演算のみを実行することにより、RSコードより複雑ではなくなる傾向があるアレイ・コードである。
【0020】
RSおよびBR93コードはいずれも最大距離分離可能(MDS)コードであり、消去を訂正するために冗長性を最適利用することを意味する。RSおよびBR93コードは、本明細書に記載されている諸実施形態によって使用できる2つのタイプの複数消去訂正コードの例である。汎用型EVENODDコードまたは汎用型行対角コード(RDC:row diagonal code)など、他の系列のコードも実現できるので、諸実施形態はこの2つのコードに限定されない。
【0021】
図1は、一実施形態により複数消去訂正コードを使用して保護されるシステム100のブロック図を示している。
図1に示されているように、ホスト・コンピュータ102は、ストレージ・システム110内のアレイ・コントローラ104と通信状態にある。ストレージ・システム110は、ストレージ・デバイス0 106a、ストレージ・デバイス1 106b、ストレージ・デバイス2 106c、・・・ストレージ・デバイスN−1 106dというN個のストレージ・デバイス106(ここでNは1より大きい)で構成されるストレージ・アレイ108にデータを保管する。一実施形態では、ホスト・データ(たとえば、データ・ビットとして表される)とともにパリティ・ビットがストレージ・デバイス106に保管される。一実施形態では、ストレージ・アレイ108内のストレージ・デバイス106がフラッシュ・デバイスによって実現される。一実施形態では、アレイは5個のフラッシュ・デバイスで構成され、それぞれのデバイスは32ギガバイト(G)の記憶容量を有する。
【0022】
図1に示されているように、アレイ・コントローラ104はストレージ・システム110の一部であり、他の実施形態では、アレイ・コントローラ104はホスト・コンピュータ102の一部である。
【0023】
図2は、一実施形態による
図1のストレージ・システム110を示している。ストレージ・システム110は、当業者によって知られている受信機、送信機、およびクロックなど、多数のその他の要素を含むことができるが、明瞭にするためにこれらは示されていない。
図2に示されているように、アレイ・コントローラ104はエンコーダ202とデコーダ204とを含む。エンコーダ202は、1つまたは複数の書き込みデータ・ページを(たとえば、ホスト・コンピュータ102から)受信し、データ・ページとパリティ・ページの両方を含む書き込みストライプを生成するための書き込みプロセス中に使用される。一実施形態では、書き込みストライプはストレージ・アレイ108に書き込まれ、ストレージ・アレイ108内の複数の行にわたる。デコーダ204は、1つまたは複数のデータ・ページをストレージ・アレイ108から読み取るための読み取りプロセス中に使用される。1つのページ内の1つまたは複数のHEが検出されると、デコーダは、ストレージ・アレイ108からHE(複数も可)が検出されているストライプ全体を読み取る。デコーダ204およびエンコーダ202はどちらも共用データ(たとえば、書き込みストライプを生成するためにエンコーダ202によって書き込みページに適用されたコード化のタイプを識別するためのデータ)にアクセスすることができる。読み取りストライプは、読み取りデータ・ページを生成するためにデコーダ204によって除去されるパリティ・ビットを含む。デコーダ204は、少なくとも1つのページの読み取り障害が発生したときに使用されるリコンストラクタ(reconstructor)206を含む。たとえば、1つのページの内部ECCの誤り訂正能力を超えたときに、読み取り障害が発生する。典型的に、誤っているページの位置は分かっており、したがって、誤り位置(たとえば、消去されたページ位置(複数も可))および読み取りストライプはリコンストラクタ206に送信され、これは消去されたページを取り出そうと試みる。
【0024】
図3は、複数のストレージ・デバイス106の全域で保管されるアレイの一部分(本明細書では「ストライプ」ともいう)であって、複数消去訂正コードを使用してエンコーダ202によってコード化することができるものの内容を描写している。本明細書で使用する「ページ」という用語はメモリ・セルのグループを指している。一実施形態では、1つのページは4Kバイトであるが、他の諸実施形態では他のページ・サイズも実現することができる。本明細書で使用する「コード化ストライプ」という用語は、まとまって書き込みストライプを構成するページのグループであって、1つの単位として複数消去訂正コードでコード化されるものを指している。本明細書で使用する「デコーディング・ストライプ」という用語は、まとまって読み取りストライプを構成するページのグループであって、1つの単位として複数消去訂正コードでデコードされるものを指している。
【0025】
図3に描写されているストライプは、3行×5列に配列されたページのブロックを含む。一実施形態では、それぞれの列はストレージ・デバイスの一部分を表している。
図3に描写されているストライプでは、それぞれの位置はフラッシュ・メモリ・デバイス内の1つのページを表している。
図3に示されているように、4つのページはパリティ・ビットを含むパリティ・ページ(p
04、p
14、p
24、およびp
23と表示されているページ)であり、残りのページはデータ・ビットを含むデータ・ページ(a
00、a
10、a
20、a
01、a
11、a
21、a
02、a
12、a
22、a
03、およびa
13と表示されているページ)である。ページ読み取り障害が発生していることを検出し、任意の消去位置を識別するために、ECC(たとえば、BCH)またはCRCが使用されると想定する。本明細書に記載されている諸実施形態では、このような読み取り障害を識別するために使用される方法にかかわらず、読み取り障害が報告されていると想定している。
【0026】
以下に記述する
図3のストライプにおけるデータ・ページおよびパリティ・ページの配列は、残りの1行の2つのHEとともに、任意の2行の最高1つのHEの回復を可能にする。ストライプ内の任意の4つのHEの回復を可能にする4消去訂正コードを使用することもできるが、ここでは例のためにのみ3行ストライプが示されているので、複雑さが増すことになる。適用例における典型的なストライプは16行または32行を必要とする。
【0027】
パリティ・ページの配置は訂正ストライプごとに様々になる可能性がある。パリティ・ページはストライプ内のどこにでも配置することができるが、一般に、ボトルネック効果を回避するためにストライプごとに異なるデバイスに配置することが好ましい。1つのストライプ内の行および列の数は任意のものにすることができるので、
図3に描写されているストライプはストライプ例の例示に過ぎない。加えて、パリティ・ページの配置は任意のものであり、
図3に示されているもの以外の位置に配置することもできる。さらに、パリティ・ページの数は必要な回復次第で様々になる可能性がある。
図3のストライプは、ストレージ・デバイスのサイズ次第で、垂直に非限定的に繰り返すことができる。たとえば、ストレージ・デバイスが32Gのフラッシュ・デバイスであり、行数が16に等しい場合、コード化ストライプは500,000回繰り返される。
【0028】
一実施形態では、デコーダ204は、
図3に示されているようにコード化されているストレージ・アレイ108からページHEを経験している読み取りストライプを受信する。一例として、ページa
01、a
11、およびa
21に対応する第2のストレージ・デバイスに破局的障害が発生しており、追加のHEがページa
13で発生していると想定する。これら4つのページ消去は、以下に記述するデコード方式とともに
図3に示されているストライプ構成を使用して回復することができる。一実施形態では、デコーダ204に位置するリコンストラクタ206によって回復が実行される。
【0029】
図4は、一実施形態によりデコーダ204によって実現されるプロセス・フローを描写している。ブロック402では、ECCあるいはCRCまたはその両方が、ページ読み取りが失敗したことを検出する。ブロック404では、読み取りページが失敗したページを含むストライプ内のすべてのページを読み取るための要求が送信される。ブロック406では、読み取りが失敗したページ(複数も可)の位置(複数も可)(すなわち、消去されたページ位置(複数も可))とともに読み取りストライプがリコンストラクタ206に送信される。ブロック408では、読み取りストライプ内の消去されたページ位置の数がこの方式の消去訂正能力を超えるかどうかが判断される。たとえば、1行が3つの消去を含む場合、この方式の消去訂正能力を超える。
図3の例では、これは、2つの行がそれぞれ2つの消去を含む場合にも発生する。ブロック408で、読み取りストライプ内の消去されたページ位置の数がこの方式の能力を超えると判断された場合、誤り状態をデコーダ204に返すためのブロック414が実行される。ブロック408で、消去されたページ位置の数がこの方式の能力の範囲内であると判断された場合、ブロック410が実行される。ブロック410では、本明細書で後述するように、消去訂正コードを伴う方式を使用して、読み取りストライプが再構築される。ブロック412では、リコンストラクタ206は、回復された読み取りページを含む、回復された読み取りストライプをデコーダ204に出力する。
【0030】
図5は、一実施形態により書き込みストライプをコード化するためのプロセス・フローである。一実施形態では、
図5に描写されているプロセス・フローがエンコーダ202によって実行される。
図3の1つ(アレイは3行を有し、2行は1つの消去について訂正することができ、1行は2つの消去について訂正することができる)として(1,1,2)消去訂正方式に関連して説明するが、その他の消去訂正方式を対象として含むように拡張することもできる。ブロック502では、「n」列(たとえば、フラッシュ・デバイス)、「r」行が存在し、「L」行が最高2つの消去について訂正される能力を有すると想定する。加えて、最初の「n−2」列および(n−1)番目の列の最初の「r−L」ページがデータを含むと想定する。このアレイ内のページの残りはブランクであり、パリティ・ページを含むことになる。
【0031】
図3の例では、5列(n=5)、3行(r=3)、およびL=1が存在する。データ・ページは「a」、パリティ・ページは「p」、未使用ページは「b」、一時ページは「q」または「c」として表される。それぞれのページ・タイプの隣の下付き文字はアレイ内のページの位置を表している(たとえば、「a
00」は行列内の行0、列0にあるデータ・ページである)。記号「+」はXOR演算を表している。この実施形態のコード化により、これらの行のうちの任意の2行の1つの障害と残りの1行の2つの障害からの回復が可能になる。以下に示す説明では、一実施形態によりデータ・ページからパリティ・ページを入手する1つの方法を示している。以下のアレイは11個のデータ・ページの位置を示している。
【表1】
【0032】
ブロック504では、単一パリティを使用して、最初の「r−L」行がコード化される。その結果は、最後の列の最初の「r−L」ページに書き込まれる。
【0033】
この実施形態では、単一パリティを使用して、最初の2行のパリティが得られる。一実施形態では、第1の行のデータ・ページのXORを取ってp
04を入手し、第2の行のデータ・ページのXORを取ってp
14を入手することにより、そのパリティが得られる。
【表2】
【0034】
ブロック506では、2つの補助列(auxiliary column)qを入手するために、グローバル・パリティ(global parity)を有する2消去訂正コードを使用して、R行がコード化される。グローバル・パリティを有する消去訂正コードを構築する方法の一実施形態については本明細書で後述する。
【0035】
最初の2(一般に、r−L)行では、前述の2消去訂正コードの第1のパリティ記号を計算することで十分である。このような2消去訂正コードの第1のパリティ記号は、第1の行のq
03、第2の行のq
13、および第3の行のq
23によって示される。
【表3】
【0036】
ブロック508では、「(n−1)番目」の列の「r−L」個のデータ・ページと第1の補助列qの最初の「r−L」個のページとのXORが取られる。本明細書に記載されているケースでは、r−L=2であり、そのXORはa
03+q
03およびa
13+q
13である。
【0037】
補助列を使用してa
03+q
03およびa
13+q
13を計算するが、ここでa
03およびa
13は前のアレイに示されているデータ・ページである。
【表4】
【0038】
ブロック510では、L消去訂正コードを使用して、これらの「r−L」個のページがコード化される。
【0039】
したがって、この実施形態では、1消去訂正垂直コード(すなわち、単一パリティ)を使用して、補助列の最初の2つの要素のXORとしてc
23が計算される。
【表5】
【0040】
ブロック512では、ブロック510からのL個のパリティ・ページと、ブロック506で得られた両方の列の最後のL個のページとのXORが取られる。そのXORの結果は、ブロック502の元のアレイの最後の2列の最後の「L」個のページに書き込まれる。
【0041】
したがって、この実施形態では、一番下の行のパリティが以下に示すように得られる。
【表6】
【0042】
これでコード化を完了し、結果として得られるアレイは以下に示す通りである。
【表7】
【0043】
結果として得られるコードはそれぞれの行が単一パリティを有するという点でRAID5と同様であり、それぞれの行の多くても1つの項目が消去される場合にRAID5を使用することができる。上記の実施形態では、3行および5列によるコード化の方法の1つを例示している。最初の2行は1つのパリティ・ページのみを伝達し、第3の行は2つのパリティ・ページを伝達し、したがって、指定1(第1の行は1パリティ)、1(第2の行は1パリティ)、2(第3の行は2パリティ)になる。
【0044】
要約すると、上記のアレイは、「r」行(r=3)×「n」列(n=5)のページを含む。それぞれの行は「t」個のパリティ・ページを有し、ここでt>=1である。第1の行は1つのパリティ・ページを含み(t
1=1)、第2の行は1つのパリティ・ページを含み(t
2=1)、第3の行は2つのパリティ・ページを含む(t
3=2)。このコード化により、3行のうちの任意の1行から2(t
3)個までの消去を回復することができ、残りの2行のそれぞれから1(t
1,t
2)個までの消去を回復することができる。
【0045】
一般に、諸実施形態は(1,1,...,1,2,2,...2)方式を有することサポートし、行数は2の数と同様に任意のものである。最後の行の最後の列を計算するときに垂直L消去訂正コードを使用してパリティを入手することを除いては、この一般的なケース(L個の2を有する)のコード化は(1,1,2)のケースの1と同様である。このようなコードは独立しており、水平コードとは異なる可能性があり、その選択肢は選択された特定の適用例によって決まる。以下の一実施形態は(1,1,2,2)コードの一実施形態を示している。
【0046】
また、以下の一実施形態に示されているように、この構造は、1つの消去を含む1行、2つの消去を含む1行、および3つの消去を含む第3の行をサポートする(1,2,3)などの他のパラメータに拡張することができる。
【0047】
図6は、一実施形態により書き込みストライプをデコードするためのプロセス・フローである。一実施形態では、
図6に描写されているプロセスがデコーダ204によって実行される。
図6のプロセス・フローは(1,1,2)消去訂正コードに関連して説明するが、その他の消去訂正コードを対象として含むように拡張することもできる。ブロック602では、2つの消去を含む多くても「L」行が存在し、残りの行は多くても1つの消去を含むと想定する。
【0048】
以下のアレイ実施形態に示されているように、第1および第3の行では1つの消去が行われ(すなわち、そのページ上のデータが脱落している)、第2の行では2つの消去が行われている。i番目の行およびj番目の列の消去はe
ijによって示される。
【表8】
【0049】
ブロック604では、RAID5のように単一パリティを使用して、多くても1つの消去を含む行が訂正され、すなわち、対応する行の残りのページのXORを取ることにより、消去されたページが回復される。
【0050】
したがって、このアレイ例を参照すると、第1の行のデータ脱落は第1の行の残存ページのXORを取ることによって回復され、第3の行のデータ脱落は第3の行の残存ページのXORを取ることによって回復される。これが可能であるのは、p
04がa
00、a
01、a
02、およびa
03のXORであるという特性を有し、p
24がa
20、a
21、a
22、およびa
23のXORであるという特性を有するからである。この結果、以下のアレイが得られる。
【表9】
【0051】
ブロック606では、この時点で消去なしである少なくとも「r−L」行のq個のパリティは、二重消去訂正コードを使用して計算される。
【0052】
したがって、この実施形態を参照すると、第1および第3の行の2消去訂正コードの第1のパリティ・ページが得られる(q
03およびq
23)。
【表10】
【0053】
ブロック608では、少なくとも「r−L」の消去なし行の「(n−1)番目」の列のページと、ブロック606で得られた第1の列qとのXORが取られる。
【0054】
したがって、この実施形態を参照すると、a
03+q
03およびp
23+q
23が得られる。前述の通り、p
23+q
23=c
23である。
【表11】
【0055】
ブロック610では、垂直L消去訂正コードを使用して、ブロック608の列で脱落している多くてもL個のページが取り出される。
【0056】
この実施形態では、以下に示すように、垂直1消去訂正コードを使用して、第2の垂直記号が得られる。
【表12】
【0057】
ブロック612では、二重消去訂正コードに対応するq個の項目を入手するために、ブロック610からのページと、2つの消去を有する行の最後の2列のページとのXORが取られる。
【0058】
したがって、この実施形態では、q
14がq
14=(a
13+q
13)+p
14として得られる。
【表13】
【0059】
ブロック614では、二重消去訂正コードを使用して、2つの消去を含む多くてもL行が訂正される。
【0060】
この実施形態では、以下の右側に示されている行を使用する2消去訂正コードを使用して、第2の行の消去されたページが回復される。
【表14】
【0061】
2消去訂正コードを適用した結果は以下に示す通りである。
【表15】
【0062】
ブロック616では、ブロック610で得られたページとともに2つの消去を含む少なくともL行のデコードで得られた第1の列qと、ブロック614で生成されたページとのXORが取られる。
【0063】
この実施形態を参照すると、a
13+q
13とq
13とのXORを取ることにより、a
13が得られる。
【表16】
【0064】
以下のアレイに示されているように、デコードが完了する。
【表17】
【0065】
(1,1,2,2)コード化プロセスの実施形態
この実施形態では、5列(n=5)および4行(r=4)が存在する。データ・ページは「a」、パリティ・ページは「p」、未使用ページは「b」、一時ページは「q」または「c」として表される。それぞれのページ・タイプの隣の下付き文字はアレイ内のページの位置を表している(たとえば、「a
00」は行列内の行0、列0にあるデータ・ページである)。以下のアレイは14個のデータ・ページの位置を示している。
【表18】
【0066】
単一パリティを使用して、最初の2行のパリティが得られる。一実施形態では、第1の行のデータ・ページのXORを取ってp
04を入手し、第2の行のデータ・ページのXORを取ってp
14を入手することにより、そのパリティが得られる。
【表19】
【0067】
次に、このアレイの最初の3(一般に、n−2)列について考慮する。その行のページのXORを取ることによりゼロ・ページが得られるように、全体的なパリティ・チェックを有する2消去訂正コードを使用して、最後の2行がコード化される(たとえば、後述するDiREコード)。最初の2行では、前述の2消去訂正コードの第1のパリティ記号を計算することで十分である。
【表20】
【0068】
補助列を使用してa
03+q
03およびa
13+q
13を計算するが、ここでa
03およびa
13は前のアレイに示されているデータ・ページである。
【表21】
【0069】
次に、2消去訂正垂直コードを使用して、補助列の最初の2つの項目からc
23およびc
33が計算される。
【表22】
【0070】
一番下から2行分のパリティが以下に示すように得られる。
【表23】
【0071】
これでコード化を完了し、結果として得られるアレイは以下に示す通りである。
【表24】
【0072】
要約すると、上記のアレイは、r行(r=4)×n列(n=5)のページを含む。それぞれの行はt個のパリティ・ページを有し、ここでt>=1である。第1の行はt
1個のパリティ・ページを含み(t
1=1)、第2の行はt
2個のパリティ・ページを含み(t
2=1)、第3の行はt
3個のパリティ・ページを含み(t
3=2)、第4の行はt
4個のパリティ・ページを含む(t
4=2)。このコード化により、4行のうちの任意の2行から2個までの消去を回復することができ、残りの2行から1個までの消去を回復することができる。
【0073】
(1,1,2,2)デコード・プロセスの実施形態
この実施形態では、5列(n=5)および4行(r=4)が存在する。データ・ページは「a」、パリティ・ページは「p」、消去されたページは「e」、未使用ページは「b」、一時ページは「q」または「c」として表される。以下のアレイに示されているように、第1および第3の行では1つの消去が行われ(すなわち、そのページ上のデータが脱落している)、第2および第4の行では2つの消去が行われている。
【表25】
【0074】
まず、第1の行の残存ページのXORを取ることにより、第1の行の脱落ページが回復され、第3の行の残存ページのXORを取ることにより、第3の行の脱落ページが回復される。この結果、以下のアレイが得られる。
【表26】
【0075】
次に、第1および第3の行の2消去訂正コードの第1のパリティ・ページが得られる(q
03およびq
23)。
【表27】
【0076】
次に、a
03+q
03およびp
23+q
23が得られる。前述の通り、p
23+q
23=c
23である。
【表28】
【0077】
以下に示すように、垂直2消去訂正コードを使用して、第2および第4の垂直記号が得られる。
【表29】
【0078】
次に、q
14がq
14=(a
13+q
13)+p
14として得られ、q
34がq
34=c
33+p
34として得られる。
【表30】
【0079】
以下の右側に示されている行を使用する2消去訂正コードを使用して、それぞれの行の2つの消去されたページが回復され、ここで、q
33がq
33=p
33+c
33として得られる。
【表31】
【0080】
2消去訂正コードを適用した結果は以下に示す通りである。
【表32】
【0081】
次に、q
13とa
13+q
13とのXORを取ることにより、a
13が得られる。
【表33】
【0082】
以下のアレイに示されているように、デコードが完了する。
【表34】
【0083】
(1,2,3)コード化プロセスの実施形態
この実施形態では、5列(n=5)および3行(r=3)が存在する。データ・ページは「a」、パリティ・ページは「p」、未使用ページは「b」、一時ページは「q」または「c」として表される。それぞれのページ・タイプの隣の下付き文字はアレイ内のページの位置を表している(たとえば、「a
00」は行列内の行0、列0にあるデータ・ページである)。以下のアレイは9個のデータ・ページの位置を示している。
【表35】
【0084】
まず、水平3消去訂正コードを使用して、それぞれの行の最初の2つの項目がコード化され、次に、a
02とp
02とのXORが取られ、a
12とp
12とのXORが取られる。最終的に、q
22は、a
02+p
02およびa
12+p
12について1つの消去を訂正する垂直コードのパリティになる。この結果、以下の第2のアレイが得られる。
【表36】
【0085】
次に、上記の水平3消去訂正コードを含む水平二重消去訂正コードを使用して、以下の第2のアレイ内のそれぞれの行に示されているqが得られる。この時点でそれぞれの行は2つまでの消去を訂正することができ、第2のアレイ内のそれぞれの列は1つの消去を訂正することができる。
【表37】
【0086】
上記のこの2つのアレイについてXORが取られ、以下の結果のアレイが得られるが、その行は2つの消去を訂正できるコードに含まれる。以下のアレイ内のそれぞれの行は、その線形性により、2つまでの消去を訂正することができ、c
ij=p
ij+q
ijと示す。
【表38】
【0087】
次に、以下の第2のアレイに示されているように、a
03とr
03とのXORが取られる。
【表39】
a
03+c
03は二重消去訂正垂直コードを使用して垂直にコード化され、s
13およびs
23というラベルはこのような垂直コードに対応するパリティ・ページを示す。
【表40】
【0088】
次に、第1のアレイ内に2消去訂正コードを含む1消去訂正コードを使用して、第2のアレイ内のそれぞれの行がコード化される。したがって、第2のアレイ内のそれぞれの列は2つの消去を訂正することができ、それぞれの行は1つの消去を訂正することができる。
【表41】
【0089】
次に、これらのアレイについてXORが取られる。その結果の行は以下のアレイに示されるように1消去訂正コードにコード化され、ここで、t
ij=c
ij+s
ijになる。このアレイでは、それぞれの行は、線形性のために、1つの消去を訂正することができる。これでコード化を完了する。
【表42】
【0090】
(1,2,3)デコード・プロセスの実施形態
この実施形態では、第1の行に3つの消去、第2の行に1つの消去、第3の行に2つの消去が存在する。
【表43】
【0091】
まず、単一パリティを使用して、1つの消去のみを含む行(すなわち、第2の行)が訂正される。
【表44】
【0092】
次に、2消去訂正コードにより、第2の行の最初の3つの項目がコード化される。
【表45】
【0093】
これらのアレイの両方の中間行についてXORが取られる。したがって、t
ij+c
ij=s
ijになり、ここで、s
ijはコード化において上記で示された垂直2消去訂正コードの一部である。以下の第2のアレイに示されているように、このような2消去訂正コードを使用して、最後の2列が取り出される。
【表46】
【0094】
次に、これらのアレイのXORが取られ、その結果、以下のアレイが得られる。
【表47】
【0095】
この時点ですべての行は2つの消去を訂正することができる。したがって、最後の行を訂正することができ、その結果、以下に示すアレイが得られる。
【表48】
【0096】
以下の一番下のアレイに示されているように3つのパリティにより、アレイの最後の2行の最初の2つの項目がコード化される。
【表49】
【0097】
両方のアレイの最後の2行のXORが取られ、その結果、一番下にある以下のアレイが得られ、q
ij=c
ij+p
ijになる。
【表50】
【0098】
それぞれの列は1つの消去を訂正することができ、垂直コードを使用して、第2のアレイ内の一番上から3つの項目が取り出され、その結果、以下のアレイが得られる。
【表51】
【0099】
これらのアレイのXORが取られ、その結果、以下のアレイが得られ、そのそれぞれの行はこの時点で3消去訂正コードに含まれる。
【表52】
【0100】
次に、第1の行の3つの消去が訂正され、その結果、以下のアレイが得られる。
【表53】
【0101】
次に、すべての記号が回復される。第1のステップはこのアレイと上記のアレイとのXORを取ることである。両方のアレイは以下に示す通りである。
【表54】
【0102】
この結果、以下の第1のアレイが得られ、次に、そのアレイと上記のアレイから得られる一番下のアレイとのXORが取られる。
【表55】
【0103】
以下のアレイに示されるように、これでデコードを完了する。
【表56】
【0104】
上記の方式と同様の結果を得るためのもう1つの方法は、同じ量の冗長性を有するRSコードを使用することである。たとえば、上記の(1,1,2)方式の実施形態では、冗長性の総量は4ページである。アレイ内の任意の4つの消去されたページを訂正できる4つの冗長ページを含むリード−ソロモン(RS)コードを実現することは可能である。この観点から見ると、RSコードは本明細書に記載されているコードの諸実施形態より強力である。しかし、特に、この方式で比較的多数の行が存在する場合、典型的な実施形態では16行または32行が存在する場合に、RSコードの複雑さは本明細書に記載されている方式の諸実施形態よりかなり増している。通常使用では、本明細書に記載されている方式は非常にRAID5に類似した動作を行い、それぞれの行の1つの消去から回復する。1行に2つの消去という珍しい事象が発生した場合のみ、本明細書に記載されたコードの能力全体が呼び出される。これに対して、RSは、それぞれの障害ごとにコードの全長を使用する必要がある。このため、その実現例はあまり実用的ではなく、コード化およびデコード・プロセスが非常に複雑なものになる。
【0105】
技術的な効果および恩恵としては、冗長ディスク・アレイRAID6と同じ保護を提供できるが、保管効率はRAID5に近いものになることである。したがって、一実施形態を使用して、所与の量の冗長性についてストライプ障害に対する保護を最大限にすることができる。
【0106】
2つの消去を訂正し、全体的なパリティ・チェックを有する対角行コード化(DiRE:Diagonal-Row Encoding)コードのコード化の実施形態
(1,1,2)方式など、本明細書に記載されている方式は、最も長いコードがパリティ・チェック・コードである、ネストされたコードのシステムを含む。したがって、本明細書に記載されているコードは、全体的なパリティ・チェックを有し、より一般的には、ネスティング・プロパティを有する。特に、任意のコードワードのすべての要素のXORはゼロである。EVENODDまたはRDPなどの周知のアレイ・コードには全体的なパリティ・チェック記号がない。RDPはネストされるが、長い方のコード(対角パリティに基づく)はMDSではなく、したがって、本明細書に記載されているコードでは使用できない。
【0107】
後述する実施形態コードは、(Z−1)行×多くても(Z+1)列のアレイを含み、ここでzは素数である。以下の実施形態では、z=5である場合、アレイは4行×6列を含み、位置は以下のように指定される。一実施形態では、L
00、L
01、L
02、L
03、L
04、およびL
05は、6つの異なるストレージ・デバイス上に位置する6つの異なるページからのセグメントである。この実施形態に示されているように、L
00、L
10、L
20、L
30は同じページからのセグメントである。したがって、以下のアレイは6つのストレージ・デバイスのそれぞれからの1ページを表しており、それぞれのページは4つのセグメントに分割されている。最後の行(L
4x)は、仮想行(imaginary row)であり、計算のみに使用される。
【表57】
【0108】
このアレイの以下の内容を想定するが、ここで値「b」は、その位置に現在、値がないことを示している。
【表58】
【0109】
まず、それぞれの対角線のパリティを計算すると、以下のアレイの値が得られる。L
04は「1」に等しく、これはL
40、L
31、L
22、およびL
13によって形成される対角線のパリティである。L
14は「0」に等しく、これはL
41、L
32、L
23、およびL
00によって形成される対角線のパリティである。L
24は「1」に等しく、これはL
42、L
33、L
10、およびL
01によって形成される対角線のパリティである。L
34は「0」に等しく、これはL
43、L
20、L
11、およびL
02によって形成される対角線のパリティである。L
44は「1」に等しく、これはL
30、L
21、L
12、およびL
03によって形成される対角線のパリティである。
【表59】
【0110】
次に、パリティ列(列4)のそれぞれの要素と、列4の最後の位置の保管ビット、すなわち、L
44=1とのXORが取られる。列4のそれぞれの要素と「1」とのXORを取ることにより、それぞれの対角線が奇数パリティを有する、以下のアレイが得られる。
【表60】
【0111】
次に、行のパリティ(この実施形態では常に偶数)を見つけることにより、以下のアレイに示されているように、コード化が完了する。
【表61】
【0112】
2消去DiREコードのパリティ・チェック行列の実施形態
BR93に教示されているように、f(x)=1+x+x
2+・・・+x
z−1によって生成される環(ring)について考慮するが、ここでzは素数であり、αは回転モジュロ(rotationmodulo)f(x)とする。この場合、DiREコードに関するパリティ・チェック行列は以下のように示される。
【表62】
【0113】
f(x)によって生成された環においてパリティ・チェック行列Hによって定義されるコードは、z=5の場合に上記の実施形態に示されている記述と同等である。
【0114】
2消去のデコード: 第1のケース、最後の列の消去
このケースはコード化に類似しており、この実施形態は脱落している仮想項目に充填することから始まる。
【表63】
【0115】
その結果、以下のアレイが得られる。
【表64】
【0116】
次に、対角パリティ・コード化の逆を使用して、第3の列のデコードが実行される。この結果、以下のアレイが得られる。
【表65】
【0117】
回復された列(第3の列)の項目と、以下に示されているような第3の列の最後の項目とのXORが取られる。
【表66】
【0118】
この結果、以下のアレイが得られる。
【表67】
【0119】
以下のアレイに示されているように、水平パリティを計算することにより、デコードが完了する。
【表68】
【0120】
デコードされた値は、仮想行なしで、以下のアレイに示す通りである。
【表69】
【0121】
2消去のデコード: 第2のケース、最初のz列における2つの消去
この実施形態は脱落している仮想項目を0で充填することから始まる。
【表70】
【0122】
この結果、以下のアレイが得られる。
【表71】
【0123】
次に、最後の列のパリティが計算され、すなわち、最後の列の1の数が奇数である場合、パリティは1になり、このような数が偶数である場合、パリティは0になる。この場合、最後の列は3つの1を含み、したがって、最後の列のパリティは1になる。このパリティ値1は、以下に示されているようにアレイの最後の行に書き込まれる。
【表72】
【0124】
次に、対角パリティ・コード化の逆を使用して、第3の列のデコードが実行される。再帰は、消去された列の1つの最後の項目を通る対角線から始まり、水平に継続される。この結果、以下のアレイが得られる。
【表73】
【0125】
デコードされた値は、仮想行なしで、以下のアレイに示す通りである。
【表74】
【0126】
z=5の場合に3つの消去を訂正するDiREコードのコード化の実施形態
z=5である場合、アレイは4行×6列を含み、位置は以下のように指定される。最後の行(L
4x)は、仮想行であり、計算のみに使用される。
【表75】
【0127】
このアレイの以下の内容を想定するが、ここで値「b」は、その位置に現在、値がないことを示している。
【表76】
【0128】
この実施形態では、第4の列を入手するために、傾斜2の線を使用する。まず、傾斜2の線のそれぞれのパリティを計算すると、以下のアレイの値が得られる。L
03は「0」に等しく、これはL
10、L
41、およびL
22によって形成される線のパリティである。L
13は「0」に等しく、これはL
20、L
01、およびL
32によって形成される線のパリティである。L
23は「1」に等しく、これはL
30、L
11、およびL
42によって形成される線のパリティである。L
33は「1」に等しく、これはL
40、L
21、およびL
02によって形成される線のパリティである。L
43は「0」に等しく、これはL
00、L
31、およびL
12によって形成される線のパリティである。結果のアレイは以下に示す通りである。
【表77】
【0129】
次に、第4の列のそれぞれの要素と、このような列の最後の位置の保管ビットとのXORが取られる。このようなビットは0であるので、その列は元のままである。以下のアレイは傾斜2の線による計算されたコード化を反映している。この実施形態では、傾斜2のそれぞれの線は偶数パリティを有する。
【表78】
【0130】
これで傾斜2の線のコード化を完了する。上記の前の実施形態のように最後の2列が得られるが、これはコードのネスト性を反映している。デコードされた値は、仮想行なしで、以下のアレイに示す通りである。
【表79】
【0131】
3つの消去をデコードするために、BR93で開発された再帰法を使用することができる。4つ以上の消去の場合、パリティ・チェック行列のネストされた表現が拡張される。しかし、4つ以上の消去の場合、コードは必ずしもすべての素数zについてMDSではない。いくつかの素数は、4つのパリティを含むMDSであるコードを提供する(すなわち、4つの消去を訂正することができる)が、いくつかの素数はそうではない。しかし、ほとんどの適用例では、3つのパリティで十分である。最終的に、ネストされた構造は、ガロア域GF(2
b)内の根であるαによって実施することができる。この場合、この構造は、有限体に関するRSコードのものと非常に似ている。コード化およびデコードは正規のRSコードのケースと同様であり、当業者であれば、ネストされたケースにおいてRS手順を容易に適用できるはずである。
【0132】
z=5の場合、DiREコードは6以下の長さを有する。それぞれのページは1キロバイト(K)のセグメントに分割することができ、それぞれの1Kセグメントはコードの細分性を規定する。しかし、適用例によっては、6つのデバイスでは少なすぎる場合があり、より長いコードを使用する必要がある可能性がある。典型的なページ・サイズは4Kであるので、細分性が2の累乗であることは都合のよいことであり、したがって、1に2の累乗が加えられると素数が得られると判断される。このような累乗の1つは素数z=17に対応する16である。この場合、18以下の長さのDiREコードが使用され、細分性は256バイト(B)のブロックによって示される。
【0133】
3消去DiREコードのパリティ・チェック行列の実施形態
3つの消去を訂正するDiREコードに関するパリティ・チェック行列は以下のように示される。
【表80】
【0134】
この行列を2消去コードのパリティ・チェック行列の上記の実施形態と比較すると、DiREコードのネストされた構造を理解することができる。実際に、そのパリティ・チェック行列の最後の2行は2つの消去を訂正するコードのパリティ・チェック行列に対応し、したがって、3消去訂正コードが2消去訂正コードにネストされる。同様に、2つの消去を訂正するDiREコードは単一パリティ・コードにネストされる。
【0135】
コード化式の実施形態
一実施形態は、(z−1)行×最大(z+1)列の寸法を有するアレイに適用され、zは素数である。この実施形態のコードは、最初のz−1列を最後の2列にコード化し、以下の特徴を有する。1.このコードはMDSであり、すなわち、消去された任意の2列を回復することができ、2.このコードはグローバル・パリティ・チェックを有し、すなわち、コード化された任意の行のXORは0であり、3.1および2の特徴の場合、コード化においてXORの数を最小限にし、4.デコードおよびコード化は簡単明瞭である(コード化はデコードの特別なケースである)。
【0136】
情報ページをa
i,j、0≦i、j≦z−2で示し、2つのパリティ列をp
iおよびq
i、0≦i≦z−2で示す。パリティ列を入手する方法を記述する際に以下の規則を使用する。すなわち、<m>
z=nはm≡n(mod z)を意味し、0≦n<zである(たとえば、<8>
5=3)。ここで、
S=a
z−2−j,jのXOR、j=0〜z−2
とする。
次に、0≦i≦z−2の場合、
p
i=Sとa
<i−j−1>z,jのXORとのXOR、j=0〜z−2およびj≠i
q
i=p
iとa
i,jのXORとのXOR、j=0〜z−2
である。
【0137】
q列が全体的なパリティ列であることは注目に値する。
【0138】
したがって、上記のように、2つまでの消去からの回復を可能にするMDSコードを実現するために上記の計算が使用される。このMDSコードはそれぞれのページをz−1個のセグメント(zは素数である)に分割し、このコードの長さは多くてもz+1である。第1のパリティ・ページpは、(第1のデータ・ページ)XOR(第2のデータ・ページにαを掛けたもの)XOR(第3のデータ・ページにα
2を掛けたもの)XOR・・・(n−2のデータ・ページにα
n−3を掛けたもの)として計算される。この実施形態では、αは次数z−1の上記の多項式の根である。第2のパリティ・ページqは、p XOR(第1のデータ・ページ)XOR(第2のデータ・ページ)XOR(第3のデータ・ページ)XOR・・・(n−2のデータ・ページ)として計算される。
【0139】
このコードは複数消去に拡張することができる。3つの消去の場合、このコードは引き続きMDSである。その他の場合、選択された素数によって決まる。たとえば、このコードが3つの消去を訂正できる場合、情報は最初のz−2列によって示され、a
i,j、0≦i≦z−2、0≦j≦z−3であり、r
i、0≦i≦z−2とし、パリティ列z−2のページを示す。次に、r
iは以下のように得られる。ここで、
S
2=a
<−5−2j>z,jのXOR、j=0〜z−3
とする。
次に、0≦i≦z−2の場合、
c
i=S
2とa
<i−4−2j>z,jのXORとのXOR、j=0〜z−3およびi≠<2j+3>
z
である。
【0140】
次の2列、pおよびq列は、c列が入手されると、以前のように入手される。
【0141】
したがって、上記のように、3つまでの消去からの回復を可能にするMDSコードを実現するために上記の計算が使用される。このMDSコードはそれぞれのページをz−1個のセグメント(zは素数である)に分割し、このコードの長さは多くてもz+1である。第1のパリティ・ページcは、(第1のデータ・ページ)XOR(第2のデータ・ページにα
2を掛けたもの)XOR(第3のデータ・ページにα
4を掛けたもの)XOR・・・(n−3のデータ・ページにα
2(n−4)を掛けたもの)として計算される。この実施形態では、αは次数z−1の上記の多項式の根である。第2のパリティ・ページpは、(第1のデータ・ページ)XOR(第2のデータ・ページにαを掛けたもの)XOR(第3のデータ・ページにα
2を掛けたもの)XOR・・・(n−3のデータ・ページにα
n−4を掛けたもの)XOR(第1のパリティ・ページにα
n−3を掛けたもの)として計算される。第3のパリティ・ページqは、(第1のデータ・ページ)XOR(第2のデータ・ページ)XOR・・・(n−3のデータ・ページ)XOR(第1のパリティ・ページc)XOR(第2のパリティ・ページp)として計算される。
【0142】
デコード式の実施形態
この実施形態は2つの消去を処理するが、3つ以上の消去に拡張することもできる。この実施形態では、消去は列iおよびjで行われ、0≦i<j≦zである。0≦t≦z−2である場合、a
t,z−1=p
tおよびa
t,z=q
tとする。j=zおよびj<zという2つのケースを区別する。最初のケースj=zについて考慮する。ここで、
S=a
<i−1−j>z,jのXOR、j=0〜z−2およびj≠i
とする。
次に、0≦t≦z−2の場合、
a
t,i=Sとa
<t+i−j>z,jのXORとのXOR、j=0〜z−2、j≠i、およびj≠<t+i+1>
z
a
t,z=q
t=a
t,jのXOR、j=0〜z−1
である。
次に、j<zのケースについて考慮する。ここで、
S=a
t,zのXOR、t=0〜z−2
とする。
さらに、a
z−1,m=0、0≦m≦zとする。
次に、0≦L≦z−2の場合、以下の式を計算する。
a
<−(j−1)(L+1)−1>z,j=Sとa
<−(j−1)(L+1)+j−t>z,tのXORとのXOR、t=0〜z−1およびt≠j
a
<−(j−1)(L+1)−1>z,j=a
<−(j−1)(L+1)−1>z,tのXOR、t=0〜zおよびt≠j
【0143】
本明細書で使用する用語は、特定の実施形態のみを記述するためのものであって、本発明を限定するためのものではない。本明細書で使用する「a」、「an」、および「the」という単数形は、文脈が明らかにそうではない場合を示さない限り、複数形も含むためのものである。「comprises」あるいは「comprising」またはその両方の用語は、本明細書で使用する場合、所定の特徴、整数、ステップ、動作、要素、あるいはコンポーネント、またはこれらの組み合わせの存在を指定するが、1つまたは複数のその他の特徴、整数、ステップ、動作、要素、コンポーネント、あるいはそのグループ、またはこれらの組み合わせの存在または追加を排除しないことがさらに理解されるであろう。
【0144】
以下の特許請求の範囲内のすべての手段またはステップならびに機能要素に対応する構造、材料、行為、およびそれと同等のものは、具体的に請求されている他の請求要素と組み合わせてその機能を実行するための任意の構造、材料、または行為を含むためのものである。本発明の説明は、例示および解説のために提示されたものであり、網羅するためまたは開示された形式に本発明を限定するためのものではない。多くの変更および変形は、本発明の範囲および精神を逸脱せずに当業者にとって明白なものになる。この実施形態は、本発明の原理および実用的な適用例を最も良く説明するため、ならびにその他の当業者が企図された特定の用途に適した様々な変更を含む様々な実施形態について本発明を理解できるようにするために、選択され記載されたものである。
【0145】
さらに、当業者によって認識されるように、本発明の諸態様は、システム、方法、またはコンピュータ・プログラム製品として実施することができる。したがって、本発明の諸態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態(ファームウェア、常駐ソフトウェア、マイクロコードなどを含む)、またはソフトウェアとハードウェアの諸態様を組み合わせる実施形態の形を取ることができ、いずれも本明細書では一般に「回路」、「モジュール」、または「システム」と呼ぶことができる。さらに、本発明の諸態様は、そこにコンピュータ可読プログラム・コードが実施されている1つまたは複数のコンピュータ可読媒体に実施されたコンピュータ・プログラム製品の形を取ることができる。
【0146】
1つまたは複数のコンピュータ可読媒体の任意の組み合わせを使用することができる。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体にすることができる。コンピュータ可読記憶媒体は、たとえば、電子、磁気、光、電磁、赤外線、または半導体のシステム、装置、またはデバイス、あるいは上記のものの任意の適切な組み合わせにすることができるが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例(非網羅的リスト)としては、1つまたは複数のワイヤを有する電気接続、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ(RAM)、読み取り専用メモリ(ROM)、消去可能プログラム可能読み取り専用メモリ(EPROMまたはフラッシュ・メモリ)、光ファイバ、ポータブル・コンパクト・ディスク読み取り専用メモリ(CD−ROM)、光学記憶装置、磁気記憶装置、あるいは上記のものの任意の適切な組み合わせを含むであろう。本明細書の文脈では、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによりあるいはそれに関連して使用するためのプログラムを収容または保管することができる任意の有形媒体にすることができる。
【0147】
コンピュータ可読信号媒体は、たとえば、ベースバンド内でまたは搬送波の一部として、そこにコンピュータ可読プログラム・コードが実施されている伝搬データ信号を含むことができる。このような伝搬信号は、電磁、光、またはそれらの任意の適切な組み合わせを含むがこれらに限定されない様々な形のうちのいずれかを取ることができる。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体ではなく、命令実行システム、装置、またはデバイスによりあるいはそれに関連して使用するためのプログラムを通信、伝搬、または輸送することができる任意のコンピュータ可読媒体にすることができる。
【0148】
コンピュータ可読媒体上に実施されたプログラム・コードは、無線、有線、光ファイバ・ケーブル、RFなど、あるいは上記のものの任意の適切な組み合わせを含むがこれらに限定されない任意の適切な媒体を使用して伝送することができる。
【0149】
本発明の諸態様に関する動作を実行するためのコンピュータ・プログラム・コードは、Java、Smalltalk、C++などのオブジェクト指向プログラミング言語ならびに「C」プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つまたは複数のプログラミング言語の任意の組み合わせで作成することができる。プログラム・コードは、完全にユーザのコンピュータ上で、一部分はユーザのコンピュータ上で、スタンドアロン・ソフトウェア・パッケージとして、一部分はユーザのコンピュータ上でしかも一部分はリモート・コンピュータ上で、あるいは完全にリモート・コンピュータまたはサーバ上で実行することができる。後者のシナリオでは、ローカル・エリア・ネットワーク(LAN)または広域ネットワーク(WAN)を含む任意のタイプのネットワークを介してリモート・コンピュータがユーザのコンピュータに接続される場合もあれば、(たとえば、インターネット・サービス・プロバイダを使用してインターネットを介して)外部コンピュータに接続が行われる場合もある。
【0150】
本発明の諸態様は、本発明の諸実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品の流れ図あるいはブロック図またはその両方に関連して上記で記載されている。流れ図あるいはブロック図またはその両方の各ブロックおよび流れ図あるいはブロック図またはその両方内の複数ブロックの組み合わせは、コンピュータ・プログラム命令によって実現可能であることが理解されるであろう。これらのコンピュータ・プログラム命令は、汎用コンピュータ、特殊目的コンピュータ、またはその他のプログラマブル・データ処理装置のプロセッサに提供し、コンピュータまたはその他のプログラマブル・データ処理装置のプロセッサにより実行された命令が流れ図あるいはブロック図またはその両方の1つまたは複数のブロックに指定された機能/行為を実現するための手段を作成するようなマシンを生産することができる。
【0151】
また、これらのコンピュータ・プログラム命令は、コンピュータ可読媒体に保管された命令が流れ図あるいはブロック図またはその両方の1つまたは複数のブロックに指定された機能/行為を実現する命令を含む装置(article of manufacture)を生産するような特定の方法で機能するよう、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイスに指示することができるコンピュータ可読媒体に保管することもできる。
【0152】
また、コンピュータ・プログラム命令は、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイス上にロードし、コンピュータまたはその他のプログラマブル装置上で実行された命令が流れ図あるいはブロック図またはその両方の1つまたは複数のブロックに指定された機能/行為を実現するためのプロセスを提供するようなコンピュータで実行されるプロセスを生産するように、コンピュータ、その他のプログラマブル・データ処理装置、またはその他のデバイス上で一連の動作ステップを実行させることもできる。
【0153】
図面内の流れ図およびブロック図は、本発明の様々な諸実施形態によるシステム、方法、およびコンピュータ・プログラム製品について可能な実現例のアーキテクチャ、機能、および動作を例示している。この点に関しては、流れ図またはブロック図内の各ブロックは、指定の論理機能(複数も可)を実現するための1つまたは複数の実行可能命令を含む、コードのモジュール、セグメント、または一部分を表すことができる。また、いくつかの代替実現例では、ブロック内に示された機能は図面内に示された順序から外れて行われる可能性があることにも留意されたい。たとえば、連続して示されている2つのブロックは、関係する機能次第で、実際にはほぼ同時に実行される場合もあれば、ときには逆の順序で実行される場合もある。また、ブロック図あるいは流れ図またはその両方の各ブロックおよびブロック図あるいは流れ図またはその両方内の複数ブロックの組み合わせは、指定の機能または行為を実行する特殊目的ハードウェアベースのシステムあるいは特殊目的ハードウェアとコンピュータ命令との組み合わせによって実現可能であることも留意されるであろう。