(57)【要約】【課題】フラッシュ・メモリなどのメモリのセルまたはページまたはサブページまたはブロックをウェアレベリングする方法を提供する。【解決手段】本方法は、  −  メモリのセルまたはページまたはサブページまたはブロックへの書き込み対象のデータ・チャンクを受信するステップ（Ｓ１０）と、  −  受信したデータ・チャンク中の、書き込み対象のバイナリ・データの所与の型「０」または「１」の回数をカウントするステップ（Ｓ４０）と、  −  受信したデータ・チャンクの、メモリのセルまたはページまたはサブページまたはブロックの間への書き込みを、書き込み対象のデータ・チャンク中でカウントされたバイナリ・データの所与の型「０」または「１」の数に照らして、メモリがウェアレベルされるように分配するステップ（Ｓ５０）と、を含む。【選択図】図３
2013530473.tif 000002
【特許請求の範囲】
【請求項１】
フラッシュ・メモリなどのメモリのセルまたはページまたはサブページまたはブロックをウェアレベリングする方法であって、前記方法は、
−  前記メモリのセルまたはページまたはサブページまたはブロックへの書き込み対象のデータ・チャンクを受信するステップ（Ｓ１０）と、
−  前記受信したデータ・チャンク中の、書き込み対象のバイナリ・データの所与の型「０」または「１」の回数をカウントするステップ（Ｓ４０）と、
−  前記受信したデータ・チャンクの、前記メモリのセルまたはページまたはサブページまたはブロックの間への前記書き込みを、書き込み対象の前記データ・チャンク中でカウントされた前記バイナリ・データの所与の型「０」または「１」の前記数に照らして、前記メモリがウェアレベルされるように分配するステップ（Ｓ５０）と、
を含む方法。
【請求項２】
前記受信したデータ・チャンクの前記書き込みを分配するステップは、前記メモリの前記セルまたはページまたはサブページまたはブロックの各々に関連するウェアレベリング情報に照らしてさらに実行される、請求項１に記載の方法。
【請求項３】
前記ウェアレベリング情報は、前記メモリのセルまたはページまたはサブページまたはブロックに今までに書き込まれた「０」の前記数である、請求項２に記載の方法。
【請求項４】
受信したデータ・チャンクのプールを維持するステップ（Ｓ２０）をさらに含む、請求項２〜３のいずれか一つに記載の方法。
【請求項５】
前記プール中の前記受信したデータ・チャンク群の間で最多の「０」の前記数を有する前記データ・チャンクが、前記メモリの前記最小摩耗セルまたはページまたはサブページまたはブロックを表す前記ウェアレベリング情報を有する、前記メモリの前記セルまたはページまたはサブページまたはブロックに書き込まれる（Ｓ６０）、請求項４に記載の方法。
【請求項６】
前記プール中の前記受信したデータ・チャンク群の間で最少の「０」の前記数を有する前記データ・チャンクが、前記メモリの前記最大摩耗セルまたはページまたはサブページまたはブロックを表す前記ウェアレベリング情報を有する、前記メモリの前記セルまたはページまたはサブページまたはブロックに書き込まれる（Ｓ７０）、請求項４または５に記載の方法。
【請求項７】
−  前記メモリの前記最小摩耗セルまたはページまたはサブページまたはブロックは、最少の「０」の前記数を有する前記ウェアレベリング情報と関連付けられ、
−  前記メモリの前記最大摩耗セルまたはページまたはサブページまたはブロックは、最多の「０」の前記数を有する前記ウェアレベリング情報と関連付けられる、
請求項５または６に記載の方法。
【請求項８】
前記メモリの前記セルまたはページまたはサブページまたはブロックの各々は、それらそれぞれのウェアレベリング情報とともにカウンタ中に記録される、請求項２〜７の一つに記載の方法。
【請求項９】
前記カウンタに記録された前記セルまたはページまたはサブページまたはブロックはソートされる（Ｓ３０）、請求項８に記載の方法。
【請求項１０】
各受信したデータ・チャンクの前記書き込みの各分配の後で、前記ウェアレベリング情報が更新される（Ｓ８０）、請求項２〜１０のいずれか一つに記載の方法。
【請求項１１】
前記受信したデータ・チャンクの前記書き込みを分配するステップは、前記メモリのセルまたはページまたはサブページまたはブロックのセットに限定され、前記メモリのセルまたはページまたはサブページまたはブロックの前記セットは、相異なるウェアレベリング情報を有する、前記メモリのセルまたはページまたはサブページまたはブロックを含む、請求項２〜１１のいずれか一つに記載の方法。
【請求項１２】
フラッシュ・メモリなどのメモリのセルまたはページまたはサブページまたはブロックをウェアレベリングするためのシステムであって、
−  前記メモリのセルまたはページまたはサブページまたはブロックに書き込まれるデータ・チャンクを受信するための手段と、
−  メモリ・コントローラと、
を含み、前記メモリ・コントローラは、
−  前記受信したデータ・チャンク中の、書き込み対象のバイナリ・データの所与の型「０」または「１」の回数をカウントし、
−  前記受信したデータ・チャンクの、前記メモリのセルまたはページまたはサブページまたはブロックの間への前記書き込みを、書き込み対象の前記データ・チャンク中でカウントされた前記バイナリ・データの所与の型「０」または「１」の前記数に照らして、前記メモリがウェアレベルされるように分配する、
前記システム。
【請求項１３】
前記メモリ・コントローラは、
−  前記メモリの各セルまたはページまたはサブページまたはブロックに対する前記ウェアレベリング情報をカウンタ中に記録し、
−  各受信したデータ・チャンクの前記書き込みの各分配の後で前記ウェアレベリング情報を更新する、
請求項１２に記載のシステム。
【請求項１４】
前記メモリ・コントローラは、前記メモリのセルまたはページまたはサブページまたはブロックのセットを維持する書き込みアロケータをさらに含み、前記メモリのセルまたはページまたはサブページまたはブロックの前記セットは、相異なるウェアレベリング情報を有する、前記メモリのセルまたはページまたはサブページまたはブロックを含む、請求項１２または１３に記載のシステム。
【請求項１５】
コンピュータに、請求項１〜１１のいずれか一つに記載の前記方法の前記ステップを実行させるためのコード手段を含む、フラッシュ・メモリなどのメモリのセルまたはページまたはサブページまたはブロックをウェアレベリングするための、コンピュータ可読媒体に格納されたコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ管理の分野に関し、具体的には、フラッシュ・メモリなどのメモリに使われるウェアレベリング技法に関する。
【背景技術】
【０００２】
固体メモリまたは固体デバイス（ＳＳＤとしても知られる）は、例えばＮＡＮＤベースのフラッシュ・メモリの中にデータを格納する。読み取りおよび書き込みオペレーションなどＳＳＤ上で遂行されるオペレーションは、固体メモリ・コントローラまたはフラッシュ・メモリ・コントローラによって制御される。新しいデータをＳＳＤのセグメントに書き込む前に、そのセグメントに既に書き込まれているデータを消去して新規データが上書きできるようにしなければならない。これらのメモリは、有限の消去−書き込みサイクル回数、通常、１０，０００〜１，０００，０００の間の回数だけ持久することができ、これは一般にこれらデバイスの耐久性として知られる。耐久性は、ＳＳＤの信頼性を測定するための重要な設計基準である。
【０００３】
フラッシュ・メモリは、多数の消去ブロックまたはセクタに編成されており、その各々はデータを書き込む前に消去されなければならない。典型的な消去ブロックは２５６ＫＢのサイズであるが、１２８ＫＢから２，０４８ＫＢまたはもっと大きい範囲に亘り得る。消去ブロック内のどの所与のアドレスも、一旦消去しなければ再書き込みはできない。消去サイクルは累積的であり、サイクルされた消去ブロックだけが影響を受ける。言い換えれば、いずれかのブロック中のエラーは、そのブロックのデータに限定される。消去サイクルは、供給者の製造プロセスの如何により、１０，０００から１，０００，０００回に亘る。
【０００４】
ウェアレベリング（wear-levering）は、ＳＳＤの寿命期間を延長するため用いられる一般的な技法である。この機能は、通常、固体メモリ・コントローラまたはフラッシュ・メモリ・コントローラ中に実装される。ウェアレベリングは、データ書き込みが、ストレージ媒体全体に亘って均等に分配されることを可能にする。さらに正確には、ウェアレベリングは、これによって、ストレージ・デバイス中のコントローラが、例えば、論理ブロック・アドレスをＳＳＤ中の異なる物理ブロック・アドレスに再マッピングすることによって、全体的な摩耗を全フラッシュ・ブロックの間で均等化するためのアルゴリズムである。
【０００５】
現行技術中には、多くの既存のウェアレベリング・アルゴリズムがある。これらは、あらゆるフラッシュ・ブロックを均等に使うことに重点を置いている。これらのアルゴリズムは、主として、ブロックの再マッピングの頻度、書き込み対象の「最小摩耗」ブロックを検知するアルゴリズム、およびデータ・ブロックのスワッピング能力の違いに関して相互に異なっている。これらのアルゴリズムは、静的データ・ブロックをあちこち移動させるかどうかによって、２つのカテゴリ、動的ウェアレベリングと静的ウェアレベリングとに分類することができる。ウェアレベリング・アルゴリズムが、静的データ・ブロックをあちこち移動させない場合それは動的といわれ、そうでない場合はそれを静的といわれる。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
既存のウェアレベリング・アルゴリズムはすべて、動的であれまたは静的であれ、ブロック・レベルで動作する。すなわち、これらは、ＳＳＤ中で利用可能な全てのフラッシュ・ブロック上の消去／書き込みオペレーションをバランスさせることを目指している。また一方、任意の特定のセルに生じる実際の摩耗は、それまでにそれに書き込まれた０の数に比例する。例えば、フラッシュ・セルが、１０，０００消去／書き込みサイクルの耐久性仕様（endurance specification）を有する場合、各セルは、従って０を使って１０，０００回の消去および書き込みが可能ということになる。そうすると、フラッシュ・ブロックに書き込まれるデータ・チャンクはランダムと考えられ、しかして必ずしも同じ０の数を有しないので、フラッシュ・ブロックは、これらに書き込まれる０の数の違いに起因して、大幅に異なる摩耗レベルを経験することがあり得、これにより、ブロックの一部が他の部分よりもかなり早く摩耗することにつながり得る。
【０００７】
従って、ブロック・レベルのウェアレベリングの欠点は、主に、相異なるデータ・ブロックは、フラッシュ・ブロックに相異なる摩耗を与え得、しかして、任意の２つのブロックの実際の摩耗は、双方が全く同じ消去−書き込みオペレーションの回数を有していても、大きく異なることがあり得る、という事実に起因して生じる。
【０００８】
フラッシュ・セルは、ブロック全体が故障に至る可能性となり得る最小のメモリ単位なので、個別のメモリ・セルの摩耗を追跡し制御するセル・ベースのウェアレベリング・アルゴリズムが望ましい。
【課題を解決するための手段】
【０００９】
第一態様によれば、本発明は、フラッシュ・メモリなどのメモリのセルまたはページまたはサブページまたはブロックをウェアレベリングする方法として具現される。本方法は、
−  メモリのセルまたはページまたはサブページまたはブロックへの書き込み対象のデータ・チャンクを受信するステップと、
−  受信したデータ・チャンク中の、書き込み対象のバイナリ・データの所与の型「０」または「１」の回数をカウントするステップと、
−  受信したデータ・チャンクの、メモリのセルまたはページまたはサブページまたはブロックの間への書き込みを、書き込み対象のデータ・チャンク中でカウントされたバイナリ・データの所与の型「０」または「１」の数に関連させて、メモリがウェアレベルされるように分配するステップと、
を含む。
【００１０】
諸実施形態において、本方法は、以下の特徴、
−  受信したデータ・チャンクの書き込みを分配するステップは、メモリのセルまたはページまたはサブページまたはブロックの各々に関連するウェアレベリング情報に照らしてさらに実行される；
−  上記ウェアレベリング情報は、メモリのセルまたはページまたはサブページまたはブロックに今までに書き込まれた「０」の数である；
−  受信したデータ・チャンクのプールを維持する；
−  プール中の受信したデータ・チャンク群の間で最多の「０」の数を有するデータ・チャンクが、メモリの最小摩耗セルまたはページまたはサブページまたはブロックを表すウェアレベリング情報を有する、メモリのセルまたはページまたはサブページまたはブロックに書き込まれる；
−  プール中の受信したデータ・チャンク群の間で最少の「０」の数を有するデータ・チャンクが、メモリの最大摩耗セルまたはページまたはサブページまたはブロックを表すウェアレベリング情報を有する、メモリのセルまたはページまたはサブページまたはブロックに書き込まれる；
−  メモリの最小摩耗セルまたはページまたはサブページまたはブロックは、最少の「０」の数を有するウェアレベリング情報と関連付けられ、メモリの最大摩耗セルまたはページまたはサブページまたはブロックは、最多の「０」の数を有するウェアレベリング情報と関連付けられる；
−  メモリのセルまたはページまたはサブページまたはブロックの各々は、それらそれぞれのウェアレベリング情報とともにカウンタ中に記録される；
−  カウンタに記録されたセルまたはページまたはサブページまたはブロックはソートされる；
−  受信した各データ・チャンクの書き込みの各分配の後で、ウェアレベリング情報が更新される；
−  受信したデータ・チャンクの書き込みの分配は、メモリのセルまたはページまたはサブページまたはブロックのセットに限定され、メモリのセルまたはページまたはサブページまたはブロックの該セットは、相異なるウェアレベリング情報を有する、メモリのセルまたはページまたはサブページまたはブロックを含む；
の一つ以上を含む。
【００１１】
別の態様によれば、本発明は、フラッシュ・メモリなどのメモリのセルまたはページまたはサブページまたはブロックをウェアレベリングするためのシステムとして具現され、本システムは、
−  メモリのセルまたはページまたはサブページまたはブロックに書き込まれるデータ・チャンクを受信するための手段と、
−  メモリ・コントローラと、
を含み、メモリ・コントローラは、
−  受信したデータ・チャンク中の、書き込み対象のバイナリ・データの所与の型「０」または「１」の回数をカウントし、
−  受信したデータ・チャンクの、メモリのセルまたはページまたはサブページまたはブロックの間への書き込みを、書き込み対象のデータ・チャンク中でカウントされたバイナリ・データの所与の型「０」または「１」の数に照らして、メモリがウェアレベルされるように分配する。
【００１２】
諸実施形態において、本システムは、以下の特徴、
−  メモリ・コントローラは、メモリの各セルまたはページまたはサブページまたはブロックに対するウェアレベリング情報をカウンタ中に記録し、各受信したデータ・チャンクの書き込みの各分配の後でウェアレベリング情報を更新する；
−  メモリ・コントローラは、メモリのセルまたはページまたはサブページまたはブロックのセットを維持する書き込みアロケータをさらに含み、メモリのセルまたはページまたはサブページまたはブロックの該セットは、相異なるウェアレベリング情報を有する、メモリのセルまたはページまたはサブページまたはブロックを含む；
の一つ以上を含む。
【００１３】
別の態様によれば、本発明は、コンピュータに、本発明による方法のステップを実行させるためのコード手段を含む、フラッシュ・メモリなどのメモリのセルまたはページまたはサブページまたはブロックをウェアレベリングするための、コンピュータ可読媒体に格納されたコンピュータ・プログラムとして具現される。
【００１４】
限定されない事例として、添付の図面を参照しながら、本発明を具現するシステムおよびプロセスを以下に説明する。
【図面の簡単な説明】
【００１５】
【図１】あるフラッシュ・メモリの概略図である。
【図２】ある固体デバイスの概略図である。
【図３】本発明によるプロセスの実施形態のフローチャートである。
【図４】本発明の実施形態による、コンピュータ・ハードウェアのブロック図である。
【発明を実施するための形態】
【００１６】
本発明は、フラッシュ・メモリなどのメモリのセルまたはページまたはサブページまたはブロック（以下、セル／ページ／サブページ／ブロックと記載する）をウェアレベリングする方法を対象とする。セル／ページ／サブページ／ブロックをウェアレベリングするとは、メモリのセル／ページ／サブページ／ブロックの摩耗を均等化することをいう。このための、メモリのセル／ページ／サブページ／ブロックに書き込むデータ・チャンクが受信される。次いで、受信したデータ・チャンク中の、書き込み対象のバイナリ・データの所与の型「０」または「１」の回数がカウントされる。次に、受信したデータ・チャンクの、メモリのセル／ページ／サブページ／ブロックの間への書き込みが、書き込み対象のデータ・チャンク中でカウントされたバイナリ・データの所与の型「０」または「１」の数に照らして、メモリがウェアレベルされるように分配される。
【００１７】
フラッシュ・メモリなどのメモリでは、その中に格納されたデータは、２基数体系（base-2 number system）とも言われる２進法で表現される。このことは、データ・チャンクが、２つの記号「０」および「１」を使った数値で表されるバイナリ・データから成ることを意味し、これはバイナリ・データが「０の群」もしくは「１の群」またはその両方で表現されるということである。その結果として、データ・チャンク内のあるバイナリ・データの所与の型（例えば「０」）の数がカウントされるとき、データ・チャンク内の他方のバイナリ・データの所与の型（例えば「１」）の数も暗黙裡にカウントされていることになる。言い換えれば、「０」をカウントすることは「１」をカウントすることを意味し、その逆もいえる。
【００１８】
上記を鑑み、本発明は、例えば、フラッシュ・メモリといった固体デバイスのメモリなどのメモリをウェアレベリングするための新しいソリューションを提案する。これは、統計的なセル・ベースのウェアレベリングを利用する。この統計的セル・ベースのウェアレベリング（statisticalcell-based wear-leveling）は、従来技術で既知のブロック群に対する大まかな摩耗均等化の代わりに、メモリの全セルに対する均等な摩耗を維持することを目指す。本発明は、セルへの「０」の書き込みだけがセルを摩耗させるのであり、しかして、全セルに対し統計的に一様な「０」書き込みの合計数を保つことが、セル・レベルの均等な摩耗を実現する、という原理を用いる。本発明のある実施形態は、セル／ページ／サブページ／ブロック・レベルでの「０」書き込みの回数の追跡を保持し、メモリに書き込まれるデータ・チャンク（chunks of data）の０の数を計算し、高い「０」書き込みの履歴を有するセル／ブロック／ページ／サブページには、より少ない０を有するデータ・チャンクを書き込み、その逆も行う。
【００１９】
ここで図１を参照すると、ＮＡＮＤメモリなどのフラッシュ・メモリ１の概略図が示されている。このフラッシュ・メモリは、フローティングゲート・トランジスタ２、４、６、８、１０、１２から成るセルのアレイ中に情報を格納する。フローティングゲート・トランジスタは、ドレイン（Ｄ）、ソース（Ｓ）およびゲートを含む在来のＭＯＳＦＥＴと類似の電解効果型トランジスタであるが、電気的に分離されたフローティング・ゲート（ＦＧ）をさらに含み、ここで電子を捕捉することができる。図１のセル１０はドレイン（Ｄ）、ソース（Ｓ）、制御ゲート（ＣＧ）、およびフローティング・ゲート（ＦＧ）を含む。
【００２０】
フラッシュ・メモリ１のフローティングゲート・トランジスタ２、４、６は直列に接続されており、しかして第一ビットライン１４を形成している。フローティングゲート・トランジスタ８、１０、１２は直列に接続されており、第二ビットライン１６を形成している。例えば、セル１０のドレイン（Ｄ）は、セル８のソースと直列に接続されており、セル１０のソース（Ｓ）はセル１２のドレインと直列に接続されている。さらに、それぞれのフローティングゲート・トランジスタから成るこれらのセル（２と８）、（４と１０）および（６と１２）は、これらそれぞれの制御ゲート（ＣＧ）を介して、それぞれ、ワード・ライン２２、２０、および１８に接続されている。図１が、フラッシュ・メモリ１を形成するセルのアレイの小さな部分だけを示していることは理解されよう。
【００２１】
各個別のセル２、４、６、８、１０、１２は、制御ゲート（ＣＧ）およびドレイン（Ｄ）に電圧を印加し、ソース（Ｓ）を接地することによってプログラムすることができる。電子がフローティング・ゲートに注入され、フローティング・ゲート中に捕捉され従って該ゲートは荷電される。結果として、セルはバイナリ・データ「０」にセットされる。
【００２２】
各個別のセル２、４、６、８、１０、１２は、いくつかの仕方で消去できる。一つのアプローチとして、制御ゲート（ＣＧ）を接地し、ソース（Ｓ）に電圧を印加して、捕捉された電子をフローティング・ゲート（ＦＧ）からソース（Ｓ）へ逃がすことがある。この結果、フローティング・ゲートは放電され、セルはバイナリ・データ「１」にセットされる。
【００２３】
シングルレベル・セル（ＳＬＣ）メモリでは、セルは１ビット（バイナリ・データ「０」または「１」）だけを格納する。マルチレベル・セル（ＭＬＣ）デバイスでは、セルは複数のビット（例えば、２つのバイナリ・データ）を格納することができる。
【００２４】
従って、セルのフローティング・ゲートに捕捉された電荷が、メモリのセルから読み取られる論理レベルを決める。もう少し簡単にいえば、メモリは次のように機能する、すなわち、フラッシュ・メモリ上にバイナリ・データ「０」をプログラミングする（一般には「０」を書き込む、という）ことは、フローティング・ゲートを荷電し、論理値をゼロにすることに相当する。さらに、消去されたセルだけに、プログラムする（すなわち、フローティング・ゲートを荷電させる）ことが可能である。加えて、セルを消去する場合、フラッシュ・メモリのフローティング・ゲート上にバイナリ・データ「１」がプログラムされ、これはセルを放電することに相当し、これは倫理「１」として読み取られる。
【００２５】
フラッシュ・メモリなどのメモリは、ページ、サブページ、およびブロックに配列される。各ブロックは、通常、サイズが５１２または２，０４８または４，０９６バイトのいくつかののページから成る。各ページは、エラー訂正コード（ＥＣＣ）チェックサムを格納するための数バイトに関連付けられる。通常、ページは複数のセルを含み、ブロックは複数のページを含む。さらに、ページはサブページに分割することができ、例えば、サイズが４，０９６バイトのページは、各々が５１２バイトの８つのサブページに分割することができる。メモリのセルは、バイナリ・データを格納するための最小の単位である。
【００２６】
ここで図２を参照すると、固体デバイス（または固体メモリ）の概略図が示されている。固体デバイス２０は、例えば、図１に示されたＮＡＮＤメモリのようなフラッシュ・メモリなどの主メモリ２０６を含む。ちなみに、主メモリには一つ以上のチップを含めることができる。チップは、複数のセルを含む集積回路である。固体デバイスには、読み取り、書き込み、および消去オペレーションなど、ＳＳＤ上で遂行されるオペレーションを実施するための機能を実装するメモリ・コントローラ２０２を含めることができる。メモリ・コントローラには、ＳＳＤの管理のための他の機能を実装することもできる。さらに、このＳＳＤは、（例えばコンピュータなどの）デバイスとデータを交換するための、入力／出力（Ｉ／Ｏ：ｉｎｐｕｔ／ｏｕｔｐｕｔ）インタフェース２０４ａおよび２０４ｂを含む。Ｉ／Ｏインタフェースは、主メモリ２０６に書き込まれるデータ・チャンクの受信、および主メモリ２０６に既に格納されているデータ・チャンクの送信を可能にする。このＩ／Ｏインタフェースは、受信したデータ・チャンクを一時的に格納できる二次メモリ２１０に接続することができる。この二次メモリ２１０は、主メモリ２０６に書き込むよう意図された受信したデータ・チャンクのプールを提供することを目的としている。二次メモリ２１０は、データ・バッファとして機能し、ＤＲＡＭ、フラッシュ、または別のメモリ・テクノロジーとすることができる。かくして、受信されたデータ・チャンクは、第一ステップにおいて、二次メモリ２１０に格納され、これらは、第二ステップで主メモリ２０６に移動される。受信したデータ・チャンクのプールに遂行されるオペレーションは、メモリ・コントローラ２０２によって管理される。また、ＳＳＤ２０には、カウンタ２０８を含め、これに主メモリ２０６のセル／ページ／サブページ／ブロックの各々に関連付けられたウェアレベリング情報を記録することもできる。セル／ページ／サブページ／ブロックのウェアレベリング情報は、例えばフラッシュ・メモリなどの主メモリ２０６の残存耐用年数（remaining servicelife）を表す。言い換えれば、ウェアレベリング情報は、主メモリ２０６のセル／ページ／サブページ／ブロックに対し、これから先どれだけの数の消去／書き込みサイクルが実施可能かを顕す。実際上は、カウンタ２０８はメモリであり、これをＤＲＡＭ、フラッシュ、または別のメモリ・テクノロジーとすることができ、カウンタ２０８上で遂行されるオペレーションはメモリ・コントローラ２０２によって制御される。
【００２７】
通例主メモリ２０６をメモリといい、固体デバイス２０の各種メモリを区別する際に、明確化のため、用語、主メモリ２０６、二次メモリ２１０、およびカウンタ２０８を使っていることを理解されたい。
【００２８】
ここで図３を参照すると、例えば、図２に記載の固体デバイスの実施形態を念頭におきながら、フラッシュ・メモリなどのメモリのセル／ページ／サブページ／ブロックをウェアレベリングする方法のある実施形態が示されている。
【００２９】
ステップＳ１０でデータ・チャンクが受信される。図２を参照しながら説明したように、固体デバイス２０は、入力／出力（Ｉ／Ｏ）インタフェース２０４ａおよび２０４ｂを介し、データ・チャンクを受信することができる。
【００３０】
次に、ステップＳ２０で、受信したデータ・チャンクは、その前に受信した他のデータ・チャンクとともに格納され、受信したデータ・チャンクのプールが維持される。受信したデータ・チャンクのプールは、ＳＳＤ２０の二次メモリ２１０に格納することができる。しかして、プールは、メモリのセル／ページ／サブページ／ブロックへの次の書き込み対象のデータ・チャンクを含む。
【００３１】
次いで、ステップＳ３０で、カウンタに記録されているセル／ページ／サブページ／ブロックがソートされる（Ｓ３０）。このソートは、セル／ページ／サブページ／ブロックの各々に関連するそれぞれのウェアレベリング情報に従って行われる。
【００３２】
メモリのセル／ページ／サブページ／ブロックのウェアレベリング情報は、メモリの当該セル／ページ／サブページ／ブロックに既に書き込まれた「０」の数とすることができる。実際には、消去されているセル、すなわち、フラッシュ・メモリのフローティング・ゲートにバイナリ・データ「１」がプログラムされているセルをプログラムすることが可能なだけであり、このことは、どの特定のセルに生じた実際の摩耗も、それに対し今までに書き込まれた０の数に比例することを意味する。従って、メモリの最小摩耗セル／ページ／サブページ／ブロックは、最少の「０」の数を有するウェアレベリング情報に関連付けられることが理解されよう。逆に、メモリの最大摩耗セル／ページ／サブページ／ブロックは、最多の「０」の数を有するウェアレベリング情報に関連付けられる。ウェアレベリング情報をソートすることによって、メモリの最大および最小摩耗セル／ページ／サブページ／ブロックを容易に識別することが可能である。
【００３３】
実際上は、カウンタ（例えば、メモリなど）は、メモリの各セル／ページ／サブページ／ブロックに書き込まれる「０」の数を恒久的にカウントしており、各セル／ページ／サブページ／ブロックに書き込まれた「０」の数に関連する表がカウンタによって維持される。この表に記録されたセル／ページ／サブページ／ブロックは、これらそれぞれの「０」の数に基づいて容易にソートすることができる。
【００３４】
ウェアレベリング情報を、セル毎に、またはページ毎に、またはサブページ毎に、またはブロック毎に記録するかどうかは、実装上の複雑性／コストとウェアレベリング効果との間のトレードオフ如何による。ページ（サブページ）毎のウェアレベリング情報の維持は、最高の実装複雑性およびコストを代償として、最高のウェアレベリング効果を有し、一方、ブロック毎のカウンタは、最小の実装労力を要するだけであるが、最小のウェアレベリング効果が得られるだけである。
【００３５】
次に、ステップＳ４０で、受信した各データ・チャンクに対し、メモリのセル／ページ／サブページ／ブロックに書き込まれることになるバイナリ・データの所与の型「０」または「１」の回数がカウントされる。実際上は、データ・チャンク中にカウントされた「０」または「１」の数は、例えば二次メモリ２１０などのメモリに格納される。
【００３６】
次いで、ステップＳ５０で、受信したデータ・チャンクの書き込みが、書き込み対象のデータ・チャンク中にカウントされたバイナリ・データの所与の型「０」または「１」の数に照らして、メモリがウェアレベリングされるようにして、メモリのセル／ページ／サブページ／ブロックの間に分配される。しかして、統計的意味ですなわち平均としてセル・レベルのウェアレベリングを実行することができ、書き込み対象のデータ・チャンク中の「０」の数に基づいてデータ・チャンクの分配が行われるので、長期的には、各セルが、それに書き込まれた０の数に関連して、同じ様な摩耗を経る可能性が非常に高いことになる。書き込み対象データ・チャンク中の「１」の数をカウントすることは、暗黙裡にそのデータ・チャンク中の「０」の数をカウントすることを意味しているので、データ・チャンクの分配を、書き込み対象データ・チャンク中の「１」の数に基づいても実施できることを理解されたい。
【００３７】
さらに、メモリのセル／ページ／サブページ／ブロックの各々に関連するウェアレベリング情報に照らして、受信したデータ・チャンクの書き込みを分配することができる。有利には、本ウェアレベリングは、個別セルのウェアレベリングを考慮に入れている点で改良されている。
【００３８】
上記に換えて、受信したデータ・チャンクの書き込みを、メモリのセル／ページ／サブページ／ブロックのセットに限定して、それらセル／ページ／サブページ／ブロックが相異なるウェアレベリング情報を有するようにする。これは、受信したデータ・チャンクを直ちに書き込むことを可能にし、しかして、ウェアレベリングの整合性とデータ・チャンクの処理の速度とを大幅に改善する。
【００３９】
実際上は、メモリのセル／ページ／サブページ／ブロックのセットは、固体デバイス２０のメモリ・コントローラ２０２に管理される書き込みアロケータによって維持される。
【００４０】
分配の２つのモードの分配（Ｓ６０、Ｓ７０）を実行することができる。ステップＳ６０とＳ７０とは、同時に、または引き続いて、または二者択一的に実行することができる。
【００４１】
ステップＳ６０で、分配は、プールの受信したデータ・チャンク群の間で最多の「０」の数を有するデータ・チャンクが、メモリの最小摩耗セル／ページ／サブページ／ブロックを表すウェアレベリング情報を有する、メモリのセル／ページ／サブページ／ブロックに書き込まれるように、遂行される。上記から分かるように、最小摩耗セル／ページ／サブページ／ブロックは、メモリのセル／ページ／サブページ／ブロックの間で、最少の「０」の数を有するウェアレベリング情報を有する。
【００４２】
上記に換えて、分配を、プールの受信したデータ・チャンク群の間で最少の「１」の数を有するデータ・チャンクを、メモリの最小摩耗セル／ページ／サブページ／ブロックを表すウェアレベリング情報を有する、メモリのセル／ページ／サブページ／ブロックに書き込むように行うこともできる。
【００４３】
ステップＳ７０で、分配は、プールの受信したデータ・チャンク群の間で最少の「０」の数を有するデータ・チャンクが、メモリの最大摩耗セル／ページ／サブページ／ブロックを表すウェアレベリング情報を有する、メモリのセル／ページ／サブページ／ブロックに書き込まれるように遂行され、最大摩耗セル／ページ／サブページ／ブロックは、メモリのセル／ページ／サブページ／ブロックの間で最多の「０」の数を有するウェアレベリング情報を有する。
【００４４】
上記に換えて、分配を、プールの受信したデータ・チャンク群の間で最多の「１」の数を有するデータ・チャンクを、メモリの最大摩耗セル／ページ／サブページ／ブロックを表すウェアレベリング情報を有する、メモリのセル／ページ／サブページ／ブロックに書き込むように行うこともできる。
【００４５】
チャンクの書き込みが遂行されたならば、その書き込まれたセル／ページ／サブページ／ブロックのウェアレベリング情報が更新される（ステップＳ８０）。通常、この更新は、ステップＳ４０で、書き込みデータ・チャンクに対してカウントされたバイナリ・データの所与の型「０」または「１」の回数を、カウンタ２０８に送信することによって行うことができる。このオペレーションは、メモリ・コントローラ２０２によって遂行することができる。
【００４６】
本発明の方法は、主メモリを形成するチップに対しても、同様に適用可能なことを理解されたい。この場合、ウェアレベリング情報は、主メモリの各チップに関連付けられる。
【００４７】
図３に記載された実施形態は、１ビットだけを格納可能なシングルレベル・セル（ＳＬＣ）を念頭において説明されている。
【００４８】
別の実施形態において、本発明の方法は、同様な方法でマルチレベル・セル（ＭＬＣ）にも適用される。ＭＬＣ中の各セルは、例えば２ビットの複数ビットを含む。消去の後、セルは、１１のデータ・パターンを使ってリセットされ、これはセルが放電されたことを意味する。しかして、０１、１０、および００など他のデータ・パターンがセルに書き込まれるとき且つその時に限って摩耗が生じる。従って、本発明は、当然ながら、これら０１、１０、および００のパターンの全てを処理することによってＭＬＣメモリにも具現することができる。
【００４９】
さらに具体的には、各セル、ページ、サブページ、ブロックに対し、それに書き込まれた０１、１０、および００の一切のパターンまたはパターン群の発生の数についてのウェアレベリング情報が保持される。書き込み対象のデータ・チャンクのプールが維持され、各受信したデータ・チャンクに対し０１、１０、および００のパターンの数がカウントされる。次いで、データ・チャンクの書き込みの分配が実施される。
【００５０】
当業者ならよく理解するであろうように、本発明の態様は、方法、システム、またはコンピュータ・プログラム製品として具現することができる。従って、本発明の態様は、全体がハードウェアの実施形態、全体がソフトウェアの実施形態（ファームウエア、常駐ソフトウェア、マイクロコードなどを含む）、あるいは、一般に本明細書では全て「回路」、「モジュール」、または「システム」といわれる、ソフトウェアおよびハードウェア態様を組み合わせた実施形態の形を取ることができる。さらに、本発明の態様は、内部に具体化されたコンピュータ可読プログラム・コードを有する一つ以上のコンピュータ可読媒体（群）中に具現されたコンピュータ・プログラム製品の形を取ることもできる。
【００５１】
一つ以上のコンピュータ可読媒体（群）の任意の組み合わせを用いることができる。コンピュータ可読媒体は、コンピュータ可読信号媒体、またはコンピュータ可読記憶媒体とすることができる。コンピュータ可読記憶媒体は、例えば、以下に限らないが、電子的、磁気的、光学的、電磁気的、赤外的な、または半導体の、システム、装置、もしくはデバイス、あるいはこれらの任意の適切な組み合わせとすることができる。コンピュータ可読記憶媒体のさらに具体的な例（非包括的リスト）には、一つ以上の配線を有する電気接続、携帯型コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ：ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ）、読み取り専用メモリ（ＲＯＭ：ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、消去可能プログラム可能読み取り専用メモリ（ＥＰＲＯＭ（ｅｒａｓａｂｌｅ  ｐｒｏｇｒａｍｍａｂｌｅ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）またはフラッシュ・メモリ）、光ファイバ、携帯型コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ：ｃｏｍｐａｃｔ  ｄｉｓｃ  ｒｅａｄ−ｏｎｌｙ  ｍｅｍｏｒｙ）、光記憶デバイス、磁気記憶デバイス、またはこれらの任意の適切な組み合わせが含まれよう。本文書の文脈において、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使用するためのプログラムを、包含または格納できる任意の有形媒体とすることができる。
【００５２】
コンピュータ可読信号媒体には、例えばベースバンド中にまたは搬送波の一部として具現されたコンピュータ可読のプログラム・コードを有する、伝播データ信号を含めることができる。かかる伝播信号は、以下に限らないが、電磁気的、光学的、またはこれらの任意の適切な組み合わせを含め、さまざまな形態の任意の形を取ることができる。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体ではないが、命令実行システム、装置、またはデバイスによってまたはこれらに関連させて使用するためのプログラムを通信、伝播、または伝送が可能な任意のコンピュータ可読媒体であり得る。
【００５３】
コンピュータ可読媒体中に具現されたプログラム・コードは、以下に限らないが、無線、有線、光ファイバ・ケーブル、ＲＦなど、またはこれらの任意の適した組み合わせを含め、任意の適切な媒体を用いて送信することができる。
【００５４】
本発明の態様のオペレーションを実行するためのコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および、“Ｃ”プログラミング言語または類似のプログラミング言語などの従来式手続き型プログラミング言語を含め、一つ以上のプログラミング言語の任意の組み合せで記述することができる。このプログラム・コードは、スタンドアロン・ソフトウェア・パッケージとしてユーザのコンピュータで全体的に、ユーザのコンピュータで部分的に実行することができ、ユーザのコンピュータで部分的に、遠隔コンピュータで部分的に、または遠隔のコンピュータまたはサーバで全体的に実行することができる。後者のシナリオでは、ローカル・エリア・ネットワーク（ＬＡＮ：ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ）または広域ネットワーク（ＷＡＮ：ｗｉｄｅａｒｅａ ｎｅｔｗｏｒｋ）を含む任意の種類のネットワークを介して、遠隔コンピュータをユーザのコンピュータに接続することができ、あるいは（例えばインターネット・サービス・プロバイダを使いインターネットを介し）外部のコンピュータへの接続を行うことができる。
【００５５】
本発明の実施形態による方法、装置（システム）およびコンピュータ・プログラム製品のフローチャート図もしくはブロック図またはその両方を参照しながら、本発明の態様を上記で説明している。フローチャート図もしくはブロック図またはその両方の各ブロック、および、フローチャート図もしくはブロック図またはその両方中のブロックの組み合せは、コンピュータ・プログラム命令によって実行可能であることが理解されよう。これらのコンピュータ・プログラム命令を、汎用コンピュータ、特殊用途コンピュータ、またはマシンを形成する他のプログラム可能データ処理装置のプロセッサに供給し、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能群／処理群を実施するための手段を生成するようにすることができる。
【００５６】
また、これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスに対し特定の仕方で機能するよう命令できるコンピュータ可読媒体に格納し、そのコンピュータ可読媒体に格納された命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能／処理を実施する命令群を包含する製造品を形成するようにすることができる。
【００５７】
同様に、コンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、または他のデバイスにロードして、これらコンピュータ、他のプログラム可能装置、またはコンピュータ実行のプロセスを生成する他のデバイス上で一連のオペレーション・ステップを実行させて、これらコンピュータまたは他のプログラム可能装置で実行されるこれらの命令が、フローチャートもしくはブロック図またはその両方のブロックまたはブロック群中に規定された機能群／処理群を実施するためのプロセスを提供するようにすることもできる。
【００５８】
図中のフローチャートおよびブロック図は、本発明のさまざまな実施形態による、システム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、およびオペレーションを例示している。この点に関し、フローチャートまたはブロック図中の各ブロックは、所定の論理機能（群）を実行するための一つ以上の実行可能命令を含む、モジュール、セグメント、またはコードの部分を表し得る。また、一部の別の実装においては、ブロック中に記載された機能が、図に記載された順序を外れて行われることがあり得ることに留意すべきである。例えば、連続して示された２つのブロックが、実際にはほぼ同時に実行されることがあり、関与する機能によっては、時には、これらブロックが逆の順序で実行されることもあり得る。さらに、ブロック図もしくはフローチャート図またはその両方の各ブロック、およびブロック図もしくはフローチャート図またはその両方中のブロックの組み合わせは、特定の機能または処理を実施する、特殊用途のハードウェア・ベースのシステム、または特殊用途のハードウェアとコンピュータ命令との組み合わせによって実施可能なことにも留意すべきである。
【００５９】
図４は、本発明のある実施形態によるコンピュータ・ハードウェアのブロック図である。本発明の実施形態によるコンピュータ・システム（４０１）は、ＣＰＵ（４０４）および主メモリ（４０２）を含み、これらはバス（４００）に接続されている。バス（４００）は、ＬＣＤモニタなどのディスプレイまたはスクリーン（４１４）に連結されたディスプレイ・コントローラ（４１２）に接続されている。このディスプレイ等（４１４）は、コンピュータ・システムについての情報を表示するために使われる。また、バス（４００）は、ＩＤＥまたはＳＡＴＡコントローラなどのデバイス・コントローラ（４０６）を介して、ハード・ディスク（４０８）またはＤＶＤ（４１０）などの記憶デバイスにも接続されている。バス（４０４）は、キーボード／マウス・コントローラ（４２０）またはＵＳＢコントローラ（図示せず）を介して、キーボード（４２２）およびマウス（４２４）にさらに接続されている。また、バスは、例えば、イーサネット（Ｒ）プロトコルに適合する通信コントローラ（４１８）にも接続されている。通信コントローラ（４１８）は、コンピュータ・システム（４０１）をネットワーク（４１６）に物理的に接続するために使われる。
【図１】
2013530473.tif 000003
【図２】
2013530473.tif 000004
【図３】
2013530473.tif 000005
【図４】
2013530473.tif 000006
【手続補正書】
【提出日】平成25年1月4日(2013.1.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
フラッシュ・メモリなどのメモリのセルまたはページまたはサブページまたはブロックをウェアレベリングする方法であって、
前記メモリのセルまたはページまたはサブページまたはブロックへの書き込み対象のデータ・チャンクを受信するステップ（Ｓ１０）と、
前記受信したデータ・チャンク中の、書き込み対象のバイナリ・データの所与の型「０」または「１」の回数をカウントするステップ（Ｓ４０）と、
前記受信したデータ・チャンクの、前記メモリのセルまたはページまたはサブページまたはブロックの間への前記書き込みを、書き込み対象の前記データ・チャンク中でカウントされた前記バイナリ・データの所与の型「０」または「１」の前記数に照らして、前記メモリがウェアレベルされるように分配するステップ（Ｓ５０）と、
を含む方法。
【請求項２】
前記受信したデータ・チャンクの前記書き込みを分配するステップは、前記メモリの前記セルまたはページまたはサブページまたはブロックの各々に関連するウェアレベリング情報に照らしてさらに実行される、請求項１に記載の方法。
【請求項３】
前記ウェアレベリング情報は、前記メモリのセルまたはページまたはサブページまたはブロックに今までに書き込まれた「０」の前記数である、請求項２に記載の方法。
【請求項４】
受信したデータ・チャンクのプールを維持するステップ（Ｓ２０）をさらに含む、請求項２〜３のいずれか一つに記載の方法。
【請求項５】
前記プール中の前記受信したデータ・チャンク群の間で最多の「０」の前記数を有する前記データ・チャンクが、前記メモリの前記最小摩耗セルまたはページまたはサブページまたはブロックを表す前記ウェアレベリング情報を有する、前記メモリの前記セルまたはページまたはサブページまたはブロックに書き込まれる（Ｓ６０）、請求項４に記載の方法。
【請求項６】
前記プール中の前記受信したデータ・チャンク群の間で最少の「０」の前記数を有する前記データ・チャンクが、前記メモリの前記最大摩耗セルまたはページまたはサブページまたはブロックを表す前記ウェアレベリング情報を有する、前記メモリの前記セルまたはページまたはサブページまたはブロックに書き込まれる（Ｓ７０）、請求項４または５に記載の方法。
【請求項７】
−  前記メモリの前記最小摩耗セルまたはページまたはサブページまたはブロックは、最少の「０」の前記数を有する前記ウェアレベリング情報と関連付けられ、
−  前記メモリの前記最大摩耗セルまたはページまたはサブページまたはブロックは、最多の「０」の前記数を有する前記ウェアレベリング情報と関連付けられる、
請求項５または６に記載の方法。
【請求項８】
前記メモリの前記セルまたはページまたはサブページまたはブロックの各々は、それらそれぞれのウェアレベリング情報とともにカウンタ中に記録される、請求項２〜７の一つに記載の方法。
【請求項９】
前記カウンタに記録された前記セルまたはページまたはサブページまたはブロックはソートされる（Ｓ３０）、請求項８に記載の方法。
【請求項１０】
各受信したデータ・チャンクの前記書き込みの各分配の後で、前記ウェアレベリング情報が更新される（Ｓ８０）、請求項２〜１０のいずれか一つに記載の方法。
【請求項１１】
前記受信したデータ・チャンクの前記書き込みを分配するステップは、前記メモリのセルまたはページまたはサブページまたはブロックのセットに限定され、前記メモリのセルまたはページまたはサブページまたはブロックの前記セットは、相異なるウェアレベリング情報を有する、前記メモリのセルまたはページまたはサブページまたはブロックを含む、請求項２〜１１のいずれか一つに記載の方法。
【請求項１２】
フラッシュ・メモリなどのメモリのセルまたはページまたはサブページまたはブロックをウェアレベリングするためのシステムであって、
前記メモリのセルまたはページまたはサブページまたはブロックに書き込まれるデータ・チャンクを受信するための手段と、
メモリ・コントローラと、
を含み、前記メモリ・コントローラは、
前記受信したデータ・チャンク中の、書き込み対象のバイナリ・データの所与の型「０」または「１」の回数をカウントし、
前記受信したデータ・チャンクの、前記メモリのセルまたはページまたはサブページまたはブロックの間への前記書き込みを、書き込み対象の前記データ・チャンク中でカウントされた前記バイナリ・データの所与の型「０」または「１」の前記数に照らして、前記メモリがウェアレベルされるように分配する、
前記システム。
【請求項１３】
前記メモリ・コントローラは、
前記メモリの各セルまたはページまたはサブページまたはブロックに対する前記ウェアレベリング情報をカウンタ中に記録し、
各受信したデータ・チャンクの前記書き込みの各分配の後で前記ウェアレベリング情報を更新する、
請求項１２に記載のシステム。
【請求項１４】
前記メモリ・コントローラは、前記メモリのセルまたはページまたはサブページまたはブロックのセットを維持する書き込みアロケータをさらに含み、前記メモリのセルまたはページまたはサブページまたはブロックの前記セットは、相異なるウェアレベリング情報を有する、前記メモリのセルまたはページまたはサブページまたはブロックを含む、請求項１２または１３に記載のシステム。
【請求項１５】
フラッシュ・メモリなどのメモリのセルまたはページまたはサブページまたはブロックをウェアレベリングするためのプログラムであって、
コンピュータに、請求項１〜１１のいずれか一つに記載の方法のステップを実行させるためのプログラム。
【国際調査報告】
2013530473.tif 000007
2013530473.tif 000008