(57)【特許請求の範囲】
【請求項１】
電子装置のコントロール回路を使用して、ツリーに現在使用できるメモリの量が所定のスレッシュホールドより少ないことを検出する段階であって、前記ツリーは、不揮発性メモリ（ＮＶＭ）の論理的スペースと物理的アドレスとの間の論理的−物理的マッピングを記憶するものである段階と、
前記コントロール回路を使用して、メモリインターフェイスが前記ツリーを横切って少なくとも２つのスライディングウインドウを移動させる段階と、
前記電子装置の揮発性メモリを使用して、前記少なくとも２つのスライディングウインドウに対応する少なくとも２つの最小スパンを、前記メモリインターフェイスがその少なくとも２つのスライディングウインドウを前記ツリーを横切って移動させるときに、維持する段階と、
前記コントロール回路を使用して、前記少なくとも２つのスライディングウインドウが前記ツリーを横切る移動を終了したことを決定する段階と、
前記コントロール回路を使用して、前記ツリーのノードに含まれるエントリのセットを、前記少なくとも２つの最小スパン間の比較に少なくとも一部分基づき平坦化することを選択する段階と、を備えた高速ツリー平坦化方法。
【請求項２】
前記少なくとも２つのスライディングウインドウは、各々、前記ツリーの異なる数のエントリを包囲する、請求項１に記載の方法。
【請求項３】
前記エントリのセットは、論理的に隣接するエントリを含む、請求項１又は２に記載の方法。
【請求項４】
前記少なくとも２つの最小スパンを維持する段階は、
前記少なくとも２つのスライディングウインドウの各々に対し、前記コントロール回路を使用して、前記スライディングウインドウにより新たに包囲されるエントリのスパンをランニングカウンタに加算する段階、及び
前記スライディングウインドウによりもはや包囲されないエントリのスパンを前記ランニングカウンタから減算する段階、
を含む請求項１又は２に記載の方法。
【請求項５】
前記コントロール回路を使用して、前記ランニングカウンタを、前記揮発性メモリにセーブされた最小スパンと比較する段階、
前記コントロール回路を使用して、前記ランニングカウンタが前記最小スパンより小さいかどうか決定する段階、及び
前記ランニングカウンタが前記最小スパンより小さいとの前記決定に応答し、前記コントロール回路を使用して、前記ランニングカウンタを最小スパンとして置き換える段階、を更に含む請求項４に記載の方法。
【請求項６】
前記ランニングカウンタが前記最小スパンより大きいとの前記決定に応答し、前記コントロール回路を使用して、前記最小スパンを保持する段階を更に含む、請求項５に記載の方法。
【請求項７】
前記選択段階は、前記少なくとも２つの最小スパンのどちらが小さな値を有するか決定することを含む、請求項１又は２に記載の方法。
【請求項８】
前記少なくとも２つのスライディングウインドウは、ツリーを横切って並列に移動する及びツリーを横切って連続的に移動する、の少なくとも一方である、請求項１又は２に記載の方法。
【請求項９】
不揮発性メモリ（ＮＶＭ）と、
ノードに含まれる複数のエントリを含むツリーであって、前記ＮＶＭの論理的スペースと物理的アドレスとの間の論理的−物理的マッピングを与えるツリーを記憶するための揮発性メモリと、
メモリインターフェイスであって、
前記ツリーに現在使用できるメモリの量が所定のスレッシュホールドより少ないことを検出し、
前記ツリーの複数のエントリを横切ってスライディングウインドウを移動させ、スライディングウインドウは、前記ツリーの所定数のエントリを包囲するものであり、
前記スライディングウインドウにより包囲されたエントリのセットがそのエントリのセットにおけるエントリ数に等しいスパンを有することを決定し、
前記スライディングウインドウにより包囲された所定数のエントリを拡張して、拡張スライディングウインドウを発生し、
前記拡張スライディングウインドウを前記ツリーの複数のエントリの少なくとも一部分に適用し、
前記拡張スライディングウインドウにより発生されたランニングカウンタの値が所定値に等しいかどうか決定し、
前記拡張スライディングウインドウにより発生されたランニングカウンタの値が所定値に等しいとの決定に応答して、前記拡張スライディングウインドウにより発生されたツリーのエントリのセットをツリー平坦化のために選択する、
ように動作するコントロール回路を含むメモリインターフェイスと、
を備えたシステム。
【請求項１０】
前記コントロール回路は、前記スライディングウインドウの所定数のエントリを、前記ＮＶＭのストライプのサイズの倍数で拡張するように動作する、請求項９に記載のシステム。
【請求項１１】
前記コントロール回路は、前記スライディングウインドウを、ストライプ境界と整列させるように拡張するよう動作する、請求項９又は１０に記載のシステム。
【請求項１２】
前記拡張ウインドウにより発生されたランニングカウンタの値が所定値に等しくないとの決定に応答して、前記コントロール回路は、前記スライディングウインドウにより発生されたツリーのエントリのセットをツリー平坦化のために選択するように動作する請求項９に記載のシステム。
【請求項１３】
前記ＮＶＭと通信するためのバスコントローラを更に備え、前記コントロール回路は、
前記エントリのセットに対応するデータを前記ＮＶＭから読み取るように前記バスコントローラに指令し、
前記データを前記揮発性メモリにセーブし、
前記データを前記ＮＶＭのスーパーブロックへプログラムするように前記バスコントローラに指令する、
ように動作する請求項１２に記載のシステム。
【請求項１４】
不揮発性メモリ（ＮＶＭ）にアクセスするためのメモリインターフェイスにおいて、
揮発性メモリに記憶されるツリーに現在使用できるメモリの量が所定のスレッシュホールドより少ないことを検出し、
スライディングウインドウに適合するツリーのノードに含まれる第１の複数のエントリを検出し、
前記第１の複数のエントリに関連したパラメータをプライオリティキューにエレメントとして挿入するよう試み、
前記スライディングウインドウをツリーにおいて前方にエントリの数だけ移動させ、そのエントリの数は、前記プライオリティキューの現在状態に少なくとも一部分基づくものである、
ツリー平坦化のためのスライディングウインドウによって生成されたツリーのエントリのセットを選択する、
ように動作するコントロール回路を備えたメモリインターフェイス。
【請求項１５】
前記コントロール回路は、
前記スライディングウインドウが前記ツリーを横切る移動を終了したことを検出し、
前記プライオリティキューを使用してエントリの最適セットを探索する、
ように動作する請求項１４に記載のメモリインターフェイス。
【請求項１６】
前記コントロール回路は、更に、
前記プライオリティキューがいっぱいであるかどうか決定し、
前記プライオリティキューがいっぱいでないとの決定に応答して、前記第１の複数のエントリに関連したパラメータを前記プライオリティキューにエレメントとして挿入し、
前記スライディングウインドウをツリーにおいて前方に１つのエントリだけ移動させる、ように動作する請求項１４又は１５に記載のメモリインターフェイス。
【請求項１７】
前記プライオリティキューがいっぱいであるとの決定に応答して、前記コントロール回路は、更に、
前記第１の複数のエントリに関連したパラメータが挿入可能であるかどうか決定し、
前記パラメータが挿入可能であるとの決定に応答して、前記パラメータを前記プライオリティキューにエレメントとして挿入し、
前記スライディングウインドウをツリーにおいて前方に前記第１の複数のエントリにおけるエントリ数に等しいエントリ数だけ移動させる、
ように動作する請求項１６に記載のメモリインターフェイス。
【請求項１８】
前記コントロール回路は、更に、前記プライオリティキューの端においてエレメントを退去させるように動作する、請求項１７に記載のメモリインターフェイス。
【請求項１９】
前記パラメータが挿入可能でないとの決定に応答して、前記コントロール回路は、前記スライディングウインドウをツリーにおいて前方に１つのエントリだけ移動させるように動作する、請求項１７に記載のメモリインターフェイス。
【請求項２０】
前記プライオリティキューは、順序付けされたリストであり、低いプライオリティ番号を伴うエレメントは、リストの前部へ移動し、そして高いプライオリティ番号を伴うエレメントは、リストの後部へ移動する、請求項１４又は１５に記載のメモリインターフェイス。
【請求項２１】
前記コントロール回路は、
付加的なスライディングウインドウに適合するツリーの第２の複数のエントリを検出し、更に、
前記第１の複数のエントリに関連したパラメータ及び前記第２の複数のエントリに関連したパラメータを少なくとも２つのプライオリティキューにエレメントとして挿入するよう試み、前記少なくとも２つのプライオリティキューの各々は、前記スライディングウインドウ及び付加的なスライディングウインドウの一方に関連付けられる、請求項１４又は１５に記載のメモリインターフェイス。
【請求項２２】
前記コントロール回路は、
前記プライオリティキューに基づき、エントリの最適セットが検出されたかどうか決定し、
エントリの最適セットが検出されたとの決定に応答して、前記スライディングウインドウにより包囲される所定数のエントリを拡張して、拡張スライディングウインドウを発生し、そして
前記拡張スライディングウインドウを前記ツリーに適用する、
ように動作する請求項１４又は１５に記載のメモリインターフェイス。
【請求項２３】
ツリーに現在使用できるメモリの量が所定のスレッシュホールドより少ないことを検出する手段であって、前記ツリーは、不揮発性メモリ（ＮＶＭ）の論理的スペースと物理的アドレスとの間の論理的−物理的マッピングを記憶するものである手段と、
前記ツリーを横切って少なくとも２つのスライディングウインドウを移動させる手段と、
前記少なくとも２つのスライディングウインドウに対応する少なくとも２つの最小スパンを、その少なくとも２つのスライディングウインドウが前記ツリーを横切って移動させるときに、維持する手段と、
前記少なくとも２つのスライディングウインドウが前記ツリーを横切る移動を終了したことを決定する手段と、
前記ツリーのノードに含まれるエントリのセットを、前記少なくとも２つの最小スパン間の比較に少なくとも一部分基づき平坦化することを選択する手段と、
を備えた高速ツリー平坦化システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、不揮発性メモリを有するシステムのための高速ツリー平坦化に関する。
【背景技術】
【０００２】
ＮＡＮＤフラッシュメモリ、及び他の形式の不揮発性メモリ（ＮＶＭ）は、大量記憶のために一般的に使用されている。例えば、ポータブルメディアプレーヤのような消費者向け電子装置は、多くの場合、音楽、ビデオ及び他のメディアを記憶するためにフラッシュメモリを備えている。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
ＮＶＭを有するシステムは、ファイルシステムにより使用される論理的アドレスをＮＶＭの物理的アドレスへマップする（例えば、論理的−物理的マッピングを与える）データ構造を含むことができる。この構造は、時々、揮発性メモリに存在する。既存のファイルが更新されるか又は付加的なファイルが追加されるときには、マッピングを記憶するのに必要なメモリの量がそれに応じて増加する。従って、あるケースでは、その構造に割り当てられたメモリ量では、全ての論理的−物理的マッピングを捕獲するのに不充分である。
【課題を解決するための手段】
【０００４】
不揮発性メモリ（ＮＶＭ）を有するシステムのための高速ツリー平坦化を行うシステム及び方法が開示される。システムの揮発性メモリにツリーが記憶され、ツリーは、ＮＶＭの論理的スペースと物理的アドレスとの間の論理的−物理的マッピングを含む。ツリーに使用できるメモリの量が所定のスレッシュホールドより少ない場合に、システムは、ＮＶＭにおけるデータ断片の数を減少するよう試み、その結果、ツリーの一部分を平坦化することができる。解放されたツリーメモリの量は、ツリーメモリプールに追加されて戻される。ＮＶＭインターフェイスは、例えば、ツリーを横切って１つ以上のスライディングウインドウを移動し、条件が満足されたときにスライディングウインドウを拡張し、ツリーをスキャニングしながらプライオリティキューを使用し、及び／又はツリーが更新される間にプライオリティキューを維持する、等の適当な解決策に基づいて合成すべきツリーのエントリの最適なセットを選択する。
【０００５】
本発明の前記及び他の態様及び効果は、全体にわたって同じ部分が同じ参照文字で示された添付図面を参照してなされた以下の詳細な説明を考慮したときに明らかとなろう。
【図面の簡単な説明】
【０００６】
【図１】本発明の種々の実施形態により構成された電子装置のブロック図である。
【図２】本発明の種々の実施形態により構成された電子装置のブロック図である。
【図３】本発明の種々の実施形態による不揮発性メモリの機能図である。
【図４】本発明の種々の実施形態による論理的ブロックアドレスから物理的ページへのマッピングを例示するブロック図である。
【図５】本発明の種々の実施形態により論理的−物理的マッピングを与えるのに使用されるツリーの一部分を例示するブロック図である。
【図６】本発明の種々の実施形態による論理的ブロックアドレスから物理的ページへの別のマッピングを例示するブロック図である。
【図７】本発明の種々の実施形態により論理的−物理的マッピングを与えるのに使用される別のツリーの一部分を例示するブロック図である。
【図８】本発明の種々の実施形態による高速ツリー平坦化プロセスを例示するフローチャートである。
【図９】本発明の種々の実施形態により不揮発性メモリに物理的に隣接する断片を発生するプロセスを例示するフローチャートである。
【図１０Ａ】本発明の種々の実施形態により高速ツリー平坦化を行う別のプロセスを例示するフローチャートである。
【図１０Ｂ】本発明の種々の実施形態により高速ツリー平坦化を行う別のプロセスを例示するフローチャートである。
【図１１】本発明の種々の実施形態により高速ツリー平坦化を行う更に別のプロセスを例示するフローチャートである。
【図１２】本発明の種々の実施形態によるプライオリティキューのブロック図である。
【図１３】本発明の種々の実施形態により高速ツリー平坦化を行う更に別のプロセスを例示するフローチャートである。
【図１４】本発明の種々の実施形態による別のプライオリティキューのブロック図である。
【発明を実施するための形態】
【０００７】
不揮発性メモリ（ＮＶＭ）を有するシステムのための高速ツリー平坦化を行うシステム及び方法が提供される。システムの揮発性メモリにツリーが記憶され、ツリーは、ＮＶＭの論理的スペースと物理的アドレスとの間の論理的−物理的マッピングを含む。ツリーに使用できるメモリの量が所定のスレッシュホールドより少ない場合に、システムのＮＶＭインターフェイスは、ＮＶＭにおけるデータ断片の数を減少するように試み、その結果、ツリーの一部分を平坦化することができる。解放されたツリーメモリの量は、ツリーメモリプールに追加されて戻される。
【０００８】
ＮＶＭインターフェイスは、例えば、ツリーのエントリの最適なセットを単一エントリ又はノードへ合成することによりツリーの一部分を平坦化する。エントリの最適なセットは、論理的スペースでは隣接しているが、物理的スペースでは隣接していない。従って、エントリの最適なセットを選択した後、ＮＶＭインターフェイスは、断片を物理的に隣接できるようにエントリに対応するデータ断片を再プログラムすることができる。特に、ＮＶＭインターフェイスは、ＮＶＭから複数のエントリに対応するデータを読み取り、次いで、そのデータを揮発性メモリにセーブすることにより、断片を再プログラムすることができる。データをセーブした後、ＮＶＭインターフェイスは、データを順次にＮＶＭの新たなスーパーブロックへプログラムすることができる。
【０００９】
ＮＶＭインターフェイスは、適当な解決策を使用してエントリの最適セットを選択することができる。ある実施形態では、ＮＶＭインターフェイスは、１つ以上のスライディングウインドウを使用してエントリの最適セットを得ることができる。あるケースでは、１つ以上のスライディングウインドウの各１つに対して最小スパンを維持することができる。次いで、異なる最小スパン間の比較に基づき、ＮＶＭインターフェイスは、エントリの最適セットを選択することができる。
【００１０】
他の実施形態では、ＮＶＭインターフェイスは、貪欲(greedy)解決策を使用して、平坦化すべきエントリの最適セットを見つけることができる。即ち、エントリの最適セットを見つけると、ＮＶＭインターフェイスは、エントリの最適セットに追加される付加的な連続エントリをツリーにおいてサーチし続けることができる。
【００１１】
更に別の実施形態では、ＮＶＭインターフェイスは、揮発性メモリにプライオリティキューを維持することによりエントリの最適セットを見つけることができる。例えば、ＮＶＭインターフェイスは、プライオリティキューにおけるスライディングウインドウに適合する複数のエントリに関連したパラメータを挿入するように試みる。ＮＶＭインターフェイスは、スライディングウインドウがツリーの端を通過するまでこのプロセスを続けることができる。次いで、ＮＶＭインターフェイスは、プライオリティキューを使用してエントリの最適セットを位置付けることができる。
【００１２】
更に別の実施形態では、ＮＶＭインターフェイスは、ツリーの更新を行いながら候補エントリのプライオリティキューを維持することによりエントリの最適セットを見つけることができる。ツリーに使用できるメモリ量が所定のスレッシュホールドより低いことが後で決定される場合には、ＮＶＭインターフェイスは、プライオリティキューを使用して、合成できるエントリを見つけることができる。
【００１３】
図１は、電子装置１００のブロック図である。ある実施形態において、電子装置１００は、ポータブルメディアプレーヤ、セルラー電話、ポケットサイズのパーソナルコンピュータ、パーソナルデジタルアシスタント（ＰＤＡ）、デスクトップコンピュータ、ラップトップコンピュータ、及び他の適当な形式の電子装置であり、又はそれを含むことができる。
【００１４】
電子装置１００は、システムオンチップ（ＳｏＣ）１１０及び不揮発性メモリ（ＮＶＭ）１２０を備えている。不揮発性メモリ１２０は、フローティングゲート又はチャージトラップ技術に基づくＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、消去可能なプログラマブルリードオンリメモリ（ＥＰＲＯＭ）、電気的に消去可能なプログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、強誘電性ＲＡＭ（ＦＲＡＭ（登録商標））、磁気抵抗性ＲＡＭ（ＭＲＡＭ）、又はその組み合わせを含む。
【００１５】
ＮＶＭ１２０は、消去可能な最小単位である「ブロック」へと編成され、更に、プログラム又は読み取りできる最小単位である「ページ」へと編成される。ある実施形態では、ＮＶＭ１２０は、複数のブロックを各々有する複数の集積回路を含むことができる。対応する集積回路からのメモリ位置（例えば、ブロック、又はブロックのページ）は、「スーパーブロック」を形成する。ＮＶＭ１２０の各メモリ位置（例えば、ページ又はブロック）は、物理的アドレス（例えば、物理的ページアドレス又は物理的ブロックアドレス）を使用して参照することができる。
【００１６】
システムオンチップ１１０は、ＳｏＣコントロール回路１１２、メモリ１１４、及びＮＶＭインターフェイス１１８を含む。ＳｏＣコントロール回路１１２は、ＳｏＣ１１０の一般的動作及び機能、並びにＳｏＣ１１０の他のコンポーネント又は装置１００をコントロールすることができる。例えば、ユーザ入力、及び／又はアプリケーション又はオペレーティングシステムのインストラクションに応答して、ＳｏＣコントロール回路１１２は、読み取り又は書き込み要求をＮＶＭインターフェイス１１８へ発行して、ＮＶＭ１２０からデータを得又はそこにデータを記憶することができる。明瞭化のために、ＳｏＣコントロール回路１１２が記憶又は検索のために要求するデータは、たとえそれがユーザ又はユーザアプリケーションに直接関連していなくても、「ユーザデータ」と称される。むしろ、ユーザデータは、（例えば、アプリケーション又はオペレーティングシステムを経て）ＳｏＣコントロール回路１１２によって発生され又は得られる適当なシーケンスのデジタル情報である。
【００１７】
ＳｏＣコントロール回路１１２は、電子装置１００の機能を駆動するように働くハードウェア、ソフトウェア及びファームウェア、並びにコンポーネント、回路又はロジックの任意の組み合わせを含む。例えば、ＳｏＣコントロール回路１１２は、ＮＶＭ１２０又はメモリ１１４に記憶されたソフトウェア／ファームウェアのコントロールものとで動作する１つ以上のプロセッサを含む。
【００１８】
メモリ１１４は、適当な形式の揮発性メモリ、例えば、ランダムアクセスメモリ（ＲＡＭ）（例えば、スタティックＲＡＭ（ＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、同期ダイナミックランダムアクセスメモリ（ＳＤＲＡＭ）、倍データレート（ＤＤＲ）ＲＡＭ）、キャッシュメモリ、リードオンリメモリ（ＲＯＭ）、又はその組み合わせを含む。メモリ１１４は、不揮発性メモリ１２０へプログラムされるか又はそこから読み取られるユーザデータを一時的に記憶することのできるデータソースを含む。ある実施形態では、メモリ１１４は、ＳｏＣコントロール回路１１２の一部分として実施されるプロセッサのためのメインメモリとして働く。
【００１９】
ある実施形態では、メモリ１１４は、その関連動作を遂行するためにＮＶＭインターフェイス１１８により使用される１つ以上のデータ構造を記憶する。例えば、メモリ１１４は、ファイルシステムにより使用される論理的アドレスとＮＶＭ１２０の物理的アドレスとの間の論理的−物理的マッピングを与えるツリーを含む。別の例として、メモリ１１４は、ツリーを管理するためにＮＶＭインターフェイス１１８により使用される情報を含む１つ以上のプライオリティキューを含む。ツリー及びプライオリティキューは、図４を参照して以下に詳細に述べる。
【００２０】
ＮＶＭインターフェイス１１８は、ＳｏＣコントロール回路１１２とＮＶＭ１２０との間のインターフェイス又はドライバとして働くように構成されたハードウェア、ソフトウェア及び／又はファームウェアの適当な組み合わせを含む。ＮＶＭインターフェイス１１８に含まれるソフトウェアモジュールとしては、それに対応するプログラムコードがＮＶＭ１２０又はメモリ１１４に記憶される。
【００２１】
ＮＶＭインターフェイス１１８は、ＳｏＣコントロール回路１１２がＮＶＭ１２０にアクセスしそしてＮＶＭ１２０のメモリ位置（例えば、ページ、ブロック、スーパーブロック、集積回路）及びそこに記憶されたデータ（例えば、ユーザデータ）を管理できるようにする種々の機能を遂行する。例えば、ＮＶＭインターフェイス１１８は、ＳｏＣコントロール回路１１２からの読み取り又は書き込み要求を解釈し、ウェアレベリングを遂行し、そしてＮＶＭ１２０のバスプロトコルに適合する読み取り及びプログラムインストラクションを発生する。
【００２２】
ＮＶＭインターフェイス１１８及びＳｏＣコントロール回路１１２は、個別モジュールとして示されているが、これは、本発明の実施形態の説明を簡単にするものに過ぎない。これらモジュールは、ハードウェアコンポーネント、ソフトウェアコンポーネント、又はその両方を共有してもよいことを理解されたい。例えば、ＳｏＣコントロール回路１１２は、ＮＶＭインターフェイス１１８のためのソフトウエアベースのメモリドライバを実行してもよい。
【００２３】
ある実施形態では、電子装置１００は、フラッシュメモリドライブ又はＳＤカードのようなターゲット装置を備え、これは、ＮＶＭ１２０、及びＮＶＭインターフェイス１１８のある部分又は全部を含む。これらの実施形態では、ＳｏＣ１１０又はＳｏＣコントロール回路１１２は、ターゲット装置のためのホストコントローラとして働く。例えば、ホストコントローラとして、ＳｏＣ１１０は、読み取り及び書き込み要求をターゲット装置へ発行することができる。
【００２４】
図２は、種々の実施形態による電子装置１００（図１）のファームウェア、ソフトウェア、及び／又はハードウェアコンポーネントの幾つかを詳細に示す電子装置２００のブロック図である。電子装置２００は、図１を参照して上述した特徴及び機能のいずれかを有し、そしてその逆のことも言える。図示されたように、破線は、層の境界を示す。境界線内にどのコンポーネントが入るかは、単なる例示に過ぎず、１つ以上のコンポーネントを異なる層と合併できることを理解されたい。
【００２５】
電子装置２００は、ファイルシステム２１０、ＮＶＭドライバ２１２、ＮＶＭバスコントローラ２１６、及びＮＶＭ２２０を備えている。ある実施形態では、ファイルシステム２１０及びＮＶＭドライバ２１２は、ソフトウェア又はファームウェアモジュールであり、そしてＮＶＭバスコントローラ２１６及びＮＶＭ２２０は、ハードウェアモジュールである。従って、これらの実施形態では、ＮＶＭドライバ２１２は、ＮＶＭインターフェイス２１８のソフトウェア又はファームウェア態様を表わし、そしてＮＶＭバスコントローラ２１６は、ＮＶＭインターフェイス２１８のハードウェア態様を表わす。
【００２６】
ファイルシステム２１０は、適当な形式のファイルシステム、例えば、ファイルアロケーションテーブル（ＦＡＴ）ファイルシステム又はハイアラーキーファイルシステムプラス（ＨＦＳ＋）を備え、そして電子装置２００のオペレーティングシステムの一部分（例えば、図１のＳｏＣコントロール回路１１２の一部分）である。ある実施形態では、ファイルシステム２１０は、ページの論理的−物理的マッピングを与えるフラッシュファイルシステムを備えている。これらの実施形態において、ファイルシステム２１０は、以下に述べるＮＶＭドライバ２１２の機能の幾つか又は全部を遂行し、それ故、ファイルシステム２１０及びＮＶＭドライバ２１２は、個別のモジュールであってもなくてもよい。
【００２７】
ファイルシステム２１０は、アプリケーション及びオペレーティングシステムに対してファイル及びフォルダ構造を管理する。ファイルシステム２１０は、電子装置２００上で実行されるアプリケーション又はオペレーティングシステムのコントロールのもとで動作し、そして情報がＮＶＭ２２０から読み取られるか又はそこに記憶されることをアプリケーション又はオペレーティングシステムが要求するときに書き込み及び読み取り要求をＮＶＭドライバ２１２に与える。各読み取り又は書き込み要求と共に、ファイルシステム２１０は、ユーザデータをどこから読み取るべきか又はどこに書き込むべきか指示するための論理的アドレス、例えば、論理的ページアドレス又は論理的ブロックアドレスをページオフセットと共に与えることができる。
【００２８】
ファイルシステム２１０は、ＮＶＭ２２０に直接適合しない読み取り及び書き込み要求をＮＶＭドライバ２１２に与えることがある。例えば、論理的アドレスは、ハードドライブベースのシステムの典型である慣習又はプロトコルを使用してもよい。ハードドライブベースのシステムは、フラッシュメモリとは異なり、最初にブロック消去を遂行せずに、メモリ位置をオーバーライトすることができる。更に、ハードドライブは、装置の寿命を延長するためのウェアレベリングを必要としない。それ故、ＮＶＭインターフェイス２１８は、ファイルシステム要求を取り扱うためにメモリ特有、売主特有、又はその両方である機能を遂行し、そしてＮＶＭ２００に適した仕方で他の管理機能を遂行することができる。
【００２９】
ＮＶＭドライバ２１２は、変換層２１４を備えている。ある実施形態では、変換層２１４は、フラッシュ変換層（ＦＴＬ）であってもよいし又はそれを含んでもよい。書き込み要求の際に、変換層２１４は、与えられた論理的アドレスを、ＮＶＭ２２０上の消去された空き物理的位置へマップすることができる。読み取り要求の際には、変換層２１４は、与えられた論理的アドレスを使用して、要求されたデータが記憶されている物理的アドレスを決定することができる。各ＮＶＭは、ＮＶＭのサイズ又は売主に基づいて異なるレイアウトを有することがあるので、このマッピング動作は、メモリ及び／又は売主特有でよい。
【００３０】
論理的−物理的アドレスマッピングに加えて、変換層２１４は、フラッシュ変換層の典型である他の適当な機能、例えば、ガーベージコレクション（ＧＣ）及びウェアレベリングを遂行することができる。
【００３１】
ある実施形態では、ＮＶＭドライバ２１２は、ＮＶＭバスコントローラ２１６とインターフェイスし、ＮＶＭアクセス要求（例えば、プログラム、読み取り、及び消去要求）を完了する。バスコントローラ２１６は、ＮＶＭ２２０へのハードウェアインターフェイスとして働き、そしてＮＶＭ２２０のバスプロトコル、データレート及び他の仕様を使用してＮＶＭ２２０と通信することができる。
【００３２】
ＮＶＭインターフェイス２１８は、ここで、時々「メタデータ」と称されるメモリ管理データに基づいてＮＶＭ２２０を管理する。メタデータは、ＮＶＭドライバ２１２により発生されてもよいし、又はＮＶＭドライバ２１２のコントロールのもとで動作するモジュールにより発生されてもよい。例えば、メタデータは、論理的アドレスと物理的アドレスとの間のマッピングの管理、不良ブロックの管理、ウェアレベリングに使用される情報、データエラーを検出又は修正するのに使用されるＥＣＣデータ、又はその組み合わせを含む。メタデータは、ファイルシステム２１０により与えられるデータを、論理的アドレスのようなユーザデータと共に含む。従って、一般的に、「メタデータ」とは、ユーザデータについての又はそれに関連した情報、又は不揮発性メモリの動作及びメモリ位置を管理するのに一般的に使用される情報を指す。
【００３３】
ＮＶＭインターフェイス２１８は、ＮＶＭ２２０にメタデータを記憶するように構成される。ある実施形態では、ＮＶＭインターフェイス２１８は、ユーザデータに関連したメタデータを、ユーザデータが記憶される同じメモリ位置（例えば、ページ）に記憶する。例えば、ＮＶＭインターフェイス２１８は、ユーザデータ、関連論理的アドレス、及びユーザデータのためのＥＣＣデータをＮＶＭ２２０の１つ以上のメモリ位置に記憶する。又、ＮＶＭインターフェイス２１８は、ユーザデータに関する他の形式のメタデータも同じメモリ位置に記憶する。
【００３４】
ＮＶＭインターフェイス２１８は、ＮＶＭ２２０のパワーアップ時又はＮＶＭ２２０の動作中に、どんなデータがその位置にあるか電子装置２００が決定できるように、論理的アドレスを記憶する。特に、ファイルシステム２１０は、ユーザデータをその物理的アドレスではなく、その論理的アドレスに基づいて参照するので、ＮＶＭインターフェイス２１８は、ユーザデータ及び論理的アドレスを一緒に記憶して、それらの関連性を維持する。このように、物理的−論理的マッピングをＮＶＭ２２０に維持している個別のテーブルが古くなった場合でも、ＮＶＭインターフェイス２１８は、例えば、電子装置２００のパワーアップ時又は再ブート時に適切なマッピングを依然決定することができる。
【００３５】
上述したように、ＮＶＭ（例えば、図１のＮＶＭ１２０又は図２のＮＶＭ２２０）は、ダイ、ブロック、ページ、スーパーブロック、等へと編成される。例えば、図３は、ＮＶＭ３００の機能図である。ＮＶＭ３００は、ＮＶＭ１２０（図１）又はＮＶＭ２２０（図２）と同じ又は同様である。図３は、ＮＶＭ３００の編成レイアウトを例示するためのものに過ぎず、不揮発性メモリの実際の物理的レイアウトを指示するものではない。例えば、ダイ０は、図３ではダイ１に隣接するものとして示されているが、これは、これらダイの機能的関係を単に例示するものに過ぎず、ＮＶＭ３００の実際の物理的レイアウトでは、これらダイは、互いに近くに配置されてもされなくてもよい。
【００３６】
更に、図３には、ある数のダイ、ブロック及びページが示されているが、これは単なる例示に過ぎず、当業者であれば、ＮＶＭ３００は、適当な数のダイ、ブロック及びページを含み得ることが明らかであろう。
【００３７】
図３に示すように、ＮＶＭ３００は、ダイ０、ダイ１、ダイ２及びダイ３のような１つ以上のダイ（即ち、集積回路）を含むことができる。ＮＶＭ３００の各ダイは、１つ以上の「ブロック」へと編成される。例えば、ダイ０−３は、各々がブロック０−３へ編成されるものとして示されている。
【００３８】
ダイの各ブロックは、更に、１つ以上のページへ編成される。例えば、ダイ０−３各々のブロック０は、ページ０−３へと編成されるものとして示されている。ＮＶＭ３００の各ページは、適当な情報を含む。例えば、ページは、ユーザデータ、メタデータ又はその両方を含む。ある実施形態では、ＮＶＭ３００に記憶された情報のエラー検出及び／又は修正を行うためにページにはＥＣＣデータのようなメタデータが含まれる。
【００３９】
又、ＮＶＭ３００は、ダイに同じ位置又は「ブロック番号」を有する各ダイからの１つのブロックを含む１つ以上のスーパーブロックも含む。例えば、ＮＶＭ３００のスーパーブロック０は、ダイ０−３各々のブロック０を含む。同様に、ＮＶＭ３００のスーパーブロック１は、ダイ０−３各々のブロック１を含み、ＮＶＭ３００のスーパーブロック２は、ダイ０−３各々のブロック２を含み、等々となる。
【００４０】
スーパーブロックは、１つ以上のブロックを仮想的にリンクし又は一緒に「ストライプ化」することにより形成される。ブロックは、スーパーブロックとして実質上リンクされるように各ダイの同じ行にある必要はない。実際には、ブロックは、スーパーブロックを形成するために２つ以上のダイからランダムに選択される。ある実施形態では、スーパーブロックが１つのブロックしか含まない。スーパーブロックは、動作上の並列性を与え、異なるダイに配置されたブロックに対してプログラミング、読み取り及び消去動作を並列に実行できるようにする。
【００４１】
更に、２つ以上のダイからのページが仮想的に一緒にリンクされてスーパーページ又は「ストライプ」を形成する。例えば、ストライプ３０２は、ダイ０−３各々のブロック０からのページ０を含む。同様に、ストライプ３０４は、ダイ０−３各々のブロック０からのページ３を含む。ＮＶＭインターフェイスにおいて実施される変換層（例えば、図２の変換層２１４）は、スーパーブロック又はストライプを追跡する。
【００４２】
ＮＶＭ３００のブロックは、上下の両ページを含むマルチレベルセル（ＭＬＣ）ブロックである。ＭＬＣブロックの場合、アクセス時間（例えば、読み取り及びプログラミング時間）は、特定のストライプ（例えば、ストライプ３０２又は３０４）に含まれるページに対して同じままである。即ち、全ストライプがプログラムされるときに、ストライプの下のページが先にプログラムされた後に、上のページとなる。対照的に、プログラムされるデータがストライプの境界と整列されない場合は、上下のページが交互の順番でプログラムされる。換言すれば、プログラミングの順番に対してバイモダニズム(bi-modalism)がある。
【００４３】
従って、上のページのプログラミングは、典型的に、下のページのプログラミングより長時間を要するので、装置が１つ以上のストライプ境界に沿ってページをプログラムするのが好都合である。これは、非ストライプ整列プログラミングに存在するバイモダニズムを回避する。
【００４４】
図４は、論理的ブロックアドレス４０２の、物理的ページ４０４へのマッピング４００を例示するブロック図である。論理的ブロックアドレス４０２は、論理的スペースに対応する。
【００４５】
ファイルシステム（例えば、図２のファイルシステム２１０）は、適当な数のＬＢＡをファイルに割り当てることができる。例えば、図４に示すように、ＬＢＡ４０２は、ファイルＡ−Ｎに対応し、ファイルＡ−Ｎの各々には、１つ以上のＬＢＡが割り当てられる。例えば、ファイルＡには、ＬＢＡ０−３８が割り当てられ、ファイルＢには、ＬＢＡ３９が割り当てられ、ファイルＣには、ＬＢＡ４０が割り当てられ、等々となる。
【００４６】
更に、ＬＢＡは、ＮＶＭ（例えば、図１のＮＶＭ１２０、図２のＮＶＭ２２０又は図３のＮＶＭ３００）の１つ以上の物理的アドレスに記憶されたデータを参照するためにファイルシステムにより使用される。例えば、図４に示すように、ＮＶＭは、ページ４０４を含むスーパーブロック４１０−４１４を含むことができる。ＬＢＡ４０２の各々は、ページ４０４のうちのあるページへマップされる。従って、各ＬＢＡは、それに対応するページの物理的アドレスへマップされる。図４に示すように、例えば、ファイルＡのスタートＬＢＡは、物理的アドレスＰ３へマップされ、ファイルＢのスタートＬＢＡは、物理的アドレスＰ０へマップされ、等々となる。
【００４７】
図５は、論理的−物理的マッピングを与えるのに使用されるツリー５００の一部分のブロック図である。特に、ツリー５００は、ＬＢＡ（例えば、図４のＬＢＡ４０２）と、ＮＶＭ（例えば、図１のＮＶＭ１２０、図２のＮＶＭ２２０又は図３のＮＶＭ３３０）の対応する物理的アドレス（例えば、図４のページ４０４の物理的アドレス）との間のマッピングを与えることができる。上述したように、ツリー５００は、揮発性メモリ（例えば、図１のメモリ１１４）に記憶され維持される。
【００４８】
ツリー５００は、複数のノードを含み、各ノードは、メモリ割り当ての目的で一貫したサイズとされる（例えば、各ノードは、６４バイトの固定サイズを有する）。更に、ツリー５００の各ノードは、１つ以上のエントリを含む。例えば、図５に示すように、ノード５０２は、３つのエントリ（例えば、エントリ５０３−５０５）を含む。簡単化のために、図５は、ツリー５００の一部分しか示していない。従って、破線のボックス５０８及び５０９は、図５に示されていない付加的なノード及びエントリを表わす。
【００４９】
ノードの各エントリは、スパン（例えば、エントリの論理的サイズ又は論理的アドレス数）に対応し、別のノードに対するポインタ（ノードポインタ）又はＮＶＭの物理的アドレスに対するポインタ（ＮＡＮＤポインタ）のいずれかを含む。あるケースでは、スパンは、ラン長さエンコード圧縮（ｒｌｅ圧縮）レンジに対応する。例えば、図５に示すように、エントリ５０３−５０５は、各々、スパン２、２及び３８に対応するように示されている。
【００５０】
更に、図５に示すように、エントリ５０３−５０５の各々は、ツリーにおける付加的なノードを指すノードポインタを有する。特に、エントリ５０３は、ノード５１０を指すものとして示され、これは、次いで、２つのエントリ（例えば、エントリ５１２及び５１４）を含む。同様に、エントリ５０４は、ノード５２０を指すものとして示され、これは、次いで、２つのエントリ（例えば、エントリ５２２及び５２４）を含む。最後に、エントリ５０５は、ノード５３０を指すものとして示され、これは、次いで、２つのエントリ（例えば、エントリ５３２及び５３４）を含む。
【００５１】
スパンは、ＬＢＡではなくツリー５００に記憶されるので、ＮＶＭインターフェイス（例えば、図１のＮＶＭインターフェイス１１８又は図２のＮＶＭインターフェイス２１８）は、ツリー５００を頂部ノードから底部ノードへと横断して、特定ファイルの論理的−物理的マッピングを得ることができる。例えば、ファイルに指定されたＬＢＡに基づき、ＮＶＭインターフェイスは、アドレスタリー(tally)を、それがツリー５００の頂部ノードから拡張するとき、得られるアドレスタリーがファイルのＬＢＡに一致するまで、増加する。当業者であれば、ツリー５００は、任意の適当なツリー構造を有してもよいことが明らかであろう。あるケースでは、ツリー５００は、例えば、ｂツリー又はｂ＊ツリーのように、特定のエントリに対して検索時間を改善するツリー構造を有する。又、当業者であれば、システムの他の適当なコンポーネント（例えば、図１の電子装置１００又は図２の電子装置２００）がツリー５００を維持できることが明らかであろう。例えば、ツリー５００は、ＮＶＭインターフェイス及び／又はコントロール回路（例えば、図１のコントロール回路１１２）の頂部で実施されるソフトウェア層により維持される。
【００５２】
更に、ＬＢＡに代わってスパンを記憶することにより、より多くのエントリ及びポインタ（例えば、ノード及びＮＡＮＤポインタ）をツリー５００の各ノードに含ませることができる。例えば、ツリー５００の各ノードに６４バイトが割り当てられ、そして各エントリに４ないし６バイトが割り当てられる場合には、ツリー５００の各ノードは、１０ないし１６個のエントリ（例えば、ポインタ）を記憶することができる。
【００５３】
エントリ５１２、５１４、５２２、５２４及び５３２は、各々、ＮＡＮＤポインタ５４０−５４４及びスパン５４５−５４９を含む。更に、エントリ５１２、５１４、５２２、５２４及び５３２は、各々、ページアドレス５５１−５５５を含む。ページアドレス５５１−５５５の各々は、それに対応するエントリのスタートページアドレスを与える。例えば、図５に示すように、エントリ５１２は、ファイルＧ（図４）に対応し、従って、１のスパン５４５及びＰ８のページアドレス５５１を有する。同様に、エントリ５１４、５２２、５２４及び５３２の各々は、ファイルＨ−Ｋに各々対応する。
【００５４】
比較的大きなファイルがＮＶＭへ順次にプログラムされるとき（例えば、メディアファイル、アプリケーション又はシステムファイル）、特定のファイルに対応するデータが、同じスーパーブロック又はスーパーブロックの同じセット（例えば、図３のスーパーブロック０−３）へ記憶される。従って、ファイルは、論理的及び物理的に隣接する（例えば、ファイルは、隣接する論理的アドレスのセット及び隣接する物理的アドレスの対応セットに関連付けられる）。従って、ファイルは、ツリーの単一エントリ（例えば、単一のＮＡＮＤポインタ）により表わされる。
【００５５】
あるケースでは、ファイルシステムは、小さなランダム書き込み（例えば、複数の小さなファイルに関連したデータ）も発生する。論理的に隣接するこれらの書き込みは、複数のスーパーブロックにわたって分散される。それ故、ＮＶＭにおける複数のデータ断片の各々は、ツリーにおける個別の個々のエントリにより表わすことが必要である。例えば、ファイルＨ−Ｋの各々は、ツリー５００における個別エントリ（例えば、エントリ５１２、５１４、５２２、５２４及び５３２の１つ）により表される。
【００５６】
揮発性メモリのスペース制限のために、ツリー５００に対して固定量のメモリスペース（例えば、１ＭＢ又は１００ＭＢのツリーメモリプール）が割り当てられる。最終的に、ツリーメモリプールは、付加的なデータ断片に対して論理的−物理的マッピングをもはやセーブできない点まで減少し得る。
【００５７】
そこで、ツリーメモリプールに対して付加的なメモリを解放するため、ＮＶＭインターフェイスは、ＮＶＭにおけるデータ断片の数を減少して、ツリーの一部分を平坦化するように試みる。解放されたメモリの量は、ツリーメモリプールに追加されて戻される。例えば、ファイルシステムから書き込み要求を受け取るのに応答して、ＮＶＭインターフェイスは、ツリーの少なくとも一部分を平坦化するように選択する。一実施形態において、ＮＶＭインターフェイスは、ツリー平坦化機能をコールする。
【００５８】
ＮＶＭインターフェイスは、例えば、ツリーの複数のエントリを単一エントリ又はノードへと合成することによってツリーの一部分を平坦化する。これらの複数のエントリは、論理的スペースでは隣接しているが、物理的スペースでは非隣接的にプログラムすることができる。即ち、それらは、ＮＶＭの種々のスーパーブロックにおいてランダムに分散されたデータ断片に対応する。従って、エントリに対応するデータを新たなスーパーブロックへ隣接的に再プログラミングすることにより、ＮＶＭインターフェイスは、データ断片が物理的及び論理的に隣接するよう保証することができる。
【００５９】
一般的に、ツリーの一部分を平坦化するには、ユーザによってもファイルシステムによっても要求されることのないプログラミング操作が必要となるので、平坦化動作は、システムの全書き込み増幅を増大させる。ここで使用する「書き込み増幅(write amplification)」とは、ファイルシステムの要求とＮＶＭの物理的アクセスとの間の比を指す。書き込み増幅が増大すると、システム性能が低下し、ＮＶＭにおける消耗の増加及びシステム電力要求の増加を招く。
【００６０】
それ故、ツリー平坦化動作は、それが必要であるときだけ呼び出さねばならない。例えば、ツリー平坦化機能は、ツリーに使用できるメモリ量が所定スレッシュホールドより少ないときだけ呼び出される。所定スレッシュホールドは、ツリーメモリプール（例えば、ツリーに割り当てられた全メモリ量）のほぼ枯渇点、例えば、ツリーメモリプールの２％に対応する適当な数である。即ち、使用可能なメモリ量が、ツリーメモリプールの２％の所定スレッシュホールドより少ないツリーメモリプールの１％である場合に、条件が満足される。
【００６１】
このような解決策を使用して、ＮＶＭインターフェイスは、装置の不要な負担を回避することができる。特に、ツリーのメモリ使用量がツリーメモリプールを枯渇させない場合には、平坦化動作は不要である。更に、ツリーの平坦化を待機することにより、平坦化できる候補ツリーエントリの数が増加する。それ故、ＮＶＭインターフェイスは、平坦化のためのエントリの最適セット（例えば、書き込み増幅とメモリ使用量との間に最適なトレードオフを生じるエントリ）を探索する高い確率を有する。
【００６２】
ＮＶＭインターフェイスは、合成すべきツリーのエントリを探索するために適当な解決策を使用することができる。例えば、ＮＶＭインターフェイスは、ツリーを横切ってスライディングウインドウを移動することができる。ある実施形態では、スライディングウインドウは、ツリーのエントリに対応するエレメントを有するリストである。従って、ＮＶＭインターフェイスがツリーを横切ってスライディングウインドウを移動するとき、新たなエントリがリストに追加される。
【００６３】
ＮＶＭインターフェイスは、それがツリーを横切ってスライディングウインドウを移動する間に、スライディングウインドウにより現在包囲されているエントリのスパンを示すランニングカウンタも維持する。例えば、図４に戻ると、ＮＶＭインターフェイスは、ＬＢＡ４０２に関連したツリーを横切ってスライディングウインドウ４０６を移動する。最初に、ランニングカウンタは、ゼロの値を有し、そしてスライディングウインドウ４０６は、ファイルＡ−Ｅを包囲する。当業者であれば、スライディングウインドウ４０６は、適当な数のエントリ（例えば、３２個のエントリ）を包囲するように構成されることが明らかである。しかしながら、スライディングウインドウ４０６は、図４では、簡単化のために５つのエントリ（例えば、ファイル）を包囲するように示されている。
【００６４】
ＮＶＭインターフェイスは、包囲されたエントリに対応する論理的スペースのサイズをランニングカウンタに追加する。即ち、ＮＶＭインターフェイスは、ファイルＡ−Ｅに対応するエントリの合計スパン（例えば、８２の合計スパン）をランニングカウンタに追加する。次いで、ＮＶＭインターフェイスは、ランニングカウンタの現在値を、メモリに記憶された最小スパンと比較する。例えば、最小スパンは、３２ビットカウンタに適合できる最大値に最初にセットされる。
【００６５】
ランニングカウンタの現在値が最小スパンより小さい場合には、ＮＶＭインターフェイスは、ランニングカウンタの現在値を最小スパンとして置き換える。更に、ＮＶＭインターフェイスは、スライディングウインドウのスタートＬＢＡをメモリに記憶する。例えば、ファイルＡ−Ｅ（図４）の場合に、ＮＶＭインターフェイスは、８２を最小スパンとしてセーブし、そして０をスタートＬＢＡとしてセーブする。対照的に、現在値が最小スパンより大きい場合には、ＮＶＭインターフェイスは、メモリに記憶された最小スパン及びスタートＬＢＡの値を保持することができる。
【００６６】
次いで、ＮＶＭインターフェイスは、スライディングウインドウ４０６を単一エントリ（例えば、１ファイル）だけ移動して、スライディングウインドウ４０６が今やファイルＢ−Ｆを包囲するようにする。次いで、ＮＶＭインターフェイスは、スライディングウインドウ４０６により包囲された新たなエントリ（ファイルＦ）のサイズをランニングカウンタに加算し、そしてスライディングウインドウ４０６によりもはや包囲されないエントリ（ファイルＡ）のサイズをランニングカウンタから減算する。図４に示すように、ファイルＦに対応するエントリのスパンは、３８であり、そしてファイルＡに対応するエントリのスパンは、３９である。従って、それによって得られるランニングカウンタの値は、８１（８２＋３８−３９＝８１）である。
【００６７】
次いで、ＮＶＭインターフェイスは、ランニングカウンタの現在値が最小スパンより小さいかどうか検出する。ランニングカウンタの現在値（例えば、８１）は、メモリにセーブされた最小スパン（例えば、８２）より小さいので、ＮＶＭインターフェイスは、ランニングカウンタを最小スパンとして置き換える。更に、ＮＶＭインターフェイスは、メモリにセーブされたスタートＬＢＡ（例えば、０）を現在スタートＬＢＡ（例えば、３９）で更新する。
【００６８】
次いで、ＮＶＭインターフェイスは、ツリーの連続エントリを通してスライディングウインドウを移動し続け、そしてそれに応じてランニングカウンタを更新し続ける（例えば、スライディングウインドウ４０６により新たに包囲されたエントリのスパンを加算し、そしてスライディングウインドウ４０６によってもはや包囲されないエントリのスパンを減算することにより）。次いで、ランニングカウンタの現在値と最小スパンとの間の比較に基づき、ＮＶＭインターフェイスは、メモリに記憶された最小スパン及びスタートＬＢＡを置き換えるか又は保持するかのいずれかである。スライディングウインドウがツリーを横切る移動を終了すると、ＮＶＭインターフェイスは、最小スパンに対応するツリーのエントリの最適セットを合成することができる。
【００６９】
理想的には、エントリの最適セットは、そのセットにおけるエントリの数に等しいスパンを有する。換言すれば、エントリの最適セットは、連続ＬＢＡを伴うファイルのセットに対応し、各エントリは、最小ＬＢＡサイズ（例えば、１のＬＢＡ）を有する。例えば、図４のＬＢＡ４０２の場合に、ファイルＧ−Ｋに対応するエントリのセットは、スライディングウインドウ４０６に対して最適である（例えば、図５のエントリ５１２、５１４、５２２、５２４及び５３２）。別の例として、スライディングウインドウが３２個のエントリを包囲する場合には、スライディングウインドウに対するエントリの最適セットは、３２個の論理的に連続するエントリで、それらは、各々、単一セクタ（例えば、各々１つのＬＢＡ）である。
【００７０】
エントリの最適セットを得た後、ＮＶＭインターフェイスは、エントリに対応するデータ断片を、それら断片が物理的に隣接するように再プログラミングするよう選択することができる。例えば、ＮＶＭインターフェイスは、ＮＶＭからエントリのセットに対応するデータを読み取り、次いで、そのデータを揮発性メモリ（例えば、メモリバッファ）にセーブする。データをセーブした後に、ＮＶＭインターフェイスは、データをＮＶＭの新たなスーパーブロックへ逐次にプログラムし、そしてツリーにおけるエントリを平坦化する（例えば、エントリのセットを単一ノード又はエントリへと合成する）。例えば、サイズが各々単一ＬＢＡである３２個のエントリがあり、且つ各ＬＢＡが４Ｋである場合には、ＮＶＭインターフェイスは、ＮＶＭにおいてサイズ１２８Ｋのデータを再プログラムする必要がある。
【００７１】
図６は、論理的ブロックアドレスの、物理的ページへのマッピング６００を示すブロック図である。図６に示すように、ファイルＧ−Ｋに対応するデータは、スーパーブロック４１４へ逐次に再プログラムされている。ファイルの以前の物理的アドレスは、無効としてマークされている（図６に交差線ボックスで示された）。
【００７２】
更に、論理的−物理的マッピングを与えるツリーは、更新することができる。例えば、図７は、更新されたツリー７００の一部分のブロック図である。特に、ＮＶＭインターフェイスは、エントリのセット（図５のエントリ５１２、５１４、５２２、５２４及び５３２）を単一ノード７０２へと合成する。当業者であれば、エントリのセットがノード又はエントリへと合成されることが明らかであろう。例えば、エントリのセットは、エントリのセットの合計スパンのサイズ、及び／又はノード又はエントリに割り当てられるサイズに基づき、ノード又はエントリのいずれかへと合成される。
【００７３】
図７に示すように、エントリの合成セットのページアドレス７０４は、Ｐ１４であり、そして合計スパン７０６は、５である。ＬＢＡ１２０−１２４（図６）の１つにアクセスするため、ＮＶＭインターフェイスは、スパン７０６を使用してＬＢＡオフセットを計算する。例えば、更新されたツリー７００を横断することにより、ＮＶＭインターフェイスは、スパンに対するＬＢＡベースが１２０であることを決定する。このＬＢＡベースに基づいて、ＮＶＭインターフェイスは、アクセスされるべきＬＢＡに対応するＬＢＡオフセットを決定する（例えば、アクセスされるべきＬＢＡからＬＢＡベースを減算することにより）。次いで、ＮＶＭインターフェイスは、ＬＢＡオフセットをスタートページアドレスに加算して、ＮＶＭにおける対応する物理的アドレスにアクセスする。
【００７４】
例えば、ＬＢＡ１２２にアクセスするために、ＮＶＭインターフェイスは、２のＬＢＡオフセットがあることを決定する（例えば、１２２−１２０＝２）。次いで、ＮＶＭインターフェイスは、２のＬＢＡオフセットをＰ１４のスタートページアドレス７０４に加算して、Ｐ１６の対応物理的アドレスを得る。これは、ＬＢＡ１２２の物理的ページアドレスです。
【００７５】
他の実施形態において、ツリーをスキャンする間にエントリの最適セットが探索されたと決定されると、ＮＶＭインターフェイスは、ツリーを横切るスライディングウインドウの移動を停止する。例えば、図４に戻ると、ファイルＧ−Ｋを包囲するようにスライディングウインドウ４０６を移動すると、ＮＶＭインターフェイスは、ファイルＧ−Ｋに対応するエントリがスライディングウインドウ４０６にとって最適である（例えば、エントリの各々が１のＬＢＡを有する）と決定する。次いで、ＮＶＭインターフェイスは、スライディングウインドウがツリーを横切る移動を終了するのを待機する必要なくツリーのエントリを平坦化することを選択する。
【００７６】
更に別の実施形態において、ＮＶＭインターフェイスは、複数のスライディングウインドウを使用して、エントリの最適セットを得る。図８及び９は、本発明の種々の実施形態によるプロセスを例示するフローチャートである。
【００７７】
先ず、図８を参照すれば、高速ツリー平坦化のプロセス８００が示されている。プロセス８００は、ステップ８０２において始まり、そしてステップ８０４において、ＮＶＭインターフェイスは、ツリー（例えば、図５のツリー５００）に現在使用できるメモリの量が所定のスレッシュホールドより少ないと決定し、ここで、ツリーは、ＮＶＭ（例えば、図１のＮＶＭ１２０、図２のＮＶＭ２２０、又は図３のＮＶＭ３００）の論理的スペースと物理的アドレスとの間の論理的−物理的マッピングを記憶する。
【００７８】
ステップ８０６において、ＮＶＭインターフェイスは、ツリーを横切って少なくとも２つのスライディングウインドウ（例えば図４のスライディングウインドウ４０６及び４０８）を移動する。少なくとも２つのスライディングウインドウは、異なるサイズを有する。即ち、各スライディングウインドウは、ツリーの異なる数のエントリを包囲する。例えば、第１のスライディングウインドウは、ツリーの３２個のエントリを包囲するように構成され、そして第２のスライディングウインドウは、ツリーの１２８個のエントリを包囲するように構成される。
【００７９】
異なるサイズのスライディングウインドウを使用することにより、スライディングウインドウを１つしか使用しない場合に比して、より最適なエントリセットをツリーにおいて探索することができる。特に、ファイルシステムの割り当てポリシーのために、論理的スペースには同様のサイズのファイルが隣接している。従って、１のスパンをもつ多数のエントリがある場合には、それらのエントリに隣接する新たなエントリも１のスパンをもつ見込みが高い。そのようなケースでは、大きなスライディングウインドウが、小さなスライディングウインドウに比してより最適なエントリを捕獲する。他方、スライディングウインドウが大き過ぎると、スライディングウインドウ内に適合するエントリの幾つかが最小スパンのエントリではない確率も高くなる。
【００８０】
当業者であれば、適当な数（例えば、２、３、４、等）のスライディングウインドウを使用できることが明らかであろう。又、当業者であれば、少なくとも２つのスライディングウインドウは、適当な数のエントリを包囲するように構成できることも明らかであろう。しかしながら、簡単化のため、スライディングウインドウ４０６及び４０８は、図４において、各々、５個及び１０個のエントリ（例えば、ファイル）を包囲するように示されている。
【００８１】
ある実施形態において、少なくとも２つのスライディングウインドウは、ツリーを横切って連続的に移動する。他の実施形態では、サーチの速度を改善するために、少なくとも２つのスライディングウインドウは、ツリーを横切って並列に移動する。
【００８２】
ステップ８０８へ続くと、ＮＶＭインターフェイスは、ツリーを横切って少なくとも２つのスライディングウインドウが移動するときに、少なくとも２つのスライディングウインドウに対応する少なくとも２つの最小スパンを維持する。例えば、少なくとも２つのスライディングウインドウの各々に対して、ＮＶＭインターフェイスは、スライディングウインドウにより新たに包囲されるエントリのスパンをランニングカウンタに加算する。ランニングカウンタは、スライディングウインドウにより包囲されるツリーのエントリの合計スパンに対応する。更に、ＮＶＭインターフェイスは、スライディングウインドウによりもはや包囲されないエントリのスパンをランニングカウンタから減算する。次いで、ランニングカウンタの現在値が、揮発性メモリにセーブされた最小スパンと比較される。この比較に基づいて、ＮＶＭインターフェイスは、メモリに記憶された最小スパンを置き換えるか又はそれを保持する。更に、ＮＶＭインターフェイスは、メモリに記憶されたスタートＬＢＡも置き換えるか又はそれを保持する。次いで、プロセス８００は、ステップ８１０へ進む。
【００８３】
ステップ８１０において、ＮＶＭインターフェイスは、少なくとも２つのスライディングウインドウがツリーを横切る移動を終了したと決定する。次いで、ステップ８１２において、ＮＶＭインターフェイスは、ツリーのエントリのセットを、少なくとも２つの最小スパン間の比較に少なくとも一部分基づいて平坦化することを選択する。例えば、ＮＶＭインターフェイスは、少なくとも２つの最小スパンのどちらが小さな値を有するか決定する。
【００８４】
少なくとも２つの最小スパンを比較した後、ＮＶＭインターフェイスは、小さな値を伴うスライディングウインドウに対応するエントリのセットを平坦化することを選択する。エントリのセットは、論理的に隣接するエントリを含む。例えば、図４及び５に戻ると、ＮＶＭインターフェイスは、スライディングウインドウ４０６（図４）に対応するエントリ５１２、５１４、５２２、５２３及び５３２（図５）を選択する。次いで、プロセス８００は、ステップ８１４で終了となる。
【００８５】
図９は、物理的に隣接するデータ断片をプログラミングするためのプロセスを例示するフローチャートである。ある実施形態では、プロセス９００は、プロセス８００（図８）の平坦化選択ステップ８１２を詳細に示すものである。
【００８６】
プロセス９００は、ステップ９０２で始まり、そしてステップ９０４において、ＮＶＭインターフェイスは、エントリのセット（例えば、図５のエントリ５１２、５１４、５２２、５２３及び５３２）に対応するデータ（例えば、ユーザデータ）をＮＶＭから読み取る。例えば、図４に戻ると、ＮＶＭインターフェイスは、物理的ページアドレスＰ８、Ｐ５、Ｐ１２、Ｐ６及びＰ１１に記憶されたデータを読み取る。
【００８７】
ステップ９０６へ進み、ＮＶＭインターフェイスは、データを揮発性メモリ（例えば、図１のメモリ１１４）にセーブする。次いで、プロセス９００は、ステップ９０８へ進む。ステップ９０８において、ＮＶＭインターフェイスは、データをＮＶＭの新たなスーパーブロック（例えば、図４のスーパーブロック４１４）へ逐次に（例えば、書き込みストリームにおいて）プログラムする。次いで、プロセス９００は、ステップ９１０において終了となる。
【００８８】
更に別の実施形態において、ＮＶＭインターフェイスは、平坦化すべきエントリの最適セットを見つけるために貪欲解決策を適用する。即ち、最初のエントリ最適セットを見つけると、ＮＶＭインターフェイスは、最初のエントリ最適セットに追加されるツリーの付加的な連続エントリをサーチし続ける。これらの付加的なエントリは、追加のプログラミングコストを被ることなく、時々、再プログラミングされる。
【００８９】
図１０Ａ及び１０Ｂを参照すれば、平坦化すべきエントリの最適セットを見つけるための貪欲解決策のプロセス１０００が示されている。このプロセス１０００は、ステップ１００２で始まり、そしてステップ１００４において、ＮＶＭインターフェイス（例えば、図１のＮＶＭインターフェイス１１８又は図２のＮＶＭインターフェイス２１８）は、揮発性メモリ（例えば、図１のメモリ１１４）に記憶されたツリー（例えば、図５のツリー５００）に現在使用できるメモリの量が所定のスレッシュホールドより少ないことを検出する。
【００９０】
次いで、ステップ１００６において、ＮＶＭインターフェイスは、ツリーの複数のエントリを横切ってスライディングウインドウ（例えば、図４のスライディングウインドウ４０６）を移動し、ここで、スライディングウインドウは、ツリーの所定数のエントリを包囲する。例えば、スライディングウインドウは、３２個のエントリ（例えば、ＮＶＭにおけるストライプのサイズに等しい）を包囲する。
【００９１】
ステップ１００８へ続くと、ＮＶＭインターフェイスは、スライディングウインドウにより包囲されるエントリのセットが、そのエントリのセットにおけるエントリの数に等しいスパンを有するかどうか決定する。ステップ１００８において、スライディングウインドウにより包囲されるエントリのセットが、そのエントリのセットにおけるエントリの数に等しいスパンをもたないとＮＶＭインターフェイスが決定すると、プロセス１０００はステップ１０１０へ進む。
【００９２】
ステップ１０１０において、ＮＶＭインターフェイスは、スライディングウインドウがツリーを横切る移動を終了したかどうか決定する。ステップ１０１０において、スライディングウインドウがツリーを横切る移動を終了したとＮＶＭインターフェイスが決定すると、プロセス１０００はステップ１０１２へ進む。
【００９３】
ステップ１０１２において、ＮＶＭインターフェイスは、ツリー平坦化のためにスライディングウインドウにより形成されるツリーのエントリのセットを選択する。例えば、ＮＶＭインターフェイスは、メモリにセーブされた１つ以上の値（例えば、最小スパン及びスタートＬＢＡ）に対応するエントリのセットを選択する。即ち、エントリのセットは、ツリー内のエントリの他のセットに比して最小のスパンを有する。次いで、プロセス１０００は、ステップ１０１４において終了となる。
【００９４】
ステップ１０１０において、スライディングウインドウがツリーを横切る移動を終了していないとＮＶＭインターフェイスが決定すると、プロセス１０００はステップ１００６へ戻る。ステップ１００６において、ＮＶＭインターフェイスは、ツリーのエントリを横切ってスライディングウインドウを移動し続ける。
【００９５】
ステップ１００８へ戻ると、スライディングウインドウにより包囲されるエントリのセットが、そのエントリのセットにおけるエントリの数に等しいスパンを有するとＮＶＭインターフェイスが決定すると、プロセス１０００はステップ１０１６へ進む。換言すれば、エントリのセットは、現在のスライディングウインドウに対するエントリの最適セットとなる。
【００９６】
ステップ１０１６において、ＮＶＭインターフェイスは、スライディングウインドウにより包囲されるエントリの所定数を拡張して、拡張スライディングウインドウ（例えば、図４のスライディングウインドウ４０８）を発生する。あるケースにおいて、スライディングウインドウが３２個のエントリを以前に包囲していた場合に、ＮＶＭインターフェイスは、６４個のエントリを包囲するようにそのスライディングウインドウを拡張する。
【００９７】
ある実施形態では、ＮＶＭインターフェイスは、拡張スライディングウインドウにより包囲されるエントリのセットのスパンをストライプ境界と整列させるように試みる。例えば、図３に戻ると、各ストライプ（例えば、ストライプ３０２又は３０４）は、３２個のＬＢＡを記憶することができる。スライディングウインドウにより包囲されるエントリの最適セットのスパンが３２である場合には、ＮＶＭインターフェイスは、スライディングウインドウのエントリの所定数をストライプのサイズの倍数で拡張する。その結果、拡張スライディングウインドウにより包囲されるエントリの最適セットは、６４ＬＢＡ、９６ＬＢＡ、等のスパンを有することができる。
【００９８】
別の例として、スライディングウインドウによって包囲されるエントリの最適セットのスパンがストライプのサイズより小さい場合には（例えば、４８ＬＢＡのスパン）、スライディングウインドウは、ストライプ境界と整列するように拡張される。即ち、ＮＶＭインターフェイスは、スライディングウインドウのエントリの所定数を６４個のエントリへ拡張する。上述したように、アクセス時間は、特定のストライプに含まれるページに対して同じままであるから、全ストライプを埋めるユーザデータをプログラミングするための時間は、ストライプ未満を埋めるユーザデータをプログラミングするための時間と同じである。
【００９９】
更に別の例として、ＮＶＭインターフェイスは、ＮＶＭのブロック又はスーパーブロック（例えば、図４のスーパーブロック４１４）内の現在位置に基づきスライディングウインドウをどのように拡張するか決定する。例えば、スーパーブロックのストライプが現在データで途中まで埋められている場合には、ＮＶＭインターフェイスは、エントリの所定数をストライプのサイズの半分（例えば、１６エントリ）だけ拡張する。
【０１００】
次いで、ステップ１０１８において、ＮＶＭインターフェイスは、拡張スライディングウインドウを、ツリーの複数のエントリの少なくとも一部分に適用する。特に、ＮＶＭインターフェイスは、拡張スライディングウインドウに追加できる小さなスパン（例えば、１、２、３又は４ＬＢＡ）を有するツリーの付加的な連続エントリをサーチする。次いで、プロセス１０００はステップ１０２０へ進む。
【０１０１】
ステップ１０２０において、ＮＶＭインターフェイスは、拡張スライディングウインドウにより発生されるランニングカウンタの値が所定値に等しいかどうか決定する。例えば、ＮＶＭインターフェイスは、ランニングカウンタの値（例えば、拡張スライディングウインドウにより包囲されるエントリのセットに対する合計スパン）がストライプサイズの倍数に等しいかどうか決定する。
【０１０２】
ステップ１０２０において、ランニングカウンタの値が所定値に等しくないとＮＶＭインターフェイスが決定すると、プロセス１０００はステップ１０１２へ進む。特に、ＮＶＭインターフェイスは、拡張スライディングウインドウにより包囲されるエントリのセットの合計スパンが１つ以上のストライプのサイズより小さいか又は大きいか決定する。この決定に基づいて、エントリの元のセットが、拡張スライディングウインドウにより包囲されたエントリのセットより好ましいと考えられてもよい。ステップ１０１２において、ＮＶＭインターフェイスは、ツリー平坦化に対してスライディングウインドウにより発生されたツリーのエントリのセットを選択することができる。
【０１０３】
ステップ１０２０に戻ると、ランニングカウンタの値が所定値に等しいとＮＶＭインターフェイスが決定すると、プロセス１０００は、ステップ１０２２へ進む。ステップ１０２２において、ＮＶＭインターフェイスは、ツリー平坦化に対して拡張スライディングウインドウにより発生されたツリーのエントリのセットを選択する。プロセス１０００は、ステップ１０１４において終了となる。
【０１０４】
更に別の実施形態において、ツリーにおいて合成できる単一の最適なエントリセットを探索するのではなく、ＮＶＭインターフェイスは、ツリーの一回の通過でエントリの複数候補セットを見つけることができる。特に、単一のランニングカウンタを最小スパン及びスタートＬＢＡと共に維持するのではなく、ＮＶＭインターフェイスは、プライオリティキューを揮発性メモリに維持することができる。
【０１０５】
ＮＶＭインターフェイスは、スライディングウインドウにより包囲される複数のエントリに関連したパラメータをプライオリティキューに挿入することを試みる。次いで、ＮＶＭインターフェイスは、スライディングウインドウをエントリの数だけツリー内で前方に移動し、ここで、エントリの数は、プライオリティキューの現在状態に少なくとも一部分基づくものである。スライディングウインドウがツリーを横切る移動を終了すると、ＮＶＭインターフェイスは、プライオリティキューを使用してエントリの最適セットを探索することができる。
【０１０６】
ここで使用する「プライオリティキュー」とは、１つ以上のデータアイテムを含む適当なデータ構造（例えば、順序付けされたリスト）であり、各データアイテムは、プライオリティ番号に関連している。例えば、最小プライオリティキューは、低いプライオリティ番号をもつエレメントがリストの前部へ移動し、そして高いプライオリティ番号をもつエレメントがリストの端へ移動するリストである。別の例として、最大プライオリティキューは、高いプライオリティ番号をもつエレメントがリストの前部に向かって移動し、そして低いプライオリティ番号をもつエレメントがリストの端へ移動するリストである。
【０１０７】
図１１は、プライオリティキューを使用してツリーを平坦化するプロセス１１００のフローチャートである。プロセス１１００は、ステップ１１０２で始まり、そしてステップ１１０４において、ＮＶＭインターフェイス（例えば、図１のＮＶＭインターフェイス１１８又は図２のＮＶＭインターフェイス２１８）は、揮発性メモリ（例えば、図１のメモリ１１４）に記憶されたツリー（例えば、図５のツリー５００）に現在使用できるメモリの量が所定スレッシュホールドより低いことを検出する。
【０１０８】
ステップ１１０６において、ＮＶＭインターフェイスは、スライディングウインドウ（例えば、図４のスライディングウインドウ４０６）に適合するツリーの複数のエントリ（例えば、図４のファイルＡ−Ｅに対応するエントリ）を検出する。複数のエントリを検出した後に、プロセス１１００は、ステップ１１０８へ進む。
【０１０９】
ステップ１１０８において、ＮＶＭインターフェイスは、プライオリティキューがいっぱいであるかどうか決定する。例えば、プライオリティキューは、固定サイズ（例えば、２０個のエレメント）を有し、そして空の値のセットへと初期化される。プライオリティキューがいっぱいでない（例えば、プライオリティキュー内のエレメントが２０未満である）場合には、プロセス１１００はステップ１１１０へ進む。
【０１１０】
ステップ１１１０において、ＮＶＭインターフェイスは、複数のエントリに関連したパラメータをプライオリティキューに挿入する。プライオリティキューに追加されるパラメータは、複数のエントリに関連した合計スパン及びスタートＬＢＡを含む。
【０１１１】
例えば、ファイルＡ−Ｅ（図４）に対して、ＮＶＭインターフェイスは、関連パラメータをプライオリティキューに第１エレメントとして挿入する。特に、ＮＶＭインターフェイスは、０のスタートＬＢＡをデータアイテムとして及び８２の合計スパン（８２−０＝８２）を関連プライオリティ番号として挿入する。
【０１１２】
当業者であれば、それに代わって又はそれに加えて、他の適当なパラメータをプライオリティキューに含ませられることが明らかであろう。例えば、スライディングウインドウが、ツリーを横切って移動するときに一定数のエントリを包囲する場合は、スパンがプライオリティキューにセーブされる。しかしながら、スライディングウインドウが、ツリーを横切って移動するときに可変数のエントリを包囲する場合は、比（複数のエントリの合計スパンと複数のエントリ内のエントリ数との間の比）がプライオリティキューにセーブされる。
【０１１３】
次いで、ステップ１１１２において、ＮＶＭインターフェイスは、スライディングウインドウをツリーにおいて前方に単一エントリだけ移動させる。例えば、図４を参照すれば、ＮＶＭインターフェイスは、ファイルＢ−Ｆに対応するエントリを包囲するようにスライディングウインドウ４０６を移動させる。
【０１１４】
ステップ１１１４へと続き、ＮＶＭインターフェイスは、スライディングウインドウがツリーの端を通過したかどうか決定する。ステップ１１１４において、スライディングウインドウがツリーの端を通過しないとＮＶＭインターフェイスが決定すると、プロセス１１００は、ステップ１１０８へ戻り、そこで、ＮＶＭインターフェイスは、更新されたエントリ（例えば、ファイルＢ−Ｆに対応するエントリ）に関連したパラメータをプライオリティキューに挿入するよう試みる。
【０１１５】
ステップ１１１４において、スライディングウインドウがツリーの端を通過したとＮＶＭインターフェイスが決定すると、プロセス１１００はステップ１１１６において終了となる。
【０１１６】
ステップ１１０８に戻ると、プライオリティキューがいっぱいである（例えば、プライオリティキューに既に２０個のエレメントがある）とＮＶＭインターフェイスが決定すると、プロセス１１００はステップ１１１８へ進む。
【０１１７】
例えば、図１２は、プライオリティキュー１２０２のブロック図１２００である。プライオリティキュー１２０２は、４つのエレメント１２０４−１２１０を備え、各エレメントは、各々、ファイルＣ−Ｇ、Ｄ−Ｈ、Ｅ−Ｉ及びＦ−Ｊ（図４）に対応する。当業者であれば、プライオリティキュー１２０２は、適当な数のエレメントを含むことが明らかであろう。しかしながら、簡単化のために、プライオリティキュー１２０２は、４つのエレメントを含むように示されている。従って、プライオリティキュー１２０２は、いっぱいである。
【０１１８】
エレメント１２０４−１２１０の各々は、合計スパン及びスタートＬＢＡに関連している。合計スパンは、プライオリティ番号として機能する。図示されたように、プライオリティキュー１２０２は、最小プライオリティキューであり、エレメントは、合計スパンに基づいて増加順に分類される。従って、最低のプライオリティ番号（例えば、最低の合計スパン）を伴うエレメントは、キューの前部へ移動される。新たなエレメントは、それに関連した合計スパンに基づいてプライオリティキュー１２０２へ挿入される。
【０１１９】
図１１に戻ると、ステップ１１１８において、ＮＶＭインターフェイスは、複数のエントリに関連したパラメータが挿入可能であるかどうか決定する。例えば、スライディングウインドウ４０６（図４）が、ファイルＧ−Ｋに対応する複数のエントリを現在包囲する場合には、ＮＶＭインターフェイスは、エントリ５１２、５１４、５２２、５２４及び５３２に関連したパラメータがプライオリティキュー１２０２（図１２）に挿入可能であるかどうか決定する。
【０１２０】
より詳細には、複数のエントリの合計スパンが、プライオリティキューに既に記憶されている合計スパンと比較される。合計スパンが、プライオリティキュー１２０２における最高の合計スパンより小さい場合には、キュー１２０２の適当な位置にパラメータを挿入することができる。例えば、ファイルＧ−Ｋに対応する合計スパン（例えば、５）は、プライオリティキュー１２０２における最高合計スパン（例えば、８１）より小さいので、ＮＶＭインターフェイスは、エントリ５１２、５１４、５２２、５２４及び５３２に関連したパラメータが挿入可能であると決定する。或いは又、合計スパンがプライオリティキュー１２０２における最高合計スパンより大きい場合には、ＮＶＭインターフェイスは、パラメータを破棄する。
【０１２１】
パラメータが挿入可能であるとＮＶＭインターフェイスが決定すると、プロセス１１００はステップ１１２０へ進む。ステップ１１２０において、ＮＶＭインターフェイスは、パラメータをプライオリティキューに挿入する。例えば、ファイルＧ−Ｋ（図４）の５の合計スパン及び１２０のスタートＬＢＡが、エレメント１２１２としてプライオリティキュー１２０２（図１２）に挿入される。更に、プライオリティキュー１２０２は、４エレメントの固定サイズであるので、エレメント１２１２を挿入すると、キュー１２０２の端のエレメント（例えば、エレメント１２０４）を退去させる。
【０１２２】
パラメータを挿入した後、プロセス１１００は、ステップ１１２２へ進む。ステップ１１２２において、ＮＶＭインターフェイスは、複数のエントリにおけるエントリ数に等しいエントリ数だけスライディングウインドウをツリー内で前方に移動させる。例えば、図４に戻ると、ＮＶＭインターフェイスは、スライディングウインドウ４０６を５つのエントリだけ前方に移動させる。即ち、新たに移動されるスライディングウインドウ４０６の第１エントリは、ファイルＬに対応する。プロセス１１００は、次いで、ステップ１１１４へ進み、ＮＶＭインターフェイスは、スライディングウインドウがツリーの端を通過したかどうか決定する。
【０１２３】
ステップ１１１８へ戻ると、パラメータが挿入可能でないとＮＶＭインターフェイスが決定すると、プロセス１１００は、ステップ１１１２へ進む。ステップ１１１２において、ＮＶＭインターフェイスは、スライディングウインドウをツリーにおいて前方に単一エントリだけ移動させる。
【０１２４】
このような解決策を使用し、ＮＶＭインターフェイスは、論理的スペース内でバラバラであるエントリの複数の候補セットを探索することができ、エントリの各セットは、ツリーにおいて単一のエントリ又はノードとして合成される。その結果、ＮＶＭインターフェイスは、多数のツリー平坦化動作にわたってツリーのスキャニングを償却する。これが特に有用であるのは、ツリーのスキャニングが処理効率に関してコストがかかるからである（例えば、多数のメモリ動作及びキャッシュスラッシュを必要とする）。従って、ＮＶＭインターフェイスが、ツリーを１回通過するときに複数の候補を形成できる場合には、システム効率を改善することができる。更に、スライディングウインドウにより包囲されるエントリ数に等しいエントリ数だけスライディングウインドウをツリー内で前方に移動させることにより、ＮＶＭインターフェイスは、プライオリティキューに関連パラメータを挿入した後に同じエントリを再考慮する必要性を回避することができる。
【０１２５】
ある実施形態では、ＮＶＭインターフェイスは、プロセス１１００（図１１）に対して複数のスライディングウインドウ又は貪欲アルゴリズムを合成する。例えば、プロセス８００（図８）と同様のプロセスを使用して、ＮＶＭインターフェイスは、２つ以上のスライディングウインドウに適合するエントリを検出する。次いで、ＮＶＭインターフェイスは、２つ以上のスライディングウインドウのエントリに関連したパラメータを２つ以上のプライオリティキューに挿入するよう試み、各プライオリティキューは、２つ以上のスライディングウインドウの１つに関連付けられる。
【０１２６】
別の例として、プロセス１０００（図１０Ａ及び１０Ｂ）と同様のプロセスを使用して、ＮＶＭインターフェイスは、プライオリティキューに基づいて、エントリの最適セットが検出されたかどうか決定する。特に、スライディングウインドウにより包囲されるエントリの最適セットの合計スパンは、そのエントリの最適セットにおけるエントリ数に等しい値を有する。即ち、３２個のエントリを包囲するスライディングウインドウの場合に、エントリの最適セットの合計スパンも、３２である。
【０１２７】
エントリの最適セットが検出されたとの決定に応答して、ＮＶＭインターフェイスは、スライディングウインドウにより包囲されるエントリの所定数を拡張して、拡張スライディングウインドウを発生する。次いで、ＮＶＭインターフェイスは、その拡張スライディングウインドウをツリーに適用する。
【０１２８】
更に別の実施形態において、ツリーに現在使用できるメモリ量が所定スレッシュホールドより少ないときだけツリーをサーチするのではなく、ＮＶＭインターフェイスは、ツリー更新を遂行しながらエントリの候補セットのプライオリティキューを維持する。特に、ＮＶＭインターフェイスがツリーのノードを更新する間に（例えば、１つ以上のエントリを追加し、１つ以上のエントリを除去し、及び／又は１つ以上のエントリのサイズを変更することにより）、ＮＶＭインターフェイスは、ノードのコンテンツを解凍してメモリ（例えば、図１のメモリ１１４）へ読み出す必要がある。このプロセス中に、ノードは既に解凍されているので、ＮＶＭインターフェイスは、ノードに関連したパラメータを若干の付加的な動作のみで容易に得ることができる。これらのパラメータは、次いで、プライオリティキューにセーブされる。
【０１２９】
プライオリティキュー１２０２（図１２）と同様に、ツリーの更新中に維持されるプライオリティキューは、適当な数のエレメントを含むことができる。各エレメントは、例えば、ノードのメリット、合計スパン、及び／又はスタートＬＢＡのような１つ以上のパラメータに関連付けられる。
【０１３０】
図１３は、ツリー更新中に維持されるプライオリティキューを使用してツリーを平坦化するプロセス１３００のフローチャートである。このプロセス１３００は、ステップ１３０２で始まり、そしてステップ１３０４において、ＮＶＭインターフェイス（例えば、図１のＮＶＭインターフェイス１１８又は図２のＮＶＭインターフェイス２１８）は、揮発性メモリ（例えば、図１の揮発性メモリ１１４）に記憶されたツリーのノードにおいて更新を遂行し、ノードは、複数のエントリを含む。
【０１３１】
次いで、ステップ１３０６において、ＮＶＭインターフェイスは、複数のエントリの数が所定値より大きいかどうか検出する。従って、効率を改善するために、ＮＶＭインターフェイスは、ノードが比較的いっぱいであるか又は高い使用量を有する場合にノードをプライオリティキューに挿入すべきかどうかだけ考慮すればよい。あるケースでは、例えば、ＮＶＭインターフェイスは、ノードが比較的いっぱいであるかどうか決定するためにフィルタを適用することができる。或いは又、ＮＶＭインターフェイスは、ノードに関連した使用量を決定してもよい。
【０１３２】
複数のエントリの数が所定値より大きいとＮＶＭインターフェイスが検出すると、プロセス１３００はステップ１３０８へ進む。ステップ１３０８において、ＮＶＭインターフェイスは、ノードに関連したパラメータをプライオリティキューに挿入するよう試みる。例えば、ＮＶＭインターフェイスは、ノードの入力に対する合計スパン及びスタートＬＢＡを得る。ノードは、可変数のエントリ（例えば、１０ないし１６のエントリ）記憶できるので、ＮＶＭインターフェイスは、ノードのメリットを計算する必要があり、ここで、メリットは、プライオリティキューにおけるプライオリティ番号として機能する。ある実施形態では、計算されたメリットは、エントリの合計スパンとエントリの数との間の比に基づく。例えば、計算されたメリットは、エントリの合計スパンとエントリの数との間の比に等しい。別の例として、それにより生じる比に重みを乗算して、メリットの整数値を発生する。これら実施形態の両方において、プライオリティキューは、最小プライオリティキューであり、プライオリティキュー内のエレメントは、メリットに基づいて増加順に記憶される。
【０１３３】
更に別の例として、メリットは、計算されたメリットの逆数である。従って、プライオリティキューは、最大プライオリティキューであり、エレメントは、メリットに基づいて減少順に記憶される。更に別の実施形態において、エントリの数を使用してメリットを計算するのではなく、ＮＶＭインターフェイスは、バイト使用量を使用してメリットを計算する。
【０１３４】
図１４は、プライオリティキュー１４０２のブロック図１４００である。プライオリティキュー１４０２は、４つのエレメントを含み、各エレメントは、メリット、合計スパン及びスタートＬＢＡに関連している。図示されたように、プライオリティキュー１４０２は、最小プライオリティキューであり、エレメントは、メリットに基づいて増加順に記憶される。対応的に、最低プライオリティ番号（例えば、最低メリット）を伴うエレメントは、キューの前部へ移動する。当業者であれば、プライオリティキュー１４０２は、適当な数のエレメントを含むことが明らかであろう。しかしながら、簡単化のために、プライオリティキュー１４０２は、４つのエレメントを含むように示されている。
【０１３５】
上述したように、メリットは、エントリの合計スパンとエントリの数との間の比に等しい。従って、エレメント１４０４に対応するノードが１０個のエントリを有すると仮定すれば、ノードのメリットは、４２の値を有し、これは、エントリの合計スパンとノードのエントリ数との間の比（４２０／１０＝４２）に等しい。エレメント１４０６−１４１０のメリットについても同様の計算を行うことができる。
【０１３６】
挿入されるべきノードのメリットが、プライオリティキュー１４０２に現在記憶されている最高メリットより小さい場合には、ＮＶＭインターフェイスは、その関連パラメータをキュー１４０２の適当な位置に挿入する。しかしながら、ノードのメリットが、プライオリティキュー１４０２に現在記憶されている最高メリットより大きい場合には、ＮＶＭインターフェイスは、その関連パラメータを破棄する。
【０１３７】
図１３のステップ１３０６に戻ると、複数のエントリの数が所定値より少ないとＮＶＭインターフェイスが検出した場合には、プロセス１３００は、ステップ１３１０へ進む。特に、ＮＶＭインターフェイスは、ノードがいっぱいでないことを決定する。
【０１３８】
ステップ１３１０において、ＮＶＭインターフェイスは、プライオリティキューにノードを挿入するよう試みるまで待機する。即ち、ＮＶＭインターフェイスは、ノードをバイパスし、そして付加的なエントリがノードに追加される（例えば、使用量が増加する）まで待機する。
【０１３９】
当業者であれば、ツリーの複数ノードの場合にはサブプロセス１３４０（図１３に破線ボックスで示された）が実行されることが明らかであろう。特に、ＮＶＭインターフェイスは、更新されているツリーの各ノードにわたって繰り返し、そしてノードをプライオリティキューに追加するよう試みることができる。
【０１４０】
ステップ１３１０及び１３０８の各々から、プロセス１３００は、ステップ１３１２へ進む。特に、ステップ１３１２において、ＮＶＭインターフェイスは、ツリーに現在使用できるメモリの量が所定のスレッシュホールドより少ないことを検出する。次いで、ステップ１３１４において、ＮＶＭインターフェイスは、プライオリティキューに少なくとも一部分基づいてツリーの少なくとも一部分を合成する。
【０１４１】
例えば、プライオリティキューに基づき、ＮＶＭインターフェイスは、合成できるエントリを有する最適なノードを決定する。従って、最小プライオリティキューの場合には、ＮＶＭインターフェイスは、プライオリティキュー内の第１エレメントを最適なノードとして取り上げる。ツリーの各ノードが１０ないし１６個のエントリを記憶できる場合に、最適なノードは、１６個のエントリを含み、各エントリは、１つのＬＢＡのスパンを有する。
【０１４２】
ある実施形態では、ＮＶＭインターフェイスが最適なノードを決定すると、ＮＶＭインターフェイスは、ツリーに必要な付加的なメモリの量が、最適なノードのエントリを合成することにより解放できるメモリの量を越えるかどうか検出する。必要な付加的なメモリの量が、エントリの合成により解放できるメモリの量以下であることをＮＶＭインターフェイスが検出すると、ＮＶＭインターフェイスは、ツリーの付加的なサーチを行う必要なくそれらのエントリを合成することができる。
【０１４３】
しかしながら、必要な付加的なメモリの量が、エントリの合成により解放できるメモリの量より大きいことをＮＶＭインターフェイスが検出すると、ＮＶＭインターフェイスは、他の適当なプロセスを使用して、平坦化すべきエントリの別のセットを見つけることができる。例えば、ＮＶＭインターフェイスは、ツリーを横切って少なくとも１つのスライディングウインドウを移動し、そして少なくとも１つのスライディングウインドウを使用してツリーの少なくとも一部分を合成することができる。例えば、ＮＶＭインターフェイスは、図８、１０Ａ、１０Ｂ及び１１のプロセス各々８００、１０００及び１１００の１つ以上と同様のプロセスを使用することができる。プロセス１３００は、次いで、ステップ１３１６において終了となる。
【０１４４】
ツリーの余すところのないサーチに比して、上述した解決策は、比較的短時間内に良好な平坦化候補を発生することができる。更に、メモリは、広範囲なツリー再バランス動作を必要とせずにツリー平坦化の後に直ちに解除される（例えば、合計スパンは、親ノードにおいてアドレスすることができる）。
【０１４５】
図８、９、１０Ａ−１０Ｂ、１１及び１３のプロセス８００、９００、１０００、１１００及び１３００は、システムの１つ以上のコンポーネント（例えば、図１の電子装置１００又は図２の電子装置２００）によって実行されることを理解されたい。例えば、プロセスの少なくとも幾つかのステップは、ＮＶＭインターフェイス（例えば、図１のＮＶＭインターフェイス１１８又は図２のＮＶＭインターフェイス２１８）により遂行される。当業者であれば、１つ以上のステップがコントロール回路（例えば、図１のＳｏＣコントロール回路１１２）によって遂行されることが明らかであろう。
【０１４６】
更に、図８、９、１０Ａ−１０Ｂ、１１及び１３のプロセス８００、９００、１０００、１１００及び１３００は、単なる例示に過ぎないことを理解されたい。本発明の範囲から逸脱せずに、いずれのステップを除去、変更又は結合することもできるし、又、いずれの付加的なステップを追加することもできる。
【０１４７】
本発明の以上に述べた実施形態は、例示のためのものであり、これに限定されるものではない。
【符号の説明】
【０１４８】
１００：電子装置
１１０：システムオンチップ（ＳｏＣ）
１１２：ＳｏＣコントロール回路
１１４：メモリ
１１８：ＮＶＭインターフェイス
１２０：不揮発性メモリ（ＮＶＭ）
２００：電子装置
２１０：ファイルシステム
２１２：ＮＶＭドライバ
２１６：ＮＶＭバスコントローラ
２１８：ＮＶＭインターフェイス
２２０：ＮＶＭ
３００：ＮＶＭ
３０２、３０４：ストライプ
４００：マッピング
４０２：論理的ブロックアドレス（ＬＢＡ）
４０４：物理的アドレス
４０６：スライディングウインドウ
５００：ツリー
５０２、５１０、５２０、５３０：ノード
５０３−５０５、５１２、５１４、５２２、５２４、５３２、５３４：エントリ
５４０−５４４：ＮＡＮＤポインタ
６００：マッピング
７００：更新されたツリー
【図１】
0005709814.tif 000002
【図２】
0005709814.tif 000003
【図３】
0005709814.tif 000004
【図４】
0005709814.tif 000005
【図５】
0005709814.tif 000006
【図６】
0005709814.tif 000007
【図７】
0005709814.tif 000008
【図８】
0005709814.tif 000009
【図９】
0005709814.tif 000010
【図１０Ａ】
0005709814.tif 000011
【図１０Ｂ】
0005709814.tif 000012
【図１１】
0005709814.tif 000013
【図１２】
0005709814.tif 000014
【図１３】
0005709814.tif 000015
【図１４】
0005709814.tif 000016