(57)【要約】      （修正有）【課題】ソリッドステートディスクなど、いくつかの記憶サブシステムにおいて、高プログラミング帯域幅および／または待ち時間の低減を可能にする。【解決手段】複数の不揮発性メモリのうちのＮ個の部分をプログラムするためのデータが不揮発性メモリコントローラにおいて受け取られる。特定のデータは、不揮発性メモリコントローラと関連付けられた割り当てられたバッファに記憶される。不揮発性メモリのうちの特定の１つへの特定のデータのプログラミングが開始される。Ｎ個の部分のうちのＭ個の障害から回復するのに十分な冗長情報が更新される。割り当てられたバッファが解放される。記憶する工程、プログラミングを開始する工程、更新する工程、および解放する工程のうちの少なくとも１つは、特定のデータを受け取る工程に応答したものである。解放する工程は、特定の不揮発性メモリがプログラミングを完了する前に行われる。【選択図】図１６
2014130587.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
不揮発性メモリコントローラにおいて、複数の不揮発性メモリのうちのＮ個の部分をプログラムするためのデータを受け取る工程であって、当該データは当該Ｎ個の部分のうちの特定の１つをプログラムするための特定のデータを有するものである、前記受け取る工程と、
前記特定のデータを割り当てられたバッファに記憶する工程であって、当該バッファは前記不揮発性メモリコントローラと関連付けられているものである、前記記憶する工程と、
前記不揮発性メモリのうちの特定の１つに対して前記特定のデータのプログラミングを開始する工程と、
前記Ｎ個の部分のうちＭ個の障害から回復するのに十分な冗長情報を更新する工程と、
前記割り当てられたバッファを解放する工程と
を有し、
前記記憶する工程、前記特定のデータのプログラミングを開始する工程、前記冗長情報を更新する工程、および前記解放する工程のうちの少なくとも１つは、前記受け取る工程に応答するものであり、
前記解放する工程は、前記特定の不揮発性メモリが前記プログラミングを完了する前に行われるものである、
方法。
【請求項２】
請求項１記載の方法において、前記冗長情報は第１の冗長情報であり、データは前記Ｎ個の部分のサブセットのために受け取られるものであり、プログラミングは前記Ｎ個の部分の前記サブセットについてはまだ開始されていないものであり、この方法は、さらに、
前記Ｎ個の部分の前記サブセットのうちの少なくとも一部のプログラミングを遅延させる工程と、
前記不揮発性メモリのうちの複数のメモリに対して前記第１の冗長情報のプログラミングを開始する工程と、
前記Ｎ個の部分の前記サブセットのうちの前記少なくとも一部のプログラミングを開始する工程と、
前記第１の冗長情報とは異なる、前記Ｎ個の部分の前記サブセットのうちＭ個の障害から回復するのに十分な第２の冗長情報を更新する工程と
を有するものであり、
前記プログラミングを遅延させる工程、前記第１の冗長情報のプログラミングを開始する工程、前記Ｎ個の部分の前記サブセットのうちの前記少なくとも一部のプログラミングを開始する前記工程、および前記第２の冗長情報を更新する工程のうちの少なくとも１つは、前記特定のデータの前記プログラミングの障害を検出したことに応答するものである方法。
【請求項３】
請求項２記載の方法において、前記特定のデータは、前記障害が検出された場合、もっぱら前記第１の冗長情報で符号化されているとおりに記憶されるものである方法。
【請求項４】
請求項１記載の方法において、前記データは、前記Ｎ個の部分のうちの第１の部分をプログラムするための初期データをさらに有するものであり、さらに、
少なくとも部分的に前記初期データに基づいて前記冗長情報を初期設定する工程を有するものである方法。
【請求項５】
請求項１記載の方法において、前記不揮発性メモリコントローラは前記割り当てられたバッファを有するものである方法。
【請求項６】
請求項１記載の方法において、前記割り当てられたバッファは、前記不揮発性メモリコントローラを有する第２のチップとは独立した第１のチップに具備される方法。
【請求項７】
請求項１記載の方法において、前記不揮発性メモリコントローラは、ストレージインターフェース規格と適合するコンピューティング・ホスト・インターフェースを少なくとも部分的に介してコンピューティングホストと通信可能なソリッドステート・ディスク・コントローラとして動作するものである方法。
【請求項８】
処理要素によって実行されると、当該処理要素に動作を実行させ、かつ／または制御させる命令のセットが記憶されている有形のコンピュータ可読媒体であって、前記動作は、
不揮発性メモリコントローラにおいて、複数の不揮発性メモリのうちのＮ個の部分をプログラムするためのデータを受け取る動作であって、当該データは当該Ｎ個の部分のうちの特定の１つをプログラムするための特定のデータを有するものである、前記受け取る動作と、
前記特定のデータを割り当てられたバッファに記憶する動作であって、当該バッファは前記不揮発性メモリコントローラと関連付けられているものである、前記記憶する動作と、
前記不揮発性メモリのうちの特定の１つに対して前記特定のデータのプログラミングを開始する動作と、
前記Ｎ個の部分のうちＭ個の障害から回復するのに十分な冗長情報を更新する動作と、
前記割り当てられたバッファを解放する動作と
を有し、
前記記憶する動作、前記特定のデータのプログラミングを開始する動作、前記冗長情報を更新する動作、および前記解放する動作のうちの少なくとも１つは、前記特定のデータを受け取る動作に応答するものであり、
前記解放する動作は、前記特定の不揮発性メモリが前記プログラミングを完了する前に行われるものである、
有形のコンピュータ可読媒体。
【請求項９】
請求項８記載の有形のコンピュータ可読媒体において、前記冗長情報は第１の冗長情報であり、データは前記Ｎ個の部分のサブセットのために受け取られるものであり、プログラミングは前記Ｎ個の部分の前記サブセットについてまだ開始されていないものであり、前記動作は、さらに、
前記Ｎ個の部分の前記サブセットのうちの少なくとも一部のプログラミングを遅延させる動作と、
前記不揮発性メモリのうちの複数のメモリに対して前記第１の冗長情報のプログラミングを開始する動作と、
前記Ｎ個の部分の前記サブセットのうちの前記少なくとも一部のプログラミングを開始する動作と、
前記第１の冗長情報とは異なる、前記Ｎ個の部分の前記サブセットのうちＭ個の障害から回復するのに十分な第２の冗長情報を更新する動作と
を有するものであり、
前記プログラミングを遅延させる動作、前記第１の冗長情報のプログラミングを開始する動作、前記Ｎ個の部分の前記サブセットのうちの前記少なくとも一部のプログラミングを開始する動作、および前記第２の冗長情報を更新する動作のうちの少なくとも１つは、前記特定のデータの前記プログラミングの障害を検出したことに応答するものである有形のコンピュータ可読媒体。
【請求項１０】
請求項９記載の有形のコンピュータ可読媒体において、前記特定のデータは、前記障害が検出された場合、もっぱら前記第１の冗長情報で符号化されているとおりに記憶されるものである有形のコンピュータ可読媒体。
【請求項１１】
請求項８記載の有形のコンピュータ可読媒体において、前記データは、前記Ｎ個の部分のうちの第１の部分をプログラムするための初期データをさらに有するものであり、さらに、
少なくとも部分的に前記初期データに基づいて前記冗長情報を初期設定する動作を有するものである有形のコンピュータ可読媒体。
【請求項１２】
請求項８記載の有形のコンピュータ可読媒体において、前記不揮発性メモリコントローラは前記割り当てられたバッファを有する有形のコンピュータ可読媒体。
【請求項１３】
請求項８記載の有形のコンピュータ可読媒体において、前記割り当てられたバッファは、前記不揮発性メモリコントローラを有する第２のチップとは独立した第１のチップに具備される有形のコンピュータ可読媒体。
【請求項１４】
請求項８記載の有形のコンピュータ可読媒体において、前記不揮発性メモリコントローラは、ストレージインターフェース規格と適合するコンピューティング・ホスト・インターフェースを少なくとも部分的に介してコンピューティングホストと通信可能なソリッドステート・ディスク・コントローラとして動作するものである有形のコンピュータ可読媒体。
【請求項１５】
請求項８記載の有形のコンピュータ可読媒体において、前記不揮発性メモリコントローラは前記処理要素を有するものである有形のコンピュータ可読媒体。
【請求項１６】
システムであって、
割り当てられたバッファと、
不揮発性メモリコントローラにおいて、複数の不揮発性メモリのうちのＮ個の部分をプログラムするためのデータを受け取る手段であって、当該データは当該Ｎ個の部分のうちの特定の１つをプログラムするための特定のデータを有するものである、前記受け取る手段と、
前記特定のデータを前記割り当てられたバッファに記憶する手段であって、当該バッファは前記不揮発性メモリコントローラと関連付けられているものである、前記記憶する工程と、
前記不揮発性メモリのうちの特定の１つに対して前記特定のデータのプログラミングを開始する手段と、
前記Ｎ個の部分のうちＭ個の障害から回復するのに十分な冗長情報を更新する手段と、
前記割り当てられたバッファを解放する手段と
を有し、
前記記憶する手段、前記特定のデータのプログラミングを開始する手段、前記冗長情報を更新する手段、および前記解放する手段のうちの少なくとも１つは、前記受け取る手段に応答するものであり、
前記解放する手段は、前記特定の不揮発性メモリが前記プログラミングを完了する前に前記割り当てられたバッファを解放するように動作するものである、
システム。
【請求項１７】
請求項１６記載のシステムにおいて、前記冗長情報は第１の冗長情報であり、データは前記Ｎ個の部分のサブセットのために受け取られるものであり、プログラミングは前記Ｎ個の部分の前記サブセットについてまだ開始されていないものであり、このシステムは、さらに、
前記Ｎ個の部分の前記サブセットのうちの少なくとも一部のプログラミングを遅延させる手段と、
前記不揮発性メモリのうちの複数のメモリに対して前記第１の冗長情報のプログラミングを開始する手段と、
前記Ｎ個の部分の前記サブセットのうちの前記少なくとも一部のプログラミングを開始する手段と、
前記第１の冗長情報とは異なる、前記Ｎ個の部分の前記サブセットのうちＭ個の障害から回復するのに十分な第２の冗長情報を更新する手段と
を有するものであり、
前記プログラミングを遅延させる手段、前記第１の冗長情報のプログラミングを開始する前記手段、前記Ｎ個の部分の前記サブセットのうちの前記少なくとも一部のプログラミングを開始する前記手段、および前記第２の冗長情報を更新する手段のうちの少なくとも１つは、前記特定のデータの前記プログラミングの障害を検出する手段に応答するものであるシステム。
【請求項１８】
請求項１７記載のシステムにおいて、前記特定のデータは、前記障害が検出された場合、もっぱら前記第１の冗長情報で符号化されているとおりに記憶されるものであるシステム。
【請求項１９】
請求項１６記載のシステムにおいて、前記データは、前記Ｎ個の部分のうちの第１の部分をプログラムするための初期データをさらに有するものであり、さらに、
少なくとも部分的に前記初期データに基づいて前記冗長情報を初期設定する手段を有するものであるシステム。
【請求項２０】
請求項１６記載のシステムにおいて、前記不揮発性メモリコントローラは前記割り当てられたバッファを有するものであるシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本出願の優先権利益の主張を、（それがある場合には、適宜）添付の出願データシート、請求、または送達状において行う。本出願の種類によって許容される範囲内で、本出願はこの参照によりあらゆる目的で以下の出願を組み込むものであり、以下の出願はすべて、発明がなされた時点において本出願と所有者を同じくするものである。
【０００２】
２０１０年１２月１日付で出願された、Ｊｅｒｅｍｙ  Ｉｓａａｃ  Ｎａｔｈａｎｉｅｌ  ＷＥＲＮＥＲを筆頭発明者とする、「ＤＹＮＡＭＩＣ  ＨＩＧＨＥＲ−ＬＥＶＥＬ  ＲＥＤＵＮＤＡＮＣＹ  ＭＯＤＥ  ＭＡＮＡＧＥＭＥＮＴ  ＷＩＴＨ  ＩＮＤＥＰＥＮＤＥＮＴ  ＳＩＬＩＣＯＮ  ＥＬＥＭＥＮＴＳ」という名称の、米国仮出願（整理番号第ＳＦ−１０−１０号および出願番号第６１／４１８８４６号）；
Ｈｉｇｈｅｒ−Ｌｅｖｅｌ  Ｒｅｄｕｎｄａｎｃｙ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｃｏｍｐｕｔａｔｉｏｎと題された、発明代表者名Ｊｅｒｅｍｙ  Ｉｓａａｃ  Ｎａｔｈａｎｉｅｌ  Ｗｅｒｎｅｒの、２０１１年１月１８日に出願された米国仮特許出願（事件整理番号第ＳＦ−１０−１４号及び米国仮特許出願第６１／４３３，９１８号）、
２０１１年１１月３０日付で出願された、Ｊｅｒｅｍｙ  Ｉｓａａｃ  Ｎａｔｈａｎｉｅｌ  ＷＥＲＮＥＲを筆頭発明者とする、「ＤＹＮＡＭＩＣ  ＨＩＧＨＥＲ−ＬＥＶＥＬ  ＲＥＤＵＮＤＡＮＣＹ  ＭＯＤＥ  ＭＡＮＡＧＥＭＥＮＴ  ＷＩＴＨ  ＩＮＤＥＰＥＮＤＥＮＴ  ＳＩＬＩＣＯＮ  ＥＬＥＭＥＮＴＳ」という名称の、国際出願（整理番号第ＳＦ−１０−１０ＰＣＴ号および出願番号第ＰＣＴ／ＵＳ１１／０６２７２６号）；ならびに
２０１２年１月１８日付で出願された、Ｊｅｒｅｍｙ  Ｉｓａａｃ  Ｎａｔｈａｎｉｅｌ  ＷＥＲＮＥＲを筆頭発明者とする、「ＨＩＧＨＥＲ−ＬＥＶＥＬ  ＲＥＤＵＮＤＡＮＣＹ  ＩＮＦＯＲＭＡＴＩＯＮ  ＣＯＭＰＵＴＡＴＩＯＮ」という名称の、国際出願（整理番号第ＳＦ−１０−１４ＰＣＴ号および出願番号第ＰＣＴ／ＵＳ１２／２１６８２号）。
【背景技術】
【０００３】
分野：不揮発性記憶の技術および製造における前進が、使用のコスト、収益性、性能、効率、および有用性の改善を提供するために必要とされている。
【０００４】
関連技術：公知である、または周知であるものとして明記されない限り、コンテキスト、定義、または比較を目的とするものを含む本明細書における技法および概念の言及は、そのような技法または概念が以前から公知であり、あるいは先行技術の一部であることの容認と解釈すべきではない。特許、特許出願、および出版物を含む、本明細書で引用されるあらゆる参照文献は（それがある場合には）、具体的に組み込まれているか否かを問わず、あらゆる目的で、この参照によりその全体が本明細書に組み込まれるものである。
【発明の概要】
【課題を解決するための手段】
【０００５】
本発明は多くの方法で実施されてよく、例えば、プロセス、製造品、装置、システム、組成物、ならびに、コンピュータ可読記憶媒体（ディスクといった光学的大容量記憶装置および／または磁気的大容量記憶装置、フラッシュストレージといった不揮発性記憶を有する集積回路など）や、プログラム命令が光通信リンクまたは電子通信リンク上で送られるコンピュータネットワークといったコンピュータ可読媒体として実施されてよい。詳細な説明では、上記の分野における使用のコスト、収益性、性能、効率、および有用性の改善を可能にする本発明の１つ若しくはそれ以上の実施形態の説明を行う。詳細な説明は、詳細な説明の残りの部分の理解を容易にするための概説を含む。概説は、本明細書で説明する概念に従うシステム、方法、製造品、およびコンピュータ可読媒体の１つ若しくはそれ以上の例示的実施形態を含む。結論の項でより詳細に論じるように、本発明は、発行される特許請求の範囲内のあらゆる可能な改変形態および変形形態を包含するものである。
【図面の簡単な説明】
【０００６】
【図１Ａ】図１Ａは、１若しくはそれ以上の（任意選択で内部の）冗長アレイによる不揮発性メモリ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｉｅｓ：ＮＶＭｓ）のプログラム障害回復を提供するＳＳＤコントローラを含むソリッドステートディスク（Ｓｏｌｉｄ−Ｓｔａｔｅ  Ｄｉｓｋ：ＳＳＤ）の実施形態の選択された詳細を示す図である。
【図１Ｂ】図１Ｂは、図１ＡのＳＳＤの１つ若しくはそれ以上のインスタンスを含むシステムの様々な実施形態の選択された詳細を示す図である。
【図２】図２は、論理ブロックアドレス（Ｌｏｇｉｃａｌ  Ｂｌｏｃｋ  Ａｄｄｒｅｓｓ：ＬＢＡ）の論理ページ番号（Ｌｏｇｉｃａｌ  Ｐａｇｅ  Ｎｕｍｂｅｒ：ＬＰＮ）部分のマッピングの実施形態の選択された詳細を示す図である。
【図３】図３は、読み出し単位の量として測った長さを総体として有する、様々な読み出し単位数として編成された読み出しデータを生成するための読み出し単位アドレスのところの不揮発性メモリ（Ｎｏｎ−Ｖｏｌａｔｉｌｅ  Ｍｅｍｏｒｙ：ＮＶＭ）へのアクセスの実施形態の選択された詳細を示す図である。
【図４Ａ】図４Ａは、読み出し単位の実施形態の選択された詳細を示す図である。
【図４Ｂ】図４Ｂは、読み出し単位の別の実施形態の選択された詳細を示す図である。
【図５】図５は、いくつかのフィールドを有するヘッダの実施形態の選択された詳細を示す図である。
【図６】図６は、論理スライスおよび／またはセクションとして管理される複数のＮＶＭデバイス（１若しくはそれ以上のフラッシュダイおよび／またはフラッシュチップなど）のブロック、ページ、および読み出し単位の実施形態の選択された詳細を示す図である。
【図７】図７は、より高いレベルの冗長技術の様々な実施形態の選択された詳細を図示する。
【図８】図８は、シリコン独立要素の冗長アレイ（ＲＡＳＩＥ）を用いた動的なより高いレベルの冗長モードの管理の実施形態の選択された詳細を図示する。
【図９】図９は、読み出し単位のうちの１若しくはそれ以上に格納されたより高いレベルの冗長情報によって保護された適応性符号率のより低いレベルの冗長情報を有する読み出し単位の実施形態を図示する。
【図１０】図１０は、より高いレベルの冗長情報の結果とデータ供給源との対応の実施形態の選択された詳細を図示する。
【図１１】図１１は、より高いレベルの冗長情報の計算の実施形態の選択された詳細を図示する。
【図１２】図１２は、（単一の動作の間の）１つの（より低いレベルの）故障からの回復の実施形態の選択された詳細を図示する。
【図１３Ａ】図１３Ａは、（単一の動作の間の）２つの（より低いレベルの）故障からの回復の実施形態の選択された詳細を図示する。
【図１３Ｂ】図１３Ｂは、（単一の動作の間の）２つの（より低いレベルの）故障からの回復の実施形態の選択された詳細を図示する。
【図１３Ｃ】図１３Ｃは、（単一の動作の間の）２つの（より低いレベルの）故障からの回復の実施形態の選択された詳細を図示する。
【図１３Ｄ】図１３Ｄは、（単一の動作の間の）２つの（より低いレベルの）故障からの回復の実施形態の選択された詳細を図示する。
【図１４Ａ】図１４Ａは、ＮＶＭから受信されたページに関するより高いレベルの冗長情報を計算する実施形態の選択された詳細を図示する。
【図１４Ｂ】図１４Ｂは、ＮＶＭから受信されたページに関するより高いレベルの冗長情報を計算する実施形態の選択された詳細を図示する。
【図１５Ａ】図１５Ａは、ＮＶＭに提供された書き込みに関するより高いレベルの冗長情報の計算の取り消しの実施形態の選択された詳細を図示する。
【図１５Ｂ】図１５Ｂは、ＮＶＭに提供された書き込みに関するより高いレベルの冗長情報の計算の取り消しの実施形態の選択された詳細を図示する。
【図１５Ｃ】図１５Ｃは、ＮＶＭに提供された書き込みに関するより高いレベルの冗長情報の計算の取り消しの実施形態の選択された詳細を図示する。
【図１６】図１６は、冗長アレイによるＮＶＭ障害回復の実施形態の選択された詳細を示す図である。
【０００７】
【表１】
2014130587.tif 000003
2014130587.tif 000004
2014130587.tif 000005
2014130587.tif 000006
2014130587.tif 000007
【発明を実施するための形態】
【０００８】
本発明の１若しくはそれ以上の実施形態の詳細な説明を、以下で、本発明の選択された詳細を図示する添付の図を併用して行う。本発明を実施形態との関連で説明する。実施形態は、本明細書では、単なる例示であると理解されるものであり、本発明は、明確に、本明細書中の実施形態のいずれか若しくは全部に、またはいずれか若しくは全部によって限定されるものではなく、本発明は、多数の代替形態、改変形態、および均等物を包含するものである。説明が単調にならないように、様々な言葉によるラベル（最初の、最後の、ある一定の、様々な、別の、他の、特定の、選択の、いくつかの、目立ったなど）が実施形態のセットを区別するために適用される場合がある。本明細書で使用する場合、そのようなラベルは、明確に、質を伝えるためのものでも、いかなる形の好みや先入観を伝えるためのものでもなく、単に、別々のセットを都合よく区別するためのものにすぎない。開示するプロセスのいくつかの動作の順序は本発明の範囲内で変更可能である。多様な実施形態がプロセス、システム、および／またはプログラム命令の各特徴の差異を説明するのに使用される場合は常に、所定の、または動的に決定される基準に従って、複数の多様な実施形態にそれぞれ対応する複数の動作モードの１つの静的選択および／または動的選択を行う他の実施形態が企図されている。以下の説明では、本発明の十分な理解を提供するために、多数の具体的詳細を示す。それらの詳細は例として示すものであり、本発明は、それらの詳細の一部または全部がなくても、特許請求の範囲に従って実施されうる。わかりやすくするために、本発明に関連した技術分野で公知の技術資料は、本発明が不必要に曖昧になることのないように詳細に説明していない。
【０００９】
概説
この概説は、詳細な説明のより迅速な理解を助けるために含まれるにすぎず、本発明は、（それがある場合には、明示的な例を含む）この概説で提示される概念だけに限定されるものではなく、どんな概説の段落も、必然的に、主題全体の縮約された見方であり、網羅的な、または限定的な記述であることを意味するものではない。例えば、以下の概説は、スペースおよび編成によりある一定の実施形態だけに限定される概要情報を提供するものである。特許請求の範囲が究極的にそこに導かれることになる実施形態を含む多くの他の実施形態があり、それらを本明細書の残りの部分にわたって論じる。
【００１０】
頭字語
以下で定義する様々な省略形（頭字語など）の少なくともいくつかは、本明細書で使用するある一定の要素を指す。
【００１１】
【表２】
2014130587.tif 000008
2014130587.tif 000009
2014130587.tif 000010
【００１２】
ＮＡＮＤフラッシュメモリは情報を格納するために浮遊ゲートトランジスタのアレイを使用する。ＳＬＣ技術において、各ビットセル（例えば、浮遊ゲートトランジスタ）は１ビットの情報を格納することを可能にされる。ＭＬＣ技術において、各ビットセルは複数ビットの情報を格納することを可能にされる。製造技術（例えば、ＣＭＯＳ技術）が縮小すると、各浮遊ゲートが格納する電子はより少なくなる。さらに、格納容量及び格納密度が増加すると、各ビットセルが格納するビットはより多くなる。従って、ビットセルに格納される値は、より小さい電圧範囲によって表される。格納された電子の量を時の経過に伴って検知することの不確実性および／または電子の量の変化が、データが不正確に格納される可能性又はデータが不正確に読み出される可能性を増大させる。１若しくはそれ以上の（例えば、より低いレベルにおける）冗長および／またはＥＣＣの技術の使用は、ＮＡＮＤフラッシュメモリからの、別の方法では破損されるデータの正しい検索を可能にし、一部の使用シナリオにおいて上記の問題点の一部を克服する。
【００１３】
一部の種類のＳＳＤは非揮発性ストレージを提供するためにフラッシュメモリを使用する（例えば、フラッシュメモリは電力を加えることなく情報を保持する）。１若しくはそれ以上の（例えば、より高いレベルにおける）ＥＣＣおよび／または冗長の技術の使用は、フラッシュメモリからの、別の方法では破損されるデータの正しい検索を可能にし、および／または１若しくはそれ以上のフラッシュメモリ要素が断続的又は永続的に故障した時であってもＳＳＤの適切なシステムレベルの動作を可能にする。
【００１４】
例えば、１若しくはそれ以上のＮＶＭ（例えば、フラッシュ）要素が部分的にコントローラによって実装されたＳＳＤの動作の間に故障すると、ＳＳＤコントローラはグレイスフルデグラデーションを提供するように独立したシリコン要素を用いた動的なより高いレベルの冗長モードの管理を可能にする。ＮＶＭの一部分が読み出される。（例えば、１若しくはそれ以上のＥＣＣ技術に従った）より低いレベルの冗長性および／または誤り訂正を使用して訂正可能ではない誤りが生じた場合には、（例えば、１若しくはそれ以上のＲＡＳＩＥ技術および／または動的なより高いレベルの冗長モード管理技術に従った）より高いレベルの冗長性および／または誤り訂正が誤りを訂正しようとするために使用される。ＮＶＭ要素のうちの１つの故障が、より低いレベル及び／若しくはより高いレベルの冗長性および／または誤り訂正によって、並びに／又は他の技術（例えば、ＮＶＭ要素のうちの１若しくはそれ以上によって報告された故障状態）によって検知された場合に、より高いレベルの冗長性および／または誤り訂正が現在のモードにおける動作から新しいモードにおける動作に動的に遷移させられる。遷移は、ＳＳＤ上で利用可能な自由空間を減少させることと、ＳＳＤのデータストレージを再構成することと、故障したユーザデータを（可能である場合には）回復／格納することと、修正されたより高いレベルの誤り訂正情報を決定／格納することとのうちの１若しくはそれ以上を含む。それから動作は新しいモードで継続する。ＮＶＭ要素のうちの別のものの別の故障が現在新しいモードにおいて動作しているより高いレベルの冗長性および／または誤り訂正で検知された場合には、別の遷移が別のより高いレベルの冗長性および／または誤り訂正モードに対して行われる。より高いレベルの冗長性および／または誤り訂正動作モードと書き込みデータとに従ってより高いレベルの冗長性および／または誤り訂正情報を決定及び／格納することを含む、ＮＭＶを書き込むことはより高いレベルの冗長性および／または誤り訂正動作モードに従うものである。
【００１５】
閾値より大きい数および／若しくはより低レベルの誤り訂正率ならびに／または１若しくはそれ以上の障害があるメモリ領域について発生した場合には、任意選択で、そのメモリ領域は、現在のより高いレベルの冗長モードおよび／または誤り訂正動作モードよりも多くの誤りから回復することができるようにした新しいより高いレベルの冗長モードおよび／または誤り訂正動作モードでの動作に動的に遷移される。例えば、現在のより高いレベルの冗長モードおよび／または誤り訂正動作モードがない（より低いレベルの冗長性の障害から回復して誤りを訂正するためにより高いレベルの冗長情報が、計算されず、かつ／または使用されないなどの）場合には、新しいより高いレベルの冗長モードおよび／または誤り訂正動作モードは、より低いレベルの冗長性によって訂正不能な単一の障害からの回復を可能にするモードである。別の例として、現在のより高いレベルの冗長モードおよび／または誤り訂正動作モードが、より低いレベルの冗長性によって訂正不能な単一の障害からの回復を可能にするモードである場合には、新しいより高いレベルの冗長モードおよび／または誤り訂正動作モードは、より低いレベルの冗長性によって訂正不能な２つの障害からの回復を可能にするモードである。
【００１６】
より高いレベルの冗長性および／または誤り訂正情報を決定／格納することは、一部の実施形態および／または使用シナリオにおいて、より高いレベルの冗長情報の計算に従うものである。より高いレベルの冗長情報の計算は、コントローラによって部分的に実装されたＳＳＤの動作の間、不揮発性（例えば、フラッシュ）メモリ要素の故障という状況で信頼可能な動作を維持するために、ＳＳＤコントローラがより高いレベルの冗長能力を提供することを可能にする。より高いレベルの冗長情報の第１の部分がより高いレベルの冗長情報によって保護されるデータの一部分（例えば、ストライプ）における全てのページのＸＯＲを介したパリティ符号化を使用して計算される。より高いレベルの冗長情報の第２の部分が加重和技術を使用して計算され、第２の部分における各ページは、加重和を計算する時の重みとして、ゼロではない固有の「指数」を割り当てられる。有限体（例えば、ガロア体、又は例えば、ｐが素数である整数モジュロｐ）に対して計算が行われる。
【００１７】
より高いレベルの冗長情報のそれらの部分は、例えば、ＮＶＭ要素上で行われる１若しくはそれ以上の読み出し動作の計算の順序によって決定された順序又は例えば、ＮＶＭ要素から戻される及び／若しくはＮＶＭ要素から利用可能なデータの順序に基づいた順序などの任意の順序で計算可能であり、様々な実施形態において、バッファリングを減少又は排除することを可能にする。任意の順序の計算の可能性が、様々な実施形態において、比較的に小さい一時的なおよび／または中間のバッファリングおよび／または状態を使用して、回復データ値を計算すること、および／または書き込みを取り消すことを可能にする。より高いレベルの冗長情報のそれらの部分は、例えば、利用可能な専用のハードウェア要素によって決定された任意の程度の並列処理を用いて計算可能であり、様々な実施形態において、減少した待ち時間処理および／または減少したメモリ（例えば、ＮＶＭ）帯域幅の使用を可能にする。
【００１８】
より高いレベルの冗長情報は、様々な実施形態および／または使用シナリオにおいて、いくつかの他の技術と比べて高いプログラミング帯域幅および／または低い待ち時間を提供しつつ、ＮＶＭ素子への書き込み／プログラムの障害からの回復を可能にする。ＮＶＭ素子に書き込んでいる間に、（例えば、１若しくはそれ以上のＲＡＳＩＥ技術による）より高いレベルの冗長情報が、例えば、計算してからオンチップメモリに記憶することによって維持される。この維持は、ＮＶＭ素子を対象とする進行中の書き込み／プログラム動作と関連付けられるすべてのデータをカバーするのに十分なものである。例えばデータは、データが書き込み／プログラミングのためにＮＶＭ素子に送られたときから、ＮＶＭ素子がデータの正常な書き込み／プログラミングを表示するまで進行中である。データが書き込み／プログラミングのためにＮＶＭ素子に送られ、書き込み／プログラム障害からの回復のために維持されているより高いレベルの冗長情報に蓄積され次第、データと関連付けられたバッファリングが解放される。より高いレベルの冗長情報と関連付けられたバッファリングは、書き込み／プログラミングの完了（または障害）まで保持される。
【００１９】
ＮＶＭ素子のうちの１つの書き込み／プログラム障害が生じた場合には、それに応答して、より高いレベルの冗長情報が障害からの回復に使用される。障害が原因で失われたそれ以外のデータは、より高いレベルの冗長情報および以前に（正常に）書き込まれ／プログラムされたデータの全部または任意の部分に基づいて突き止められる。任意選択で、ＮＶＭ素子の書き込み／プログラム障害からの回復のために維持されるより高いレベルの冗長情報の全部または任意の部分が、（例えば、ＮＶＭ素子の後続の読み出しの間のより低いレベルの障害からの回復を可能とするために）ＮＶＭ素子に書き込まれ／プログラムされる。
【００２０】
例示的実施形態
詳細な説明の概説を終えるにあたり、以下に、例示的実施形態をまとめて示す。これらの例示的実施形態は、少なくとも部分的に「ＥＣ」（Ｅｘａｍｐｌｅ  Ｃｏｍｂｉｎａｔｉｏｎｓ：ＥＣｓ）として明示的に列挙されたものを有し、本明細書で説明する概念に従った様々な種類の実施形態の詳細な説明を提供するものである。これらの例は、相互排他的であることも、網羅的であることも、限定的であることも意図されておらず、本発明は、これらの例示的実施形態だけに限定されるものではなく、発行される特許請求の範囲およびその均等物の範囲内のすべての可能な改変形態および変形形態を包含するものである。
【００２１】
ＥＣ１）方法であって、
不揮発性メモリコントローラにおいて、複数の不揮発性メモリのうちのＮ個の部分をプログラムするためのデータを受け取る工程であって、当該データは当該Ｎ個の部分のうちの特定の１つをプログラムするための特定のデータを有するものである、前記受け取る工程と、
前記特定のデータを割り当てられたバッファに記憶する工程であって、当該バッファは前記不揮発性メモリコントローラと関連付けられているものである、前記記憶する工程と、
前記不揮発性メモリのうちの特定の１つに対して前記特定のデータのプログラミングを開始する工程と、
前記Ｎ個の部分のうちＭ個の障害から回復するのに十分な冗長情報を更新する工程と、
前記割り当てられたバッファを解放する工程と
を有し、
前記記憶する工程、前記特定のデータのプログラミングを開始する工程、前記冗長情報を更新する工程、および前記解放する工程のうちの少なくとも１つは、前記受け取る工程に応答するものであり、
前記解放する工程は、前記特定の不揮発性メモリが前記プログラミングを完了する前に行われるものである、
方法。
【００２２】
ＥＣ２）ＥＣ１記載の方法において、前記冗長情報は第１の冗長情報であり、データは前記Ｎ個の部分のサブセットのために受け取られるものであり、プログラミングは前記Ｎ個の部分の前記サブセットについてはまだ開始されていないものであり、この方法は、さらに、
前記Ｎ個の部分の前記サブセットのうちの少なくとも一部のプログラミングを遅延させる工程と、
前記不揮発性メモリのうちの複数のメモリに対して前記第１の冗長情報のプログラミングを開始する工程と、
前記Ｎ個の部分の前記サブセットのうちの前記少なくとも一部のプログラミングを開始する工程と、
前記第１の冗長情報とは異なる、前記Ｎ個の部分の前記サブセットのうちＭ個の障害から回復するのに十分な第２の冗長情報を更新する工程と
を有するものであり、
前記プログラミングを遅延させる工程、前記第１の冗長情報のプログラミングを開始する工程、前記Ｎ個の部分のサブセットのうちの前記少なくとも一部のプログラミングを開始する工程、および前記第２の冗長情報を更新する工程のうちの少なくとも１つは、前記特定のデータの前記プログラミングの障害を検出したことに応答するものである方法。
【００２３】
ＥＣ３）ＥＣ２記載の方法において、前記特定のデータは、前記障害が検出された場合、もっぱら前記第１の冗長情報で符号化されているとおりに記憶されるものである方法。
【００２４】
ＥＣ４）ＥＣ１記載の方法において、前記データは、前記Ｎ個の部分のうちの第１の部分をプログラムするための初期データをさらに有するものであり、さらに、
少なくとも部分的に前記初期データに基づいて前記冗長情報を初期設定する工程を有するものである方法。
【００２５】
ＥＣ５）ＥＣ１記載の方法において、前記不揮発性メモリコントローラは前記割り当てられたバッファを有する方法。
【００２６】
ＥＣ６）ＥＣ１記載の方法において、前記割り当てられたバッファは、前記不揮発性メモリコントローラを有する第２のチップとは独立した第１のチップに具備される方法。
【００２７】
ＥＣ７）ＥＣ１記載の方法において、前記不揮発性メモリコントローラは、ストレージインターフェース規格と適合するコンピューティング・ホスト・インターフェースを少なくとも部分的に介してコンピューティングホストと通信可能なソリッドステート・ディスク・コントローラとして動作するものである方法。
【００２８】
ＥＣ８）ＥＣ１記載の方法において、前記不揮発性メモリコントローラは、前記不揮発性メモリと通信可能なフラッシュ・メモリ・インターフェースを有するものである方法。
【００２９】
ＥＣ９）方法であって、
複数の不揮発性メモリのうちＮ個の部分をプログラムするためのデータを受け取る工程と、
前記受け取ったデータに従って前記Ｎ個の部分の初期プログラミングを要求する工程であって、当該初期プログラミングは、Ｎ個の部分の第２の部分で当該初期プログラミングが開始される前に、前記Ｎ個の部分の第１の部分で完了するものである、前記要求する工程と、
前記初期プログラミングを要求する工程に応答して、前記初期プログラミングが要求されたＮ個の部分のうちＭ個の障害から回復するのに十分な冗長情報を更新する工程と、
前記初期プログラミングに失敗したＮ個の部分の第１の部分のうち１からＭ個までを特定する工程に応答して、少なくとも部分的に前記冗長情報に基づいて計算されたデータに応じた前記不揮発性メモリのうちの最大Ｍ個までの代替部分の代替プログラミングを要求する工程と
を有する方法。
【００３０】
ＥＣ１０）ＥＣ９記載の方法において、前記冗長情報は第１の冗長情報であり、さらに、
前記特定する工程、および前記Ｎ個の部分の前記第２の部分の各々の初期プログラミングを要求する工程に応答して、前記第１の冗長情報とは異なる第２の冗長情報を更新する工程を有するものである方法。
【００３１】
ＥＣ１１）ＥＣ９記載の方法において、当該方法の各工程は、ストレージインターフェース規格と適合するコンピューティング・ホスト・インターフェースを少なくとも部分的に介してコンピューティングホストと通信可能なソリッドステート・ディスク・コントローラとして動作する不揮発性メモリコントローラによって少なくとも部分的に実行されるものである方法。
【００３２】
ＥＣ１２）ＥＣ１１記載の方法において、前記不揮発性メモリコントローラは、前記不揮発性メモリと通信可能なフラッシュ・メモリ・インターフェースを有するものである方法。
【００３３】
ＥＣ１３）方法であって、
複数の不揮発性メモリのうちのＮ個の部分をプログラムするためのデータを受け取る工程と、
少なくとも部分的に前記受け取ったデータに基づき、前記Ｎ個の部分のうちＭ個の障害から回復するのに十分な冗長情報を計算する工程と、
前記受け取ったデータに従って前記Ｎ個の部分の初期プログラミングを要求する工程と、
前記初期プログラミングに失敗したＮ個の部分のうちの１からＭ個までを特定する工程に応答して、少なくとも部分的に前記冗長情報に基づいて計算されたデータに応じた前記不揮発性メモリのうちの最大Ｍ個までの代替部分の代替プログラミングを要求する工程と
を有する方法。
【００３４】
ＥＣ１４）ＥＣ１３記載の方法において、前記計算されるデータは、さらに、前記初期プログラミングが完了した前記Ｎ個の部分のうちの複数の部分から読み出されるデータに少なくとも部分的に基づくものであり、当該読み出されるデータは、前記受け取られたデータの部分に対応するものである方法。
【００３５】
ＥＣ１５）ＥＣ１３記載の方法において、さらに、
前記冗長情報の全部または任意の部分に応じた前記不揮発性メモリのＭ−Ｐ個の部分の追加プログラミングを要求する工程を有するものである方法。
【００３６】
ＥＣ１６）ＥＣ１５記載の方法において、Ｐは０である方法。
【００３７】
ＥＣ１７）ＥＣ１５記載の方法において、Ｐは１である方法。
【００３８】
ＥＣ１８）ＥＣ１３記載の方法において、Ｍは２であり、さらに、
前記Ｎ個の部分のうちの１つの障害から回復するのに十分な冗長情報のサブセットを用いて前記不揮発性メモリの追加部分の追加プログラミングを要求する工程を有するものである方法。
【００３９】
ＥＣ１９）ＥＣ１３記載の方法において、前記初期プログラミングは、少なくとも部分的に第１のインターフェースを介して行われるものであり、さらに、
前記第１のインターフェースとは独立した第２のインターフェースを少なくとも部分的に介して冗長情報を記憶する工程を有するものである方法。
【００４０】
ＥＣ２０）ＥＣ１９記載の方法において、前記第１のインターフェースはチップ間インターフェースであり、前記第２のインターフェースはチップ内インターフェースである方法。
【００４１】
ＥＣ２１）ＥＣ２０記載の方法において、前記チップ間インターフェースは、コントローラチップと不揮発性メモリを有する１若しくはそれ以上のチップとの間で動作するものである方法。
【００４２】
ＥＣ２２）ＥＣ２１記載の方法において、前記チップ内インターフェースは、前記コントローラチップの制御ハードウェアと前記コントローラチップのメモリとの間で動作するものである方法。
【００４３】
ＥＣ２３）ＥＣ１３記載の方法において、さらに、
少なくとも前記特定する工程が完了するまで冗長情報を記憶する工程を有するものである方法。
【００４４】
ＥＣ２４）ＥＣ２３記載の方法において、さらに、
前記計算データを計算した後で、前記記憶する工程によって使用された記憶領域を解放する工程を有するものである方法。
【００４５】
ＥＣ２５）ＥＣ１３記載の方法において、当該方法の各工程は、ストレージインターフェース規格と適合するコンピューティング・ホスト・インターフェースを少なくとも部分的に介してコンピューティングホストと通信可能なソリッドステート・ディスク・コントローラとして動作する不揮発性メモリコントローラによって少なくとも部分的に実行されるものである方法。
【００４６】
ＥＣ２６）ＥＣ２５記載の方法において、前記不揮発性メモリコントローラは、前記不揮発性メモリと通信可能なフラッシュ・メモリ・インターフェースを有するものである方法。
【００４７】
ＥＣ２７）ＥＣ１、ＥＣ９、またはＥＣ１３記載の方法において、前記Ｎ個の部分の各々は、前記不揮発性メモリのそれぞれの１若しくはそれ以上のページを有するものである方法。
【００４８】
ＥＣ２８）ＥＣ１、ＥＣ９、またはＥＣ１３記載の方法において、前記Ｎ個の部分の各々は、前記不揮発性メモリのそれぞれの１若しくはそれ以上のブロックを有するものである方法。
【００４９】
ＥＣ２９）ＥＣ１、ＥＣ９、またはＥＣ１３記載の方法において、前記不揮発性メモリは１若しくはそれ以上のフラッシュメモリを有するものである方法。
【００５０】
ＥＣ３０）システムであって、
割り当てられたバッファと、
不揮発性メモリコントローラにおいて、複数の不揮発性メモリのうちのＮ個の部分をプログラムするためのデータを受け取る手段であって、当該データは当該Ｎ個の部分のうちの特定の１つをプログラムするための特定のデータを有するものである、前記受け取る手段と、
前記特定のデータを前記割り当てられたバッファに記憶する手段であって、当該バッファは前記不揮発性メモリコントローラと関連付けられているものである、前記記憶する手段と、
前記不揮発性メモリのうちの特定の１つに対して前記特定のデータのプログラミングを開始する手段と、
前記Ｎ個の部分のうちＭ個の障害から回復するのに十分な冗長情報を更新する手段と、
前記割り当てられたバッファを解放する手段と
を有し、
前記記憶する手段、前記特定のデータのプログラミングを開始する手段、前記冗長情報を更新する手段、および前記解放する手段のうちの少なくとも１つは、前記受け取る手段に応答するものであり、
前記解放する手段は、前記特定の不揮発性メモリが前記プログラミングを完了する前に前記割り当てられたバッファを解放するように動作するものである、
システム。
【００５１】
ＥＣ３１）ＥＣ３０記載のシステムにおいて、前記冗長情報は第１の冗長情報であり、データはＮ個の部分のサブセットのために受け取られるものであり、プログラミングは前記Ｎ個の部分の該サブセットについてまだ開始されていないものであり、このシステムは、さらに、
前記Ｎ個の部分の前記サブセットのうちの少なくとも一部のプログラミングを遅延させる手段と、
前記不揮発性メモリのうちの複数のメモリに対して前記第１の冗長情報のプログラミングを開始する手段と、
前記Ｎ個の部分の前記サブセットのうちの前記少なくとも一部のプログラミングを開始する手段と、
前記第１の冗長情報とは異なる、前記Ｎ個の部分のサブセットのうちのＭ個の障害から回復するのに十分な第２の冗長情報を更新する手段と
を有するものであり、
前記プログラミングを遅延させる手段、前記第１の冗長情報のプログラミングを開始する手段、前記Ｎ個の部分の前記サブセットのうちの前記少なくとも一部のプログラミングを開始する手段、および前記第２の冗長情報を更新する手段のうちの少なくとも１つは、前記特定のデータの前記プログラミングの障害を検出する手段に応答するものであるシステム。
【００５２】
ＥＣ３２）ＥＣ３１記載のシステムにおいて、前記特定のデータは、前記障害が検出された場合、もっぱら第１の冗長情報で符号化されているとおりに記憶されるシステム。
【００５３】
ＥＣ３３）ＥＣ３０記載のシステムにおいて、前記データは、前記Ｎ個の部分のうちの第１の部分をプログラムするための初期データをさらに有するものであり、さらに、
少なくとも部分的に前記初期データに基づいて前記冗長情報を初期設定する手段を有するものであるシステム。
【００５４】
ＥＣ３４）ＥＣ３０記載のシステムにおいて、前記不揮発性メモリコントローラは割り当てられたバッファを有するシステム。
【００５５】
ＥＣ３５）ＥＣ３０記載のシステムにおいて、前記割り当てられたバッファは、前記不揮発性メモリコントローラを有する第２のチップとは独立した第１のチップに具備されるシステム。
【００５６】
ＥＣ３６）ＥＣ３０記載のシステムにおいて、前記不揮発性メモリコントローラは、ストレージインターフェース規格と適合するコンピューティング・ホスト・インターフェースを少なくとも部分的に介してコンピューティングホストと通信可能なソリッドステート・ディスク・コントローラとして動作するものであるシステム。
【００５７】
ＥＣ３７）ＥＣ３０記載のシステムにおいて、前記不揮発性メモリコントローラは、前記不揮発性メモリと通信可能なフラッシュ・メモリ・インターフェースを有するシステム。
【００５８】
ＥＣ３８）システムであって、
複数の不揮発性メモリのうちのＮ個の部分をプログラムするためのデータを受け取る手段と、
前記受け取ったデータに従って前記Ｎ個の部分の初期プログラミングを要求する手段であって、当該初期プログラミングは、Ｎ個の部分の第２の部分で当該初期プログラミングが開始される前に、前記Ｎ個の部分の第１の部分で完了するものである、前記要求する手段と、
前記初期プログラミングを要求する工程に応答して、前記初期プログラミングが要求されたＮ個の部分のうちＭ個の障害から回復するのに十分な冗長情報を更新する手段と、
前記初期プログラミングに失敗したＮ個の部分の第１の部分のうちの１からＭ個までを特定する工程に応答して、少なくとも部分的に冗長情報に基づいて計算されたデータに応じた不揮発性メモリのうちの最大Ｍ個までの代替部分の代替プログラミングを要求する手段と
を有するシステム。
【００５９】
ＥＣ３９）ＥＣ３８記載のシステムにおいて、前記冗長情報は第１の冗長情報であり、さらに、
前記特定する工程、および前記Ｎ個の部分の前記第２の部分の各々の初期プログラミングを要求する手段に応答して、前記第１の冗長情報とは異なる第２の冗長情報を更新する手段を有するものであるシステム。
【００６０】
ＥＣ４０）ＥＣ３８記載のシステムにおいて、当該システムの各手段は、ストレージインターフェース規格と適合するコンピューティング・ホスト・インターフェースを少なくとも部分的に介してコンピューティングホストと通信可能なソリッドステート・ディスク・コントローラとして動作する不揮発性メモリコントローラによって少なくとも部分的に具備されるシステム。
【００６１】
ＥＣ４１）ＥＣ４０記載のシステムにおいて、前記不揮発性メモリコントローラは、前記不揮発性メモリと通信可能なフラッシュ・メモリ・インターフェースを有するシステム。
【００６２】
ＥＣ４２）システムであって、
複数の不揮発性メモリのうちのＮ個の部分をプログラムするためのデータを受け取る手段と、
少なくとも部分的に受け取ったデータに基づき、前記Ｎ個の部分のうちのＭ個の障害から回復するのに十分な冗長情報を計算する手段と、
前記受け取ったデータに応じたＮ個の部分の初期プログラミングを要求する手段と、
初期プログラミングに失敗したＮ個の部分のうちの１からＭ個までを特定したことに応答して、少なくとも部分的に冗長情報に基づいて計算されたデータに応じた不揮発性メモリのうちの最大Ｍ個までの代替部分の代替プログラミングを要求する手段と
を有するシステム。
【００６３】
ＥＣ４３）ＥＣ４２記載のシステムにおいて、前記計算されるデータは、さらに、前記初期プログラミングを完了した前記Ｎ個の部分のうちの複数の部分から読み出されるデータに少なくとも部分的に基づくものであり、当該読み出されるデータは、前記受け取られたデータの部分に対応するものであるシステム。
【００６４】
ＥＣ４４）ＥＣ４２記載のシステムにおいて、さらに、
前記冗長情報の全部または任意の部分に応じた不揮発性メモリのＭ−Ｐ個の部分の追加プログラミングを要求する手段を有するものであるシステム。
【００６５】
ＥＣ４５）ＥＣ４４記載のシステムにおいて、Ｐは０であるシステム。
【００６６】
ＥＣ４６）ＥＣ４４記載のシステムにおいて、Ｐは１であるシステム。
【００６７】
ＥＣ４７）ＥＣ４２記載のシステムにおいて、Ｍは２であり、さらに、
前記Ｎ個の部分のうちの１つの障害から回復するのに十分な冗長情報のサブセットを用いた前記不揮発性メモリの追加部分の追加プログラミングを要求する手段を有するものであるシステム。
【００６８】
ＥＣ４８）ＥＣ４２記載のシステムにおいて、前記初期プログラミングの手段は、少なくとも部分的に第１のインターフェースを介して動作し、さらに、
前記第１のインターフェースとは独立した第２のインターフェースを少なくとも部分的に介して実行される冗長情報を記憶する手段を有するものであるシステム。
【００６９】
ＥＣ４９）ＥＣ４８記載のシステムにおいて、前記第１のインターフェースはチップ間インターフェースであり、前記第２のインターフェースはチップ内インターフェースであるシステム。
【００７０】
ＥＣ５０）ＥＣ４９記載のシステムにおいて、前記チップ間インターフェースは、コントローラチップと不揮発性メモリとを有する１若しくはそれ以上のチップとの間で動作することができるようにしたシステム。
【００７１】
ＥＣ５１）ＥＣ５０記載のシステムにおいて、前記チップ内インターフェースは前記、コントローラチップの制御ハードウェアとコントローラチップのメモリとの間で動作することができるようにしたシステム。
【００７２】
ＥＣ５２）ＥＣ４２記載のシステムにおいて、さらに、
前記少なくとも特定する工程が完了するまで冗長情報を記憶する手段を有するものであるシステム。
【００７３】
ＥＣ５３）ＥＣ５２記載のシステムにおいて、さらに、
前記計算データを計算した後で、前記記憶する手段によって使用された記憶領域を解放する手段を有するものであるシステム。
【００７４】
ＥＣ５４）ＥＣ４２記載のシステムにおいて、当該システムの各手段は、ストレージインターフェース規格と適合するコンピューティング・ホスト・インターフェースを少なくとも部分的に介してコンピューティングホストと通信可能なソリッドステート・ディスク・コントローラとして動作する不揮発性メモリコントローラに少なくとも部分的に具備されるシステム。
【００７５】
ＥＣ５５）ＥＣ５４記載のシステムにおいて、前記不揮発性メモリコントローラは、前記不揮発性メモリと通信可能なフラッシュ・メモリ・インターフェースを有するものであるシステム。
【００７６】
ＥＣ５６）ＥＣ３０、ＥＣ３８、またはＥＣ４２記載のシステムにおいて、前記Ｎ個の部分の各々は、前記不揮発性メモリのそれぞれの１若しくはそれ以上のページを有するものであるシステム。
【００７７】
ＥＣ５７）ＥＣ３０、ＥＣ３８、またはＥＣ４２記載のシステムにおいて、前記Ｎ個の部分の各々は、前記不揮発性メモリのそれぞれの１若しくはそれ以上のブロックを有するものであるシステム。
【００７８】
ＥＣ５８）ＥＣ３０、ＥＣ３８、またはＥＣ４２記載のシステムにおいて、前記不揮発性メモリは１若しくはそれ以上のフラッシュメモリを有するものであるシステム。
【００７９】
ＥＣ５９）処理要素によって実行されると、当該処理要素に動作を実行させ、かつ／または制御させる命令のセットが記憶されている有形のコンピュータ可読媒体であって、前記動作は、
不揮発性メモリコントローラにおいて、複数の不揮発性メモリのうちのＮ個の部分をプログラムするためのデータを受け取る動作であって、当該データは当該Ｎ個の部分のうちの特定の１つをプログラムするための特定のデータを有するものである、前記受け取る動作と、
前記特定のデータを割り当てられたバッファに記憶する動作であって、当該バッファは前記不揮発性メモリコントローラと関連付けられているものである前記記憶する動作と、
前記不揮発性メモリのうちの特定の１つに対して前記特定のデータのプログラミングを開始する動作と、
前記Ｎ個の部分のうちＭ個の障害から回復するのに十分な冗長情報を更新する動作と、
前記割り当てられたバッファを解放する動作と
を有し、
前記記憶する動作、前記特定のデータのプログラミングを開始する動作、前記冗長情報を更新する動作、および前記解放する動作のうちの少なくとも１つは、前記特定のデータの受け取る動作に応答するものであり、
前記解放する動作は、前記特定の不揮発性メモリが前記プログラミングを完了する前に行われるものである、
有形のコンピュータ可読媒体。
【００８０】
ＥＣ６０）ＥＣ５９記載の有形のコンピュータ可読媒体において、前記冗長情報は第１の冗長情報であり、データはＮ個の部分のサブセットのために受け取られるものであり、プログラミングは前記Ｎ個の部分の前記サブセットについてまだ開始されていないものであり、前記動作は、さらに、
前記Ｎ個の部分の前記サブセットのうちの少なくとも一部のプログラミングを遅延させる動作と、
前記不揮発性メモリのうちの複数のメモリに対して前記第１の冗長情報のプログラミングを開始する動作と、
前記Ｎ個の部分の前記サブセットのうちの前記少なくとも一部のプログラミングを開始する動作と、
前記第１の冗長情報とは異なる、前記Ｎ個の部分の前記サブセットのうちのＭ個の障害から回復するのに十分な第２の冗長情報を更新する動作と
を有するものであり、
前記プログラミングを遅延させる動作、前記第１の冗長情報のプログラミングを開始する動作、前記Ｎ個の部分の前記サブセットのうちの前記少なくとも一部のプログラミングを開始する動作、および前記第２の冗長情報を更新する動作のうちの少なくとも１つは、前記特定のデータの前記プログラミングの障害を検出したことに応答したものである有形のコンピュータ可読媒体。
【００８１】
ＥＣ６１）ＥＣ６０記載の有形のコンピュータ可読媒体において、前記特定のデータは、障害が検出された場合、もっぱら前記第１の冗長情報で符号化されているとおりに記憶される有形のコンピュータ可読媒体。
【００８２】
ＥＣ６２）ＥＣ５９記載の有形のコンピュータ可読媒体において、前記データは、前記Ｎ個の部分のうちの第１の部分をプログラムするための初期データをさらに有するものであり、前記動作は、さらに、
少なくとも部分的に前記初期データに基づいて前記冗長情報を初期設定する動作を有するものである有形のコンピュータ可読媒体。
【００８３】
ＥＣ６３）ＥＣ５９記載の有形のコンピュータ可読媒体において、不揮発性メモリコントローラは割り当てられたバッファを有する有形のコンピュータ可読媒体。
【００８４】
ＥＣ６４）ＥＣ５９記載の有形のコンピュータ可読媒体において、前記割り当てられたバッファは、前記不揮発性メモリコントローラを有する第２のチップとは独立した第１のチップに具備される有形のコンピュータ可読媒体。
【００８５】
ＥＣ６５）ＥＣ５９記載の有形のコンピュータ可読媒体において、前記不揮発性メモリコントローラは、ストレージインターフェース規格と適合するコンピューティング・ホスト・インターフェースを少なくとも部分的に介してコンピューティングホストと通信可能なソリッドステート・ディスク・コントローラとして動作するものである有形のコンピュータ可読媒体。
【００８６】
ＥＣ６６）ＥＣ５９記載の有形のコンピュータ可読媒体において、前記不揮発性メモリコントローラは、前記不揮発性メモリと通信可能なフラッシュ・メモリ・インターフェースを有する有形のコンピュータ可読媒体。
【００８７】
ＥＣ６７）ＥＣ５９記載の有形のコンピュータ可読媒体において、前記不揮発性メモリコントローラは処理要素を有するものである有形のコンピュータ可読媒体。
【００８８】
ＥＣ６８）処理要素によって実行されると、処理要素に動作を実行させ、かつ／または制御させる命令のセットが記憶されている有形のコンピュータ可読媒体であって、前記動作は、
複数の不揮発性メモリのうちのＮ個の部分をプログラムするためのデータを受け取る動作と、
前記受け取ったデータに従って前記Ｎ個の部分の初期プログラミングを要求する動作であって、当該初期プログラミングは、Ｎ個の部分の第２の部分で当該初期プログラミングが開始される前に、前記Ｎ個の部分の第１の部分で完了するものである、前記要求する動作と、
前記初期プログラミングを要求する動作に応答して、前記初期プログラミングが要求されたＮ個の部分のうちのＭ個の障害から回復するのに十分な冗長情報を更新する動作と、
前記初期プログラミングに失敗したＮ個の部分の第１の部分のうち１からＭ個までを特定する工程に応答して、少なくとも部分的に前記冗長情報に基づいて計算されたデータに応じた前記不揮発性メモリのうちの最大Ｍ個までの代替部分の代替プログラミングを要求する動作と
を有する有形のコンピュータ可読媒体。
【００８９】
ＥＣ６９）ＥＣ６８記載の有形のコンピュータ可読媒体において、前記冗長情報は第１の冗長情報であり、前記動作は、さらに、
前記特定する工程、および前記Ｎ個の部分の第２の部分の各々の初期プログラミングを要求する工程に応答して、前記第１の冗長情報とは異なる第２の冗長情報を更新する動作を有するものである有形のコンピュータ可読媒体。
【００９０】
ＥＣ７０）ＥＣ６８記載の有形のコンピュータ可読媒体において、前記処理要素は、ストレージインターフェース規格と適合するコンピューティング・ホスト・インターフェースを少なくとも部分的に介してコンピューティングホストと通信可能なソリッドステート・ディスク・コントローラとして動作する不揮発性メモリコントローラに具備されるものである有形のコンピュータ可読媒体。
【００９１】
ＥＣ７１）ＥＣ７０記載の有形のコンピュータ可読媒体において、前記不揮発性メモリコントローラは、前記不揮発性メモリと通信可能なフラッシュ・メモリ・インターフェースを有する有形のコンピュータ可読媒体。
【００９２】
ＥＣ７２）処理要素によって実行されると、処理要素に動作を実行させ、かつ／または制御させる命令のセットが記憶されている有形のコンピュータ可読媒体であって、前記動作は、
複数の不揮発性メモリのうちのＮ個の部分をプログラムするためのデータを受け取る動作と、
少なくとも部分的に受け取ったデータに基づき、前記Ｎ個の部分のうちＭ個の障害から回復するのに十分な冗長情報を計算する動作と、
前記受け取ったデータに従って前記Ｎ個の部分の初期プログラミングを要求する動作と、
前記初期プログラミングに失敗したＮ個の部分のうちの１からＭ個までを特定する工程に応答して、少なくとも部分的に前記冗長情報に基づいて計算されたデータに応じた前記不揮発性メモリのうちの最大Ｍ個までの代替部分の代替プログラミングを要求する動作と
を有する有形のコンピュータ可読媒体。
【００９３】
ＥＣ７３）ＥＣ７２記載の有形のコンピュータ可読媒体において、前記計算されるデータは、さらに、前記初期プログラミングを完了した前記Ｎ個の部分のうちの複数の部分から読み出されるデータに少なくとも部分的に基づくものであり、当該読み出されるデータは、前記受け取られたデータの部分に対応するものである有形のコンピュータ可読媒体。
【００９４】
ＥＣ７４）ＥＣ７２記載の有形のコンピュータ可読媒体において、前記動作は、読み出された冗長情報の全部または任意の部分に応じた読み出された不揮発性メモリのＭ−Ｐ個の部分の追加プログラミングを要求する動作をさらに有するものである有形のコンピュータ可読媒体。
【００９５】
ＥＣ７５）ＥＣ７４記載の有形のコンピュータ可読媒体において、Ｐは０である有形のコンピュータ可読媒体。
【００９６】
ＥＣ７６）ＥＣ７４記載の有形のコンピュータ可読媒体において、Ｐは１である有形のコンピュータ可読媒体。
【００９７】
ＥＣ７７）ＥＣ７２記載の有形のコンピュータ可読媒体において、Ｍは２であり、前記動作は、さらに、
前記Ｎ個の部分のうちの１つの障害から回復するのに十分な冗長情報のサブセットを用いて前記不揮発性メモリの追加部分の追加プログラミングを要求する動作を有するものである有形のコンピュータ可読媒体。
【００９８】
ＥＣ７８）ＥＣ７２記載の有形のコンピュータ可読媒体において、前記初期プログラミングは、少なくとも部分的に第１のインターフェースを介して行われるものであり、前記動作は、さらに、
前記第１のインターフェースとは独立した第２のインターフェースを少なくとも部分的に介して冗長情報を記憶する動作を有するものである有形のコンピュータ可読媒体。
【００９９】
ＥＣ７９）ＥＣ７８記載の有形のコンピュータ可読媒体において、前記第１のインターフェースはチップ間インターフェースであり、前記第２のインターフェースはチップ内インターフェースである有形のコンピュータ可読媒体。
【０１００】
ＥＣ８０）ＥＣ７９記載の有形のコンピュータ可読媒体において、前記チップ間インターフェースは、コントローラチップと不揮発性メモリとを有する１若しくはそれ以上のチップとの間で動作するものである有形のコンピュータ可読媒体。
【０１０１】
ＥＣ８１）ＥＣ８０記載の有形のコンピュータ可読媒体において、前記チップ内インターフェースは、前記コントローラチップの制御ハードウェアとコントローラチップのメモリとの間で動作するものである有形のコンピュータ可読媒体。
【０１０２】
ＥＣ８２）ＥＣ７２記載の有形のコンピュータ可読媒体において、前記動作は、少なくとも特定する動作が完了するまで冗長情報を記憶する動作を有するものである有形のコンピュータ可読媒体。
【０１０３】
ＥＣ８３）ＥＣ８２記載の有形のコンピュータ可読媒体において、前記動作は、前記計算データを計算した後で、記憶する動作によって使用された記憶領域を解放する動作を有するものである有形のコンピュータ可読媒体。
【０１０４】
ＥＣ８４）ＥＣ７２記載の有形のコンピュータ可読媒体において、前記処理要素は、ストレージインターフェース規格と適合するコンピューティング・ホスト・インターフェースを少なくとも部分的に介してコンピューティングホストと通信可能なソリッドステート・ディスク・コントローラとして動作する不揮発性メモリコントローラに含まれる有形のコンピュータ可読媒体。
【０１０５】
ＥＣ８５）ＥＣ８４記載の有形のコンピュータ可読媒体において、前記不揮発性メモリコントローラは、前記不揮発性メモリと通信可能なフラッシュ・メモリ・インターフェースを有する有形のコンピュータ可読媒体。
【０１０６】
ＥＣ８６）ＥＣ５９、ＥＣ６８、またはＥＣ７２記載の有形のコンピュータ可読媒体において、前記Ｎ個の部分の各々は、前記不揮発性メモリのそれぞれの１若しくはそれ以上のページを有するものである有形のコンピュータ可読媒体。
【０１０７】
ＥＣ８７）ＥＣ５９、ＥＣ６８、またはＥＣ７２記載の有形のコンピュータ可読媒体において、前記Ｎ個の部分の各々は、前記不揮発性メモリのそれぞれの１若しくはそれ以上のブロックを有するものである有形のコンピュータ可読媒体。
【０１０８】
ＥＣ８８）ＥＣ５９、ＥＣ６８、またはＥＣ７２記載の有形のコンピュータ可読媒体において、前記不揮発性メモリは１若しくはそれ以上のフラッシュメモリを有するものである有形のコンピュータ可読媒体。
【０１０９】
ＥＣ８９）記憶インターフェース規格を有し、または参照する前述のＥＣのうちいずれかであって、記憶インターフェース規格は、
ユニバーサル・シリアル・バス（ＵＳＢ）インターフェース規格、
コンパクトフラッシュ（登録商標）（ＣＦ）インターフェース規格、
マルチメディアカード（ＭＭＣ）インターフェース規格、
組み込みＭＭＣ（ｅＭＭＣ）インターフェース規格、
サンダーボルト（Ｔｈｕｎｄｅｒｂｏｌｔ）インターフェース規格、
ＵＦＳインターフェース規格、
セキュアディジタル（ＳＤ）インターフェース規格、
メモリ・スティック・インターフェース規格、
ｘＤピクチャ・カード・インターフェース規格、
統合ドライブエレクトロニクス（ＩＤＥ）インターフェース規格、
シリアル・アドバンスド・テクノロジ・アタッチメント（ＳＡＴＡ）インターフェース規格、
外部ＳＡＴＡ（ｅＳＡＴＡ）インターフェース規格、
小型コンピュータ・システム・インターフェース（ＳＣＳＩ）インターフェース規格、
シリアル小型コンピュータ・システム・インターフェース（ＳＡＳ）インターフェース規格、
ファイバ・チャネル・インターフェース規格、
イーサネット（登録商標）（Ｅｔｈｅｒｎｅｔ（登録商標））インターフェース規格、および
周辺装置相互接続エクスプレス（ＰＣＩｅ）インターフェース規格
のうち１若しくはそれ以上を有するＥＣ。
【０１１０】
ＥＣ９０）フラッシュ・メモリ・インターフェースを有し、または参照する前述のＥＣのうちいずれかであって、フラッシュ・メモリ・インターフェースは、
オープンＮＡＮＤフラッシュインターフェース（ＯＮＦＩ）、
トグルモードインターフェース、
ダブルデータレート（ＤＤＲ）同期インターフェース、
ＤＤＲ２同期インターフェース、
同期インターフェース、および
非同期インターフェース
のうち１若しくはそれ以上と適合するＥＣ。
【０１１１】
ＥＣ９１）コンピューティングホストを有し、または参照する前述のＥＣのうちいずれかであって、コンピューティングホストは、
コンピュータ、
ワークステーションコンピュータ、
サーバコンピュータ、
ストレージサーバ、
ストレージ・アタッチト・ネットワーク（ＳＡＮ）、
ネットワーク・アタッチト・ストレージ（ＮＡＳ）デバイス、
ダイレクト・アタッチト・ストレージ（ＤＡＳ）デバイス、
ストレージアプライアンス、
パーソナルコンピュータ（ＰＣ）、
ラップトップコンピュータ、
ノートブックコンピュータ、
ネットブックコンピュータ、
タブレット機器またはタブレットコンピュータ、
ウルトラブックコンピュータ、
電子読み出し装置（ｅ−ｒｅａｄｅｒ）、
携帯情報端末（ＰＤＡ）
ナビゲーションンシステム
（ハンドヘルド型）全地球測位システム（ＧＰＳ）機器、
自動通信路制御システム、
自動車媒体制御システムまたは自動車媒体制御コンピュータ、
プリンタ、コピー機またはファックス機またはオールインワン機器、
販売時点（ＰＯＳ）機器、
金銭登録機、
メディアプレーヤ、
テレビ、
メディアレコーダ、
ディジタル・ビデオ・レコーダ（ＤＶＲ）、
ディジタルカメラ、
セルラハンドセット、
コードレス電話機ハンドセット、および
電子ゲーム
のうち１若しくはそれ以上を有するＥＣ。
【０１１２】
ＥＣ９２）少なくとも１つのフラッシュメモリを有し、または参照する前述のＥＣのうちいずれかであって、少なくとも１つのフラッシュメモリの少なくとも一部分は、
ＮＡＮＤフラッシュ技術記憶セル、および
ＮＯＲフラッシュ技術記憶セル
のうち１若しくはそれ以上を有するＥＣ。
【０１１３】
ＥＣ９３）少なくとも１つのフラッシュメモリを有し、または参照する前述のＥＣのうちいずれかであって、少なくとも１つのフラッシュメモリの少なくとも一部分は、
シングルレベルセル（ＳＬＣ）フラッシュ技術記憶セル、および
マルチレベルセル（ＭＬＣ）フラッシュ技術記憶セル
のうち１若しくはそれ以上を有するＥＣ。
【０１１４】
ＥＣ９４）少なくとも１つのフラッシュメモリを有し、または参照する前述のＥＣのうちいずれかであって、少なくとも１つのフラッシュメモリの少なくとも一部分は、
多結晶シリコン技術ベースの電荷蓄積セル、および
シリコン窒化膜技術ベースの電荷蓄積セル
のうち１若しくはそれ以上を有するＥＣ。
【０１１５】
ＥＣ９５）少なくとも１つのフラッシュメモリを有し、または参照する前述のＥＣのうちいずれかであって、少なくとも１つのフラッシュメモリの少なくとも一部分は、
２次元技術ベースのフラッシュメモリ技術、および
３次元技術ベースのフラッシュメモリ技術
のうち１若しくはそれ以上を有するＥＣ。
【０１１６】
システム
ある実施形態では、ＳＳＤといった入出力装置がＳＳＤコントローラを有する。ＳＳＤコントローラはホストインターフェースとＳＳＤのＮＶＭとの間のブリッジとして働き、ＳＳＤのホストインターフェースを介してコンピューティングホストから送られるホストプロトコルのコマンドを実行する。コマンドの少なくとも一部は、ＳＳＤに、コンピューティングホストから送られたデータおよびコンピューティングホストに送られるデータについて、それぞれ、ＮＶＭの書き込みおよび読み出しを行うよう指図する。別の実施形態では、ＳＳＤコントローラは、マップを使用してホストプロトコルのＬＢＡとＮＶＭ内の物理的記憶アドレスとを変換することができるようになっている。別の実施形態では、マップの少なくとも一部分が、入出力装置の専用記憶（コンピューティングホストからは見えない）に使用される。例えば、コンピューティングホストからアクセスできないＬＢＡの部分が、入出力装置によって、ログ、統計、または他の専用データへのアクセスを管理するのに使用される。
【０１１７】
ある実施形態では、ＮＶＭ内の様々なサイズの量の圧縮データにアクセスすることにより、ある使用シナリオでは記憶効率が改善される。例えば、ＳＳＤコントローラは、コンピューティングホストから（例えばディスク書き込みコマンドに関連した）（圧縮されていない）データを受け取り、データを圧縮し、データをフラッシュメモリへ記憶する。コンピューティングホストからの（例えばディスク読み出しコマンドに関連した）後続の要求に応答して、ＳＳＤコントローラはフラッシュメモリから圧縮データを読み出し、圧縮データを解凍し、解凍されたデータをコンピューティングホストに提供する。圧縮データは、様々なサイズの量に従ってフラッシュメモリに記憶され、各量のサイズは、例えば、圧縮アルゴリズム、動作モード、様々なデータに関する圧縮有効性により変動する。ＳＳＤコントローラは、一部は、含まれるマップ表を調べて（１つまたは複数の）ヘッダがフラッシュメモリのどこに記憶されているか確認することによってデータを解凍する。ＳＳＤコントローラは、適切な（圧縮）データがフラッシュメモリのどこに記憶されているか確認するためにフラッシュメモリから得た（１つまたは複数の）ヘッダをパースする。ＳＳＤコントローラは、コンピューティングホストに提供すべき解凍データを生成するために、フラッシュメモリからの適切なデータを解凍する。本出願では、「解凍する（ｕｎｃｏｍｐｒｅｓｓ）」（およびその変形）は、「伸張する（ｄｅｃｏｍｐｒｅｓｓ）」（およびその変形）と同義である。
【０１１８】
様々な実施形態では、ＳＳＤコントローラは、コンピューティングホストとインターフェースするためのホストインターフェースと、フラッシュメモリといったＮＶＭとインターフェースするためのインターフェースと、各インターフェースを制御し、圧縮および解凍と共に、より低いレベルの冗長性および／または誤り訂正、より高いレベルの冗長性および／または誤り訂正、ならびに独立シリコン素子を用いた動的より高いレベルの冗長性モード管理を行う（かつ／または行うことの様々な態様を制御する）ための回路とを有する。
【０１１９】
様々な実施形態によれば、あるホストインターフェースは、ＵＳＢインターフェース規格、ＣＦインターフェース規格、ＭＭＣインターフェース規格、ｅＭＭＣインターフェース規格、サンダーボルトインターフェース規格、ＵＦＳインターフェース規格、ＳＤインターフェース規格、メモリ・スティック・インターフェース規格、ｘＤピクチャ・カード・インターフェース規格、ＩＤＥインターフェース規格、ＳＡＴＡインターフェース規格、ＳＣＳＩインターフェース規格、ＳＡＳインターフェース規格、およびＰＣＩｅインターフェース規格のうち１若しくはそれ以上と適合する。様々な実施形態によれば、コンピューティングホストは、コンピュータ、ワークステーションコンピュータ、サーバコンピュータ、ストレージサーバ、ＳＡＮ、ＮＡＳデバイス、ＤＡＳデバイス、ストレージアプライアンス、ＰＣ、ラップトップコンピュータ、ノートブックコンピュータ、ネットブックコンピュータ、タブレット機器またはタブレットコンピュータ、ウルトラブックコンピュータ、電子読み出し装置（ｅ−ｒｅａｄｅｒなど）、ＰＤＡ、ナビゲーションンシステム、（ハンドヘルド型）ＧＰＳ機器、自動通信路制御システム、自動車媒体制御システムまたはコンピュータ、プリンタ、コピー機またはファックス機またはオールインワン機器、ＰＯＳ機器、金銭登録機、メディアプレーヤ、テレビ、メディアレコーダ、ＤＶＲ、ディジタルカメラ、セルラハンドセット、コードレス電話機ハンドセット、および電子ゲームのうち全部または任意の部分である。ある実施形態では、インターフェースホスト（ＳＡＳ／ＳＡＴＡブリッジなど）は、コンピューティングホストおよび／またはコンピューティングホストへのブリッジとして動作する。
【０１２０】
様々な実施形態では、ＳＳＤコントローラは、１若しくはそれ以上のプロセッサを有する。プロセッサは、ＳＳＤコントローラの動作を制御し、かつ／または行うためにファームウェアを実行する。ＳＳＤコントローラは、コマンドおよび／または状況ならびにデータを送り、受け取るためにコンピューティングホストと通信する。コンピューティングホストは、オペレーティングシステム、ドライバ、およびアプリケーションのうち１若しくはそれ以上を実行する。コンピューティングホストによるＳＳＤコントローラとの通信は、任意選択で、かつ／または選択的に、ドライバおよび／またはアプリケーションによるものである。第１の例では、ＳＳＤコントローラへのすべての通信がドライバによるものであり、アプリケーションは、ドライバにより高いレベルのコマンドを提供し、ドライバがそれをＳＳＤコントローラのための特定のコマンドに変換する。第２の例では、ドライバはバイパスモードを実施し、アプリケーションは、ドライバを介してＳＳＤコントローラに特定のコマンドを送ることができるようになっている。第３の例では、ＰＣＩｅ  ＳＳＤコントローラが１若しくはそれ以上の仮想機能（Ｖｉｒｔｕａｌ  Ｆｕｎｃｔｉｏｎｓ：ＶＦｓ）をサポートし、アプリケーションが、一度構成されると、ドライバをバイパスしてＳＳＤコントローラを直接通信することを可能にする。
【０１２１】
様々な実施形態によれば、あるＳＳＤは、ＨＤＤ、ＣＤドライブ、ＤＶＤドライブといった磁気的不揮発性記憶および／または光学的不揮発性記憶によって使用されるフォームファクタ、電気的インターフェース、および／またはプロトコルと適合する。様々な実施形態では、ＳＳＤは、０以上のパリティ符号、０以上のＲＳ符号、０以上のＢＣＨ符号、０以上のビタビ符号または他のトレリス符号、および０以上のＬＤＰＣ符号の様々な組み合わせを使用する。
【０１２２】
図１Ａに、１若しくはそれ以上の（任意選択で内部の）冗長アレイによる不揮発性メモリ（ＮＶＭｓ）のプログラム障害回復を提供するＳＳＤコントローラを含むソリッドステートディスク（ＳＳＤ）の実施形態の選択された詳細を示す。ＳＳＤコントローラは、例えばＮＶＭ素子（フラッシュメモリなど）によって実装される不揮発性記憶を管理するためのものである。ＳＳＤコントローラ１００は、１若しくはそれ以上の外部インターフェース１１０を介してホスト（図示せず）に通信可能に結合されている。様々な実施形態によれば、外部インターフェース１１０は、ＳＡＴＡインターフェース、ＳＡＳインターフェース、ＰＣＩｅインターフェース、ファイバ・チャネル・インターフェース、イーサネット（登録商標）インターフェース（１０ギガビットイーサネット（登録商標）など）、前述のインターフェースのいずれかの非標準バージョン、カスタムインターフェース、または記憶装置および／若しくは通信装置および／若しくはコンピューティング機器を相互接続するのに使用される任意の他の種類のインターフェースのうちの１若しくはそれ以上である。例えば、ある実施形態では、ＳＳＤコントローラ１００は、ＳＡＴＡインターフェースおよびＰＣＩｅインターフェースを含む。
【０１２３】
ＳＳＤコントローラ１００は、さらに、１若しくはそれ以上のデバイスインターフェース１９０を介して、フラッシュデバイス１９２の１若しくはそれ以上のインスタンスといった、１若しくはそれ以上の記憶デバイスを有するＮＶＭ１９９に通信可能に結合されている。様々な実施形態によれば、デバイスインターフェース１９０は、非同期インターフェース、同期インターフェース、シングルデータレート（ＳＤＲ）インターフェース、ダブルデータレート（ＤＤＲ）インターフェース、ＤＲＡＭ互換ＤＤＲ若しくはＤＤＲ２同期インターフェース、ＯＮＦＩ２．２やＯＮＦＩ３．０互換インターフェースといったＯＮＦＩ互換インターフェース、トグルモード互換フラッシュインターフェース、上記のインターフェースのいずれかの非標準バージョン、カスタムインターフェース、または記憶デバイスに接続するのに使用される任意の他の種類のインターフェースのうち１若しくはそれ以上である。
【０１２４】
フラッシュデバイス１９２の各々は、ある実施形態では、１若しくはそれ以上の個々のフラッシュダイ１９４を有する。フラッシュデバイス１９２のうち特定のフラッシュデバイスの種類に従って、特定のフラッシュデバイス１９２内の複数のフラッシュダイ１９４に、並列に、任意選択で、かつ／または選択的にアクセスすることができる。フラッシュデバイス１９２は、単に、ＳＳＤコントローラ１００に通信可能に結合することが可能な記憶デバイスの一種を表しているにすぎない。様々な実施形態では、ＳＬＣ  ＮＡＮＤフラッシュメモリ、ＭＬＣ  ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、多結晶シリコン若しくはシリコン窒化膜技術ベースの電荷蓄積セルを使用したフラッシュメモリ、２次元若しくは３次元技術ベースのフラッシュメモリ、読み出し専用メモリ、スタティック・ランダム・アクセス・メモリ、ダイナミック・ランダム・アクセス・メモリ、強磁性メモリ、相変化メモリ、レーストラックメモリ、ＲｅＲＡＭ、または任意の他の種類のメモリデバイス若しくは記憶媒体といった、任意の種類の記憶デバイスを使用することができる。
【０１２５】
様々な実施形態によれば、デバイスインターフェース１９０は、１つのバスにつきフラッシュデバイス１９２の１若しくはそれ以上のインスタンスを有する１若しくはそれ以上のバス；グループ内のバスにおおむね並列にアクセスさせる、１つのバスにつきフラッシュデバイス１９２の１若しくはそれ以上のインスタンスを有する１若しくはそれ以上のバスグループ；またはデバイスインターフェース１９０上へのフラッシュデバイス１９２の１若しくはそれ以上のインスタンスの任意の他の編成として編成される。
【０１２６】
引き続き図１Ａにおいて、ＳＳＤコントローラ１００は、ホストインターフェース１１１、データ処理１２１、バッファ１３１、マップ１４１、リサイクラ１５１、ＥＣＣ１６１、デバイスインターフェース論理１９１、ＣＰＵ１７１といった１若しくはそれ以上のモジュールを有する。図１Ａに図示する具体的なモジュールおよび相互接続は、単に、一実施形態を表すにすぎず、これらのモジュールの一部または全部、および図示されていないさらに別のモジュールの多くの配置および相互接続が考えられる。第１の例として、ある実施形態では、デュアルポーティングを提供するための２つ以上のホストインターフェース１１１がある。第２の例として、ある実施形態では、データ処理１２１および／またはＥＣＣ１６１がバッファ１３１と組み合わされている。第３の例として、ある実施形態では、ホストインターフェース１１１がバッファ１３１に直接結合されており、データ処理１２１が、バッファ１３１に記憶されたデータに任意選択で、かつ／または選択的に作用する。第４の例として、ある実施形態では、デバイスインターフェース論理１９１がバッファ１３１に直接結合されており、ＥＣＣ１６１が、バッファ１３１に記憶されたデータに任意選択で、かつ／または選択的に作用する。
【０１２７】
ホストインターフェース１１１は、外部インターフェース１１０を介してコマンドおよび／またはデータを送受信し、ある実施形態では、タグ追跡１１３によって個々のコマンドの進捗を追跡する。例えば、コマンドは、読み出すべきアドレス（ＬＢＡなど）およびデータの量（ＬＢＡ量、例えばセクタの数など）を指定する読み出しコマンドを有し、これに応答してＳＳＤは、読み出し状況および／または読み出しデータを提供する。別の例として、コマンドは、書き込むべきアドレス（ＬＢＡなど）およびデータの量（ＬＢＡ量、例えばセクタの数など）を指定する書き込みコマンドを有し、これに応答してＳＳＤは、書き込み状況を提供し、かつ／または書き込みデータを要求し、任意選択でその後に書き込み状況を提供する。さらに別の例として、コマンドは、もはや割り振られる必要のなくなった１若しくはそれ以上のアドレス（１若しくはそれ以上のＬＢＡなど）を指定する割り振り解除コマンド（ｔｒｉｍコマンドなど）を有し、これに応答してＳＳＤは、マップをしかるべく変更し、任意選択で割り振り解除状況を提供する。あるコンテキストでは、ＡＴＡ互換ＴＲＩＭコマンドが割り振り解除コマンドの例である。さらに別の例として、コマンドは、超コンデンサ・テスト・コマンドまたはデータハーデニング成功問い合わせを有し、これに応答してＳＳＤは、適切な状況を提供する。ある実施形態では、ホストインターフェース１１１は、ＳＡＴＡプロトコルと適合し、ＮＣＱコマンドを使用して、最高３２までの未処理のコマンドを有することができるようになっており、各コマンドは０から３１までの数として表された一意のタグを有する。ある実施形態では、タグ追跡１１３は、外部インターフェース１１０を介して受け取ったコマンドのための外部タグを、ＳＳＤコントローラ１００による処理の間にコマンドを追跡するのに使用される内部タグと関連付けることができるようになっている。
【０１２８】
様々な実施形態によれば、データ処理１２１は、任意選択で、かつ／または選択的に、バッファ１３１と外部インターフェース１１０との間で送られる一部または全部のデータを処理する、およびデータ処理１２１は、任意選択で、かつ／または選択的に、バッファ１３１に記憶されたデータを処理する、以下のうち１若しくはそれ以上が行われる。ある実施形態では、データ処理１２１は、１若しくはそれ以上のエンジン１２３を使用して、書式設定、書式設定の変更、符号変換、ならびに他のデータ処理および／または操作タスクのうち１若しくはそれ以上を行う。
【０１２９】
バッファ１３１は外部インターフェース１１０に／からデバイスインターフェース１９０から／に送られるデータを記憶する。ある実施形態では、バッファ１３１は加えて、ＳＳＤコントローラ１００によってフラッシュデバイス１９２の１若しくはそれ以上のインスタンスを管理するのに使用される、一部または全部のマップ表といったシステムデータも記憶する。様々な実施形態において、バッファ１３１は、データの一時記憶に使用されるメモリ１３７、（本明細書で別に記載する）ＮＶＭ書き込み／プログラミングに関連した記憶に使用される割り当てられたバッファ１３８、バッファ１３１との間のデータの移動を制御するのに使用されるＤＭＡ１３３、より高いレベルの誤り訂正機能および／または冗長機能を提供するのに使用されるＥＣＣ−Ｘ１３５、ならびに他のデータ移動機能および／または操作機能のうちの１若しくはそれ以上を有する。より高いレベルの冗長機能の一例はＲＡＩＤ様の機能（例えば、本明細書で別に記載するようなＲＡＳＩＥ）であり、ディスクレベルではなく、フラッシュ・デバイス・レベル（フラッシュデバイス１９２のうちの複数のものなど）および／またはフラッシュ・ダイ・レベル（フラッシュダイ１９４など）の冗長性を有する。
【０１３０】
様々な実施形態によれば、以下のうち１若しくはそれ以上である。ＥＣＣ１６１は、任意選択で、かつ／または選択的に、バッファ１３１とデバイスインターフェース１９０との間で送られる一部または全部のデータを処理する；およびＥＣＣ１６１は、任意選択で、かつ／または選択的に、バッファ１３１に記憶されたデータを処理する。ある実施形態では、ＥＣＣ１６１は、例えば１若しくはそれ以上のＥＣＣ技法に従ったより低いレベルの誤り訂正および／または冗長性機能を提供するのに使用される。ある実施形態では、ＥＣＣ１６１は、ＣＲＣ符号、ハミング符号、ＲＳ符号、ＢＣＨ符号、ＬＤＰＣ符号、ビタビ符号、トレリス符号、硬判定符号、軟判定符号、消去ベースの符号、任意の誤り検出および／または訂正符号、ならびに上記の任意の組み合わせのうち１若しくはそれ以上を実施する。ある実施形態では、ＥＣＣ１６１は、１若しくはそれ以上の復号器（ＬＤＰＣ復号器など）を有する。
【０１３１】
デバイスインターフェース論理１９１は、デバイスインターフェース１９０を介してフラッシュデバイス１９２のインスタンスを制御する。デバイスインターフェース論理１９１は、フラッシュデバイス１９２のプロトコルに従ってフラッシュデバイス１９２のインスタンスへ／からデータを送ることができるようになっている。デバイスインターフェース論理１９１は、デバイスインターフェース１９０を介したフラッシュデバイス１９２のインスタンスの制御を選択的に配列するスケジューリング１９３を有する。例えば、ある実施形態では、スケジューリング１９３は、フラッシュデバイス１９２のインスタンスへの操作を待ち行列に入れ、フラッシュデバイス１９２（またはフラッシュダイ１９４）のインスタンスの個々のインスタンスへの操作を、フラッシュデバイス１９２（またはフラッシュダイ１９４）のインスタンスの個々のインスタンスが利用可能になるに従って選択的に送ることができるようになっている。
【０１３２】
マップ１４１は、外部インターフェース１１０上で使用されるデータアドレス指定と、デバイスインターフェース１９０上で使用されるデータアドレス指定との間の変換を行い、表１４３を使用して外部データアドレスからＮＶＭ１９９内の位置へマップする。例えば、ある実施形態では、マップ１４１は、外部インターフェース１１０上で使用されるＬＢＡを、表１４３によって提供されるマッピングにより、１若しくはそれ以上のフラッシュダイ１９４を対象とするブロックおよび／またはページアドレスに変換する。ドライブ製造または割り振り解除以来一度も書き込まれていないＬＢＡでは、マップは、ＬＢＡが読み出された場合に返すべきデフォルト値を指し示す。例えば、割り振り解除コマンドを処理するときに、マップは、割り振り解除されたＬＢＡに対応するエントリがデフォルト値のうち１つを指し示すように変更される。様々な実施形態では、様々なデフォルト値があり、各々が対応するポインタを有する。複数のデフォルト値は、ある（例えば第１の範囲内の）割り振り解除されたＬＢＡを１つのデフォルト値として読み出し、ある（例えば第２の範囲内の）割り振り解除されたＬＢＡを別のデフォルト値として読み出すことを可能にする。デフォルト値は、様々な実施形態では、フラッシュメモリ、ハードウェア、ファームウェア、コマンドおよび／若しくはプリミティブ引数および／若しくはパラメータ、プログラマブルレジスタ、またはそれらの様々な組み合わせによって定義される。
【０１３３】
ある実施形態では、マップ１４１は、表１４３を使用して、外部インターフェース１１０上で使用されるアドレスと、デバイスインターフェース１９０上で使用されるデータアドレス指定との間の変換を行い、かつ／またはルックアップする。様々な実施形態によれば、表１４３は、１レベルマップ、２レベルマップ、マルチレベルマップ、マップキャッシュ、圧縮マップ、あるアドレス空間から別のアドレス空間への任意の種類のマッピング、および上記の任意の組み合わせのうち１若しくはそれ以上である。様々な実施形態によれば、表１４３は、スタティック・ランダム・アクセス・メモリ、ダイナミック・ランダム・アクセス・メモリ、ＮＶＭ（フラッシュメモリなど）、キャッシュメモリ、オンチップメモリ、オフチップメモリ、および上記の任意の組み合わせのうち１若しくはそれ以上を有する。
【０１３４】
ある実施形態では、リサイクラ１５１は、不要部分の整理を行う。例えば、ある実施形態では、フラッシュデバイス１９２のインスタンスは、ブロックが書き換え可能になる前に消去されなければならないブロックを有する。リサイクラ１５１は、例えば、マップ１４１によって維持されるマップをスキャンすることによって、フラッシュデバイス１９２のインスタンスのどの部分が実際に使用されているか（例えば、割り振り解除されているのではなく割り振られていること）を決定し、フラッシュデバイス１９２のインスタンスの未使用の（例えば割り振り解除された）部分を、未使用の部分を消去することによって書き込みに利用できるようにすることができるようになっている。別の実施形態では、リサイクラ１５１は、フラッシュデバイス１９２のインスタンスのより大きい連続した部分を書き込みに利用できるようにするために、フラッシュデバイス１９２のインスタンス内に記憶されたデータを移動することができるようになっている。
【０１３５】
ある実施形態では、フラッシュデバイス１９２のインスタンスは、異なる種類および／または属性のデータを記憶するための１若しくはそれ以上のバンドを保持するように、選択的に、かつ／または動的に構成され、管理され、かつ／または使用される。バンドの数、配置、サイズ、および種類は、動的に変更可能である。例えば、コンピューティングホストからのデータはホット（アクティブな）バンドに書き込まれ、リサイクラ１５１からのデータはコールド（あまりアクティブではない）バンドに書き込まれる。ある使用シナリオでは、コンピューティングホストが長い順次のストリームを書き込む場合には、ホットバンドのサイズが増大し、コンピューティングホストがランダムな書き込みを行い、またはわずかな書き込みしか行わない場合には、コールドバンドのサイズが増大する。
【０１３６】
ＣＰＵ１７１は、ＳＳＤコントローラ１００の様々な部分を制御する。ＣＰＵ１７１は、ＣＰＵコア１７２を有する。ＣＰＵコア１７２は、様々な実施形態によれば、１若しくはそれ以上のシングルコアプロセッサまたはマルチコアプロセッサである。ＣＰＵコア１７２内の個々のプロセッサコアは、ある実施形態では、マルチスレッド化されている。ＣＰＵコア１７２は、命令および／またはデータのキャッシュおよび／またはメモリを有する。例えば、命令メモリは、ＣＰＵコア１７２が、ＳＳＤコントローラ１００を制御するためのプログラム（ファームウェアとも呼ばれるソフトウェアなど）を実行することを可能にする命令を有する。ある実施形態では、ＣＰＵコア１７２によって実行されるファームウェアの一部または全部が、（例えば、図１ＢのＮＶＭ１９９のファームウェア１０６として図示されている）フラッシュデバイス１９２のインスタンス上に記憶される。
【０１３７】
様々な実施形態では、ＣＰＵ１７１は、外部インターフェース１１０を介して受け取られるコマンドを、コマンドが進行している間に追跡し、制御するコマンド管理１７３、バッファ１３１の割り振りおよび使用を制御するバッファ管理１７５、マップ１４１を制御する変換管理１７７、データアドレス指定の整合性を制御し、例えば、外部データアクセスと再利用データアクセスとの間の矛盾を回避するコヒーレンシ管理１７９、デバイスインターフェース論理１９１を制御するデバイス管理１８１、識別情報の変更および通信を制御する識別情報管理１８２、ならびに、任意選択で、他の管理部をさらに有する。ＣＰＵ１７１によって果たされる管理機能は、そのいずれか、若しくは全部が、ハードウェア、ソフトウェア（ＣＰＵコア１７２上や、外部インターフェース１１０を介して接続されたホスト上で実行されるファームウェアなど）、またはそれらの任意の実施形態によって制御され、かつ／または管理され、あるいは、そのどれも、制御も管理もされないものである。
【０１３８】
ある実施形態では、ＣＰＵ１７１は、性能統計の収集および／または報告、ＳＭＡＲＴの実施、電源逐次開閉機構の制御、電力消費の制御および／または調整、電源障害への応答、クロック速度の制御および／またはモニタリングおよび／または調整、ならびに他の管理タスクのうち１若しくはそれ以上といった、他の管理タスクを行うことができるようになっている。
【０１３９】
様々な実施形態は、ＳＳＤコントローラ１００と同様の、例えば、ホストインターフェース１１１および／または外部インターフェース１１０の適応による、様々なコンピューティングホストを用いた動作と適合するコンピューティングホスト・フラッシュ・メモリ・コントローラを有する。様々なコンピューティングホストは、コンピュータ、ワークステーションコンピュータ、サーバコンピュータ、ストレージサーバ、ＳＡＮ、ＮＡＳデバイス、ＤＡＳデバイス、ストレージアプライアンス、ＰＣ、ラップトップコンピュータ、ノートブックコンピュータ、ネットブックコンピュータ、タブレット機器またはタブレットコンピュータ、ウルトラブックコンピュータ、電子読み出し装置（ｅ−ｒｅａｄｅｒなど）、ＰＤＡ、ナビゲーションンシステム、（ハンドヘルド型）ＧＰＳ機器、自動通信路制御システム、自動車媒体制御システムまたはコンピュータ、プリンタ、コピー機またはファックス機またはオールインワン機器、ＰＯＳ機器、金銭登録機、メディアプレーヤ、テレビ、メディアレコーダ、ＤＶＲ、ディジタルカメラ、セルラハンドセット、コードレス電話機ハンドセット、および電子ゲームのうち１つまたはそれらの任意の組み合わせを有する。
【０１４０】
様々な実施形態では、ＳＳＤコントローラ（またはコンピューティングホスト・フラッシュ・メモリ・コントローラ）の全部または任意の部分が、単一のＩＣ、マルチダイＩＣの単一のダイ、マルチダイＩＣの複数のダイ、または複数のＩＣ上で実施される。例えば、バッファ１３１は、ＳＳＤコントローラ１００の他の要素と同じダイ上に実施される。別の例では、バッファ１３１は、ＳＳＤコントローラ１００の他の要素と異なるダイ上に実施される。
【０１４１】
図１Ｂに、図１ＡのＳＳＤの１若しくはそれ以上のインスタンスを有するシステムの様々な実施形態の選択された詳細を図示する。ＳＳＤ１０１は、デバイスインターフェース１９０を介してＮＶＭ１９９に結合されたＳＳＤコントローラ１００を有する。図には、様々な種別の実施形態、すなわち、ホストに直接結合された単一のＳＳＤ、各々がそれぞれの外部インターフェースを介してホストに直接それぞれ結合されている複数のＳＳＤ、および様々な相互接続要素を介してホストに間接的に結合された１若しくはそれ以上のＳＳＤが示されている。
【０１４２】
ホストに直接結合された単一のＳＳＤの例示的実施形態としては、ＳＳＤ１０１の１つのインスタンスが、外部インターフェース１１０を介してホスト１０２に直接結合される（例えば、スイッチ／ファブリック／中間コントローラ１０３が省かれ、バイパスされ、またはパススルーされる）。各々がそれぞれの外部インターフェースを介してホストに直接結合されている複数のＳＳＤの例示的実施形態としては、ＳＳＤ１０１の複数のインスタンスの各々が、外部インターフェース１１０のそれぞれのインスタンスを介してホスト１０２に直接それぞれ結合される（例えば、スイッチ／ファブリック／中間コントローラ１０３が省かれ、バイパスされ、またはパススルーされる）。様々な相互接続要素を介してホストに間接的に結合された１若しくはそれ以上のＳＳＤの例示的実施形態としては、ＳＳＤ１０１の１若しくはそれ以上のインスタンスの各々が、ホスト１０２に間接的にそれぞれ結合される。各間接結合は、スイッチ／ファブリック／中間コントローラ１０３に結合された外部インターフェース１１０のそれぞれのインスタンス、およびホスト１０２に結合する中間インターフェース１０４を介したものである。
【０１４３】
スイッチ／ファブリック／中間コントローラ１０３を有する実施形態の一部は、メモリインターフェース１８０を介して結合された、ＳＳＤによってアクセス可能なカードメモリ１１２Ｃも有する。様々な実施形態では、ＳＳＤ、スイッチ／ファブリック／中間コントローラ、および／またはカードメモリのうち１若しくはそれ以上が、物理的に識別可能なモジュール、カード、または差し込み可能な要素（入出力カード１１６など）上に含まれる。ある実施形態では、ＳＳＤ１０１（またはその変形）は、ホスト１０２として動作するイニシエータ（開始プログラム）に結合されたＳＡＳドライブまたはＳＡＴＡドライブに対応する。
【０１４４】
ホスト１０２は、ＯＳ１０５、ドライバ１０７、アプリケーション１０９、マルチデバイス管理ソフトウェア１１４の様々な組み合わせといった、ホストソフトウェア１１５の様々な要素を実行することができるようになっている。点線矢印１０７Ｄは、ホストソフトウェア←→入出力装置通信、例えば、ＳＳＤ１０１のインスタンスのうち１若しくはそれ以上から／へ、ドライバ１０７を介したＯＳ１０５、ドライバ１０７、および、ドライバ１０７を介して、またはＶＦとして直接アプリケーション１０９のうち任意の１若しくはそれ以上へ／から送られ／受け取られるデータを表す。
【０１４５】
ＯＳ１０５は、ＳＳＤとインターフェースするための（概念的にはドライバ１０７によって図示されている）ドライバを有し、かつ／またはそのようなドライバを用いて動作することができるようになっている。Ｗｉｎｄｏｗｓ（登録商標）の様々なバージョン（９５、９８、ＭＥ、ＮＴ、ＸＰ、２０００、サーバ、Ｖｉｓｔａ、および７など）、Ｌｉｎｕｘ（登録商標）の様々なバージョン（Ｒｅｄ  Ｈａｔ、Ｄｅｂｉａｎ、およびＵｂｕｎｔｕなど）、ならびにＭａｃＯＳの様々なバージョン（８、９およびＸなど）がＯＳ１０５の例である。様々な実施形態では、ドライバは、ＳＡＴＡ、ＡＨＣＩ、ＮＶＭ  Ｅｘｐｒｅｓｓといった標準のインターフェースおよび／またはプロトコルを用いて動作する標準のドライバおよび／または汎用のドライバ（「シュリンクラップされた（市販の）」または「プリインストールされた」ともいう）であり、あるいは、任意選択で、ＳＳＤ１０１に特有のコマンドの使用を可能にするようにカスタマイズされており、かつ／またはベンダ特有のものである。あるドライブおよび／またはドライバは、アプリケーションレベルのプログラム、例えば最適化ＮＡＮＤアクセス（Ｏｐｔｉｍｉｚｅｄ  ＮＡＮＤ  Ａｃｃｅｓｓ）（ＯＮＡともいう）または直接ＮＡＮＤアクセス（Ｄｉｒｅｃｔ  ＮＡＮＤ  Ａｃｃｅｓｓ）（ＤＮＡともいう）の各技法によるアプリケーション１０９などが、コマンドをＳＳＤ１０１に直接伝えることを可能にするパススルーモードを有し、カスタマイズされたアプリケーションが、汎用ドライバとでさえもＳＳＤ１０１に特有のコマンドを使用することを可能にする。ＯＮＡの技法は、非標準変更子（ｈｉｎｔｓ）の使用、ベンダ特有のコマンドの使用、非標準の統計の通信、例えば圧縮可能性に従った実際のＮＶＭの使用、および他の技法のうち１若しくはそれ以上を有する。ＤＮＡの技法は、ＮＶＭへのマップされていない読み出し、書き込み、および／または消去アクセスを提供する非標準のコマンドまたはベンダ特有の（コマンド）の使用、例えば、入出力装置が通常は行うはずのデータの書式設定をバイパスすることによる、ＮＶＭへのより直接的なアクセスを提供する非標準の、またはベンダ特有のコマンドの使用、および他の技法のうち１若しくはそれ以上を有する。ドライバの例は、ＯＮＡまたはＤＮＡサポートなしのドライバ、ＯＮＡ使用可能ドライバ、ＤＮＡ使用可能ドライバ、ＯＮＡ／ＤＮＡ使用可能ドライバである。ドライバの別の例は、ベンダ提供ドライバ、ベンダ開発ドライバ、および／またはベンダ拡張ドライバ、ならびにクライアント提供ドライバ、クライアント開発ドライバ、および／またはクライアント拡張ドライバである。
【０１４６】
アプリケーションレベルのプログラムの例は、ＯＮＡまたはＤＮＡサポートなしのアプリケーション、ＯＮＡ使用可能アプリケーション、ＤＮＡ使用可能アプリケーション、およびＯＮＡ／ＤＮＡ使用可能アプリケーションである。点線矢印１０９Ｄは、アプリケーション←→入出力装置通信（ドライバによるバイパスや、アプリケーションのためのＶＦによるバイパスなど）、例えば、ＯＳを仲介として使用するアプリケーションなしでＳＳＤと通信するＯＮＡ使用可能アプリケーションおよびＯＮＡ使用可能ドライバなどを表す。点線矢印１０９Ｖは、アプリケーション←→入出力装置通信（アプリケーションのためのＶＦによるバイパスなど）、例えば、ＯＳまたはドライバを仲介として使用するアプリケーションなしでＳＳＤと通信するＤＮＡ使用可能アプリケーションおよびＤＮＡ使用可能ドライバなどを表す。
【０１４７】
ＮＶＭ１９９の１若しくはそれ以上の部分が、ある実施形態では、ファームウェア記憶、例えばファームウェア１０６に使用される。ファームウェア記憶は、１若しくはそれ以上のファームウェアイメージ（またはその部分）を有する。ファームウェアイメージは、例えばＳＳＤコントローラ１００のＣＰＵコア１７２によって実行される、例えばファームウェアの１若しくはそれ以上のイメージを有する。ファームウェアイメージは、別の例では、例えばファームウェア実行時にＣＰＵコアによって参照される、定数、パラメータ値、ＮＶＭデバイス情報の１若しくはそれ以上のイメージを有する。ファームウェアのイメージは、例えば、現在のファームウェアイメージおよび０以上の（ファームウェア更新に対して）前のファームウェアイメージに対応する。様々な実施形態では、ファームウェアは、汎用動作モード、標準動作モード、ＯＮＡ動作モード、および／またはＤＮＡ動作モードを提供する。ある実施形態では、ファームウェア動作モードのうち１若しくはそれ以上が、ドライバによって任意選択で伝えられ、かつ／または提供される、鍵または様々なソフトウェア技法によって使用可能とされる（例えば、１若しくはそれ以上のＡＰＩが「ロック解除」される）。
【０１４８】
スイッチ／ファブリック／中間コントローラを欠くある実施形態では、ＳＳＤは、外部インターフェース１１０を介して直接ホストに結合される。様々な実施形態では、ＳＳＤコントローラ１００は、ＲＡＩＤコントローラといった他のコントローラの１若しくはそれ以上の中間レベルを介してホストに結合される。ある実施形態では、ＳＳＤ１０１（またはその変形）は、ＳＡＳドライブまたはＳＡＴＡドライブに対応し、スイッチ／ファブリック／中間コントローラ１０３は、イニシエータにさらに結合されたエキスパンダに対応し、あるいは、スイッチ／ファブリック／中間コントローラ１０３は、エキスパンダを介してイニシエータに間接的に結合されたブリッジに対応する。ある実施形態では、スイッチ／ファブリック／中間コントローラ１０３は、１若しくはそれ以上のＰＣＩｅスイッチおよび／またはファブリックを有する。
【０１４９】
様々な実施形態、例えば、コンピューティングホストとしてのホスト１０２（コンピュータ、ワークステーションコンピュータ、サーバコンピュータ、ストレージサーバ、ＳＡＮ、ＮＡＳデバイス、ＤＡＳデバイス、ストレージアプライアンス、ＰＣ、ラップトップコンピュータ、ノートブックコンピュータ、および／またはネットブックコンピュータなど）を有する実施形態のあるものでは、コンピューティングホストは、任意選択で、１若しくはそれ以上のローカルサーバおよび／またはリモートサーバ（例えば、任意選択のサーバ１１８）と（例えば、任意選択の入出力装置／リソースおよび記憶装置／リソース１１７および任意選択のＬＡＮ／ＷＡＮ１１９を介して）通信することができるようになっている。通信は、例えば、ＳＳＤ１０１要素のうち任意の１若しくはそれ以上のローカルおよび／またはリモートのアクセス、管理、および／または使用を可能にする。ある実施形態では、通信は、全部または一部がイーサネット（登録商標）（Ｅｔｈｅｒｎｅｔ（登録商標））によるものである。ある実施形態では、通信は、全部または一部がファイバチャネルによるものである。ＬＡＮ／ＷＡＮ１１９は、様々な実施形態では、１若しくはそれ以上のローカル・エリア・ネットワークおよび／または広域ネットワーク、例えば、サーバファーム内のネットワーク、サーバファームを結合するネットワーク、メトロエリアネットワーク、およびインターネットのうち任意の１若しくはそれ以上を表す。
【０１５０】
様々な実施形態では、１若しくはそれ以上のＮＶＭと組み合わされたＳＳＤコントローラおよび／またはコンピューティングホスト・フラッシュ・メモリ・コントローラが、ＵＳＢ記憶コンポーネント、ＣＦ記憶コンポーネント、ＭＭＣ記憶コンポーネント、ｅＭＭＣ記憶コンポーネント、サンダーボルト記憶コンポーネント、ＵＦＳ記憶コンポーネント、ＳＤ記憶コンポーネント、メモリスティック記憶コンポーネント、ｘＤピクチャカード記憶コンポーネントといった不揮発性記憶コンポーネントとして実施される。
【０１５１】
様々な実施形態では、ＳＳＤコントローラ（またはコンピューティングホスト・フラッシュ・メモリ・コントローラ）の全部またはいずれかの部分、またはその機能が、コントローラが結合されるべきホスト（図１Ｂのホスト１０２など）において実施される。様々な実施形態では、ＳＳＤコントローラ（若しくはコンピューティングホスト・フラッシュ・メモリ・コントローラ）の全部またはいずれかの部分、またはその機能が、ハードウェア（論理回路など）、ソフトウェアおよび／若しくはファームウェア（ドライバソフトウェアおよび／若しくはＳＳＤ制御ファームウェアなど）、またはそれらの任意の組み合わせによって実施される。例えば、（例えば図１ＡのＥＣＣ１６１および／またはＥＣＣ−Ｘ１３５と同様の）ＥＣＣ部の、またはＥＣＣ部と関連付けられた機能が、一部はホスト上のソフトウェアによって、一部はＳＳＤコントローラ内のファームウェアとハードウェアとの組み合わせによって実施される。別の例として、（例えば図１Ａのリサイクラ１５１と同様の）リサイクラ部の、またはリサイクラ部と関連付けられた機能が、一部はホスト上のソフトウェアによって、一部はコンピューティングホスト・フラッシュ・メモリ・コントローラ内のハードウェアによって実施される。
【０１５２】
マッピング操作
図２に、ＬＢＡのＬＰＮ部分のマッピングの実施形態の選択された詳細を図示する。ある実施形態では、読み出し単位は、ＮＶＭのページの部分といった、独立に読み出すことのできるＮＶＭの最も細かい粒度である。別の実施形態では、読み出し単位は、検査ビットによって保護されるすべてのデータに（低レベル）誤り訂正符号の検査ビット（冗長性ともいう）を加えたものに対応する。例えば、図１ＡのＥＣＣ１６１は、検査ビットによる、例えばＬＤＰＣ符号による誤り訂正を実施し、読み出し単位は、ＬＤＰＣ符号化ビットによって保護されるデータビットにＬＤＰＣ符号を加えたものを実施する符号化ビットに対応する。
【０１５３】
ある実施形態では、マップ１４１は、ＬＢＡ２１１のＬＰＮ２１３部分を、例えば（図１Ａに図示される）表１４３によって、ＬＰＮのためのマップ情報２２１にマップする。ＬＰＮのためのマップ情報（例えばＬＰＮのためのマップ情報２２１）をマップエントリともいう。マップ１４１は、ＬＰＮを対応するマップエントリと関連付けるといわれる。様々な実施形態では、マッピングは、１若しくはそれ以上の連想ルックアップ、１若しくはそれ以上の非連想ルックアップ、および／または１若しくはそれ以上の他の技法によるものである。
【０１５４】
ある実施形態では、ＳＳＤコントローラ１００は、潜在的に、かつ／またはアクティブに使用されているＬＰＮごとに１つのマップエントリを維持する。
【０１５５】
ある実施形態では、ＬＰＮのためのマップ情報２２１は、それぞれの読み出し単位アドレス２２３および読み出し単位での長さ２２５を有する。ある実施形態では、長さおよび／または範囲は、例えば、読み出し単位での長さ２２５の全部またはいずれかの部分において、例えば、長さを範囲からのオフセットとして記憶することによって、符号化して記憶される。別の実施形態では、第１のＬＰＮは第１のマップエントリと関連付けられており、（第１のＬＰＮと異なるが、第１のＬＰＮによって参照される論理ページと同サイズの論理ページを参照する）第２のＬＰＮは第２のマップエントリと関連付けられており、第１のマップエントリのそれぞれの読み出し単位での長さは、第２のマップエントリのそれぞれの読み出し単位での長さと異なる。
【０１５６】
様々な実施形態では、同じ時点において、第１のＬＰＮは第１のマップエントリと関連付けられており、（第１のＬＰＮと異なる）第２のＬＰＮは第２のマップエントリと関連付けられており、第１のマップエントリのそれぞれの読み出し単位アドレスは、第２のマップエントリのそれぞれの読み出し単位アドレスと同じである。別の実施形態では、第１のＬＰＮと関連付けられたデータおよび第２のＬＰＮと関連付けられたデータは、どちらも、ＮＶＭ１９９内の同じデバイスの同じ物理ページに記憶されている。
【０１５７】
様々な実施形態によれば、読み出し単位アドレス２２３は、ＮＶＭ内の開始アドレス、ＮＶＭ内の終了アドレス、上記のいずれかのオフセット、およびＬＰＮ２１３と関連付けられたＮＶＭの部分を特定するための任意の他の技法のうち１若しくはそれ以上と関連付けられている。
【０１５８】
図３に、読み出し単位の量で測った長さを総体として有する、様々な読み出し単位として編成された読み出しデータを生成するための、読み出し単位アドレスのところのＮＶＭへのアクセスの実施形態の選択された詳細を図示する。様々な実施形態によれば、最初の読み出し単位３１３は、ＮＶＭのアドレス空間における最低のアドレスを有する読み出しデータ３１１内の読み出し単位のうち１つ、読み出し単位のうち固定された１つ、読み出し単位のうち任意の１つ、読み出し単位のうち可変の１つ、および任意の他の技法によって選択される読み出し単位のうち１つのうち１若しくはそれ以上である。様々な実施形態では、ＳＳＤコントローラ１００は、ＮＶＭ１９９にアクセスし、読み出し単位での長さ２２５によって指定される数以下の数の読み出し単位を読み出すことによって読み出しデータ３１１を生成することができるようになっている。
【０１５９】
図４Ａに、（図３の読み出し単位３１３や読み出し単位３１５といった）読み出し単位の実施形態の選択された詳細を読み出し単位４０１Ａとして図示する。様々な実施形態および／または使用シナリオにおいて、ヘッダ１  ４１１ＡからヘッダＮ  ４１９Ａは連続しており、ヘッダの各々によって（例えばそれぞれのオフセットにより）特定されるそれぞれのデータ領域は、ヘッダの最後のものに後に続いて連続している。各データ領域は総体としてデータバイト４２１Ａを形成している。各データ領域は、各ヘッダが記憶される位置順と一致した位置順で記憶される。例えば、読み出し単位の先頭のところの第１のヘッダを考えると、第２のヘッダおよび第３のヘッダは、第１のヘッダのすぐ後に続く。（第１のヘッダ内の第１のオフセットによって特定される）第１のデータ領域は第３のヘッダのすぐ後に続く。（第２のヘッダ内の第２のオフセットによって特定される）第２のデータ領域は第１のデータ領域のすぐ後に続く。同様に、（第３のヘッダ内によって特定される）第３データ領域も第２のデータ領域のすぐ後に続く。
【０１６０】
図４Ｂに、（図３の読み出し単位３１３や読み出し単位３１５といった）読み出し単位の別の実施形態の選択された詳細を読み出し単位４０１Ｂとして図示する。様々な実施形態および／または使用シナリオにおいて、ヘッダマーカ（ＨＭ）４１０Ｂは、後に続く連続したヘッダ（ヘッダ１  ４１１Ｂ、ヘッダ２  ４１２Ｂ...ヘッダＮ  ４１９Ｂ）の数を指示する任意選択の最初のフィールド（例えば１バイトのフィールド）である。データ領域（データバイト４２１Ｂ、データバイト４２２Ｂ...データバイト４２９Ｂ）は、それぞれ、ヘッダ（ヘッダ１  ４１１Ｂ、ヘッダ２  ４１２Ｂ...ヘッダＮ  ４１９Ｂ）によって特定され、ヘッダが記憶される位置順とは逆の位置順で記憶される。ヘッダは読み出し単位の先頭から開始し、対応するデータ領域は読み出し単位の末尾から開始する。ある実施形態では、データ領域内のデータバイト（例えば、データバイト４２１Ｂ、データバイト４２２Ｂ...データバイト４２９Ｂ）は、前方順（位置順と一致するバイト順）に配置され、別の実施形態では、データバイトは、逆順（位置順に対して反転されたバイト順）に配置される。ある実施形態では、ヘッダマーカが、（例えば図４Ａに示すように）ヘッダおよびデータバイトが同じ位置順で記憶されている読み出し単位で使用される。
【０１６１】
ある実施形態では、任意選択のパディングバイト４３１Ａ（または４３１Ｂ）は、特定のＬＰＮと関連付けられたデータの粒度に従ったものである。例えば、ある実施形態では、データバイト４２１Ａ（またはデータバイト４２１Ｂ、データバイト４２２Ｂ...データバイト４２９Ｂの総体）が、ヘッダ１  ４１１ＡからヘッダＮ  ４１９Ａまで（またはヘッダ１  ４１１Ｂ、ヘッダ２  ４１２Ｂ...ヘッダＮ  ４１９Ｂ）の最後のヘッダを除くすべてのヘッダと関連付けられたデータを記憶した後で、決まった量、例えば８バイトより少ない残りのスペースを有する場合には、最後のヘッダと関連付けられたＬＰＮのデータは後続の読み出し単位において開始する。別の実施形態では、最後のヘッダ内の特定のオフセット値（例えばすべて１）が、最後のヘッダと関連付けられたＬＰＮのデータが後続の読み出し単位において開始することを指示する。
【０１６２】
図５に、いくつかのフィールドを有するヘッダ（例えば、図４Ａのヘッダ１  ４１１ＡからヘッダＮ  ４１９Ａまでや、図４Ｂのヘッダ１  ４１１Ｂからヘッダ  ４１９Ｂまでのいずれか）の実施形態の選択された詳細を図示する。ある実施形態では、ヘッダは固定長である（例えば、各ヘッダは同じバイト数の長さである）。ヘッダ５０１は、種類５１１、最終標識５１３、フラグ５１５、ＬＰＮ５１７、長さ５１９、およびオフセット５２１の各フィールドを有する。種類フィールドは、データバイトのカテゴリを特定する。例えば、種類フィールドは、データバイトのカテゴリが、ホストデータ（論理ページデータなど）またはシステムデータ（マップ情報やチェックポイント情報など）の１つであることを指示する。最終フィールドは、ヘッダがデータバイトの前の最終ヘッダであることを指示する。ヘッダマーカを用いるある実施形態では、最終フィールドは任意選択で割愛される。ＬＰＮフィールドは、ヘッダが関連付けられているＬＰＮである。ＬＰＮフィールドは、特定のＬＰＮと関連付けられたヘッダのうち特定のヘッダを、例えば、特定のＬＰＮと一致するＬＰＮフィールドを有するヘッダを求めてヘッダをサーチすることによって決定するためのヘッダのパーシングを可能にする。長さフィールドは、データバイトのバイト単位の長さ（例えば、ヘッダ５０１と関連付けられたデータバイト４２１Ａに何バイトのデータがあるか）である。ある実施形態では、オフセットフィールド内のオフセットは、特定の粒度（８バイトの粒度など）に従って丸められる。
【０１６３】
様々な実施形態では、特定のＬＰＮと関連付けられた一部または全部の情報が、特定のＬＰＮと関連付けられたマップエントリ、特定のＬＰＮと関連付けられたヘッダ、またはその両方に記憶される。例えば、ある実施形態では、長さ５１９の一部または全部が、ヘッダではなくマップエントリに記憶される。
【０１６４】
図６に、論理スライスおよび／またはセクションとして管理される複数のＮＶＭデバイス（１若しくはそれ以上のフラッシュダイおよび／またはフラッシュチップなど）のブロック、ページ、および読み出し単位の実施形態の選択された詳細を示す。管理機能は、読み出し機能、再利用機能、消去機能、プログラミング／書き込み機能、および他の管理機能のうちの任意の１若しくはそれ以上を含む。論理スライスおよび／またはセクションはＲ−ブロックと呼ばれることもある。図には、６６個のフラッシュダイを有する実施形態が示されている。フラッシュダイのうちの３つは明示的に図示されており（フラッシュダイ６１０．６５、６１０．１、および６１０．０）、フラッシュダイのうちの６３個は暗黙的に図示されている（６１０．６４...６１０．２）。
【０１６５】
フラッシュダイの各々（フラッシュダイ６１０．６５...６１０．１、および６１０．０のうちの任意の１つなど）は、ブロック（フラッシュダイ６１０．６５のブロック６１０．６５ＢＢ...６１０．６５Ｂ１、および６１０．６５Ｂ０；フラッシュダイ６１０．０のブロック６１０．０ＢＢ...６１０．０Ｂ１、および６１０．０Ｂ０；以下同様など）として編成された記憶を提供する。各ブロックはさらに、ページ（ブロック６１０．６５Ｂ０のページ６１０．６５ＰＰ...６１０．６５Ｐ１、および６１０．６５Ｐ０；ブロック６１０．０Ｂ０のページ６１０．０ＰＰ...６１０．０Ｐ１、および６１０．０Ｐ０；以下同様など）を含む。各ページはさらに、読み出し単位（ページ６１０．６５Ｐ０の読み出し単位６１０．６５ＲＲ...６１０．６５Ｒ１、６１０．６５Ｒ０；ページ６１０．０Ｐ０読み出し単位６１０．０ＲＲ...６１０．０Ｒ１、６１０．０Ｒ０；以下同様など）を含む。
【０１６６】
ある実施形態では、各フラッシュダイは整数個のブロック（Ｎ個のブロックなど）を含み、１ブロックは消去の最小量である。ある実施形態では、各ブロックは整数個のページを含み、１ページは書き込みの最小量である。様々な実施形態によれば、以下のうちの１若しくはそれ以上が該当する：読み出し単位は読み出しおよび誤り訂正の最小量である；各ページは整数個の読み出し単位を含む；関連付けられた２若しくはそれ以上のページのグループは整数個の読み出し単位を含む；ならびに読み出し単位は、任意選択で、かつ／または選択的にページ境界にまたがる。
【０１６７】
様々な実施形態において、様々なＮＶＭ管理機能（読み出し、再利用、消去、および／またはプログラミング／書き込みなど）はＲ−ブロック単位で行われる。Ｒ−ブロックは、フラッシュメモリなどの様々なダイ（例えば、すべてのダイ、全部若しくは一部に障害のあるダイを除くすべてのダイ、および／またはダイのうちの１若しくはそれ以上の選択サブセットなど）にまたがる論理スライスまたはセクションとして例示される。例えば、Ｒ個のフラッシュダイを有し、各フラッシュダイがＮ個のブロックを有するフラッシュメモリにおいて、各Ｒ−ブロックは、合計でＮ個のＲ−ブロックについて、フラッシュダイの各々からの第ｉのブロックを合わせたものである。引き続きこの例で、Ｒ個のフラッシュダイのうちの１つに障害が発生した場合には、各Ｒ−ブロックは、合計でＮ個のＲ−ブロックについて、障害のあるフラッシュダイを除いたフラッシュダイの各々からの第ｉのブロックであり、各Ｒ−ブロックは障害前より１つ少ないブロックを有する。別の例では、Ｒ個のフラッシュダイを有し、各フラッシュダイがＮ個のブロックを有するフラッシュメモリにおいて、各Ｒ−ブロックは、合計でＮ／２個のＲ−ブロックについて、フラッシュダイの各々からの第ｉおよび第（ｉ＋１）のブロックである。さらに別の例では、複数のデュアルプレーンデバイスを有するフラッシュメモリにおいて、各Ｒ−ブロックは、デュアルプレーンデバイスの各々からの第ｉの偶数ブロックおよび第ｉの奇数ブロックである。さらに別の例では、複数のマルチプレーンデバイスを有するフラッシュメモリにおいて、各Ｒ−ブロックは、マルチプレーンデバイスによって提供される（例えばプログラミング時の）並列性を最大化するように選択されたブロックを含む。前述のデュアルプレーンデバイスにおけるＲ−ブロックの例では、デュアルプレーンデバイスはマルチプレーンデバイスの例であり、デュアルプレーンデバイスの各々からの第ｉの偶数ブロックおよび第ｉの奇数ブロックであるＲ−ブロックは、並列性を最大化するように選択されたブロックを含むＲ−ブロックの例であることに留意されたい。最後の例としては、Ｒ個のフラッシュダイを有するフラッシュメモリにおいて、Ｒ−ブロックは、Ｒ個のフラッシュダイの各々からのブロックｉ１、ブロックｉ２、...、ブロックｉｋといった、ｋ個の非隣接ブロックである。
【０１６８】
Ｒ−ブロック形成の一部としてブロックが対または他の関連付けられたグループとして処理される様々な実施形態において、ブロックの関連付けられたグループの各ブロックからのそれぞれのページは、より大きいマルチブロックページを形成する、少なくとも書き込みのための単位としても扱われる。例えば、前述のデュアルプレーンの例を続けると、偶数ブロックのうちの特定の１つの第１ページおよび奇数ブロックの関連付けられた１つの第１ページは、書き込みの単位として扱われ、任意選択で、かつ／または選択的に、読み出しの単位としても扱われる。同様に、特定の偶数ブロックの第２ページおよび関連付けられた奇数ブロックの第２ページも単位として扱われる。様々な実施形態によれば、本明細書で使用するＮＶＭのページは、ＮＶＭの単一のページ、ＮＶＭのマルチブロックページ、任意選択で、かつ／または選択的に読み出しのための１若しくはそれ以上の個別ページとして扱われる書き込みのためのＮＶＭのマルチブロックページ、およびＮＶＭのページの任意の他のグループ化または関連付けのうちの１若しくはそれ以上を指す。
【０１６９】
図には、複数の例示的Ｒ−ブロックが示されており、そのうちの３つ（６６０．０、６６０．１、および６６０．Ｒ）が明示されている。各例示的Ｒ−ブロックは、フラッシュダイの各々からの第ｉのブロックを合わせたものである。例えば、Ｒ−ブロック６６０．０は、フラッシュダイ６１０．６５からのブロック６１０．６５Ｂ０、フラッシュダイ６１０．６４からのブロック０（明示的に図示されていない）、以下同様にフラッシュダイ６１０．１のブロック６１０．１Ｂ０、およびラッシュダイ６１０．０のブロック６１０．０Ｂ０までである。１フラッシュダイ当たりＮ個のブロックがあるため、合計でＮ個のＲ−ブロック（Ｒ−ブロック６６０．Ｒ...Ｒ−ブロック６６０．１、およびＲ−ブロック６６０．０）がある。
【０１７０】
Ｒ−ブロックの別の例が、フラッシュダイの各々からの第ｉのブロックおよび第（ｉ＋１）のブロックを合わせたものである（例えば、フラッシュダイ６１０．６５からのブロック６１０．６５Ｂ０および６１０．６５Ｂ１、フラッシュダイ６１０．６４からのブロック０および１（明示的に図示されていない）、以下同様にフラッシュダイ６１０．１からのブロック６１０．１Ｂ０および６１０．１Ｂ１、ならびにフラッシュダイ６１０．０からのブロック６１０．０Ｂ０および６１０．０Ｂ１まで）。よって、各フラッシュダイにＮ個のブロックがある場合には、Ｎ／２個のＲ−ブロックがある。Ｒ−ブロックのさらに別の例は、複数のデュアルプレーンデバイスの各々からの第ｉの偶数ブロックおよび第ｉの奇数ブロックである。Ｒ−ブロックとしての管理のためのフラッシュ・ダイ・ブロックの他の構成も企図されており、これは、たとえいくつかのブロックが動作不能であってもＲ−ブロックが各ダイからの１ブロックを有するようにするための仮想ブロックアドレスと物理ブロックアドレスとの間のマッピングを含む。様々な実施形態において、各フラッシュダイ内のＮ個のブロックのうちのあるものは、仮想ブロックアドレスと物理ブロックアドレスとの間のマッピングが、Ｒ−ブロック内のブロックのうちの欠陥のあるブロックを置き換えるための予備の（通常は使用されない）ブロックを有するように予備として使用される。
【０１７１】
様々な実施形態において、フラッシュダイ内の情報の読み出しおよび／または書き込みは、「読み出し単位優先」順や「ページ優先」順といった順序に従って行われる。図に示す読み出し単位についての読み出し単位優先順の一例は、読み出し単位６１０．０Ｒ０から開始し、その後に、６１０．１Ｒ０...６１０．６５Ｒ０、６１０．０Ｒ１、６１０．１Ｒ１...６１０．６５Ｒ１が続き、以下同様に続いて６１０．６５ＲＲで終了する。図に示す読み出し単位についてのページ優先順の一例は、読み出し単位６１０．０Ｒ０から開始し、その後に、６１０．０Ｒ１...６１０．０ＲＲ、６１０．１Ｒ０、６１０．１Ｒ１...６１０．１ＲＲ...６１０．６５Ｒ０、６１０．６５Ｒ１が続き、以下同様に続いて６１０．６５ＲＲで終了する。
【０１７２】
様々な実施形態において、Ｒ−ブロック内のデータの書き込みおよび／またはストライピングの順序は（例えば最低から最高への）ページ優先で、すべてのデバイスに及び（例えば、ストライピング方向６００で概念的に示唆するように、最低番号のデバイスから最高番号のデバイスへ）、次いで、次に高いページへ進み（すべてのデバイスに及び）、以下同様に、Ｒ−ブロックの最後のページまで続く。具体的には、Ｒ−ブロック６６０．０に関して、順序の一例は、ページ６１０．０Ｐ０（フラッシュダイ６１０．０の第１ブロック内の第１ページ）から開始し、その後に、ページ６１０．１Ｐ０（フラッシュダイ６１０．１の第１ブロック内の第１ページ）が続き、以下同様に、ページ６１０．６５Ｐ０（フラッシュダイ６１０．６５の第１ブロック、およびＲ−ブロック６６０．０の最後のブロック内の第１ページ）まで続く。この順序の例は続いてページ６１０．０Ｐ１（フラッシュダイ６１０．０の第１ブロック内の第２ページ）に進み、その後に、ページ６１０．１Ｐ１（フラッシュダイ６１０．１の第１ブロック内の第２ページ）が続き、以下同様に、ページ６１０．６５Ｐ１（フラッシュダイ６１０．６５の第１ブロック内の第２ページ）まで続く。例は同一の順で続く。この順序の例は、ページ６１０．０ＰＰ（フラッシュダイ６１０．０の第１ブロック内の最後のページ）に進み、その後に、ページ６１０．１ＰＰ（フラッシュダイ６１０．１の第１ブロック内の最後のページ）が続き、以下同様に、ページ６１０．６５ＰＰ（フラッシュダイ６１０．６５の第１ブロック内の最後のページ、およびＲ−ブロック６６０．０の最後のブロック内の最後のページ）で終了して完了する。
【０１７３】
様々な実施形態において、フラッシュダイ６１０．６５...６１０．１、および６１０．０は、図１Ａの１若しくはそれ以上の個別フラッシュダイ１９４のそれぞれのものに対応する。ある実施形態では、フラッシュダイ６１０．６５...６１０．１、および６１０．０は、ＮＶＭ１９９の全部ではない部分である。例えば、様々な実施形態において、データはフラッシュダイの複数のグループにまたがって独立にストライピングされ、フラッシュダイのグループの各々は独立にアクセスされうる。
【０１７４】
より高いレベルの冗長技術
図７に、より高いレベルの冗長技術の様々な実施形態の選択された詳細を示す。（１若しくはそれ以上の）フラッシュデバイス７２０は、６４個のフラッシュダイ（図６に明示的、暗黙的に示すフラッシュダイ６１０．６３、６１０．６２、６１０．６１...６１０．０）を含み、（１若しくはそれ以上の）インターフェースチャネル７３０を介して通信する。（１若しくはそれ以上の）余分のフラッシュダイ７４０は、最大２個までのフラッシュダイ（図６に明示的、暗黙的に示すフラッシュダイ６１０．６５および６１０．６４）を含み、（１若しくはそれ以上の）余分のインターフェースチャネル７５０を介して通信する。フラッシュダイは、ＳＳＤ内のＮＶＭといった記憶サブシステムにおいて、より高いレベルの冗長情報およびデータ記憶（例えばユーザデータおよび／またはユーザ空き領域）のための記憶を提供する。（冗長情報およびデータ記憶のコンテキストにおける「ユーザデータ」の例には、オペレーティング・システム・データ、アプリケーションデータ、ＳＳＤ管理データなどといった、後で取り出すためにフラッシュメモリ上に記憶された冗長情報以外のすべてのデータが含まれる。）より高いレベルの冗長性は、例えば、読み出し動作のための（例えばより低いレベルのＥＣＣ機能による）誤り訂正データを提供することができない障害や、書き込み動作を適正に完了することができない障害といった、１若しくはそれ以上のフラッシュダイの１若しくはそれ以上の部分の間欠的な、または永続的な障害からの回復を可能にする。
【０１７５】
例えば、各フラッシュダイ（あるいは、各ブロックまたは各ブロック内の各ページ）は、シリコン独立素子の冗長アレイ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｓｉｌｉｃｏｎ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｅｌｅｍｅｎｔｓ：ＲＡＳＩＥ）のコンテキストで操作される。（例えば、特定のダイのブロックの一部分のＥＣＣ訂正不能読み出し誤りなどが原因で）特定のフラッシュダイにおいて障害が検出される場合には、これに応答して、そのフラッシュダイの他の部分に記憶された冗長情報を使用して、その特定のダイによって提供されるはずであった情報が突き止められる。ある実施形態および／または使用シナリオでは、（単一動作の間の）１つのフラッシュダイ内の１つの障害からの回復を可能にするのに十分な冗長情報が記憶される。単一の障害からの回復を可能にするモードでの動作は、ある実施形態では、より高いレベルの冗長情報のために１つのフラッシュダイと等価の領域を割り振り、管理することを含み、これを「ＲＡＳＩＥ−１」と呼ぶ。２つの障害からの回復を可能にするモードでの動作は、ある実施形態では、より高いレベルの冗長情報のために２つのフラッシュダイと等価の領域を割り振り、管理することを含み、これを「ＲＡＳＩＥ−２」と呼ぶ。３つの障害からの回復を可能にするモードでの動作は、ある実施形態では、より高いレベルの冗長情報のために３つのフラッシュダイと等価の領域を割り振り、管理することを含み、これを「ＲＡＳＩＥ−３」と呼ぶ。ＲＡＳＩＥ−１、ＲＡＳＩＥ−２、ＲＡＳＩＥ−３といったＲＡＳＩＥモードはＲＡＳＩＥモードのそれぞれの例であり、１若しくはそれ以上のフラッシュダイの整数倍（例えば、それぞれ、１個、２個、および３個の完全なフラッシュダイ）と等しい記憶容量がより高いレベルの冗長情報専用に使用される。
【０１７６】
ある実施形態および／または使用シナリオでは、ダイレベルの障害の管理が目的であり、ダイ間での情報の拡散が行われる。例えば、より高いレベルの冗長情報は、もっぱらより高いレベルの冗長情報に明確に割り振られた１若しくはそれ以上のダイに記憶される。ある実施形態および／または使用シナリオでは、ブロックレベルの障害の管理が目的であり、ダイ内のブロック間での情報の拡散が行われる。例えば、より高いレベルの冗長情報は、より高いレベルの冗長情報に割り振られた１若しくはそれ以上のブロックに記憶され、割り振りは、各ブロックがどの特定のダイの一部であったかを問わずに行われる。ある実施形態および／または使用シナリオでは、特定のエンティティレベルの障害の管理は、Ｎ個以下の要素（例えば、ＲＡＳＩＥ−１では１個、ＲＡＳＩＥ−２では２個など）が特定のエンティティのうちの任意の１つに含まれるように情報を拡散することを含む。エンティティの例には、（パッケージ化）デバイス、ダイ、Ｒ−ブロック、ブロック、（本明細書で別に記載する）Ｒ−ページ、ページ、ワードラインと関連付けられたセル、およびこれらの１若しくはそれ以上の複数が含まれる。
【０１７７】
より高いレベルの冗長情報が計算され、フラッシュダイに書き込まれた（ユーザ）データに従って書き込まれることにより、故障が検知された時に情報を提供するために利用可能となる。様々な実施形態において、より高いレベルの冗長情報は、より高いレベルの冗長情報が関連付けられる（ユーザ）データを書き込む前、書き込んだ後、又は書き込むことに関して特定の時間順序なく、フラッシュダイに書き込まれる。
【０１７８】
図は以下の表に要約されるようなＲＡＩＳＥ動作モードの様々な実施形態を図示する。
【０１７９】
【表３】
2014130587.tif 000011
【０１８０】
さらに詳細には、ＲＡＳＩＥ−１モードにおいて、１つのダイに等しい空間は、より高いレベルの冗長情報に割り当てられる。ＲＡＳＩＥ−１モード１−０において、より高いレベルの冗長情報がフラッシュデバイス７２０の１つのダイ（例えば、フラッシュダイ６１０．６３）に格納されるので、追加のフラッシュデバイス７４０は使用されず、データストレージ（例えば、ユーザデータおよび／またはユーザの自由空間）のために利用可能な６３個のダイ（フラッシュダイ６１０．６２・・・６１０．０）を残す。ＲＡＳＩＥ−１モード１−１において、追加のフラッシュデバイス７４０の１つのダイ（例えば、フラッシュダイ６１０．６４）が使用され、データストレージのために利用可能なフラッシュデバイス７２０（６４個のダイ）の全てを残す。
【０１８１】
ＲＡＳＩＥ−２モードにおいて、２つのダイと等しい空間がより高いレベルの冗長情報に割り当てられる。ＲＡＳＩＥ−２モード２−０において、より高いレベルの冗長情報はフラッシュデバイス７２０の２つのダイ（例えば、フラッシュダイ６１０．６３及びフラッシュダイ６１０．６２）に格納されるので、追加のフラッシュデバイス７４０は使用されず、データストレージのために利用可能な６２個のダイ（フラッシュダイ６１０．６１・・・６１０．０）を残す。ＲＡＳＩＥ−２モード２−１において、より高いレベルの冗長情報がフラッシュデバイス７２０の１つのダイ（例えば、フラッシュダイ６１０．６３）に部分的に格納されるので、追加のフラッシュデバイス７４０の１つのダイ（例えば、フラッシュダイ６１０．６４）が使用され、データストレージのために利用可能な６３個のダイ（フラッシュダイ６１０．６２・・・６１０．０）を残す。ＲＡＳＩＥ−２モード２−２において、追加のフラッシュデバイス７４０の２つのダイ（例えば、フラッシュダイ６１０．６５及び６１０．６４）が使用され、データストレージとして利用可能なフラッシュデバイス７２０の全て（６４個のダイ）を残す。
【０１８２】
一部の実施形態において、全ての使用シナリオにおいて使用されなかったダイは未実装である。例えば、ＲＡＳＩＥ２−０モードとＲＡＳＩＥ１−０モード（他のＲＡＳＩＥモードではなく）だけにおいて動作可能なシステムにおいて、追加のフラッシュデバイス７４０は未実装である。
【０１８３】
一部の実施形態において、より高いレベルの冗長情報は「専用の」ダイ（例えば、ＲＡＳＩＥ−１モード１−０におけるフラッシュダイ６１０．６３又はＲＡＳＩＥ−２モード２−２におけるフラッシュダイ６１０．６５及びフラッシュダイ６１０．６４）に完全に格納される。他の実施形態において、より高いレベルの冗長情報はダイのうちの任意のものに格納され、従って、例えば、ＲＡＳＩＥ−１モード１−０において、フラッシュダイ６１０．６２はより高いレベルの冗長情報に対して使用されるが、フラッシュダイ６１０．６３とフラッシュダイ６１０．６１・・・６１０．０がデータストレージのために使用される。一部の実施形態および／または一部の使用シナリオにおいて、より高いレベルの冗長情報が時の経過に伴って異なるダイ（および／または異なるダイの一部分）に格納され、従って、例えば、第１の期間において、第１のフラッシュダイはより高いレベルの冗長情報を保持するが、第２の期間において、第２のフラッシュダイがより高いレベルの冗長情報を保持する。
【０１８４】
様々な実施形態において、どのくらいの数のフラッシュダイが使用可能であるかに依存して、複数のＲＡＳＩＥ１−０モード（及び複数のＲＡＳＩＥ２−０モード）が存在する。例えば、（上の表に図示されるような）第１のＲＡＳＩＥ１−０モードにおいて、フラッシュダイ６１０．６３はより高いレベルの冗長情報を格納し、フラッシュダイ６１０．６２・・・６１０．０はデータストレージのために利用可能である。第２のＲＡＩＳＩＥ１−０モードにおいて、フラッシュダイ６１０．６３は最早使用可能ではなく、フラッシュダイ６１０．６２はより高いレベルの冗長情報を格納し、フラッシュダイ６１０．６１・・・６１０．０はデータストレージのために利用可能であり、１つのダイによって利用可能なデータストレージの量を減少させる。データストレージのために以前利用可能であったダイ（又はダイの任意の部分）がより高いレベルの冗長情報のためのダイ（又はダイの一部分）の使用により最早データストレージのために利用可能ではないＲＡＳＩＥモードは容量が減少させられたＲＡＳＩＥモードと呼ばれる時もある。
【０１８５】
一部の実施形態において、より高いレベルの冗長情報が、より高いレベルの冗長情報によって保護されたユーザデータと同じおよび／または同様なより低いレベルの冗長性および／または誤り訂正符号化スキームを使用して格納される。より高いレベルの冗長情報を保護するためにより低いレベルの冗長性および／または誤り訂正スキームを使用することは、ユーザデータにおける訂正不可能なより低いレベルの誤りが決定される同じおよび／または同様な方法で、より高いレベルの冗長情報に訂正不可能な誤りが存在するかを決定することを可能にする。
【０１８６】
一部の実施形態において、より高いレベルの冗長情報がデータの異なる部分に対する異なるダイに格納される。例えば、フラッシュダイがＲブロックにおいて管理される一部の実施形態において、より高いレベルの冗長情報は異なるＲブロックに対する異なるフラッシュダイに格納される。例えば、フラッシュダイ６１０．０のブロック０を含むＲブロックに対するより高いレベルの冗長情報はフラッシュダイ６１０．０に格納されるが、フラッシュダイ６１０．０のブロック１を含むＲブロックに対するより高いレベルの冗長情報はフラッシュダイ６１０．１に格納されるなどである。フラッシュダイがＲブロックにおいて管理される一部の実施形態などの一部の実施形態において、より高いレベルの冗長情報が依存するデータが分かった後および／または書き込まれた後に、より高いレベルの冗長情報は書き込まれる。
【０１８７】
一部の使用シナリオにおいて、ＮＶＭ要素のうちの１若しくはそれ以上の部分（例えば、図６のフラッシュダイ６１０．０のブロック６１０．０ＢＢなどの、デバイスのブロック）は、動作中には、動作不可能であるか、又は動作不可能になる。一部の実施形態において、動作不可能な部分は仮想ブロックアドレスと物理ブロックアドレスとを介して（例えば、図１Ａのマップ１４１および／または表１４３を介して行われた処理を介して）描かれる。或いは、動作不可能な部分は（明示的に示されるのではなく）省かれる。Ｒブロックに基づいた一部の実施形態において、省くことにより、Ｒブロックのうちの一部が異なる数のブロックを有することとなる。例えば、ブロック６１０．０Ｂ０に不具合があり、使用不可能である場合には、Ｒブロック７６０．０はＲブロック７６０．１よりも数が１つ少ないブロックを有する。より高いレベルの冗長情報は、例えば、各Ｒブロックの最後のブロックである不定の場所に（Ｒブロック毎に）書き込まれる。
【０１８８】
様々な実施形態において、図７の１若しくはそれ以上の要素が図１Ａの１若しくはそれ以上の要素に対応する。例えば、フラッシュデバイス７２０と追加のフラッシュデバイス７４０とは集合的にＮＶＭ１９９に対応し、インターフェースチャンネル７３０と追加のインターフェースチャンネル７５０とは集合的にデバイスインターフェース１９０に対応する。別の例として、フラッシュダイ６１０．６５・・・６１０．０は集合的にフラッシュダイ１９４の例に対応する。さらに別の例として、フラッシュデバイス７２０および／または追加のフラッシュデバイス７４０のフラッシュデバイスのうちの１若しくはそれ以上は、フラッシュデバイス１９２の例のうちの１若しくはそれ以上に対応する。様々な実施形態において、図１Ａの１若しくはそれ以上の要素がより高いレベルの冗長情報を管理し、および／または本明細書において記載されたＲＡＳＩＥ動作モードに従ってより高いレベルの冗長情報に少なくとも部分的に基づいてユーザデータを回復させる。例えば、ＣＰＵ１７１のソフトウェア実行能力の一部分が様々なＲＡＳＩＥ動作モードに従ってより高いレベルの冗長情報の計算を管理するために使用される。別の例として、データ処理１２１および／またはＥＣＣ−Ｘ１３５は、より高いレベルの冗長情報の計算および／または様々なＲＡＳＩＥ動作モードに従ったユーザデータの回復のために専用の、および／または特化したハードウェア要素を含む。また別の例として、ＥＣＣ１６１はフラッシュダイの一部分のＥＣＣ訂正不可能な（より低いレベルの）読み出しの誤りを検知し、ＥＣＣ−Ｘ１３５はＲＡＳＩＥ（より高いレベルの）読み出しの誤りを検知し、および／またはその誤りの訂正を可能にする。
【０１８９】
様々な実施形態において、インターフェースチャンネル７３０は１個、４個、８個、又は１６個のチャンネルを様々に有し、追加のインターフェースチャンネル７５０は１個又は２個のチャンネルを様々に有する。様々な実施形態において、フラッシュデバイス７２０は、１個、２個、４個、８個、又は１６個のデバイスとして実装され、それぞれが、６４個、３２個、１６個、８個、及び４個のフラッシュダイをそれぞれ有する。様々な実施形態において、追加のフラッシュデバイス７４０は、１個又は２個のダイを有する１個のデバイス又はそれぞれが１個のダイを有する２個のデバイスとして実装される。一部の実施形態において、追加のフラッシュデバイス７４０のフラッシュダイは、フラッシュデバイス７２０のフラッシュダイも実装するデバイスに実装される。例えば、１個のフラッシュデバイスは６６個のフラッシュダイ（フラッシュダイ６１０．６５・・・６１０．０）を実装する。別の例として、２個のフラッシュデバイスはそれぞれ、例えば、第１のフラッシュデバイス（フラッシュダイ６１０．６５・・・６１０．３３）と第２のフラッシュデバイス（フラッシュダイ６１０．３２・・・６１０．０）とにおいて、３３個のフラッシュダイを実装する。他の構成のフラッシュダイとフラッシュデバイスとが企図される。フラッシュデバイス７２０のフラッシュダイも実装するデバイスに実装された追加のフラッシュデバイス７４０を有する一部の実施形態において、フラッシュダイは、共有されたインターフェースチャンネルを介して、或いはフラッシュダイの特定のダイ（又は組）に専用のインターフェースチャンネルを介して通信する。フラッシュデバイス７２０と追加のフラッシュデバイス７４０とは特定の数のフラッシュダイ（それぞれ２個及び６４個）を伴って図示されるが、２個、４個、８個、１６個、３２個、又は１２８個のフラッシュダイを有するフラッシュデバイス７２０および／または０個、１個、又は４個のフラッシュダイを有する追加のフラッシュデバイス７４０などの他の実施形態が企図される。
【０１９０】
図８は、図６および／または図７によって図示された様々な実施形態によって可能にされたＲＡＳＩＥモード間の動的な切り替えなどの、ＲＡＳＩＥを用いた動的なより高いレベルの冗長モードの管理の実施形態の選択された詳細を図示する。一部の実施形態および／または一部の使用シナリオにおいて、ある形態のグレイスフルデグラデーションが提供され、この場合、ストレージサブシステム（例えば、ＳＳＤ）が第１のより高いレベルの冗長モードにおける動作から第２のより高いレベルの冗長モードにおける動作に動的に遷移させられる。遷移は、フラッシュダイ全体若しくはフラッシュダイの１若しくはそれ以上の部分の永続的若しくは断続的な機能不全などの故障の検知又はフラッシュダイ全体若しくはフラッシュダイの１若しくはそれ以上の部分に対する動作（例えば、読み出し動作又は書き込み動作）に応答するものである。様々な実施形態に従って、遷移は、ＳＳＤに対して包括的なもの、ＳＳＤの１若しくはそれ以上のサブセット上で行われるもの、及びＳＳＤの１若しくはそれ以上のＲブロック、ブロック、および／またはページ上で行われるもののうちの１若しくはそれ以上である。例えば、ＲＡＳＩＥ−２情報を格納する、ＮＶＭデバイスのうちの１つの特定のブロックがプログラミングの間に故障した場合には、特定の（故障した）ブロックを含むＲブロックの次の動作が、異なるより高いレベルの冗長モード（例えば、ＲＡＳＩＥ−１）に遷移させる一方で、ＳＳＤにおける他のＲブロックは影響を受けず、ＲＡＳＩＥ−２モードで動作し続ける。
【０１９１】
図８に関して、処理は第１のより高いレベルの冗長モードに従ってフラッシュダイに配置されたより高いレベルの冗長情報とデータストレージ（ユーザデータおよび／またはユーザの自由空間）とを用いて開始する（第１のより高いレベルの冗長モードにおいて動作する８０２）。次に流れは、より低いレベルの訂正不可能な読み出しの誤り又は書き込みの失敗／プログラムの不具合などの故障が検知されたかを決定すること（故障？８０３）に進む。故障が検知されなかった場合には、流れは第１のより高いレベルの冗長モードにおける動作を続けるために戻る。故障が検知された場合には、流れは第１のより高いレベルの冗長モードにおける動作から第２のより高いレベルの冗長モードにおける動作に切り替えることに進む（動作モードを動的に遷移させる８０９）。
【０１９２】
切り替えは故障の原因を説明するためにデータストレージのために利用可能な空間を（任意選択的に）削減する（自由空間を減少させる８０４）ことによって始まる。第２のより高いレベルの冗長モードが第１のより高いレベルの冗長モードよりもかなり少ないより高いレベルの冗長情報を使用する場合には、利用可能な空間の削減は省かれる。切り替えは第２のより高いレベルの冗長モードに従ってデータストレージを再組織する（データストレージを再構成する８０５）ことによって継続する。再組織することは、故障が生じたフラッシュダイからフラッシュダイのうちの別のフラッシュダイに全てのユーザデータおよび／またはユーザの自由空間を任意選択的に動かすことを含む（ユーザの自由空間の動きは、一部の実施形態において、ポインタの操作および／または他のデータ構造要素によって達成される）。切り替えは、第１のより高いレベルの冗長モードのより高いレベルの冗長情報を介して、故障が生じたフラッシュダイに格納された任意のユーザデータを（可能である場合には）選択的に復元し、第２のより高いレベルの冗長モードに従ってフラッシュダイの別のフラッシュダイに復元されたユーザデータを書き込むことによってさらに継続する（故障したユーザデータを復元／格納する８０６）。故障が書き込みの失敗／プログラムの不具合である場合には、復元は省かれる。切り替えは、第２のより高いレベルの冗長モードに従ってより高いレベルの冗長情報を任意選択的に計算してフラッシュダイに書き込むことによってさらに継続する（修正されたより高いレベルの冗長情報を決定／格納する８０７）。第２のより高いレベルの冗長モードが、第１のより高いレベルの冗長モードにおける動作により、以前に適切な場所にあったより高いレベルの冗長情報で動作可能である場合には、計算と書き込みとは省かれる。次に、動作は第２のより高いレベルの冗長モードで開始する（第２のより高いレベルの冗長モードにおいて動作する８０８）。
【０１９３】
故障検知（故障？８０３）は、（例えば、１若しくはそれ以上のＥＣＣ技術に従った）より低いレベルの冗長性および／または誤り訂正と、（例えば、１若しくはそれ以上のＲＡＳＩＥ技術に従った）より高いレベルの冗長性および／または誤り訂正と、ダイのうちの１若しくはそれ以上又はその一部分によって報告された故障状態とのうちの１若しくはそれ以上を介するものである。例えば、特定のフラッシュダイの特定の部分（例えば、Ｒ−ブロック、ブロック、Ｒ−ページ、ページ、読み出し単位、又はワードラインと関連付けられたセル）の範囲内の読み出しに関するしきい値数よりも多いより低いレベルの誤り訂正は、特定のフラッシュダイ（又は特定の部分）が故障したとして取り扱われることを任意選択的および／または条件付きでもたらし、より高いレベルの冗長モードの切り替えは、故障したフラッシュダイ（又はその一部分）が最早使用されないように行われる。別の例として、より高いレベルの誤り訂正が失敗した場合には、フラッシュダイ（又はその一部分）のうちの適切なものが故障したとして取り扱われ、より高いレベルの冗長モードの切り替えは、故障したフラッシュダイ（又はその一部分）が最早使用されないように行われる。さらに別の例として、フラッシュダイが（書き込み動作が成功しなかったことを示す）プログラムの不具合状態に戻った場合には、フラッシュダイのうちの適切なフラッシュダイの適切なブロックが故障したとして取り扱われ、より高いレベルの冗長モードの切り替えは、任意選択的および／または条件付きで、故障したフラッシュダイが最早使用されないように行われる。
【０１９４】
一部の実施形態において、故障したブロックは（例えば、図１Ａのマップ１４１および／または表１４３を介して行われる処理を介して）仮想ブロックアドレスと物理ブロックアドレスとを介して再構成することによって交換される。スペアブロックのプールからのスペアブロックが故障したブロックの代わりに配置される。故障したブロックに書き込まれたあらゆるコンテンツが代わりのブロックに複写され、書き込みは、故障したブロックにおいて故障が生じた場所からスペアブロックにおいて進む。
【０１９５】
一部の実施形態において、故障したブロックは（明示的に再配置されるのではなく）抜かされ、「穴」をもたらし、その穴は、穴があるＲブロックが次に（再書き込みのための準備の際に）消去された時に任意選択的および／または条件付きでより高いレベルの冗長モードの切り替えをもたらす。穴がデータストレージのための場所にある場合には、切り替えは行われず、穴は残る。穴がより高いレベルの冗長情報のための場所にある場合には、より高いレベルの冗長情報は別の場所に格納され、任意選択的に、より高いレベルの冗長モードは切り替えられる。
【０１９６】
一部の実施形態および／または一部の使用シナリオにおいて、故障が生じたフラッシュダイに格納されたユーザデータの復元は可能ではない。例えば、故障が、より高いレベルの冗長性および／または誤り訂正を介して検知された一部の種類の故障、および／またはフラッシュダイのうちの１若しくはそれ以上又はその一部分によって報告された一部の種類の故障状態によるものである場合には、一部のユーザデータが失われる可能性がある。
【０１９７】
一部の実施形態において、図８の処理は複数の故障に応答してより高いレベルの冗長モード間で動的に遷移すること（例えば、ＳＳＤコントローラ）に関連して行われる。具体的には、ＳＳＤコントローラは、第１のより高いレベルの冗長モードで動作を開始し、第１の故障に応答して、第２のより高いレベルの冗長モードに動的に遷移し、次に、第２の故障に応答して、第２のより高いレベルの冗長モードから第３のより高いレベルの冗長モードに動的に遷移するなどである。例えば、ＳＳＤコントローラはＲＡＳＩＥ−２モード２−２に従って様々なフラッシュダイを動作させ、第１の故障に応答してＲＡＳＩＥ２モード２−１に従うように動作を動的に遷移させる。次に、ＳＳＤコントローラは第２の故障に応答してＲＡＳＩＥ−２モード２−０に従うように動作を動的に遷移させる。さらに続けて、ＳＳＤコントローラは第３の故障に応答してＲＡＳＩＥ−１能力低減モード１−０に従うように動作を動的に遷移させる（能力低減モード１−０はＲＡＳＩＥ−１モード１−０と同様であるが、１個のフラッシュダイがより高いレベルの冗長情報に対して使用され、６２個のフラッシュダイがデータストレージのために使用される点で異なる）。
【０１９８】
具体的な例として、図７の要素に結合されたＳＳＤコントローラ（例えば、図１ＡのＳＳＤコントローラ１００）を考慮すると、第１のより高いレベルの冗長モードにおける動作に対応するＲＡＳＩＥ−２モード２−２（例えば、フラッシュダイ６１０．６５及びフラッシュダイ６１０．６４におけるより高いレベルの冗長情報及びフラッシュダイ６１０．６３・・・６１０．０におけるデータストレージ）における動作を最初に行う。次に、フラッシュダイのうちの１若しくはそれ以上の読み出し或いは書き込みが行われる。読み出しは訂正不可能な（より低いレベルの）ＥＣＣ故障をもたらし、或いは書き込みはフラッシュダイの特定のものの一部分（例えば、ユーザデータおよび／またはユーザの自由空間のために使用されるフラッシュダイ６１０．６２のページ）において不成功である。応答して、ＳＳＤコントローラはＲＡＳＩＥ−２モード２−２における動作からＲＡＳＩＥ−２モード２−１における動作に動的に切り替え、フラッシュダイ６１０．６２のうちのいずれも最早使用しない。ＲＡＳＩＥ−２モード２−１における動作は、（ＲＡＳＩＥ−２モード２−２における６４個のダイに対して）データストレージのために６３個のダイを提供するので、データストレージのために利用可能な空間は６４個のダイから６３個のダイに減少させられ、ユーザデータおよび／またはユーザの自由空間がそれに応じて動かされる。例えば、フラッシュダイ６１０．６２からの全てのユーザデータが、ユーザの自由空間に従ってフラッシュダイ６１０．６３及びフラッシュダイ６１０．６１・・・６１０．０の一部分に動かされる。訂正不可能なＥＣＣ故障を有するページにおけるあらゆるユーザデータがフラッシュダイ６１０．６５および／またはフラッシュダイ６１０．６４におけるより高いレベルの冗長情報に基づいて回復される。フラッシュダイ６１０．６３及びフラッシュダイ６１０．６１・・・６１０．０におけるデータストレージに基づくと共にＲＡＳＩＥ−２モード２−１に従ったより高いレベルの冗長情報が計算され、フラッシュダイ６１０．６５および／またはフラッシュダイ６１０．６４に格納される。ＳＳＤコントローラは次に、ＲＡＳＩＥ−２モード２−１（フラッシュダイ６１０．６５及びフラッシュダイ６１０．６４におけるより高いレベルの冗長情報及びフラッシュダイ６１０．６３及びフラッシュダイ６１０．６１・・・６１０．０におけるデータストレージ）において動作する。
【０１９９】
様々な実施形態において、図８の１若しくはそれ以上の要素の処理又は関連付けは図１Ａの１若しくはそれ以上の要素（又はその一部分）によって全体的又は部分的に行われる。例えば、ＣＰＵ１７１のソフトウェア実行能力の一部分が、例えば、データストレージのために利用可能な空間を減少させることを指図すること、又はデータストレージを再組織することを指図することなどによってより高いレベルの冗長モード間の動的な遷移を管理するために使用される。別の例として、データ処理１２１および／またはＥＣＣ−Ｘ１３５は「標的の」冗長モードに従ってより高いレベルの冗長情報の計算に専用のおよび／または特化したハードウェア要素を含む。さらに別の例として、ＥＣＣ１６１はより低いレベル（例えば、ＥＣＣ）の誤り訂正及び訂正不可能な誤りの検知を実装するが、ＥＣＣ−Ｘ１３５は、より高いレベル（例えば、ＲＡＳＩＥ）の誤り訂正、並びに訂正不可能な誤りおよび／またはメモリ要素の故障の検知を実装する。別の例として、（より高いレベルの）冗長モード間の動的な遷移に関連する機能の全部又は任意の部分がＥＣＣ−Ｘ１３５の１若しくはそれ以上の部分によって行われる。
【０２００】
より高いレベルの冗長性及び適応性のより低いレベルの符号化率
一部の実施形態および／または一部の使用シナリオにおいて、より低いレベルの冗長性および／または誤り訂正は適応性符号率（例えば、可変符号率を使用する適応性ＥＣＣ技術）を使用する。例えば、第１の読み出し単位は、第２の符号化率で管理される第２の読み出し単位よりも比較的に多い使用可能なデータビットを提供する第１の符号化率で管理される。可変符号化率を使用するより低いレベルの冗長性および／または誤り訂正を用いる一部の実施形態および／または一部の使用シナリオにおいて、より高いレベルの冗長情報が、より高いレベルの冗長情報によって保護されたデータストレージに関して、比較的に多い使用可能なデータビット又は最も多い使用可能なデータビットを提供するより低いレベルの冗長性および／または誤り訂正を用いて管理される独立したシリコン要素の一部分（例えば、フラッシュダイの一部分）に格納される。より高いレベルの冗長情報が格納される部分は、様々な実施形態および／または様々な使用シナリオにおいて、Ｒブロック毎に、ダイ毎に、時の経過と共に動的に、又はそれらの任意の組み合わせで変わる。様々な実施形態において、１若しくはそれ以上のダイ、Ｒブロック、および／またはページがより低いレベルの誤り訂正符号化率に関して最も多い使用可能なデータを有することに基づいて、より高いレベルの冗長データのストレージのために選択される。
【０２０１】
例えば、より高いレベルの冗長情報はＲブロック毎に様々な場所（例えば、ブロックの場所）に格納され、その場所（例えば、ブロック）は、より低いレベルの誤り訂正符号化率に基づいて最も多い使用可能なデータを有する場所である。任意の例において、６６個のフラッシュダイの集団がそれぞれが１ブロック高い最大Ｍ個のＲブロックの論理「スタック」として取り扱われ、Ｍがフラッシュダイ毎のブロックの数である、図７などの場合におけるＲＡＳＩＥ−２動作モードのシナリオを考える（最も概念的に簡単な場合において、スタックにおける各Ｒブロックは各ダイから同じ物理ブロック数で作られるが、故障したブロックを収容するために、少なくとも一部の実施形態において、この制約は解除される。さらに別の実施形態において、その制約は維持されるが、「穴」は故障したブロックに対応して収容される）。従って、各Ｒブロックは、フラッシュダイ６１０．０からフラッシュダイ６１０．６５のそれぞれからの１つのブロックに対応する最大６６個のブロックを有する（図７において、６１０．０から６１０．６５までの範囲における一部のフラッシュダイだけが明示的に列挙されるが、この範囲における全てのフラッシュダイは黙示的に図示されることが省略記号の使用によって理解される）。より高いレベルの冗長情報は、より低いレベルの訂正符号化率に基づいて最も多い使用可能なデータを有する各Ｒブロックのうちのどのブロックにでも書き込まれる。例えば、第１のＲブロックにおいて、フラッシュダイ６１０．１５及び６１０．４９に対応するブロックがより低いレベルの誤り訂正符号化率に基づいて最も多い使用可能なデータを図らずも有する場合には、より高いレベルの冗長情報が（フラッシュダイ６１０．１５及び６１０．４９に対応する）それらのブロックに書き込まれる。第２のＲブロックにおいて、フラッシュダイ第６１０．９及び６１０．３５に対応するブロックがより低いレベルの誤り訂正符号化率に基づいて最も多い使用可能なデータを図らずも有する場合には、より高いレベルの冗長情報が（フラッシュダイ第６１０．９及び６１０．３５に対応する）それらのブロックに書き込まれる。一部の実施形態において、より高いレベルの冗長データは、Ｒブロックにおける他の全てのデータが知られた後に書き込まれる。
【０２０２】
図９は読み出し単位のうちの１若しくはそれ以上に格納されたより高いレベルの冗長情報によって保護された適応性（例えば、時の経過と共に、及び／若しくは場所によって異なる、並びに／又は変化する）符号化率のより低いレベルの冗長情報を有する読み出し単位（９１１、９３１、・・・９５１、９７１）の実施形態を図示する。読み出し単位のうちのそれぞれがユーザデータ（９１１．Ｕ、９３１．Ｕ・・・９５１．Ｕ、９７１．Ｕ）を含むことを可能にされた、および／またはそれらのユーザデータを含むように割り当てられた部分と、より低いレベルのＥＣＣ（９１１．Ｅ、９３１．Ｅ・・・９５１．Ｅ、９７１．Ｅ）としてＥＣＣ符号のチェックビットなどのより低いレベルの冗長情報を含むことを可能にされた、および／またはそのより低いレベルの冗長情報を含むように割り当てられた残りの部分とを有する。
【０２０３】
図において、垂直方向の寸法は比較的に縮尺通りであり、相対的なサイズを示す。従って、読み出し単位９１１及び９５１は同じ第１のサイズのものであり（一部の実施形態において、全ての読み出し単位は全てのＮＶＭデバイスの全てのブロックに対して同じサイズであり）、より低いレベルのＥＣＣの一部分９３１．Ｅ及び９５１．Ｅは同じ第２のサイズであり、より低いレベルのＥＣＣの一部分９１１．Ｅ及び９７１．Ｅは同じ第３のサイズである。読み出し単位９３１は読み出し単位９１１及び９５１よりも大きく、次に、読み出し単位９１１及び９５１は読み出し単位９７１よりも大きい。ユーザデータ部分９３１．Ｕはユーザデータ部分９５１．Ｕよりも大きい。ユーザデータ部分９５１．Ｕはユーザデータ部分９１１．Ｕよりも大きい。より低いレベルのＥＣＣ部分９５１．Ｅはより低いレベルのＥＣＣ部分９１１．Ｅよりも小さい。
【０２０４】
図に図示される通り、それぞれの読み出し単位は、例えば、ＮＶＭのそれぞれのブロック毎にそれぞれのサイズを有し、それぞれのブロックにおいて使用されるようにより低いレベルの符号化率を変えることを可能にする。さらに詳細には、読み出し単位９３１及び９５１は同じ量のより低いレベルの冗長情報を有する（９３１．Ｅ及び９５１．Ｅは同じサイズである）が、読み出し単位９３１は（ユーザデータ９５１．Ｕを含む）読み出し単位９５１よりも多いユーザデータ（９３１．Ｕ）を含むので、読み出し単位９３１のより低いレベルの符号化率は読み出し単位９５１のより低いレベルの符号化率よりも高い。
【０２０５】
図に図示される通り、それぞれの読み出し単位はそれぞれのサイズのユーザデータを有し、同じサイズの２つ以上の読み出し単位のそれぞれにおいて様々なサイズのユーザデータを可能にする。例えば、ユーザデータのサイズは特定の読み出し単位において使用されるより低いレベルの符号化率を変更するために変えられる。さらに詳細には、読み出し単位９５１及び９１１は同じサイズを有するが、異なるそれぞれの量のユーザデータ（９５１．Ｕ及び９１１．Ｕ）を有するので、異なるそれぞれの量のより低いレベルの冗長情報（９５１．Ｅ及び９１１．Ｅ）を有し、読み出し単位９５１が読み出し単位９１１よりも高いより低いレベルの符号化率を有することを可能にする。
【０２０６】
一部の実施形態および／または一部の使用シナリオにおいて、より低いレベルの符号化率を変えることおよび／または変更することは、有利なことに、ユーザデータの量を最大化しながら、より低いレベルの誤り訂正要件を達成するために充分な量のより低いレベルのＥＣＣ情報を提供することを可能にする。
【０２０７】
読み出し単位において変化する量のユーザデータを有する一部の実施形態において、より高いレベルの冗長情報は最も多い量のユーザデータを有する読み出し単位のうちの１若しくはそれ以上に格納される。例えば、図９において、ＲＡＳＩＥ−１モードを使用して、より高いレベルの冗長情報がユーザデータ９３１．Ｕに格納され、ＲＡＳＩＥ−２モードをして、より高いレベルの冗長情報がユーザデータ９３１．Ｕ及びユーザデータ９５１．Ｕに格納される。（より高いレベルの冗長情報によって保護された読み出し単位の中で）最も多い量のユーザデータを有する読み出し単位により高いレベルの冗長情報を格納することが、他の読み出し単位のうちの全てにおいてユーザデータを保護するために充分により高いレベルの冗長情報が存在することを確実なものにする。
【０２０８】
様々な実施形態に従って、１若しくはそれ以上の技術が、より高いレベルの冗長情報によって保護された多数の読み出し単位の中の１若しくはそれ以上の読み出し単位のうちのどれがより高いレベルの冗長情報を格納するために使用されるかを決定するために使用される。第１の例において、最も多い量のユーザデータを有する（ＲＡＳＩＥ−１に対する）最も最近書き込まれた１つの読み出し単位又は（ＲＡＳＩＥ−２に対する）最も最近書き込まれた２つの読み出し単位が使用される。第２の例において、最も多い量のユーザデータを有する（ＲＡＳＩＥ−１に対する）最も早く書き込まれた１つの読み出し単位又は（ＲＡＳＩＥ−２に対する）最も早く書き込まれた２つの読み出し単位が使用される。同様に、他の読み出し単位における残りのユーザデータの全てを保護するために最も多い量のユーザデータを有する１若しくはそれ以上の読み出し単位を確定的に選択するためのあらゆる技術が本明細書において考えられる技術の範囲内である。
【０２０９】
より高いレベルの冗長情報の計算技術
様々な実施形態および／または様々な使用シナリオにおいて、より高いレベルの冗長情報が、パリティ技術、ＲＳ技術、および／または加重和技術を介してなどの様々な技術を用いて計算される。例えば、１つの（より低いレベルの）故障からの回復を可能にする一部のより高いレベルの冗長モード（例えば、ＲＡＳＩＥ−１）において、より高いレベルの冗長情報はパリティ技術を介して計算される。別の例として、２つの（より低いレベルの）故障からの回復を可能にする一部のより高いレベルの冗長モード（例えば、ＲＡＳＩＥ−２）において、より高いレベルの冗長情報がパリティ技術とＲＳ技術との組み合わせを介して計算される。より高いレベルの冗長情報の第１の部分がパリティ符号化を使用して計算され、第２の部分はＲＳ符号化を使用して計算している。さらに別の例として、２つの故障からの回復を可能にする一部のより高いレベルの冗長モード（例えば、ＲＡＳＩＥ−２）において、より高いレベルの冗長情報はパリティ技術と加重和技術との組み合わせを介して計算される。より高いレベルの冗長情報の第１の部分はパリティ符号化を使用して計算され、第２の部分は加重和符号化を使用して計算している。より高いレベルの冗長情報は、より高いレベルの冗長情報によって保護されたデータを格納するために利用可能なＮＶＭのページのために使用されるより低いレベルの故障検知技術と同一又は同様なより低いレベルの故障検知技術（例えば、ＥＣＣ）を使用して、例えば、ＮＶＭのページの読み出し及び書き込みを介して管理される。
【０２１０】
ＲＡＳＩＥ−２に関する具体的な例として、より高いレベルの冗長情報の最初のページがＲブロックにわたるストライプにおける全ての最初のページのＸＯＲを介してパリティ符号化を使用して計算される。さらに詳細には、ＸＯＲはＲブロックにわたるストライプにおける全ての最初のページの全ての最初のバイトで行われ、より高いレベルの冗長情報の最初のページの最初のバイトをもたらす。同様に、より高いレベルの冗長情報の第２のバイトは、ストライプにおける全ての最初のページの全てのバイトに関して、Ｒブロックにわたるストライプにおける全ての最初のページの全ての２番目のバイトなどをＸＯＲ化することによって形成される。より高いレベルの冗長情報の第２のページは以下の通りに加重和技術を使用して計算される。
【０２１１】
計算が、（例として使用される）ガロア体などの有限体に対して行われる。例は、動作させられるデータがバイト長であるので、ＧＦ（２５６）などの体が使用されることを想定する。様々な実施形態においてデータは任意の単位で動作させられる。
【０２１２】
ストライプにおける各ページは固有のゼロではない「指数」を割り振られる。指数の値は実装の複雑さを簡略化するように選択され、どのような形態の生成多項式にも関連しない。例えば、ページはストライプにおけるダイの場所によって０からＮ−１まで（例えば、ソフトウェアによって）ラベル付けされ、指数に対して適切な値は、（Ｎ<２５５の場合、ゼロではないことを確実にされた）ダイ数の１の補数である。指数の値の別の選択は、例えば、ハードウェアの費用を減らす、および／または最小化するために、最も低い重み（最も少ない数のセットビット又は最も少ない数のクリアビット）のゼロではない整数である。指数のためのグレイ符号化値を選択することは、一部の実施形態および／または一部の使用シナリオにおいて、ページが処理されると、遷移を最小化し、および／または電力を低下させる。
【０２１３】
指数値は有限体計算に従って選択されないが、他の原則に従って選択される。これにも関わらず、各指数値は有限体におけるゼロではない要素に対応する。ページｉが指数値Ｋｉを有すること（及びページｊが指数値Ｋｊを有すること）を想定する。加重和の冗長性は（各ページｉからの対応するバイトＰｉにわたって）Ｋｉ＊Ｐｉの（ガロア体）合計であり、各バイトは（ガロア体にわたって）ページの指数値によって乗算される。
【０２１４】
こうして、加重和冗長性情報が各バイトに対して、
Ｒ０＝全ての対応するバイトＰｉにわたる合計、
Ｒ１＝全ての対応するバイトＫｉ＊Ｐｉにわたる合計、
Ｒ０は全ての対応するバイトのＸＯＲ、及び
Ｒ１はバイトの重み付けされた合計であり、重みは指数値として選択される
として計算される。
【０２１５】
上記の計算はページにおける対応するバイトのそれぞれに対して繰り返され、Ｒ０とＲ１とのそれぞれに対するバイトの対応するページを作り出す。以下の考察において、Ｒ０とＲ１とは説明を簡潔にするために単一の要素（例えば、それぞれが単一のバイトである）としてそれぞれ一部の文脈において記載されるが、上記の計算におけるように、Ｒ０とＲ１とのそれぞれが、要素のそれぞれのページを表す（例えば、Ｒ０とＲ１とのそれぞれが、バイトのページである）。
【０２１６】
Ｐｉはページｉにおけるバイトを表し、Ｐｊはページｊにおけるバイトを表す。処理は各ページからの対応するバイトの１つのストライプに関して記載され、全ての対応するバイトにわたって繰り返しが行われる。一部のページが、例えば、異なる（より低いレベルの）冗長符号化率を有することにより、他のページよりも「短い」場合は、効率的に処理された全てのページが同じサイズを有するように、より短いページは、ゼロで詰められる（又は符号化と復号化とにおいて同じ方法で使用される任意の既知の値で詰められる）。
【０２１７】
Ｒ０とＲ１とを計算するための加算が、様々な実施形態に従って、様々な直列および／または並列の計算を介して任意の順序で行うことができる。Ｋｉ＊ＰｉがＫｊ＊Ｐｊの前に加算されたか、又はＫｊ＊Ｐｊの後に加算されたかはＲ１における結果に影響がないので、ページは特定の順序で処理される必要は全くない。冗長情報のページの様々なバイトに対応するＲ０値とＲ１値との計算は互いに独立し、様々な実施形態に従って、様々な直列および／または並列の計算を介して任意の順序で計算可能である。さらに、Ｒ１からＫｉ＊Ｐｉを減算すること（及びＲ０からＰｉを減算すること）が、ページに対する計算の影響の「取り消し」を可能にする。ガロア体にわたって、加算と減算とは両方ともＸＯＲである（従って、減算することは、２回目に単純に加算することと等しい）ので、一部の実施形態および／または一部の使用シナリオにおいて、ページを「取り消す」ためにガロア体の実装のために特定のハードウェアは必要とされない（例えば、論理ＸＯＲ能力で充分である）。
【０２１８】
訂正不可能なより低いレベルの誤りの場合において、より高いレベルの訂正は、一部の実施形態において、Ｒ０とＲ１とを再計算するが、訂正不可能なより低いレベルの誤りを有する（時にはカラムと呼ばれる）ページを省くことによって開始する。再計算されたＲ０を元々のＲ０から減算してΔＲ０を作り出し、再計算されたＲ１を元々のＲ１から減算してΔＲ１を作り出すことによって、訂正は進む。
【０２１９】
訂正不可能なより低いレベルの誤りが存在しない場合には、再計算されたＲ０とＲ１とは両方ともゼロである。訂正不可能なより低いレベルの誤りが存在する場合には、（減算の後に）再計算されたＲ０とＲ１とが（２回目において加算されなかったが、元々の値に存在した）「欠落した」データを反映する。
【０２２０】
訂正不可能なより低いレベルの誤りが１つ存在する場合には、再計算されたＲ０が、その誤りを訂正するために使用される（再計算されたＲ１は必要とはされない）。
【０２２１】
訂正不可能なより低いレベルの誤りが２つ存在する場合には、再計算されたＲ０とＲ１とが、その誤りを訂正するために使用される。Ｒ０の値とＲ１の値との両方のページが訂正不可能なより低いレベルの誤りを有するページである場合には、データ・ストレージ・ページの訂正は必要とされない。Ｒ１の値のページが訂正不可能なより低いレベルの誤りを有するページのうちの１つである場合には、訂正はＲ０を介するものである（再計算されたＲ０の値は訂正不可能なより低いレベルの誤りを有するデータ・ストレージ・ページの値である）。
【０２２２】
データ・ストレージ・ページに訂正不可能なより低いレベルの誤りが２つ存在する場合、又はＲ０ページが訂正不可能なより低いレベルの誤りを有するページのうちの１つである場合には、上記の通りにΔＲ０とΔＲ１とを計算することによって、訂正が開始する。Ｒ０ページが訂正不可能なより低いレベルの誤りを有するページのうちの１つである場合には、ΔＲ０ページの計算は任意選択的に省かれる。ページｉとページｊとが訂正不可能なより低いレベルの誤りを有するページである場合には、再計算されたΔＲ０＝Ｐｉ＋Ｐｊであり、再計算されたΔＲ１＝Ｋｉ＊Ｐｉ＋Ｋｊ＊Ｐｊである。解決する方程式は
Ｐｉ＝（ΔＲ１−Ｋｊ＊ΔＲ０）／（Ｋｉ−Ｋｊ）
Ｐｊ＝ΔＲ０−Ｐｉ
を作り出す。Ｒ０が訂正不可能なより低いレベルの誤りを有するページのうちの１つである場合には、（Ｒ０はＲ１に含まれないので）ΔＲ１＝Ｋｉ＊Ｐｉ又はＰｉ＝ΔＲ１／Ｋｉである。同じ結果が（ΔＲ０を無視するために）上記の式にＫｊ＝０を設定することによって得られる。
【０２２３】
代替的実施形態において、ｐが素数である整数モジュロｐによって定義される有限体がガロア体の代わりに使用される。計算は上記の計算と同一であり、加算は整数加算モジュロｐであり、乗算は整数乗算モジュロｐである。例えば、ページがバイトのページである場合には、整数モジュロ２５７の有限体が使用される。全てのユーザデータのバイトは０〜２５５の範囲であり、それぞれ１バイトで格納される。しかしながら、Ｒ１の結果は０〜２５６の範囲の値を有し、表示のためには１バイトよりも多いバイトを必要とする。ストレージ空間を最小化するために０〜２５６の値を符号化し、Ｒ１ページがオーバヘッドを減少させて格納されることを可能にするために多くの方法が存在する。例えば、０及び２５６の値は９ビットの数列０００００００００及び００００００００１としてそれぞれ格納され、他の全ての値は８ビットで格納される。Ｒ１の値の無作為分布を考慮すると、ストレージのオーバヘッドは０．１％よりも小さい。図９に関して記載された通り、Ｒ１ページは最も多い量のユーザデータを有するように選択され、ストレージのオーバヘッドが一部の使用シナリオにおいて隠されることを可能にする。
【０２２４】
図１０は、例えば、図７などの場合において、そして図６にさらに図示される通り、ＲＡＳＩＥ−２モード２−２によって使用されるようなより高いレベルの冗長情報の結果とデータソースとの対応の実施形態の選択された詳細を図示する。図１０はフラッシュダイ６１０．０、６１０．６３、６１０．６４、及び６１０．６５を明示的に図示し、省略記号（・・・）によって、フラッシュダイ６１０．１・・・６１０．６２を黙示的に図示する。フラッシュダイのページ内のブロック、ページ、及びバイトの選択された詳細が図示される。より高いレベルの冗長情報の最初の部分が（フラッシュダイ６１０．６４に格納された）Ｒ０  １０１０として図示され、パリティ符号化を使用して計算される。より高いレベルの冗長情報の第２の部分は（フラッシュダイ６１０．６５に格納された）Ｒ１  １０１１として例示され、加重和符号化を使用して計算される。データ情報のためのストレージが（フラッシュダイ６１０．０・・・６１０．６３に格納された）データ１０１９として図示される。
【０２２５】
点線矢印１００１は、データ１０１９の（全てのフラッシュダイにわたって）全ての最初のページの対応する最初のバイトに基づいて、２バイトの冗長性計算の結果（Ｒ０  １０１０とＲ１  １０１１とのそれぞれに対して１バイト）を概念的に示す。図示される通り、２バイトの結果は最初のＲ０及びＲ１のページのそれぞれの上の最初のバイトである。点線矢印１００２はデータ１０１９の全ての最初のページの対応する最後のバイトに基づいて２バイトの冗長性計算の結果（Ｒ０  １０１０とＲ１  １０１１とのそれぞれに対して１バイト）を概念的に示す。図示される通り、２バイトの結果は最初のＲ０及びＲ１のページのそれぞれ上の最後のバイトである。点線矢印１００３はデータ１０１９の（全てのフラッシュダイにわたって）最初のブロックの対応する最後のページに基づいて２ページの冗長性計算の結果（Ｒ０  １０１０とＲ１  １０１１とのそれぞれに対して１ページ）を概念的に示す。
【０２２６】
本明細書の別の箇所で記載された通り、一部の実施形態において、より高いレベルの冗長情報はデータの異なる部分に関して異なるダイに格納されることを留意されたい。従って、一部の実施形態において、Ｒ０とＲ１とは、図１０に図示される通り、２つの「専用の」ダイではなく様々なダイにわたって格納される。
【０２２７】
図１１は、様々な実施形態に従った様々な動作条件で、図７などの場合において、そして図６及び図１０にさらに図示される通り、例えば、ＲＡＳＩＥ−２モード２−２によって使用されるようなより高いレベルの冗長情報の計算の実施形態の選択された詳細を図示する。さらに詳細には、図１１は、例えば、図１０の点線矢印１００１によって概念的に図示された２バイトの冗長性計算の結果に従って、Ｒ０のバイトに対するパリティ符号化計算とＲ１のバイトに対する加重和符号化計算とを図示する。動作条件は、（ガロア体などの）有限体に対する計算を行うことと、（図１１におけるダミーの加算変数「ｉ」の値に対応する）指数がフラッシュダイ数の１の補数（又はその他任意の固有のゼロではない数）であることと、指数が有限体においてゼロではない要素に対応することとのうちの１若しくはそれ以上を含む。図１１に図示されたような計算は対応するデータバイトに基づいてＲ０とＲ１とのバイトの全てに対して繰り返される。ゼロではない指数はＲ１の値がＰｉの全ての要素からの寄与を含むことを可能にすることに留意されたい。
【０２２８】
こうして、Ｒ０のバイトの任意のものを互いに対して又はＲ１のバイトの任意のもの間で計算することに対する依存は存在しない。従って、Ｒ０の値とＲ１の値とが、完全に（大部分）並列で、部分的に並列で、又は完全に直列で計算される様々な実施形態が企図される。例えば、ページのＲ０および／またはＲ１のバイトの全てが並列で計算される。別の例として、ページのＲ０のバイトの全てが並列で計算され、ページのＲ１のバイトの全てを並列で計算することに続く（又は進む）。
【０２２９】
さらに、Ｒ０のバイトの任意のものを互いに対して又はＲ１のバイトの任意のものを計算することに関して、計算することに関する順序の要件は存在しない。従って、Ｒ０の値とＲ１の値とが、互いに対して完全に順番で、互いに対して別個に順番で（例えば、Ｒ０の計算は互いに対して順番であるが、Ｒ１に関しては順番ではなく、そして逆もまた同様である）、又は特別な順番なく（例えば、完全に順番ではなく、無秩序で、又は無作為の順序で）計算される様々実施形態が企図される。例えば、ページのＲ０のバイトの全てが特定の順序（例えば、最も低いバイトから最も高いバイト）で計算され、特定の順序でページのＲ１のバイトの全てが続く。別の例として、ページのＲ０のバイトの全てが特定の順序で計算され、独立して、ページのＲ１のバイトの全てが特定の順序で計算される。さらに別の例として、ページのＲ０のバイトの全てだけでなく、ページのＲ１のバイトの全てが、（例えば、データオペランドが利用可能になるので、）互いに対して特定の順序なく計算される。
【０２３０】
さらに別の例として、１若しくはそれ以上のページのＲ０及びＲ１のバイトの全てが１若しくはそれ以上のＮＶＭ（それぞれが、例えば、１若しくはそれ以上のフラッシュダイを有する）上で行われる１若しくはそれ以上の読み出し動作の完了の順序によって決定さる順序で計算され、データバイトを読み出すための読み出し動作は、図１１に図示された加算及び重み付けされた加算の計算（Ｐｉ）によって参照される。読み出し動作の完了によって決定される順序で計算を行うことが、一部の実施形態および／または一部の使用シナリオにおいて、計算を行うことを可能にされた要素とＮＶＭとの間のバッファリングの低減又は排除を可能にする。読み出し動作の完了によって決定される順序で計算を行うことが、一部の実施形態および／または一部の使用シナリオにおいて、計算を行うために使用されるメモリの帯域幅、例えば、ＮＶＭのメモリの帯域幅の縮小を可能にする。
【０２３１】
さらに別の例として、１若しくはそれ以上のページのＲ０及びＲ１のバイトの全てが、１若しくはそれ以上のＮＶＭ（それぞれが、例えば、１若しくはそれ以上のフラッシュダイを有する）上で行われる読み出し動作に応答して戻されるデータおよび／または利用可能なデータの順序によって決定される順序で計算され、データバイトに対応して戻されるデータおよび／または利用可能なデータは、図１１に図示された加算及び重み付けされた加算の計算（Ｐｉ）によって参照される。一部の実施形態および／または一部の使用シナリオにおいて、戻されるデータおよび／または利用可能なデータによって決定される順序で計算を行うことは、計算を行うことを可能にされた要素とＮＶＭとの間のバッファリングを低減又は排除する。一部の実施形態および／または一部の使用シナリオにおいて、戻されるデータおよび／または利用可能なデータによって決定される順序で計算を行うことは、計算を行うために使用されるメモリの帯域幅、例えば、ＮＶＭのメモリの帯域幅を縮小する。一部の実施形態において、読み出し動作は特定の順序（例えば、Ｐｉの最も低いバイトから最も高いバイト）で行われるが、他の実施形態において、読み出し動作は特定の順序なく行われる。
【０２３２】
図１２は、例えば、図１１と関連付けられるような場合、及びより低いレベルの故障がページｊ上で生じた場合に、（単一の動作の間の）１つの（より低いレベルの）故障からの回復の実施形態の選択された詳細を図示する。より低いレベルの故障がＲ０又はＲ１のベージにある場合には、Ｒ０（又はＲ１）は図１１によって記載されるように再決定されることに留意されたい。図１２はページｊに対する１バイトの回復された値に対する計算を図示する（加算は故障が生じたページｊを省くことを留意されたい）。図１２に図示されるような計算はＲ０の対応するバイトと、ページｊを除く全てのデータページからの対応するバイトとに基づいてページｊのバイトの全てに対する回復された値を決定するために繰り返される。
【０２３３】
従って、ページｊの回復されたバイトの任意のものを互いに対して計算することに依存することはない。従って、Ｐｊ回復値が、Ｒ０の値とＲ１の値とに対する上記の計算と同様に、より高い並列からより高い直列の範囲で計算される様々な実施形態が企図される。さらに、ページｊの回復値の任意のものを互いに対して計算することに対する順序の要件は存在しない。従って、Ｐｊ回復値がＲ０及びＲ１の値に対する上記の計算と同様に、互いに対して様々な順序で計算される様々な実施形態が企図される。
【０２３４】
一部の例示的な実施形態は１若しくはそれ以上のＮＶＭ（それぞれが、例えば、１若しくはそれ以上のフラッシュダイを有する）上で行われる１若しくはそれ以上の読み出し動作の完了の順序によって少なくとも部分的に決定された順序で回復値を決定することに関連する計算を行い、Ｒ０および／またはＰｉの値を取得するためにＮＶＭを読み出すための読み出し動作は図１２によって図示されるようなものである。読み出し動作の完了の順序で計算を行うことは、一部の実施形態および／または一部の使用シナリオにおいて、計算を行うことを可能にされた要素とＮＶＭとの間のバッファリングの削減又は排除を可能にする。読み出し動作の完了の順序で計算を行うことは、一部の実施形態および／または一部の使用シナリオにおいて、計算を行うために使用されるメモリの帯域幅、例えば、ＮＶＭのメモリの帯域幅の縮小を可能にする。
【０２３５】
一部の例示的な実施形態は１若しくはそれ以上のＮＶＭ（それぞれが、例えば、１若しくはそれ以上のフラッシュダイを有する）から戻されるデータおよび／または利用可能なデータの順序によって少なくとも部分的に決定された順序で回復値を決定することに関連する計算を行い、戻されるデータおよび／または利用可能なデータは、図１２によって図示されるように、Ｒ０および／またはＰｉの値を取得するためにＮＶＭ上で行われる読み出し動作に応答するものである。一部の実施形態および／または一部の使用シナリオにおいて、読み出し動作から戻されるデータおよび／または利用可能なデータの順序で計算を行うことが、計算を行うことを可能にされた要素とＮＶＭとの間のバッファリングを削減又は排除する。一部の実施形態および／または一部の使用シナリオにおいて、読み出し動作から戻されるデータおよび／または利用可能なデータの順序で計算を行うことが、計算を行うために使用されるメモリの帯域幅、例えば、ＮＶＭのメモリの帯域幅を縮小する。一部の実施形態において、読み出し動作は特定の順序（例えば、Ｐｉの最も低いバイトから最も高いバイト）で行われるが、他の実施形態においては、読み出し動作は特定の順序なく行われる。
【０２３６】
図１３Ａ〜図１３Ｄは、例えば、図１１と関連付けられるような場合、及びより低いレベルの故障がページｍ及びｎ上で生じた場合に、（単一の動作の間の）２つの（より低いレベルの）故障からの回復の実施形態の選択された詳細を図示する。より低いレベルの故障がＲ０及びＲ１のページにある場合には、Ｒ０及びＲ１がデータ回復のために必要とされず、データを回復させるための処理が存在しないことを留意されたい。別の場合には、より低いレベルの故障のうちの１つがＲ１ページである場合には、データ回復は図１２に記載されるように進むことを留意されたい。より低いレベルの故障のいずれもＲ０又はＲ１のページにない場合には、Ｐｍ及びＰｎの値の回復は次の通りに進む。図１３ＡはＲ０'として１バイトの修正されたＲ０に対する計算とＲ１'として１バイトの修正されたＲ１に対する計算とを図示する（加算は、故障が生じたページｍ及びｎを省くことを留意されたい）。図１３Ｂは、修正された冗長情報（Ｒ０'、Ｒ１'）に対する１バイトの元々の冗長情報（Ｒ０、Ｒ１）に関連する等式と、修正されたＲ０及びＲ１（Ｐｍ＋Ｐｎ及びＫｍ＊Ｐｍ＋Ｋｎ＊Ｐｎ）を形成するために使用される加算から省略された用語とを図示する。図１３Ｃは、導入される項であるデルタＲ０（ΔＲ０）及びデルタＲ１（ΔＲ１）を用いた図１３Ｂの計算の再構成を図示する。図１３ＤはＰｎ及びＰｍに対する図１３Ｃの解を図示するので、Ｒ１、Ｒ０の対応するバイトと、ページｍ及びｎを除いたデータページの全てからの対応するバイトとに基づいて、ページｎに対する１バイトの回復された値と、ページｍに対する１バイトの回復された値とに対する計算を表す。ＫｎはＫｍに対して固有であるので、固有の指数はゼロではない分母を可能にすることを留意されたい。
【０２３７】
様々な実施形態において、図１３Ａ〜図１３Ｄに表されるような計算は、ページｍに対する１バイトの回復された値と、ページｎに対する１バイトの回復された値とを決定するために行われる。計算は、Ｒ０、Ｒ１の対応するバイトと、ページｍ及びｎを除いたデータページの全てからの対応するバイトとに基づいて、ページｍ及びｎのバイトの全てに対する回復された値を決定するために繰り返される。
【０２３８】
従って、ページｍ又はｎの回復された値のバイトの任意のものを互いに対して計算することに依存しない。従って、Ｐｍおよび／またはＰｎの回復値が、Ｐｊ回復値に対する上記の計算と同様に、より高い並列からより高い直列の範囲にわたって計算される様々な実施形態が企図される。さらに、ページｍおよび／またはページｎの回復値の任意のものを互いに対して計算する際の順序の要件は存在しない。従って、Ｐｍおよび／またはＰｎの回復値が、Ｐｊの回復値に対する上記の計算と同様に、互いに対して様々な順序で計算される様々な実施形態が企図される。
【０２３９】
一部の例示的な実施形態は１若しくはそれ以上のＮＶＭ（それぞれが、例えば、１若しくはそれ以上のフラッシュダイを有する）上で行われる１若しくはそれ以上の読み出し動作の完了の順序によって少なくとも部分的に決定された順序で回復値を決定することに関連する計算（例えば、Ｒ０'及びＲ１'に対する計算）を行い、読み出し動作は、図１３Ａ〜図１３Ｄのうちのいずれかにおける計算のためのソースとして図示された値のうちの任意の１若しくはそれ以上を取得するためのものである。読み出し動作の完了の順序で計算を行うことは、一部の実施形態および／または一部の使用シナリオにおいて、計算を行うことを可能にされた要素とＮＶＭとの間のバッファリングの削減又は排除を可能にする。読み出し動作の完了の順序で計算を行うことは、一部の実施形態および／または一部の使用シナリオにおいて、計算を行うために使用されるメモリの帯域幅、例えば、ＮＶＭのメモリの帯域幅の縮小を可能にする。
【０２４０】
一部の他の例示的な実施形態は、１若しくはそれ以上のＮＶＭ（それぞれが、例えば、１若しくはそれ以上のフラッシュダイを有する）から戻されるデータおよび／または利用可能なデータの順序によって少なくとも部分的に決定された順序で回復値を決定することに関連する計算（例えば、Ｒ０'及びＲ１'に対する計算）を行い、戻されるデータおよび／または利用可能なデータは、図１３Ａ〜図１３Ｄのうちいずれかにおける計算のためのソースとして図示された値のうちの任意の１若しくはそれ以上のものを取得するためにＮＶＭ上で行われる読み出し動作に応答するものである。一部の実施形態および／または一部の使用シナリオにおいて、読み出し動作から戻されるデータおよび／または利用可能なデータの順序で計算を行うことは、計算を行うことを可能にされた要素とＮＶＭとの間のバッファリングを削減又は排除する。一部の実施形態および／または一部の使用シナリオにおいて、読み出し動作から戻されるデータおよび／または利用可能なデータの順序で計算を行うことは、計算を行うために使用されるメモリの帯域幅、例えば、ＮＶＭのメモリの帯域幅を縮小する。一部の実施形態において、読み出し動作は特定の順序（例えば、Ｐｉの最も低いバイトから最も高いバイト）で行われるが、他の実施形態においては、読み出し動作は特定の順序なく行われる。
【０２４１】
図１４Ａ及び図１４ＢはＮＶＭから受信されたページに関するより高いレベルの冗長情報を計算する実施形態の選択された詳細を図示する。図１４Ａは発令（読み出し動作を発令する１４０２Ａ）を介して１若しくはそれ以上のＮＶＭに複数の読み出しコマンドを送信し、全てのコマンドが送信されたかを調査し（全て発令されたか？１４０３Ａ）、発令されていない場合には、コマンドのうちの別のものを送信するために戻る実施形態の選択された詳細を図示する。１回に１つのコマンドではなく、１回に複数のコマンドが発令される他の実施形態が企図されることを留意されたい。
【０２４２】
図１４Ｂは図１４Ａにおいて図示されるように送信された読み出しコマンドに応答してＮＶＭから受信されたページを処理する実施形態の選択された詳細を図示する。ページが利用可能であるかを決定するために調査が行われる（ページ準備完了１４０２Ｂ）。ページが利用可能でない場合には、再び調査を行うために処理は戻る。ページが利用可能である場合には、ページに関連するより高いレベルの冗長情報の処理が行われる（ページに基づいた計算を行う１４０３Ｂ）。全てのページが処理されたかを決定する（ページは終了したか？１４０４Ｂ）ために調査が行われる。全てのページが処理された場合には、処理は完了し（終了１４９９Ｂ）、完了していない場合には、別のページが利用可能であるかを決定するために流れは戻る。
【０２４３】
図１４Ａに図示されるように送信されたコマンドに応答したページの受信を除いて、図１４Ｂに図示された処理は、図１４Ａに図示された処理から独立している。様々なシナリオにおいて、ページの到着順序は、ＮＶＭの種類、状態、動作環境、及び他の要因に従って変わり、一部の状況においては、到着するページに対応する読み出しコマンドの送信順序又は到着順序とは異なる。図１４Ａの処理は（送信される対応する読み出しコマンドに依存するページデータの到着を除いて）図１４Ｂから独立しているので、一部の実施形態および／または一部の使用シナリオにおいて、読み出しコマンドは送信されている（図１４Ａ）が、読み出しデータは受信／処理されている（図１４Ｂ）。一部の実施形態および／または一部の使用シナリオにおいて、ページのうちの一部が、例えば、特定のページに対する読み出しコマンドが送信される前に、特定のページが特定のバッファに存在する場合には、ＮＶＭに向けられた読み出しコマンドを介して要求されるのではなく、１若しくはそれ以上のバッファから提供される。一部の実施形態および／または一部の使用シナリオにおいて、送信されたコマンドに応答したページ以外のページは、送信されたコマンドに応答して提供されたページ、例えば、他の活動のために送信された読み出しコマンドに応答して提供されたページと混ぜられたＮＶＭによって提供される。
【０２４４】
様々な実施形態において、図１１に図示されるようなＲ０及びＲ１に対する計算は図１４Ａ及び図１４Ｂによって図示されるように少なくとも部分的に行われる。第１の例として、対応するＲ０及びＲ１のページを計算するために必要な全てのデータページに対する読み出しコマンドは、図１４Ａに図示されるように１若しくはそれ以上のＮＶＭに送信される。読み出しコマンドに応答して受信されたデータのページは、そのページが、図１１に図示されるように、Ｒ０及びＲ１のページを計算するために受信されると処理される。第２の例として、（例えば、二重平面ＮＶＭの２つの平面に対応する）一対のＲ０及びＲ１のページに対する読み出しコマンドが、図１４Ａによって図示されるように、１若しくはそれ以上のＮＶＭに送信される。読み出しコマンドに応答して受信されたデータのページは、そのページが、図１１によって図示されるように、Ｒ０及びＲ１のページを計算するために受信されると処理される。
【０２４５】
様々な実施形態において、図１２によって図示されるようなＰｊに対する計算は、図１４Ａ及び図１４Ｂによって例示されるように、少なくとも部分的に行われる。第１の例として、特定のＰｊページを計算するために必要な全てのデータページに対する読み出しコマンドが、図１４Ａに図示されるように、１若しくはそれ以上のＮＶＭに送信される。読み出しコマンドに応答して受信されたデータのページは、そのページが、図１２によって図示されるように、Ｐｊページを計算するために受信されると処理される。第２の例として、（例えば、二重平面ＮＶＭの２つの平面に対応する）一対のＰｊページに対する読み出しコマンドが、図１４Ａによって図示されるように、１若しくはそれ以上のＮＶＭに送信され、受信されたデータのページは、図１４Ｂによって図示されるように、一対のＰｊページを計算するために受信されると処理される。
【０２４６】
様々な実施形態において、図１３Ａ〜図１３Ｄのうちのいずれかによって図示されるように、回復値を決定することに関連する計算（例えば、Ｒ０'及びＲ１'に対する計算）は、図１４Ａ及び図１４Ｂによって図示されるように少なくとも部分的に行われる。第１の例として、特定のＲ０'ページ及び特定のＲ１'を計算するために必要な全てのデータページに対する読み出しコマンドが図１４Ａによって例示されるように１若しくはそれ以上のＮＶＭに送信される。読み出しコマンドに応答して受信されたデータのページは、そのページが、図１３Ａによって図示されるように、Ｒ０'及びＲ１'のページを計算するために受信されると処理される。第２の例として、（例えば、二重平面ＮＶＭの２つの平面に対応する）一対のＲ０'及びＲ１'のページに対する読み出しコマンドが、図１４Ａによって図示されるように、１若しくはそれ以上のＮＶＭに送信され、受信されたデータのページは、図１４Ｂによって図示されるように、一対のＲ０'及びＲ１'のページを計算するために受信されると処理される。
【０２４７】
図１５Ａ〜図１５Ｃは、例えば、図１１と関連付けられるような場合に、ＮＶＭに提供される書き込みに関してより高いレベルの冗長情報の計算を取り消す実施形態の選択された詳細を図示する。図１５Ａは発令（書き込み動作を発令する１５０２Ａ）を介して１若しくはそれ以上のＮＶＭに複数の書き込みコマンドを送信し、全てのコマンドが送信されたかを調査し（全て発令されたか？１５０３Ａ）、発令されていない場合には、コマンドのうちの別のものを送信するために戻る実施形態の選択された詳細を図示する。１回に１つのコマンドではなく、１回に複数のコマンドが発令される他の実施形態が企図されることを留意されたい。
【０２４８】
図１５Ｂは図１５Ａにおいて図示されるように送信された書き込みコマンドに応答してＮＶＭから受信された書き込みの完了及び状態の情報を処理する実施形態の選択された詳細を図示する。書き込みが誤りを伴うことなく完了したかを決定するために調査が行われる（書き込みＯＫか？１５０２Ｂ）。書き込みが誤りを伴うことなく完了した場合には、全ての書き込みが完了したかを決定するために調査が行われる（書き込みが終了したか？１５０４Ｂ）。全ての書き込みが完了した場合には、処理は完了する（終了１５９９Ｂ）。書き込みは完了したが、プログラムの不具合などの（より低いレベルの）誤りを伴う場合には、流れは、より高いレベルの冗長情報の計算に対する書き込みの影響を「取り消す」ことに進む（冗長からの書き込みを取り消す１５０３Ｂ）。さらに詳細には、より低いレベルの誤りを有する書き込みに対するデータは、あらゆる対応するより高いレベルの冗長情報の計算から計算されない（書き込みに対するデータが、書き込みが成功するという仮定の下で対応するより高いレベルの冗長性計算に既に含まれると想定する）。例えば、より低いレベルの書き込みの失敗が特定のページｊで検知される。応答して、修正されたＲ０及びＲ１のページは、ページｊのデータ（Ｐｊ）がゼロに設定されるように計算される。図１５Ｃは単一のバイトの修正されたＲ０（ｎＲ０）と単一のバイトの修正されたＲ１（ｎＲ１）とに対する計算の実施形態の選択された詳細を図示し、ここで、ｊはより低いレベルの書き込み失敗のページである。図１１と関連付けられるような図１２の場合において、有限体がガロア体である場合には、図１５Ｃに例示された減算動作（「−」）は論理ＸＯＲ動作と等しいことを留意されたい。他の処理（図示せず）が、様々な実施形態において、より低いレベルの書き込み失敗を有するページ（Ｐｊ）だけでなく修正されたより高い冗長性ページ（ｎＲ０及びｎＲ１）を格納するために行われる。
【０２４９】
図１５Ａに図示されるように送信されたコマンドに応答した書き込みの完了及び状態の情報の受信を除いて、図１５Ｂに図示された処理は、図１５Ａに図示された処理から独立している。様々なシナリオにおいて、書き込みの完了及び状態の情報の到着順序は、ＮＶＭの種類、状態、動作環境、及び他の要因に従って変わり、一部の状況においては、到着する書き込みの完了及び状態の情報に対応する書き込みコマンドの送信順序又は到着順序とは異なる。図１５Ａの処理は（送信される対応する書き込みコマンドに依存する書き込みの完了及び状態の情報の到着を除いて）図１５Ｂから独立しているので、一部の実施形態および／または一部の使用シナリオにおいて、書き込みコマンドは送信されている（図１５Ａ）が、書き込みの完了及び状態の情報は受信／処理されている（図１５Ｂ）。
【０２５０】
一部の実施形態および／または一部の使用シナリオにおいて、かなりの待ち時間がＮＶＭに送信される書き込みコマンドと、書き込みコマンドに応答した、ＮＶＭからの書き込みの完了及び状態の情報の受信との間に生じる。一部の実施形態および／または一部の使用シナリオにおいて、図１５Ａに図示されるように送信されたコマンドに応答した書き込みの完了及び状態の情報以外の書き込みの完了及び状態の情報は、図１５Ａに図示されるように送信されたコマンドに応答して提供される書き込みの完了及び状態の情報、例えば、他の活動のために送信された書き込みコマンドに応答して提供される書き込みの完了及び状態の情報と混ぜられたＮＶＭによって提供される。
【０２５１】
一部の実施形態および／または一部の使用シナリオにおいて、別の場合にデータ情報のために使用される１若しくはそれ以上のページは使用されない。様々なシナリオにおいて、使用されないページは、ブロック、Ｒブロック、ストライプ、又はあらゆる種類の一連のページの最初、中間、又は最後のページである。一部の状況において、使用されないページは先験的に使用されず（「省略される」）、一部の状況において、使用されないページは、何らかの用途の後に使用されない（「業務から外される」）。省略された使用されないページの例は、不適切に製造されたページである。業務から外された使用されないページの例は、（例えば、図１５Ｂに関してより低いレベルの誤りを有するとして記載されたような）適切に書き込むことに失敗したページである。例えば、図１０〜図１２、図１３Ａ〜図１３Ｄ、図１４Ａ〜図１４Ｂ、及び図１５Ａ〜図１５Ｂに関する処理は、例えば、使用されないページを計算から完全に省くことによって、又は使用されないページ上の全データがゼロであるかのように計算を行うことによって、あらゆる使用されないページ（省略されたページであっても業務から外されたページであっても）を飛ばす。
【０２５２】
冗長アレイによるプログラム障害回復
状況によっては、ＮＶＭへのデータの書き込み／プログラミングは正常に行われず、例えば、１若しくはそれ以上の書き込み／プログラミング動作に障害が発生したことがＮＶＭによって表示される。様々な実施形態において、書き込み／プログラミングのためにＮＶＭに送られるデータは、少なくとも、ＮＶＭが、すべてのデータがＮＶＭに正常に書き込まれた／プログラムされたと表示する（あるいは、データと関連付けられた１若しくはそれ以上の書き込み／プログラム動作の障害を表示する）まで、バッファにおいて保持される。データをバッファにおいて保持することは、障害と関連付けられたデータの（障害のダイ内の別の位置、データと関連付けられたストリームの後の方、ＮＶＭの任意の他の適切な領域といった）ＮＶＭ内の代替位置への書き込み／プログラミングを可能にする。
【０２５３】
あるＮＶＭは、１若しくはそれ以上の書き込み／プログラミング動作を適正に完了するのに失敗したブロックのそれ以上の書き込み／プログラミングを妨げる。あるＮＶＭベンダは、（書き込み／プログラミング障害の前に）ブロックに書き込まれ／プログラムされたデータを障害の発生しているブロックから可能な限り早く移動することを推奨している。あるＮＶＭでは、書き込み／プログラミングのために以前にＮＶＭに提供されたデータ（障害と関連付けられたデータなど）はＮＶＭから取得できない。データをバッファで保持することは、データがＮＶＭから取得できないコンテキストでさえも、障害からの回復を可能にする。
【０２５４】
ある実施形態では、バッファはＮＶＭコントローラ（図１Ａに図示し、本明細書で別に説明したＳＳＤコントローラなど）の一部として実装される。例えば、バッファは、図１Ａのバッファ１３１の全部または任意の部分として実装される。（ＮＶＭコントローラの他の部分と同じチップ上といった）ＮＶＭコントローラの一部としてバッファを実装するある実施形態では、ＮＶＭへの書き込み／プログラム帯域幅は、（オンチップ）バッファの限られたサイズのために制限される。例えば、書き込み帯域幅は、バッファのサイズを、ＮＶＭの書き込み／プログラミングを完了するのに必要な時間の平均値で割ったものに制限される。あるシナリオでは、書き込み帯域幅は、ＮＶＭの書き込み／プログラミングを完了するのに必要な時間の変動によりさらに制限される。
【０２５５】
別の実施形態では、バッファは、例えば、１若しくはそれ以上のＤＲＡＭチップといった１若しくはそれ以上の別個のメモリコンポーネントによって、ＮＶＭコントローラとは別に実装される。例えば、バッファは、図１Ｂの（任意選択の）カードメモリ１１２Ｃの全部または任意の部分として実装される。バッファを別個のメモリコンポーネントとして（例えばＤＲＡＭによって）実装するある実施形態では、ＮＶＭへの書き込み／プログラム帯域幅は、ＤＲＡＭへの書き込み帯域幅のために制限される。例えば、ＮＶＭへの書き込み帯域幅は、ＤＲＡＭへの書き込み帯域幅以下になるように制限される。
【０２５６】
様々な実施形態では、（オンチップ）バッファのサイズとも（オフチップ）メモリコンポーネントへの帯域幅とも無関係に、ＮＶＭが提供できるようになっている最大帯域幅でＮＶＭを書き込み／プログラムすることが目的である。様々なより高いレベルの冗長情報の計算および一時記憶（例えば、ＲＡＳＩＥ−１、ＲＡＳＩＥ−２、または任意のページ間ＥＣＣ方式）は、ＮＶＭが提供できるようになっている最大帯域幅でのＮＶＭの書き込み／プログラミングを可能にする。ＮＶＭに書き込まれ／プログラムされているすべての進行中のデータの複製を記憶するのではなく、より高いレベルの冗長情報が代わりに記憶される。有利には、記憶されるより高いレベルの冗長情報のサイズは、どれほどのデータがより高いレベルの冗長情報によってカバーされているかではなく、回復が何個の障害についての可能とされるかに関連したものである。
【０２５７】
概念的には、ＮＶＭダイのストリーム（Ｒ−ブロックなど）に書き込んでいる間、より高いレベルの冗長情報（何らかの形態のＲＡＳＩＥなど）がそのストリームについて内部で維持される。より高いレベルの冗長情報は、ＮＶＭの好都合な粒度（例えば、１若しくはそれ以上のページや１若しくはそれ以上のブロックなど）で維持され、内部で維持されるより高いレベルの冗長情報を用いてすべての進行中の書き込み／プログラム動作をカバーするのに十分になるように選択される。任意選択で、より高いレベルの冗長情報の全部または任意の部分は、（図７または図８の任意の１つ若しくは複数、例えば図８の８０７などによって、それらに関連して説明されるように）ＮＶＭに書き込まれ／プログラムされる。内部で維持されるより高いレベルの冗長情報は、（発生した場合には）書き込み／プログラム障害から回復するのに使用される。１つ若しくは複数のチップとして実装された不揮発性メモリコントローラを含む様々な実施形態では、より高いレベルの冗長情報の内部維持は、少なくとも部分的に、メモリコントローラのチップの１つ若しくは複数に含まれる１若しくはそれ以上の（オンチップ）記憶素子（図１ＡのＳＳＤコントローラ１００のバッファ１３１の全部または任意の部分など）における記憶によるものである。ある実施形態では、内部で維持されるより高いレベルの冗長情報は、たとえ書き込み／プログラム動作の障害が発生しない場合でさえも、ＮＶＭに書き込まれ／プログラムされ、よって、ＮＶＭに記憶されたデータを、読み出し妨害または保持現象に起因する誤りの累積といった（例えば相対的に長期にわたる）障害から保護する。
【０２５８】
ある使用シナリオでは、プログラム障害は比較的稀であり、ＲＡＳＩＥ−１が使用される。ある使用シナリオでは、プログラム障害はより頻繁であり、かつ／またはより高い信頼度が求められ、ＲＡＳＩＥ−２が使用される。ＲＡＳＩＥ−２を使用する例としては、３２個のＮＶＭダイのデータをバッファするのではなく、２個のＮＶＭダイのＲＡＳＩＥ−２データのバッファリングが行われ、バッファリング領域が１６分の１に節約される。書き込み／プログラムデータがＮＶＭダイに送られ、送られたデータが進行中のＲＡＳＩＥ−２計算で処理され次第、送られたデータと関連付けられたバッファは解放される。ある使用シナリオおよび／または実施形態では、バッファは、解放前にバッファに保持されたデータと関連付けられた書き込み／プログラミングの完了のかなり前に解放される。よって、ＮＶＭ書き込み／プログラム帯域幅のネックとしてのバッファ保持期間が短縮され、なくなる。
【０２５９】
ＲＡＳＩＥ−２を使用すると、１つの「ストライプ」に（例えば、１つのＲＡＳＩＥ累積グループに）に含まれる同時の書き込み／プログラム障害が２個未満である限り、ＲＡＳＩＥ−２技術は、ストライプに以前に書き込まれ／プログラムされたページを読み戻すことにより書き込み／プログラム障害の完全な訂正を可能にする。完全な訂正は、全Ｒ−ブロック列が完了しているか否かにかかわらず可能である。というのは、障害点までのＲＡＳＩＥ累積に使用されたデータだけが（障害点まで累積されたＲＡＳＩＥ情報と一緒に）使用されるからである。
【０２６０】
他の実施形態も企図されている。例えば、累積ＲＡＳＩＥ情報がＮＶＭに書き込まれないある実施形態では、「ローリング」ＲＡＳＩＥが使用され、その場合には、ＮＶＭへのページの書き込み／プログラミングの開始時にページがＲＡＳＩＥ情報中に累積され（「加算され」）、ページの書き込み／プログラミングの正常な完了時にＲＡＳＩＥ情報から除外される（「減算される」）。よって、単一のＲＡＳＩＥ累積バッファだけがすべての進行中の書き込み／プログラム動作に使用される。
【０２６１】
ある実施形態では、ＲＡＳＩＥ情報は、あたかも（それがそうであるか否かにかかわらず）Ｒ−ブロック列ごとにＮＶＭに書き込まれるものであるかのように内部で維持される。よって、ＲＡＳＩＥ累積記憶バッファは、進行中の列ごとに使用される。ＲＡＳＩＥ情報がＮＶＭに書き込まれる場合には、ＲＡＳＩＥ累積記憶バッファは次の２つの目的、すなわち、（１）書き込み／プログラム障害からの回復のための内部ＲＡＳＩＥ累積、および（２）ＮＶＭへの書き込み／プログラミングのためのＲＡＳＩＥ情報を満たす。様々な実施形態によれば、内部で維持されるＲＡＳＩＥ情報は、（ａ）書き込み／プログラム動作の指定の数の障害、（ｂ）ストライプ内の指定の数の訂正不能なＥＣＣ誤り、ならびに（ｃ）（ａ）および／または（ｂ）の和または最大値のうちの１若しくはそれ以上を訂正するのに十分である。
【０２６２】
様々な実施形態において、書き込み／プログラム障害からの回復のために内部で維持されるＲＡＳＩＥ情報は、（例えば、ＮＶＭの読み出し中のより低いレベルの冗長性の障害から回復するための）ＮＶＭへの書き込み／プログラミングのためのＲＡＳＩＥ情報とは異なる。例えば、内部で維持されるＲＡＳＩＥ情報は、（最大２つまでの同時の書き込み／プログラム障害からの回復を可能にする）ＲＡＳＩＥ−２情報であり、ＮＶＭへの書き込み／プログラミングのためのＲＡＳＩＥ情報は、（単一のより低いレベルの冗長読み出し障害からの回復を可能にする）ＲＡＳＩＥ−１情報である。別の実施形態では、ＮＶＭへの書き込み／プログラミングのためのＲＡＳＩＥ情報は、内部で維持されるＲＡＳＩＥ情報のサブセットである。
【０２６３】
書き込み／プログラム障害に場合には、障害が発生した位置が分かっており、したがって、消去−訂正方式の使用が可能であり、ある実施形態ではこれが使用される。別の実施形態では、非消去−訂正方式（一般的なＥＣＣ方式など）が使用される。
【０２６４】
図１６に、冗長アレイによるＮＶＭ障害回復の実施形態の選択された詳細を示す。図には、ＮＶＭコントローラ（コントローラ１６１０）によって行われる動作、およびＮＶＭ（ＮＶＭ１６２０）によって行われる動作が示されている。コントローラの一例は、（図１ＡのＳＳＤコントローラ１００で示すような）ＳＳＤコントローラである。ＮＶＭの一例は、（図１ＡのＮＶＭ１９９で示すような）複数のフラッシュダイである。
【０２６５】
以下では、「プログラム」という語（およびその個々の変形）は、「書き込み／プログラム」（およびそれらの個々の変形）、ならびに、ＮＶＭへの書き込みのコンテキストで使用されるときの「書き込み」（およびその個々の変形）と同義である。
【０２６６】
ＮＶＭへのデータのプログラミングは、コントローラがＮＶＭにプログラムされるべきデータを提供され、かつ／または生成する（データを受け取る１６１１）ことから開始する。次いで、データはバッファに記憶される（データ→バッファ１６１２）。続いて（あるいは、実施形態によっては同時に）、コントローラはＮＶＭにデータをプログラムするよう求める要求を送る（データを用いたＮＶＭのプログラム（を開始する）１６１３）。これに応答して、ＮＶＭはＮＶＭへのデータのプログラミングを開始する（開始する：データを用いたプログラム１６２１）。一方、コントローラは続いて、データに応じたより高いレベルの冗長情報を累積する（冗長情報を更新する１６１４）。データがより高いレベルの冗長情報の累積によって消費されたのに続いて、コントローラは、例えば、続いて受け取られるＮＶＭにプログラムされるべきデータを記憶するのに再利用するために、バッファを解放する（バッファを解放する１６１５）。バッファの解放は、要求されたＮＶＭのプログラミングがどこまで進んだかとは無関係である。
【０２６７】
一方、バッファの解放とは無関係に、ＮＶＭは、プログラミングの障害が発生しているかどうかの判定を含めて、データの要求されたプログラミングを続ける（（１若しくはそれ以上の）障害を検出する１６２２）。障害が発生していない場合には、ＮＶＭは最終的には要求されたプログラミングを終え（完了する：データを用いたプログラム１６２３）、データのプログラミングに関する処理が終了する。次いで、コントローラおよびＮＶＭは、例えば、１６１１など（図示せず）を繰り返すことによって、自由にＮＶＭに次のデータをプログラムする。
【０２６８】
障害が検出される場合には、これに応答して、コントローラは任意選択で、かつ／または選択的に、その後のデータの要求されたプログラミングを遅延させる（遅延させる１６１６）。次いでコントローラは、ＮＶＭに累積高レベル冗長情報をプログラムするよう求める要求を送る（冗長情報を用いたＮＶＭのプログラム（を開始する）１６１７）。これに応答して、ＮＶＭはＮＶＭへの累積高レベル冗長情報のプログラミングを開始する（開始する：冗長情報を用いたプログラム１６２４）。
【０２６９】
それからコントローラは続いて、以前に遅延された後のデータのプログラミングの（概念的な）再開を要求する（データを用いたＮＶＭのプログラム（を再開する）１６１８）。再開が概念的であるのは、厳密に言うと、以前に要求されたプログラミングは、様々な実施形態において、一時停止され、中断され、かつ／または停止されるものであり、よって、再開はそれぞれに異なり、継続、中断された動作への復帰、および／または完全に新しいプログラミング動作であるという点においてである。要求は、以前に障害が発生した位置とは異なる位置に（例えば、ＮＶＭの異なるブロックなど）に対するものである。再開要求と共に提供され、かつ／または再開要求と関連付けられるデータは、累積冗長情報、および障害の前にＮＶＭに正常にプログラムされたデータの任意の部分に少なくとも部分的に基づいて決定されるデータを含む。様々な実施形態において、プログラミング障害が原因でそれ以外に失われたデータの決定は、図１３Ａ〜図１３Ｄのうちの任意の１若しくはそれ以上によって、またはこれらに関連して説明したような技術によるものである。再開要求に応答して、ＮＶＭはＮＶＭへの残りのデータのプログラミングを開始する（再開する：データを用いたプログラム１６２５）。
【０２７０】
一方、コントローラは続いて、要求された再開プログラミングと関連付けられたデータに応じた新しいより高いレベルの冗長情報を累積する（新しい冗長情報を更新する１６１９）。最終的に、ＮＶＭは、要求された再開プログラミングを終える（完了する：データを用いたプログラム１６２６）。具体的に図示されていないが、様々な実施形態において、ＮＶＭは、より高いレベルの冗長情報のプログラミングおよびデータの再開プログラミングの障害を検出するように動作する。
【０２７１】
様々な実施形態および／または使用シナリオにおいて、バッファは、より高いレベルの冗長情報の累積（冗長情報を更新する１６１４）の完了の直後に、かつ／または完了に応答して解放される（バッファを解放する１６１５）。様々な実施形態および／または使用シナリオにおいて、バッファは、バッファに記憶されたデータのプログラミングがどこまで進んだか（開始する：データを用いたプログラム１６２１）、（（１若しくはそれ以上の）障害を検出する１６２２）、および（完了する：データを用いたプログラム１６２３）にかかわらず解放される（バッファを解放する１６１５）。様々な実施形態および／または使用シナリオにおいて、累積高レベル冗長情報は、累積高レベル冗長情報によってカバーされるデータのプログラミングが完了する（完了する：データを用いたプログラム１６２３）まで保持される（具体的には図示されていない）。別の実施形態では、累積高レベル冗長情報は、累積高レベル冗長情報のプログラミングが完了するまで保持される（具体的には図示されていない）。
【０２７２】
ある実施形態では、プログラミング障害以外の障害（電源障害など）に対する脆弱性に関しての（例えば、データおよび／または時間に基づく）窓が低減され、かつ／または最小化される。例えば、プログラミング障害が検出されたことに応答して、検出され次第、すべての累積高レベル冗長情報が可能な限り迅速にＮＶＭにプログラムされる。ＮＶＭにプログラムされる累積高レベル冗長情報はその場合、電源障害の後で利用することができ、プログラム障害が原因でそれ以外に失われた任意のデータの計算が可能になる。別の実施形態では、プログラミング障害に応答して、累積高レベル冗長情報は、データのうちの任意の適正にプログラムされた部分と併せて、プログラム障害が原因でそれ以外に失われたデータを突き止めるのに使用される。ある実施形態では、プログラム障害への応答は、現在のより高いレベルの冗長情報と関連付けられたデータの現在のプログラミング（ＲＡＳＩＥストライプなど）の完了まで延期される。その場合、現在のプログラミングの完了後に、累積高レベル冗長情報がＮＶＭにプログラムされ、またはプログラム障害が原因でそれ以外に失われたデータが突き止められる。
【０２７３】
ある実施形態では、ＮＶＭへのデータのプログラミングは、フラッシュ・メモリ・インターフェース（図１Ａのデバイスインターフェース１９０およびデバイスインターフェース論理１９１の全部または任意の部分など）といった１若しくはそれ以上のＮＶＭインターフェースを介したものである。ある実施形態では、（例えば、ＮＶＭプログラミング障害からの回復に使用される）より高いレベルの冗長情報は、１若しくはそれ以上の専用インターフェースを有する１若しくはそれ以上のオンチップメモリ素子（図１ＡのＳＳＤコントローラ１００のバッファ１３１の全部または任意の部分など）に記憶される。
【０２７４】
様々な実施形態において、図１０〜図１２、図１３Ａ〜図１３Ｄ、図１４Ａ〜図１４Ｂ、図１５Ａ〜図１５Ｂ、および図１６の１若しくはそれ以上の要素の、またはこれらの図に関連した処理は、全部または一部が、図１Ａの１若しくはそれ以上の要素（またはその部分）によって行われる。例えば、ＣＰＵ１７１のソフトウェア実行機能の一部分を使用して、図１２および図１３Ａ〜図１３Ｄで示すデータ回復動作を指図することなどによって、より高いレベルの冗長処理が管理される。別の例では、データ処理１２１は、図１１で示すような計算による、かつ／または図１６のより高いレベルの冗長情報の更新（冗長情報を更新する１６１４）および／若しくは（新しい冗長情報を更新する１６１９）と関連付けられたより高いレベルの冗長情報の計算に専用の、かつ／またはその計算に特化されたハードウェア要素を含む。さらに別の例では、図１Ａの割り当てられたバッファ１３８の全部または任意の部分は、図１６に関して説明した、データが記憶され（データ→バッファ１６１２）、解放される（バッファを解放する１６１５）バッファに対応するものである。
【０２７５】
実施技法の例
ある実施形態では、ＮＶＭ（フラッシュメモリなど、例えばＮＡＮＤフラッシュメモリ）不揮発性記憶、コンピューティングホスト・フラッシュ・メモリ・コントローラ、および／またはＳＳＤコントローラ（例えば図１ＡのＳＳＤコントローラ１００）、ならびにプロセッサ、マイクロプロセッサ、システム・オン・チップ、特定用途向け集積回路、ハードウェアアクセラレータ、または前述の動作の全部または部分を提供する他の回路のプログラム障害回復を実施するシステムによって行われる動作の全部またはいずれかの部分の様々な組み合わせが、コンピュータシステムによる処理と適合する仕様によって指定される。仕様は、様々な記述、例えば、ハードウェア記述言語、回路記述、ネットリスト記述、マスク記述、またはレイアウト記述に従ったものである。記述の例には、Ｖｅｒｉｌｏｇ、ＶＨＤＬ、ＳＰＩＣＥ、ＳＰＩＣＥの変形、例えば、ＰＳｐｉｃｅ、ＩＢＩＳ、ＬＥＦ、ＤＥＦ、ＧＤＳ−ＩＩ、ＯＡＳＩＳ、または他の記述が含まれる。様々な実施形態では、処理は、１若しくはそれ以上の集積回路上に含めるのに適する論理および／または回路を生成し、検証し、または指定するための解釈、コンパイル、シミュレーション、および合成の任意の組み合わせを含む。各集積回路は、様々な実施形態によれば、様々な技法に従って設計することができ、かつ／または製造することができる。技法には、プログラマブルな技法（例えば、フィールド若しくはマスク・プログラマブル・ゲート・アレイ集積回路）、セミカスタムの技法（例えば、全部若しくは一部がセルベースの集積回路）、およびフルカスタムの技法（例えば、実質的に専門化された集積回路）、それらの任意の組み合わせ、または集積回路の設計および／若しくは製造と適合する任意の他の技法が含まれる。
【０２７６】
ある実施形態では、命令のセットを記憶しているコンピュータ可読媒体によって記述される動作の全部または部分の様々な組み合わせが、１若しくはそれ以上のプログラム命令の実行および／若しくは解釈によって、１若しくはそれ以上のソースおよび／若しくはスクリプト言語命令文の解釈および／若しくはコンパイルによって、または、プログラミングおよび／若しくはスクリプティング言語命令文で表現された情報をコンパイルし、変換し、かつ／または解釈することによって生成されるバイナリ命令の実行によって実行される。命令文は任意の標準のプログラミングまたはスクリプティング言語（例えば、Ｃ、Ｃ＋＋、Ｆｏｒｔｒａｎ、Ｐａｓｃａｌ、Ａｄａ、Ｊａｖａ（登録商標）、ＶＢｓｃｒｉｐｔ、Ｓｈｅｌｌ）と適合する。プログラム命令、言語命令文、またはバイナリ命令のうち１若しくはそれ以上が、任意選択で、１若しくはそれ以上のコンピュータ可読記憶媒体要素上に記憶される。様々な実施形態では、プログラム命令の一部、全部、または様々な部分が、１若しくはそれ以上の関数、ルーチン、サブルーチン、インラインルーチン、プロシージャ、マクロ、またはそれらの部分として実現される。
【０２７７】
結論
ある特定の選択が、説明において、テキストおよび図面を作成するに際の単なる便宜のためになされており、別の指示がない限り、それらの選択は、それ自体で、前述の実施形態の構造または動作に関する追加情報を伝えるものと解釈すべきではない。選択の例には、図の符号に使用される呼称の特定の編成または割り当て、および実施形態の特徴および要素を特定し、参照するのに使用される要素識別子（コールアウトや数値識別子など）の特定の編成または割り当てが含まれる。
【０２７８】
「ｉｎｃｌｕｄｅｓ」または「ｉｎｃｌｕｄｉｎｇ」という語は、開放型範囲の論理集合を記述する抽象概念として解釈されるべきことが明確に意図されており、後に続けて「ｗｉｔｈｉｎ」という語が明示されない限り物理的包含を伝えるためのものではない。
【０２７９】
前述の実施形態は、説明および理解の明確さのためにある程度詳細に説明されているが、本発明は提示した詳細だけに限定されるものではない。本発明の多くの実施形態がある。開示の実施形態は例示であり、限定ではない。
【０２８０】
説明と整合性を有する、構成、配置、および使用における多くの変形が可能であり、それらの変形は、発行される特許の特許請求の範囲内にあることが理解されるであろう。例えば、相互接続および機能ユニットのビット幅、クロック速度、および使用される技術の種類は、各構成要素ブロックにおける様々な実施形態に従って変わりうる。相互接続および論理に与えられた名称は、単なる例であり、説明した概念を限定するものと解釈すべきではない。フローチャートおよび流れ図のプロセス、動作、および機能要素の順序および配置は、様々な実施形態に従って変わりうる。また、特に別に指定しない限り、指定される値範囲、使用される最大値および最小値、または他の特定の仕様（例えば、フラッシュメモリ技術の種類、レジスタおよびバッファ内のエントリまたは段の数）は、単に前述の実施形態のものにすぎず、実施技術の改善および変更を追跡することが見込まれるものであり、限定として解釈すべきではない。
【０２８１】
当分野で公知の機能的に等価の技法を、様々なコンポーネント、サブシステム、動作、関数、ルーチン、サブルーチン、インラインルーチン、プロシージャ、マクロ、またはそれらの部分を実施するのに、前述の技法の代わりに用いることができる。また、実施形態の多くの機能的態様を、より高速な処理（以前にハードウェアにあった機能のソフトウェアへの移行を円滑化する）およびより高い集積密度（以前にソフトウェアにあった機能のハードウェアへの移行を円滑化する）の実施形態に依存する設計制約条件および技術傾向に応じて、選択的に、ハードウェア（おおむね専用の回路など）で、またはソフトウェアで（例えば、プログラムされたコントローラ若しくはプロセッサのある方式によって）実現できることも理解される。様々な実施形態の具体的な変形は、これに限定されるものではないが、分割の違い、フォームファクタおよび構成の違い、異なるオペレーティングシステムおよび他のシステムソフトウェアの使用、異なるインターフェース規格、ネットワークプロトコル、または通信リンクの使用、本明細書で説明した概念を、特定の用途の固有の技術的業務的制約条件に従って実施するときに予期されるべき他の変形を含む。
【０２８２】
各実施形態は、前述の各実施形態の多くの態様の最小限の実施に必要とされるものを大きく超えた詳細および環境的コンテキストと共に説明されている。ある実施形態は、残りの要素間での基本的協働を変更せずに開示の構成要素または機能を割愛することを当業者は理解するであろう。よって、開示の詳細の多くが前述の実施形態の様々な態様を実施するのに必要ではないことが理解される。残りの要素が先行技術と区別できる範囲内で、割愛される構成要素および特徴は本明細書で説明した概念を限定するものではない。
【０２８３】
設計におけるすべてのそのような変形は、前述の実施形態によって伝えられる教示に対する実質的な変更ではない。また、本明細書で説明した実施形態は、他のコンピューティング用途およびネットワーキング用途に幅広い適用性を有し、前述の実施形態の特定の用途または産業だけに限定されるものではないことも理解される。よって本発明は、発行される特許の特許請求の範囲内に包含されるあらゆる可能な改変形態および変形形態を含むものと解釈すべきである。
【図１Ａ】
2014130587.tif 000012
【図１Ｂ】
2014130587.tif 000013
【図２】
2014130587.tif 000014
【図３】
2014130587.tif 000015
【図４Ａ】
2014130587.tif 000016
【図４Ｂ】
2014130587.tif 000017
【図５】
2014130587.tif 000018
【図６】
2014130587.tif 000019
【図７】
2014130587.tif 000020
【図８】
2014130587.tif 000021
【図９】
2014130587.tif 000022
【図１０】
2014130587.tif 000023
【図１１】
2014130587.tif 000024
【図１２】
2014130587.tif 000025
【図１３Ａ】
2014130587.tif 000026
【図１３Ｂ】
2014130587.tif 000027
【図１３Ｃ】
2014130587.tif 000028
【図１３Ｄ】
2014130587.tif 000029
【図１４Ａ】
2014130587.tif 000030
【図１４Ｂ】
2014130587.tif 000031
【図１５Ａ】
2014130587.tif 000032
【図１５Ｂ】
2014130587.tif 000033
【図１５Ｃ】
2014130587.tif 000034
【図１６】
2014130587.tif 000035
【外国語明細書】
2014130587000001.pdf
2014130587000002.pdf
2014130587000003.pdf
2014130587000004.pdf