(57)【特許請求の範囲】
【請求項１】
システムであって、
ｋ個の冗長データ部分を計算してｎ−ｋ個の有用なデータ部分を保護する手段と、
各前記ｋ個の冗長データ部分および各前記ｎ−ｋ個の有用なデータ部分をそれぞれ別々の対応する領域に格納する手段であって、各前記対応する領域はｎ個の物理的デバイスのうちの１つのそれぞれの対応する領域内にあるものである、前記格納する手段と、
前記対応する領域の１つがもはや使用可能でなくなる障害が発生した後に、ｊ個の冗長データ部分を計算してｎ−１−ｊ個の有用なデータ部分を保護する手段と、
を有し、
ここで、ｊ＝＝ｋ−１およびｊ>＝１であるとき、前記有用なデータ部分の総量は維持され、且つ前記保護の度合いは減少し、前記有用なデータ部分は保護されるものであるシステム。
【請求項２】
システムであって、
ｋ個の冗長データ部分を計算してｎ−ｋ個の有用なデータ部分を保護する手段と、
各前記ｋ個の冗長データ部分および各前記ｎ−ｋ個の有用なデータ部分をそれぞれ別々の対応する領域に格納する手段であって、各前記対応する領域はｎ個の物理的デバイスのうちの１つのそれぞれの対応する領域内にあるものである、前記格納する手段と、
前記対応する領域の１つがもはや使用可能でなくなる障害が発生した後に、ｊ個の冗長データ部分を計算してｎ−１−ｊ個の有用なデータ部分を保護する手段と、
を有し、
ここでｊ<＝ｋであり、
前記ｋ個の冗長データ部分を計算してｎ−ｋ個の有用なデータ部分を保護する手段は第１のデータ保護モードで動作可能であり、前記ｊ個の冗長データ部分を計算してｎ−１−ｊ個の有用なデータ部分を保護する手段は第２のデータ保護モードで動作可能であり、さらに、
前記障害に応答して、前記第１のデータ保護モードでの動作から前記第２のデータ保護モードでの動作に切り換える手段を有するものであるシステム。
【請求項３】
請求項２記載のシステムにおいて、ｊ＝＝ｋであるとき、前記有用なデータ部分の総量は減少し、所定の保護の度合いは少なくとも維持されるものであるシステム。
【請求項４】
請求項３記載のシステムにおいて、前記保護の度合いは前記対応する領域のｊ個までの障害に対する保護であるシステム。
【請求項５】
請求項１記載のシステムにおいて、前記保護の減少の度合いは前記対応する領域のｊ−１個までの障害に対する保護であるシステム。
【請求項６】
請求項１または２記載のシステムにおいて、
前記ｎ個の物理的デバイスの各々は複数の前記対応する領域を有し、さらに、
前記対応する領域の複数のセットの各々に、有用なデータのサブセットと当該有用なデータのサブセットを保護する冗長データのサブセットとを有するデータセットのそれぞれを格納する手段を有し、前記冗長データのサブセットは前記有用なデータのサブセットとは別個の前記ｎ個の物理的デバイスのうちの任意のデバイスに格納されるものであり、
前記対応する領域のセットの各々は前記ｎ個の物理的デバイス各々における対応する１つの領域のみを有し、前記格納する手段は、前記ｎ個の物理的デバイスのｎ個またはｎ個より少ない物理的デバイスの異なるセットに選択的に格納されている前記対応するデータセットの各々に従って格納を行うものである
システム。
【請求項７】
請求項６記載のシステムにおいて、前記障害が発生する前に、前記データセットのうち特定の１つのデータセット内の有用なデータのサブセットは前記ｎ−ｋ個の有用なデータ部分を有し、当該特定のデータセット内の冗長データのサブセットは前記ｋ個の冗長データ部分を有するものであるシステム。
【請求項８】
請求項６記載のシステムにおいて、前記格納する手段は、前記データセットのうちの第１のデータセット内の前記有用なデータのサブセットの一部を格納するために使用される前記ｎ個の物理的デバイスのうちの特定の１つのデバイス内の前記対応する領域の第１の領域に従って格納を行うものであり、さらに、
前記データセットのうちの第２のデータセット内の前記冗長データのサブセットの一部または全部を格納するために使用される前記特定の物理的デバイス内の前記対応する領域の第２の領域に従って格納を行うものであるシステム。
【請求項９】
請求項６記載のシステムにおいて、前記ｎ−ｋ個の有用なデータ部分を格納する前記対応する領域の第１の領域のストレージ量は、前記ｋ個の冗長データ部分を格納する前記対応する領域の第２の領域のストレージ量とは異なるものであるシステム。
【請求項１０】
請求項６記載のシステムにおいて、有用なデータ部分を格納する第１のセットの前記対応する領域の第１の領域のストレージ量は、冗長データ部分を格納する第２のセットの前記対応する領域の第２の領域のストレージ量とは異なっており、前記第１の対応する領域および前記第２の対応する領域は前記ｎ個の物理的デバイスのうち同一のデバイス内にあるものであるシステム。
【請求項１１】
システムであって、
メモリのｎ個の非重複領域のそれぞれにｎ個の情報部分を格納する手段を有する第１の上位レベルの冗長モードで動作する手段と、
前記メモリのｎ−１個の非重複領域のそれぞれにｎ−１個の情報部分を格納する手段を有する第２の上位レベルの冗長モードで動作する手段と、
前記ｎ個の非重複領域のうち障害が発生した非重複領域における障害を検出する手段と、
前記障害に応答して、前記第１の上位レベルの冗長モードで動作する手段による動作から前記第２の上位レベルの冗長モードで動作する手段による動作に動的に切り替える手段であって、前記ｎ個の非重複領域のうちの前記ｎ−１個の非重複領域は、前記ｎ個の非重複領域のうち前記障害が発生した非重複領域を除く前記ｎ個の非重複領域である、前記切り替える手段と
を有し、
前記ｎ個の情報部分の各々は、ｎ−ｋ個のデータ情報部分と、前記ｎ−ｋ個のデータ情報部分のそれぞれを保護するために計算されたｋ個の冗長な情報部分とを有し、
前記ｎ−１個の情報部分の各々は、ｎ−１−ｊ個のデータ情報部分と、前記ｎ−１−ｊ個のデータ情報部分のそれぞれを保護するために計算されたｊ個の冗長な情報部分とを有し、
ここでｊ<＝ｋであり、
前記ｎ個の非重複領域の各々は前記メモリのｎ個の物理的デバイスのうちの１つ内にあるものである、
システム。
【請求項１２】
請求項１１記載のシステムにおいて、ｊ＝＝ｋであるとき、前記データ情報部分の総量は減少し、所定の保護の度合いは少なくとも維持されるシステム。
【請求項１３】
請求項１２記載のシステムにおいて、前記保護の度合いは前記ｎ個の非重複領域それぞれにおけるｊ個までの障害に対する保護であるシステム。
【請求項１４】
請求項１１記載のシステムにおいて、ｊ＝＝ｋ−１およびｊ>＝１であるとき、前記データ情報部分の総量は維持され、前記保護の度合いは減少し、前記データ情報部分は保護されるものであるシステム。
【請求項１５】
請求項１４記載のシステムにおいて、前記保護の減少の度合いは前記ｎ個の非重複領域それぞれにおけるｊ−１個までの障害に対する保護であるシステム。
【請求項１６】
システムであって、
１つ若しくはそれ以上のフラッシュメモリを備え、
コンピューティングホストからの読み取りおよび／または書き込み要求に応答して、現在の上位レベルの冗長モードに従って前記１若しくはそれ以上のフラッシュメモリを管理する手段と、
前記１つ若しくはそれ以上のフラッシュメモリのｎ個の非重複領域のそれぞれにｎ個の情報部分を格納する手段を有する第１の上位レベルの冗長モードで動作する手段と、
前記１つ若しくはそれ以上のフラッシュメモリのｎ−１個の非重複領域のそれぞれにｎ−１個の情報部分を格納する手段を有する第２の上位レベルの冗長モードで動作する手段と、
前記ｎ個の非重複領域のうち障害が発生した非重複領域における障害を検出する手段と、
前記障害に応答して、前記第１の上位レベルの冗長モードで動作する手段による動作から前記第２の上位レベルの冗長モードで動作する手段による動作に動的に切り替える手段であって、前記ｎ個の非重複領域のうちの前記ｎ−１個の非重複領域は、前記ｎ個の非重複領域のうち前記障害が発生した非重複領域を除く前記ｎ個の非重複領域である、前記切り替える手段と
を有し、
前記ｎ個の情報部分の各々は、ｎ−ｋ個のデータ情報部分と、前記ｎ−ｋ個のデータ情報部分のそれぞれを保護するために計算されたｋ個の冗長な情報部分とを有し、
前記ｎ−１個の情報部分の各々は、ｎ−１−ｊ個のデータ情報部分と、前記ｎ−１−ｊ個のデータ情報部分のそれぞれを保護するために計算されたｊ個の冗長な情報部分とを有し、
ここでｊ<＝ｋであり、
前記ｎ個の非重複領域の各々は前記１つ若しくはそれ以上のフラッシュメモリのｎ個の物理的デバイスのうちの１つ内にあり、前記フラッシュメモリの少なくとも１つは複数の物理的デバイスを備えるものである、
システム。
【請求項１７】
請求項１６記載のシステムにおいて、前記動的に切り替える手段は空き領域を減少する手段を有するものであるシステム。
【請求項１８】
請求項１６記載のシステムにおいて、前記動的に切り替える手段は前記第２の上位レベルの冗長モードに従ってデータストレージを再編成する手段を有するものであるシステム。
【請求項１９】
請求項１６記載のシステムにおいて、前記動的に切り替える手段は前記第２の上位レベルの冗長モードに従って訂正された上位レベルの冗長情報を決定し、且つ格納する手段を有するものであるシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願の優先権利益主張は添付の出願データシート、請求、または送付（必要に応じて、もしあれば）により行われる。本出願の種類により認められる範囲で、本出願では以下の出願は、すべての一般的な発明がなされた時点で本出願で所有するすべての目的のために参照により組み込まれる。
【０００２】
２０１０年１２月１日に出願され、最初に記名された発明者がジェレミー・アイザック・ナサニエル・ヴェルナーである、独立したシリコン素子の動的な上位レベルの冗長モード管理と題する、米国仮出願（整理番号ＳＦ−１０−１０およびシリアル番号６１／４１８ ８４６）；
２０１１年１月１８日に出願され、最初に記名された発明者がジェレミー・アイザック・ナサニエル・ヴェルナーである、上位レベルの冗長情報の計算と題する、米国仮出願（整理番号ＳＦ−１０−１４およびシリアル番号６１／４３３ ９１８）；
２０１１年３月１１日に出願され、最初に記名された発明者がハオ・チョウである、フラッシュメモリ用ＬＤＰＣ消去デコードと題する、ＰＣＴ出願（整理番号ＳＦ−１０−０１ＰＣＴＢおよびシリアル番号ＰＣＴ／ＵＳ１１／２８２４４）；
２０１１年１０月２６日に出願され、最初に記名された発明者がヤン・リである、フラッシュ・メモリ・ベースのデータストレージのための適応ＥＣＣ技術と題する、ＰＣＴ出願（整理番号ＳＦ−１０−０３ＰＣＴおよびシリアル番号ＰＣＴ／ＵＳ１１／５７９１４）。
【背景技術】
【０００３】
分野：フラッシュ・メモリ・ストレージ技術の進歩は、性能の向上、効率性、および使用の実用性を提供するために必要とされる。
【０００４】
従来技術：明示的に公表されていたり、よく知られていると識別されない限りは、コンテキスト、定義、または比較の目的を含めて、本明細書で参照される技術や概念はそのような技術や概念が既に公知であるかまたはそうではなく先行技術の一部であることを認めるものと解釈されるべきではない。特許、特許出願および刊行物を含む、本明細書にて引用されるすべての参考文献は（もしあれば）、特別に組み込まれるかどうかにかかわらず、本明細書にてすべての目的のために、その全体が参照により組み込まれる。
【発明の概要】
【課題を解決するための手段】
【０００５】
本発明は、例えば、プロセス、製造物品、装置、システム、物質の組成、およびコンピュータ可読記憶媒体などのコンピュータ可読媒体（例えば、ディスクなどの光学および／または磁気大容量記憶装置、フラッシュストレージなどの不揮発性ストレージを有する集積回路）、またはプログラム命令が光学的または電子的通信リンクを介して送信されるコンピュータネットワークなどの様々な方法で実装することができる。詳細な説明は、上記の特定分野でのコスト、収益性、性能、効率、および使用の実用性の改善を可能にする本発明の１若しくはそれ以上の実施形態の説明を提供する。詳細な説明は、詳細な説明の残りの部分の理解を容易にするためにはじめにを含む。はじめには、本明細書に記載の概念によるシステム、方法、製造物品、およびコンピュータ可読媒体の１若しくはそれ以上の例示的実施形態を含む。結論でさらに詳細に議論されるように、本発明は提示の特許請求の範囲内でのすべての可能な改変および変形を包含する。
【図面の簡単な説明】
【０００６】
【図１Ａ】図１Ａは、不揮発性メモリ（ＮＶＭｓ）にアクセスし、制御するための独立したシリコン素子の動的な上位レベルの冗長モード管理を使用するＳＳＤコントローラを含むソリッドステートディスク（ＳＳＤ）の実施形態の選択された詳細を示す。
【図１Ｂ】図１Ｂは、図１ＡのＳＳＤの１若しくはそれ以上のインスタンスを含むシステムの様々な実施形態の選択された詳細を示す。
【図２】図２は、論理ブロックアドレス（ＬＢＡ）の論理ページ番号（ＬＰＮ）部分のマッピングの実施形態の選択された詳細を示す。
【図３】図３は、読み取りユニットの素量で測定された長さを一括して有する、種々の読み取りユニットとして編成された読み取りデータを生成する読み取りユニットアドレスで不揮発性メモリ（ＮＶＭ）にアクセスする実施形態の選択された詳細を示す。
【図４Ａ】図４Ａは、読み取りユニットの実施形態の選択された詳細を示す。
【図４Ｂ】図４Ｂは、読み取りユニットの別の実施形態の選択された詳細を示す。
【図５】図５は、フィールド数を有するヘッダの実施形態の選択された詳細を示す。
【図６】図６は、複数のＮＶＭデバイスのブロック、ページ、読み取りユニットの実施形態の選択された詳細を示す。
【図７Ａ】図７Ａは、上位レベルの冗長性技術の様々な実施形態の選択された詳細を示す。
【図７Ｂ】図７Ｂは、Ｒ−ブロックの実施形態の選択された詳細を示す。
【図８】図８は、シリコン独立素子の冗長アレイ（ＲＡＳＩＥ）を有する動的な上位レベルの冗長モード管理の実施形態の選択された詳細を示す。
【図９】図９は、１若しくはそれ以上の読み取りユニットに格納された上位レベルの冗長情報により保護される、適応符号化率の下位レベルの冗長情報を有する読み取りユニットの実施形態を示す。
【図１０】図１０は、上位レベルの冗長情報結果およびデータソースの対応の実施形態の選択された詳細を示す。
【図１１】図１１は、上位レベルの冗長情報の計算の実施形態の選択された詳細を示す。
【図１２】図１２は、（単一動作時の）１つの（下位レベル）障害からの復旧の実施形態の選択された詳細を示す。
【図１３Ａ】図１３Ａは、（単一動作時の）２つの（下位レベル）障害からの復旧の実施形態の選択された詳細を示す。
【図１３Ｂ】図１３Ｂは、（単一動作時の）２つの（下位レベル）障害からの復旧の実施形態の選択された詳細を示す。
【図１３Ｃ】図１３Ｃは、（単一動作時の）２つの（下位レベル）障害からの復旧の実施形態の選択された詳細を示す。
【図１３Ｄ】図１３Ｄは、（単一動作時の）２つの（下位レベル）障害からの復旧の実施形態の選択された詳細を示す。
【図１４Ａ】図１４Ａは、ＮＶＭｓから受信したページに関して上位レベルの冗長情報を計算する実施形態の選択された詳細を示す。
【図１４Ｂ】図１４Ｂは、ＮＶＭｓから受信したページに関して上位レベルの冗長情報を計算する実施形態の選択された詳細を示す。
【図１５Ａ】図１５Ａは、ＮＶＭｓに提供される書き込みに関して上位レベルの冗長情報の計算のバックアウトの実施形態の選択された詳細を示す。
【図１５Ｂ】図１５Ｂは、ＮＶＭｓに提供される書き込みに関して上位レベルの冗長情報の計算のバックアウトの実施形態の選択された詳細を示す
【図１５Ｃ】図１５Ｃは、ＮＶＭｓに提供される書き込みに関して上位レベルの冗長情報の計算のバックアウトの実施形態の選択された詳細を示す。
【発明を実施するための形態】
【０００７】
図面の参照シンボルのリスト
【表１】
0005980798.tif 000002
0005980798.tif 000003
0005980798.tif 000004
0005980798.tif 000005
0005980798.tif 000006
【０００８】
本発明の１若しくはそれ以上の実施形態の詳細な説明は、本発明の選択された詳細を示す添付の図面と共に以下に提供される。本発明は実施形態に関連して説明される。本明細書での実施形態は単なる例示であると理解され、本発明は明示的に本明細書の実施形態にまたは一部または全部により限定されるものではなく、本発明は多数の代替、修正、および等価物を包含する。説明の単調さを避けるため、様々な単語ラベル（最初の、最後の、特定の、様々な、さらに、他の、特に、選択された、いくつかの、および著しいなどを含むがこれらに限定されない）は実施形態の個別のセットに適用してもよく、本明細書で使用されるそのようなラベルは品質、または好みや偏見の任意の形態を伝えることを明示的に意味するものではないが、単に利便的に個別のセットを区別する。開示されたプロセスのいくつかの動作の順序は本発明の範囲内で変更可能である。複数の実施形態がプロセス、方法、および／またはプログラム命令の機能の変形を説明するのに役立つ場合はいつでも、他の実施形態が、多数の実施形態の複数にそれぞれ対応する複数の動作モードのうちの１つの所定のまたは静的および／または動的選択を動的に実行する決定基準に応じて熟考される。多数の特定の詳細が本発明の完全な理解を提供するために、以下の説明に記載されている。詳細は実施例の目的のために提供され、本発明は詳細の一部またはすべてなしで請求の範囲により実施することができる。明確化の目的のために、本発明に関連する技術分野で知られている技術的な材料は発明を不必要に不明瞭にしないように詳細に説明されてはいない。
【０００９】
はじめに
はじめには詳細な説明のより迅速な理解を容易にするためにのみ含まれ、本発明ははじめにで提示される概念に限定されず（もしあれば、明示的な例を含み）、はじめにの段落は主題全体の要約的な見解であり、網羅的または限定的な説明であることを意図していない。例えば、以下に続くはじめには特定の実施形態への領域と編成により限定される概略情報を提供する。明細書のバランス全体を通して最終的に引き出され議論される特許請求の範囲を含む、多くの他の実施形態がある。
【００１０】
略語
ここで定義された様々な省略略語（例えば、頭字語）の少なくともいくつかは本明細書にて使用される特定の要素を参照している。
【００１１】
【表２】
0005980798.tif 000007
0005980798.tif 000008
【００１２】
ＮＡＮＤ型フラッシュメモリは情報を格納するためにフローティング・ゲート・トランジスタのアレイを使用する。ＳＬＣ技術では、各ビットセル（例えば、フローティング・ゲート・トランジスタ）は１ビットの情報を格納することが可能である。ＭＬＣ技術では、各ビットセルは複数ビットの情報を格納することが可能である。製造技術（例えばＣＭＯＳ技術）が縮小しているので、各フローティングゲートはより少ない電子を格納する。さらに、記憶容量および密度が増加すると、各ビットセルはより多くのビットを格納する。このため、ビットセルに格納された値がより小さい電圧範囲によって表される。時間の経過とともに格納された電子の量の検知の不確実性および／または変化はデータが間違って格納されるまたは読み取られる確率を高める。１若しくはそれ以上の冗長性および／またはＥＣＣ技術（例えば、下位レベルで）の使用は、いくつかの使用シナリオで上記の困難のいくつかを克服し、ＮＡＮＤ型フラッシュメモリから復旧データもしくは破損データを訂正することを可能にする。
【００１３】
いくつかの種類のＳＳＤは不揮発性ストレージ（例えば、フラッシュメモリは電源の供給なしで情報を保持する）を提供するためにフラッシュメモリを使用している。１若しくはそれ以上のＥＣＣおよび／または冗長性技術（例えば、上位レベルで）の使用は、フラッシュメモリから復旧データもしくは破損データを訂正することを可能にし、および／または１若しくはそれ以上のフラッシュメモリ素子が断続的または恒久的に障害を発生する場合であってもＳＳＤの適切なシステムレベルの動作を可能にする。
【００１４】
例えば、ＳＳＤコントローラは、コントローラにより部分的に実装されたＳＳＤの動作中に障害を発生する１若しくはそれ以上のＮＶＭ（例えば、フラッシュ）素子として許容可能なサービス低下を提供するために独立したシリコン素子の動的な上位レベルの冗長モードの管理を可能にする。ＮＶＭの一部が読み取られる。下位レベルの冗長性および／または誤り訂正（１若しくはそれ以上のＥＣＣ技術によってなどの）を使用して訂正できない誤りが発生した場合、次に上位レベルの誤り訂正（１若しくはそれ以上のＲＡＳＩＥ技術および／または動的な上位レベルの冗長モード管理技術によってなどの）が誤りを訂正しようとするために使用される。ＮＶＭ素子の１つに障害が下位レベルおよび／または上位レベルの誤り訂正により、および／または他の技術（１若しくはそれ以上のＮＶＭ素子の障害ステータスレポートなど）により検出された場合、次に上位レベルの誤り訂正は現在のモードでの動作から新しいモードでの動作に動的に切り替える。切り替えは、ＳＳＤの空き領域を減少すること、ＳＳＤのデータストレージを編成すること、障害が発生したユーザデータを復旧／格納すること（可能な場合）、および訂正された上位レベルの誤り訂正情報を決定／格納することの１つ以上を含む。そして動作は新しいモードで続行される。もう１つの他のＮＶＭ素子のもう１つの他の障害が新しいモードで現在動作する上位レベルの誤り訂正で検出された場合、次に他の切り替えが他の上位レベルの誤り訂正モードに行われる。ＮＶＭへの書き込みは、上位レベルの誤り訂正動作モードおよび書き込みデータに従って上位レベルの誤り訂正情報を決定／格納することを含む、上位レベルの誤り訂正動作モードに従っている。
【００１５】
上位レベルの誤り訂正情報を決定／格納することは、いくつかの実施形態および／または使用シナリオでは、上位レベルの冗長情報の計算に従っている。上位レベルの冗長情報の計算は、ＳＳＤコントローラをコントローラにより部分的に実装されたＳＳＤの動作中に不揮発性（例えば、フラッシュ）メモリ素子の障害のコンテキストで信頼性の高い動作を維持するために上位レベルの冗長性機能を提供することを可能にする。上位レベルの冗長情報の最初の部分は、上位レベルの冗長情報により保護されるデータの部分における全ページのＸＯＲ（例えば、ストライプ）を介してパリティ符号化を用いて計算される。上位レベルの冗長情報の第２の部分は、加重和を計算する際に部分の各ページが加重としてユニークな非ゼロの「インデックス」を割り当てられている、加重和技術を使用して計算される。算術計算は有限体（例えば、ガロア体として、またはｐが素数である整数の剰余ｐなど）を介して実行される。
【００１６】
上位レベルの冗長情報の一部は、ＮＶＭ素子上で実行される１若しくはそれ以上の読み取り動作の完了の順序により決定される順序など、または様々な実施形態で、低減または除去されたバッファリングを可能にする、ＮＶＭ素子から返送されるおよび／または利用可能なデータの順序に基づいた順序などの、任意の順序で計算可能である。任意の順序での計算可能性は、様々な実施形態で、比較的少ない一時的および／または中間のバッファリングおよび／または状態を使用して復旧データ値を計算することおよび／または書き込みをバックアウトすることを可能にする。上位レベルの冗長情報の一部は、様々な実施形態で、低減された遅延処理および／または減少したメモリ（例えば、ＮＶＭ）帯域幅の使用を可能にする、利用可能な専用のハードウェア要素により決定されるような、並列処理の任意の程度で計算可能である。
【００１７】
いくつかの実施形態では、ＳＳＤなどのＩ／Ｏ装置はＳＳＤコントローラを含む。ＳＳＤコントローラはＳＳＤのホストインターフェースとＮＶＭの間のブリッジとして機能し、ＳＳＤのホストインターフェースを介してコンピューティングホストから送信されるホストプロトコルのコマンドを実行する。少なくともいくつかのコマンドは、ＳＳＤにコンピューティングホストからおよびコンピューティングホストへ送信されるデータをＮＶＭにそれぞれ書き込むおよび読み取るために指示を出す。さらなる実施形態では、ＳＳＤコントローラはＮＶＭ内のホストプロトコルのＬＢＡｓおよび物理記憶アドレス間の変換をするマップを使用することが可能になる。さらなる実施形態では、マップの少なくとも一部はＩ／Ｏデバイスの専用ストレージ（コンピューティングホストに見えない）のために使用される。例えば、コンピューティングホストによりアクセスできないＬＢＡｓの一部はログ、統計情報、またはその他の専用データへのアクセスを管理するＩ／Ｏデバイスにより使用される。
【００１８】
いくつかの実施形態では、ＮＶＭ内の様々なサイズの素量の圧縮データにアクセスすることはいくつかの使用シナリオにおける改善された記憶効率を提供する。例えば、ＳＳＤコントローラはコンピューティングホスト（例えば、ディスク書き込みコマンドに関連する）から（非圧縮）データを受信し、データを圧縮し、フラッシュメモリに圧縮データを格納する。コンピューティングホスト（例えば、ディスク読み取りコマンドに関連する）からの後続の要求に応じて、ＳＳＤコントローラはフラッシュメモリから圧縮データを読み取り、圧縮データを解凍し、コンピューティングホストに非圧縮データを提供する。圧縮データは様々なサイズの素量に従ってフラッシュメモリに格納され、素量サイズは例えば、圧縮アルゴリズム、動作モード、および各種データに対する圧縮効果によって変化する。ＳＳＤコントローラはヘッダのフラッシュメモリに格納されている場所を決定するために含まれているマップテーブルを調べることにより部分的にデータを解凍する。ＳＳＤコントローラは適切な（圧縮）データがフラッシュメモリのどの場所に格納されているかを決定するためにフラッシュメモリから取得したヘッダを解析する。ＳＳＤコントローラはコンピューティングホストに提供する非圧縮データを生成するためにフラッシュメモリから適切なデータを解凍する。本出願では、解凍する（およびその変形）は展開する（およびその変形）と同義である。
【００１９】
様々な実施形態では、ＳＳＤコントローラは、コンピューティングホストとのインターフェースをするためのホストインターフェース、フラッシュメモリなどのＮＶＭとのとインターフェースをするためのインターフェース、およびインターフェースを制御し、ならびに下位レベルの誤り訂正、上位レベルの誤り訂正、および独立したシリコン素子の動的な上位レベルの冗長モード管理などと同様に、圧縮解凍を実行する（および／または実行の様々な側面を制御する）ための回路を含む。
【００２０】
様々な実施形態によれば、いくつかのホストインターフェースは、ＵＳＢインターフェース標準、ＣＦインターフェース標準、ＭＭＣインターフェース標準、ｅＭＭＣインターフェース標準、サンダーボルトインターフェース標準、ＵＦＳインターフェース標準、ＳＤインターフェース標準、メモリ・スティック・インターフェース標準、ｘＤ−ピクチャー・カード・インターフェース標準、ＩＤＥインターフェース標準、ＳＡＴＡインターフェース標準、ＳＣＳＩインターフェース標準、ＳＡＳインターフェース標準、およびＰＣｌｅインターフェース標準の１つ以上と互換性がある。様々な実施形態によれば、コンピューティングホストは、コンピュータ、ワークステーションコンピュータ、サーバコンピュータ、ストレージサーバ、ＳＡＮ、ＮＡＳ装置、ＤＡＳ装置、ストレージ機器、ＰＣ、ラップトップコンピュータ、ノート型パソコン、ネットブックコンピュータ、タブレット装置またはコンピュータ、ウルトラブックコンピュータ、電子読み取り装置（電子リーダなど）、ＰＤＡ、ナビゲーションシステム、（ハンドヘルド）ＧＰＳ装置、自動車制御システム、自動車メディア制御システムまたはコンピュータ、プリンタ、複写機またはファクシミリまたはオールインワン装置、ＰＯＳ装置、キャッシュレジスタ、メディアプレーヤ、テレビ、メディアレコーダ、ＤＶＲ、デジタルカメラ、携帯電話機、コードレス電話の受話器、および電子ゲーム等のすべてまたは任意の部分である。いくつかの実施形態では、インターフェースホスト（ＳＡＳ／ＳＡＴＡブリッジなど）はコンピューティングホストおよび／またはコンピューティングホストへのブリッジとして動作する。
【００２１】
様々な実施形態では、ＳＳＤコントローラは１若しくはそれ以上のプロセッサを含む。プロセッサはＳＳＤコントローラの動作を制御および／または行うためにファームウェアを実行する。ＳＳＤコントローラはデータと同様にコマンドおよび／またはステータスを送受信するためにコンピューティングホストと通信する。コンピューティングホストはオペレーティングシステム、ドライバ、およびアプリケーションのうちの１つ以上を実行する。ＳＳＤコントローラを搭載したコンピューティングホストによる通信は、ドライバを介しておよび／またはアプリケーションを介して必要に応じておよび／または選択的である。最初の実施例では、ＳＳＤコントローラへのすべての通信はドライバを介してであり、アプリケーションはドライバがＳＳＤコントローラの特定のコマンドに変換する上位レベルのコマンドをドライバに提供する。第２の実施例では、ドライバがバイパスモードを実装し、アプリケーションがドライバを介しＳＳＤコントローラに特定のコマンドを送信することが可能となる。３番目の実施例では、ＰＣＩｅのＳＳＤコントローラは、一旦設定されるとドライバをバイパスして、アプリケーションがＳＳＤコントローラと直接通信することを可能にする１若しくはそれ以上の仮想関数（ＶＦｓ）をサポートする。
【００２２】
様々な実施形態によれば、いくつかのＳＳＤは、フォームファクタ、電気的インターフェース、および／または、ＨＤＤ、ＣＤドライブ、ＤＶＤドライブなどの磁気的および／または光学的な不揮発性ストレージにより使用されるプロトコルと互換性がある。様々な実施形態では、ＳＳＤは、ゼロ個以上のパリティ符号、ゼロ個以上のＲＳ符号、ゼロ個以上のＢＣＨ符号、ゼロ個以上のビタビまたは他のトレリス符号、ゼロ個以上のＬＤＰＣ符号の様々な組み合せを使用する。
【００２３】
例示的な実施形態
詳細な説明へのはじめにを結論付けるには、少なくともいくつかの明示的に列挙された「ＥＣｓ」（Ｅｘａｍｐｌｅ Ｃｏｍｂｉｎａｔｉｏｎｓ：例示の組み合せ）を含み、本明細書で説明された概念による様々な実施形態の種類の付加的な説明を提供し、これらの実施例は相互に排他的、網羅的、または限定されることを意図せず、本発明はこれら例示的な実施形態に限定されるものではなく、むしろ提示された特許請求の範囲内でのすべての可能な改変および変形を包含する、以下のものは例示的な実施形態の集合である。
【００２４】
ＥＣ１）システムであって、
ｋ個の冗長データ部分を計算してｎ−ｋ個の有用なデータ部分を保護する手段と、
各前記ｋ個の冗長データ部分および各前記ｎ−ｋ個の有用なデータ部分をそれぞれ別々の対応する領域に格納する手段であって、各前記対応する領域はｎ個の物理的デバイスのうちの１つのそれぞれの対応する領域内にある、前記格納する手段と、
前記対応する領域の１つがもはや使用可能ではなくなる障害が発生した後に、ｊ個の冗長データ部分を計算してｎ−１−ｊ個の有用なデータ部分を保護する手段と、
を有し、
ここでｊ<＝ｋである
システム。
【００２５】
ＥＣ２）ＥＣ１のシステムにおいて、前記ｋ個の冗長データ部分を計算してｎ−ｋ個の有用なデータ部分を保護する手段は第１のデータ保護モードで動作可能であり、前記ｊ個の冗長データ部分を計算してｎ−１−ｊ個の有用なデータ部分を保護する手段は第２のデータ保護モードで動作可能であり、さらに、
前記障害に応答して、前記第１のデータ保護モードでの動作から前記第２のデータ保護モードでの動作に切り換える手段を有するシステム。
【００２６】
ＥＣ３）ＥＣ１のシステムにおいて、ｊ＝＝ｋであるとき、前記有用なデータ部分の総量は減少し、所定の保護の度合いは少なくとも維持されるものであるシステム。
【００２７】
ＥＣ４）ＥＣ３のシステムにおいて、前記保護の度合いは前記対応する領域のｊ個までの障害に対する保護であるシステム。
【００２８】
ＥＣ５）ＥＣ１のシステムにおいて、ｊ＝＝ｋ−１およびｊ>＝１であるとき、前記有用なデータ部分の総量は維持され、前記保護の度合いは減少し、前記有用なデータ部分は保護されるものであるシステム。
【００２９】
ＥＣ６）ＥＣ５のシステムにおいて、保護の減少の度合いは対応する領域のｊ−１個までの障害に対する保護であるシステム。
【００３０】
ＥＣ７）ＥＣ１のシステムにおいて、
前記ｎ個の物理的デバイスの各々は複数の前記対応する領域を有し、さらに、
前記対応する領域の複数のセットの各々に、有用なデータのサブセットと当該有用なデータのサブセットを保護する冗長データのサブセットとを有するデータの各セットを格納する手段を有し、前記冗長データのサブセットは前記有用なデータのサブセットとは別個の前記ｎ個の物理的デバイスの個別のうちの任意のデバイスに格納されるものであり、
前記対応する領域のセットの各々は前記ｎ個の物理的デバイス各々における対応する１つの領域のみを有し、前記格納する手段は、前記ｎ個の物理的デバイスのｎ個またはｎ個より少ない物理的デバイスの異なるセットに選択的に格納される前記対応するデータセットの各々に従って格納を行うものである
システム。
【００３１】
ＥＣ８）ＥＣ７のシステムにおいて、障害が発生する前に、前記データセットのうち特定の１つのデータセット内の有用なデータのサブセットは前記ｎ−ｋ個の有用なデータ部分を有し、当該特定のデータセット内の冗長データのサブセットは前記ｋ個の冗長データ部分を有するシステム。
【００３２】
ＥＣ９）ＥＣ７のシステムにおいて、前記格納する手段は、前記データセットのうちの第１のデータセット内の前記有用なデータのサブセットの一部を格納するために使用される前記ｎ個の物理的デバイスのうちの特定の１つのデバイスに対応する領域の第１の領域に従って格納を行うものであり、さらに、
前記データセットのうちの第２のデータセット内の前記冗長データのサブセットの一部または全部を格納するためにさらに使用される前記特定の物理的デバイス内の前記対応する領域の第２の領域に従って格納を行うものであるシステム。
【００３３】
ＥＣ１０）ＥＣ７のシステムにおいて、前記対応する領域の第１のストレージ量は前記対応する領域の第２のストレージ量とは異なるものであるシステム。
【００３４】
ＥＣ１１）ＥＣ１０のシステムにおいて、前記第１の対応する領域および前記第２の対応する領域は前記ｎ個の物理的デバイスのうち同一のデバイス内にあるものであるシステム。
【００３５】
ＥＣ１２）システムであって、
メモリのｎ個の非重複領域のそれぞれにｎ個の情報部分を格納する手段を有する第１の上位レベルの冗長モードで動作する手段と、
前記メモリのｎ−１個の非重複領域のそれぞれにｎ−１個の情報部分を格納する手段を有する第２の上位レベルの冗長モードで動作する手段と、
前記ｎ個の非重複領域のうち障害が発生した非重複領域における障害を検出する手段と、
前記障害に応答して、前記第１の上位レベルの冗長モードで動作する手段による動作から前記第２の上位レベルの冗長モードで動作する手段による動作に動的に切り替える手段であって、前記ｎ個の非重複領域のうちの前記ｎ−１個の非重複領域は、前記ｎ個の非重複領域のうち前記障害が生じた非重複領域を除く前記ｎ個の非重複領域である、前記切り替える手段と
を有し、
前記ｎ個の情報部分の各々はｎ−ｋ個のデータ情報部分と、前記ｎ−ｋ個のデータ情報部分のそれぞれを保護するために計算されたｋ個の冗長な情報部分とを有し、
前記ｎ−１個の情報部分の各々はｎ−１−ｊ個のデータ情報部分と、前記ｎ−１−ｊ個のデータ情報部分のそれぞれを保護するために計算されたｊ個の冗長な情報部分とを有し、
ここでｊ<＝ｋであり、
前記ｎ個の非重複領域の各々は前記メモリのｎ個の物理的デバイスのうちの１つ内にあるものである、
システム。
【００３６】
ＥＣ１３）ＥＣ１２のシステムにおいて、ｊ＝＝ｋであるとき、前記データ情報部分の総量は減少し、所定の保護の度合いは少なくとも維持されるものであるシステム。
【００３７】
ＥＣ１４）ＥＣ１３のシステムにおいて、前記保護の度合いは前記ｎ個の非重複領域それぞれにおけるｊ個までの障害に対する保護であるシステム。
【００３８】
ＥＣ１５）ＥＣ１２のシステムにおいて、ｊ＝＝ｋ−１およびｊ>＝１であるとき、前記データ情報部分の総量は維持され、前記保護の度合いは減少し、データ情報部分は保護されるシステム。
【００３９】
ＥＣ１６）ＥＣ１５のシステムにおいて、前記保護の減少の度合いは前記ｎ個の非重複領域のそれぞれにおけるｊ−１個までの障害に対する保護であるシステム。
【００４０】
ＥＣ１７）ＥＣ１またはＥＣ１２のシステムにおいて、前記格納する手段の少なくとも１つは、コンピューティングホストからの書き込み要求に対応するシステム。
【００４１】
ＥＣ１８）ＥＣ１またはＥＣ１２のシステムにおいて、前記格納する手段の少なくとも１つは、フラッシュ・メモリ・インターフェースを動作させる手段を有するシステム。
【００４２】
ＥＣ１９）ＥＣ１またはＥＣ１２のシステムにおいて、前記ｎ個の物理的デバイスのうちの少なくとも１つは、１若しくはそれ以上のフラッシュメモリを有するシステム。
【００４３】
ＥＣ２０）システムであって、
コンピューティングホストからの読み取りおよび／または書き込み要求に応答して現在の上位レベルの冗長モードに従って１若しくはそれ以上のフラッシュメモリを管理する手段と、
１若しくはそれ以上のフラッシュメモリの１若しくはそれ以上の部分の障害の検出に応答して現在の上位レベルの冗長モードを動的に切り替える手段と、
を有するシステム。
【００４４】
ＥＣ２１）ＥＣ２０のシステムにおいて、前記動的に切り替える手段は空き領域を低減する手段を有するものであるシステム。
【００４５】
ＥＣ２２）ＥＣ２０のシステムにおいて、前記動的に切り替える手段は、目標の上位レベルの冗長モードに従ってデータストレージを再編成する手段を有するものであるシステム。
【００４６】
ＥＣ２３）ＥＣ２０のシステムにおいて、前記動的に切り替える手段は、目標の上位レベルの冗長モードに従って訂正された上位レベルの冗長情報を決定し、且つ格納する手段を有するものであるシステム。
【００４７】
ＥＣ２４）ＥＣ２０のシステムにおいて、現在の上位レベルの冗長モードは第１の上位レベルの冗長モードであり、現在の上位レベルの冗長モードを動的に切り替える手段は第１の障害に応答して現在の上位レベルの冗長モードを第２の上位レベルの冗長モードに切り替える手段、および第２の障害に応答して現在の上位レベルの冗長モードを第３の上位レベルの冗長モードに切り替える手段を有するシステム。
【００４８】
ＥＣ２５）ＥＣ２４のシステムにおいて、第２の障害は第１の障害が発生した後であり、第３の上位レベルの冗長モードでは第２の上位レベルの冗長モードより少ない空き領域が使用可能であるシステム。
【００４９】
ＥＣ２６）ＥＣ１７またはＥＣ２０のシステムにおいて、コンピューティングホストの要求をインターフェースする手段をさらに有するシステム。
【００５０】
ＥＣ２７）ＥＣ２６のシステムにおいて、コンピューティングホストの要求をインターフェースする手段は、ストレージインターフェース標準と互換性があるシステム。
【００５１】
ＥＣ２８）ＥＣ２０のシステムにおいて、フラッシュメモリを管理する手段をインターフェースする手段をさらに有するシステム。
【００５２】
ＥＣ２９）ＥＣ２８のシステムにおいて、フラッシュメモリを管理する手段をインターフェースする手段は、フラッシュ・メモリ・インターフェースを動作させるための手段を有するシステム。
【００５３】
ＥＣ３０）ＥＣ２０のシステムにおいて、
コンピューティングホストの要求をインターフェースする手段と、
フラッシュメモリを管理することをインターフェースする手段と、
をさらに有するシステム。
【００５４】
ＥＣ３１）ＥＣ２７のシステムにおいて、システムは単一の集積回路（ＩＣ）に実装されるシステム。
【００５５】
ＥＣ３２）ＥＣ２７のシステムにおいて、システムはソリッドステートディスク（ＳＳＤ）に実装されるシステム。
【００５６】
ＥＣ３３）ＥＣ１７またはＥＣ２０のシステムにおいて、少なくともいくつかの読み取りおよび／または書き込み要求を生成するためにコンピューティングホストを動作させるための手段をさらに有するシステム。
【００５７】
ＥＣ３４）ＥＣ１９またはＥＣ２０のシステムにおいて、少なくとも１つのフラッシュメモリを動作させるための手段をさらに有するシステム。
【００５８】
ＥＣ３５）方法であって、
ｋ個の冗長データ部分を計算してｎ−ｋ個の有用なデータ部分を保護する工程と、
各前記ｋ個の冗長データ部分および各前記ｎ−ｋ個の有用なデータ部分をそれぞれに対応する領域に格納する工程であって、各前記対応する領域はｎ個の物理的デバイスのうちの１つのそれぞれに対応する領域内にあるものである、前記格納する工程と、
前記対応する領域の１つがもはや使用可能ではなくなる障害が発生した後に、ｊ個の冗長データ部分を計算してｎ−１−ｊ個の有用なデータ部分を保護する工程と、
を有し、
ここでｊ<＝ｋである、
方法。
【００５９】
ＥＣ３６）ＥＣ３５の方法において、前記ｋ個の冗長データ部分を計算して前記ｎ−ｋ個の有用なデータ部分を保護する工程は第１のデータ保護モードであり、ｊ個の冗長データ部分を計算してｎ−１−ｊ個の有用なデータ部分を保護する工程は第２のデータ保護モードであり、さらに、
前記障害に応答して、前記第１のデータ保護モードから第２のデータ保護モードへ切り換える工程を有するものである方法。
【００６０】
ＥＣ３７）ＥＣ３５の方法において、ｊ＝＝ｋであるとき、前記有用なデータ部分の総量は減少し、前記保護の度合いは少なくとも維持されるものである方法。
【００６１】
ＥＣ３８）ＥＣ３７の方法において、保護の度合いは対応する領域のｊ個までの障害に対する保護である方法。
【００６２】
ＥＣ３９）ＥＣ３５の方法において、ｊ＝＝ｋ−１およびｊ>＝１であるとき、前記有用なデータ部分の総量は維持され、前記保護の度合いは減少し、前記有用なデータ部分は保護されるものである方法。
【００６３】
ＥＣ４０）ＥＣ３９の方法において、前記保護の減少の度合いは前記対応する領域のｊ−１個までの障害に対する保護である方法。
【００６４】
ＥＣ４１）ＥＣ３５の方法において、
前記ｎ個の物理的デバイスの各々は複数の前記対応する領域を有し、さらに、
前記対応する領域の複数のセットの各々に、有用なデータのサブセットと当該有用なデータのサブセットを保護する冗長データのサブセットとを有するデータセットそれぞれを格納する工程を有し、前記冗長データのサブセットは前記有用なデータのサブセットとは別個の前記ｎ個の物理的デバイスのうちの任意のデバイスに格納されるものであり、
前記対応する領域のセットの各々は前記ｎ個の物理的デバイス各々における対応する１つの領域のみを有し、前記格納する工程は、前記ｎ個の物理的デバイスのｎ個またはｎ個より少ない物理的デバイスの異なるセットに格納されている前記データの各セットの各々に従って行われるものである
方法。
【００６５】
ＥＣ４２）ＥＣ４１の方法において、前記障害が発生する前に、前記データセットのうち特定の１つのデータセット内の有用なデータのサブセットは前記ｎ−ｋ個の有用なデータ部分を有し、当該特定のデータセット内の冗長データのサブセットは前記ｋ個の冗長データ部分を有する方法。
【００６６】
ＥＣ４３）ＥＣ４１の方法において、前記格納する工程は、前記データセットのうちの第１のデータセット内の前記有用なデータのサブセットの一部を格納するために使用される前記ｎ個の物理的デバイスのうちの特定の１つのデバイス内の前記対応する領域の第１の領域に従って行われるものであり、さらに、
前記データセットのうちの第２のデータセット内の前記冗長データのサブセットの一部または全部を格納するために使用される前記特定の物理的デバイス内の前記対応する領域の第２の領域に従って行われるものである方法。
【００６７】
ＥＣ４４）ＥＣ４１の方法において、対応する領域の最初の１つの記憶量は対応する領域の第２の１つの記憶量とは異なる方法。
【００６８】
ＥＣ４５）ＥＣ４４の方法において、第１の対応する領域と第２の対応する領域はｎ個の物理的デバイスの同じものである方法。
【００６９】
ＥＣ４６）方法であって、
メモリのｎ個の非重複領域のそれぞれにｎ個の情報部分を格納する工程を有する第１の上位レベルの冗長モードで動作する工程と、
前記ｎ個の非重複領域のうち障害が生じた非重複領域障害を検出する工程と、
前記障害に応答して、第１の上位レベルの冗長モードでの動作から、ｎ−１個の情報部分を前記ｎ個の非重複領域のうちのｎ−１個に格納する工程を有する第２の上位レベルの冗長モードでの動作に動的に切り替える工程であって、前記ｎ個の非重複領域のうちの前記ｎ−１個は、前記ｎ個の非重複領域うちの障害が発生した非重複領域を除く前記ｎ個の非重複領域である、前記切り替える工程と
を有し、
前記ｎ個の情報部の各々は、ｎ−ｋ個のデータ情報部分と、前記ｎ−ｋ個のデータ情報部分を保護するために計算されたｋ個の冗長な情報部分とを有し、
前記ｎ−１個の情報部分の各々は、ｎ−１−ｊ個のデータ情報部分と、前記ｎ−１−ｊ個のデータ情報部分を保護するために計算されたｊ個の冗長な情報部分とを有し、
ここでｊ<＝ｋであり、
前記ｎ個の非重複領域の各々は前記メモリのｎ個の物理的デバイスのうちの１つ内にあるものである
方法。
【００７０】
ＥＣ４７）ＥＣ４６の方法において、ｊ＝＝ｋであるとき、データ情報部分の総量は減少し、保護の度合いは少なくとも維持される方法。
【００７１】
ＥＣ４８）ＥＣ４７の方法において、保護の度合いはｎ個それぞれの非重複領域のｊ個までの障害に対する保護である方法。
【００７２】
ＥＣ４９）ＥＣ４６の方法において、ｊ＝＝ｋ−１およびｊ>＝１であるとき、データ情報部分の総量は維持され、保護の度合いは減少し、データ情報部分は保護される方法。
【００７３】
ＥＣ５０）ＥＣ４９の方法において、保護の減少の度合いはｎ個それぞれの非重複領域のｊ−１個までの障害に対する保護である方法。
【００７４】
ＥＣ５１）ＥＣ３５またはＥＣ４６の方法において、格納する工程の行為の少なくとも１つの少なくとも一部分はコンピューティングホストからの書き込み要求に対応する方法。
【００７５】
ＥＣ５２）ＥＣ３５またはＥＣ４６の方法において、格納する工程の行為の少なくとも１つはフラッシュ・メモリ・インターフェースを動作させる工程を有する方法。
【００７６】
ＥＣ５３）ＥＣ３５またはＥＣ４６の方法において、ｎ個の物理的デバイスの少なくとも１つは１若しくはそれ以上のフラッシュメモリを有する方法。
【００７７】
ＥＣ５４）方法であって、
現在の上位レベルの冗長モードに従ってコンピューティングホストからの読み取りおよび／または書き込み要求に応答して１若しくはそれ以上のフラッシュメモリを管理する工程と、
１若しくはそれ以上のフラッシュメモリの１若しくはそれ以上の部分の障害を検出する工程に応答して現在の上位レベルの冗長モードを動的に切り替える工程と、
を有する方法。
【００７８】
ＥＣ５５）ＥＣ５４の方法において、動的に切り替える工程は空き領域を減少する工程を有する方法。
【００７９】
ＥＣ５６）ＥＣ５４の方法において、動的に切り替える工程は目標の上位レベルの冗長モードに従ってデータストレージを再編成する工程を有する方法。
【００８０】
ＥＣ５７）ＥＣ５４の方法において、動的に切り替える工程は目標の上位レベルの冗長モードに従って訂正された上位レベルの冗長情報を決定する工程および格納する工程を有する方法。
【００８１】
ＥＣ５８）ＥＣ５４の方法において、現在の上位レベルの冗長モードは第１の上位レベルの冗長モードであり、現在の上位レベルの冗長モードを動的に切り替える工程は現在の上位レベルの冗長モードを第１の障害に応答して第２の上位レベルの冗長モードに切り替え、現在の上位レベルの冗長モードを第２の障害に応答して第３の上位レベルの冗長モードに切り替える方法。
【００８２】
ＥＣ５９）ＥＣ５８の方法において、第２の障害は第１の障害が発生した後であり、第３の上位レベルの冗長モードでは第２の上位レベルの冗長モードより少ない空き領域が使用可能である方法。
【００８３】
ＥＣ６０）ＥＣ５１またはＥＣ５４の方法において、コンピューティングホストの要求をインターフェースする工程をさらに有する方法。
【００８４】
ＥＣ６１）ＥＣ６０の方法において、コンピューティングホストの要求をインターフェースする工程はストレージインターフェース標準と互換性がある方法。
【００８５】
ＥＣ６２）ＥＣ５４の方法において、フラッシュメモリを管理する工程をインターフェースする工程をさらに有する方法。
【００８６】
ＥＣ６３）ＥＣ６２の方法において、フラッシュメモリを管理する工程をインターフェースする工程はフラッシュ・メモリ・インターフェースを動作させる工程を有する方法。
【００８７】
ＥＣ６４）ＥＣ５４の方法において、
コンピューティングホストの要求をインターフェースする工程と、
フラッシュメモリを管理する工程をインターフェースする工程と、
をさらに有する方法。
【００８８】
ＥＣ６５）ＥＣ６１の方法において、方法は単一の集積回路（ＩＣ）に実装される方法。
【００８９】
ＥＣ６６）ＥＣ６１の方法において、方法はソリッドステートディスク（ＳＳＤ）に実装されされる方法。
【００９０】
ＥＣ６７）ＥＣ５１またはＥＣ５４の方法において、少なくともいくつかの読み取りおよび／または書き込み要求を生成するためにコンピューティングホストを動作させる工程をさらに有する方法。
【００９１】
ＥＣ６８）ＥＣ５３またはＥＣ５４の方法において、少なくとも１つのフラッシュメモリを動作させる工程をさらに有する方法。
【００９２】
ＥＣ６９）システムであって、
コンピューティングホストへのインターフェースが可能なホストインターフェースと、
少なくともｎ個の物理的デバイスへのインターフェースが可能なメモリインターフェースと、
コントローラであって、
ｎ−ｋ個の有用なデータ部分を保護するためにｋ個の冗長データ部分を計算することと、
ホストインターフェースを介してコンピューティングホストから受信した１若しくはそれ以上の書き込みコマンドに応答して、ｋ個の冗長データ部分の各々およびｎ−ｋ個の有用なデータ部分の各々を、ｎ個の物理的デバイスのそれぞれ１つに対応する領域の、それぞれ別々の対応する領域に格納することと、
対応する領域の１つがもはや使用可能ではないような障害が発生した後に、ｎ−１−ｊ個の有用なデータ部分を保護するためにｊ個の冗長データ部分を計算することと、
が可能となったコントローラと、
を有し、
ここでj<＝ｋである、
システム。
【００９３】
ＥＣ７０）ＥＣ６９のシステムにおいて、ｋ個の冗長データ部分の任意の１若しくはそれ以上の全部または一部を計算することが可能なハードウェア論理回路をさらに有するシステム。
【００９４】
ＥＣ７１）ＥＣ６９のシステムにおいて、ｎ−ｋ個の有用なデータ部分を保護するためにｋ個の冗長データ部分を計算することは第１のデータ保護モードでのコントローラの動作に従ったものであり、ｎ−１−ｊ個の有用なデータ部分を保護するためにｊ個の冗長データ部分を計算することは第２のデータ保護モードでのコントローラの動作に従ったものであり、コントローラは、障害に応答して、第１のデータ保護モードでの動作から第２のデータ保護モードでの動作に切り換わることがさらに可能なシステム。
【００９５】
ＥＣ７２）ＥＣ６９のシステムにおいて、ｊ＝＝ｋであるとき、有用なデータ部分の総量は減少し、保護の度合いは少なくとも維持されるシステム。
【００９６】
ＥＣ７３）ＥＣ７２のシステムにおいて、保護の度合いは対応する領域のｊ個までの障害に対する保護であるシステム。
【００９７】
ＥＣ７４）ＥＣ６９のシステムにおいて、ｊ＝＝ｋ−１およびｊ>＝１であるとき、有用なデータ部分の総量は維持され、保護の度合いは低下し、有用なデータ部分が保護されるシステム。
【００９８】
ＥＣ７５）ＥＣ７４のシステムにおいて、保護の減少の度合いは対応する領域のｊ−１個までの障害に対する保護であるシステム。
【００９９】
ＥＣ７６）ＥＣ６９のシステムにおいて、
ｎ個の物理的デバイスの各々は複数の対応する領域を有し、
コントローラは、複数の対応する領域のセットの各々において、有用なデータのサブセットおよび有用なデータのサブセットを保護する冗長データのサブセットを有するデータセットそれぞれを格納することがさらに可能であり、冗長データのサブセットは有用なデータのサブセットからｎ個の物理的デバイスの個別のものに格納され、
対応する領域のセットの各々はｎ個の物理的デバイス各々のわずかに１つの対応する領域を有し、格納することはデータセットそれぞれに従って必要に応じてｎ個の物理的デバイスのｎ個またはより少ない異なるセットに格納されることである、
システム。
【０１００】
ＥＣ７７）ＥＣ７６のシステムにおいて、障害が発生する前に、データセットの特定の１つの有用なデータのサブセットはｎ−ｋ個の有用なデータ部分を有し、データの特定のセットの冗長データのサブセットはｋ個の冗長データ部分を有するシステム。
【０１０１】
ＥＣ７８）ＥＣ７６のシステムにおいて、格納することはｎ個の物理的デバイスの特定の１つの対応する領域の最初の１つに従ってデータセットの最初の１つの有用なデータのサブセットの一部を格納するために使用されることであり、さらに特定の物理的デバイスの対応する領域の第２の１つに従ってデータセットの第２の１つの冗長データのサブセットの一部または全部を格納するために使用されることであるシステム。
【０１０２】
ＥＣ７９）ＥＣ７６のシステムにおいて、対応する領域の第１の記憶量は対応する領域の第２の記憶量とは異なるシステム。
【０１０３】
ＥＣ８０）ＥＣ７９のシステムにおいて、第１の対応する領域と第２の対応する領域はｎ個の物理的デバイスの同じものであるシステム。
【０１０４】
ＥＣ８１）システムであって、
コンピューティングホストへのインターフェースが可能なホストインターフェースと、
少なくともｎ個の物理的デバイスへのインターフェースが可能なメモリインターフェースと、
コントローラであって、
メモリのｎ個それぞれの非重複領域にｎ個の情報部分を格納することに従って第１の上位レベルの冗長モードで動作する工程と、
前記ｎ個の非重複領域のうち障害が発生した非重複領域における障害を検出する工程と、
前記障害に応答して、第１の上位レベルの冗長モードでの動作から、第２の上位レベルの冗長モードでの動作に動的に切り替える工程であって、前記第２の上位レベルの冗長モードはｎ−１個の情報部分を前記ｎ個の非重複領域のうちのｎ−１個に格納することに従っていることであり、前記ｎ個の非重複領域のうちの前記ｎ−１個は、前記ｎ個の非重複領域のうちの障害が発生した非重複領域を除く前記ｎ個の非重複領域である、前記切り替える工程と
を実行可能であり、
前記ｎ個の情報部分の各々は、ｎ−ｋ個のデータ情報部分と、前記ｎ−ｋ個のデータ情報部分を保護するために計算されたｋ個の冗長情報部分とを有し、
前記ｎ−１個の情報部分の各々は、ｎ−１−ｊ個のデータ情報部分と、前記ｎ−１−ｊ個のデータ情報部を保護するために計算されたｊ個の冗長な情報部分とを有するものである、
コントローラと、
を有し、
ここでｊ<＝ｋであり、
前記ｎ個それぞれの非重複領域の各々はメモリのｎ個の物理的デバイスうちの１つ内にあるものである、
システム。
【０１０５】
ＥＣ８２）ＥＣ８１のシステムにおいて、ｋ個の冗長情報部の任意の１若しくはそれ以上の全部または一部を計算することが可能なハードウェア論理回路をさらに有するシステム。
【０１０６】
ＥＣ８３）ＥＣ８１のシステムにおいて、ｊ＝＝ｋであるとき、データ情報部分の総量は減少し、保護の度合いは少なくとも維持されるシステム。
【０１０７】
ＥＣ８４）ＥＣ８３のシステムにおいて、保護の度合いはｎ個それぞれの非重複領域のｊ個までの障害に対する保護であるシステム。
【０１０８】
ＥＣ８５）ＥＣ８１のシステムにおいて、ｊ＝＝ｋ−１およびｊ>＝１であるとき、データ情報部分の総量は維持され、保護の度合いは減少し、データ情報部分は保護されるシステム。
【０１０９】
ＥＣ８６）ＥＣ８５のシステムにおいて、保護の減少の度合いはｎ個それぞれの非重複領域のｊ−１個までの障害に対する保護であるシステム。
【０１１０】
ＥＣ８７）ＥＣ６９またはＥＣ８１のシステムにおいて、格納することの行為の少なくとも１つの少なくとも一部分はコンピューティングホストからの書き込み要求に対応するシステム。
【０１１１】
ＥＣ８８）ＥＣ６９またはＥＣ８１のシステムにおいて、メモリインターフェースはフラッシュ・メモリ・インターフェースを有するシステム。
【０１１２】
ＥＣ８９）ＥＣ６９またはＥＣ８１のシステムにおいて、ｎ個の物理的デバイスの少なくとも１つは１若しくはそれ以上のフラッシュメモリを有するシステム。
【０１１３】
ＥＣ９０）システムにおいて、
コンピューティングホストへのインターフェースが可能なホストインターフェースと、
コントローラにおいて、
現在の上位レベルの冗長モードに従ってコンピューティングホストからの読み取りおよび／または書き込み要求に応答して１若しくはそれ以上のフラッシュメモリを管理することと、
１若しくはそれ以上のフラッシュメモリの１若しくはそれ以上の部分の障害を検出することに応答して現在の上位レベルの冗長モードを動的に切り替えることと、
が可能になったコントローラと、
を有するシステム。
【０１１４】
ＥＣ９１）ＥＣ９０のシステムにおいて、現在の上位レベルの冗長モードで使用可能な冗長情報を計算することが可能なハードウェア論理回路をさらに有するシステム。
【０１１５】
ＥＣ９２）ＥＣ９０のシステムにおいて、コントローラは動的な切り替えに従って空き領域を減少することがさらに可能なシステム。
【０１１６】
ＥＣ９３）ＥＣ９０のシステムにおいて、コントローラは目標の上位レベルの冗長モードに従っておよび動的な切り替えに従ってデータストレージを再編成することがさらに可能なシステム。
【０１１７】
ＥＣ９４）ＥＣ９０のシステムにおいて、コントローラは目標の上位レベルの冗長モードに従っておよび動的な切り替えに従って訂正された上位レベルの冗長情報を決定し格納することがさらに可能なシステム。
【０１１８】
ＥＣ９５）ＥＣ９０のシステムにおいて、現在の上位レベルの冗長モードは第１の上位レベルの冗長モードであり、コントローラは第１の障害に応答して現在の上位レベルの冗長モードを第２の上位レベルの冗長モードへ切り替えることおよび第２の障害に応答して現在の上位レベルの冗長モードを第３の上位レベルの冗長モードへ切り替えることがさらに可能なシステム。
【０１１９】
ＥＣ９６）ＥＣ９５のシステムにおいて、第２の障害は第１の障害が発生した後であり、第３の上位レベルの冗長モードでは第２の上位レベルの冗長モードより少ない空き領域が使用可能であるシステム。
【０１２０】
ＥＣ９７）ＥＣ９０のシステムにおいて、ホストインターフェースはストレージインターフェース標準と互換性があるシステム。
【０１２１】
ＥＣ９８）ＥＣ９０のシステムにおいて、フラッシュメモリとのインターフェースが可能なフラッシュ・メモリ・インターフェースをさらに有するシステム。
【０１２２】
ＥＣ９９）ＥＣ８８またはＥＣ９７のシステムにおいて、システムは単一の集積回路（ＩＣ）に実装されるシステム。
【０１２３】
ＥＣ１００）ＥＣ８８またはＥＣ９７のシステムにおいて、システムはソリッドステートディスク（ＳＳＤ）に実装されるシステム。
【０１２４】
ＥＣ１０１）ＥＣ８７またはＥＣ９０のシステムにおいて、コンピューティングホストをさらに有するシステム。
【０１２５】
ＥＣ１０２）ＥＣ８９またはＥＣ９０のシステムにおいて、少なくとも１つのフラッシュメモリをさらに有するシステム。
【０１２６】
ＥＣ１０３）プロセッシングエレメントにより実行された際にプロセッシングエレメントに動作を実行させるためにその中に格納された命令のセットを有する有形のコンピュータ可読媒体であって、
ｎ−ｋ個の有用なデータ部分を保護するためにｋ個の冗長データ部分を計算することと、
ｎ個の物理的デバイスのそれぞれの対応する領域の各々で、独立した対応する領域にｋ個の冗長データ部分の各々およびｎ−ｋ個の有効データ部分の各々を格納することと、
対応する領域の１つがもはや使用可能ではないような障害が発生した後に、ｎ−１−ｊ個の有用なデータ部分を保護するためにｊ個の冗長データ部分を計算することと、
を有し、
ここでｊ<＝ｋである、
有形のコンピュータ可読媒体。
【０１２７】
ＥＣ１０４）ＥＣ１０３の有形のコンピュータ可読媒体において、ｎ−ｋ個の有用なデータ部分を保護するためにｋ個の冗長データ部分を計算することは第１のデータ保護モードに従い、ｎ−１−ｊ個の有用なデータ部分を保護するためにｊ個の冗長データ部分を計算することは第２のデータ保護モードに従い、障害に応答して第１のデータ保護モードから第２のデータ保護モードに切り換えることをさらに有する有形のコンピュータ可読媒体。
【０１２８】
ＥＣ１０５）ＥＣ１０３の有形のコンピュータ可読媒体において、ｊ＝＝ｋであるとき、有用なデータ部分の総量は減少し、保護の度合いは少なくとも維持される有形のコンピュータ可読媒体。
【０１２９】
ＥＣ１０６）ＥＣ１０５の有形のコンピュータ可読媒体において、保護の度合いは対応する領域のｊ個までの障害に対する保護である有形のコンピュータ可読媒体。
【０１３０】
ＥＣ１０７）ＥＣ１０３の有形のコンピュータ可読媒体において、ｊ＝＝ｋ−１およびｊ>＝１であるとき、有用なデータ部分の総量は維持され、保護の度合いは減少し、有用なデータ部分は保護される有形のコンピュータ可読媒体。
【０１３１】
ＥＣ１０８）ＥＣ１０７の有形のコンピュータ可読媒体において、保護の減少の度合いは対応する領域のｊ−１個までの障害に対する保護である有形のコンピュータ可読媒体。
【０１３２】
ＥＣ１０９）ＥＣ１０３の有形のコンピュータ可読媒体において、
ｎ個の物理的デバイスの各々は複数の対応する領域を有し、
対応する領域の複数のセットの各々に、有用なデータのサブセットおよび有用なデータのサブセットを保護する冗長データのサブセットを有するデータセットそれぞれを格納することをさらに有し、冗長データのサブセットは有用なデータのサブセットからｎ個の物理的デバイスの個別のものに格納され、
対応する領域のセットの各々はわずかに１つのｎ個の物理的デバイス各々の対応する領域を有し、格納することはデータのそれぞれのセット各々に従って必要に応じてｎ個の物理的デバイスのｎ個またはより少ない異なるセットに格納される有形のコンピュータ可読媒体。
【０１３３】
ＥＣ１１０）ＥＣ１０９の有形のコンピュータ可読媒体において、障害が発生する前に、データセットの特定の１つの有用なデータのサブセットはｎ−ｋ個の有用なデータ部分を有し、データの特定のセットの冗長データのサブセットはｋ個の冗長データ部分を有する有形のコンピュータ可読媒体。
【０１３４】
ＥＣ１１１）ＥＣ１０９の有形のコンピュータ可読媒体において、格納することはｎ個の物理的デバイスの特定の１つの対応する領域の第１の１つに従ってデータセットの最初の１つの有用なデータのサブセットの一部を格納するために使用され、特定の物理的デバイスの対応する領域の第２の１つに従ってデータセットの第２の１つの冗長データのサブセットの一部またはすべてを格納するためにさらに使用される有形のコンピュータ可読媒体。
【０１３５】
ＥＣ１１２）ＥＣ１０９の有形のコンピュータ可読媒体において、対応する領域の最初の１つの記憶量は対応する領域の第２の１つの記憶量とは異なる有形のコンピュータ可読媒体。
【０１３６】
ＥＣ１１３）ＥＣ１１２の有形のコンピュータ可読媒体において、第１の対応する領域および第２の対応する領域はｎ個の物理的デバイスの同じものである有形のコンピュータ可読媒体。
【０１３７】
ＥＣ１１４）命令のセットが格納された有形のコンピュータ可読媒体であって、当該命令のセットがプロセッシングエレメントにより実行されると当該プロセッシングエレメントに
メモリのｎ個それぞれの非重複領域にｎ個の情報部分を格納することを有する第１の上位レベルの冗長モードで動作する工程と、
前記ｎ個の非重複領域のうち障害が発生した非重複領域における障害を検出する工程と、
前記障害に応答して、第１の上位レベルの冗長モードでの動作から、第２の上位レベルの冗長モードでの動作に動的に切り替える工程であって、前記第２の上位レベルの冗長モードはｎ−１個の情報部分を前記ｎ個の非重複領域のうちのｎ−１個に格納することに従っていることであり、前記ｎ個の非重複領域のうちの前記ｎ−１個は、前記ｎ個の非重複領域のうちの障害が発生した非重複領域を除く前記ｎ個の非重複領域である、前記切り替える工程と
を実行させるものであり、
前記ｎ個の情報部分の各々は、ｎ−ｋ個のデータ情報部分と、前記ｎ−ｋ個のデータ情報部分を保護するために計算されたｋ個の冗長情報部分とを有し、
前記ｎ−１個の情報部分の各々は、ｎ−１−ｊ個のデータ情報部分と、前記ｎ−１−ｊ個のデータ情報部を保護するために計算されたｊ個の冗長な情報部分とを有するものであり、
ここでｊ<＝ｋであり、
前記ｎ個それぞれの非重複領域の各々はメモリのｎ個の物理的デバイスうちの１つ内にあるものである
有形のコンピュータ可読媒体。
【０１３８】
ＥＣ１１５）ＥＣ１１４の有形のコンピュータ可読媒体において、ｊ＝＝ｋであるとき、データ情報部分の総量は減少し、保護の度合いは少なくとも維持される有形のコンピュータ可読媒体。
【０１３９】
ＥＣ１１６）ＥＣ１１５の有形のコンピュータ可読媒体において、保護の度合いはｎ個それぞれの非重複領域のｊ個までの障害に対する保護である有形のコンピュータ可読媒体。
【０１４０】
ＥＣ１１７）ＥＣ１１４の有形のコンピュータ可読媒体において、ｊ＝＝ｋ−１およびｊ>＝１であるとき、データ情報部分の総量は維持され、保護の度合いは減少し、データ情報部分は保護される有形のコンピュータ可読媒体。
【０１４１】
ＥＣ１１８）ＥＣ１１７の有形のコンピュータ可読媒体において、保護の減少の度合いはｎ個それぞれの非重複領域のｊ−１個までの障害に対する保護である有形のコンピュータ可読媒体。
【０１４２】
ＥＣ１１９）ＥＣ１０３またはＥＣ１１４の有形のコンピュータ可読媒体において、格納することの行為の少なくとも１つの少なくとも一部分はコンピューティングホストからの書き込み要求に対応する有形のコンピュータ可読媒体。
【０１４３】
ＥＣ１２０）ＥＣ１０３またはＥＣ１１４の有形のコンピュータ可読媒体において、格納することの行為の少なくとも１つはフラッシュ・メモリ・インターフェースを動作させることを有する有形のコンピュータ可読媒体。
【０１４４】
ＥＣ１２１）ＥＣ１０３またはＥＣ１１４の有形のコンピュータ可読媒体において、ｎ個の物理的デバイスの少なくとも１つは１若しくはそれ以上のフラッシュメモリを有する有形のコンピュータ可読媒体。
【０１４５】
ＥＣ１２２）プロセッシングエレメントにより実行された際にプロセッシングエレメントに動作を実行させるためにその中に格納された命令のセットを有する有形のコンピュータ可読媒体であって、
現在の上位レベルの冗長モードに従ってコンピューティングホストからの読み取りおよび／または書き込み要求に応答して１若しくはそれ以上のフラッシュメモリを管理することと、
１若しくはそれ以上のフラッシュメモリの１若しくはそれ以上の部分の障害を検出することに応答して現在の上位レベルの冗長モードを動的に切り替えることと、
を有する有形のコンピュータ可読媒体。
【０１４６】
ＥＣ１２３）ＥＣ１２２の有形のコンピュータ可読媒体において、動的に切り替えることは空き領域を減らすことを有する有形のコンピュータ可読媒体。
【０１４７】
ＥＣ１２４）ＥＣ１２２の有形のコンピュータ可読媒体において、動的に切り替えることは目標の上位レベルの冗長モードに従ってデータストレージを再編成することを有する有形のコンピュータ可読媒体。
【０１４８】
ＥＣ１２５）ＥＣ１２２の有形のコンピュータ可読媒体において、動的に切り替えることは目標の上位レベルの冗長モードに従って訂正された上位レベルの冗長情報を決定し格納することを有する有形のコンピュータ可読媒体。
【０１４９】
ＥＣ１２６）ＥＣ１２２の有形のコンピュータ可読媒体において、現在の上位レベルの冗長モードは第１の上位レベルの冗長モードであり、現在の上位レベルの冗長モードを動的に切り替えることは現在の上位レベルの冗長モードを第１の障害に応答して第２の上位レベルの冗長モードに切り替え、現在の上位レベルの冗長モードを第２の障害に応答して第３の上位レベルの冗長モードに切り替える有形のコンピュータ可読媒体。
【０１５０】
ＥＣ１２７）ＥＣ１２６の有形のコンピュータ可読媒体において、第２の障害は第１の障害が発生した後であり、第３の上位レベルの冗長モードでは第２の上位レベルの冗長モードよりも少ない空き領域が利用可能である有形のコンピュータ可読媒体。
【０１５１】
ＥＣ１２８）ＥＣ１１９またはＥＣ１２２の有形のコンピュータ可読媒体において、コンピューティングホストの要求をインターフェースすることをさらに有する有形のコンピュータ可読媒体。
【０１５２】
ＥＣ１２９）ＥＣ１２８の有形のコンピュータ可読媒体において、コンピューティングホストの要求をインターフェースすることはストレージインターフェース標準と互換性がある有形のコンピュータ可読媒体。
【０１５３】
ＥＣ１３０）ＥＣ１２２の有形のコンピュータ可読媒体において、フラッシュメモリを管理することをインターフェースすることをさらに有する有形のコンピュータ可読媒体。
【０１５４】
ＥＣ１３１）ＥＣ１３０の有形のコンピュータ可読媒体において、フラッシュメモリを管理することをインターフェースすることはフラッシュ・メモリ・インターフェースを動作させることを有する有形のコンピュータ可読媒体。
【０１５５】
ＥＣ１３２）ＥＣ１２２の有形のコンピュータ可読媒体において、
コンピューティングホストの要求をインターフェースすることと、
フラッシュメモリを管理することをインターフェースすることと、
をさらに有する有形のコンピュータ可読媒体。
【０１５６】
ＥＣ１３３）ＥＣ１２９の有形のコンピュータ可読媒体において、有形のコンピュータ可読媒体は単一の集積回路（ＩＣ）に実装される有形のコンピュータ可読媒体。
【０１５７】
ＥＣ１３４）ＥＣ１２９の有形のコンピュータ可読媒体において、有形のコンピュータ可読媒体はソリッドステートディスク（ＳＳＤ）に実装される有形のコンピュータ可読媒体。
【０１５８】
ＥＣ１３５）ＥＣ１１９またはＥＣ１２２の有形のコンピュータ可読媒体において、少なくともいくつかの読み取りおよび／または書き込み要求を生成するためにコンピューティングホストを動作させることをさらに有する有形のコンピュータ可読媒体。
【０１５９】
ＥＣ１３６）ＥＣ１２１またはＥＣ１２２の有形のコンピュータ可読媒体において、少なくとも１つのフラッシュメモリを動作させることをさらに有する有形のコンピュータ可読媒体。
【０１６０】
ＥＣ１３７）ストレージインターフェース標準を有する上記ＥＣのいずれかにおいて、ストレージインターフェース標準は、
ユニバーサル・シリアル・バス（ＵＳＢ）インターフェース標準、
コンパクトフラッシュ（登録商標）（ＣＦ）インターフェース標準、
マルチメディアカード（ＭＭＣ）インターフェース標準、
組み込みＭＭＣ（ｅＭＭＣ）インターフェース標準、
サンダーボルトインターフェース標準、
ＵＦＳインターフェース標準、
セキュアデジタル（ＳＤ）インターフェース標準、
メモリ・スティック・インターフェース標準、
ｘＤ−ピクチャー・カード・インターフェース標準、
統合ドライブエレクトロニクス（ＩＤＥ）インターフェース標準、
シリアルＡＴＡ（ＳＡＴＡ）インターフェース標準、
外部ＳＡＴＡ（ｅＳＡＴＡ）インターフェース標準、
小型コンピュータ・システム・インターフェース（ＳＣＳI）インターフェース標準、
シリアル接続小型コンピュータ・システム・インターフェース（ＳＡＳ）インターフェース標準、
ファイバ・チャネル・インターフェース標準、
イーサネット（登録商標）インターフェース標準、および
ペリフェラル・コンポーネント・インターコネクト・エクスプレス（ＰＣＩｅ）インターフェース標準
の１つ以上を有するＥＣ。
【０１６１】
ＥＣ１３８）フラッシュ・メモリ・インターフェースを有する上記ＥＣのいずれか１つにおいて、フラッシュ・メモリ・インターフェースは、
オープンＮＡＮＤフラッシュインターフェース（ＯＮＦＩ）、
トグルモードインターフェース、
ダブルデータレート（ＤＤＲ）同期インターフェース、
ＤＤＲ２同期インターフェース;
同期インターフェース、および
非同期インターフェース
の１つ以上と互換性があるＥＣ。
【０１６２】
ＥＣ１３９）コンピューティングホストを有する上記ＥＣのいずれか１つにおいて、コンピューティングホストは、
コンピュータ、
ワークステーションコンピュータ、
サーバコンピュータ、
ストレージサーバ、
ストレージ接続ネットワーク（ＳＡＮ）、
ネットワーク接続ストレージ（ＮＡＳ）装置、
ダイレクトアタッチストレージ（ＤＡＳ）装置、
ストレージ機器、
パーソナルコンピュータ（ＰＣ）、
ラップトップコンピュータ、
ノートブックコンピュータ、
ネットブックコンピュータ、
タブレット装置またはコンピュータ、
ウルトラブックコンピュータ、
電子読み取り装置（電子リーダ）、
パーソナル・デジタル・アシスタント（ＰＤＡ）、
ナビゲーションシステム、
（ハンドヘルド）全地球測位システム（ＧＰＳ）装置、
自動車制御システム
自動車メディア制御システムまたはコンピュータ、
プリンタ、複写機またはファクシミリまたはオールインワン装置、
販売時点ＰＯＳ装置、
キャッシュレジスタ、
メディアプレーヤ、
テレビ、
メディアレコーダ、
デジタル・ビデオ・レコーダ（ＤＶＲ）、
デジタルカメラ
携帯ハンドセット、
コードレス電話の受話器、および
電子ゲーム
の１つ以上を有するＥＣ。
【０１６３】
ＥＣ１４０）少なくとも１つのフラッシュメモリを有する上記ＥＣのいずれか１つにおいて、少なくとも１つのフラッシュメモリの少なくとも一部は１若しくはそれ以上の、
ＮＡＮＤフラッシュ技術ストレージセルと、
ＮＯＲフラッシュ技術ストレージセルと、
を有するＥＣ。
【０１６４】
ＥＣ１４１）少なくとも１つのフラッシュメモリを有する上記ＥＣのいずれか１つにおいて、少なくとも１つのフラッシュメモリの少なくとも一部は１若しくはそれ以上の、
シングルレベルセル（ＳＬＣ）フラッシュ技術ストレージセルと、
マルチレベルセル（ＭＬＣ）フラッシュ技術ストレージセルと、
を有するＥＣ。
【０１６５】
ＥＣ１４２）少なくとも１つのフラッシュメモリを有する上記ＥＣのいずれか１つにおいて、少なくとも１つのフラッシュメモリの少なくとも一部は１若しくはそれ以上の、
ポリシリコン技術ベースの電荷ストレージセルと、
窒化シリコン技術ベースの電荷ストレージセルと、
を有するＥＣ。
【０１６６】
ＥＣ１４３）少なくとも１つのフラッシュメモリを有する上記ＥＣのいずれか１つにおいて、少なくとも１つのフラッシュメモリの少なくとも一部は１若しくはそれ以上の、
二次元技術ベースのフラッシュメモリ技術と、
三次元技術ベースのフラッシュメモリ技術と、
を有するＥＣ。
【０１６７】
システム
図１ＡはＮＶＭｓにアクセスして制御するための独立したシリコン素子の動的な上位レベルの冗長モード管理を使用するＳＳＤコントローラを含むソリッドステートディスク（ＳＳＤ）の実施形態の選択された詳細を示す。ＳＳＤコントローラはＮＶＭ素子（例えば、フラッシュメモリ）を介して実装されるような不揮発性ストレージを管理するためのものである。ＳＳＤコントローラ１００は１若しくはそれ以上の外部インターフェース１１０を介してホスト（図示せず）に通信するように結合される。様々な実施形態によれば、外部インターフェース１１０は、ＳＡＴＡインターフェース、ＳＡＳインターフェース、ＰＣＩｅインターフェース、ファイバ・チャネル・インターフェース、イーサネット（登録商標）インターフェース（例えば、１０ギガビットイーサネット（登録商標））、前述のインターフェースのいずれかの非標準バージョン、カスタムインターフェース、またはストレージおよび／または通信および／またはコンピューティング装置を相互接続するために使用されるインターフェースの任意の他のタイプの１つ以上である。例えば、いくつかの実施形態では、ＳＳＤコントローラ１００はＳＡＴＡインターフェースおよびＰＣＩｅインターフェースを含む。
【０１６８】
ＳＳＤコントローラ１００は、１若しくはそれ以上のフラッシュデバイス１９２などの１若しくはそれ以上のストレージデバイスを含むＮＶＭ１９９に１若しくはそれ以上のデバイスインターフェース１９０を介して通信するようにさらに結合される。様々な実施形態によれば、デバイスインターフェース１９０は、非同期インターフェース、同期インターフェース、シングルデータレート（ＳＤＲ）インターフェース、ダブルデータレート（ＤＤＲ）インターフェース、ＤＲＡＭ互換ＤＤＲまたはＤＤＲ２同期インターフェース、ＯＮＦＩ ２．２またはＯＮＦＩ ３．０互換インターフェースなどのＯＮＦＩ互換インターフェース、トグルモード互換フラッシュインターフェース、前述のいずれかのインターフェースの非標準バージョン、カスタムインターフェース、またはストレージデバイスへの接続に使用される任意の他のタイプのインターフェースの１つ以上である。
【０１６９】
各フラッシュデバイス１９２は、いくつかの実施形態では、１若しくはそれ以上の個々のフラッシュダイ１９４を有する。フラッシュデバイス１９２の特定の１つのタイプに応じて、特定のフラッシュデバイス１９２内の複数のフラッシュダイ１９４は必要に応じておよび／または選択的に並列にアクセス可能である。フラッシュデバイス１９２はＳＳＤコントローラ１００に通信するように結合可能なストレージデバイスの一種の単なる代表例である。様々な実施形態では、例えば、ＳＬＣ  ＮＡＮＤフラッシュメモリ、ＭＬＣ  ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、ポリシリコンまたは窒化シリコン技術ベースの電荷ストレージセルを使用したフラッシュメモリ、二次元または三次元技術ベースのフラッシュメモリ、読み取り専用メモリ、スタティックランダムアクセスメモリ、ダイナミックランダムアクセスメモリ、強磁性メモリ、相変化メモリ、レーストラックメモリ、またはメモリデバイスまたは記憶媒体の任意の他のタイプなどの、ストレージデバイスの任意のタイプが使用可能である。
【０１７０】
様々な実施形態によれば、デバイスインターフェース１９０は次のように構成される：バス毎に１若しくはそれ以上のフラッシュデバイス１９２を有する１若しくはそれ以上のバス、グループ内のバスは一般的に並列にアクセスされる、バス毎に１若しくはそれ以上のフラッシュデバイス１９２を有する１若しくはそれ以上のバスのグループ、またはデバイスインターフェース１９０上の１若しくはそれ以上のフラッシュデバイス１９２の任意の他の構成。
【０１７１】
図１Ａに続いて、ＳＳＤコントローラ１００は、ホストインターフェース１１１、データ処理１２１、バッファ１３１、マップ１４１、リサイクラ１５１、ＥＣＣ１６１、デバイス・インターフェース・ロジック１９１、およびＣＰＵ１７１などの１若しくはそれ以上のモジュールを有する。図１Ａに示す特定のモジュールおよび相互接続は１つの実施形態の単なる代表例であり、いくつかのまたは全部のモジュールの多くの配置および相互接続が、図示されない追加モジュールと同様に、考えられる。最初の実施例では、いくつかの実施形態では、デュアルポートを提供するために２つ以上のホストインターフェース１１１がある。２番目の実施例では、いくつかの実施形態では、データ処理１２１および／またはＥＣＣ１６１はバッファ１３１に結合される。第３の実施例では、いくつかの実施形態では、ホストインターフェース１１１は直接バッファ１３１に結合され、データ処理１２１は必要に応じておよび／または選択的にバッファ１３１に格納されたデータを処理する。第４の実施例では、いくつかの実施形態では、デバイス・インターフェース・ロジック１９１はバッファ１３１に直接結合され、ＥＣＣ１６１は必要に応じておよび／または選択的にバッファ１３１に格納されたデータを処理する。
【０１７２】
ホストインターフェース１１１は外部インターフェース１１０を介してコマンドおよび／またはデータを送信および受信し、いくつかの実施形態では、タグトラッキング１１３を介して個々のコマンドの進捗をトラッキングする。例えば、ＳＳＤが読み取りステータスおよび／または読み取りデータを提供するのに応答して、コマンドはアドレス（ＬＢＡなど）を指定する読み取りコマンドおよび読み取りデータ量（ＬＢＡ素量数など、例えば、セクタ）を含む。別の実施例では、ＳＳＤが書き込みステータスを提供するおよび／または書き込みデータを要求するおよび必要に応じてその後に書き込みステータスを提供するのに応答して、コマンドはアドレス（ＬＢＡなど）を指定する書き込みコマンドおよび書き込みデータ量（ＬＢＡ素量数など、例えば、セクタ）を含む。さらに別の実施例では、ＳＳＤが適宜におよび必要に応じて割り当て解除ステータスを提供するマップを変更するのに応答して、コマンドはもはや割り当てられることを必要としない１若しくはそれ以上のアドレス（１若しくはそれ以上のＬＢＡｓなど）を指定する割り当て解除コマンド（例えば、トリムコマンド）を含む。いくつかのコンテキストではＡＴＡ互換のＴＲＩＭコマンドは典型的な割り当て解除コマンドである。さらに別の実施例では、ＳＳＤが適切なステータスを提供するのに応答して、コマンドはスーパー・キャパシタ・テスト・コマンドまたはデータハードニング成功クエリを含む。いくつかの実施形態では、ホストインターフェース１１１はＳＡＴＡプロトコルと互換性があり、ＮＣＱコマンドを使用することは、各々が０から３１の数字として表されるユニークタグを有する、３２個までの保留中コマンドを有することが可能となっている。いくつかの実施形態では、タグトラッキング１１３は外部インターフェース１１０を介して受信したコマンドの外部タグをＳＳＤコントローラ１００により処理中のコマンドをトラッキングするために使用する内部タグと関連付けることが可能となっている。
【０１７３】
様々な実施形態では、データ処理１２１は必要に応じておよび／または選択的にバッファ１３１および外部インターフェース１１０との間で送信されるいつくかのまたはすべてのデータを処理する、およびデータ処理１２１は必要に応じておよび／または選択的にバッファ１３１に格納されたデータを処理する、が１つ以上行われる。いくつかの実施形態では、データ処理１２１は、フォーマッティング、再フォーマッティング、トランスコーディング、およびその他のデータ処理および／または操作タスクの１つ以上を実行する１若しくはそれ以上のエンジン１２３を使用する。
【０１７４】
バッファ１３１は外部インターフェース１１０に／からデバイスインターフェース１９０から／に送信されるデータを格納する。いくつかの実施形態では、バッファ１３１は１若しくはそれ以上のフラッシュデバイス１９２を管理するためにＳＳＤコントローラ１００により使用される、いくつかのまたはすべてのマップテーブルなどの、システムデータを付加的に格納する。様々な実施形態では、バッファ１３１は、データの一時記憶に使用されるメモリ１３７、バッファ１３１におよび／またはからのデータの移動を制御するために使用されるＤＭＡ１３３、および上位レベルの誤り訂正および／または冗長機能を提供するために使用されるＥＣＣ−Ｘ１３５、およびその他のデータ移動および／または操作機能の１つ以上を有する。上位レベルの冗長機能の例はＲＡＩＤのような能力（例えば、ＲＡＳＩＥ）であり、冗長性はディスクレベルの代わりにフラッシュデバイス（例えば、フラッシュデバイス１９２の複数のもの）レベル、および／またはフラッシュダイ（例えば、フラッシュダイ１９４）レベルである。
【０１７５】
様々な実施形態では、ＥＣＣ１６１は必要に応じておよび／または選択的にバッファ１３１およびデバイスインターフェース１９０との間で送信されるいくつかのまたはすべてのデータを処理する、およびＥＣＣ１６１は必要に応じておよび／または選択的にバッファ１３１に格納されたデータを処理する、が１つ以上行われる。いくつかの実施形態では、ＥＣＣ１６１は１若しくはそれ以上のＥＣＣ技術に従って下位レベルの誤り訂正および／または冗長機能を提供するために使用される。いくつかの実施形態では、ＥＣＣ１６１は、ＣＲＣ符号、ハミング符号、ＲＳ符号、ＢＣＨ符号、ＬＤＰＣ符号、ビタビ符号、トレリス符号、ハード決定符号、ソフト決定符号、消去ベース符号、任意のエラー検出および／または訂正符号、および前述の符号の任意の組み合せの１つ以上を実装する。いくつかの実施形態では、ＥＣＣ１６１は１若しくはそれ以上のデコーダ（ＬＤＰＣデコーダなど）を含む。
【０１７６】
デバイス・インターフェース・ロジック１９１はデバイスインターフェース１９０を介してフラッシュデバイス１９２のインスタンスを制御する。デバイス・インターフェース・ロジック１９１はフラッシュデバイス１９２のプロトコルに従ってフラッシュデバイス１９２のインスタンスから／にデータを送信することが可能となっている。デバイス・インターフェース・ロジック１９１はデバイスインターフェース１９０を介してフラッシュデバイス１９２のインスタンスを選択的にシーケンス制御するスケジューリング１９３を含む。例えば、いくつかの実施形態では、スケジューリング１９３はフラッシュデバイス１９２のインスタンスへの動作をキューイングすることが可能となっており、フラッシュデバイス１９２（またはフラッシュダイ１９４）のインスタンスの個々のものが利用可能であるようにフラッシュデバイス１９２（またはフラッシュダイ１９４）のインスタンスの個々のものに動作を選択的に送信することが可能となっている。
【０１７７】
マップ１４１は外部データアドレスをＮＶＭ１９９内の場所にマッピングするためにテーブル１４３を使用して外部インターフェース１１０で使用されるデータアドレッシングおよびデバイスインターフェース１９０で使用されるデータアドレッシング間で変換を行う。例えば、いくつかの実施形態では、マップ１４１は外部インターフェース１１０上で使用されるＬＢＡｓをテーブル１４３により提供されるマッピングを介して１若しくはそれ以上のフラッシュダイ１９４を対象としたブロックおよび／またはページアドレスに変換する。ドライブ製造または割り当て解除以降に書き込まれていなかったＬＢＡｓについては、ＬＢＡｓが読まれる場合、マップポイントはデフォルト値に戻る。例えば、割り当て解除コマンドを処理するときに、マップは割り当て解除ＬＢＡｓに対応するエントリがデフォルト値の１つをポイントするように修正される。様々な実施形態では、各々が対応するポインタを有する様々なデフォルト値がある。別の割り当て解除ＬＢＡｓ（第２の範囲内など）を別の１つのデフォルト値として読み取りながら、複数のデフォルト値はいくつかの割り当て解除ＬＢＡｓ（最初の範囲など）を１つのデフォルト値として読み取ることを可能にする。様々な実施形態では、デフォルト値は、フラッシュメモリ、ハードウェア、ファームウェア、コマンドおよび／またはプリミティブ引数および／またはパラメータ、プログラマブルレジスタ、またはそれらの様々な組み合せにより定義される。
【０１７８】
いくつかの実施形態では、マップ１４１は外部インターフェース１１０上で使用されるアドレスおよびデバイスインターフェース１９０上で使用されるデータアドレシングとの間の変換を実行および／またはルックアップするためにテーブル１４３を使用する。様々な実施形態によれば、テーブル１４３は１レベルマップ、２レベルマップ、マルチレベルマップ、マップキャッシュ、圧縮されたマップ、別のアドレス空間からのマッピングのいずれかのタイプ、および前述のものの任意の組み合せの１つ以上である。様々な実施形態によれば、テーブル１４３は、スタティック・ランダム・アクセス・メモリ、ダイナミック・ランダム・アクセス・メモリ、ＮＶＭ（フラッシュメモリなど）、キャッシュメモリ、オンチップメモリ、オフチップメモリ、および前述のものの任意の組み合せの１つ以上を含む。
【０１７９】
いくつかの実施形態では、リサイクラ１５１はガベージコレクションを実行する。例えば、いくつかの実施形態では、フラッシュデバイス１９２のインスタンスはブロックが再書き込みされる前に消去されなければならないブロックを含む。リサイクラ１５１は、マップ１４１により維持されるマップをスキャンすることによるなど、フラッシュデバイス１９２のインスタンスのどの部分が能動的に使用中（例えば、割り当て解除ではなく割り当てられている）であるかを判断することが可能となっており、フラッシュデバイス１９２のインスタンスの未使用（例えば、割り当て解除された）部分を消去することにより書き込みのために利用可能とすることが可能となっている。さらなる実施形態では、リサイクラ１５１はフラッシュデバイス１９２のインスタンスの連続した部分を書き込み用に利用可能なように大きくするためにフラッシュデバイス１９２のインスタンス内に格納されたデータを移動することが可能となっている。
【０１８０】
いくつかの実施形態では、フラッシュデバイス１９２のインスタンスは異なるタイプおよび／またはプロパティのデータを格納するための１若しくはそれ以上のバンドを有するために選択的におよび／または動的に構成、管理、および／または使用される。バンドの数、配置、サイズ、およびタイプは動的に変更可能である。例えば、リサイクラ１５１からのデータがコールド（アクティブでない）バンドに書き込まれている間に、コンピューティングホストからのデータはホット（アクティブ）バンドに書き込まれる。いくつかの使用シナリオでは、コンピューティングホストが長い連続したストリームを書き込む場合、その時にはホットバンドのサイズが大きくなり、コンピューティングホストがランダムな書き込みまたは少数の書き込みを行う場合、その時にはコールドバンドのサイズが大きくなる。
【０１８１】
ＣＰＵ１７１はＳＳＤコントローラ１００の様々な部分を制御する。ＣＰＵ１７１はＣＰＵコア１７２を含む。ＣＰＵコア１７２は、種々の実施形態によると、１若しくはそれ以上のシングルコアまたはマルチコアプロセッサである。ＣＰＵコア１７２内の個々のプロセッサコアは、いくつかの実施形態では、マルチスレッドである。ＣＰＵコア１７２は命令および／またはデータキャッシュおよび／またはメモリを含む。例えば、命令メモリはＳＳＤコントローラ１００を制御するためにＣＰＵコア１７２にプログラム（例えば、時にはファームウェアと呼ばれるソフトウェア）を実行することを可能にする命令を含む。いくつかの実施形態では、ＣＰＵコア１７２により実行されるファームウェアの一部または全部がフラッシュデバイス１９２（例えば、図１ＢにおいてＮＶＭ １９９のファームウェア１０６として図示される）のインスタンスに格納されている。
【０１８２】
様々な実施形態では、ＣＰＵ１７１は、外部インターフェース１１０を介して受信したコマンドをコマンドが進行中にトラッキングし制御するためのコマンド管理１７３、バッファ１３１の割り当てと使用を制御するためのバッファ管理１７５、マップ１４１を制御するための変換管理１７７、データアドレッシングの整合性を制御するためおよび外部データアクセスおよびリサイクル・データ・アクセス間でのような競合を避けるためのコヒーレンシ管理１７９、デバイス・インターフェース・ロジック１９１を制御するためのデバイス管理１８１、識別情報の変更および通信を制御するための識別管理１８２、および必要に応じて他の管理ユニットをさらに含む。ＣＰＵ １７１によって実行される管理機能の無し、いずれか、またはすべては、様々な実施形態によれば、ハードウェアにより、ソフトウェア（ＣＰＵコア１７２上または外部インターフェース１１０を介して接続されたホスト上で実行するファームウェアなど）により、またはそれらの任意の組み合せにより制御および／または管理される。
【０１８３】
いくつかの実施形態では、ＣＰＵ１７１は、パフォーマンス統計を収集および／または報告する、ＳＭＡＲＴを実装する、電源シーケンスを制御する、消費電力を制御および／または監視および／または調節する、電源障害に対応する、クロックレートを制御および／または監視および／または調整する、およびその他の管理タスクの１つ以上などの他の管理タスクを実行することが可能となっている。
【０１８４】
様々な実施形態は、ＳＳＤコントローラ１００と同様であり、ホストインターフェース１１１および／または外部インターフェース１１０の適応などを介して、様々なコンピューティングホストでの動作と互換性のあるコンピューティングホスト・フラッシュ・メモリ・コントローラを含む。様々なコンピューティングホストは、コンピュータ、ワークステーションコンピュータ、サーバコンピュータ、ストレージサーバ、ＳＡＮ、ＮＡＳ装置、ＤＡＳ装置、ストレージ機器、ＰＣ、ラップトップコンピュータ、ノートブックコンピュータ、ネットブックコンピュータ、タブレット装置またはコンピュータ、ウルトラブックコンピュータ、電子読み取り装置（電子リーダなど）、ＰＤＡ、ナビゲーションシステム、（ハンドヘルド）ＧＰＳ装置、自動車制御システム、自動車用メディア制御システムやコンピュータ、プリンタ、複写機、ファクシミリまたはオールインワン装置、ＰＯＳ装置、キャッシュレジスタ、メディアプレーヤ、テレビ、メディアレコーダ、ＤＶＲ、デジタルカメラ、携帯電話機、コードレス電話の受話器、および電子ゲームの１つまたは任意の組み合せを含む。
【０１８５】
様々な実施形態では、ＳＳＤコントローラ（またはコンピューティングホスト・フラッシュ・メモリ・コントローラ）のすべてまたは任意の部分は、単一のＩＣ、マルチダイＩＣの単一のダイ、マルチダイＩＣの複数のダイス、または複数のＩＣに実装される。例えば、バッファ１３１はＳＳＤコントローラ１００の他の要素と同じダイ上に実装される。別の実施例では、バッファ１３１はＳＳＤコントローラ１００の他の要素とは異なるダイ上に実装される。
【０１８６】
図１Ｂは図１ＡのＳＳＤの１若しくはそれ以上のインスタンスを含むシステムの様々な実施形態の選択された詳細を示す。ＳＳＤ１０１はデバイスインターフェース１９０を介してＮＶＭ １９９に結合されたＳＳＤコントローラ１００を含む。図は、ホストに直接結合された単一のＳＳＤ、それぞれの外部インターフェース介して各々がそれぞれホストに直接結合された複数のＳＳＤ、および様々な相互接続要素を介してホストに間接的に結合された１若しくはそれ以上のＳＳＤなどの実施形態の様々なクラスを示す。
【０１８７】
ホストに直接結合される単一のＳＳＤの例示的実施形態として、ＳＳＤ１０1の１つのインスタンスは外部インターフェース１１０を介して（例えば、スイッチ／ファブリック／中間コントローラ１０３は省略、バイパス、またはパススルーされて）ホスト１０２に直接結合される。各々がそれぞれの外部インターフェースを介してホストに直接結合される複数のＳＳＤの例示的実施形態として、ＳＳＤ１０１の複数のインスタンスの各々は外部インターフェース１１０のそれぞれのインスタンスを介して（例えば、スイッチ／ファブリック／中間コントローラ１０３は省略、バイパス、またはパススルーされて）ホスト１０２にそれぞれ直接結合される。種々の相互接続要素を介してホストに間接的に結合される１若しくはそれ以上のＳＳＤの例示的実施形態として、ＳＳＤ１０１の１若しくはそれ以上のインスタンスの各々はホスト１０２にそれぞれ間接的に結合される。間接的なカップリングの各々は外部インターフェース１１０のそれぞれのインスタンスを介してスイッチ／ファブリック／中間コントローラ１０３、およびホスト１０２に結合する中間インターフェース１０４に結合される。
【０１８８】
スイッチ／ファブリック／中間コントローラ１０３を含むいくつかの実施形態はまた、メモリインターフェース１８０を介して結合されたＳＳＤｓによりアクセス可能なカードメモリ１１２Ｃを含む。様々な実施形態では、ＳＳＤｓ、スイッチ／ファブリック／中間コントローラ、および／またはカードメモリの１つ以上は物理的に識別可能なモジュール、カード、またはプラグ可能な要素（例えば、Ｉ／Ｏカード１１６）に含まれる。いくつかの実施形態では、ＳＳＤ１０１（またはその変形）はホスト１０２のように動作するイニシエータに結合されるＳＡＳドライブまたはＳＡＴＡドライブに対応する。
【０１８９】
ホスト１０２は、ＯＳ１０５、ドライバ１０７、アプリケーション１０９、およびマルチデバイス管理ソフトウェア１１４などの様々な組み合せのようなホストソフトウェア１１５の様々な要素を実行することが可能となっている。点線矢印１０７Ｄはホストソフトウェア←→Ｉ／Ｏデバイス通信の代表的なものであり、例えば、ＳＳＤ１０１の１若しくはそれ以上のインスタンスに／から、およびドライバ１０７を介してＯＳ１０５、ドライバ１０７、およびアプリケーション１０９のいずれか１つ以上から／に、ドライバ１０７を介してまたは直接ＶＦとしてのどちらかで、送信／受信されるデータである。
【０１９０】
ＯＳ１０５はＳＳＤとのインターフェース用のドライバ（ドライバ１０７により概念的に示されている）を含む、および／または動作することが可能となっている。Ｗｉｎｄｏｗｓ（登録商標）の様々なバージョン（例えば、９５、９８、ＭＥ、ＮＴ、ＸＰ、２０００、サーバ、Ｖｉｓｔａ、および７）、Ｌｉｎｕｘ（登録商標）の様々なバージョン（例えば、Ｒｅｄ  Ｈａｔ、Ｄｅｂｉａｎ、およびＵｂｕｎｔｕ）、およびＭａｃＯＳの様々なバージョン（例えば８、９およびＸ）はＯＳ１０５の例である。様々な実施形態では、ドライバは、ＳＡＴＡ、ＡＨＣＩ、またはＮＶＭ  Ｅｘｐｒｅｓｓなどの標準インターフェースおよび／またはプロトコルで動作可能な標準および／または汎用ドライバ（時には「シュリンクラップ」または「プリインストール」と呼ばれる）であり、または必要に応じてＳＳＤ１０１に固有のコマンドを使用できるようにカスタマイズされたおよび／またはベンダー固有のものである。いくつかのドライブおよび／またはドライバは、カスタマイズされたアプリケーションに汎用ドライバでもＳＳＤ１０１に固有のコマンドを使用することを可能にする、ＳＳＤ１０１に直接コマンドを通信するために、最適化されたＮＡＮＤアクセス（時にはＯＮＡと呼ばれる）または直接ＮＡＮＤアクセス（時にはＤＮＡと呼ばれる）技術を介してアプリケーション１０９のような、アプリケーションレベルのプログラムを有効にするためにパススルーモードを有する。ＯＮＡ技術は、非標準修飾子（ヒント）の使用、ベンダー固有コマンドの使用、非標準統計情報の通信、圧縮率に応じた実際のＮＶＭの使用状況など、および他の技術の１つ以上を含む。ＤＮＡ技術は、ＮＶＭへのマップされていない読み取り、書き込み、および／または消去アクセスを提供する非標準またはベンダー固有のコマンドの使用、Ｉ／Ｏデバイスが他の方法で行うであろうデータのフォーマッティングをバイパスするなどの、ＮＶＭへのより直接的なアクセスを提供する非標準またはベンダー固有のコマンドの使用、および他の技術の１つ以上を含む。ドライバの例としては、ＯＮＡまたはＤＮＡサポートなしのドライバ、ＯＮＡ対応ドライバ、ＤＮＡ対応ドライバ、およびＯＮＡ／ＤＮＡ対応ドライバなどである。ドライバのさらなる例としては、ベンダー提供、ベンダー開発、および／またはベンダー拡張ドライバ、およびクライアント提供、クライアント開発、および／またはクライアント拡張ドライバなどである。
【０１９１】
アプリケーションレベルのプログラムの例としては、ＯＮＡまたはＤＮＡをサポートしていないアプリケーション、ＯＮＡ対応アプリケーション、ＤＮＡ対応アプリケーション、およびＯＮＡ／ＤＮＡ対応アプリケーションなどである。点線矢印１０９Ｄは、アプリケーション←→Ｉ／Ｏデバイスの通信（例えば、アプリケーションのドライバを介してのバイパスまたはＶＦを介してのバイパス）の代表的なものであり、例えば、仲介としてＯＳを使用しないアプリケーションなどの、ＳＳＤとの通信を行うＯＮＡ対応アプリケーションおよびＯＮＡ対応ドライバなどである。点線矢印１０９Ｖは、アプリケーション←→Ｉ／Ｏデバイスの通信（例えば、アプリケーションのＶＦを介してのバイパス）の代表的なものであり、例えば、仲介としてＯＳまたはドライバを使用しないアプリケーションなどの、ＳＳＤとの通信を行うＤＮＡ対応アプリケーションおよびＤＮＡ対応ドライバなどである。
【０１９２】
ＮＶＭ１９９の１若しくはそれ以上の部分は、いくつかの実施形態では、例えば、ファームウェア１０６などの、ファームウェアストレージに使用される。ファームウェアストレージは１若しくはそれ以上のファームウェアイメージ（またはその一部）を含む。例えば、ファームウェアイメージは、例えば、ＳＳＤコントローラ１００のＣＰＵコア１７２により実行される１若しくはそれ以上のファームウェアのイメージを有する。他の例では、ファームウェアイメージは、例えば、ファームウェアの実行中にＣＰＵコアによって参照される、定数、パラメータ値、およびＮＶＭデバイス情報の１若しくはそれ以上のイメージを有する。ファームウェアのイメージは、例えば、現在のファームウェアイメージおよびゼロ個以上の以前の（ファームウェアのアップデートに関して）ファームウェアイメージに対応する。様々な実施形態では、ファームウェアは、汎用、標準、ＯＮＡ、および／またはＤＮＡの動作モードを提供する。いくつかの実施形態では、１若しくはそれ以上のファームウェアの動作モードは、必要に応じてドライバにより通信および／または提供され、キーまたは種々のソフトウェア技術を介して有効（例えば、１若しくはそれ以上のＡＰＩｓが「アンロック」）となる。
【０１９３】
スイッチ／ファブリック／中間コントローラを欠いたいくつかの実施形態では、ＳＳＤは外部インターフェース１１０を介してホストに直接接続される。様々な実施形態では、ＳＳＤコントローラ１００は、ＲＡＩＤコントローラなどの、他のコントローラの１若しくはそれ以上の中間レベルを介してホストに接続される。いくつかの実施形態では、ＳＳＤ１０１（またはその変形）はＳＡＳドライブまたはＳＡＴＡドライブに、およびイニシエータに順番に結合されるエキスパンダに対応するスイッチ／ファブリック／中間コントローラ１０３に、または代替的にエキスパンダを介してイニシエータに間接的に結合されるブリッジに対応するスイッチ／ファブリック／中間コントローラ１０３に、対応する。いくつかの実施形態では、スイッチ／ファブリック／中間コントローラ１０３は１若しくはそれ以上のＰＣＩｅスイッチおよび／またはファブリックを含む。
【０１９４】
ホスト１０２がコンピューティングホスト（例えば、コンピュータ、ワークステーションコンピュータ、サーバコンピュータ、ストレージサーバ、ＳＡＮ、ＮＡＳ装置、ＤＡＳ装置、ストレージ機器、ＰＣ、ラップトップコンピュータ、ノートブックコンピュータ、および／またはネットブックコンピュータ）であるいくつかの実施形態などの、様々な実施形態では、コンピューティングホストは必要に応じて１若しくはそれ以上のローカルおよび／またはリモートサーバ（例えば、オプションのサーバ１１８）と通信すること（例えば、オプションのＩ／Ｏ&ストレージ装置／リソース１１７およびオプションのＬＡＮ／ＷＡＮ１１９を介して）が可能となっている。通信は、例えば、任意の１若しくはそれ以上のＳＳＤ１０１の要素のローカルおよび／またはリモートアクセス、管理、および／または使用を可能にする。いくつかの実施形態では、通信は全面的にまたは部分的にイーサネット（登録商標）を介したものである。いくつかの実施形態では、通信は全面的にまたは部分的にファイバチャネルを介したものである。ＬＡＮ／ＷＡＮ１１９は、様々な実施形態では、サーバファーム内のネットワーク、サーバファームを結合するネットワーク、メトロエリアネットワーク、およびインターネットなどのいずれか１若しくはそれ以上のローカルおよび／またはワイド・エリア・ネットワークの代表的なものである。
【０１９５】
様々な実施形態では、ＳＳＤコントローラおよび／または１若しくはそれ以上のＮＶＭとの組み合せでコンピューティングホスト・フラッシュ・メモリ・コントローラは、ＵＳＢストレージコンポーネント、ＣＦストレージコンポーネント、ＭＭＣストレージコンポーネント、ｅＭＭＣストレージコンポーネント、サンダーボルト・ストレージ・コンポーネント、ＵＦＳストレージコンポーネント、ＳＤストレージコンポーネント、メモリ・スティック・ストレージ・コンポーネント、およびｘＤピクチャ・カード・ストレージ・コンポーネントなどの不揮発性ストレージコンポーネントとして実装される。
【０１９６】
様々な実施形態では、ＳＳＤコントローラ（またはコンピューティングホスト・フラッシュ・メモリ・コントローラ）、またはその機能の全部または部分は、コントローラに結合されるホスト（例えば、図１Ｂのホスト１０２）に実装される。様々な実施形態では、ＳＳＤコントローラ（またはコンピューティングホスト・フラッシュ・メモリ・コントローラ）、またはその機能の全部または一部分は、ハードウェア（例えば、論理回路）、ソフトウェアおよび／またはファームウェア（例えば、ドライバソフトウェアまたはＳＳＤ制御ファームウェア）、またはそれらの任意の組み合せを介して実装される。例えば、ＥＣＣユニット（図１ＡのＥＣＣ１６１および／またはＥＣＣ−Ｘ１３５と同様）の機能または関連の機能は部分的にホスト上のソフトウェアを介して、および部分的にＳＳＤコントローラ内のファームウェアおよびハードウェアとの組み合せを介して実装される。別の例として、リサイクラユニット（図１Ａのリサイクラ１５１と同様）の機能または関連する機能は部分的にホスト上のソフトウェアを介して、および部分的にコンピューティングホスト・フラッシュ・メモリ・コントローラ内のハードウェアを介して実装される。
【０１９７】
マッピング動作
図２はＬＢＡのＬＰＮ部分のマッピングの一実施形態の選択された詳細を示す。いくつかの実施形態では、読み取りユニットはＮＶＭのページの一部などの独立して読み取り可能なＮＶＭの最小細分性（粒度）である。さらなる実施形態では、リードユニットは検査ビットにより保護されているすべてのデータと共に（下位レベル）誤り訂正符号の検査ビット（時には冗長性と呼ばれる）に相当する。例えば、図１ＡのＥＣＣ１６１は、ＬＤＰＣ符号を介してなど検査ビットを介して誤り訂正を実装し、読み取りユニットは、ＬＤＰＣ符号化ビットで保護されたデータビットに加えてＬＤＰＣ符号を実装する符号化ビットに対応する。
【０１９８】
いくつかの実施形態では、マップ１４１は、テーブル１４３（図１Ａに示す）を介してなど、ＬＢＡ２１１のＬＰＮ２１３部分をＬＰＮ２２１用マップ情報にマッピングする。ＬＰＮ用マップ情報（ＬＰＮ２２１用マップ情報など）は、時にはマップエントリと呼ばれる。マップ１４１は対応するマップエントリにＬＰＮを関連付けるために示されている。様々な実施形態では、マッピングは、１若しくはそれ以上の連想ルックアップを介して、１若しくはそれ以上の非連想のルックアップを介して、および／または１若しくはそれ以上の他の技術を介して行われる。
【０１９９】
いくつかの実施形態では、ＳＳＤコントローラ１００は使用中の各ＬＰＮのための１つのマップエントリを潜在的におよび／または積極的に維持する。
【０２００】
いくつかの実施形態では、ＬＰＮ２２１のためのマップ情報は読み取りユニット２２５内それぞれの読み取りユニットアドレス２２３および長さを含む。いくつかの実施形態では、長さおよび／またはスパンは、スパンからのオフセットとしての長さを格納するなどにより、例えば、読み取りユニット２２５内の長さのすべてまたは任意の部分が、エンコードされ保存される。さらなる実施形態では、第１のＬＰＮは第１のマップエントリに関連付けられ、第２のＬＰＮ（第１のＬＰＮは異なるが、第１のＬＰＮによって参照される論理ページと同じサイズの論理ページを参照）は第２のマップエントリに関連付けられ、第１のマップエントリの読み取りユニット内それぞれの長さは第２のマップエントリの読み取りユニット内それぞれの長さとは異なる。
【０２０１】
様々な実施形態では、同じ時点で、第１のＬＰＮは第１のマップエントリに関連付けられ、第２のＬＰＮ（第１のＬＰＮとは異なる）は第２のマップエントリに関連付けられ、第１のマップエントリのそれぞれの読み取りユニットアドレスは第２のマップエントリのそれぞれの読み取りユニットアドレスと同じである。さらなる実施形態では、第１のＬＰＮに関連付けられたデータおよび第２のＬＰＮに関連付けられたデータの両方はＮＶＭ１９９の同じデバイスの同じ物理ページに格納される。
【０２０２】
様々な実施形態によれば、読み取りユニットのアドレス２２３は、ＮＶＭ内の開始アドレス、ＮＶＭ内の終了アドレス、前述のいずれかのオフセット、およびＬＰＮ２１３に関連付けられたＮＶＭの部分を識別するための任意の他の技術の１つ以上に関連付けられる。
【０２０３】
図３は、読み取りユニットの素量で測定された長さを一括して有する、種々の読み取りユニットとして編成された読み取りデータを生成する読み取りユニットアドレスでＮＶＭへのアクセスをする一実施形態の選択された詳細を示す。様々な実施形態によれば、第１の読み取りユニット３１３は、ＮＶＭのアドレス空間の最下位アドレスの読み取りデータ３１１内の読み取りユニットの１つ、読み取りユニットの固定された１つ、読み取りユニットの任意の１つ、読み取りユニットの可変な１つ、および任意の他の技術によって選択された読み取りユニットの１つの１つ以上である。様々な実施形態では、ＳＳＤコントローラ１００は、ＮＶＭ１９９にアクセスし、読み取りユニット２２５内の長さで指定された読み取りユニットの数を超えずに読み取ることで読み取りデータ３１１を生成することが可能となっている。
【０２０４】
図４Ａは、読み取りユニット４０１Ａとしての読み取りユニット（図３の読み取りユニット３１３または３１５など）の実施形態の選択された詳細を示す。様々な実施形態および／または使用シナリオでは、ヘッダ１  ４１１ＡからヘッダＮ  ４１９Ａは連続しており、ヘッダ各々により（それぞれのオフセットなどを介して）識別されるデータ領域それぞれはヘッダの最後の後に連続している。データ領域は全体としてデータバイト４２１Ａを形成する。データ領域はヘッダが格納される場所の順序と一致する場所の順序で格納される。例えば、読み取りユニット開始時の、第１のヘッダに連続して続く第２のヘッダおよび第３のヘッダとともに第１のヘッダを考えてみる。第１のデータ領域（第１のヘッダ内の第１のオフセットにより識別される）は第３のヘッダに連続して続く。第２のデータ領域（第２のヘッダの第２のオフセットにより識別される）は第１のデータ領域に連続して続く。同様に、第３のデータ領域（第３のヘッダにより識別される）は第２のデータ領域に連続して続く。
【０２０５】
図４Ｂは、読み取りユニット４０１Ｂとしての読み取りユニット（図３の読み取りユニット３１３または３１５など）の別の実施形態の選択された詳細を示す。様々な実施形態および／または使用シナリオでは、ヘッダマーカ（ＨＭ）４１０Ｂは、次の連続したヘッダ（ヘッダ１  ４１１Ｂ、ヘッダ２  ４１２Ｂ．．．ヘッダＮ  ４１９Ｂ）の数を示すオプションの初期フィールド（１バイトフィールドなど）である。データ領域（データバイト４２１Ｂ、データバイト４２２Ｂ．．．データバイト４２９Ｂ）はそれぞれヘッダ（ヘッダ１  ４１１Ｂ、ヘッダ２  ４１２Ｂ．．．ヘッダＮ  ４１９Ｂ）により識別され、ヘッダが格納される場所の順序と反対の場所の順序で格納される。対応するデータ領域が読み取りユニットの終了時に開始する一方、ヘッダは読み取りユニットの開始時に開始する。他の実施形態では、データバイトは逆順（場所の順序に対して反転したバイト順序）で配置される一方、いくつかの実施形態では、データ領域（例えば、データバイト４２１Ｂ、データバイト４２２Ｂ．．．データバイト４２９Ｂ）内のデータバイトは正順（バイト順序に一致する場所の順序）に配置される。いくつかの実施形態では、ヘッダマーカはヘッダとデータバイトが同じ場所の順序（例えば、図４Ａに示すように）で格納される読み取りユニット内で使用される。
【０２０６】
いくつかの実施形態では、オプションのパディングバイト４３１Ａ（または４３１Ｂ）は特定のＬＰＮに関連するデータの細分性（粒度）に依っている。例えば、いくつかの実施形態では、データバイト４２１Ａ（または集合的にデータバイト４２１Ｂ、データバイト４２２Ｂ．．．データバイト４２９Ｂ）が、ヘッダ１  ４１１ＡからヘッダＮ  ４１９Ａ（またはヘッダ１  ４１１Ｂ、ヘッダ２  ４１２Ｂ．．．ヘッダＮ  ４１９Ｂ）の最後のもの以外すべてに関連するデータを格納した後に、８バイトなどの残りの領域の一定量未満である場合は、最後のヘッダに関連付けられたＬＰＮのデータは後続の読み取りユニットで開始する。さらなる実施形態では、最後のヘッダ内の特定のオフセット値（例えば、すべてのものなど）は最後のヘッダに関連付けられたＬＰＮのデータが後続の読み取りユニットで開始していることを示す。
【０２０７】
図５は、フィールド数を有するヘッダ（図４Ａのヘッダ１  ４１１ＡからヘッダＮ  ４１９Ａ、または図４Ｂのヘッダ１  ４１１Ｂからヘッダ  ４１９Ｂのいずれかなど）の実施形態の選択された詳細を示す。いくつかの実施形態では、ヘッダは固定長である（例えば、各ヘッダは同じ数のバイト長である）。ヘッダ５０１は、フィールドタイプ５１１、最後のインジケータ５１３、フラグ５１５、ＬＰＮ５１７、長さ５１９、およびオフセット５２１を含む。タイプフィールドはデータバイトのカテゴリを識別する。例えば、タイプフィールドは、データバイトのカテゴリがホストデータ（例えば、論理ページデータ）またはシステムデータ（例えば、マップ情報またはチェックポイント情報）のいずれかであることを示す。最後のフィールドはヘッダがデータバイトの前の最後のヘッダであることを示す。ヘッダマーカを有するいくつかの実施形態では、最後のフィールドは必要に応じて省略される。ＬＰＮフィールドはヘッダが関連付けられているＬＰＮである。ＬＰＮフィールドは、例えば、特定のＬＰＮにマッチングするＬＰＮフィールドを有するヘッダを検索することにより、特定のＬＰＮに関連付けられているヘッダの特定の１つを決定するためにヘッダを解析することを可能にする。長さフィールドはデータバイトのバイト数での長さである（例えば、ヘッダ５０１に関連付けられたデータバイト４２１Ａが何バイトのデータであるか）。いくつかの実施形態では、オフセットフィールドのオフセットは特定の粒度（例えば、８バイト粒度）に応じて丸められる。
【０２０８】
様々な実施形態では、特定のＬＰＮに関連付けられたいくつかまたはすべての情報は、特定のＬＰＮに関連付けられたマップエントリ、特定のＬＰＮに関連付けられたヘッダ、またはその両方に格納される。例えば、いくつかの実施形態では、長さ５１９の一部またはすべてはヘッダではなくマップエントリに格納される。
【０２０９】
図６は、複数のＮＶＭデバイスの、ブロック、ページ、および読み取りユニットの一実施形態の選択された詳細を示す。例えば、６０１、６０３．．．および６０９は、図１Ａの１若しくはそれ以上の個々のフラッシュダイ１９４のそれぞれに応答している。
【０２１０】
いくつかの実施形態では、デバイス６０１、６０３．．．および６０９はＮＶＭ１９９のすべてよりも小さな部分である。例えば、様々な実施形態では、データはデバイスの複数のグループに渡って独立してストライピングされ、デバイスのグループの各々は独立してアクセス可能である。
【０２１１】
各デバイス（デバイス６０１、６０３．．．および６０９のいずれかなど）はブロックとして編成されたストレージを提供する（デバイス６０１のブロック６３１、６３３．．．および６３９、デバイス６０３のブロック６６１、６６３．．．および６６９、など）。いくつかの実施形態では、各デバイスは整数値のブロックを含み、ブロックは消去の最小素量である。ブロックは順番にページ（ブロック６３１のページ６２１、６２３．．．および６２９、ブロック６６１のページ６５１、６５３．．．および６５９など）を含む。いくつかの実施形態では、各ブロックは整数値のページを含み、ページは書き込みの最小素量である。ページは順番に読み取りユニット（ページ６２１の読み取りユニット６１１、６１３．．．および６１９、ページ６５１の読み取りユニット６４１、６４３．．．および６４９など）を含む。様々な実施形態によれば、読み取りユニットは読み取りおよび誤り訂正の最小素量であり、各ページは整数値の読み取りユニットを含み、２つ以上のページの関連するグループは整数値の読み取りユニットを含み、および読み取りユニットは必要に応じておよび／または選択的にページ境界に跨る、の１つ以上が行われる。デバイス内での情報の読み取りおよび／または書き込みは、「読み取りユニット先行」順序または「ページ先行」順序などの順序に従って実行される。図に示す読み取りユニットのための読み取りユニット先行順序の例は、読み取りユニット６１１で始まり６４１、．．．、６７１、６１３、６４３、．．．、６７３、などが続いて、６７９で終わる。図に示す読み取りユニットのためのページ先行順序の例は、読み取りユニット６１１で始まり６１３、．．．、６１９、６４１、６４３、．．．、６４９、６７１、６７３、などが続いて、６７９で終わる。
【０２１２】
いくつかの実施形態では、様々なＮＶＭ管理機能はＲ−ブロック単位で行われる。Ｒ−ブロックの例はフラッシュメモリのすべてのダイに渡る論理スライスまたはセクションである。例えば、各フラッシュダイがＮ個のブロックを有するＲフラッシュダイを有するフラッシュメモリ内では、各Ｒ−ブロックはＮ個のＲ−ブロックの合計に対してまとめるとフラッシュダイ各々からｉ番目のブロックである。別の例では、各々がＮ個のブロックを有するＲフラッシュダイを有するフラッシュメモリでは、各Ｒ−ブロックはＮ／２個のＲ−ブロックの合計に対してフラッシュダイの各々からｉ番目および（ｉ＋１）番目のブロックである。さらに別の例では、複数のデュアルプレーンデバイスを有するフラッシュメモリでは、各Ｒブロックはデュアルプレーンデバイスの各々からｉ番目の偶数ブロックおよびｉ番目の奇数ブロックである。
【０２１３】
上位レベルの冗長性技術
図７は、上位レベルの冗長性技術の様々な実施形態の選択された詳細を示す。フラッシュデバイス７２０は６４個のフラッシュダイ（フラッシュダイ７１０．６３、７１０．６２、７１０．６１．．．７１０．０）を含み、インターフェースチャネル７３０を介して通信する。エクストラ・フラッシュ・デバイス７４０は２個までのフラッシュダイ（フラッシュダイ７１０．６５および７１０．６４）を含み、エクストラ・インターフェース・チャネル７５０を介して通信する。フラッシュダイはＳＳＤ内のＮＶＭなどのストレージサブシステム内に上位レベルの冗長情報とデータストレージ（例えば、ユーザデータおよび／またはユーザ空き領域）のためのストレージを提供する。（冗長情報およびデータストレージのコンテキストにおける「ユーザデータ」の例は、オペレーティング・システム・データ、アプリケーションデータ、ＳＳＤ管理データなど後の検索のためにフラッシュメモリに格納された冗長情報以外のすべてのデータを含む。）上位レベルの冗長性は、例えば、読み取り動作用に誤り訂正されたデータを提供することに失敗する（例えば、下位レベルのＥＣＣ機能を介して）または書き込み動作を適切に完了することに失敗するなどの、１若しくはそれ以上のフラッシュダイの１若しくはそれ以上の部分の断続的または永続的な障害からの復旧を可能にする。
【０２１４】
例えば、各フラッシュダイ（または代替的に各ブロックまたは各ブロック内の各ページ）はシリコン独立素子の冗長アレイ（ＲＡＳＩＥ）のコンテキスト内で動作する。障害が特定のフラッシュダイ（例えば、特定のダイのブロックの一部のＥＣＣ訂正不可能読み取り誤りに起因する）で検出された場合、その後応答して、フラッシュダイの他の部分に格納された冗長情報は、その特定のダイにより提供されていた情報を決定するために使用される。いくつかの実施形態および／または使用シナリオでは、十分冗長な情報が１つのフラッシュダイ（シングル動作時）内の１つの障害からの復旧を可能にするために格納される。単一障害からの復旧を可能にするモードでの動作は、いくつかの実施形態では、上位レベルの冗長情報のための１つのフラッシュダイと同等である空間を割り当てるおよび管理することを含み、「ＲＡＳＩＥ−１」と呼ばれる。２つの障害からの復旧を可能にするモードでの動作は、いくつかの実施形態では、上位レベルの冗長情報のための２つのフラッシュダイと同等である空間を割り当てるおよび管理することを含み、「ＲＡＳＩＥ−２」と呼ばれる。
【０２１５】
いくつかの実施形態および／または使用シナリオでは、ダイレベルの障害を管理することが目的であり、ダイの間で情報を広めることが行われる。例えば、上位レベルの冗長情報は具体的に上位レベルの冗長情報のみに割り当てられた１若しくはそれ以上のダイに格納される。いくつかの実施形態および／または使用シナリオでは、ブロックレベルの障害を管理するすることが目的であり、ダイ内のブロックの間で情報を広めることが行われる。例えば、割り当てはブロックがどの特定のダイの一部であるかに関係なく、上位レベルの冗長情報は上位レベルの冗長情報に割り当てられた１若しくはそれ以上のブロックに格納される。いくつかの実施形態および／または使用シナリオでは、特定のエンティティレベルの障害を管理することはＮ個以下の要素（例えば、ＲＡＳＩＥ−１に対する１およびＲＡＳＩＥ−２に対する２）は特定のエンティティのいずれかになるように情報を広めることを含む。
【０２１６】
上位レベルの冗長情報は計算されフラッシュダイに書き込まれた（ユーザ）データに従って書き込まれ、これにより障害が検出されたときに情報を提供することが可能である。様々な実施形態では、上位レベルの冗長情報は、上位レベルの冗長情報が関連付けられている（ユーザ）データの書き込みに対してその前、その後、または不特定の時間順序でフラッシュダイに書き込まれる。
【０２１７】
図はＲＡＳＩＥ動作モードの様々な実施形態を示し、以下の表に纏められる。
【０２１８】
【表３】
0005980798.tif 000009
【０２１９】
より具体的には、ＲＡＳＩＥ−１モードでは、１つのダイと同等な領域が上位レベルの冗長情報に割り当てられる。ＲＡＳＩＥ−１モード１−０では、６３個のダイ（フラッシュダイ７１０．６２．．．７１０．０）をデータストレージ（例えば、ユーザデータおよび／またはユーザの空き領域）用に利用可能として残し、上位レベルの冗長情報がフラッシュデバイス７２０のいずれかのダイ（例えば、フラッシュダイ７１０．６３）に格納されるため、エクストラ・フラッシュ・デバイス７４０は使用されない。ＲＡＳＩＥ−１モード１−１では、フラッシュデバイス７２０のすべて（６４個のダイ）をデータストレージ用に利用可能として残し、エクストラ・フラッシュ・デバイス７４０の１つのダイ（例えば、フラッシュダイ７１０．６４）が使用される。
【０２２０】
ＲＡＳＩＥ−２モードでは、２個のダイと同等な領域が上位レベルの冗長情報に割り当てられる。ＲＡＳＩＥ−２モード２−０では、６２個のダイ（フラッシュダイ７１０．６１．．．７１０．０）をデータストレージ用に利用可能として残し、上位レベルの冗長情報がフラッシュデバイス７２０の２つのダイ（例えばフラッシュダイ７１０．６３およびフラッシュダイ７１０．６２）に格納されるため、エクストラ・フラッシュ・デバイス７４０は使用されない。ＲＡＳＩＥ−２モード２−１では、６３個のダイ（フラッシュダイ７１０．６２．．．７１０．０）をデータストレージ用に利用可能として残し、上位レベルの冗長情報がフラッシュデバイス７２０の１つのダイ（例えばフラッシュダイ７１０．６３）に部分的に格納されるため、エクストラ・フラッシュ・デバイス７４０の１つのダイ（例えば、フラッシュダイ７１０．６４）が使用される。ＲＡＳＩＥ−２モード２−２では、フラッシュデバイス７２０のすべて（６４個のダイ）をデータストレージ用に利用可能として残し、エクストラ・フラッシュ・デバイス７４０の２つのダイ（例えばフラッシュダイ７１０．６５およびフラッシュダイ７１０．６４）は使用される。
【０２２１】
いくつかの実施形態では、すべての利用シナリオで使用されないダイは未実装である。例えば、ＲＡＳＩＥ ２−０モードおよびＲＡＳＩＥ １−０モードのみ（ただし、他のＲＡＳＩＥモードではなく）で動作可能なシステムでは、エクストラ・フラッシュ・デバイス７４０は未実装である。
【０２２２】
いくつかの実施形態では、上位レベルの冗長情報は全体が「専用の」ダイ（例えば、ＲＡＳＩＥ−１モード１−０ではフラッシュダイ７１０．６３またはＲＡＳＩＥ−２モード２−２ではフラッシュダイ７１０．６５およびフラッシュダイ７１０．６４）に格納される。他の実施形態では、上位レベルの冗長情報はダイのいずれかに格納され、例えば、ＲＡＳＩＥ−１モード１−０では、フラッシュダイ７１０．６３およびフラッシュダイ７１０．６１．．．７１０．０はデータストレージ用に使用される一方、フラッシュダイ７１０．６２は上位レベルの冗長情報用に使用される。いくつかの実施形態および／または使用シナリオでは、上位レベルの冗長情報は異なるダイ（および／またはその一部）に経時的に格納され、例えば、第２の期間に第２のフラッシュダイが上位レベルの冗長情報を保持する一方、第１の期間に第１のフラッシュダイが上位レベルの冗長情報を保持する。
【０２２３】
種々の実施形態では、いくつのフラッシュダイが使用可能であるかに応じて複数のＲＡＳＩＥ  １−０モード（および複数のＲＡＳＩＥ  ２−０モード）がある。例えば、第１のＲＡＳＩＥ  １−０モード（上記の表に示される）では、フラッシュダイ７１０．６３に上位レベルの冗長情報を格納し、フラッシュダイ７１０．６２．．．７１０．０はデータストレージ用に利用可能である。第２のＲＡＳＩＥ  １−０モードでは、フラッシュダイ７１０．６３がもはや使用できなくなり、フラッシュダイ７１０．６２に上位レベルの冗長情報を格納し、データストレージの使用可能量はダイ１つ分減少し、フラッシュダイ７１０．６１．．．７１０．０はデータストレージ用に利用可能である。ダイが上位レベルの冗長情報用に使用されることにより、以前はデータストレージ用に使用可能であったダイ（またはその一部分）がもはやデータストレージ用に利用できないＲＡＳＩＥモードは時に低減容量ＲＡＳＩＥモードと呼ばれる。
【０２２４】
いくつかの実施形態では、上位レベルの冗長情報は、上位レベルの冗長情報により保護されるユーザデータと同じおよび／または類似の下位レベルの誤り訂正符号化方式を用いて格納される。上位レベルの冗長情報を保護するために下位レベルの誤り訂正方式を使用することは、ユーザデータで訂正不可能な下位レベルの誤りを判断するのと同じおよび／または同様の方法で、上位レベルの冗長情報で訂正不可能な誤りがあるかどうかを判断することを可能にする。
【０２２５】
図７Ｂは、Ｒ−ブロックの実施形態の選択された詳細を示す。フラッシュダイはすべてのダイに渡って論理スライスまたはセクションで管理され（リサイクルおよび／ または消去するためなど）、スライス／セクションはＲ−ブロックと呼ばれる。図は６６個のフラッシュダイ（フラッシュダイ７１０．６５．．．７１０．０）の実施形態を示す。ブロック、ページ、およびＲ−ブロックとしてのブロックの管理が示される。各フラッシュダイはＮ個のブロック（フラッシュダイ７１０．６５のブロック７１０．６５Ｂ０、ブロック７１０．６５Ｂ１．．．ブロック７１０．６５ＢＢなど）を有するものとして示される。各Ｒ−ブロックはまとめると各フラッシュダイからｉ番目のブロックである（フラッシュダイ７１０．６５からブロック７１０．６５Ｂ０であるＲ−ブロック７６０．０、フラッシュダイ７１０．６４からブロック０（明示的に示されない）、以下同様にフラッシュダイ７１０．０のブロック７１０．０Ｂ０まで。このように合計Ｎ個のＲ−ブロック（Ｒ−ブロック７６０．０）、Ｒ−ブロック７６０．１．．．Ｒ−ブロック７６０.Ｒ）がある。
【０２２６】
様々な実施形態では、Ｒ−ブロック内のデータの書き込みおよび／またはストライピング順序は、すべてのデバイスに渡って（例えば、図６のストライピング方向６００により概念的に提案されるように、最下位から最上位番号のデバイスに、）Ｒ−ブロックのページ（例えば、最下位から最上位）が最初であり、その後次の最上位ページ（すべてのデバイスに渡って）、以下同様に最後のページまで続く。具体的に図７のＲ−ブロック７６０．０に関して、例示の順序はページ７１０．０Ｐ０から始まり、フラッシュダイ７１０．１の最初のブロックの最初のページが続き、以下同様にページ７１０．６５Ｐ０まで続く。例示の順序はページ７１０．０Ｐ１が続き、フラッシュダイ７１０．１の最初のブロックの第２のページが続き、以下同様にページ７１０．６５Ｐ１まで続く。例示の順序はページ７１０．０ＰＰで完了し、フラッシュダイ７１０．１の最初のブロックの最後のページが続き、以下同様にページ７１０．６５ＰＰで終わる。
【０２２７】
Ｒ−ブロックのもう１つの例は、まとめるとフラッシュダイの各々からｉ番目および（ｉ＋１）番目のブロックである（例えば、フラッシュダイ７１０．６５からブロック０および１、フラッシュダイ７１０．６４からブロック０および１、以下同様にフラッシュダイ７１０．０からブロック０および１）。このように、各フラッシュダイ内にＮ個のブロックがある場合は、Ｎ／２個のＲ−ブロックがある。さらにＲ−ブロックの他の例示は複数のデュアルプレーンデバイスの各々からｉ番目の偶数および奇数ブロックである。Ｒ−ブロックとしての管理のためのフラッシュダイブロックの他の編成は、いくつかのブロックが動作不能である場合でも、Ｒ−ブロックが各ダイから１つのブロックを有することを保証するために仮想および物理ブロックアドレスの間のマッピングを含めて、考えられている。様々な実施形態では、各フラッシュダイ内のＮ個のブロックのいくつかは、仮想および物理ブロックアドレスの間のマッピングがＲ−ブロック内のブロックの欠陥のあるものを置き換えるためにスペア（もしくは未使用）ブロックを有するようにスペアとして使用される。
【０２２８】
ブロックがペアまたはＲ−ブロックを形成する一部として他の関連付けられたグループで扱われる様々な実施形態では、ブロックの関連するグループの各ブロックからページそれぞれは、少なくとも書き込みする、より大きなマルチブロックページを形成するためにユニットとしても扱われる。例えば、上記のデュアルプレーンの例示を続けると、偶数ブロックの特定の１つの最初のページおよび奇数ブロックの関連する１つの最初のページは書き込み用のユニットとして、および必要に応じておよび／または選択的に読み取り用のユニットとして扱われる。同様に、特定の偶数ブロックの第２のページおよび関連する奇数ブロックの第２のページはユニットとして扱われる。様々な実施形態によれば、本明細書で使用されるＮＶＭのページは、ＮＶＭの単一ページ、ＮＶＭのマルチブロックページ、読み取りのための１若しくはそれ以上の個々のページとして必要に応じておよび／または選択的に扱われる書き込み用のＮＶＭのマルチブロックページ、およびＮＶＭのページの他のグルーピングまたは関連付けの１つ以上を意味する。
【０２２９】
いくつかの実施形態では、上位レベルの冗長情報はデータの異なる部分に対して異なるダイ内に格納される。例えば、フラッシュダイがＲ−ブロック内で管理されるいくつかの実施形態では、上位レベルの冗長情報は異なるＲ−ブロックに対して異なるフラッシュダイに格納される。例えば、フラッシュダイ７１０．０のブロック１を含むＲ−ブロックに対する上位レベルの冗長情報はフラッシュダイ７１０．１に格納される一方、フラッシュダイ７１０．０のブロック０を含むＲ−ブロックに対する上位レベルの冗長情報はフラッシュダイ７１０．０に格納され、以下同様である。フラッシュダイがＲ−ブロックで管理されるいくつかの実施形態などのいくつかの実施形態では、上位レベルの冗長情報は上位レベルの冗長情報が依存することが分かっているデータの後におよび／またはデータが書き込まれた後に書き込まれる。
【０２３０】
いくつかの使用シナリオでは、ＮＶＭ素子の１若しくはそれ以上の部分（例えば、図６のデバイス６０１のブロック６３９などのデバイスのブロック）は動作不能であるか、または動作中になる。いくつかの実施形態では、動作不能部分は仮想および物理ブロックアドレスを介してマップアウトされる（例えば、図１Ａのマップ１４１および／またはテーブル１４３を介して実行される処理などを介して）。あるいは、動作不能部分は（明示的にマップアウトされるというよりも）スキップされる。Ｒ−ブロックに基づいたいくつかの実施形態では、スキップした結果いくつかのＲ−ブロックは異なる数のブロックを有することになる。例えば、ブロック７１０．０Ｂ０が不良であり使用できない場合は、Ｒ−ブロック７６０．０はＲ−ブロック７６０．１よりも１つ少ないブロックを有する。上位レベルの冗長情報は、例えば、各Ｒ−ブロックの最後のブロックである（Ｒ−ブロック当たり）可変の場所に書き込まれる。
【０２３１】
様々な実施形態では、図７Ａの１若しくはそれ以上の要素は図１Ａの１若しくはそれ以上の要素に対応する。例えば、フラッシュデバイス７２０およびエクストラ・フラッシュ・デバイス７４０はまとめてＮＶＭ１９９に対応し、インターフェースチャネル７３０およびエクストラ・インターフェース・チャネル７５０はまとめてデバイスインターフェース１９０に対応する。別の実施例では、フラッシュダイ７１０．６５．．．７１０．０はまとめてフラッシュダイ１９４のインスタンスに対応する。さらに別の実施例では、フラッシュデバイス７２０の１若しくはそれ以上のフラッシュデバイスおよび／またはエクストラ・フラッシュ・デバイス７４０はフラッシュデバイス１９２の１若しくはそれ以上のインスタンスに対応する。様々な実施形態では、図１Ａの１若しくはそれ以上の要素は上位レベルの冗長情報を管理し、および／または本明細書にて説明のＲＡＳＩＥ動作モードに従って上位レベルの冗長情報に少なくとも部分的に基づいてユーザデータを復旧する。例えば、ＣＰＵ１７１のソフトウェア実行機能の一部は、様々なＲＡＳＩＥ動作モードに従って上位レベルの冗長情報の計算を管理するために使用される。別の実施例では、データ処理１２１および／またはＥＣＣ−Ｘ１３５は、上位レベルの冗長情報の計算および／または様々なＲＡＳＩＥ動作モードに従ったユーザデータの復旧のための専用および／または特化されたハードウェア要素を含む。さらに別の実施例では、ＥＣＣ１６１はフラッシュダイの一部のＥＣＣ−訂正不可能（下位レベル）読み取り誤りを検出し、ＥＣＣ−Ｘ１３５はＲＡＳＩＥ（上位レベル）読み取り誤りを検出するおよび／または訂正することができる。
【０２３２】
様々な実施形態では、インターフェースチャネル７３０は多様に１個、４個,８個、または１６個のチャネルを有し、エクストラ・インターフェース・チャネル７５０は多様に１個または２個のチャネルを有する。様々な実施形態では、フラッシュデバイス７２０は１個、２個、４個、８個または１６個のデバイスとして実装され、各々は６４個、３２個、１６個、８個、４個のフラッシュダイをそれぞれ有する。様々な実施形態では、エクストラ・フラッシュ・デバイス７４０は、1つまたは２つのダイを有する１つのデバイスとしてまたは各々が１つのダイを有する２つのデバイスとして実装される。いくつかの実施形態では、エクストラ・フラッシュ・デバイス７４０のフラッシュダイはフラッシュデバイス７２０のフラッシュダイをも実装するデバイス内に実装される。例えば、１つのフラッシュデバイスは６６個のフラッシュダイ（フラッシュダイ７１０．６５．．．７１０．０）を実装する。別の実施例では、２つのフラッシュデバイス各々は、例えば、第１のフラッシュデバイス内（フラッシュダイ７１０．６５．．．７１０．３３）および第２のフラッシュデバイス内（フラッシュダイ７１０．３２．．．７１０．０）など、３３個のフラッシュダイを実装する。フラッシュダイおよびフラッシュデバイスの他の編成も考えられる。フラッシュデバイス７２０のフラッシュダイをも実装するデバイス内に実装されたエクストラ・フラッシュ・デバイス７４０を有するいくつかの実施形態では、フラッシュダイは共有インターフェースチャネルを介して、あるいはフラッシュダイの特定のもの（またはセット）に専用のインターフェースチャネルを介して通信する。フラッシュデバイス７２０およびエクストラ・フラッシュ・デバイス７４０がフラッシュダイの具体的な数字（それぞれ２および６４）で示されている一方、他の実施形態はフラッシュデバイス７２０が２個、４個、８個、１６個、３２個、または１２８個のフラッシュダイを有する、および／またはエクストラ・フラッシュ・デバイス７４０が０個、１個、または４個のフラッシュダイを有すると考えられる。
【０２３３】
図８は、図７Ａおよび／または図７Ｂに示される様々な実施形態により可能となるＲＡＳＩＥモード間の動的切り換えなどの、ＲＡＳＩＥでの動的な上位レベルの冗長モード管理の実施形態の選択された詳細を示す。いくつかの実施形態および／または使用シナリオでは、ストレージサブシステム（例えば、ＳＳＤ）が第１の上位レベルの冗長モードでの動作から第２の上位レベルの冗長モードでの動作に動的に切り替える許容できるサービス低下の形成が提供される。切り替えは、フラッシュダイ全体またはその１若しくはそれ以上の部分の恒久的または断続的な機能不全、または動作（読み取りまたは書き込み動作など）などの障害の検出に対応する。様々な実施形態によれば、切り替えは、ＳＳＤ全体での実行、ＳＳＤの１若しくはそれ以上のサブセット上での実行、およびＳＳＤの１若しくはそれ以上のＲ−ブロック上での実行のうちの１つ以上である。例えば、ＲＡＳＩＥ−２情報を格納するＮＶＭデバイスの１つの特定のブロックがプログラミング中に障害が発生した場合、ＳＳＤ内の他のＲ−ブロックは影響を受けずにＲＡＳＩＥ−２モードで動作し続ける一方、特定の（障害が発生した）ブロックを含むＲ−ブロックのその後の動作は異なる上位レベルの冗長モード（例えば、ＲＡＳＩＥ−１モード）に切り替える。
【０２３４】
図８に関して、処理は、第１の上位レベルの冗長モード（第１の上位レベルの冗長モード８０２での動作）に従ってフラッシュダイに割り当てられた上位レベルの冗長情報およびデータストレージ（例えば、ユーザデータおよび／またはユーザ空き領域）で始まる。次に、フローは下位レベルの訂正不可能な読み取り誤りまたは書き込み／プログラムの障害などの、障害が検出されているか（障害？８０３）どうかを判断することに進む。障害が検出されなかった場合には、次にフローは第１の上位レベルの冗長モードで動作を継続することに戻る。障害が検出された場合には、次にフローは第１の上位レベルの冗長モードでの動作から第２の上位レベルの冗長モードでの動作への切り換えに進む。切り換えは（オプションで）障害が占めるデータストレージ用の利用可能な領域を減少すること（空き領域８０４の減少）から始まる。第２の上位レベルの冗長モードが第１の上位レベルの冗長モードよりも十分に少ない上位レベルの冗長情報を使用する場合、使用可能な領域の減少は省略される。切り換えは第２の上位レベルの冗長モードに従ってデータストレージを再編成（データストレージ８０５を再編成）することに続く。再編成は、必要に応じて、障害が発生したフラッシュダイからすべてのユーザデータおよび／またはユーザの空き領域をフラッシュダイの別の場所に移動させることを含む（いくつかの実施形態では、ユーザ空き領域の移動はポインタおよび／または他のデータ構造要素を操作することにより達成される）。切り換えは、第１の上位レベルの冗長モードの上位レベルの冗長情報を介して、障害が発生したフラッシュダイに格納されていたユーザデータを選択的に復元する（可能であれば）こと、および第２の上位レベルの冗長モード（障害発生ユーザデータ８０６を復旧／格納）に従って、復元されたユーザデータをフラッシュダイの別の場所に書き込むことにさらに続く。障害が書き込み／プログラム障害である場合には復元は省略される。切り換えは、必要に応じて第２の上位レベルの冗長モード（訂正された上位レベルの冗長情報８０７を決定／格納）に従って上位レベルの冗長情報を計算しフラッシュダイに書き込むことにさらに続く。第１の上位レベルの冗長モードでの動作で所定の場所に以前にあった上位レベルの冗長情報で第２の上位レベルの冗長モードが動作可能である場合、計算および書き込みは省略される。その後、動作は第２の上位レベルの冗長モード（第２の上位レベルの冗長モード８０８での動作）で始まる。
【０２３５】
障害検出（障害？８０３）は、下位レベルの誤り訂正（例えば、１若しくはそれ以上のＥＣＣ技術に従って）、上位レベルの誤り訂正（例えば、１若しくはそれ以上のＲＡＳＩＥ技術に従って）、および１若しくはそれ以上のフラッシュダイまたはその部分により報告される障害発生ステータスの１つ以上を介して行われる。例えば、特定のフラッシュダイの特定の部分内の読み取りの下位レベルの訂正のしきい値数以上は、必要に応じておよび／または条件付きで特定のフラッシュダイ（または特定の部分）が障害が発生したとして扱われる結果となり、障害が発生したフラッシュダイ（またはその一部）がもはや使用されないように上位レベルの冗長モード切り換えが行われる。別の実施例では、上位レベルの誤り訂正が失敗した場合に、次にフラッシュダイ（またはその一部）の適切なものが障害が発生したとして扱われ、障害が発生したフラッシュダイ（または部分）がもはや使用されなように上位レベルの冗長モード切り換えが行われる。さらに別の実施例では、フラッシュダイがプログラム障害状態（書き込み動作が不成功したことを示す）に戻る場合、次にフラッシュダイの適切なものの適切なブロックが故障として扱われ、故障フラッシュダイがもはや使用されないように必要に応じておよび／または条件付きで上位レベルの冗長モード切り換えが行われる。
【０２３６】
いくつかの実施形態では、障害が発生したブロックは、仮想および物理ブロックアドレス（例えば、図１Ａのマップ１４１および／またはテーブル１４３を介して行われる処理などを介して）を介して再マッピングにより置き換えられる。スペアブロックのプールからスペアブロックが障害が発生したブロックの場所にマッピングされる。障害が発生したブロック内に書き込まれた内容は交換用のブロックにコピーされ、書き込みは障害が発生したブロック内の障害が発生した場所からスペアブロックに移る。
【０２３７】
いくつかの実施形態では、障害が発生したブロックは（明示的に再マッピングされるというよりも）スキップされ、ホールのあるＲ−ブロックが次の消去時（再書き込みのため準備中）に必要に応じておよび／または条件付きで結果として上位レベルの冗長モード切り換えとなる「ホール」に結果としてなる。ホールがデータ格納用の場所にある場合、その後切り換えは行われず、ホールは残る。ホールが上位レベルの冗長情報のための場所にある場合は、次に上位レベルの冗長情報が別の場所に格納され、必要に応じて上位レベルの冗長モードが切り換えられる。
【０２３８】
いくつかの実施形態および／または使用シナリオでは、障害が発生した場所のフラッシュダイに格納されていたユーザデータの復元はできない。例えば、障害が、上位レベルの誤り訂正および／または１若しくはそれ以上のフラッシュメモリダイまたはその一部によって報告された障害のステータスのいくつかの種類を介して検出された障害のいくつかの種類に起因している場合、いくつかのユーザデータは失われる可能性がある。
【０２３９】
いくつかの実施形態では、図８の処理は、複数の故障に応答して上位レベルの冗長モード間の動的な切り替えのコンテキスト（例えば、ＳＳＤコントローラ）で行われる。具体的には、ＳＳＤコントローラは、第１の上位レベルの冗長モードでの動作を開始し、第１の障害に応答して第２の上位レベルの冗長モードへ動的に切り替わり、そして次に第２の障害に応答して第２の上位レベルの冗長モードから第３の上位レベルの冗長モードに動的に切り替わり、以下同様に続く。例えば、ＳＳＤコントローラはＲＡＳＩＥ−２モード２−２に従って様々なフラッシュダイを動作させ、第１の障害に応答してＲＡＳＩＥ−２モード２−１に従うように動作を動的に切り替える。続いて、ＳＳＤコントローラは第２の障害に応答してＲＡＳＩＥ−２モード２−０に従うように動作を動的に切り替える。さらにそれに続いて、ＳＳＤコントローラは第３の障害に応答してＲＡＳＩＥ−１低減容量モード１−０に従うように動作を動的に切り替える（低減容量モード１−０は、１個のフラッシュダイが上位レベルの冗長情報のために使用され、６２個のフラッシュダイがデータストレージに使用されることを除いて、ＲＡＳＩＥ−１モード１−０と同様である）。
【０２４０】
具体的な例として、図７Ａの要素に結合されたＳＳＤコントローラ（図１ＡのＳＳＤコントローラ１００など）を考察してみると、第１の上位レベルの冗長モードでの動作に応じて、当初はＲＡＳＩＥ−２モード２−２（例えば、フラッシュダイ７１０.６５およびフラッシュダイ７１０．６４内の上位レベルの冗長情報、およびフラッシュダイ７１０．６３．．．７１０．０内のデータストレージ）で動作する。次に、１若しくはそれ以上のフラッシュダイの読み取り、あるいは書き込みが行われる。フラッシュダイの特定の１つの部分内（例えば、ユーザデータおよび／またはユーザの空き領域に使用されるフラッシュダイ７１０．６２のページ）で、訂正不可能（下位レベル）なＥＣＣの故障での読み取り、あるいは書き込みの結果は不成功に終わる。呼応して、ＳＳＤコントローラはＲＡＳＩＥ−２モード２−２での動作からＲＡＳＩＥ−２モード２−１に動的に切り換え、もはやフラッシュダイ７１０．６２のいずれをも使用しない。（ＲＡＳＩＥ−２モード２−２では６４個のダイであるのに対して）ＲＡＳＩＥ−２モード２−１での動作はデータストレージのために６３個のダイを提供するので、データストレージのための利用可能な領域は６４ダイから６３ダイに減少し、ユーザデータおよび／またはユーザの空き領域はそれに応じて移動される。例えば、ユーザの空き領域に従ってすべてのユーザデータはフラッシュダイ７１０．６２からフラッシュダイ７１０．６３およびフラッシュダイ７１０．６１．．．７１０．０の部分に移動される。訂正不可能なＥＣＣ障害を有するページ内の任意のユーザデータはフラッシュダイ７１０．６５および／またはフラッシュダイ７１０．６４内の上位レベルの冗長情報に基づいて復旧される。フラッシュダイ７１０．６３およびフラッシュダイ７１０．６１．．．７１０．０内のデータストレージに基づいた、およびＲＡＳＩＥ−２モード２−１に従った上位レベルの冗長情報は計算されフラッシュダイ７１０．６５および／またはフラッシュダイ７１０．６４に格納される。ＳＳＤコントローラはその後ＲＡＳＩＥ−２モード２−１（上位レベルの冗長情報はフラッシュダイ７１０.６５およびフラッシュダイ７１０．６４内、データストレージはフラッシュダイ７１０．６３およびフラッシュダイ７１０．６１．．． ７１０．０内）で動作する。
【０２４１】
上記では、フラッシュダイ全体の粒度の独立したシリコン素子を有する動的な上位レベルの冗長モード管理のいくつかの実施形態を説明したが、他の実施形態は、１若しくはそれ以上のページ、ブロック、またはＲ−ブロックなどの、ダイの一部である独立したシリコン素子を有する動的な上位レベルの冗長モード管理を実装する。
【０２４２】
様々な実施形態では、図８の１若しくはそれ以上の要素の処理またはそれに関係することは、図１Ａの１若しくはそれ以上の要素（またはその一部）により完全にまたは部分的に行われる。例えば、ＣＰＵ１７１のソフトウェア実行機能の一部は、データストレージ用に利用可能な領域を減少させることを指示するか、またはデータストレージの再編成を指示することなどにより、上位レベルの冗長モード間の動的な切り替えを管理するために使用される。別の実施例としては、データ処理１２１および／またはＥＣＣ−Ｘ１３５は、「目標」冗長モードに従って上位レベルの冗長情報の計算のための専用および／または特化されたハードウェア要素を含む。さらに別の実施例では、ＥＣＣ−Ｘ１３５が訂正不可能な誤りおよび／またはメモリ素子の故障の上位レベル（例えば、ＲＡＳＩＥ）誤り訂正および検出を実装する一方、ＥＣＣ１６１は訂正不可能な誤りの下位レベル（例えば、ＥＣＣ）誤り訂正および検出を実装する。別の実施例としては、（上位レベル）の冗長モード間の動的な切り替えに関連する機能の全部またはいずれかの部分は、ＥＣＣ−Ｘ１３５の１若しくはそれ以上の部分により行われる。
【０２４３】
上位レベルの冗長性および適応型下位レベルの符号化率
いくつかの実施形態および／または使用シナリオでは、下位レベルの誤り訂正は適応型符号化率（例えば、可変符号化率を用いた適応型ＥＣＣ技術）を使用する。例えば、第１の読み取りユニットは第２の符号化率で管理されている第２の読み取りユニットよりも相対的に多くの使用可能なデータビットを提供する第１の符号化率で管理されている。可変符号化率を使用する下位レベルの誤り訂正のいくつかの実施形態および／または使用シナリオでは、上位レベルの冗長情報は、上位レベルの冗長情報により保護されたデータストレージに関して相対的に多くの使用可能なデータビットまたは最も使用可能なデータビットを提供する下位レベルの誤り訂正で管理される独立したシリコン素子の部分（フラッシュダイの部分など）に格納される。様々な実施形態および／または使用シナリオでは、上位レベルの冗長情報が格納されている部分は、Ｒ−ブロック単位に基づいて、ダイ単位に基づいて、経時的に動的に、またはその任意の組み合せで変化する。様々な実施形態では、１若しくはそれ以上のダイ、Ｒ−ブロック、ブロック、および／またはページは、下位レベルの誤り訂正符号化率に関して最も使用可能なデータを有することに基づいて上位レベルの冗長データのストレージ用に選択される。
【０２４４】
例えば、上位レベルの冗長情報は、Ｒ−ブロック単位に基づいて変化する場所（ブロック位置など）に格納され、その場所（ブロックなど）は下位レベルの誤り訂正符号化率に基づいて最も利用可能なデータを有するものである。任意の実施例において、６６個のフラッシュダイの集合が各々１ブロック高さのＭ個までのＲ−ブロックの論理「スタック」として扱われる、Ｍがフラッシュダイあたりのブロック数である、図７ＡのコンテキストでＲＡＳＩＥ−２の動作モードのシナリオを考察してみる。（概念的に最も簡単なケースでは、スタック内の各Ｒ−ブロックは各ダイから同じ物理ブロック番号で構成されるが、障害が発生したブロックを収容するために、この制約は少なくともいくつかの実施形態では解除される。さらに他の実施形態では、制約は維持されるが、障害が発生したブロックに対応する「ホール」が収容される。）このように、各Ｒ−ブロックはフラッシュダイ７１０．０からフラッシュダイ７１０．６５までの各々１つに対応するブロックである６６個までのブロックを有する。（図７Ａにおいて、７１０．０から７１０．６５までの範囲内のいくつかのフラッシュダイのみが明示的に列挙されている一方、この範囲内のすべてのフラッシュダイが暗黙的に示されていることが省略記号を使用することにより理解される。）上位レベルの冗長情報は下位レベルの訂正符号化率に基づいて最も使用可能なデータを有する各Ｒ−ブロックのブロックどれでもに書き込まれる。例えば第１のＲ−ブロック内で、フラッシュダイ７１０．１５および７１０．４９に対応するブロックが下位レベルの誤り訂正符号化率に基づいてたまたま最も使用可能なデータを有する場合、上位レベルの冗長情報はそれらのブロック（フラッシュダイ７１０．１５および７１０．４９に対応する）に書き込まれる。一方第２のＲ−ブロック内で、フラッシュダイ７１０．９および７１０．３５に対応するブロックが下位レベルの誤り訂正符号化率に基づいてたまたま最も使用可能なデータを有する場合、上位レベルの冗長情報はこれらのブロック（フラッシュダイ７１０．９および７１０．３５に対応する）に書き込まれる。いくつかの実施形態では、上位レベルの冗長データは他のすべてのデータが分かった後にＲ−ブロック内に書き込まれる。
【０２４５】
図９は、１若しくはそれ以上の読み取りユニットに格納される上位レベルの冗長情報により保護された適応型（例えば、経時的におよび／または場所によって差分を取るおよび／または変化する）符号化率の下位レベルの冗長情報を有する読み取りユニット（９１１、９３１．．．９５１、９７１）の一実施形態を示す。各々の読み取りユニットはユーザデータ（９１１．Ｕ、９３１．Ｕ．．．９５１．Ｕ、９７１．Ｕ）を含むことが可能なおよび／または割り当てられた部分、および下位レベルのＥＣＣ（９１１．Ｅ、９３１．Ｅ．．．９５１．Ｅ、９７１．Ｅ）としてのＥＣＣコードの検査ビットなどの、下位レベルの冗長情報を含むことが可能なおよび／または割り当てられた残りの部分を有する。
【０２４６】
図において、縦寸法は縮尺に対して相対的であり相対的なサイズを示すものである。このように、読み取りユニット９１１および９５１は同じ第１のサイズであり（いくつかの実施形態では、すべての読み取りユニットはすべてのＮＶＭデバイスのすべてのブロック用に同じサイズである）、下位レベルのＥＣＣ部分９３１．Ｅおよび９５１．Ｅは同じ第２のサイズであり、下位レベルのＥＣＣ部分９１１．Ｅおよび９７１．Ｅは同じ第３のサイズである。読み取りユニット９３１は順番に読み取りユニット９７１よりも大きい読み取りユニット９１１および９５１よりも大きい。ユーザデータ部９３１．Ｕはユーザデータ部９５１．Ｕよりも大きい。ユーザデータ部９５１．Ｕはユーザデータ部９１１．Ｕよりも大きい。下位レベルのＥＣＣ部９５１．Ｅは下位レベルのＥＣＣ部９１１．Ｅよりも小さい。
【０２４７】
図に示すように、それぞれの読み取りユニットはそれぞれのブロックで使用される下位レベルの符号化率を変更可能にするそれぞれのサイズ、例えばＮＶＭのそれぞれのブロック単位、を有する。より具体的には、読み取りユニット９３１および９５１は同じ量の下位レベルの冗長情報（９３１．Ｅおよび９５１．Ｅは同じサイズ）を有するが、読み取りユニット９３１が読み取りユニット９５１（ユーザデータ９５１．Ｕを含む）よりも多くのユーザデータ（９３１．Ｕ）を含むので、読み取りユニット９３１の下位レベルの符号化率は読み取りユニット９５１の下位レベルの符号化率よりも高い。
【０２４８】
図に示すように、それぞれの読み取りユニットは２つ以上の同じサイズの読み取りユニットの各々内のユーザデータを様々なサイズにすることを可能にするそれぞれのユーザデータのサイズを有する。例えば、ユーザデータのサイズは、特定の読み取りユニットで使用される下位レベルの符号化率を変化させるために変更される。より具体的には、読み取りユニット９５１および９１１は同じサイズを有しているが、異なるそれぞれのユーザデータ量（９５１．Ｕおよび９１１．Ｕ）、および読み取りユニット９５１を読み取りユニット９１１よりも高い下位レベルの符号化率を持つことを可能にさせる、異なるそれぞれの下位レベルの冗長情報量（９５１．Ｅおよび９１１．Ｅ）を有する。
【０２４９】
いくつかの実施形態および／または使用シナリオでは、下位レベルの符号化率を変更することおよび／または変化させることは、ユーザデータの量を最大化しながら、下位レベルの誤り訂正の要件を達成するために、十分な量の下位レベルのＥＣＣ情報を提供することが有利に可能となる。
【０２５０】
読み取りユニット内で変化するユーザデータ量でのいくつかの実施形態では、上位レベルの冗長情報は、最大量のユーザデータを有する１若しくはそれ以上の読み取りユニット内に格納される。例えば図９では、ＲＡＳＩＥ−１モードを使用して、上位レベルの冗長情報はユーザデータ９３１．Ｕに格納され、ＲＡＳＩＥ−２モードを使用して、上位レベルの冗長情報はユーザデータ９３１．Ｕおよびユーザデータ９５１．Ｕに格納される。最大量のユーザデータ（上位レベルの冗長情報により保護される読み取りユニット中）で読み取りユニット内に上位レベルの冗長情報を格納することは、他のすべての読み取りユニット内のユーザデータを保護するのに十分な上位レベルの冗長情報があることを保証する。
【０２５１】
様々な実施形態によれば、１若しくはそれ以上の技術が、上位レベルの冗長情報により保護されるいくつかの読み取りユニットのうちどの１若しくはそれ以上の読み取りユニットが上位レベルの冗長情報を格納するために使用されるのかを決定するために使用される。最初の実施例では、最大量のユーザデータを有する最後に書き込まれた１つの（ＲＡＳＩＥ−１用）または２つの（ＲＡＳＩＥ−２用）読み取りユニットが使用される。２番目の実施例では、最大量のユーザデータを有する最初に書き込まれた１つの（ＲＡＳＩＥ−１用）または２つの（ＲＡＳＩＥ−２用）読み取りユニットが使用される。同様に、他の読み取りユニット内の残りのユーザデータのすべてを保護するように最大量のユーザデータを有する１若しくはそれ以上の読み取りユニットを確定的に選択するためのいかなる技術も、本明細書で考察される技術の範囲内にある。
【０２５２】
上位レベルの冗長情報計算技術
様々な実施形態および／または使用シナリオでは、上位レベルの冗長情報は、パリティ、ＲＳ、および／または加重和の技術などを介して、様々な技術で計算される。例えば、１つの（下位レベル）の障害からの復旧を可能にするいくつかの上位レベルの冗長モードでは（例えば、ＲＡＳＩＥ−１）、上位レベルの冗長情報はパリティ技術を介して計算される。別の実施例では、２つの（下位レベル）の障害からの復旧を可能にするいくつかの上位レベルの冗長モードでは（例えば、ＲＡＳＩＥ−２）、上位レベルの冗長情報はパリティおよびＲＳの技術の組み合せを介して計算される。上位レベルの冗長情報の第１の部分はパリティ符号を用いて計算され、第２の部分はＲＳ符号を用いて計算される。さらに別の実施例では、２つの障害からの復旧を可能にするいくつかの上位レベルの冗長モードでは（例えば、ＲＡＳＩＥ−２）、上位レベルの冗長情報はパリティおよび加重和の技術の組み合せを介して計算される。上位レベルの冗長情報の第１の部分はパリティ符号を用いて計算され、第２の部分は加重和符号を用いて計算される。上位レベルの冗長情報は、例えばＮＶＭのページの読み取りおよび書き込みを介して、上位レベルの冗長情報により保護されたデータを格納することができるＮＶＭのページに使用される下位レベルの故障検出技術と同一または同様の下位レベルの故障検出技術（ＥＣＣなど）を使用して管理される。
【０２５３】
ＲＡＳＩＥ−２のための具体的な例として、上位レベルの冗長情報の最初のページはＲ−ブロックに渡るストライプ内のすべての最初のページのＸＯＲを介して符号化パリティを使用して計算される。より具体的には、結果として上位レベルの冗長情報の最初のページの最初のバイトとなる、Ｒ−ブロックに渡るストライプ内のすべての最初のページのすべての最初のバイトのＸＯＲが行われる。同様に、上位レベルの冗長情報の２番目のバイトは、Ｒ−ブロックに渡るストライプ内のすべての最初のページのすべての２番目のバイトをＸＯＲ演算することにより形成され、以下同様にストライプ内のすべての最初のページのすべてのバイトが行われる。上位レベルの冗長情報の２番目のページは次のように加重和の手法を用いて計算される。
【０２５４】
ガロア体（例として使用）などの、有限体上で算術計算が実行される。例としては、演算対象のデータはバイト幅であり、したがってＧＦ（２５６）などのフィールドが使用されると仮定する。
【０２５５】
ストライプ内の各ページは、ユニークな非ゼロの「インデックス」を割り当てられる。インデックスの値は実装の複雑さを単純化するために選択され、および生成多項式の任意の形態に関連しない。例えば、ページは０からＮ−１のストライプ内のダイ位置により（例えば、ソフトウェアなどにより）ラベル付けされ、そのインデックスに適した値はダイ番号の１の補数である（Ｎ<２５５で提供された非ゼロであることが保証されている）。インデックス値の別の選択は、例えばハードウェアのコストを低減および／または最小化するための、最低加重の非ゼロの整数（セットビットの最小数またはクリアビットの最小数）である。いくつかの実施形態および／または使用シナリオでは、インデックス用にグレーコードされた値を選択すると、最小限の切り替えおよび／またはページが処理される電力の低減が行われる。
【０２５６】
インデックス値は有限体算術計算に従って選択されないが、他の原理に従って選択される。これにもかかわらず、各インデックス値は有限体における非ゼロ要素に対応する。ページｉがインデックス値Ｋｉを有する（およびページｊがインデックス値Ｋｊを有する）と仮定する。加重和冗長性はＫｉ×Ｐｉの（ＧＦフィールド上の）和（各ページｉから対応するバイトＰｉ上）であり、各バイトはそのインデックス値で乗算される（ＧＦフィールド上で）。
【０２５７】
このように加重和冗長情報は、次のようにバイト毎に計算される。
【０２５８】
Ｒ０＝対応するすべてのバイトＰｉ上の和；
Ｒ１＝対応するすべてのバイトＫｉ×Ｐｉ上の和；
Ｒ０は対応するすべてのバイトのＸＯＲである；
Ｒ１はバイトの加重和であり、重みはインデックス値として選択される。上記の計算はＲ０およびＲ１各々のバイトに対応するページを作成するページ内の対応するバイト毎に繰り返される。以下の議論では、Ｒ０およびＲ１は、説明を明確にするために単一の要素（例えば、それぞれがシングルバイトである）としてそれぞれいくつかのコンテキストで説明されているが、上記の計算のように、各々は要素のそれぞれのページの代表的なものである（例えば、各々がバイトのページである）。
【０２５９】
Ｐｉはページｉのバイトを表し、Ｐｊはページｊのバイトを表す。処理は各ページに対応するバイトの１つのストライプに関して説明され、繰り返しはすべての対応するバイト上で実行される。いくつかのページが他のものより「短い」場合、例えば異なる（下位レベルの）冗長符号化率を有することにより、効果的に処理されるすべてのページが同じサイズを有するように短いページはゼロパディングされる（またはエンコードおよびデコードで同じ方法で使用される任意の既知の値でパディングされる）。
【０２６０】
様々な実施形態によれば、Ｒ０およびＲ１を計算するための和は、様々な連続および／または並列計算を介して、任意の順序で実施可能である。Ｋｉ×ＰｉがＫｊ×Ｐｊの前にまたは後に追加されるかどうかはＲ１の結果に影響を与えないので、ページは特定の順序で処理する必要はない。様々な実施形態によれば、冗長情報のページの様々なバイトに対応するＲ０およびＲ１の値の計算は、互いに独立しており、様々な連続および／または並列計算を介して、任意の順序で計算可能である。さらに、Ｒ１からＫｉ×Ｐｉを減算すること（およびＲ０からＰｉを減算すること）は、ページ上の計算効果の「バックアウト」を可能にする。ＧＦフィールド上であるので、加算および減算は両方ともＸＯＲであり（したがって、減算は２回目に単に加算することと同等である）、いくつかの実施形態および／または使用シナリオでは、ページを「バックアウト」するためにＧＦフィールド実装用に特別なハードウェアを必要としない（例えば、論理ＸＯＲ機能で十分である）。
【０２６１】
訂正不可能な下位レベルの誤りイベントにおいて、上位レベルの訂正は、いくつかの実施形態では、Ｒ０およびＲ１の再計算により開始するが、訂正不可能な下位レベルの誤りを有するページ（時にはカラムとも呼ばれる）を省略することにより開始する。訂正はΔＲ０を生成するために元のＲ０から再計算されたＲ０を減算し、ΔＲ１を生成するために元のＲ１から再計算されたＲ１を減算することにより進行する。
【０２６２】
訂正不可能な下位レベルの誤りがない場合は、再計算されたＲ０およびＲ１の両方がゼロである。訂正不可能な下位レベルの誤りがある場合は、再計算されたＲ０およびＲ１（減算後）は「欠損」データ（２回目に加算されなかったが、元の値に存在していた）を反映している。
【０２６３】
１つの訂正不可能な下位レベルの誤りがある場合には、再計算されたＲ０が誤りを訂正するために使用される（再計算されたＲ１は不要）。
【０２６４】
２つの訂正不可能な下位レベルの誤りがある場合には、再計算されたＲ０およびＲ１が誤りを訂正するために使用される。Ｒ０およびＲ１のページ両方の値が訂正不可能な下位レベルの誤りが発生しているページである場合、データ・ストレージ・ページの訂正は不要である。ページＲ１の値が訂正不可能な下位レベルの誤りが発生したページのいずれかである場合は、訂正はＲ０を介して行われる（再計算されたＲ０の値は訂正不可能な下位レベルの誤りのデータ・ストレージ・ページの値である）。
【０２６５】
データ・ストレージ・ページ内に２つの訂正不可能な下位レベルの誤りがある場合、またはＲ０ページが訂正不可能な下位レベルの誤りのページのいずれかである場合には、訂正は、上記のようにΔＲ０およびΔＲ１の計算により開始する。Ｒ０ページが訂正不可能な下位レベルの誤りが発生したページのいずれかである場合、ΔＲ０ページの計算は必要に応じて省略される。ページｉおよびページｊが訂正不可能な下位レベルの誤りが発生したページである場合、再計算されたΔＲ０＝Ｐｉ＋Ｐｊであり、再計算されたΔＲ１＝Ｋｉ×Ｐｉ＋Ｋｊ×Ｐｊである。方程式を解くと：
Ｐｉ＝（ΔＲ１−Ｋｊ×ΔＲ０）／（Ｋｉ−Ｋｊ）
Ｐｊ＝ΔＲ０−Ｐｉ
となる。
Ｒ０が訂正不可能な下位レベルの誤りが発生したページのいずれかである場合、（Ｒ０はＲ１には含まれないため）、ΔＲ１＝Ｋｉ×Ｐｉ、またはＰｉ＝ΔＲ１／Ｋｉであり、上記の式でＫｊ＝０を設定する（ΔＲ０を無視する）ことにより同じ結果が得られる。
【０２６６】
代替的な実施形態では、ｐが素数である整数剰余ｐにより定義される有限体がガロア体の代わりに使用される。計算は、加算が整数加算の剰余ｐであり、乗算が整数乗算の剰余ｐである、上述したものと同一である。例えば、ページがバイトのページである場合、整数剰余２５７の有限体が使用される。すべてのユーザ・データ・バイトは０−２５５の範囲であり、１バイトそれぞれに格納される。しかしながら、Ｒ１の結果は０−２５６の範囲の値を有し、表現のために１つより多いバイトを要求する。ストレージ領域を最小化するため０−２５６の値を符号化しＲ１ページが低減されたオーバーヘッドで格納されることを可能にするために多くの方法がある。例えば、値０および２５６は９ビットシーケンス０００００００００および００００００００１としてそれぞれ保存され、他のすべての値は８ビットで格納される。Ｒ１の値のランダム分布を考えると、ストレージオーバーヘッドは<０．１％である。図９に関して説明したように、Ｒ１ページは、オーバーヘッドをいくつかの使用シナリオ内に隠すことができるように、ユーザデータの最大量を有するように選択される。
【０２６７】
図１０は、例えば、図７Ａおよびさらに図７Ｂなどに示すコンテキストでＲＡＳＩＥ−２モード２−２で使用されるような、上位レベルの冗長情報結果およびデータソースの対応の一実施形態の選択された詳細を示す。図１０は明示的にフラッシュダイ７１０．０、７１０．６３、７１０．６４および、７１０．６５を示し、省略記号（．．．）により暗黙にフラッシュダイ７１０．１．．．７１０．６２を示す。フラッシュダイのページ内のブロック、ページ、バイトの選択された詳細が示される。上位レベルの冗長情報の第１の部分はＲ０  １０１０（フラッシュダイ７１０．６４に格納される）として示され、パリティ符号を使用して計算される。上位レベルの冗長情報の第２の部分はＲ１  １０１１（フラッシュダイ７１０．６５に格納される）として示され、加重和符号を使用して計算される。データ情報のストレージはデータ１０１９（フラッシュダイ７１０．０．．．７１０．６３に格納される）として示される。
【０２６８】
破線矢印１００１はデータ１０１９の（すべてのフラッシュダイに渡る）すべての最初のページの対応する最初のバイトに基づいた２バイトの冗長計算結果（Ｒ０  １０１０およびＲ１  １０１１のそれぞれ１バイト）を概念的に示す。図示するように２バイトの結果は最初のＲ０およびＲ１の各ページの最初のバイトである。破線矢印１００２はデータ１０１９のすべての最初のページの対応する最後のバイトに基づいた２バイトの冗長計算結果（Ｒ０  １０１０およびＲ１  １０１１のそれぞれ１バイト）を概念的に示す。図示するように、２バイトの結果は最初のＲ０およびＲ１の各ページの最後のバイトである。破線矢印１００３はデータ１０１９の（すべてのフラッシュダイに渡る）最初のブロックの対応する最後のページに基づいた２ページの冗長計算結果（Ｒ０  １０１０およびＲ１  １０１１のそれぞれ1ページ）を概念的に示す。
【０２６９】
本明細書の他の箇所に説明されている一部の実施形態では、上位レベルの冗長情報はデータの異なる部分の異なるダイ内に格納されることに注意されたい。このように、Ｒ０およびＲ１はいくつかの実施形態では、図１０に示すように、２つの「専用」ダイではなくむしろ種々のダイに渡って格納される。
【０２７０】
図１１は、例えば、様々な実施形態に応じた様々な動作条件で、図７Ａおよびさらに図７Ｂおよび図１０に示すようなコンテキストでＲＡＳＩＥ−２モード２−２により使用される、上位レベルの冗長情報の計算の一実施形態の選択された詳細を示す。より具体的には、図１１は、例えば、図１０の破線矢印１００１により概念的に示される２バイトの冗長計算結果に従った、Ｒ０のバイト用のパリティ符号計算およびＲ１のバイト用の加重和符号計算を示す。動作条件は、有限体（ガロア体など）上の算術計算の実行、インデックス（図１１でダミー和変数「ｉ」の値に対応する）がフラッシュダイ番号の１の補数であること（または任意の他のユニークなおよび非ゼロの番号）、および有限体における非ゼロ要素に対応するインデックスの１つ以上を含む。図１１に示す計算は、対応するデータバイトに基づいて、Ｒ０およびＲ１のすべてのバイトについて繰り返される。非ゼロのインデックスはＲ１の値をＰｉの各要素からの寄与を含むことを可能にすることに注意されたい。
【０２７１】
このように任意のＲ０のバイトを互いに、または任意のＲ１のバイト間で計算することには依存関係はない。したがって、様々な実施形態はＲ０およびＲ１の値が全体的に（大規模に）並列して、部分的に並列して、または全体的に連続して計算される場所と考えられる。例えば、ページのＲ０および／またはＲ１はバイトのすべては並列に計算される。別の実施例では、ページのＲ０バイトのすべては並列に計算され、続いて（またはその前に）ページのＲ１バイトのすべてが並列に計算される。
【０２７２】
さらに、互いに関してまたはＲ１のバイトのいずれかを計算することに関してＲ０のバイトのいずれかを計算することに順序要件はない。したがって、様々な実施形態はＲ０およびＲ１の値が互いに関して順番に、互いに関して別々に順番に全体的に計算される（例えば、Ｒ０の計算は互いに関しては順番にであるがＲ１に関しては順序なし、および逆もまた然り）、または特定の順序なし（例えば、完全に順序のない、順不同、またはランダム順序）に計算される場所と考えられる。例えば、ページのＲ０バイトのすべては特定の順序で計算され（例えば、最下位バイトから最上位バイトに）、ページのＲ１バイトのすべてが特定の順序で続く。別の実施例では、ページのＲ０バイトのすべてが特定の順序で計算され、独立してページのＲ１バイトのすべてが特定の順序で計算される。さらに別の実施例では、ページのＲ０バイトのすべてはページのＲ１バイトのすべてと同様に互いに関して不特定の順序で計算される（例えば、利用可能になるデータオペランドとして）。
【０２７３】
さらに別の実施例では、１若しくはそれ以上のページのＲ０およびＲ１バイトのすべては、１若しくはそれ以上のＮＶＭｓ（各々が、例えば、１若しくはそれ以上のフラッシュダイを有する）上で実行される１若しくはそれ以上の読み取り動作の完了の順序により決定された順序で計算され、データバイトを読み取るための読み取り動作は図１１に示す加算および加重和の計算（Ｐｉ）により参照される。いくつかの実施形態および／または使用シナリオでは、読み取り動作の完了により決定される順序で計算を実行することは、計算を実行することが可能となっているＮＶＭｓおよび要素間でのバッファリングの低減または除去を可能とする。いくつかの実施形態および／または使用シナリオでは、読み取り動作の完了により決定される順序で計算を実行することは、ＮＶＭｓのメモリ帯域幅などの、計算を実行するために使用されるメモリ帯域幅の低減を可能とする。
【０２７４】
さらに別の実施例では、１若しくはそれ以上のページのＲ０およびＲ１バイトのすべては１若しくはそれ以上のＮＶＭｓ（各々が、例えば、１若しくはそれ以上のフラッシュダイを有する）上で実行される読み取り動作に応答して返されたデータおよび／または利用可能なデータの順序により決定される順序で計算され、データバイトに対応する返されたデータおよび／または利用可能なデータは図１１に示す加算および加重和の計算（Ｐｉ）により参照される。いくつかの実施形態および／または使用シナリオでは、返されたデータおよび／または利用可能なデータにより決定された順序で計算を実行することは、計算を実行するためのＮＶＭｓおよび要素間でのバッファリングを低減または除去する。いくつかの実施形態および／または使用シナリオでは、返されたデータおよび／または利用可能なデータにより決定された順序で計算を実行することは、ＮＶＭｓのメモリ帯域幅などの、計算を実行するために使用されるメモリ帯域幅を低減する。他の実施形態では、読み取り動作は不特定の順序で実行される一方、いくつかの実施形態では、読み取り動作は特定の順序（例えば、Ｐｉの最下位バイトから最上位バイト）で実行される。
【０２７５】
図１２は、例えば、図１１に関連付けられている、および下位レベルの障害がページｊで発生したコンテキストでの、１つの（下位レベルの）障害（単一動作時）からの復旧の実施形態の選択された詳細を示す。下位レベルの障害がＲ０またはＲ１ページ上にある場合、図１１で説明したようにＲ０（またはＲ１）は再決定されることに注意されたい。図１２は、ページｊのために復旧された値の１バイトの計算を示す（和が障害が発生したページｊを省略していることに注意されたい）。図１２に示す計算は、Ｒ０の対応するバイトおよびページｊを除くすべてのデータページから対応するバイトに基づいて、ページｊのすべてのバイトのための復旧された値を決定するために繰り返される。
【０２７６】
このようにページｊの復旧された値のいずれかのバイトを計算するには互いに依存関係はない。したがって様々な実施形態は、Ｒ０およびＲ１値についての前述の計算と同様に、Ｐｊ復旧値が高度に並列から高度に連続まで計算される場所であると考えられる。さらに、互いに関してページｊの復旧値のいずれかを計算するには順序要件はない。したがって様々な実施形態は、Ｒ０およびＲ１値についての前述の計算と同様に、Ｐｊ復旧値が互いに関して順序を変えて計算される場所であると考えられる。
【０２７７】
いくつかの例示的な実施形態は、１若しくはそれ以上のＮＶＭｓ（各々が、例えば、１若しくはそれ以上のフラッシュダイを有する）上で実行される、図１２で示すＲ０および／またはＰｉの値を取得するためにＮＶＭｓを読み取る読み取り動作である、１若しくはそれ以上の読み取り動作の完了の順序により決定される少なくとも一部分の順序で復旧値を決定することに関連する計算を実行する。いくつかの実施形態および／または使用シナリオでは、読み取り動作の完了の順序で計算を実行することは、計算を実行することが可能となっているＮＶＭｓおよび要素間でのバッファリングの低減または除去を可能とする。いくつかの実施形態および／または使用シナリオでは、読み取り動作の完了の順序で計算を実行することは、ＮＶＭｓのメモリ帯域幅などの、計算を実行するために使用されるメモリ帯域幅を低減することを可能とする。
【０２７８】
いくつかの例示的な実施形態は、１若しくはそれ以上のＮＶＭｓ（各々が、例えば、１若しくはそれ以上のフラッシュダイを有する）から返されたデータおよび／または利用可能なデータの順序により決定される少なくとも一部分の順序で復旧値を決定することに関連する計算を実行し、返されたデータおよび／または利用可能なデータは図１２で示すＲ０および／またはＰｉの値を取得するためにＮＶＭｓ上で実行される読み取り動作に対応する。いくつかの実施形態および／または使用シナリオでは、読み取り動作から返されたデータおよび／または利用可能なデータの順序で計算を実行することは、計算を実行することが可能となっているＮＶＭｓおよび要素間でのバッファリングを低減または除去する。いくつかの実施形態および／または使用シナリオでは、読み取り動作から返されたデータおよび／または入手可能なデータの順序で計算を実行することは、ＮＶＭのメモリ帯域幅などの、計算を実行するために使用されるメモリ帯域幅を低減する。他の実施形態では、読み取り動作が不特定の順序で実行される一方、いくつかの実施形態では、読み取り動作は特定の順序（例えば、Ｐｉの最下位バイトから最上位バイト）で実行される。
【０２７９】
図１３Ａ−１３Ｄは、例えば、図１１に関連付けられる、および下位レベルの障害がページｍおよびｎで発生したコンテキストでの、２つの（下位レベルの）障害（単一動作時）からの復旧の実施形態の選択された詳細を示す。下位レベルの障害がＲ０およびＲ１ページ上にある場合は、Ｒ０およびＲ１はデータ復旧が不要であり、データを復旧する処理がないことに注意されたい。それ以外の場合は、下位レベルの障害の１つがＲ１ページにある場合、データ復旧は図１２で説明したように進むことに注意されたい。下位レベルの障害がＲ０またはＲ１ページのいずれでもない場合、ＰｍおよびＰｎの値の復旧は次のように進む。図１３Ａは、訂正されたＲ０をＲ０'としての１バイト、訂正されたＲ１をＲ１'としての１バイトのための計算を示す（和は障害が発生したページｍおよびｎを省略することに注意されたい）。図１３Ｂは、元の冗長情報（Ｒ０、Ｒ１）の訂正された冗長情報（Ｒ０'、Ｒ１'）への１バイトの関連する等式、および訂正されたＲ０およびＲ１を形成するために用いられた和から省略された項（Ｐｍ＋ＰｎおよびＫｍ×Ｐｍ＋Ｋｎ×Ｐｎ）を示す。図１３Ｃは、挿入された項デルタＲ０（ΔＲ０）およびデルタＲ１（ΔＲ１）付きで、図１３Ｂの代数的再配置を示す。図１３Ｄは、ＰｎおよびＰｍのための図１３Ｃの解を示し、Ｒ１、Ｒ０の対応するバイト、およびページｍおよびｎを除くすべてのデータページから対応するバイトに基づいて、ページｎの復旧値の１バイトおよびページｍの復旧値の1バイトの計算を表す。ユニークなインデックスは、ＫｎがＫｍに対してユニークであるように、非ゼロの共通因子を有効にすることに注意されたい。
【０２８０】
様々な実施形態では、図１３Ａ−１３Ｄで示される計算はページｍの復旧値の１バイトおよびページｎの復旧値の１バイトを決定するために実行される。計算はＲ０、Ｒ１の対応するバイト、およびページｍおよびｎを除くデータページのすべてからの対応するバイトに基づいて、ページｍおよびｎのすべてのバイトを復旧するための値を決定するために繰り返される。
【０２８１】
このようにページｍまたはｎの復旧値のいずれかのバイトを計算するには互いに依存関係はない。したがって様々な実施形態は、Ｐｊ復旧値のための前述の計算と同様に、Ｐｍおよび／またはＰｎの復旧値が高度に並列から高度に連続までの範囲で計算される場所であると考えられる。さらに、互いに関してページｍおよび／またはページｎの復旧値のいずれかを計算するには順序要件はない。したがって様々な実施形態は、Ｐｊ復旧値のための前述の計算と同様に、Ｐｍおよび／またはＰｎの復旧値が互いに関して順序を変えて計算される場所であると考えられる。
【０２８２】
いくつかの例示的な実施形態は、図１３Ａ−１３Ｄのいずれかにおいて計算のための元として示された値のいずれか１つ以上を取得するための読み取り動作である、１若しくはそれ以上のＮＶＭｓ（各々が、例えば、１若しくはそれ以上のフラッシュダイを有する）上で実行される１若しくはそれ以上の読み取り動作の完了の順序により決定される少なくとも一部分の順序で復旧値を決定することに関連する計算（Ｒ０'およびＲ１'の計算など）を実行する。いくつか実施形態および／または使用シナリオでは、読み取り動作の完了の順序で計算を実行することは、計算を実行することが可能となっているＮＶＭｓおよび要素間でのバッファリングの低減または除去を可能とする。いくつかの実施形態および／または使用シナリオでは、読み取り動作の完了の順序で計算を実行することは、ＮＶＭｓのメモリ帯域幅などの、計算を実行するために使用されるメモリ帯域幅の低減を可能とする。
【０２８３】
他のいくつかの例示的な実施形態は、１若しくはそれ以上のＮＶＭｓ（各々が、例えば、１若しくはそれ以上のフラッシュダイを有する）から返されたデータおよび／または利用可能なデータの順序により決定される少なくとも一部分の順序で復旧値を決定することに関連する計算（Ｒ０'およびＲ１'の計算など）を行い、返されたデータおよび／または利用可能なデータは図１３Ａ−１３Ｄのいずれかにおいて計算のための元として示された値のいずれか１つ以上を取得するためにＮＶＭｓ上で実行される読み取り動作に応答している。いくつかの実施形態および／または使用シナリオでは、読み取り動作から返されるデータおよび／または利用可能なデータの順序で計算を実行することは、計算を実行することが可能となっているＮＶＭｓおよび要素間でのバッファリングを低減または除去する。いくつかの実施形態および／または使用シナリオでは、読み取り動作から返されたデータおよび／または入手可能なデータの順序で計算を実行することは、ＮＶＭｓのメモリ帯域幅などの、計算を実行するために使用されるメモリ帯域幅を低減する。他の実施形態では、読み取り動作が不特定の順序で実行される一方、いくつかの実施形態では、読み取り動作は特定の順序（例えば、Ｐｉの最下位バイトから最上位バイト）で行われる。
【０２８４】
図１４Ａおよび１４Ｂは、ＮＶＭｓから受信したページに関する上位レベルの冗長情報を計算する実施形態の選択された詳細を示す。図１４Ａは、コマンド発行（読み取り動作を発行１４０２Ａ）を介して１若しくはそれ以上のＮＶＭｓに複数の読み取りコマンドを送信し、すべてのコマンドが送信されたかどうかをチェックし（すべて発行？１４０３Ａ）、そうでない場合、次に別のコマンドを送信するためにループバックする、一実施形態の選択された詳細を示す。一度に１つずつではなくむしろ一度に複数のコマンドが発行される他の実施形態も考えられることに注意されたい。
【０２８５】
図１４Ｂは、図１４Ａに示された送信された読み取りコマンドに応答してＮＶＭｓから受信したページを処理する一実施形態の選択された詳細を示す。チェックはページが利用可能であるかどうかを判断するために行われる（ページ準備完了？１４０２Ｂ）。そうでない場合、処理は再びチェックを実行するためにループバックする。ページが利用可能である場合、そのページに関連する上位レベルの冗長情報の処理が行われる（ページベースの計算を実行１４０３Ｂ）。次にすべてのページが処理されたかを判断するチェックが行われる（ページ終了？１４０４Ｂ）。もしそうであれば、処理は完了し（終了１４９９Ｂ）、そうでなければフローは別のページが利用可能であるかどうかを判断するためにループバックする。
【０２８６】
図１４Ａに示す送信されたコマンドに対応するページの受信以外、図１４Ｂに示した処理は図１４Ａに示した処理とは無関係である。様々なシナリオでは、ページの到着順序はＮＶＭタイプ、ステータス、動作環境、およびその他の要因に応じて変化し、いくつかの状況では到着ページに対応した読み取りコマンドの送信順序または到着順序とは異なる。図１４Ａの処理が図１４Ｂとは無関係であるので（ページデータの到着が送信された対応する読み取りコマンドに依存すること以外）、いくつかの実施形態および／または使用シナリオでは、読み取りデータが受信／処理されている間に（図１４Ｂ）、読み取りコマンドが送信される（図１４Ａ）。いくつかの実施形態および／または使用シナリオでは、ページのいくつかはＮＶＭｓに向けた読み取りコマンドを介して要求されているのではなくむしろ１若しくはそれ以上のバッファから提供され、例えば、特定のページが既に特定のバッファ内に存在する場合、特定のページのための読み取りコマンドが送信される。いくつかの実施形態および／または使用シナリオでは、送信されたコマンドに対応する以外のページは送信されたコマンドに応答して提供されたページと混在してＮＶＭｓにより提供され、例えば、読み取りコマンドに応答して提供されたページが他の活動のために送られる。
【０２８７】
種々の実施形態では、図１１で示すＲ０およびＲ１の計算は、図１４Ａおよび図１４Ｂで示すように少なくとも部分的に実行される。最初の実施例としては、対応するＲ０およびＲ１ページを計算するために必要なすべてのデータページに対する読み取りコマンドは図１４Ａに示すように１若しくはそれ以上のＮＶＭｓに送られる。読み取りコマンドに応答して受信されたデータのページはページとして処理され、図１１で示すように、Ｒ０およびＲ１ページを計算するために受信される。第２の実施例としては、Ｒ０およびＲ１ページのペア（例えば、デュアルプレーンＮＶＭの２つのプレーンに対応する）のための読み取りコマンドは図１４Ａで示すように、１若しくはそれ以上のＮＶＭｓに送られる。読み取りコマンドに応答して受信されたデータのページはページとして処理され、図１１で示すように、Ｒ０およびＲ１ページを計算するために受信される。
【０２８８】
様々な実施形態では、図１２で示すように、Ｐｊのための計算は、図１４Ａおよび図１４Ｂで示すように、少なくとも部分的に実行される。最初の実施例としては、特定のＰｊページを計算するために必要なすべてのデータページに対する読み取りコマンドは図１４Ａで示すように、１若しくはそれ以上のＮＶＭｓに送られる。読み取りコマンドに応答して受信されたデータのページはページとして処理され、図１２で示すように、Ｐｊページを計算するために受信される。第２の実施例としては、Ｐｊページのペア（例えば、デュアルプレーンＮＶＭの２つのプレーンに対応する）のための読み取りコマンドは、図１４Ａで示すように１若しくはそれ以上のＮＶＭｓに送られ、受信されたデータのページはＰｊページのペアを、図１４Ｂで示すように、計算するために受信され処理される。
【０２８９】
様々な実施形態では、図１３Ａ−１３Ｄのいずれかで示す、復旧値を決定することに関連する計算は（Ｒ０'およびＲ１'の計算など）、図１４Ａおよび図１４Ｂとして示される少なくとも一部分で実行される。最初の実施例としては、特定のＲ０'ページおよび特定のＲ１'ページを計算するために必要なすべてのデータページに対する読み取りコマンドは図１４Ａで示す１若しくはそれ以上のＮＶＭｓに送られる。読み取りコマンドに応答して受信されたデータのページはページとして処理され、図１３Ａで示すように、Ｒ０'およびＲ１'ページを計算するために受信される。第２の例としては、Ｒ０'およびＲ１'ページのペア（例えば、デュアルプレーンＮＶＭの２つのプレーンに対応する）のための読み取りコマンドは図１４Ａで示すように、１若しくはそれ以上のＮＶＭｓに送られ、受信されたデータのページは処理され、図１４Ｂで示すように、Ｒ０'およびＲ１'ページのペアを計算するために受信される。
【０２９０】
図１５Ａ−１５Ｃは、例えば、図１１に関連付けられたコンテキストなどで、ＮＶＭｓに提供された書き込みに関する上位レベルの冗長情報の計算のバックアウトの一実施形態の選択された詳細を示す。図１５Ａは、発行を介して１若しくはそれ以上のＮＶＭｓに複数の書き込みコマンドを送信し（書き込み動作を発行１５０２Ａ）、すべてのコマンドが送信されたかどうかをチェックし（すべて発行？１５０３Ａ）、そうでない場合、次に別のコマンドを送信するためにループバックする、一実施形態の選択された詳細を示す。一度に１つずつではなくむしろ一度に複数のコマンドが発行される他の実施形態も考えられることに注意されたい。
【０２９１】
図１５Ｂは、図１５Ａに示す、送信された書き込みコマンドに応答してＮＶＭｓから受信される書き込み完了およびステータス情報の処理の一実施形態の選択された詳細を示す。チェックは書き込みが誤りなしで完了したかどうかを判断するために行われる（書き込みＯＫ？１５０２Ｂ）。そうである場合、次にチェックはすべての書き込みが完了したかどうかを判断するために行われる（書き込み完了？１５０４Ｂ）。そうである場合、処理は完了する（終了１５９９Ｂ）。書き込みは完了したがプログラム障害などの（下位レベルの）誤りが有る場合、次にフローは上位レベルの冗長情報の計算に関する書き込みの効果を「元に戻す」に進む（冗長性からバックアウト書き込み１５０３Ｂ）。より具体的には、下位レベルの誤りでの書き込み用のデータは、対応する上位レベルの冗長情報の計算のいずれかから逆計算される（書き込み用のデータが書き込みが成功することの前提下で対応する上位レベルの冗長性の計算に既に含まれていたと仮定して）。例えば、下位レベルの書き込み障害は特定のページｊ上で検出される。これに応答して、訂正されたＲ０およびＲ１ページはページｊデータ（Ｐｊ）がゼロに設定されるように計算される。図１５Ｃは、ｊが下位レベルの書き込み障害のページである、訂正されたＲ０（ｎＲ０）のシングルバイトおよび訂正されたＲ１（ｎＲ１）のシングルバイトの計算の一実施形態の選択された詳細を示す。図１１などに関連付けられている図１２のコンテキストで、有限体がガロア体である場合は図１５Ｃに示す減算演算（「−」）は論理ＸＯＲ演算と等価であることに注意されたい。様々な実施形態では、他の処理（図示せず）は訂正された上位レベルの冗長ページ（ｎＲ０およびｎＲ１）と同様に、下位レベルの書き込み障害のあるページ（Ｐｊ）を格納するために実行される。
【０２９２】
図１５に示すように、送信されたコマンドに対応する書き込み完了およびステータス情報の受信以外、図１５Ｂに示す処理は図１５Ａに示す処理とは無関係である。様々なシナリオでは、書き込み完了およびステータス情報の到着順序はＮＶＭタイプ、ステータス、動作環境、およびその他の要因に応じて変化し、いくつかの状況で到着する書き込み完了およびステータス情報に対応する書き込みコマンドの送信順序または到着順序とは異なる。図１５Ａの処理は図１５Ｂとは無関係であるので（書き込み完了およびステータス情報の到着が送信された対応する書き込みコマンドに依存する以外）、いくつかの実施形態および／または使用シナリオでは、書き込み完了およびステータス情報が受信／処理されている（図１５Ｂ）間に書き込みコマンドが送信される（図１５Ａ）。
【０２９３】
いくつかの実施形態および／または使用シナリオでは、ＮＶＭｓに送信される書き込みコマンドおよび書き込みコマンドに対応するＮＶＭｓからの書き込み完了およびステータス情報の受信との間にかなりの遅延が発生する。いくつかの実施形態および／または使用シナリオでは、図１５Ａに示す送信されたコマンドに対応する以外の書き込み完了およびステータス情報は、図１５Ａに示すように、送信されたコマンドに応答して提供された書き込み完了およびステータス情報と混在してＮＶＭｓにより提供され、例えば、書き込み完了およびステータス情報は他の活動のために送信されたコマンドに応答して提供される。
【０２９４】
様々な実施形態および／または使用シナリオでは、そうでなければデータ情報のために使用される１若しくはそれ以上のページが未使用である。様々なシナリオでは、使用されていないページは、ブロック、Ｒ−ブロック、ストライプ、またはいかなる種類のページのシーケンスの、最初、中間、または最後のページである。いくつかの状況では、未使用のページは未使用のアプリオリ（「除外」）であり、いくつかの状況では、未使用のページはいくつかの使用の後に使用されない（「サービスから削除」）。除外されている未使用のページの例は誤って製造されたページである。サービスから削除された未使用ページの例は適切に書き込むことができないページである（例えば、図１５Ｂに関して、下位レベルの書き込み誤りとして説明された）。例えば図１０−１２、１３Ａ−１３Ｄ、１４Ａ−１４Ｂ、および１５Ａ−１５Ｂに関連する処理は、計算から完全に未使用のページを省略することにより、または未使用のページ上のすべてのデータがあたかもゼロであったとして計算を実行することなどにより、任意の未使用のページをスキップする（除外またはサービスから削除するかどうか）。
【０２９５】
様々な実施形態では、図１０−１２、１３Ａ−１３Ｄ、１４Ａ−１４Ｂ、および１５Ａ−１５Ｂの１若しくはそれ以上の要素の処理または関係するものは、図１Ａの１若しくはそれ以上の要素（またはその一部）により全体的にまたは部分的に実行される。例えば、ＣＰＵ１７１のソフトウェア実行機能の一部は、図１２および図１３Ａ−１３Ｄで示すデータ復旧動作を指示することなどにより、上位レベルの冗長化処理を管理するために使用される。別の実施例として、データ処理１２１は、図１１により示されるような計算に従って上位レベルの冗長情報の計算に専用および／または特化されたハードウェア要素を含む。
【０２９６】
実装例の技術
いくつかの実施形態では、独立したシリコン素子（例えば、フラッシュメモリ）、コンピューティングホスト・フラッシュ・メモリ・コントローラ、および／またはＳＳＤコントローラ（図１ＡのＳＳＤコントローラ１００など）、およびプロセッサの一部、マイクロプロセッサ、システムオンチップ、特定用途向け集積回路、ハードウェアアクセラレータ、または上述の動作の全部または一部を提供する他の回路などの、動的な上位レベルの冗長モード管理を実装するシステムにより実行される動作のすべてまたは一部の種々の組み合せは、コンピュータシステムによる処理と互換性のある仕様により指定される。仕様は、ハードウェア記述言語、回路記述、ネットリスト記述、マスク記述、またはレイアウト記述などの様々な記述に準拠している。例示的記述は、Ｖｅｒｉｌｏｇ、ＶＨＤＬ、ＳＰＩＣＥ、ＰＳｐｉｃｅなどのＳＰＩＣＥバリアント（亜種）、ＩＢＩＳ、ＬＥＦ、ＤＥＦ、ＧＤＳ−ＩＩ、ＯＡＳＩＳ、または他の記述などを含む。様々な実施形態では、処理は、解釈（インタープリテーション）、コンパイレーション、シミュレーション、および１若しくはそれ以上の集積回路上に含めるのに適した論理および／または回路を生成、検証、または指定するための合成などの任意の組み合せを含む。各集積回路は、様々な実施形態によれば、種々の技術に従って設計可能および／または製造可能である。技術は、プログラム可能な技術（フィールドまたはマスク・プログラマブル・ゲート・アレイ集積回路など）、セミカスタム技術（完全にまたは部分的にセルベースの集積回路など）、およびフルカスタム技術（大幅に特化された集積回路など）、それらの任意の組み合せ、または集積回路の設計および／または製造と互換性のある任意の他の技術を含む。
【０２９７】
いくつかの実施形態では、その内部に格納された命令のセットを有するコンピュータ可読媒体により記述された動作のすべてまたは部分の様々な組み合せは、１若しくはそれ以上のプログラム命令の実行および／または解釈により、１若しくはそれ以上のソースおよび／またはスクリプト言語ステートメントの解釈および／またはコンパイルにより、またはプログラミングおよび／またはスクリプト言語ステートメントで表現される情報をコンパイル、翻訳、および／または解釈して生成されたバイナリ命令の実行により実行される。ステートメントは任意の標準的なプログラミングまたはスクリプト言語（Ｃ、Ｃ＋＋、ＦＯＲＴＲＡＮ、Ｐａｓｃａｌ、Ａｄａ、Ｊａｖａ（登録商標）、ＶＢスクリプト、およびシェルなど）と互換性がある。１若しくはそれ以上のプログラム命令、言語ステートメント、またはバイナリ命令は、オプションで１若しくはそれ以上のコンピュータ可読記憶媒体要素に格納される。様々な実施形態では、プログラム命令のいくつか、すべて、または様々な部分は、１若しくはそれ以上の関数、ルーチン、サブルーチン、インラインルーチン、プロシージャ、マクロ、またはそれらの一部として実現される。
【０２９８】
結論
特定の選択肢は本文および図面を作成する際に単に便宜上の説明として作られており、、反対に選択肢に指示がない限り、説明された実施形態の構造または動作に関する追加情報を伝えるものとしてそれ自体解釈されるべきではない。選択肢の例としては、図の番号用に使用される指定の特定の構成または割り当て、および実施形態の特徴および要素を特定し参照するために使用される要素識別子（例えば、コールアウトまたは数値指定子など）の特定の構成または割り当てを含む。
【０２９９】
単語「含む」または「含んでいる」は、オープンエンドの権利範囲の論理セットを記述する抽象概念として解釈されることを具体的に意図しており、単語「内」が明示的に続かない限り物理的封じ込めを伝えることを意図しない。
【０３００】
前述の実施形態は説明および理解を明確にする目的のためにある程度詳細に説明してきたが、本発明は提供された詳細に限定されない。本発明の多くの実施例がある。開示された実施形態は例示であり限定するものではない。
【０３０１】
構造、配置、および使用についての多くの変形が記述と整合可能であり、発行された特許の特許請求の範囲内にあることが理解されるであろう。例えば、相互接続および機能ユニットビット幅、クロック速度、および使用される技術の種類は、各構成ブロック内の様々な実施形態に応じて可変である。相互接続および論理に与えられた名前は単なる例示であり、説明される概念を限定するものとして解釈されるべきではない。フローチャートおよびフロー図のプロセス、動作、機能要素の順序および配置は、様々な実施形態に応じて可変である。また、具体的に別記されていない限り、指定される値の範囲、使用される最大値および最小値、または他の特定の仕様（フラッシュメモリ技術の種類、レジスタおよびバッファ内のエントリ数または段数など）は単に記載の実施形態のものであり、実装技術の改良や変更を後追することが予期され、限定として解釈されるべきではない。
【０３０２】
当技術分野で知られている機能的に同等の技術は、種々のコンポーネント、サブシステム、動作、関数、ルーチン、サブルーチン、インラインルーチン、プロシージャ、マクロ、またはその一部を実装するために説明されたものに代わって採用可能である。実施形態の多くの機能的側面は、設計上の制約に依存する実施形態の機能および高速処理の技術動向（以前はハードウェアの機能であったもののソフトウェアへの移行の促進）および高い集積密度（以前はソフトウェアの機能であったもののハードウェアへの移行の促進）につれて、ハードウェア（すなわち、一般的には専用回路）またはソフトウェア（すなわち、プログラムされたコントローラまたはプロセッサのいくつかの方法を介して）のいずれかで選択的に実現可能であることが理解される。様々な実施形態の特定の変形は、パーティショニングの違い、異なるフォームファクタおよび構成、異なるオペレーティングシステムおよび他のシステムソフトウェアの使用、異なるインターフェース標準、ネットワークプロトコル、または通信リンクの使用、を含むがこれらに限定されるものではなく、特定のアプリケーションのユニークなエンジニアリングおよびビジネスの制約に応じて本明細書に記載の概念を実装する際にその他の変形が予期される。
【０３０３】
実施形態は詳細にかつ説明された実施形態の多くの側面の最小限の実装に必要なものを十分に超える環境のコンテキストで説明されてきた。当業者であれば、いくつかの実施形態では、残りの要素間の基本的な連携を変更することなく、開示された構成要素または特徴を省略することを認識するであろう。したがって、開示された詳細の多くは説明した実施形態の様々な態様を実装するために必要とされないことが理解される。残りの要素が先行技術から区別される程度に、省略されているコンポーネントおよび機能は本明細書に記載の概念に限定されるものではない。
【０３０４】
設計のすべてのそのような変形は、説明された実施形態により伝えられる教示にわたって実体のない変更である。本明細書に説明された実施形態は、他のコンピューティングおよびネットワーキングアプリケーションへの幅広い適用性を有することが理解され、説明された実施形態の特定の用途または産業に限定されるものではない。本発明はしたがって、発行された特許の請求の範囲内に包含されるすべての可能な変更および変形を含むものと解釈されるべきである。
【図１Ａ】
0005980798.tif 000010
【図１Ｂ】
0005980798.tif 000011
【図２】
0005980798.tif 000012
【図３】
0005980798.tif 000013
【図４Ａ】
0005980798.tif 000014
【図４Ｂ】
0005980798.tif 000015
【図５】
0005980798.tif 000016
【図６】
0005980798.tif 000017
【図７Ａ】
0005980798.tif 000018
【図７Ｂ】
0005980798.tif 000019
【図８】
0005980798.tif 000020
【図９】
0005980798.tif 000021
【図１０】
0005980798.tif 000022
【図１１】
0005980798.tif 000023
【図１２】
0005980798.tif 000024
【図１３Ａ】
0005980798.tif 000025
【図１３Ｂ】
0005980798.tif 000026
【図１３Ｃ】
0005980798.tif 000027
【図１３Ｄ】
0005980798.tif 000028
【図１４Ａ】
0005980798.tif 000029
【図１４Ｂ】
0005980798.tif 000030
【図１５Ａ】
0005980798.tif 000031
【図１５Ｂ】
0005980798.tif 000032
【図１５Ｃ】
0005980798.tif 000033