システムであって、フラッシュメモリの一部分へのアクセスにおける生ビット誤り率BERを動的に決定する誤り統計収集および追跡手段と、複数の誤り訂正符号の中から選択された1つにしたがって符号化を行い、さらに少なくとも部分的に前記生BERに基づいて前記動的に選択された誤り訂正符号を動的に決定する順応adaptive符号化手段と、を有するシステム。請求項1記載のシステムにおいて、前記誤り訂正符号のうちの第1の誤り訂正符号による符号化の結果、前記誤り訂正符号のうちの第2の誤り訂正符号による符号化よりも少ない数の誤り訂正ビットが前記部分に格納されるものであるシステム。請求項2記載のシステムにおいて、前記第1の誤り訂正符号にしたがって符号化する場合、ユーザデータとして使用される部分のビット数が、最大で、前記第2の誤り訂正符号によって使用される誤り訂正ビットの数から前記第1の誤り訂正符号によって使用される誤り訂正ビットの数を引いた差分だけ増加するものであるシステム。請求項2記載のシステムにおいて、前記第2の誤り訂正符号にしたがって符号化する場合、ユーザデータとして使用される部分のビット数が、最大で、前記第2の誤り訂正符号によって使用される誤り訂正ビットの数から前記第1の誤り訂正符号によって使用される誤り訂正ビットの数を引いた差分だけ減少するものであるシステム。請求項2記載のシステムにおいて、前記順応符号化手段は、さらに、前記部分の寿命の第1の時期の間は前記第1の誤り訂正符号を選択し、前記寿命の第2の時期の間は前記第2の誤り訂正符号を選択するものであり、前記第2の時期は前記第1の時期より後であるシステム。請求項2記載のシステムにおいて、前記誤り統計収集および追跡手段および前記順応符号化手段のうちの1若しくはそれ以上は少なくとも部分的に、ハードウェア論理回路および/または1若しくはそれ以上のソフトウェアルーチンを通じて実現されるものであるシステム。システムであって、フラッシュメモリの一部分へのアクセスにおける生ビット誤り率BERを決定する誤り統計収集および追跡手段と、順応符号化手段および順応復号手段を有する順応符号化または復号手段であって、前記順応符号化手段は、複数の誤り訂正符号の中から第1に選択された誤り訂正符号にしたがって符号化を行い、前記順応復号手段は、前記誤り訂正符号の中から第2に選択された誤り訂正符号したがって復号を行うものであり、前記順応符号化または復号手段は、さらに、少なくとも部分的に前記誤り統計収集および追跡手段から受信した情報に基づいて、前記第1に選択された誤り訂正符号を決定するものである、前記順応符号化または復号手段とを有するシステム。請求項7記載のシステムにおいて、前記順応符号化手段は、前記誤り訂正符号のいずれかにしたがって符号化を行うユニバーサル符号化手段であるシステム。請求項7記載のシステムにおいて、前記順応復号手段は、前記誤り訂正符号のいずれかにしたがって復号を行うユニバーサル復号手段であるシステム。請求項7記載のシステムにおいて、前記第1に選択された誤り訂正符号による符号化の結果、前記第2に選択された誤り訂正符号による符号化よりも少ない数の誤り訂正ビットが前記部分に格納されるものであるシステム。請求項10記載のシステムにおいて、前記第1に選択された誤り訂正符号にしたがって符号化する場合、ユーザデータとして使用される部分のビット数は、最大で、前記第2に選択された誤り訂正符号にしたがって符号化を行うときに使用される誤り訂正ビット数から前記第1に選択された誤り訂正符号にしたがって符号化を行うときに使用される誤り訂正ビット数を引いた差分だけ増加するものであるシステム。請求項10記載のシステムにおいて、前記第2に選択された誤り訂正符号にしたがって符号化する場合、ユーザデータとして使用される部分のビット数は、最大で、前記第2に選択された誤り訂正符号にしたがって符号化を行うときに使用される誤り訂正ビット数から前記第1に選択された誤り訂正符号にしたがって符号化を行うときに使用される誤り訂正ビット数を引いた差分だけ減少するものであるシステム。請求項10記載のシステムにおいて、前記順応符号化手段は、さらに、前記部分の寿命の第1の時期の間は前記第1に選択された誤り訂正符号を選択し、前記寿命の第2の時期の間は前記第2に選択された誤り訂正符号を選択するものであり、前記第2の時期は前記第1の時期より後であるシステム。請求項7記載のシステムにおいて、前記誤り統計収集および追跡手段および前記順応符号化手段のうちの1若しくはそれ以上は少なくとも部分的に、ハードウェア論理回路および/または1若しくはそれ以上のソフトウェアルーチンを通じて実現されるものであるシステム。システムであって、フラッシュメモリの複数の部分の各々に関連付けられた符号化率を動的に決定する動的符号化率選択手段と、前記決定された各符号化率にしたがって動作可能な符号化手段と、前記決定された各符号化率にしたがって動作可能な復号手段とを有し、前記決定された各符号化率の特定の1つにしたがって前記符号化手段によって符号化されたデータが前記部分のうちの特定の1つに書き込まれ、次に、前記特定部分から読み出されて前記復号手段によって復号されるものであるシステム。請求項15記載のシステムにおいて、前記動的符号化率選択手段は、少なくとも部分的に、前記部分のうちの1若しくはそれ以上ごとに1若しくはそれ以上のパラメータに基づいて、または前記パラメータのうちの1若しくはそれ以上の1若しくはそれ以上の履歴に基づいて、前記各符号化率を動的に決定するものであり、前記パラメータは、訂正された誤りの数と、検出された誤りの数と、プログラムサイクルまたは消去サイクルの数と、読み出しサイクルの数と、プログラム時間と、消去時間と、読み出し時間と、温度と、閾値電圧とを含むものであるシステム。請求項15記載のシステムにおいて、前記動的決定は、前記部分のうちの第1の部分に当該第1の部分の寿命の比較的初期において関連付けられる比較的低い符号化率の決定と、前記第1の部分に前記寿命の比較的後期に関連付けられる比較的高い符号化率の決定とを有するものであるシステム。請求項17記載のシステムにおいて、前記比較的低い符号化率にしたがって符号化する場合、ユーザデータとして使用される前記第1の部分のビット数は、前記比較的高い符号化率にしたがって符号化するときよりも大きいものであるシステム。請求項15記載のシステムにおいて、前記動的符号化率選択手段、前記符号化手段、および前記復号手段のうちの1若しくはそれ以上は少なくとも部分的に、ハードウェア論理回路および/または1若しくはそれ以上のソフトウェアルーチンを通じて実現されるものであるシステム。本発明は多数の方法で実現でき、工程、製造品、機器、システム、組成物、その他コンピュータ可読記憶媒体たとえば、ディスクなどの光および/または磁気による大容量記憶装置における媒体、あるいはフラッシュストレージ等の不揮発性記憶装置を有する集積回路、あるいは光または電子通信リンク経由でプログラム命令が送信されるコンピュータネットワークなどとして、実施可能である。本明細書では、これらの実施態様、または本発明が取りうる他のいかなる形態も、技術と称されてよい。詳細な説明では、上記で特定された分野において性能、効率、および実用性の改善を可能にする本発明の1若しくはそれ以上の実施形態について、解説している。詳細な説明は、当該詳細な説明の残部のより迅速な理解を促すため、序論を含めている。序論は、本明細書で説明する概念に基づいたシステム、方法、製造品、およびコンピュータ可読媒体のうちの1若しくはそれ以上の実施形態例を含む。結論において詳述されるように、本発明は、請求項の範囲内で可能な全ての変更形態および変形形態を包含する。本発明の1若しくはそれ以上の実施形態の詳細な説明が、本発明の選択された詳細を示す添付図面とともに以下に示される。本発明は、実施形態に関連付けて記載される。本明細書の実施形態は単に例示的であると理解され、本発明は明らかに本明細書の実施形態に限定されるものではなく、またはそのいずれかまたは全てによって限定されるものでもなく、本発明は、多くの代替形態、変更形態、変形形態、および同等物を包含する。説明の単調さを回避するために、多様な単語ラベルこれらに限定されるものではないが、第1の、最後の、特定のcertain、様々な、さらなる、別の、特定のparticular、選択された、いくつかの、および特筆すべき、を含むが、別個の実施形態セットに適用されてもよい。本明細書において、このようなラベルは、品質、または何らかの形態の嗜好性または偏見を伝えることではなく、別個のセットの間で都合よく区別することを、明確に意味している。開示された工程のいくつかの操作の順序は、本発明の範囲内で変更可能である。工程、方法、および/またはプログラム命令の特徴の変形形態を説明するのに多数の実施形態が役立っている場合は、所定の基準、または動的に決定される基準にしたがって、前記多数の実施形態のうちの複数にそれぞれ対応する複数の動作モードのうちの1つの静的または動的な選択を実行する、その他の実施形態が考えられる。本発明の完全な理解を提供するために、多数の具体的詳細が以下の説明に記載される。詳細は例示目的で提供され、本発明は、詳細の一部または全てがなくとも、請求項にしたがって実施されることが可能である。明瞭性のため、本発明が不必要に曖昧にならないよう、本発明に関する技術分野において周知の技術事項は、詳述されていない。序論本序論は、詳細な説明のより迅速な理解を促すために含めたものである。序論のいずれの段落も、必然的に当該主題全体を概説するものであり、完全なまたは限定的な説明を意図するものではないので、本発明は、序論に示される概念もしあれば明確な例を含むに限定されるものではない。たとえば、以下の序論は、紙面と構成により特定の実施形態のみに限定された概略情報を提供する。最終的に請求項と整合するものも含め、本明細書の残部を通じてその他多くの実施形態が論じられている。頭字語本明細書の他の部分では、様々な略称または頭字語が、特定の要素を指す。頭字語の少なくともいくつかの説明は、以下のとおりである。NAND型フラッシュメモリは、情報を格納するためにフローティングゲートトランジスタのアレイを使用する。SLC技術においては、各ビットセルたとえばフローティングゲートトランジスタは、1ビットの情報を格納できる。MLC技術では、各ビットセルは、多ビットの情報を格納できる。製造技術たとえばCMOS技術が微細化するにつれて、各フローティングゲートに格納される電子の数が減少する。さらに、記憶容量および密度が増加するにつれて、各ビットセルはより多くのビットを格納するようになる。したがって、ビットセルに格納された値は、より低い電圧範囲で表されるようになる。セルに格納された電子数の検出および/または経時変化の不確実性は、データが誤って格納または読み出しされる可能性を増加させる。1若しくはそれ以上のECC技術の使用により、通常であれば破損しているデータの正しい修正を可能にする。いくつかのSSDは、不揮発性記憶装置を提供するために、フラッシュメモリを提供するたとえば、電力を印加せずに情報が保持される。いくつかのSSDは、HDD、CDドライブ、およびDVDドライブなど、磁気および/または光による不揮発性記憶装置によって使用されるフォームファクタ、電気的インターフェース、および/またはプロトコルと互換性がある。様々な実施形態において、前記SSDは、0若しくはそれ以上のRS符号、0若しくはそれ以上のBCH符号、0若しくはそれ以上のビタビまたはその他のトレリス符号の、様々な組み合わせを用いる。生BERの一例は、ECCの恩恵を受けずにフラッシュメモリから読み出されたデータのBERである。いくつかの要因が生BER書き込み誤り、記憶誤り、およびリードディスターブエラーなどに貢献し、生BERは経時的に変化可能である。フラッシュメモリへのデータの格納は、2部工程である。まず前記フラッシュメモリのブロックが消去され、その後に前記ブロックが書き込まれる。2部工程は、PEサイクルの一例である。様々な使用シナリオおよび/または実施形態において、フラッシュメモリの誤りの全てまたは1若しくはそれ以上の部分は、前記フラッシュメモリにおける特定のブロックがいくつのPEサイクルを受けたかの関数である。いくつかの使用シナリオおよび/または実施形態において、特定ブロックはPEサイクルを受けているのでたとえば消去されてから書き込まれているので、特定ブロックの生BERが増加する。いくつかの手法において、フラッシュメモリの全寿命にわたって、固定ECCが使用される。たとえばフラッシュメモリが最初に動作されたときから前記フラッシュメモリが最後に動作されるときまで単一のECCスキームが使用される。前記単一のECCスキームは、フラッシュメモリのライフサイクルにわたって可能性のある最悪な生BERを訂正するのに十分な誤り訂正能力を有するように、設計されているたとえば、前記フラッシュメモリの寿命の後期の間に訂正可能となっている。誤り訂正能力は、前記フラッシュメモリの寿命の初期および中期の間に比較的低い生BERから生じる誤りを訂正するのに十分すぎるほどであり、こうして有効な記憶容量を減少させる誤りを訂正するのに必要なECCに、より多くの記憶容量が割り当てられる。様々な実施形態および/または使用シナリオにおいて、フラッシュメモリとともに使用するための順応ECC技術は、フラッシュメモリ寿命、信頼性、性能、および/または記憶容量の改善を可能にする。本技術は、様々な符号種別、符号化率、および/または符号長を備えるECCスキーム異なる誤り訂正能力を提供する、ならびに誤り統計収集または追跡専用ハードウェア論理ブロックを通じてなどのセットを含む。本技術は、1若しくはそれ以上のECCスキームによる符号化または復号、ならびに少なくとも部分的に誤り統計収集または追跡からの専用誤り統計収集または追跡ハードウェア論理ブロックからの入力を受け付けるハードウェア論理順応コーデックを通じてなど情報に基づくそれぞれの1若しくはそれ以上のECCスキームの間でのフラッシュメモリの全てまたはいずれかの部分の符号化または復号の動的な切り替えを、さらに含む。本技術は、経時的に様々な動作モードでたとえば、MLCページまたはSLCページとして前記フラッシュメモリの一部分たとえばページまたはブロックを選択的に動作させることを、さらに含む。たとえば、フラッシュメモリ寿命の初期においては長さの短い符号が使用され、寿命におけるそれ以降の部分では、長さの長い符号が使用される。別の例としては、前記フラッシュメモリのページの動作期間の間、ページはMLCページとして動作させられ、その後の動作期間の間は、ページはSLCページとして動作させられる。寿命または動作期間は、たとえば電力が印加される時間、プログラムサイクルまたは消去サイクルの数、読み出しサイクルの数、測定および/または予測BER、プログラム時間、消去時間、読み出し時間、温度、および/またはフラッシュメモリの記憶セルの閾値電圧などに基づいて、測定可能である。例示的な実施形態詳細な説明の序論の結びとして、少なくともECExampleCombinations、組み合わせ例として明示的に列挙されたいくつかを含む実施形態例集を以下に示し、本明細書に記載される概念にしたがって様々な実施形態タイプのさらなる説明を提供する。これらの例は、相互に排他的、網羅的、または限定的となるように意図されるものではなく、本発明はこれらの実施形態例に限定されず、むしろ特許請求の範囲内で可能な全ての変更形態および変形形態を包含する。EC1システムであって、フラッシュメモリの一部分へのアクセスにおける生ビット誤り率BERを決定する誤り統計収集または追跡ハードウェア論理ブロックと、複数の誤り訂正符号の中から選択された1つにしたがって符号化を行い、さらに少なくとも部分的に前記生BERに基づいて前記選択された誤り訂正符号を動的に決定する順応エンコーダハードウェアブロックと、を有するシステム。EC2EC1記載のシステムにおいて、前記誤り訂正符号の1つによる符号化の結果、別の誤り訂正符号による符号化よりも少ない数の誤り訂正ビットが前記部分に格納されるものであるシステム。EC3EC1記載のシステムにおいて、前記誤り訂正符号の1つによる符号化の結果、別の誤り訂正符号による符号化よりも多い数の誤り訂正ビットが前記部分に格納されるものであるシステム。EC4EC1記載のシステムにおいて、前記選択された誤り訂正符号が第1の誤り訂正符号である場合、第2の誤り訂正符号よりも比較的多くのデータ情報および比較的少ない誤り訂正情報が順応エンコーダによって出力されるものであるシステム。EC5EC4記載のシステムにおいて、前記選択された誤り訂正符号が前記第1誤り訂正符号であるときのデータ情報の量は、前記選択された誤り訂正符号が前記第2の誤り訂正符号であるときのデータ情報の量よりも大きいものであるシステム。EC6EC4記載のシステムにおいて、前記選択された誤り訂正符号が前記第2の誤り訂正符号であるときのデータ情報の量は、2のべき乗であるシステム。EC7EC4記載のシステムにおいて、前記選択された誤り訂正符号が前記第2の誤り訂正符号であるときのデータ情報の量は2のべき乗であり、前記選択された誤り訂正符号が前記第1誤り訂正符号であるときのデータ情報の量は、前記選択された誤り訂正符号が前記第2の誤り訂正符号であるときのデータ情報の量よりも大きいものであるシステム。EC8EC1記載のシステムにおいて、さらに前記誤り訂正符号のいずれかにしたがって復号する順応デコーダを有するものであるシステム。EC9EC1記載のシステムにおいて、前記誤り訂正符号はリードソロモンRS符号のみを有するものであるシステム。EC10EC1記載のシステムにおいて、前記誤り訂正符号はBoseChaudhuriHocquenghemBCH符号のみを有するものであるシステム。EC11EC1記載のシステムにおいて、前記誤り訂正符号は低密度パリティ検査LDPC符号のみを有するものであるシステム。EC12EC1記載のシステムにおいて、前記誤り訂正符号は少なくとも2種類の誤り訂正符号を有し、誤り訂正符号の種類はリードソロモンRS型符号、BoseChaudhuriHocquenghemBCH型符号、および低密度パリティ検査LDPC型符号を含むものであるシステム。EC13EC1記載のシステムにおいて、前記誤り訂正符号のうちの少なくとも2つは異なる符号化率であるシステム。EC14EC1記載のシステムにおいて、前記誤り訂正符号のうちの少なくとも2つは異なる符号長であるシステム。EC15EC1記載のシステムにおいて、前記部分は前記フラッシュメモリの1若しくはそれ以上のブロックであり、前記ブロックの各々は個別に消去可能であるシステム。EC16EC1記載のシステムにおいて、前記部分は前記フラッシュメモリの1若しくはそれ以上のページであり、前記ページの各々は個別に書き込み可能であるシステム。EC17EC1記載のシステムにおいて、前記誤り統計収集および追跡ハードウェア論理ブロックは、さらに、前記フラッシュメモリのそれぞれの部分へのアクセスにおけるそれぞれの生BERを決定するものであるシステム。EC18EC1記載のシステムにおいて、前記フラッシュメモリは1若しくはそれ以上のフラッシュメモリダイを有するものであるシステム。EC19EC1記載のシステムにおいて、前記生BERは予測される生BERであるシステム。EC20EC19記載のシステムにおいて、前記予測される生BERは少なくとも部分的に、前記部分上でプログラムサイクルまたは消去サイクルが実行される数を計測することによって決定されるシステム。EC21EC19記載のシステムにおいて、前記予測される生BERは少なくとも部分的に、前記部分上で読み出しサイクルが実行される数を計測することによって決定されるシステム。EC22EC19記載のシステムにおいて、前記予測される生BERは少なくとも部分的に、前記部分の少なくとも1つのセルに関連付けられた閾値電圧を決定することによって決定されるシステム。EC23EC19記載のシステムにおいて、前記予測される生BERは少なくとも部分的に、1若しくはそれ以上の所定閾値に基づいて決定されるシステム。EC24EC19記載のシステムにおいて、前記予測される生BERは、少なくとも部分的に1若しくはそれ以上の統計モデルに基づいて決定されるシステム。EC25EC1記載のシステムにおいて、前記生BERは測定された生BERであるシステム。EC26EC25記載のシステムにおいて、前記測定された生BERは定期的に決定されるものであるシステム。EC27EC25記載のシステムにおいて、前記測定された生BERは少なくとも部分的に、前記部分に所定パターンを書き込むこと、および引き続き前記部分を読み出すことによって決定されるシステム。EC28EC25記載のシステムにおいて、前記測定された生BERは少なくとも部分的に、前記部分の少なくとも一部の読み出しに関連付けられたBERを監視することによって決定されるシステム。EC29EC25記載のシステムにおいて、前記測定された生BERは少なくとも部分的に、前記フラッシュメモリからの生読み出しデータを前記生読み出しデータの誤り訂正済みバージョンと比較することによって決定されるものであるシステム。EC30EC1記載のシステムにおいて、前記誤り統計収集および追跡ハードウェア論理ブロックは独立したハードウェア論理ブロックであるシステム。EC31EC1記載のシステムにおいて、前記誤り統計収集および追跡ハードウェア論理ブロックは専用ハードウェア論理ブロックであるシステム。EC32EC1記載のシステムにおいて、前記誤り統計収集および追跡ハードウェア論理ブロックは分散型ハードウェア論理ブロックであるシステム。EC33EC1記載のシステムにおいて、前記誤り統計収集および追跡ハードウェア論理ブロックは少なくとも部分的に、前記誤り訂正符号のいずれかにしたがって復号する順応デコーダハードウェア論理ブロック内に実装されるものであるシステム。EC34EC1記載のシステムにおいて、前記誤り統計収集および追跡ハードウェア論理ブロックは少なくとも部分的に、前記フラッシュメモリからの生読み出しデータを、前記生読み出しデータの誤り訂正済みバージョンと比較して、少なくとも部分的に前記生BERを決定する順応デコーダハードウェア論理ブロック内に実装されるものであるシステム。EC35EC1記載のシステムにおいて、前記誤り統計収集および追跡ハードウェア論理ブロックは少なくとも部分的に、前記フラッシュメモリと互換性があり、前記部分上でプログラムサイクルまたは消去サイクルが実行される数を計測するフラッシュメモリインターフェースハードウェア論理ブロック内に実装され、前記順応エンコーダは、さらに、少なくとも部分的に前記計測に基づいて前記選択された誤り訂正符号を動的に決定するものであるシステム。EC36EC1記載のシステムにおいて、前記誤り統計収集および追跡ハードウェア論理ブロックは少なくとも部分的に、前記フラッシュメモリと互換性があり、前記部分上で読み出しサイクルが実行される数を計測するフラッシュメモリインターフェースハードウェア論理ブロック内に実装され、前記順応エンコーダは、さらに、少なくとも部分的に前記計測に基づいて前記選択された誤り訂正符号を動的に決定するものであるシステム。EC37EC1記載のシステムにおいて、前記誤り統計収集および追跡ハードウェア論理ブロックは少なくとも部分的に、前記フラッシュメモリと互換性があり、前記部分の少なくとも1つのセルに関連付けられた閾値電圧を決定するフラッシュメモリインターフェースハードウェア論理ブロック内に実装され、前記順応エンコーダは、さらに、少なくとも部分的に前記閾値電圧に基づいて前記選択された誤り訂正符号を動的に決定するものであるシステム。EC38EC1記載のシステムにおいて、前記部分は複数のサブ部分sub-portionを有し、前記順応デコーダは、さらに、誤り訂正情報が1若しくはそれ以上の前記サブ部分に格納可能となり、データ情報が1つのサブ部分のみに格納可能となるように復号するものであるシステム。EC39EC1記載のシステムにおいて、前記ハードウェアブロックはソリッドステートディスクSSDコントローラに含まれるものであるシステム。EC40EC1記載のシステムにおいて、前記ハードウェアブロックはソリッドステートディスクSSDに含まれるものであるシステム。EC41EC1記載のシステムにおいて、前記ハードウェアブロックは不揮発性記憶構成要素コントローラを有するものであるシステム。EC42EC1記載のシステムにおいて、前記ハードウェアブロックは不揮発性記憶構成要素に含まれるものであるシステム。EC43EC42記載のシステムにおいて、前記不揮発性記憶構成要素は、ユニバーサルシリアルバスUSB記憶構成要素、コンパクトフラッシュCF登録商標記憶構成要素、マルチメディアカードMMC記憶構成要素、セキュアデジタルSD記憶構成要素、メモリスティック記憶構成要素、およびxD記憶構成要素のうちの1若しくはそれ以上を有するものであるシステム。EC44システムであって、フラッシュメモリの一部分へのアクセスにおける生ビット誤り率BERを決定する誤り統計収集または追跡ハードウェア論理ブロックと、順応エンコーダおよび順応デコーダを有する順応コーデックであって、前記順応エンコーダは複数の誤り訂正符号の中から第1に選択された誤り訂正符号にしたがって符号化を行い、前記順応デコーダは前記誤り訂正符号の中から第2に選択された1つにしたがって復号を行うものであり、前記順応コーデックは、さらに、少なくとも部分的に前記誤り統計収集および追跡ハードウェア論理ブロックから受信した情報に基づいて、前記誤り訂正符号の中から第1に選択された誤り訂正符号を決定する前記制御ハードウェア論理ブロックとを有するものである、前記順応コーデックと、を有するシステム。EC45EC44記載のシステムにおいて、前記順応コーデックは、さらに、前記誤り訂正符号の各々を記述できる符号ライブラリを有するものであるシステム。EC46EC44記載のシステムにおいて、前記順応エンコーダは、前記誤り訂正符号のいずれかにしたがって符号化できるユニバーサルエンコーダであるシステム。EC47EC44記載のシステムにおいて、前記順応デコーダは、前記誤り訂正符号のいずれかにしたがって復号できるユニバーサルデコーダであるシステム。EC48システムであって、フラッシュメモリの複数の部分の各々に関連付けられた符号化率を決定する符号化率選択ブロックと、前記決定された各符号化率にしたがって動作可能なエンコーダと、前記決定された各符号化率にしたがって動作可能なデコーダとを有し、前記決定された各符号化率の特定の1つにしたがって前記エンコーダによって符号化されたデータが前記フラッシュメモリの前記部分の特定の1つに書き込まれ、次に前記特定部分から読み出されて前記デコーダによって復号されるものであるシステム。EC49EC48記載のシステムにおいて、前記符号化率選択ブロックはハードウェア論理回路を有するものであるシステム。EC50EC48記載のシステムにおいて、前記符号化率選択ブロックは、1若しくはそれ以上の部分ごとに1若しくはそれ以上のパラメータ、あるいは1若しくはそれ以上のパラメータの1若しくはそれ以上の履歴に基づいて、前記各符号化率を決定するものであり、前記パラメータは、訂正された誤りの数と、検出された誤りの数と、プログラムサイクルまたは消去サイクルの数と、読み出しサイクルの数と、プログラム時間、消去時間と、読み出し時間と、温度と、閾値電圧とを含むものであるシステム。システムおよび動作図1は、フラッシュメモリベースのデータ記憶のための順応ECC技術を用いるシステム100の実施形態の選択された詳細を示す。書き込み記憶データパス110は、様々なハードウェアブロックを含む。ユニバーサルエンコーダ120は制御/インターフェース130に接続され、これは同様にたとえば1若しくはそれ以上のフラッシュメモリダイを有するフラッシュユニット140に接続されている。読み出し記憶データパス150は様々なハードウェアブロックを含む。フラッシュユニットおよび制御/インターフェースはユニバーサルデコーダ160に接続されている。符号ライブラリ170ハードウェアブロックは、ユニバーサルエンコーダおよびユニバーサルデコーダのハードウェアブロックに接続されている。誤り統計収集または追跡180ハードウェアブロックは、ユニバーサルエンコーダ、符号ライブラリ、ユニバーサルデコーダ、および制御/インターフェースのハードウェアブロックに接続されている。動作中、記憶データとして書き込むホストからのユーザデータがユニバーサルエンコーダによって受信され、誤り訂正符号にしたがって符号化される。誤り訂正符号は、符号ライブラリからの情報によって記述され、少なくとも部分的に誤り統計収集または追跡ブロックによって提供される情報などに基づいて選択される。次にユニバーサルエンコーダは、フラッシュユニットに情報を書き込む制御/インターフェースに、データ情報および誤り訂正情報を提供する。制御/インターフェースがフラッシュユニットの1若しくはそれ以上の部分たとえばページまたはブロックから生情報を読み出すことによって記憶情報の読み出しが開始し、ユニバーサルデコーダに生情報を提供する。次に前記ユニバーサルデコーダは、前記生情報に含まれる誤り訂正情報を用いて、誤り訂正符号にしたがって前記生情報誤り訂正を含むをデータ情報に復号する。前記誤り訂正符号は、符号ライブラリからの情報によって記述され、少なくとも部分的に誤り統計収集または追跡ブロックおよび/または生情報の1若しくはそれ以上の部分によって提供される情報などに基づいて選択される。次に前記データ情報はホストに渡される。様々な代替実施形態において、処理は1若しくはそれ以上の代替順序で実施される。たとえばいくつかの実施形態において、記憶データの読み出しは符号ライブラリの読み出しによって開始され、続いて制御/インターフェースが生情報を読み出す。符号化および復号に使用される誤り訂正符号は、誤り訂正符号のセットから選択される。様々な実施形態において、セットはRS符号のみ、BCH符号のみ、トレリス符号のみ、またはLDPC符号のみを含む。様々な実施形態において、セットはRS、BCH、トレリス、および/またはLDPC符号種別の様々な組み合わせなど、1より多くの種類を含み、符号種別の各々はそれぞれの種別の1若しくはそれ以上の特定の符号を含む。様々な実施形態において、セットは様々な速度および/または長さの符号を含む。さらなる実施形態において、1つの符号種別BCH符号種別などの符号が高速符号に使用され、別の符号種別LDPC符号種別などの符号が低速符号に使用される。誤り統計収集または追跡ハードウェアブロックは、独立した機能ハードウェアブロックとして、あるいは1若しくはそれ以上のハードウェアブロック中に分散する機能ブロックとして実装される。たとえば誤り統計収集または追跡ハードウェアブロックは、部分的にユニバーサルデコーダハードウェアブロック内に実装され、フラッシュユニットから読み出された生情報を、生情報を復号することによって生成された誤り訂正済みデータ情報と比較することによって、測定された生BERを計算できる。別の例として、誤り統計収集または追跡ハードウェアブロックは、部分的に制御/インターフェースハードウェアブロック内に実装され、たとえば、フラッシュストレージのページまたはブロックなどのストレージユニットあたりのPEサイクルおよび/または読み出しサイクルの数を計測し、所定の統計モデル用のパラメータとしてその数を使用することによって、予測される生BERを計算することができ、次に当該所定の統計モデルが予測される生BERを提供する。さらに別の例としては、誤り統計収集または追跡ハードウェアブロックは、部分的に制御/インターフェースハードウェアブロック内に実装され、フラッシュストレージの一部分フラッシュストレージのページまたはブロックなどから読み出された1若しくはそれ以上のセルのための閾値電圧またはその代用物を取得し、所定の統計モデル用のパラメータとして電圧を使用することによって、予測される生BERを計算することができ、次に当該所定の統計モデルが予測される生BERを提供する。さらに別の例としては、誤り統計収集または追跡ハードウェアブロックは、ユニバーサルエンコーダを迂回することなどによってフラッシュストレージに書き込まれる1若しくはそれ以上の所定パターンを提供し、さらにユニバーサルデコーダを迂回することなどによってフラッシュストレージから戻される生ビット誤りの数を検証して測定された生BERを決定する。所定パターンは、全0パターン、全1パターン、または1若しくはそれ以上のPRBSパターンを含む。さらに別の例として、誤り統計収集または追跡ハードウェアブロックは、たとえば所定パターンのうちの1若しくはそれ以上を提供および検証することを通じて、フラッシュストレージの1若しくはそれ以上の部分の現在の生測定されたBERを定期的に100PEサイクルごとなど決定できる。さらなる利点として、上述の例のいずれか1若しくはそれ以上が様々な組み合わせにおいて実現される。様々な実施形態において、上述の誤り統計収集または追跡ハードウェアブロックによって実行される1若しくはそれ以上の機能は、1若しくはそれ以上のソフトウェア技術を通じて、全体としてまたは部分的に実現される。たとえば、プログラマブルハードウェアタイマは、プロセッサへの割り込みを提供する。これに応答して、プロセッサは、ユニバーサルデコーダハードウェアブロックの一部分に1若しくはそれ以上の測定された生BER値をプロセッサに対して提供するように命令するソフトウェア割り込みハンドラルーチンを実行する。プロセッサは前記値を移動平均として蓄積する。移動平均は、少なくとも部分的に、誤り訂正符号を選択できるソフトウェア機能への入力を通じて、あるいは誤り訂正符号を選択できるハードウェアユニットへの入力として、選択された誤り訂正符号を決定するために使用される。別の例として、プロセッサは、ストレージユニットあたりのPEおよび/または読み出しサイクルを計測するために、1若しくはそれ以上のソフトウェアルーチンを実行する。計測は、プロセッサによってアドレス可能なメモリから以前のカウンタ値を読み出し、カウンタ値をインクリメントし、インクリメントされたカウンタ値をメモリに格納し直すルーチンを通じて、行われる。ハードウェアおよびソフトウェアの様々な組み合わせにおいて実行される様々な誤り統計収集および追跡機能を有するその他の実施形態も考えられる。いくつかの実施形態において、誤り統計収集または追跡ブロックは、経時的な情報の履歴を保持し、履歴の観点から履歴を意識した生BERを計算することが可能である。たとえば、誤り統計収集または追跡ブロックは、アクセスごとまたは動作時間ごとなどに対し、ブロックごとまたはページごとに測定または予測された生BERの履歴を保持し、履歴を意識した測定または予測生BERを履歴から決定することが可能である。符号化のために選択される誤り訂正符号は、様々な基準、使用シナリオ、および実施形態にしたがって、動的に決定される。たとえば、測定または予測された生BERは、符号化のためにどの誤り訂正符号が選択されるかに対して動的に影響を及ぼす。別の例として、履歴を意識した測定されたまたは予測される生BERは、符号化のためにどの誤り訂正符号が選択されるかに対して影響を及ぼす。フラッシュストレージの特定部分の複合のために選択される誤り訂正符号は、特定部分を最後に書き込んだときに使用された符号化と一致するように動的に決定される。様々な実施形態は、測定または予測された生BERの明確な計算を伴わない符号化のための誤り訂正符号の選択を実行し、むしろ1若しくはそれ以上のパラメータまたは1若しくはそれ以上のパラメータの履歴に基づいて誤り訂正符号を直接動的に選択する。前記パラメータは、訂正および/または検出された誤りの数、PEサイクルの数、読み出しサイクルの数、プログラム時間、消去時間、読み出し時間、温度、および閾値電圧を含む。様々な実施形態において、前記パラメータおよび/またはその履歴は、フラッシュストレージ部分によるフラッシュストレージのページごとまたはブロックごとなど。いくつかの実施形態において、フラッシュメモリフラッシュユニットに含まれるものなどはページまたはブロックなどの部分として構成され、各部分は、2Kまたは4Kバイトの情報などの所定量の情報を格納できる。前記情報は、データ情報および誤り訂正情報を含む。いくつかの実施形態において、いずれの部分も同じ特定バイト数を誤り訂正情報として格納することができ、別の実施形態では、いくつかの部分が異なるバイト数の誤り訂正情報を格納できる。様々な誤り訂正符号符号ライブラリによって記述されるものなどが、異なるバイトまたはビット数の誤り訂正情報を生成する。たとえば、フラッシュメモリの寿命において比較的早い時期に使用されるように第1の誤り訂正符号を通じて符号化することで、寿命の後期に使用されるような第2の誤り訂正符号と比較して、比較的少ないバイト数の誤り訂正情報たとえば誤り訂正のための冗長情報などを生成する。いくつかの実施形態において、フラッシュメモリおよび/またはその使用は、各部分における第2の誤り訂正符号を通じての符号化に十分な誤り訂正情報を格納することができるようになっており、第1の誤り訂正符号が使用されるときに誤り訂正情報記憶を使用しないままにしておく。別の実施形態において、フラッシュメモリおよび/またはその使用は、各部分における第1の誤り訂正符号を通じての符号化に十分な誤り訂正情報を格納することができるが、第2の誤り訂正符号を通じての符号化に十分な誤り訂正情報を各部分に格納することはできない。その他の実施形態のいくつかは、部分ごとの誤り訂正情報記憶と組み合わせて、第2の誤り訂正符号を通じて符号化された誤り訂正情報を格納するのに十分な、追加フラッシュメモリストレージ追加誤り訂正情報の格納に特化されたフラッシュメモリの領域などを含む。いくつかの実施形態において、フラッシュメモリは部分ページまたはブロックまたはその重複などとして動作し、各部分はデータサブ部分sub-portion、およびそれぞれの対応する誤り訂正サブ部分として構成される。フラッシュメモリおよび/またはその使用は、複数の誤り訂正符号のうちの動的に選択された特定の1つにしたがって特定量の記憶データを符号化することができ、特定量の記憶データに対応する誤り訂正情報を生成する。記憶データは、誤り訂正情報と組み合わせられて、データサブ部分の特定の1つおよび誤り訂正サブ部分の対応する特定の1つの組み合わせとして格納される。前記部分は全て同じサイズであるか、あるいは異なるサイズであってもよい。たとえば、フラッシュメモリおよび/またはその使用は、比較的小さい誤り訂正符号を通じて符号化するのに十分な大きさの誤り訂正情報を、誤り訂正サブ部分に完全に格納することができ、これにより対応するデータサブ部分の全てを誤り訂正情報が生成される記憶データの格納に利用することが可能になる。しかしながら、前記誤り訂正サブ部分は、比較的大きい誤り訂正符号を通じて符号化された誤り訂正情報を格納するのに十分な大きさではない。むしろ、データ記憶サブ部分は、誤り訂正サブ部分に適合しない誤り訂正情報の残部を格納するために借りられるものであり、それによりデータ記憶サブ部分に記憶データを格納するために利用可能なスペースが借りた量の分だけ減少する。このため、データ記憶サブ部分の比較的小さい部分が利用可能となるため、比較的小さい誤り訂正符号を使用するときの記憶データの量と比較して、比較的大きい誤り訂正符号を使用する場合は記憶データの量が少なくなる。したがって、比較的大きい誤り訂正符号を使用するときには、フラッシュメモリおよび/またはその使用によって、比較的少ない総利用可能スペースが提供される。別の例として、フラッシュメモリおよび/またはは、比較的大きい誤り訂正符号を通じて符号化するのに十分な大きさの誤り訂正情報を、誤り訂正サブ部分に完全に格納することができ、対応するデータサブ部分の全てを誤り訂正情報がそこから生成される記憶データの格納に利用可能なままにしておく。前記誤り訂正サブ部分は、比較的小さい誤り訂正符号を通じて符号化された誤り訂正情報を格納するには十分すぎる大きさである。比較的小さい誤り訂正符号を通じて符号化された誤り訂正情報を構成した後に誤り訂正サブ部分に残っている全てのスペースを含み、これを最大限とする誤り訂正サブ部分の量は、追加記憶データを格納するために借りられるものである。このため、データ記憶サブ部分の比較的大きい部分が利用可能なので、比較的大きい誤り訂正符号を使用するときの記憶データの量と比較して、比較的小さい誤り訂正符号を使用するときの方が記憶データの量が多い。したがって、比較的小さい誤り訂正符号を使用するときには、フラッシュメモリおよび/またはその使用によって、比較的大きい総利用可能スペースが提供される。様々な実施形態および/または使用シナリオにおいて、フラッシュメモリのいくつかの部分は、たとえば誤り訂正サブ部分をオーバーフローさせる誤り訂正符号にしたがって符号化するときに必要な上述のようなデータサブ部分からの借用にしたがって動作し、その一方でフラッシュメモリの別の部分は、たとえばデータサブ部分に利用可能なスペースを残す誤り訂正符号にしたがって符号化するときに可能となる上述のような誤り訂正サブ部分からの借用にしたがって動作する。様々な実施形態および/またはその使用シナリオにおいて、フラッシュメモリのいくつかの部分は、たとえば符号化に使用される誤り訂正符号に応じて必要となるデータまたは誤り訂正サブ部分からの借用によって動作させられる。これらの部分は同じサイズまたは様々なサイズであってもよく、これらの部分はデータまたは誤り訂正サブ部分が同じように割り当てられて、または異なる割当てによって、構成されるたとえば、全てのデータサブ部分が特定のサイズであり、あるいは全てのデータサブ部分が複数のサイズのいずれかである。様々な実施形態において、フラッシュメモリの一部分の使用モードは、生BERおよび/またはデータ情報を符号化するために誤り訂正符号を動的に選択するために使用される上記パラメータのうちの1若しくはそれ以上に基づいて変更される。たとえば、生BERが閾値を超えたとき、以前MLCページとして動作していたフラッシュメモリの部分ページなどはその後、loweronlyのページとして当該ページを動作させることなどによってSLCページとして動作する。別の例として、フラッシュメモリの部分の寿命の初期の間、当該部分はMLC部分として動作し、寿命におけるそれ以降の間は、当該部分はSLC部分として動作する。データを格納するために利用可能なスペースは、当該部分がSLC部分として動作しているときにはMLC部分と比較して減少するが、しかし利用可能なスペースは、寿命の後期に利用不可能であるとマークされた場合よりも大きくなる。様々な実施形態において、符号化のための誤り訂正符号の動的選択は、フラッシュ部分動作モードの動的選択と併せて使用される。たとえば、フラッシュメモリのページの初期動作期間の間、ページはMLCページとして動作し、第1の短符号長ECCを用いて符号化される。これに続く動作期間の間、ページはまだMLCページとして動作されているが、しかし第1の長符号長ECCにしたがって符号化される。さらに続く動作期間の間、ページはSLCページとして動作し、第2の短符号長ECCを用いて符号化される。さらに続く動作期間の間、ページはまだSLCページとして動作させられているが、しかし第2の長符号長ECCにしたがって符号化される。ページが第1の短符号長ECCを用いて、次に第1の長符号長ECCを用いて符号化され、その後第2の短符号長ECCを用いて、次に第2の長符号長ECCを用いてSLCページとして動作させられるためデータを格納するために利用可能なスペースは動作期間にわたって減少するが、利用可能なスペースは、ページが利用不可能であるとマークされた場合よりも大きい。あるいは、フラッシュメモリのページの生BERが第1の閾値よりも小さい間、ページはMLCページとして動作し、第1の短符号長ECCを用いて符号化される。前記生BERが第1の閾値を超えたしかし第2の閾値未満のままである場合またはそのようなときには、まだMLCページとして動作したままでページは第1の比較的長符号長ECCを用いて符号化される。前記生BERが第2の閾値を超えたしかし第3の閾値未満のままである場合またはそのようなときには、ページはさらに長い符号長のECCを用いて符号化される。前記生BERが第3の閾値を超えるしかし第4の閾値未満のままである場合またはそのようなときには、ページはSLCページとして動作させられ、第2の短符号長ECCを用いて符号化される。前記生BERが第4の閾値を超えた場合またはそのようなときには、ページはSLCページとして動作し続け、第2の比較的長符号長ECCを用いて符号化される。いくつかの実施形態において、ページは第1の動作モードMLCページなどで動作し、ページ用にデータを符号化するために使用される誤り訂正符号は、上述のパラメータのいずれかにしたがうなどして動的に選択される。動的に選択された誤り訂正符号にしたがって使用される誤り訂正符号情報が閾値を超えた場合には、ページは第2の動作モードSLCページなどに入る。様々な実施形態および/または使用シナリオにおいて、特定の状況下で、ページは誤り訂正符号選択とは無関係に、SLCページとして動作する。特定状況の例は、頻繁にアクセス可能なデータ、頻繁に書き込まれるデータ、および/またはより速いスループットの恩恵を受けるデータにページが使用されることを含む。様々な実施形態および/または使用シナリオにおいて、フラッシュメモリの部分たとえばページ、ブロック、またはその重複などは、寿命の後期の長い誤り訂正符号と比較して、フラッシュメモリの寿命の初期にはより短い誤り訂正符号を用いて動作する。このため、より多くの有効量のフラッシュメモリがユーザデータに利用可能となり、したがってフラッシュメモリの寿命はその有効なオーバープロビジョンによって延長される。たとえば、フラッシュメモリ装置は、8936744213バイトなど、2のべき乗よりもわずかに大きいページサイズを有する。ユーザデータのために保存されるページの比率を、フラッシュメモリ装置寿命の初期において2のべき乗よりも大きくし、寿命の後期において2のべき乗よりも小さくするように変更することで、その寿命にわたって同じ比率を使用する場合と比較して、寿命が延びる。SSDコントローラ実装図2Aは、フラッシュメモリベースのデータ記憶のための順応ECC技術を用いるSSDコントローラを含むSSDの実施形態の、選択された詳細を図示する。SSDコントローラ200は、1若しくはそれ以上の外部インターフェース210を経由して、ホスト図示せずと通信可能に接続されている。様々な実施形態によれば、外部インターフェース210は、SATAインターフェース、SASインターフェース、PCIeインターフェース、ファイバーチャネルインターフェース、イーサネット登録商標インターフェース10ギガビットイーサネット登録商標など、上記インターフェースの非標準バージョン、カスタムインターフェース、あるいは記憶および/または通信および/または計算装置を相互接続するために使用されるその他いずれかのタイプのインターフェース、のうちの1若しくはそれ以上である。SSDコントローラ200は、1若しくはそれ以上の装置インターフェース290を経由して、フラッシュ装置292などの1若しくはそれ以上の記憶装置を含む不揮発性メモリ299にさらに通信可能に接続されている。様々な実施形態によれば、装置インターフェース290は、非同期インターフェース、同期インターフェース、DDR同期インターフェース、ONFI2.2互換インターフェースなどのONFI互換インターフェース、トグルモード互換フラッシュインターフェース、上記インターフェースの非標準バージョン、カスタムインターフェース、あるいは記憶装置に接続するために使用されるその他いずれかの種類のインターフェース、のうちの1若しくはそれ以上である。フラッシュ装置292は、いくつかの実施形態において、1若しくはそれ以上の個々のフラッシュダイ294を有する。フラッシュ装置292のうちの特定の1つの種類に応じて、特定のフラッシュ装置292の複数のフラッシュダイ294は、並行して任意におよび/または選択的にアクセス可能である。フラッシュ装置292は、単にSSDコントローラ200と通信可能に接続されることが可能な1種類を表すに過ぎない。様々な実施形態において、SLCNAND型フラッシュメモリ、MLCNAND型フラッシュメモリ、NORフラッシュメモリ、読み出し専用メモリ、静的ランダムアクセスメモリ、動的ランダムアクセスメモリ、強磁性メモリ、相変化メモリ、レーストラックメモリ、あるいはその他いずれかのタイプのメモリ装置または記憶媒体など、いずれの種類の記憶装置も使用可能である。様々な実施形態によれば、装置インターフェース290は、バスごとに1若しくはそれ以上のフラッシュ装置292を備える1若しくはそれ以上のバス、バスごとに1若しくはそれ以上のフラッシュ装置292を備えるバスの1若しくはそれ以上の群であって、群に含まれるバスが全般的に並行してアクセス可能であるもの、または装置インターフェース290上へのフラッシュ装置292のその他いずれかの構成として、構成される。引き続き図2Aにおいて、SSDコントローラ200は、ホストインターフェース211、データ処理221、バッファ231、マップ241、リサイクラ251、ECC261、装置インターフェース論理291、およびCPU271などの、1若しくはそれ以上のモジュールを有する。図2Aに示される特定のモジュールおよび相互接続は、単に一実施形態を示すに過ぎず、図示されない追加モジュールも含め、モジュールのいくつかまたは全ての多くの配置および相互接続が考えられる。第1の例において、デュアルポーティングを提供するために、2若しくはそれ以上のホストインターフェース211がある。第2の例では、いくつかの実施形態において、データ処理221および/またはECC261がバッファ231と組み合わせられる。第3の例では、いくつかの実施形態において、ホストインターフェース211はバッファ231に直接接続されており、データ処理221は任意におよび/または選択的に、バッファ231に格納されたデータ上で動作する。第4の例では、いくつかの実施形態において、装置インターフェース論理291はバッファ231に直接接続されており、ECC261は任意におよび/または選択的に、バッファ231に格納されたデータ上で動作する。ホストインターフェース211は、外部インターフェース210を経由してコマンドおよび/またはデータを送受信し、いくつかの実施形態において、タグ追跡213を通じて個々のコマンドの進捗状況を追跡する。たとえば、コマンドは、アドレスLBAなどおよび読み出されるデータ量たとえばセクタなどのLBA量などを指定する読み出しコマンドを含む。これに応えてSSDは、読み出しステータスおよび/または読み出しデータを提供する。別の例として、コマンドは、アドレスLBAなどおよび書き込まれるデータ量たとえばセクタなどのLBA量などを指定する書き込みコマンドを含む。これに応えてSSDは、書き込みステータスを提供し、および/または書き込みデータを要求し、場合により引き続き書き込みステータスを提供する。さらに別の例として、コマンドは、もはや割り当てられる必要のないアドレスLBAなどを指定する割当て解除コマンドを含む。これに応えてSSDは相応にマップを変更し、場合により割当て解除ステータスを提供する。さらに別の例として、コマンドは、超コンデンサテストコマンドまたはデータハードニング成功クエリを含む。これに応えて、SSDは適切なステータスを提供する。いくつかの実施形態において、ホストインターフェース211はSATAプロトコルと互換性があり、NCQコマンドを用いて最高32までの保留コマンドを有することができ、その各々は0から31の数字で表される固有のタグを有する。いくつかの実施形態において、タグ追跡213は、外部インターフェース210経由で受信されたコマンドの外部タグを、SSDコントローラ200による処理の間、コマンドを追跡するために使用される内部タグに関連付けることができる。様々な実施形態によれば、データ処理221は任意におよび/または選択的に、バッファ231と外部インターフェース210との間で送信されるデータの一部または全てを処理し、および/またはデータ処理221は任意におよび/または選択的にバッファ231に格納されたデータを処理する。いくつかの実施形態において、データ処理221は、フォーマット、リフォーマット、トランスコード、およびその他いずれかのデータ処理および/または操作タスクのうちの1若しくはそれ以上を実行するために、1若しくはそれ以上のエンジン223を使用する。バッファ231は、外部インターフェース210と装置インターフェース論理291との間で送受信されるデータを格納する。いくつかの実施形態において、バッファ231は付加的に、フラッシュ装置292を管理するためにSSDコントローラ200によって使用される、一部または全てのマップテーブルなどのシステムデータを格納する。様々な実施形態において、バッファ231は、データの一次記憶に使用されるメモリ237、バッファ231に出入りするデータの移動を制御するために使用されるDMA233、およびその他のデータ移動および/または操作機能のうち、1若しくはそれ以上を有する。様々な実施形態によれば、ECC261は任意におよび/または選択的に、バッファ231と装置インターフェース論理291との間で送信されるデータを処理し、および/またはECC261は任意におよび/または選択的に、バッファ231に格納されたデータを処理する。装置インターフェース論理291は、装置インターフェース290を通じてフラッシュ装置292を制御する。装置インターフェース論理291は、フラッシュ装置292のプロトコルにしたがって、フラッシュ装置292とデータを送受信できる。装置インターフェース論理291は、装置インターフェース290を通じてフラッシュ装置292の制御を選択的に順序づけするためのスケジューリング293を含む。たとえば、いくつかの実施形態において、スケジューリング293は、フラッシュ装置292に対する処理をキューイングことができ、個々のフラッシュ装置292またはフラッシュダイ294が利用可能であれば、フラッシュ装置292またはフラッシュダイ294の各々に対する処理を選択的に送信することができる。マップ241は、外部データアドレスを不揮発性メモリ299内の場所にマッピングするためのテーブル243を用いて、外部インターフェース210上で使用されるデータアドレス指定と装置インターフェース290上で使用されるデータアドレス指定との間で変換を行う。たとえば、いくつかの実施形態において、マップ241は、外部インターフェース210上で使用されるLBAを、テーブル243によって提供されるマッピングを通じて、1若しくはそれ以上のフラッシュダイ294を対象とするブロックおよび/またはページアドレスに変換する。ドライブ製造または割当て解除以来書き込まれていないLBAについては、LBAが読み出された場合に戻るべきデフォルト値を指定する。たとえば、割当て解除コマンドを処理するとき、マップは、割当て解除されたLBAに対応する入力がデフォルト値の1つを指定するように変更される。様々な実施形態には、各々が対応するポインタを有する、複数のデフォルト値がある。複数のデフォルト値は、別の割当て解除されたLBA第2の範囲のものなどを別のデフォルト値として読み出しながら、いくつかの割当て解除されたLBA第1の範囲のものなどをあるデフォルト値として読み出すことを可能にする。デフォルト値は、様々な実施形態において、フラッシュメモリ、ハードウェア、ファームウェア、コマンドまたはプリミティブ引数またはパラメータ、プログラマブルレジスタ、またはこれらの様々な組み合わせによって定義される。いくつかの実施形態において、リサイクラ251はガーベジコレクションを行う。たとえばいくつかの実施形態において、フラッシュ装置292は、ブロックが書き換え可能となる前に消去されるべきブロックを含む。リサイクラ251は、マップ241によって保持されているマップを走査することによって、たとえば割当て解除ではなく割り当てられてフラッシュ装置292のどの部分が活発に使用されているかを判断することができ、フラッシュ装置292の未使用のたとえば割当て解除された部分を消去することによって、書き込み可能とすることができる。さらなる実施形態において、リサイクラ251は、フラッシュ装置292のより大きな連続部分を書き込みのために利用可能とするため、フラッシュ装置292内に格納されたデータを移動することができる。CPU271は、SSDコントローラ200の様々な部分を制御する。CPU271はCPUコア281を含む。CPUコア281は、様々な実施形態によれば、1若しくはそれ以上のシングルコアまたはマルチコアプロセッサである。CPUコア281内の個々のプロセッサコアは、いくつかの実施形態において、マルチスレッドである。CPUコア281は、命令および/またはデータキャッシュおよび/またはメモリを含む。たとえば前記命令メモリは、CPUコア281がソフトウェア場合によりファームウェアと呼ばれるを実行してSSDコントローラ200を制御できるようにする命令を含む。いくつかの実施形態において、CPUコア281によって実行されるファームウェアの一部または全ては、フラッシュ装置292に格納される。様々な実施形態において、CPU271はさらに、外部インターフェース210を経由して受信されたコマンドを、当該コマンドの進行中に追跡および制御するためのコマンド管理273と、バッファ231の割当ておよび使用を制御するためのバッファ管理275と、マップ241を制御するための変換管理277と、データアドレス指定の一貫性を制御し、外部データアクセスとリサイクルデータアクセスとの間などのデータ競合を回避するための、コヒーレンシ管理279と、装置インターフェース論理291を管理するための装置管理282と、場合によりその他の管理ユニットとを含む。様々な実施形態によれば、CPU271によって実行される管理機能のいずれかまたは全てが、ハードウェアによって、ソフトウェアCPUコア281上でまたは外部インターフェース210経由で接続されたホスト上で実行されるソフトウェアなどによって、またはこれらのいずれかの組み合わせによって、制御および/または管理され、あるいは管理機能のいずれもこれらによって制御および/または管理されない。いくつかの実施形態において、CPU271は、他の管理タスク、たとえば性能統計を収集および/または報告することと、SMARTを実行する工程と、電源シーケンスを制御し、消費電力を管理および/または監視および/または調整することと、電源障害に対応することと、クロック速度を制御および/または監視および/または調整することと、その他の管理タスクとのうちの1若しくはそれ以上を、実行することができる。様々な実施形態は、SSDコントローラ200と類似であって、ホストインターフェース211および/または外部インターフェース210の適合などによって様々なコンピューティングホストとの動作互換性がある、コンピューティングホストフラッシュメモリコントローラを含む。様々なコンピューティングホストは、コンピュータ、ワークステーションコンピュータ、サーバコンピュータ、ストレージサーバ、PC、ラップトップコンピュータ、ノートブックコンピュータ、ネットブックコンピュータ、PDA、メディアプレーヤ、メディアレコーダ、デジタルカメラ、携帯電話ハンドセット、コードレス電話ハンドセット、および電子ゲーム機のうちの1つ若しくはいずれかの組み合わせを含む。様々な実施形態において、SSDコントローラまたはコンピューティングホストフラッシュメモリコントローラの全てまたはいずれかの部分は、単一のIC、マルチダイICの単一のダイ、マルチダイICの複数のダイ、または複数のICにおいて実現される。たとえば、バッファ231はSSDコントローラ200の別の要素と同じダイで実現される。別の例では、バッファ231はSSDコントローラ200の別の要素とは異なるダイで実現される。様々な実施形態において、SSDコントローラ200の要素は、全体としてまたは部分的に、図1の様々なハードウェアブロックまたは前記ハードウェアブロックによって実行される機能を実現する。たとえば、ECC261は、図1の誤り統計収集または追跡、ユニバーサルエンコーダ、ユニバーサルデコーダ、および/または符号ライブラリハードウェアブロックによって実行される1若しくはそれ以上の機能を実現する。別の例として、装置インターフェース論理291は図1の制御/インターフェースハードウェアブロックによって実行される1若しくはそれ以上の機能を実現し、不揮発性メモリ299は図1のフラッシュユニットを実現する。図2Bは、図2AのSSDを含むシステムの別の実施形態の選択された詳細を示す。SSD201は、装置インターフェース290を経由して不揮発性メモリ299に接続されたSSDコントローラ200を含む。SSDは、外部インターフェース210を経由してホスト202に接続される。いくつかの実施形態において、SSD201またはその変更例は、ホスト202として動作するイニシエータに接続されているSASドライブまたはSATAドライブに対応する。図2Cは、図2AのSSDを含むシステムの別の実施形態の選択された詳細を示す。図2Bのように、SSD201は、装置インターフェース290を経由して不揮発性メモリ299に接続されたSSDコントローラ200を含む。SSDは外部インターフェース210を通じてホスト202に接続され、前記外部インターフェース210は中間コントローラ203に、そして中間インターフェース204を通じてホスト202に接続される。様々な実施形態において、SSDコントローラ200は、RAIDコントローラなど、中間レベルの別のコントローラの1若しくはそれ以上を経由して、前記ホストに接続される。いくつかの実施形態において、SSD201またはその変更例はSASドライブまたはSATAドライブに対応し、中間コントローラ203はその後イニシエータに接続されるエキスパンダに対応するか、あるいは中間コントローラ203はエキスパンダを経由してイニシエータに間接的に接続されるブリッジに対応する。様々な実施形態において、SSDコントローラおよび/またはコンピューティングホストフラッシュメモリコントローラは、1若しくはそれ以上の不揮発性メモリと組み合わせて、USB記憶構成要素、CF記憶構成要素、MMC記憶構成要素、SD記憶構成要素、メモリスティック記憶構成要素、およびxDピクチャカード記憶構成要素などの不揮発性記憶構成要素として実現される。様々な実施形態において、SSDコントローラまたはコンピューティングホストフラッシュメモリコントローラ、またはその機能は、コントローラが接続されたホストにおいて実現されるたとえば図2Cのホスト202など。様々な実施形態において、SSDコントローラまたはコンピューティングホストフラッシュメモリコントローラの全てまたはいずれかの部分、あるいはその機能は、ハードウェアたとえば論理回路、ソフトウェアたとえばドライバプログラム、またはこれらのいずれかの組み合わせを通じて実現される。たとえば、ECCユニット図2AのECC261と類似のものなどの機能性、またはこれに関連付けられた機能性は、SSDコントローラ内で、部分的にソフトウェアを通じて、また部分的にハードウェアを通じて、実現される。別の例として、リサイクラユニット図2Aのリサイクラ251と類似のものなどの機能性、またはこれに関連付けられた機能性は、コンピューティングホストフラッシュメモリコントローラ内で、部分的にソフトウェアを通じて、また部分的にハードウェアを通じて、実現される。実施技術例いくつかの実施形態において、たとえば図1のハードウェアブロック、コンピューティングホストフラッシュメモリコントローラおよび/またはSSDコントローラ図2AのSSDコントローラ200など、など、システムが実現するするフラッシュメモリベースのデータ記憶のための順応ECC技術によって実行される動作の全てまたは一部、およびプロセッサ、マイクロプロセッサ、システムオンチップ、特定用途向け集積回路、ハードウェアアクセラレータ、または上記動作の全てまたは一部を提供するその他の回路の様々な組み合わせは、コンピュータシステムによる処理と互換性のある仕様によって指定される。前記仕様は、ハードウェア記述言語、回路記述、ネットリスト記述、マスク記述、またはレイアウト記述など、様々な記述に準拠している。記述の例は、Verilog、VHDL、SPICE、SPICE、PSpiceなどのSPICEの変更例、IBIS、LEF、DEF、GDS-II、OASIS、またはその他の記述を含む。様々な実施形態において、前記処理は、1若しくはそれ以上の集積回路への搭載に適した論理および/または回路を生成、検証、または指定するための解釈、コンパイル、シミュレーション、および合成の、いずれかの組み合わせを含む。各集積回路は、様々な実施形態によれば、様々な技術にしたがって設計可能および/または製造可能である。前記技術は、プログラマブル技術フィールドまたはマスクプログラマブルゲートアレイ集積回路など、セミカスタム技術完全または部分的セルベース集積回路など、およびフルカスタム技術実質的に特化された集積回路など、これらのいずれかの組み合わせ、あるいは集積回路の設計および/または製造と互換性のあるその他いずれかの技術を含む。いくつかの実施形態において、命令セットを格納しているコンピュータ可読媒体によって記述されるような動作の全てまたは一部の様々な組み合わせは、1若しくはそれ以上のプログラム命令の実行および/または解釈によって、1若しくはそれ以上のソースおよび/またはスクリプト言語の解釈および/またはコンパイルによって、あるいは言語ステートメントのプログラミングおよび/または記述において表現される情報をコンパイル、翻訳、および/または解釈することによって生成されるバイナリ命令の実行によって、実行される。ステートメントは、いずれの標準的なプログラミングまたは記述言語とも互換性があるC、C、Fortran、Pascal、Ada、Java登録商標、VBscript、およびShellなど。前記プログラム命令、前記言語ステートメント、または前記バイナリ命令のうちの1若しくはそれ以上は、任意に1若しくはそれ以上のコンピュータ可読媒体要素に格納される。様々な実施形態において、前記プログラム命令のいくつか、全て、または様々な部分は、1若しくはそれ以上の機能、ルーチン、サブルーチン、インラインルーチン、プロシージャ、マクロ、またはその部分として、実現される。結論本文および図面を作成する利便性のみのため、本明細書において特定の選択がなされてきたが、別途指示のない限り、前記選択は本質的に、記載される実施形態の構造または動作に関する付加的な情報を伝達するものとして解釈されるべきではない。前記選択の例は、図の参照番号に使用される指定の具体的な構成または割当て、および実施形態の特徴および要素を識別および参照するために使用される要素識別子付記また参照番号などの具体的な構成または割当てを含む。含むまたは含んでいるという語は、非限定的な範囲の論理セットを記述する抽象概念として科解釈されるように特に意図されており、明確に内にwithinという語が続くのでない限り、物理的な包含を伝えるように意図されるものではない。上記の実施形態は、記述および理解の明確さを目的としてある程度詳細に記載されてきたが、本発明は記載された詳細に限定されるものではない。本発明には多くの実施形態がある。開示された実施形態は例示的であって、限定的ではない。構造、構成、および使用については前記説明と一致する多くの変更例が可能であり、本発明の特許請求の範囲に含まれることは、理解されるだろう。たとえば、相互接続および機能単位のビット幅、クロック速度、および使用される技術の種類は、各構成要素ブロックにおける様々な実施形態に応じて異なる。相互接続および論理に付与される名称は単なる例示に過ぎず、記載される概念を限定するものとして解釈されるべきではない。フローチャートおよびフロー図の工程、アクション、および機能要素の順序および構成は、様々な実施形態に応じて異なる。また、別途具体的に明記されない限り、指定された値の範囲、使用される最大値および最小値、またはその他特定の仕様フラッシュメモリ技術の種類、ならびにレジスタおよびバッファの入力または段の数などは、単に記載される実施形態のものに過ぎず、実施技術における改良および変化をたどると期待され、限定として解釈されるべきではない。様々な構成要素、サブシステム、動作、機能、ルーチン、サブルーチン、インラインルーチン、プロシージャ、マクロ、またはその部分を実行するために記載された技術の代わりに、当該技術分野において周知の、機能的に同等の技術が採用されてもよい。また、実施形態の多くの機能態様は、実施形態に応じた設計上の制約と、処理の高速化以前はハードウェアに含まれていた機能のソフトウェアへの移行を促進するおよび集積密度の向上以前はソフトウェアに含まれていた機能のハードウェアへの移行を促進するの技術トレンドとに応じて、ハードウェアすなわち一般的には専用回路またはソフトウェアすなわち、プログラムされたコントローラまたはプロセッサの何らかの様式によるのいずれかにおいて、選択的に実現可能であることは理解されるべきである。様々な実施形態における具体的な変更例は、これに限定されるものではないが、パーティショニングの違い、異なるフォームファクタおよび構成、異なるオペレーティングシステムおよび別のシステムソフトウェアの使用、異なるインターフェース規格、ネットワークプロトコル、または通林リンクの使用、ならびに特定用途の固有のエンジニアリングおよびビジネス上の制約にしたがって本明細書に記載される概念を実現する際に予想されるその他の変更例を含む。以上の実施形態は、記載される実施形態の多くの態様の最小限の実現に必要とされるものをはるかに超えた、詳細および環境的文脈とともに記載されてきた。いくつかの実施形態は、残りの要素間での基本的な連係を変更することなく、開示された構成要素または特徴を省略していることを、当業者は認識するだろう。したがって、開示された詳細の多くは、記載された実施形態の様々な態様を実現するために必要とされるものではないことが理解される。残りの要素が先行技術のものと識別可能である限り、省略された構成要素および特徴は、本明細書に記載される概念に対して限定するものではない。設計におけるこのような変更例の全ては、記載された実施形態によって伝えられる教示に対する実質的な変更とはならない。また、本明細書に記載された実施形態は、他のコンピューティングおよびネットワーキング用途への幅広い適用性を有しており、記載された実施形態の特定の用途または業界に限定されるものではないことも、理解される。したがって本発明は、本発明の特許請求の範囲に含まれる全ての可能な変更形態および変形形態を含むと解釈されるべきである。