(57)【特許請求の範囲】
【請求項１】
ホストプロセッサから複数のストレージデバイスに適用される動作を開始するコマンドを受け取るステップと、
前記動作が前記複数のストレージデバイスの寿命に対して、寿命を縮める動作であるか否かを判定するステップと、
前記複数のストレージデバイスについて、寿命を縮める動作の総合レートを求めるステップと、
前記複数のストレージデバイスの所望の寿命に基づいて、寿命を縮める動作の最大平均動作レートを求めるステップと、
前記寿命を縮める動作の総合レートと前記寿命を縮める動作の最大平均動作レートとの間の差の積分であって時間の経過と共に算出される該積分に応じて、前記寿命を縮める動作の少なくとも一部を条件付きで遅延するステップステップと、
を含む方法。
【請求項２】
前記寿命が、所望の寿命、実際の寿命、及び推定寿命のうちの少なくとも一つを含む、請求項１に記載の方法。
【請求項３】
前記動作の少なくとも一部を条件付きで遅延するステップが、該動作を開始する前記コマンドを遅延させることを含む、請求項１に記載の方法。
【請求項４】
前記遅延するステップが、さらに、前記動作を開始するアプリケーションに基づく、請求項１に記載の方法。
【請求項５】
前記遅延するステップが、前記動作を開始するアプリケーションから独立である、請求項１に記載の方法。
【請求項６】
前記動作が、消去動作を含む、請求項１に記載の方法。
【請求項７】
前記動作が、プログラム動作を含む、請求項１に記載の方法。
【請求項８】
前記複数のストレージデバイスの使用履歴に基づいて、前記動作の前記少なくとも一部を条件付きで遅延するステップを更に含む、請求項１に記載の方法。
【請求項９】
前記複数のストレージデバイスの予測された使用に基づいて、前記動作の前記少なくとも一部を条件付きで遅延するステップを更に含む、請求項１に記載の方法。
【請求項１０】
その間に前記動作が開始されるタイムインターバルに基づいて、前記動作の前記少なくとも一部を条件付きで遅延するステップを更に含む、請求項１に記載の方法。
【請求項１１】
前記動作の一部だけが遅延される、請求項１に記載の方法。
【請求項１２】
前記複数のストレージデバイスが、機械的ストレージデバイスを含む、請求項１に記載の方法。
【請求項１３】
前記複数のストレージデバイスが、不揮発性メモリデバイスを含む、請求項１に記載の方法。
【請求項１４】
前記不揮発性メモリデバイスが、セルあたり単一ビットのＮＯＲフラッシュメモリ、セルあたり複数ビットのＮＯＲフラッシュメモリ、セルあたり単一ビットのＮＡＮＤフラッシュメモリ、セルあたり複数ビットのＮＡＮＤフラッシュメモリ、セルあたり複数レベル複数ビットのＮＡＮＤフラッシュ、及び大ブロックフラッシュメモリのうちの少なくとも一つを含む、請求項１３に記載の方法。
【請求項１５】
ホストプロセッサから複数のストレージデバイスに適用される動作を開始するコマンドを受け取る手段と、
前記動作が前記複数のストレージデバイスの寿命に対して、寿命を縮める動作であるか否かを判定する手段と、
前記複数のストレージデバイスについて、寿命を縮める動作の総合レートを求める手段と、
前記複数のストレージデバイスの所望の寿命に基づいて、寿命を縮める動作の最大平均動作レートを求める手段と、
前記寿命を縮める動作の総合レートと前記寿命を縮める動作の最大平均動作レートとの間の差の積分であって時間の経過と共に算出される該積分に応じて、前記寿命を縮める動作の少なくとも一部を条件付きで遅延する手段と、
を備えるストレージシステム。
【請求項１６】
前記動作の少なくとも一部を条件付きで遅延することが、該動作を開始する前記コマンドを遅延させることを含む、請求項１５に記載のストレージシステム。
【請求項１７】
前記動作が消去動作を含む、請求項１５に記載のストレージシステム。
【請求項１８】
前記動作がプログラム動作を含む、請求項１５に記載のストレージシステム。
【請求項１９】
前記ストレージデバイスが、不揮発性メモリデバイスを含む、請求項１５に記載のストレージシステム。
【請求項２０】
前記不揮発性メモリデバイスが、セルあたり単一ビットのＮＯＲフラッシュメモリ、セルあたり複数ビットのＮＯＲフラッシュメモリ、セルあたり単一ビットのＮＡＮＤフラッシュメモリ、セルあたり複数ビットのＮＡＮＤフラッシュメモリ、セルあたり複数レベル複数ビットのＮＡＮＤフラッシュ、及び大ブロックフラッシュメモリのうちの少なくとも一つを含む、請求項１９に記載のストレージシステム。
【請求項２１】
前記寿命を縮める動作の総合レートが前記寿命を縮める動作の最大平均動作レートを動的に超えることを選択的に可能とする、請求項１に記載の方法。
【請求項２２】
前記寿命を縮める動作の総合レートが前記寿命を縮める動作の最大平均動作レートを動的に超えることを選択的に可能とする、請求項１５に記載のストレージシステム。
【発明の詳細な説明】
【発明の分野】
【０００１】
[0001]本実施形態は、メモリに関するものであり、より具体的には、有限の寿命を有するメモリに関するものである。
【背景】
【０００２】
[0002]メモリは、現代のエンタープライズコンピューティングシステムの性能に関する最も制限的な特徴の一つである。メモリの一つの制限的特徴は、多くのタイプのメモリが限られた寿命を示すという事実である。例えば、フラッシュなどの不揮発性メモリの寿命は、そのメモリが消去され、再書込みされるたびに、少量ではあるが減少する。時が経つにつれて、数千回の消去及び再書込みを経て、そのようなフラッシュメモリは、ますます信頼できないものになることがある。
【０００３】
[0003]したがって、使用のタイプ（例えば、軽い対激しい）に応じて、フラッシュメモリの寿命が、大幅に変化する場合がある。これは、さまざまな点で問題になる可能性がある。例えば、フラッシュメモリ製造業者は、特定の長さの時間にわたる制限付き保証を提供することを期待されることが多い。そのような保証は、フラッシュメモリの軽い使用から通常の使用には十分であるかもしれないが、激しい使用（例えば、エンタープライズ応用など）の場合にフラッシュメモリの返品及び交換を必要とし得る。
【０００４】
[0004]そのような状況は、フラッシュメモリ製造業者の利益に大きく影響する場合がある。具体的に言うと、激しく使用する顧客について絶え間なく保証付きフラッシュメモリを交換する必要性によって、軽い使用から通常の使用の顧客へのフラッシュメモリの販売から得られる利益が相当に減少する可能性がある。したがって、従来技術に関連する上記及び／又は他の問題に対処する必要がある。
【概要】
【０００５】
[0005]メモリの寿命を縮める動作を遅延させるシステム、方法、及びコンピュータプログラム製品を提供する。使用時に、メモリの寿命に関連する少なくとも一つの特徴が、特定される。このために、メモリの寿命を縮める少なくとも一つの動作が、この特徴に基づいて遅延される。
【図面の簡単な説明】
【０００６】
【図１】一実施形態によるメモリの寿命を縮める動作を遅延させる方法を示す図である。
【図２】別の実施形態によるメモリの寿命を縮める動作を遅延させる技法を示す図である。
【図３】別の実施形態による、メモリの寿命を縮める動作を遅延させるタイムインターバルに基づく技法を示す図である。
【図４】別の実施形態による、メモリの寿命を縮める動作を遅延させる積分に基づく技法を示す図である。
【図５】別の実施形態による、所望の寿命持続時間が推定された寿命持続時間を超える場合に、メモリの寿命を縮める動作を遅延させるシステムを示す図である。
【図６】別の実施形態による、所望の寿命持続時間が推定された寿命持続時間を超える場合に、メモリの寿命を縮める動作を遅延させる方法を示す図である。
【図７】別の実施形態による、メモリの寿命を測定するグラフィカルユーザインターフェースを示す図である。
【図８】別の実施形態による、差情報を利用してメモリ内の書込み動作を減らす方法を示す図である。
【図９】別の実施形態による、メモリ内の書込み動作を減らすシステムを示す図である。
【図１０】一実施形態による、差情報を使用してメモリを読み取る方法を示す図である。
【図１１】一実施形態による、差情報を使用してメモリに書き込む方法を示す図である。
【図１２】プロセッサに基づくシステムを使用する実施形態を示す図である。
【詳細な説明】
【０００７】
[0018]説明する種々の実施形態に従って、メモリの寿命を縮める様々な動作を、かかる寿命を延ばすために制御することができる。この説明では、そのような動作は、書込み動作、消去動作、プログラム動作、及び／又は前述の寿命を縮め得る全ての他の動作を指し得るものである。
【０００８】
[0019]図１に、一実施形態によるメモリの寿命を縮める動作を遅延させる方法１００を示す。図示するように、メモリの寿命に関連する少なくとも一つの特徴が特定される。動作１０２を参照されたい。
【０００９】
[0020]この説明では、メモリの寿命とは、その間にメモリが任意の所望の度合の使用適正を呈する全ての持続時間を含み得るものである。例えば、様々な実施形態では、そのような寿命は、所望の寿命、実際の寿命、推定された寿命などを含み得るが、間違いなくこれらに限定はされない。さらに、使用適正の度合は、まだ動作しているコンポーネント（例えば、ブロック、セルなど）のパーセンテージ、メモリ又はそのコンポーネントの信頼性、及び／又は、更に言えば任意の他のパラメータなど、全ての使用適正関連パラメータを指し得る。
【００１０】
[0021]また、この説明では、動作１０２で特定される寿命に関連する特徴は、様々な実施形態で、期間、メモリの寿命を縮める動作のレート、メモリの寿命を縮める動作の許容総回数、寿命の持続時間などを含むことができる。さらに、前述の動作の許容総回数及び選択された又は所望の寿命を考慮すれば、一つの例示的実施形態では、期間あたりの動作の回数の単位で動作の最大平均レートを直接に計算することができる。もちろん、絶対に寿命の任意の他の特徴を特定できるので、そのような例示的特徴は、例示のみのために示したものである。このことは、直ぐに明らかとなろう。
【００１１】
[0022]このために、メモリの寿命を縮める少なくとも一つの動作が、特徴に基づいて遅延される。動作１０４を参照されたい。したがって、そのような遅延を、動作１０２で特徴されるメモリ寿命の特徴の少なくとも部分的関数である任意の形で実行することができる。この説明では、動作の前述の遅延は、動作の一部だけが遅延される状況を含むものと考えられる。例えば、動作が複数のコンポーネントを含む状況では、そのような遅延を、そのような動作の一以上（又は全て）の部分に適用してもよい。
【００１２】
[0023]一実施形態では、動作は、その動作を開始するコマンドを遅延させることによって、遅延され得る。例えば、書込みコマンド又は消去コマンドの特定に応答して、そのようなコマンドの実行を遅延させることができる。もちろん、他の実施形態では、動作自体を単純に遅延することができる。この設計によって、そうでなければメモリの寿命を縮めるであろう一以上の動作のそのような遅延が、少なくとも部分的に寿命の減少を少なくする。
【００１３】
[0024]以下、より例示的な情報を、様々なオプションのアーキテクチャ及び特徴に関して示す。これらアーキテクチャ及び特徴は、前述のフレームワークをユーザの希望に応じて実施してもしなくてもよい。例えば、遅延は、多数の異なる技法を使用して様々な異なる方法で管理することができる。これら技法についての例については、以下に説明する。なお、以下の情報が、例示のために示すものであり、いかなる形でも限定的に解釈されてはならないことに強く留意されたい。次の特徴のいずれをも、説明する他の特徴を伴わずに又は伴って任意に組み込むことができる。
【００１４】
[0025]図２は、別の実施形態によるメモリの寿命を縮める動作を遅延させる技法２００を示している。オプションとして、本技法２００を、図１の方法１００を実行するために実施することができる。しかし、もちろん、技法２００を、任意の所望の環境で実施してもよい。前述の定義が、この説明中にあてはまり得ることにも留意されたい。
【００１５】
[0026]図示するように、技法２００は、メモリが最小限の使用適正を示すことをもたらす動作の総回数２０２並びにメモリの最小の所望の寿命２０４を考慮に入れている。そのようなデータ点から、最小の所望の寿命２０４を達成する最大平均動作レート２０６を計算することができる。
【００１６】
[0027]使用中に、寿命を縮める動作の回数を、時間の進行につれて監視することができる。如何なる時でも、時間の経過に伴い動作の回数が、図示の形で最大平均動作レート２０６を超える場合には、全ての余分な動作（レートを超えることに寄与する）を、計算された量だけ、所定の時間だけ、又は寿命を縮める動作の以前のレート若しくは予測されたレートに基づいて適応的に、遅延することができる。この所定の時間は、一実施形態では、最大平均動作レート２０６を超えないことをもたらす時間とすることができる。
【００１７】
[0028]様々な実施形態では、どの動作が遅延の対象になるか（並びに遅延自体の長さ）を、様々な要因に基づくものとすることができる。例えば、一実施形態では、遅延を、動作を開始するアプリケーションに基づくものとしてもよい。そのような実施形態では、より低い優先順位を有するアプリケーションによって開始される動作を、遅延の対象とすることができ、より高い優先順位を有するアプリケーションによって開始される動作を、必ずしも遅延の対象ではない（可能な時に）ものとすることができる。
【００１８】
[0029]もちろん、遅延がアプリケーション独立の形で動作にまたがって管理される他の実施形態も考えられる。例えば、遅延を、発生元のアプリケーションに拠らず、あるタイプの動作（例えば、消去動作など）の全てに適用してもよい。さらに、ハイブリッド手法を用いる実施形態も、考えられる。
【００１９】
[0030]さらに、遅延される動作に、寿命の異常な短縮を引き起こす動作又は動作のパターンを含む実施形態も考えられる。一実施形態で、これらのパターンだけを遅延させることができる。例えば、ウィルス又は手荒いアプリケーション動作パターンを検出することができ、そのようなパターンからの動作だけを遅延させることができる。
【００２０】
[0031]図３は、別の実施形態による、メモリの寿命を縮める動作を遅延させるタイムインターバルに基づく技法３００を示している。オプションとして、この技法３００を、図１の方法１００を実行するために及び／又は更に図２の技法２００で実施することができる。しかし、もちろん、技法３００を、任意の所望の環境で実施してもよい。やはり、前述の定義が、この説明中にあてはまり得ることにも留意されたい。
【００２１】
[0032]図２の技法に類似して、技法３００は、メモリが最小限の使用適正を示すことをもたらす動作の総数３０２並びにメモリの最小の所望の寿命３０４を考慮に入れる。そのようなデータ点から、最小の所望の寿命３０４を達成する最大平均動作レート３０６を計算することができる。使用中に、寿命を縮める動作の回数を、時間の進行につれて監視することができる。
【００２２】
[0033]如何なる時でも、時間の経過に伴い複数のそのような動作が、最大平均動作レート２０６を超える場合には、図示する方法で、全ての過剰な動作が、必ずしも、無条件に遅延（図２の技法２００のように）されない。そうではなく、そのような過剰な動作を、当該動作が開始されるタイムインターバルに基づいて条件付きで遅延することができる。そのようなタイムインターバルは、例えば、時刻、日、月などを含むことができるが、これらに限定はされない。追加の実施形態では、タイムインターバルを、適応的及び動的に最適な期間へと調整することができる。例えば、そのような適応動的調整を、あるインターバルのサブインターバルにおいて寿命を縮める動作の頻度のヒストグラムなどに基づくものとしてもよい。
【００２３】
[0034]例えば、過剰な回数の動作が、上に示した態様で月曜、火曜、水曜、木曜などに特定される場合には、後続の金曜、土曜、及び日曜中に特定される可能性のある動作の回数がより少ないことを認識する（例えば、予想する）ことができる。したがって、そのような過剰な回数の動作を無条件に遅延するのではなく、これらを、平均動作レート（１週間にわたって行われる時の）が最大平均動作レート２０６を超えない尤度に応じて、即座に実行することができる。もちろん、これがそうではないとわかる場合には、ある遅延を、後続の週の間に行うことなどができる。前述の例は、週の間の日状況で示したが、週、月などにまたがるメモリ使用の変動を考慮に入れた、他のより「マクロ」な実施形態が考えられる。
【００２４】
[0035]更なる追加の実施形態では、動作の条件付き遅延を、必ずしもインターバルに基づくのではなく、その代わりに、メモリの使用履歴及び／又はメモリの予想される使用にさえ基づくように生成することができる。そのような実施形態では、将来の使用を予測するために履歴データを使用して、任意の所望の統計分析を実行し、過度な動作を遅延させることが必ずしも発生しない状況をより正確に特定すること等を行うことができる。
【００２５】
[0036]図４は、別の実施形態による、メモリの寿命を縮める動作を遅延させる積分に基づく技法４００を示している。オプションとして、この技法４００を、図１の方法１００を実行するために、及び／又は、更に図２〜３の技法２００及び３００において実施することができる。しかし、もちろん、技法４００を、任意の所望の環境で実施してもよい。やはり、前述の定義が、この説明中にあてはまり得ることにも留意されたい。
【００２６】
[0037]以前の技法に類似して、技法４００は、メモリが最小限の使用適正を示すことをもたらす動作の総回数４０２、及びメモリの最小の所望の寿命４０４を考慮に入れる。そのようなデータ点から、最小の所望の寿命４０４を達成する最大平均動作レート４０６を計算することができる。使用中に、寿命を縮める動作の回数を、時間の進行につれて監視することができる。
【００２７】
[0038]如何なる時でも、時間の経過に伴い複数のそのような動作が、最大平均動作レート４０６を超える場合に、図示された方法で（４０８を参照されたい）、全ての過剰な動作が、必ずしも、無条件の形で遅延（図２の技法２００のように）されない。そうではなく、そのような過剰な動作を、メモリの使用を反映する積分関数に基づいて条件的に遅延することができる。具体的には、時間の経過に伴い寿命を縮める動作の総合レートと最大平均動作レート４０６との間の差の積分を、進行につれて計算することができる。このために、そのような積分が、そのような動作が最大平均動作レート４０６を超える可能性があることを示す場合に、前述の遅延を、必ずしも行う必要がない。
【００２８】
[0039]図５は、別の実施形態による、所望の寿命持続時間が推定された寿命持続時間を超える場合に、メモリの寿命を縮める動作を遅延させるシステム５００を示している。オプションとして、このシステム５００を、図１の方法１００を実行し、及び／又は、更にオプションとして図２〜４の技法のいずれかを組み込むように実施することができる。しかし、もちろん、システム５００を任意の所望の形で使用してもよい。
【００２９】
[0040]図示するように、複数のストレージデバイス５３０、５４０を含むストレージシステム５０３が含まれている。少なくとも一つのストレージバス５０２が、少なくとも一つのコントローラ５１１を少なくとも一つのコンピュータ５０１に結合している。様々な実施形態では、ストレージバス５０２は、ｓｅｒｉａｌ  ａｄｖａｎｃｅｄ  ｔｅｃｈｎｏｌｏｇｙ  ａｔｔａｃｈｍｅｎｔ（ＳＡＴＡ）バス、ｓｅｒｉａｌ  ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）バス、ファイバチャネルバス、メモリバスインターフェース、フラッシュメモリバス、ＮＡＮＤフラッシュバス、ｉｎｔｅｇｒａｔｅｄ  ｄｒｉｖｅ  ｅｌｅｃｔｒｏｎｉｃｓ（ＩＤＥ）バス、ａｄｖａｎｃｅｄ  ｔｅｃｈｎｏｌｏｇｙ  ａｔｔａｃｈｍｅｎｔ（ＡＴＡ）バス、ｃｏｎｓｕｍｅｒ  ｅｌｅｃｔｒｏｎｉｃｓ（ＣＥ）バス、ｕｎｉｖｅｒｓａｌ  ｓｅｒｉａｌ  ｂｕｓ（ＵＳＢ）バス、スマートカードバス、マルチメディアカード（ＭＭＣ）バスなどを含むことができるが、これらに限定はされない。したがって、コントローラ５１１を、システム（例えば、コンピュータ５０１）と二次ストレージ（ストレージデバイス５３０、５４０のうちの少なくとも一つなど）との間に結合することができる。さらに、ストレージデバイス５３０、５４０に関連するメモリの寿命を延ばす少なくとも一つの装置５１０が含まれている。
【００３０】
[0041]図示するように、装置５１０は、それぞれ複数の対応するバス５２１、５２２を介してストレージデバイス５３０、５４０に結合されたコントローラ５１１を含んでいる。コントローラ５１１は、ストレージバス５０２を介してコンピュータ５０１から受け取ったコマンドを実行するために、複数のバス５２１、５２２を使用して、複数のストレージデバイス５３０、５４０を制御し、これらストレージデバイスとデータを交換する。ストレージデバイス５３０、５４０の各々は、データを格納する少なくとも一つのモジュール又はブロック５３１、５３２、５３３、５４１、５４２、５４３を含んでいる。さらに、前述のコマンドの少なくとも一部は、寿命を縮めるコマンドであり、少なくとも一つのモジュール又はブロック５３１、５３２、５３３、５４１、５４２、５４３への悪影響を有する。使用中に、装置５１０は、そのような寿命を縮めるコマンドに拠らず、ストレージデバイス５３０、５４０の寿命を延ばすように働く。
【００３１】
[0042]これを達成するために、コントローラ５１１は、対応するバス５１２を介して寿命評価モジュール５１４に結合されている。装置５１０は、現在時刻を供給するためにバス５１８を介して寿命評価モジュール５１４に結合された時刻モジュール５１７を更に含んでいる。使用中に、寿命評価モジュール５１４は、ストレージバス５０２を介してコンピュータ５０１からコントローラ５１１に通信されるコマンドを受け取るように働く。さらに、寿命評価モジュール５１４は、バス５１２を介して受け取った（一つ又は複数の）コマンドが実行されたと仮定して推定寿命を計算する。
【００３２】
[0043]図５の参照を続ける。寿命推定モジュール５１４は、バス５１５を介してスロットリングモジュール５１６に結合されている。寿命推定モジュール５１４は、バス５１５を使用して、コントローラ５１１によって現在実行されているコマンドに関する推定寿命をスロットリングモジュール５１６に渡す。現在実行されているコマンドは、一実施形態では、バス５１２を介して寿命推定モジュール５１４によって受け取れたコマンドと同一とすることができ、また、ストレージバス５０２を介してコンピュータ５０１からコントローラ５１１によって受け取られたコマンドと同一とすることができる。
【００３３】
[0044]現在時刻モジュール５１７は、バス５１８を介してスロットリングモジュール５１６にも結合されている。したがって、現在時刻モジュール５１７からの現在時刻を、スロットリングモジュール５１６にも渡すことができる。一実施形態で、現在時刻モジュール５１７は、例えば、一定のタイムインターバルで増分される単純なカウンタなどとして実施することができる。
【００３４】
[0045]スロットリングモジュール５１６は、バス５１９を介して必要寿命モジュール５２０に更に結合されており、バス５１３を介してコントローラ５１１に結合されている。使用中に、必要寿命モジュール５２０は、所望の寿命を格納するようになっている。この設計によって、スロットリングモジュール５１６は、バス５１３を介してコントローラ５１１に情報を渡して、現在のコマンドの実行を遅延させるようコントローラ５１１に指示するように、構成することができる。
【００３５】
[0046]一実施形態で、装置５１０のスロットリングモジュール５１６は、寿命に対する現在のコマンドの実行の影響が、推定される寿命が必要寿命モジュール５２０に格納された必要寿命以上になるものとなるまで、現在のコマンドの実行が遅延されるように動作することができる。スロットリングモジュール５１６の機能は、一実施形態で、バス５１５を介して受け取った推定寿命がバス５１９を介して受け取った必要寿命より短い場合に、コントローラ５１１に遅延信号を供給すること程度に単純にすることができる。
【００３６】
[0047]別の実施形態では、コントローラ５１１、寿命評価モジュール５１４、及びスロットリングモジュール５１６の上で説明した機能を、所定のタイムインターバルにおいて受け取られるコマンドのグループに適用してもよい。そのような構成によって、システム５００は、寿命を縮めるであろうコマンドの短いバーストを不必要に抑制せずに、必要寿命を満足することを可能とし得る。例えば１日としてタイムインターバルを選択することによって、そのような技法は、システム５００が、寿命を縮めるコマンドのより高い瞬間的性能を提供することを可能にする。というのは、１日のある期間（例えば、夜間）においては、寿命を縮めるコマンドの平均頻度と比較して少ない頻度の寿命を減らすコマンドが存在する時間のインターバルがあり得るからである。
【００３７】
[0048]一つのオプションの実施形態では、コヒーレンシ（一貫性）を時間とともに維持することができる。コヒーレンシ法の一例として、寿命を減らすコマンドＡが遅延される場合には、Ａのデータ又はコマンドＡの実行から生じる値に依存する全てのコマンド（寿命を減らすものであってもなくても）も、遅延される。
【００３８】
[0049]別の実施形態では、時刻を、ディスクがパワーアップされている時刻といったように、時刻の様々な近似に置換することができる。別の実施形態では、コンピュータ５０１、ＲＡＩＤコントローラ、及び／又は他のデバイスが、追跡される時刻の精度を高めるために追加情報を提供することができる。したがって、ストレージデバイス５３０、５４０のうちの一以上の電源が入れられる時に、時間カウンタはカウントしていない。実時間は進みつつあるので、これは、性能を不必要に下げる可能性がある。そのようなシナリオでは、コンピュータ５０１、ソフトウェア、及び／又はコントローラが、そのような問題に対処するために、システム５００の電源が切られる時に関する情報を提供することができる。
【００３９】
[0050]別の実施形態では、システム５００は、コストを下げ性能を改善するためにストレージデバイス内冗長性機能を備えていてもよい。そのような実施形態では、データを、個々のストレージデバイス５３０、５４０の間で、その寿命に関連する任意の特徴に基づいて移動することができる（例えば、図１の動作１０２などを参照されたい）。例えば、ストレージデバイスの第１の部分５３０が、ストレージデバイスの第２の部分５４０のデータに対してより頻繁に上書きされるデータのセットを含むという状況があり得る。その場合に、所定の時間の後に、そのようなデータを、第１ストレージデバイス５３０から第２ストレージデバイス５４０に移動することができ、今後、第１ストレージデバイス５３０又は一以上のブロック／モジュール５３１、５３２、５３３を、より低い頻度で書き込まれるデータを格納するために使用するか、更なる使用から退かせることができる。
【００４０】
[0051]このために、ストレージデバイスウェアを適当に分散させて、あるストレージデバイスが、グループの他のストレージデバイスに対してあまりにも早すぎる時点で障害を発生することを防ぐことができる。もちろん、本技法は、異なるストレージデバイスの間だけではなく、その一部にも適用することができる。このために、任意のメモリコンポーネントの寿命を、そのような形で管理することができる。
【００４１】
[0052]何れの場合であっても、コントローラ５１１は、書込みを減らし、及び／又は書込みを分散するために構成され得る。この特徴によって、適当なストレージデバイス５３０、５４０の寿命を延ばすことができる。そのような技法を実行する一つの例示的方法を、図６の説明中に示す。
【００４２】
[0053]図６は、別の実施形態による、所望の寿命持続時間が推定された寿命持続時間を超える場合に、メモリの寿命を縮める動作を遅延させる方法６００を示している。オプションとして、本方法６００を、図５のシステム５００を使用して実行することができ、及び／又は、更なるオプションでは図１〜４の技法のいずれかを組み込むことができる。しかし、もちろん、方法６００を任意の所望の形で実行することができる。それでも、前述の定義が、この説明中にあてはまり得る。
【００４３】
[0054]動作６０１を開始すると、方法６００は、コントローラ（例えば、図５のコントローラ５１１など）によって継続され、コンピュータ（例えば、コンピュータ５０１など）によって少なくとも一つのストレージデバイス（例えば、ストレージデバイス５３０、５４０など）へ発行されるコマンドを待つ６０２。コマンドがコントローラによって受け取られると、この方法は、判断６０３に進み、この時に、コントローラは、動作６０２で受け入れられたコマンドが寿命を縮めるコマンド（例えば、消去動作、書込み動作など）であるか否かを判定する。判断６０３で、現在受け取られているコマンドが寿命を縮めるものではないと判定される場合には、そのようなコマンドは、動作６０７によって単純に処理することができる。
【００４４】
[0055]一方、判断６０３で、現在受け取られているコマンドが実際に寿命を縮めるものであると判定される場合には、推定寿命を、動作６０２で受け取られたコマンド、以前の寿命、及び現在時刻（例えば、時刻モジュール５１７を介してなど）に基づいて、寿命評価モジュール（例えば、寿命エスティメータモジュール５１４など）によって計算する。動作６０４を参照されたい。一実施形態では、以前の寿命は、寿命推定モジュールの以前の状態を表すことができる。別の実施形態では、以前の寿命は、少なくとも一つのストレージデバイスの一以上の特性を測定することによって得ることができる。
【００４５】
[0056]如何なる場合でも、そのような寿命評価モジュールによって推定される寿命は、その後、スロットリングモジュール（例えば、スロットリングモジュール５１６など）に供給される。判断６０５では、スロットリングモジュールが、寿命評価モジュールから受け取られた推定寿命がスロットリングモジュールに送られた必要寿命より短い場合に、スロットリングが必要であると判定する。スロットリングが必要な場合には、方法６００は、動作６０６において、寿命を縮めるコマンドを遅延させる（例えば、抑制などによって）ことによって進行する。しかし、推定寿命が必要寿命より短くはない場合には、方法６００は、上で示した動作６０７に進む。
【００４６】
[0057]具体的には、動作６０６で、スロットリングモジュールが、コントローラを使用して、寿命を縮めるコマンドの実行を抑制することができる。一実施形態で、そのような抑制は、寿命評価モジュールによって推定される寿命が必要寿命以上になるまで、コントローラを使用して寿命を縮めるコマンドの実行を遅延させることによって実施することができる。
【００４７】
[0058]別の実施形態では、抑制を、所定の時間期間内に判定し、後続の所定の時間期間にコマンドに適用することができる。そのような実施形態では、所定のタイムインターバル内で寿命をどれほど縮めることができるかに関して限度を設けることができる。更に別の実施形態では、あるタイムインターバル内にどれほど寿命を縮めることができるかに関する限度を、一以上の以前のタイムインターバルにおいて判定することができる。更に別の実施形態では、抑制を、複数の保留中の動作の分析に基づいて決定し、寿命を縮めない動作を、寿命を縮める動作又はそのような寿命を縮める動作に依存する動作の前に実行することを可能とし得る。
【００４８】
[0059]この設計によって、必要最小寿命を保証するために寿命を縮める動作を制御するデータストレージシステムを提供することができる。したがって、そのような最小必要寿命に対して寿命を縮める動作の影響を推定することができ、寿命を縮める動作の頻度を、適応的に制約することができる。
【００４９】
[0060]図７は、別の実施形態による、メモリの寿命を測定するグラフィカルユーザインターフェース７００を示している。オプションとして、このグラフィカルユーザインターフェース７００を、図１〜６の機能及びアーキテクチャの下で実施することができる。しかし、もちろん、グラフィカルユーザインターフェース７００を任意の所望の環境で実施してもよい。やはり、前述の定義が、この説明中にあてはまり得ることにも留意されたい。
【００５０】
[0061]図示するように、様々な表示を、メモリの寿命に関連する少なくとも一つの特徴を反映して提示することができる。一実施形態で、そのような特徴は、図１の動作１０２で特定されるものであってもよい。しかし、もちろん、この寿命関連の特徴は、メモリの寿命に少なくとも部分的に関連する任意の所望の特徴であってもよい。例えば、図５のシステム５００では、この特徴を、処理され及び／又はコンピュータ５０１に単純に渡されるために図示のモジュールのいずれかからコントローラ５１１によって取り出されるものとすることができ、そしてこのコンピュータ５０１は、ソフトウェアアプリケーションプログラム（例えば、プラグインなど）の制御の下で関連する表示を提示することができる。
【００５１】
[0062]例えば、前述の表示は、一実施形態では、一以上のメモリについて残っている寿命の量を示すゲージ７０２を含むことができる。そのような実施形態では、ゲージ７０２は、時間の経過に伴い実行された寿命を縮める動作の回数の関数として残っている総メモリ寿命の長さを示すことができる。別の実施形態では、前述の表示は、以前の使用の外挿に基づき、抑制動作の一時停止を仮定した寿命を示す推定値７０５を示すことができる。
【００５２】
[0063]別の実施形態では、前述の表示は、一以上のメモリについて最小限の量の寿命が残っていることを示す警告７０４を含むことができる。そのような寿命は、例えば、メモリ使用量履歴データに基づいて推定することができる。この設計によって、ユーザは、所定の時間の間にメモリを交換しなければならない状況などについて警告を受けることができる。もちろん、任意の所望の表示を使用して、メモリの寿命に関連する様々な情報を報告する他の実施形態が考えられる。
【００５３】
[0064]図８は、別の実施形態による、差情報を利用してメモリ内の書込み動作を減らす方法８００を示している。オプションとして、この方法８００を、図１〜７の機能及びアーキテクチャに関連して実行してもしなくてもよい。しかし、もちろん、方法８００を、任意の所望の環境で実施してもよい。やはり、前述の定義が、この説明中にあてはまり得ることにも留意されたい。
【００５４】
[0065]図示するように、まず、メモリに格納されたデータに対して実行される書込み動作が特定される。動作８０２を参照されたい。この説明では、そのような書込み動作は、メモリに格納されたデータの変更をもたらす全ての動作を含み得る。さらに、そのような書込み動作を、そのような動作に関連する書込みコマンド、書込み動作自体などを傍受することによって任意の所望の方法で特定することができる。
【００５５】
[0066]動作８０４に示すように、次に、書込み動作の結果とメモリに格納されたデータとの間の差を求める。この説明では、前述の差は、少なくとも部分的に、メモリに格納されたデータの第１状態と、前述の書込み動作から生じる第２状態との間の全ての差を反映することができる。
【００５６】
[0067]別の実施形態では、メモリに格納された任意のデータの間の差を、求めることができる。例えば、メモリの異なる位置からのデータの差を求めるように、ファイルの新しい変更された版が、作成され、メモリの新しい位置に書き込まれてもよい。オプションとして、データの位置を、ハッシュ、ブルームフィルタなどに基づいて特定することができる。このために、同一データの異なるインスタンスがメモリ内の異なる位置に書き込まれる一つの例示的実施形態では、求められた差が、データの位置を含んでいてもよく、必ずしもデータ自体を含まなくてもよい。
【００５７】
[0068]一実施形態では、差に関連する差情報を、メモリ（例えば、データが格納されるのと同一のメモリなど）に格納することができる。別の実施形態では、差情報を、後に異なる実施形態の説明中に詳しく述べる態様で、別々のバッファに格納することもできる。差情報が、少なくとも部分的に動作８０４で求められる差を記述する全ての情報を含むことができることに留意されたい。後に説明する実施形態の議論においてやがて明白になるように、差情報は、一実施形態では、命令セットを利用して格納することができる。やはり以下に説明するように、そのような命令セットは、様々な実施形態では、適応的に変更し、及び／又は動的に拡張することができる。
【００５８】
[0069]このために、書込み動作を、差情報を利用して減らすことができる。動作８０６を参照されたい。この設計によって、書込み動作のそのような減少が、オプションで、メモリの寿命をのばすことができる。
【００５９】
[0070]以下、より例示的な情報を、様々なオプションのアーキテクチャ及び特徴に関して示す。なお、前述のフレームワークを、ユーザの希望に従って、これらのアーキテクチャ及び特徴を用いて、実施してもしなくてもよい。例えば、一つの例示的システムを、差情報に基づいて書込み情報を減らす一つの例示的な方法の実施について示す。以下の情報が、例示のために示され、いかなる形でも限定的と解釈されてはならないことに強く留意されたい。次の特徴のいずれをも、説明される他の特徴を除外して又は除外せずにオプションで組み込むことができる。
【００６０】
[0071]図９は、別の実施形態による、メモリ内の書込み動作を減らすシステム９００を示している。オプションとして、このシステム９００を、図８の方法８００を実行し、及び／又は、更なるオプションで図１〜７の方法又は技法のいずれかを組み込むために実施することができる。しかし、もちろん、システム９００を、任意の所望の態様で使用してもよい。やはり、前述の定義が、この説明中にあてはまり得る。
【００６１】
[0072]図示するように、システム９００は、下に説明する態様で入出力（Ｉ／Ｏ）バス９０２を介してストレージデバイス９３０に結合されたコンピュータ９０１を含んでいる。Ｉ／Ｏバス９０２は、読取り経路９０３及び書込み経路９０４を含んでいる。ストレージデバイス９３０は、複数のストレージブロック９３１、９３２、９３３を含んでいる。ストレージブロック９３１、９３２、９３３は、コンピュータ９０１によって書き込まれ、読み取られる。
【００６２】
[0073]やがて明白になるように、ストレージブロック９３１、９３２、９３３の各々の所定の部分９３４を、差情報を格納するために割り振ることができる。当該差情報は、対応するストレージブロック９３１、９３２、９３３の残りの部分９３５に格納されたデータに対して行われる、コンピュータ９０１による全ての変更を反映するものである。様々な実施形態では、所定の部分９３４のサイズは、ユーザが設定することができる。さらに、そこに格納される差情報は、任意の形態をとることができる。
【００６３】
[0074]表１は、差情報の例を表す一つの候補フォーマットを示している（複数の差情報を、ストレージブロック９３１、９３２、９３３の各所定の部分９３４に格納することができる）。
【表１】
0005448013.tif 000002
【００６４】
[0075]この実施形態では、オペレーションコードは、対応するストレージブロック９３１、９３２、９３３の残りの部分９３５に格納されたデータに対して実行される動作を表すことができる。そのような動作の例は、ｅｎｄ（終了）、ｒｅｐｌａｃｅ（置換）、ｍｏｖｅ  ｕｐ（上に移動）、ｍｏｖｅ  ｄｏｗｎ（下に移動）、ｄｅｌｅｔｅ（削除）、ｉｎｓｅｒｔ（挿入）、及び／又はさらに言えば任意の他の動作を含むことができるが、これらに限定はされない。オプションとして、そのような動作のそれぞれが、コンパクト表現用の関連するコード（例えば、ｒｅｐｌａｃｅ＝’００１’、ｍｏｖｅ  ｕｐ＝’０１０’など）を有し得る。
【００６５】
[0076]さらに、ソース開始アドレス及びサイズが、動作の対象になるべき、対応するストレージブロック９３１、９３２、９３３の残りの部分９３５内に格納されたデータを指し、そのサイズを示す（それぞれ）ことができる。さらに、動作が、データの置換／変更などを要求する状況では、データ自体を、差情報の構成要素として格納することができる。更に別のオプションとして、圧縮アルゴリズムを、より効率的なストレージのために差情報に適用することができる。別のオプションとして、動作がデータの移動を要求する状況では、データが元のストレージブロックに含まれているので、必ずしもデータ自体ではなく、データのソース位置を指定することができる。
【００６６】
[0077]別の実施形態では、新しい動作を、適応的に作成することができる。例えば、第１動作の繰り返しシーケンスを、新しい第２動作によって置換することができる。そのような新しい第２動作は、第１動作のシーケンスを記述するものであってもよい。このように、新しい動作を適応的に作成することができ、システム９００が、新しい応用例にそれ自体を最適に適応させることができる。
【００６７】
[0078]もちろん、表１のデータ構造は、例示のみのために示したものであって、いかなる形であれ限定的と解釈されてはならない。例えば、差情報のインスタンスを、単純に、置換されるデータに含める（複雑なコマンドなどを伴わずに）ことができる。
【００６８】
[0079]さらに、メモリ内の書込み動作を減らすために、装置９１０が設けられている。かかる装置９１０は、複数の一体化バッファ９２１、９２２、９２３を含む一体化メモリ９２０を含んでいる。一実施形態では、一体化バッファ９２１、９２２、９２３のそれぞれのサイズを、所定のサイズ（例えば、４Ｋｂなど）を有するものとすることができる。当該所定のサイズは、単一の動作でストレージブロック９３１、９３２、９３３のそれぞれに書き込み得る最小ブロック部分に相関するサイズであってもよい。さらに、様々な実施形態では、一体化バッファ９２１は、オンチップストレージ、外部メモリ、ＤＲＡＭ、ＳＲＡＭなどであってもよい。
【００６９】
[0080]すぐに明白になるように、一体化メモリバッファ９２１、９２２、９２３は、それぞれ、対応するストレージブロック９３１、９３２、９３３の差情報（例えば、表１を参照されたい）のインスタンスを保持する。即ち、複数の一体化メモリバッファうちの第１のバッファ９２１は、複数のストレージブロックのうちの第１のブロック９３１の差情報のインスタンスを保持し、複数の一体化メモリバッファのうちの第２のバッファ９２２は、複数のストレージブロックのうちの第２のブロック９３２の差情報のインスタンスを保持し、複数の一体化メモリバッファのうちの第３のバッファ９２３は、複数のストレージブロックのうちの第３のブロック９３３の差情報のインスタンスを保持し、以下同様である。
【００７０】
[0081]装置９１０は、バス９１４を介して一体化メモリ９２０に結合された更新モジュール９１２を更に含んでいる。更新モジュール９１２は、一体化メモリバッファ９２１、９２２、９２３に格納された差情報を対応するストレージブロック９３１、９３２、及び９３３に書き込むためのものである。一実施形態では、そのような書込みは、一体化メモリバッファ９２１、９２２、９２３のうちの一つに差情報の少なくとも一つのインスタンスが書き込まれる（したがって、ストレージブロック９３１、９３２、及び９３３のうち適当な一つへの最小書込みサイズを構成する）時に開始し得る。この書込みを達成するために、更新モジュール９１２は、バス９１５を介してストレージデバイス９３０に結合されている。更に図示するように、更新モジュール９１２の出力は、読取り経路９０３を介してＩ／Ｏバス９０２に結合されている。
【００７１】
[0082]さらに、差計算モジュール９１１が、読取り経路バス９０３を介して更新モジュール９１２に結合され、書込み経路バス９０４を介してＩ／Ｏバス９０２に結合され、さらに、バス９１３を介して一体化メモリ９２０に結合されている。使用中に、差計算モジュール９１１は、ストレージデバイス９３０からデータを読み取ることができ、さらに、関連するストレージブロック９３１、９３２、及び９３３及び／又は一体化メモリバッファ９２１、９２２、９２３からの差情報を使用して、そのようなデータの現在の状態を再構成することができる。
【００７２】
[0083]差計算モジュール９１１は、必要に応じて、まずデータの現在の状態を再構成し（上の読取り動作に類似する）、そのような現在の状態と書込み動作（コンピュータ９０１によって開始される）の後に生じる状態との間の差を特定し、関連するストレージブロック９３１、９３２、及び９３３を更新するのに使用される差情報の一以上のインスタンスを一体化メモリバッファ９２１、９２２、９２３に移植することによって、そのようなデータをストレージデバイス９３０に書きこむことが更に可能である。そのような読取り動作及び書込み動作に関するさらなる情報を、以下、図１０及び１１の説明中に示す。
【００７３】
[0084]様々な実施形態では、差計算モジュール９１１は、前述の差を特定するために任意の所望の技法を使用することができる。例えば、様々なストリング照合アルゴリズム、データ移動推定技法などを、例えば利用することができる。さらなる追加の実施形態では、差を、バイト単位で求めることができる。
【００７４】
[0085]さらに、差の計算は、どのバイトストリングが挿入されるかを検出すること、どのバイトストリングが削除されるかを検出すること、どのバイトストリングが置換されるかを検出すること、どのバイトストリングがコピーされるかを検出すること、バイトストリングが値の追加によって更新されるか否かを判定すること、ストレージブロックのコピーを検出しそれらへの参照を作成すること、ブロック分割を検出すること、ブロック結合を検出することなどのうちの任意の一以上のステップを用いてもよい。
【００７５】
[0086]図１０は、一実施形態による、差情報を使用してメモリを読み取る方法１０００を示している。オプションとして、この方法１０００を、図９のシステム９００を使用して実行し、及び／又は更なるオプションでは、必要に応じて図１〜８の技法のいずれかを組み込むことができる。しかし、もちろん、方法１０００を、任意の所望の態様で使用してもよい。ここでも、前述の定義が、この説明中にあてはまり得る。
【００７６】
[0087]図示するように、方法１０００は、コンピュータ（例えば、コンピュータ９０１など）による要求に従ってストレージ（例えば、ストレージデバイス９３０など）からブロック（例えば、図９のブロック９３１、９３２、９３３など）を読み取ることによって動作１００１で開始し得る。読み取られたストレージブロックデータは、次に、更新モジュール（例えば、更新モジュール９１２など）に送られる。次に、読取り動作に応答して、差情報が、ストレージブロック（コンピュータ要求に関連する）に対応する一体化バッファ（例えば、合体するバッファ９２１、９２２、９２３など）から及び／又はストレージブロック自体から読み取られる。動作１００２を参照されたい。差情報の適当なソースは、要求された情報が一体化バッファから対応するストレージブロックに読取り要求時に書き込まれたか否かに依存し得る。オプションとして、差情報を、フラッシュ内のデータの間に散在させることができる。さらに、特定のデータに関する差を、一以上のグループにグループ化してもよい。
【００７７】
[0088]次に、動作１００３で、更新モジュールは、動作１００１で読み取られた対応のブロックに対して、動作１００２からの差情報に反映された差を適用する。このために、動作１００３で再構成されたデータを、読取り経路（例えば、読取り経路９０３など）を介してコンピュータに送ることができる。動作１００４を参照されたい。
【００７８】
[0089]様々な実施形態では、前述のデータ読取り動作は、論理ストレージブロック番号から物理ストレージブロック番号へのマッピングを含み得る。さらに、方法１０００は、読取りに関連する誤り検出及び誤り訂正を提供することができる。そのような読取りデータの誤り検出及び誤り訂正は、さらに、データを回復し、回復されたデータを別のストレージ位置に再配置することを試みる再読取り動作を含むことができる。例えば、回復されたデータのそのような再配置は、論理ストレージブロック変換を用いることができ、及び／又は候補ストレージブロックの誤り率情報に基づくものとすることができる。
【００７９】
[0090]図１１は、一実施形態による、差情報を使用してメモリに書き込む方法１１００を示している。オプションとして、この方法１１００を、図９のシステム９００を使用して実行し、及び／又は、更なるオプションでは、必要に応じて図１〜８、１０の技法のいずれかを組み込むことができる。しかし、もちろん、方法１１００を、任意の所望の態様で使用してもよい。さらに、前述の定義が、この説明中にあてはまり得る。
【００８０】
[0091]図１０の読取り方法１０００に類似して、方法１１００は、コンピュータ（例えば、コンピュータ９０１など）による書込み要求の対象であるストレージ（例えば、ストレージデバイス９３０など）からブロック（例えば、図９のブロック９３１、９３２、９３３など）を読み取ることによって、動作１１０１で開始し得る。読み取られたストレージブロックデータは、その後、更新モジュール（例えば、更新モジュール９１２など）に送られる。次に、動作１１０２で、差情報を、ストレージブロック（コンピュータ要求に関連する）に対応する一体化バッファ（例えば、合体するバッファ９２１、９２２、９２３など）から及び／又はストレージブロック自体から読み取る。次に、動作１１０３で、更新モジュールが、動作１１０１で読み取られた対応のブロックに動作１１０２からの差情報に反映された差を適用して、読み取られ又は書き込まれるデータを再構成する。
【００８１】
[0092]このために、動作１１０３で再構成されるデータを、差計算モジュール（例えば、差計算モジュール９１１など）に送り、コンピュータによって要求された書込み動作の実行から生じるはずのデータの状態と比較することができる。動作１１０４を参照されたい。このために、再構成されたデータと書込み動作の実行から生じるはずのデータの状態との間の差が、特定される。一実施形態では、そのような差は、データを更新するためのアプリケーション（コンピュータ上で動作する）によって引き起こされる可能性がある。そのような更新は、バイトのストリングの置換、バイトのストリングの挿入、バイトのストリングの削除、バイトのストリングのコピーなどを含むことができるが、これらに限定はされない。
【００８２】
[0093]動作１１０５では、動作１１０４で計算された差に関連する差情報を、動作１１０４で計算された少なくとも一つの差が存在するブロックに対応する適切な一体化バッファに付加することができる。そのような付加は、一体化メモリ内の一体化バッファの末尾に書き込むことによって達成することができる。一実施形態では、そのような付加は、さらに、一体化バッファの圧縮解除、データの付加、及び適当な一体化バッファの再圧縮を含むことができる。オプションとして、一体化バッファメモリを、オンデマンドで一体化バッファに再割振りすることができる。
【００８３】
[0094]オプションの実施形態では、差情報を、データに対して実行される機能（例えば、書込みなど）を記述する動作として格納することができる。例えば、差情報は、Ｂツリー内で実行される動作から生じる変化を反映することができ、したがって、そのような動作に関する差を表すことができる。そのようなＢツリーは、オプションで、データベース、メールサーバ、ファイルシステムなどによって利用することができる。
【００８４】
[0095]次に、判断１１０６で、一体化バッファをテストして、それらが満杯であるかどうかを判定する。どの一体化バッファも満杯ではない場合に、方法１１００は、動作１１１０に進む。一方で、少なくとも一つの一体化バッファが満杯である場合には、方法１１００は、動作１１０７に進む。動作１１０７では、全ての満杯の一体化バッファを、差情報に付加する。さらに、そのような満杯の一体化バッファは、動作１１１２に示すように空にされる（再利用などのために）。
【００８５】
[0096]さらに、差情報が満杯であるか否かを判定する（動作１１１４）。方法１１００は、差情報が満杯ではないと判定される場合には動作１１１０に進む。しかし、差情報が満杯であるとの判定に応答して、差情報からの変化をデータに適用する。動作１１１６に留意されたい。さらに、動作１１１８に示すように、適用された変更を有するデータのブロックを書き込み、古いデータを破棄する。さらに、動作１１２０に示すように、差情報を空にする。このために、書き込みを減らし、ブロックに基づくストレージの信頼性を改善するためにメモリブロックにまたがって書き込みを分散させるために、書き込まれるデータと既存データとの間の差を使用するデータストレージシステムを、提供することができる。
【００８６】
[0097]様々な実施形態では、前述の実施形態で述べたメモリは、機械的ストレージデバイス（例えば、ＳＡＴＡディスクドライブ、ＳＡＳディスクドライブ、ファイバチャネルディスクドライブ、ＩＤＥディスクドライブ、ＡＴＡディスクドライブ、ＣＥディスクドライブ、ＵＳＢディスクドライブ、スマートカードディスクドライブ、ＭＭＣディスクドライブなど）及び／又は非機械的ストレージデバイス（例えば、半導体に基づくものなど）を含むことができる。そのような非機械的メモリは、例えば、揮発性メモリ又は不揮発性メモリを含むことができる。様々な実施形態では、不揮発性メモリデバイスは、フラッシュメモリを含むことができる（例えば、セルあたり単一ビットのＮＯＲフラッシュメモリ、セルあたり複数ビットのＮＯＲフラッシュメモリ、セルあたり単一ビットのＮＡＮＤフラッシュメモリ、セルあたり複数ビットのＮＡＮＤフラッシュメモリ、セルあたり複数レベル複数ビットのＮＡＮＤフラッシュ、大ブロックフラッシュメモリなど）。メモリの様々な例を本明細書で示すが、様々な原理を、その寿命がそれに対して実行される様々な動作に起因して減らされ得る任意のタイプのメモリに適用できることに留意されたい。
【００８７】
[0098]図１２は、様々なアーキテクチャ及び／又は様々な前の実施形態の機能を実施できる例示的システム１２００を示している。例えば、例示的システム１２００は、前の実施形態のいくつかで示したコンピュータであってもよい。また、上に示した様々な装置を、システム１２００のコンポーネントとしてもよい。
【００８８】
[0099]図示するように、システム１２００は、通信バス１２０２に接続された少なくとも一つのホストプロセッサ１２０１を含んで提供される。また、システム１２００は、メインメモリ１２０４を含む。制御論理（ソフトウェア）及びデータが、メインメモリ１２０４に格納され、メインメモリ１２０４は、ランダムアクセスメモリ（ＲＡＭ）の形をとることができる。
【００８９】
[00100]システム１２００は、また、グラフィックスプロセッサ１２０６及びディスプレイ１２０８すなわちコンピュータモニタを含む。システム１２００は、二次ストレージ１２１０を含むこともできる。二次ストレージ１２１０は、例えば、ハードディスクドライブ及び／又は、フロッピディスクドライブ、磁気テープドライブ、コンパクトディスクドライブなどを表すリムーバブルストレージドライブを含む。リムーバブルストレージドライブは、周知の方法でリムーバブルストレージモジュールから読み取り、及び／又はこれに書き込む。
【００９０】
[00101]コンピュータプログラム、又はコンピュータ制御論理アルゴリズムを、メインメモリ１２０４及び／又は二次ストレージ１２１０に格納することができる。そのようなコンピュータプログラムは、実行時に、システム１２００が様々な機能を実行することを可能にする。メモリ１２０４、ストレージ１２１０、及び／又は任意の他のストレージは、コンピュータ可読媒体の可能な例である。
【００９１】
[00102]一実施形態で、様々な前の図面のアーキテクチャ及び／又は機能を、ホストプロセッサ１２０１、グラフィックスプロセッサ１２０６、二次ストレージ１２１０、ホストプロセッサ１２０１とグラフィックスプロセッサ１２０６の双方の能力の少なくとも一部が可能な集積回路（図示せず）、チップセット（すなわち、関連する機能を実行するモジュールとして働くように設計され、そのようなモジュールとして販売される集積回路のグループなど）、並びに／或いは、さらに言えば任意の他の集積回路で実施することができる。
【００９２】
[00103]さらに、様々な先述の図面のアーキテクチャ及び／又は機能を、汎用コンピュータシステム、回路基板システム、エンターテイメント目的の専用ゲーム機システム、特定用途向けシステム、及び／又は任意の他の所望のシステムで実施することができる。例えば、システム１２００は、デスクトップコンピュータ、ラップトップコンピュータ、及び／又は任意の他のタイプの論理の形態をとることができる。さらに、システム１２００は、携帯情報端末（ＰＤＡ）デバイス、携帯電話機デバイス、テレビジョンなどを含むがこれらに限定はされない様々な他のデバイスの形態をとることができる。
【００９３】
[00104]さらに、図示しないが、システム１２００を、通信のためにネットワーク［例えば、遠隔通信ネットワーク、ローカルエリアネットワーク（ＬＡＮ）、無線ネットワーク、インターネットなどの広域ネットワーク（ＷＡＮ）、ピアツーピアネットワーク、ケーブルネットワークなど］に結合することができる。
【００９４】
[00105]様々な実施形態を上に説明したが、これらが、限定ではなく例としてのみ提供されたことを理解されたい。したがって、好ましい実施形態の広さ及び範囲は、上に説明した例示的実施形態によって限定されるのではなく、添付の特許請求の範囲及びその均等物に従ってのみ定義されなければならない。
【図１】
0005448013.tif 000003
【図２】
0005448013.tif 000004
【図３】
0005448013.tif 000005
【図４】
0005448013.tif 000006
【図５】
0005448013.tif 000007
【図６】
0005448013.tif 000008
【図７】
0005448013.tif 000009
【図８】
0005448013.tif 000010
【図９】
0005448013.tif 000011
【図１０】
0005448013.tif 000012
【図１１】
0005448013.tif 000013
【図１２】
0005448013.tif 000014