"フラッシュメモリなどのメモリのセルまたはページまたはサブページまたはブロックをウェアレベリングする方法であって、前記方法は、-前記メモリのセルまたはページまたはサブページまたはブロックへの書き込み対象のデータチャンクを受信するステップS10と、-前記受信したデータチャンク中の、書き込み対象のバイナリデータの所与の型0または1の回数をカウントするステップS40と、-前記受信したデータチャンクの、前記メモリのセルまたはページまたはサブページまたはブロックの間への前記書き込みを、書き込み対象の前記データチャンク中でカウントされた前記バイナリデータの所与の型0または1の前記数に照らして、前記メモリがウェアレベルされるように分配するステップS50と、を含む方法。前記受信したデータチャンクの前記書き込みを分配するステップは、前記メモリの前記セルまたはページまたはサブページまたはブロックの各々に関連するウェアレベリング情報に照らしてさらに実行される、請求項1に記載の方法。前記ウェアレベリング情報は、前記メモリのセルまたはページまたはサブページまたはブロックに今までに書き込まれた0の前記数である、請求項2に記載の方法。受信したデータチャンクのプールを維持するステップS20をさらに含む、請求項2~3のいずれか一つに記載の方法。前記プール中の前記受信したデータチャンク群の間で最多の0の前記数を有する前記データチャンクが、前記メモリの前記最小摩耗セルまたはページまたはサブページまたはブロックを表す前記ウェアレベリング情報を有する、前記メモリの前記セルまたはページまたはサブページまたはブロックに書き込まれるS60、請求項4に記載の方法。前記プール中の前記受信したデータチャンク群の間で最少の0の前記数を有する前記データチャンクが、前記メモリの前記最大摩耗セルまたはページまたはサブページまたはブロックを表す前記ウェアレベリング情報を有する、前記メモリの前記セルまたはページまたはサブページまたはブロックに書き込まれるS70、請求項4または5に記載の方法。-前記メモリの前記最小摩耗セルまたはページまたはサブページまたはブロックは、最少の0の前記数を有する前記ウェアレベリング情報と関連付けられ、-前記メモリの前記最大摩耗セルまたはページまたはサブページまたはブロックは、最多の0の前記数を有する前記ウェアレベリング情報と関連付けられる、請求項5または6に記載の方法。前記メモリの前記セルまたはページまたはサブページまたはブロックの各々は、それらそれぞれのウェアレベリング情報とともにカウンタ中に記録される、請求項2~7の一つに記載の方法。前記カウンタに記録された前記セルまたはページまたはサブページまたはブロックはソートされるS30、請求項8に記載の方法。各受信したデータチャンクの前記書き込みの各分配の後で、前記ウェアレベリング情報が更新されるS80、請求項2~10のいずれか一つに記載の方法。前記受信したデータチャンクの前記書き込みを分配するステップは、前記メモリのセルまたはページまたはサブページまたはブロックのセットに限定され、前記メモリのセルまたはページまたはサブページまたはブロックの前記セットは、相異なるウェアレベリング情報を有する、前記メモリのセルまたはページまたはサブページまたはブロックを含む、請求項2~11のいずれか一つに記載の方法。フラッシュメモリなどのメモリのセルまたはページまたはサブページまたはブロックをウェアレベリングするためのシステムであって、-前記メモリのセルまたはページまたはサブページまたはブロックに書き込まれるデータチャンクを受信するための手段と、-メモリコントローラと、を含み、前記メモリコントローラは、-前記受信したデータチャンク中の、書き込み対象のバイナリデータの所与の型0または1の回数をカウントし、-前記受信したデータチャンクの、前記メモリのセルまたはページまたはサブページまたはブロックの間への前記書き込みを、書き込み対象の前記データチャンク中でカウントされた前記バイナリデータの所与の型0または1の前記数に照らして、前記メモリがウェアレベルされるように分配する、前記システム。前記メモリコントローラは、-前記メモリの各セルまたはページまたはサブページまたはブロックに対する前記ウェアレベリング情報をカウンタ中に記録し、-各受信したデータチャンクの前記書き込みの各分配の後で前記ウェアレベリング情報を更新する、請求項12に記載のシステム。前記メモリコントローラは、前記メモリのセルまたはページまたはサブページまたはブロックのセットを維持する書き込みアロケータをさらに含み、前記メモリのセルまたはページまたはサブページまたはブロックの前記セットは、相異なるウェアレベリング情報を有する、前記メモリのセルまたはページまたはサブページまたはブロックを含む、請求項12または13に記載のシステム。コンピュータに、請求項1~11のいずれか一つに記載の前記方法の前記ステップを実行させるためのコード手段を含む、フラッシュメモリなどのメモリのセルまたはページまたはサブページまたはブロックをウェアレベリングするための、コンピュータ可読媒体に格納されたコンピュータプログラム。既存のウェアレベリングアルゴリズムはすべて、動的であれまたは静的であれ、ブロックレベルで動作する。すなわち、これらは、SSD中で利用可能な全てのフラッシュブロック上の消去/書き込みオペレーションをバランスさせることを目指している。また一方、任意の特定のセルに生じる実際の摩耗は、それまでにそれに書き込まれた0の数に比例する。例えば、フラッシュセルが、10,000消去/書き込みサイクルの耐久性仕様endurancespecificationを有する場合、各セルは、従って0を使って10,000回の消去および書き込みが可能ということになる。そうすると、フラッシュブロックに書き込まれるデータチャンクはランダムと考えられ、しかして必ずしも同じ0の数を有しないので、フラッシュブロックは、これらに書き込まれる0の数の違いに起因して、大幅に異なる摩耗レベルを経験することがあり得、これにより、ブロックの一部が他の部分よりもかなり早く摩耗することにつながり得る。従って、ブロックレベルのウェアレベリングの欠点は、主に、相異なるデータブロックは、フラッシュブロックに相異なる摩耗を与え得、しかして、任意の2つのブロックの実際の摩耗は、双方が全く同じ消去-書き込みオペレーションの回数を有していても、大きく異なることがあり得る、という事実に起因して生じる。フラッシュセルは、ブロック全体が故障に至る可能性となり得る最小のメモリ単位なので、個別のメモリセルの摩耗を追跡し制御するセルベースのウェアレベリングアルゴリズムが望ましい。第一態様によれば、本発明は、フラッシュメモリなどのメモリのセルまたはページまたはサブページまたはブロックをウェアレベリングする方法として具現される。本方法は、-メモリのセルまたはページまたはサブページまたはブロックへの書き込み対象のデータチャンクを受信するステップと、-受信したデータチャンク中の、書き込み対象のバイナリデータの所与の型0または1の回数をカウントするステップと、-受信したデータチャンクの、メモリのセルまたはページまたはサブページまたはブロックの間への書き込みを、書き込み対象のデータチャンク中でカウントされたバイナリデータの所与の型0または1の数に関連させて、メモリがウェアレベルされるように分配するステップと、を含む。諸実施形態において、本方法は、以下の特徴、-受信したデータチャンクの書き込みを分配するステップは、メモリのセルまたはページまたはサブページまたはブロックの各々に関連するウェアレベリング情報に照らしてさらに実行される;-上記ウェアレベリング情報は、メモリのセルまたはページまたはサブページまたはブロックに今までに書き込まれた0の数である;-受信したデータチャンクのプールを維持する;-プール中の受信したデータチャンク群の間で最多の0の数を有するデータチャンクが、メモリの最小摩耗セルまたはページまたはサブページまたはブロックを表すウェアレベリング情報を有する、メモリのセルまたはページまたはサブページまたはブロックに書き込まれる;-プール中の受信したデータチャンク群の間で最少の0の数を有するデータチャンクが、メモリの最大摩耗セルまたはページまたはサブページまたはブロックを表すウェアレベリング情報を有する、メモリのセルまたはページまたはサブページまたはブロックに書き込まれる;-メモリの最小摩耗セルまたはページまたはサブページまたはブロックは、最少の0の数を有するウェアレベリング情報と関連付けられ、メモリの最大摩耗セルまたはページまたはサブページまたはブロックは、最多の0の数を有するウェアレベリング情報と関連付けられる;-メモリのセルまたはページまたはサブページまたはブロックの各々は、それらそれぞれのウェアレベリング情報とともにカウンタ中に記録される;-カウンタに記録されたセルまたはページまたはサブページまたはブロックはソートされる;-受信した各データチャンクの書き込みの各分配の後で、ウェアレベリング情報が更新される;-受信したデータチャンクの書き込みの分配は、メモリのセルまたはページまたはサブページまたはブロックのセットに限定され、メモリのセルまたはページまたはサブページまたはブロックの該セットは、相異なるウェアレベリング情報を有する、メモリのセルまたはページまたはサブページまたはブロックを含む;の一つ以上を含む。別の態様によれば、本発明は、フラッシュメモリなどのメモリのセルまたはページまたはサブページまたはブロックをウェアレベリングするためのシステムとして具現され、本システムは、-メモリのセルまたはページまたはサブページまたはブロックに書き込まれるデータチャンクを受信するための手段と、-メモリコントローラと、を含み、メモリコントローラは、-受信したデータチャンク中の、書き込み対象のバイナリデータの所与の型0または1の回数をカウントし、-受信したデータチャンクの、メモリのセルまたはページまたはサブページまたはブロックの間への書き込みを、書き込み対象のデータチャンク中でカウントされたバイナリデータの所与の型0または1の数に照らして、メモリがウェアレベルされるように分配する。諸実施形態において、本システムは、以下の特徴、-メモリコントローラは、メモリの各セルまたはページまたはサブページまたはブロックに対するウェアレベリング情報をカウンタ中に記録し、各受信したデータチャンクの書き込みの各分配の後でウェアレベリング情報を更新する;-メモリコントローラは、メモリのセルまたはページまたはサブページまたはブロックのセットを維持する書き込みアロケータをさらに含み、メモリのセルまたはページまたはサブページまたはブロックの該セットは、相異なるウェアレベリング情報を有する、メモリのセルまたはページまたはサブページまたはブロックを含む;の一つ以上を含む。別の態様によれば、本発明は、コンピュータに、本発明による方法のステップを実行させるためのコード手段を含む、フラッシュメモリなどのメモリのセルまたはページまたはサブページまたはブロックをウェアレベリングするための、コンピュータ可読媒体に格納されたコンピュータプログラムとして具現される。限定されない事例として、添付の図面を参照しながら、本発明を具現するシステムおよびプロセスを以下に説明する。本発明は、フラッシュメモリなどのメモリのセルまたはページまたはサブページまたはブロック以下、セル/ページ/サブページ/ブロックと記載するをウェアレベリングする方法を対象とする。セル/ページ/サブページ/ブロックをウェアレベリングするとは、メモリのセル/ページ/サブページ/ブロックの摩耗を均等化することをいう。このための、メモリのセル/ページ/サブページ/ブロックに書き込むデータチャンクが受信される。次いで、受信したデータチャンク中の、書き込み対象のバイナリデータの所与の型0または1の回数がカウントされる。次に、受信したデータチャンクの、メモリのセル/ページ/サブページ/ブロックの間への書き込みが、書き込み対象のデータチャンク中でカウントされたバイナリデータの所与の型0または1の数に照らして、メモリがウェアレベルされるように分配される。フラッシュメモリなどのメモリでは、その中に格納されたデータは、2基数体系base2numbersystemとも言われる2進法で表現される。このことは、データチャンクが、2つの記号0および1を使った数値で表されるバイナリデータから成ることを意味し、これはバイナリデータが0の群もしくは1の群またはその両方で表現されるということである。その結果として、データチャンク内のあるバイナリデータの所与の型例えば0の数がカウントされるとき、データチャンク内の他方のバイナリデータの所与の型例えば1の数も暗黙裡にカウントされていることになる。言い換えれば、0をカウントすることは1をカウントすることを意味し、その逆もいえる。上記を鑑み、本発明は、例えば、フラッシュメモリといった固体デバイスのメモリなどのメモリをウェアレベリングするための新しいソリューションを提案する。これは、統計的なセルベースのウェアレベリングを利用する。この統計的セルベースのウェアレベリングstatisticalcellbasedwearlevelingは、従来技術で既知のブロック群に対する大まかな摩耗均等化の代わりに、メモリの全セルに対する均等な摩耗を維持することを目指す。本発明は、セルへの0の書き込みだけがセルを摩耗させるのであり、しかして、全セルに対し統計的に一様な0書き込みの合計数を保つことが、セルレベルの均等な摩耗を実現する、という原理を用いる。本発明のある実施形態は、セル/ページ/サブページ/ブロックレベルでの0書き込みの回数の追跡を保持し、メモリに書き込まれるデータチャンクchunksofdataの0の数を計算し、高い0書き込みの履歴を有するセル/ブロック/ページ/サブページには、より少ない0を有するデータチャンクを書き込み、その逆も行う。ここで図1を参照すると、NANDメモリなどのフラッシュメモリ1の概略図が示されている。このフラッシュメモリは、フローティングゲートトランジスタ2、4、6、8、10、12から成るセルのアレイ中に情報を格納する。フローティングゲートトランジスタは、ドレインD、ソースSおよびゲートを含む在来のMOSFETと類似の電解効果型トランジスタであるが、電気的に分離されたフローティングゲートFGをさらに含み、ここで電子を捕捉することができる。図1のセル10はドレインD、ソースS、制御ゲートCG、およびフローティングゲートFGを含む。フラッシュメモリ1のフローティングゲートトランジスタ2、4、6は直列に接続されており、しかして第一ビットライン14を形成している。フローティングゲートトランジスタ8、10、12は直列に接続されており、第二ビットライン16を形成している。例えば、セル10のドレインDは、セル8のソースと直列に接続されており、セル10のソースSはセル12のドレインと直列に接続されている。さらに、それぞれのフローティングゲートトランジスタから成るこれらのセル2と8、4と10および6と12は、これらそれぞれの制御ゲートCGを介して、それぞれ、ワードライン22、20、および18に接続されている。図1が、フラッシュメモリ1を形成するセルのアレイの小さな部分だけを示していることは理解されよう。各個別のセル2、4、6、8、10、12は、制御ゲートCGおよびドレインDに電圧を印加し、ソースSを接地することによってプログラムすることができる。電子がフローティングゲートに注入され、フローティングゲート中に捕捉され従って該ゲートは荷電される。結果として、セルはバイナリデータ0にセットされる。各個別のセル2、4、6、8、10、12は、いくつかの仕方で消去できる。一つのアプローチとして、制御ゲートCGを接地し、ソースSに電圧を印加して、捕捉された電子をフローティングゲートFGからソースSへ逃がすことがある。この結果、フローティングゲートは放電され、セルはバイナリデータ1にセットされる。シングルレベルセルSLCメモリでは、セルは1ビットバイナリデータ0または1だけを格納する。マルチレベルセルMLCデバイスでは、セルは複数のビット例えば、2つのバイナリデータを格納することができる。従って、セルのフローティングゲートに捕捉された電荷が、メモリのセルから読み取られる論理レベルを決める。もう少し簡単にいえば、メモリは次のように機能する、すなわち、フラッシュメモリ上にバイナリデータ0をプログラミングする一般には0を書き込む、ということは、フローティングゲートを荷電し、論理値をゼロにすることに相当する。さらに、消去されたセルだけに、プログラムするすなわち、フローティングゲートを荷電させることが可能である。加えて、セルを消去する場合、フラッシュメモリのフローティングゲート上にバイナリデータ1がプログラムされ、これはセルを放電することに相当し、これは倫理1として読み取られる。フラッシュメモリなどのメモリは、ページ、サブページ、およびブロックに配列される。各ブロックは、通常、サイズが512または2,048または4,096バイトのいくつかののページから成る。各ページは、エラー訂正コードECCチェックサムを格納するための数バイトに関連付けられる。通常、ページは複数のセルを含み、ブロックは複数のページを含む。さらに、ページはサブページに分割することができ、例えば、サイズが4,096バイトのページは、各々が512バイトの8つのサブページに分割することができる。メモリのセルは、バイナリデータを格納するための最小の単位である。ここで図2を参照すると、固体デバイスまたは固体メモリの概略図が示されている。固体デバイス20は、例えば、図1に示されたNANDメモリのようなフラッシュメモリなどの主メモリ206を含む。ちなみに、主メモリには一つ以上のチップを含めることができる。チップは、複数のセルを含む集積回路である。固体デバイスには、読み取り、書き込み、および消去オペレーションなど、SSD上で遂行されるオペレーションを実施するための機能を実装するメモリコントローラ202を含めることができる。メモリコントローラには、SSDの管理のための他の機能を実装することもできる。さらに、このSSDは、例えばコンピュータなどのデバイスとデータを交換するための、入力/出力I/O:input/outputインタフェース204aおよび204bを含む。I/Oインタフェースは、主メモリ206に書き込まれるデータチャンクの受信、および主メモリ206に既に格納されているデータチャンクの送信を可能にする。このI/Oインタフェースは、受信したデータチャンクを一時的に格納できる二次メモリ210に接続することができる。この二次メモリ210は、主メモリ206に書き込むよう意図された受信したデータチャンクのプールを提供することを目的としている。二次メモリ210は、データバッファとして機能し、DRAM、フラッシュ、または別のメモリテクノロジーとすることができる。かくして、受信されたデータチャンクは、第一ステップにおいて、二次メモリ210に格納され、これらは、第二ステップで主メモリ206に移動される。受信したデータチャンクのプールに遂行されるオペレーションは、メモリコントローラ202によって管理される。また、SSD20には、カウンタ208を含め、これに主メモリ206のセル/ページ/サブページ/ブロックの各々に関連付けられたウェアレベリング情報を記録することもできる。セル/ページ/サブページ/ブロックのウェアレベリング情報は、例えばフラッシュメモリなどの主メモリ206の残存耐用年数remainingservicelifeを表す。言い換えれば、ウェアレベリング情報は、主メモリ206のセル/ページ/サブページ/ブロックに対し、これから先どれだけの数の消去/書き込みサイクルが実施可能かを顕す。実際上は、カウンタ208はメモリであり、これをDRAM、フラッシュ、または別のメモリテクノロジーとすることができ、カウンタ208上で遂行されるオペレーションはメモリコントローラ202によって制御される。通例主メモリ206をメモリといい、固体デバイス20の各種メモリを区別する際に、明確化のため、用語、主メモリ206、二次メモリ210、およびカウンタ208を使っていることを理解されたい。ここで図3を参照すると、例えば、図2に記載の固体デバイスの実施形態を念頭におきながら、フラッシュメモリなどのメモリのセル/ページ/サブページ/ブロックをウェアレベリングする方法のある実施形態が示されている。ステップS10でデータチャンクが受信される。図2を参照しながら説明したように、固体デバイス20は、入力/出力I/Oインタフェース204aおよび204bを介し、データチャンクを受信することができる。次に、ステップS20で、受信したデータチャンクは、その前に受信した他のデータチャンクとともに格納され、受信したデータチャンクのプールが維持される。受信したデータチャンクのプールは、SSD20の二次メモリ210に格納することができる。しかして、プールは、メモリのセル/ページ/サブページ/ブロックへの次の書き込み対象のデータチャンクを含む。次いで、ステップS30で、カウンタに記録されているセル/ページ/サブページ/ブロックがソートされるS30。このソートは、セル/ページ/サブページ/ブロックの各々に関連するそれぞれのウェアレベリング情報に従って行われる。メモリのセル/ページ/サブページ/ブロックのウェアレベリング情報は、メモリの当該セル/ページ/サブページ/ブロックに既に書き込まれた0の数とすることができる。実際には、消去されているセル、すなわち、フラッシュメモリのフローティングゲートにバイナリデータ1がプログラムされているセルをプログラムすることが可能なだけであり、このことは、どの特定のセルに生じた実際の摩耗も、それに対し今までに書き込まれた0の数に比例することを意味する。従って、メモリの最小摩耗セル/ページ/サブページ/ブロックは、最少の0の数を有するウェアレベリング情報に関連付けられることが理解されよう。逆に、メモリの最大摩耗セル/ページ/サブページ/ブロックは、最多の0の数を有するウェアレベリング情報に関連付けられる。ウェアレベリング情報をソートすることによって、メモリの最大および最小摩耗セル/ページ/サブページ/ブロックを容易に識別することが可能である。実際上は、カウンタ例えば、メモリなどは、メモリの各セル/ページ/サブページ/ブロックに書き込まれる0の数を恒久的にカウントしており、各セル/ページ/サブページ/ブロックに書き込まれた0の数に関連する表がカウンタによって維持される。この表に記録されたセル/ページ/サブページ/ブロックは、これらそれぞれの0の数に基づいて容易にソートすることができる。ウェアレベリング情報を、セル毎に、またはページ毎に、またはサブページ毎に、またはブロック毎に記録するかどうかは、実装上の複雑性/コストとウェアレベリング効果との間のトレードオフ如何による。ページサブページ毎のウェアレベリング情報の維持は、最高の実装複雑性およびコストを代償として、最高のウェアレベリング効果を有し、一方、ブロック毎のカウンタは、最小の実装労力を要するだけであるが、最小のウェアレベリング効果が得られるだけである。次に、ステップS40で、受信した各データチャンクに対し、メモリのセル/ページ/サブページ/ブロックに書き込まれることになるバイナリデータの所与の型0または1の回数がカウントされる。実際上は、データチャンク中にカウントされた0または1の数は、例えば二次メモリ210などのメモリに格納される。次いで、ステップS50で、受信したデータチャンクの書き込みが、書き込み対象のデータチャンク中にカウントされたバイナリデータの所与の型0または1の数に照らして、メモリがウェアレベリングされるようにして、メモリのセル/ページ/サブページ/ブロックの間に分配される。しかして、統計的意味ですなわち平均としてセルレベルのウェアレベリングを実行することができ、書き込み対象のデータチャンク中の0の数に基づいてデータチャンクの分配が行われるので、長期的には、各セルが、それに書き込まれた0の数に関連して、同じ様な摩耗を経る可能性が非常に高いことになる。書き込み対象データチャンク中の1の数をカウントすることは、暗黙裡にそのデータチャンク中の0の数をカウントすることを意味しているので、データチャンクの分配を、書き込み対象データチャンク中の1の数に基づいても実施できることを理解されたい。さらに、メモリのセル/ページ/サブページ/ブロックの各々に関連するウェアレベリング情報に照らして、受信したデータチャンクの書き込みを分配することができる。有利には、本ウェアレベリングは、個別セルのウェアレベリングを考慮に入れている点で改良されている。上記に換えて、受信したデータチャンクの書き込みを、メモリのセル/ページ/サブページ/ブロックのセットに限定して、それらセル/ページ/サブページ/ブロックが相異なるウェアレベリング情報を有するようにする。これは、受信したデータチャンクを直ちに書き込むことを可能にし、しかして、ウェアレベリングの整合性とデータチャンクの処理の速度とを大幅に改善する。実際上は、メモリのセル/ページ/サブページ/ブロックのセットは、固体デバイス20のメモリコントローラ202に管理される書き込みアロケータによって維持される。分配の2つのモードの分配S60、S70を実行することができる。ステップS60とS70とは、同時に、または引き続いて、または二者択一的に実行することができる。ステップS60で、分配は、プールの受信したデータチャンク群の間で最多の0の数を有するデータチャンクが、メモリの最小摩耗セル/ページ/サブページ/ブロックを表すウェアレベリング情報を有する、メモリのセル/ページ/サブページ/ブロックに書き込まれるように、遂行される。上記から分かるように、最小摩耗セル/ページ/サブページ/ブロックは、メモリのセル/ページ/サブページ/ブロックの間で、最少の0の数を有するウェアレベリング情報を有する。上記に換えて、分配を、プールの受信したデータチャンク群の間で最少の1の数を有するデータチャンクを、メモリの最小摩耗セル/ページ/サブページ/ブロックを表すウェアレベリング情報を有する、メモリのセル/ページ/サブページ/ブロックに書き込むように行うこともできる。ステップS70で、分配は、プールの受信したデータチャンク群の間で最少の0の数を有するデータチャンクが、メモリの最大摩耗セル/ページ/サブページ/ブロックを表すウェアレベリング情報を有する、メモリのセル/ページ/サブページ/ブロックに書き込まれるように遂行され、最大摩耗セル/ページ/サブページ/ブロックは、メモリのセル/ページ/サブページ/ブロックの間で最多の0の数を有するウェアレベリング情報を有する。上記に換えて、分配を、プールの受信したデータチャンク群の間で最多の1の数を有するデータチャンクを、メモリの最大摩耗セル/ページ/サブページ/ブロックを表すウェアレベリング情報を有する、メモリのセル/ページ/サブページ/ブロックに書き込むように行うこともできる。チャンクの書き込みが遂行されたならば、その書き込まれたセル/ページ/サブページ/ブロックのウェアレベリング情報が更新されるステップS80。通常、この更新は、ステップS40で、書き込みデータチャンクに対してカウントされたバイナリデータの所与の型0または1の回数を、カウンタ208に送信することによって行うことができる。このオペレーションは、メモリコントローラ202によって遂行することができる。本発明の方法は、主メモリを形成するチップに対しても、同様に適用可能なことを理解されたい。この場合、ウェアレベリング情報は、主メモリの各チップに関連付けられる。図3に記載された実施形態は、1ビットだけを格納可能なシングルレベルセルSLCを念頭において説明されている。別の実施形態において、本発明の方法は、同様な方法でマルチレベルセルMLCにも適用される。MLC中の各セルは、例えば2ビットの複数ビットを含む。消去の後、セルは、11のデータパターンを使ってリセットされ、これはセルが放電されたことを意味する。しかして、01、10、および00など他のデータパターンがセルに書き込まれるとき且つその時に限って摩耗が生じる。従って、本発明は、当然ながら、これら01、10、および00のパターンの全てを処理することによってMLCメモリにも具現することができる。さらに具体的には、各セル、ページ、サブページ、ブロックに対し、それに書き込まれた01、10、および00の一切のパターンまたはパターン群の発生の数についてのウェアレベリング情報が保持される。書き込み対象のデータチャンクのプールが維持され、各受信したデータチャンクに対し01、10、および00のパターンの数がカウントされる。次いで、データチャンクの書き込みの分配が実施される。当業者ならよく理解するであろうように、本発明の態様は、方法、システム、またはコンピュータプログラム製品として具現することができる。従って、本発明の態様は、全体がハードウェアの実施形態、全体がソフトウェアの実施形態ファームウエア、常駐ソフトウェア、マイクロコードなどを含む、あるいは、一般に本明細書では全て回路、モジュール、またはシステムといわれる、ソフトウェアおよびハードウェア態様を組み合わせた実施形態の形を取ることができる。さらに、本発明の態様は、内部に具体化されたコンピュータ可読プログラムコードを有する一つ以上のコンピュータ可読媒体群中に具現されたコンピュータプログラム製品の形を取ることもできる。一つ以上のコンピュータ可読媒体群の任意の組み合わせを用いることができる。コンピュータ可読媒体は、コンピュータ可読信号媒体、またはコンピュータ可読記憶媒体とすることができる。コンピュータ可読記憶媒体は、例えば、以下に限らないが、電子的、磁気的、光学的、電磁気的、赤外的な、または半導体の、システム、装置、もしくはデバイス、あるいはこれらの任意の適切な組み合わせとすることができる。コンピュータ可読記憶媒体のさらに具体的な例非包括的リストには、一つ以上の配線を有する電気接続、携帯型コンピュータディスケット、ハードディスク、ランダムアクセスメモリRAM:randomaccessmemory、読み取り専用メモリROM:read-onlymemory、消去可能プログラム可能読み取り専用メモリEPROMerasableprogrammableread-onlymemoryまたはフラッシュメモリ、光ファイバ、携帯型コンパクトディスク読み取り専用メモリCD-ROM:compactdiscread-onlymemory、光記憶デバイス、磁気記憶デバイス、またはこれらの任意の適切な組み合わせが含まれよう。本文書の文脈において、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使用するためのプログラムを、包含または格納できる任意の有形媒体とすることができる。コンピュータ可読信号媒体には、例えばベースバンド中にまたは搬送波の一部として具現されたコンピュータ可読のプログラムコードを有する、伝播データ信号を含めることができる。かかる伝播信号は、以下に限らないが、電磁気的、光学的、またはこれらの任意の適切な組み合わせを含め、さまざまな形態の任意の形を取ることができる。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体ではないが、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使用するためのプログラムを通信、伝播、または伝送が可能な任意のコンピュータ可読媒体であり得る。コンピュータ可読媒体中に具現されたプログラムコードは、以下に限らないが、無線、有線、光ファイバケーブル、RFなど、またはこれらの任意の適した組み合わせを含め、任意の適切な媒体を用いて送信することができる。本発明の態様のオペレーションを実行するためのコンピュータプログラムコードは、JavaR、SmalltalkR、Cなどのオブジェクト指向プログラミング言語、および、Cプログラミング言語または類似のプログラミング言語などの従来式手続き型プログラミング言語を含め、一つ以上のプログラミング言語の任意の組み合せで記述することができる。このプログラムコードは、スタンドアロンソフトウェアパッケージとしてユーザのコンピュータで全体的に、ユーザのコンピュータで部分的に実行することができ、ユーザのコンピュータで部分的に、遠隔コンピュータで部分的に、または遠隔のコンピュータまたはサーバで全体的に実行することができる。後者のシナリオでは、ローカルエリアネットワークLAN:localareanetworkまたは広域ネットワークWAN:wideareanetworkを含む任意の種類のネットワークを介して、遠隔コンピュータをユーザのコンピュータに接続することができ、あるいは例えばインターネットサービスプロバイダを使いインターネットを介し外部のコンピュータへの接続を行うことができる。本発明の実施形態による方法、装置システムおよびコンピュータプログラム製品のフローチャート図もしくはブロック図またはその両方を参照しながら、本発明の態様を上記で説明している。フローチャート図もしくはブロック図またはその両方の各ブロック、および、フローチャート図もしくはブロック図またはその両方中のブロックの組み合せは、コンピュータプログラム命令によって実行可能であることが理解されよう。これらのコンピュータプログラム命令を、汎用コンピュータ、特殊用途コンピュータ、またはマシンを形成する他のプログラム可能データ処理装置のプロセッサに供給し、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能群/処理群を実施するための手段を生成するようにすることができる。また、これらのコンピュータプログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスに対し特定の仕方で機能するよう命令できるコンピュータ可読媒体に格納し、そのコンピュータ可読媒体に格納された命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能/処理を実施する命令群を包含する製造品を形成するようにすることができる。同様に、コンピュータプログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードして、これらコンピュータ、他のプログラム可能装置、またはコンピュータ実行のプロセスを生成する他のデバイス上で一連のオペレーションステップを実行させて、これらコンピュータまたは他のプログラム可能装置で実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能群/処理群を実施するためのプロセスを提供するようにすることもできる。図中のフローチャートおよびブロック図は、本発明のさまざまな実施形態による、システム、方法、およびコンピュータプログラム製品の可能な実装のアーキテクチャ、機能、およびオペレーションを例示している。この点に関し、フローチャートまたはブロック図中の各ブロックは、所定の論理機能群を実行するための一つ以上の実行可能命令を含む、モジュール、セグメント、またはコードの部分を表し得る。また、一部の別の実装においては、ブロック中に記載された機能が、図に記載された順序を外れて行われることがあり得ることに留意すべきである。例えば、連続して示された2つのブロックが、実際にはほぼ同時に実行されることがあり、関与する機能によっては、時には、これらブロックが逆の順序で実行されることもあり得る。さらに、ブロック図もしくはフローチャート図またはその両方の各ブロック、およびブロック図もしくはフローチャート図またはその両方中のブロックの組み合わせは、特定の機能または処理を実施する、特殊用途のハードウェアベースのシステム、または特殊用途のハードウェアとコンピュータ命令との組み合わせによって実施可能なことにも留意すべきである。図4は、本発明のある実施形態によるコンピュータハードウェアのブロック図である。本発明の実施形態によるコンピュータシステム401は、CPU404および主メモリ402を含み、これらはバス400に接続されている。バス400は、LCDモニタなどのディスプレイまたはスクリーン414に連結されたディスプレイコントローラ412に接続されている。このディスプレイ等414は、コンピュータシステムについての情報を表示するために使われる。また、バス400は、IDEまたはSATAコントローラなどのデバイスコントローラ406を介して、ハードディスク408またはDVD410などの記憶デバイスにも接続されている。バス404は、キーボード/マウスコントローラ420またはUSBコントローラ図示せずを介して、キーボード422およびマウス424にさらに接続されている。また、バスは、例えば、イーサネットRプロトコルに適合する通信コントローラ418にも接続されている。通信コントローラ418は、コンピュータシステム401をネットワーク416に物理的に接続するために使われる。"