(57)【特許請求の範囲】
【請求項１】
不揮発性記憶デバイスにおいてフラグメント化ファイルに対してメモリーのリアドレシングを実行するために、少なくとも部分的に計算デバイスによって実行される方法であって、
前記計算デバイスによって、前記フラグメント化ファイルの前記メモリーをリアドレシングするためにコマンドを前記不揮発性記憶デバイスに送るステップであって、前記不揮発性記憶デバイスがソリッド・ステート・ドライブであり、前記フラグメント化ファイルのファイル・フラグメントが、複数の不連続物理アドレスに跨がって広がり、前記不揮発性記憶デバイス内の複数の物理位置に格納される、ステップと、
前記計算デバイスによって、前記フラグメント化ファイルの前記メモリーがリアドレシングされたという応答を前記不揮発性記憶デバイスから受けるステップであって、前記メモリーが連続物理アドレスにリアドレシングされ、前記リアドレシングが、
前記フラグメント化ファイルの開始ブロックに対し、一意の開始物理メモリー・アドレスを割り当て、前記一意の開始物理メモリー・アドレスが前記フラグメント化ファイルにのみ割り当てられ、
前記フラグメント化ファイルの全ての後続のブロックが、前記不揮発性記憶デバイスの外部から見たときに、前記フラグメント化ファイルに一意でない共有可能な物理メモリー・アドレスを有し、前記共有可能な物理メモリー・アドレスが、前記不揮発性記憶デバイスに格納される他のファイルによって共有可能であると、オペレーティング・システムの少なくとも１つのコンポーネントによって見られて、同じ所与の共有可能な物理メモリー・アドレスが前記少なくとも１つのコンポーネントにより、複数のファイルに割り当てられると見られるようにし、前記物理メモリー・アドレスが前記不揮発性記憶デバイスに対し内部的に一意であり、
前記開始ブロックの前記一意の開始物理メモリー・アドレスと、前記開始ブロックの前記一意の開始物理メモリー・アドレス後に前記フラグメント化ファイルの全ての前記後続のブロックが連続してアドレスされる前記フラグメント化ファイルの長さと、を使用して前記フラグメント化ファイルがシーケンシャル・アクセスとしてのみ引き出される、
ことを含む、ステップと、
を含み、
前記ファイル・フラグメントの前記複数の物理位置が、前記フラグメント化ファイルの前記メモリーがリアドレシングされた後も同じままで残る、方法。
【請求項２】
請求項１記載の方法であって、更に、前記リアドレシングされたメモリーに基づいて論理ブロック・アドレシング（ＬＢＡ）マッピング・テーブルを更新するステップを含む、方法。
【請求項３】
請求項１記載の方法であって、更に、前記計算デバイスによって、前記連続物理アドレスを使用して前記フラグメント化ファイルを読み出す最適化コマンドを送るステップを含む、方法。
【請求項４】
不揮発性記憶デバイスであって、
処理ユニットと、
不揮発性メモリーと、
を含み、
前記不揮発性記憶デバイスが、フラグメント化ファイルに対してメモリーをリアドレシングする動作を実行するように構成され、前記動作が、
前記フラグメント化ファイルの前記メモリーをリアドレシングするためにコマンドを受ける動作であって、前記フラグメント化ファイルのファイル・フラグメントが、複数の不連続物理アドレスに跨がって広がり、前記不揮発性記憶デバイス内の複数の物理位置に格納される、動作と、
前記ファイル・フラグメントの各々に対して、連続物理メモリー・アドレスを前記ファイル・フラグメントに割り当てる動作であって、
前記フラグメント化ファイルの開始ブロックに対し、一意の開始物理メモリー・アドレスを割り当て、前記一意の開始物理メモリー・アドレスが前記フラグメント化ファイルにのみ割り当てられ、
前記フラグメント化ファイルの全ての後続のブロックが、前記不揮発性記憶デバイスの外部から見たときに、前記フラグメント化ファイルに一意でない共有可能な物理メモリー・アドレスを有し、前記共有可能な物理メモリー・アドレスが、前記不揮発性記憶デバイスに格納される他のファイルによって共有可能であると、オペレーティング・システムの少なくとも１つのコンポーネントによって見られて、同じ所与の共有可能な物理メモリー・アドレスが前記少なくとも１つのコンポーネントにより、複数のファイルに割り当てられると見られるようにし、前記物理メモリー・アドレスが前記不揮発性記憶デバイスに対し内部的に一意であり、
前記開始ブロックの前記一意の開始物理メモリー・アドレスと、前記開始ブロックの前記一意の開始物理メモリー・アドレス後に前記フラグメント化ファイルの全ての前記後続のブロックが連続してアドレスされる前記フラグメント化ファイルの長さと、を使用して前記フラグメント化ファイルがシーケンシャル・アクセスとしてのみ引き出される、
ことを含む、動作と、
を含み、
前記ファイル・フラグメントの前記複数の物理位置が、前記フラグメント化ファイルの前記メモリーがリアドレシングされた後も、同じままで残る、不揮発性記憶デバイス。
【請求項５】
請求項４記載の不揮発性記憶デバイスにおいて、前記不揮発性記憶デバイスが、ソリッド・ステート・ドライブである、不揮発性記憶デバイス。
【請求項６】
請求項４記載の不揮発性記憶デバイスにおいて、前記不揮発性記憶デバイスが、相変化メモリー・デバイスである、不揮発性記憶デバイス。
【請求項７】
請求項４記載の不揮発性記憶デバイスにおいて、前記フラグメント化ファイルの前記メモリーをリアドレシングする前記コマンドを、前記不揮発性記憶デバイスの自動維持スケジュールの一部として受ける、不揮発性記憶デバイス。
【請求項８】
請求項４記載の不揮発性記憶デバイスにおいて、前記フラグメント化ファイルの前記メモリーをリアドレシングする前記コマンドを、オペレーティング・システム・コンポーネントから受ける、不揮発性記憶デバイス。
【請求項９】
請求項４記載の不揮発性記憶デバイスにおいて、前記フラグメント化ファイルの前記メモリーをリアドレシングするコマンドを受ける動作が、
フラグメンテーションの程度に基づいて、リアドレシングする可能性が最も高い候補ファイルを決定する動作と、
前記最も可能性が高い候補ファイルを、前記フラグメント化ファイルとして選択する動作と、
を含む、不揮発性記憶デバイス。
【請求項１０】
不揮発性記憶デバイスにおけるフラグメント化ファイルに対してメモリーをリアドレシングする動作を計算デバイスに実行させるコンピューター実行可能命令を格納するコンピューター読み取り可能記憶デバイスであって、前記動作が、
前記フラグメント化ファイルの前記メモリーをリアドレシングするために前記不揮発性記憶デバイスにコマンドを送る動作であって、前記フラグメント化ファイルのファイル・フラグメントが、不連続の複数の物理アドレスに跨がって広がり、前記不揮発性記憶デバイス内の複数の物理位置に格納される、動作と、
前記フラグメント化ファイルのメモリーがリアドレシングされたという応答を前記不揮発性記憶デバイスから受ける動作であって、前記メモリーが連続物理アドレスにリアドレシングされ、前記リアドレシングが、
前記フラグメント化ファイルの開始ブロックに対し、一意の開始物理メモリー・アドレスを割り当て、前記一意の開始物理メモリー・アドレスが前記フラグメント化ファイルにのみ割り当てられ、
前記フラグメント化ファイルの全ての後続のブロックが、前記不揮発性記憶デバイスの外部から見たときに、前記フラグメント化ファイルに一意でない共有可能な物理メモリー・アドレスを有し、前記共有可能な物理メモリー・アドレスが、前記不揮発性記憶デバイスに格納される他のファイルによって共有可能であると、オペレーティング・システムの少なくとも１つのコンポーネントによって見られて、同じ所与の共有可能な物理メモリー・アドレスが前記少なくとも１つのコンポーネントにより、複数のファイルに割り当てられると見られるようにし、前記物理メモリー・アドレスが前記不揮発性記憶デバイスに対し内部的に一意であり、
前記開始ブロックの前記一意の開始物理メモリー・アドレスと、前記開始ブロックの前記一意の開始物理メモリー・アドレス後に前記フラグメント化ファイルの全ての前記後続のブロックが連続してアドレスされる前記フラグメント化ファイルの長さと、を使用して前記フラグメント化ファイルがシーケンシャル・アクセスとしてのみ引き出される、
ことを含む、動作と、
を含み、
前記ファイル・フラグメントの前記複数の物理位置が、前記フラグメント化ファイルの前記メモリーがリアドレシングされた後も同じままで残る、コンピューター読み取り可能記憶デバイス。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  記憶デバイスにおいてファイルが書き込まれそして消去されるに連れて、ときの経過と共にこれらのファイルは断片化し、記憶デバイスの性能が低下するおそれがある。この性能問題を軽減するのに役立てるために、ディスク・ディフラグメンテーションを記憶デバイスにおいて実行することができる。ディスク・ディフラグメンテーションとは、記憶デバイスにおけるファイル・フラグメントを連続位置に移動させることによって、記憶デバイスにおけるファイルのフラグメンテーションを低減する動作を指し、これによって、ファイル・フラグメントの全てを読み込むまたは書き出すために必要とされる、記憶デバイスと中央処理ユニット（ＣＰＵ）メモリーとの間における入力／出力（Ｉ／Ｏ）トランザクションの回数を減らす。
【発明の概要】
【発明が解決しようとする課題】
【０００２】
[0002]  ソリッド・ステート・ドライブ（ＳＳＤ）のような不揮発性記憶デバイスは、回転磁気および光ドライブのような、従前からのハード・ディスク・ドライブに代わって、またはこれに加えて、増々記憶デバイスとして使用されつつある。従前からのハード・ディスク・ドライブではディフラグメンテーションを有効に使用することができるが、ディフラグメンテーションを不揮発性記憶デバイスで使用すると、問題となる可能性がある。何故なら、これらの不揮発性記憶デバイスは、当該デバイスに対する繰り返し消去動作によって摩耗を被るおそれがあるからである。不揮発性記憶デバイスは、その信頼性が低下する前に消去および書き込みしてもよい回数が制限されているので、不揮発性記憶デバイスのディフラグメンテーションは、ディスク性能と記憶デバイスの寿命との間でトレードオフを行わなければならない。
【課題を解決するための手段】
【０００３】
[0003]  この摘要は、詳細な説明において以下で更に説明する概念から選択されたものを、簡略化した形態で紹介するために設けられる。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を限定するために使用されることを意図するのでもない。
【０００４】
[0004]  不揮発性記憶デバイスにおいてメモリー・アドレスを配列し直す(rearrange)技法およびツールについて説明する。例えば、データーを記憶デバイスにおけるその物理位置から移動させることなく、メモリー・アドレスをリアドレシングすることができる。記憶デバイスは、オペレーティング・システムには透過的な様態でメモリー・アドレスをリアドレシングすることができる。あるいは、オペレーティング・システムが記憶デバイスに最適化を実行し、 例えば、最適化記憶デバイスのためのマッピング・テーブルを変更する命令を発行することもできる。
【０００５】
[0005]  例えば、不揮発性記憶デバイスにおいてフラグメント化ファイルのためにメモリーのリアドレシングを実行する方法を提供することができる。この方法は、フラグメント化ファイルのファイル・フラグメントが複数の不連続物理アドレスに跨がって広がる、フラグメント化ファイルのメモリーをリアドレシングするコマンドを、 不揮発性記憶デバイスに送るステップと、フラグメント化ファイルに対するメモリーがリアドレシングされ連続物理アドレスになったという応答を、不揮発性記憶デバイスから受けるステップとを含む。ファイル・フラグメントの物理位置は、メモリーがリアドレシングされた後も同じまま残る。
【０００６】
[0006]  他の例として、不揮発性記憶デバイスは、本明細書において説明する動作を実行するように構成することができる。例えば、不揮発性記憶デバイスは、フラグメント化ファイルのメモリーをリアドレシングし、フラグメント化ファイルのファイル・フラグメントの各々に対して、連続物理メモリー・アドレスをファイル・フラグメントに割り当てる命令を受けることができる。ファイル・フラグメントの物理位置は、メモリーがリアドレシングされた後も同じまま残る。
【０００７】
[0007]  更に他の例として、本明細書において説明する動作をシステムに実行させるコンピューター実行可能命令を格納するコンピューター読み取り可能記憶媒体を提供することができる。例えば、コンピューター読み取り可能記憶媒体は、フラグメント化ファイルに対するメモリーが連続物理アドレスにリアドレシングされたという応答を不揮発性記憶デバイスから受けることができ、リアドレシングされた連続物理アドレスに基づいて、仮想マッピング・テーブルを更新することができる。ファイル・フラグメントの物理位置は、メモリーがリアドレシングされた後も、同じまま残る。オペレーティング・システムのための論理ブロック・アドレシング（ＬＢＡ）マッピング・テーブルは、リアドレシングされた物理アドレスに基づいて更新されず、ＬＢＡマッピング・テーブルは仮想マッピング・テーブルと通信する。
【０００８】
[0008]  本明細書において説明するように、種々の他の特徴および利点も、所望通りに、本技術に組み込むことができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、動作環境例のブロック図である。
【図２】図２は、メモリーのリアドレシングを実行する方法例のフローチャートである。
【図３】図３は、メモリーのリアドレシングを実行する方法のフローチャートである。
【図４ａ】図４ａは、物理アドレスをリアドレシングする例を示す図である。
【図４ｂ】図４ｂは、物理アドレスをリアドレシングする例を示す図である。
【図４ｃ】図４ｃは、物理アドレスをリアドレシングする例を示す図である。
【図５ａ】図５ａは、メモリーの物理位置を移動させることなく、物理アドレスをリアドレシングする例を示す図である。
【図５ｂ】図５ｂは、メモリーの物理位置を移動させることなく、物理アドレスをリアドレシングする例を示す図である。
【図６ａ】図６ａは、ＬＢＡマッピング・テーブルおよび物理アドレスのマッピングの例を示すテーブルである。
【図６ｂ】図６ｂは、ＬＢＡマッピング・テーブルおよび物理アドレスのマッピングの例を示すテーブルである。
【図７】図７は、説明する実施形態を実現することができる計算システム例の図である。
【図８】図８は、本明細書において説明する技術と共に使用することができる移動体デバイス例である。
【発明を実施するための形態】
【００１０】
例１−全体像の例
[0017]  以下の説明は、不揮発性記憶デバイスにおいて物理メモリー・アドレスをリアドレシングするための技法およびソリューションを対象とする。例えば、フラグメント化ファイルのメモリーの物理アドレスは、記憶デバイスにおけるその物理メモリー位置からメモリーを移動させることなく、リアドレシングすることができる。
【００１１】
[0018]  メモリー・アドレスをリアドレシングすることによって、フラグメント化ファイルのファイル・フラグメントを連続メモリー・アドレスにリアドレシングすることができ、一層効率的なファイル動作（例えば、ファイルの引き出し）を可能にする。例えば、ファイルのファイル・フラグメントが連続メモリー・アドレスに配置されると、オペレーティング・システムは、ファイルを引き出すために、１回の要求を行えばよく、または複数の要求をパックすることができると考えられる。一方、ファイルが不連続メモリー・アドレスに配置されると、オペレーティング・システムはファイルを引き出すために複数回の要求を記憶デバイスに対して行わなければならないおそれがある。
【００１２】
[0019]  不揮発性記憶デバイスのディスク・ディフラグメンテーションは、同様の効果を得ることが可能である。記憶デバイスをディフラグメントすることによって、ディフラグメンテーションの後にはファイル・フラグメントが連続物理メモリー位置に配置されるように、ファイル・フラグメントは記憶デバイスの実際の物理メモリー位置間で移動させられる。しかしながら、ディフラグメンテーションは、ＳＳＤのような不揮発性記憶デバイスの寿命を短くするおそれがある。何故なら、ディフラグメンテーション動作毎に、記憶デバイス内でファイル・フラグメントを移動させるために複数回の消去および書き込み動作を必要とし、記憶デバイスにおける摩耗が増加するからである。摩耗が増えるという問題は、書き込み増幅(write amplification)として当業界において知られている現象による単なるデーターの消去および書き込みよりも大きい。書き込み増幅は、メモリーに再度書き込む前に消去しなければならないというシナリオを説明する。通例、データーは、例えば、サイズが４〜８キロバイトのページ・サイズ単位で書き込まれるが、一方消去されるブロック（消去ブロック）は、通例、それよりも遙かに大きなサイズである（例えば、１２８キロバイト、または高密度記憶デバイスでは、数ＭＢという場合もある）。したがって、例えば、５１２バイトのデーターを書き込む場合であっても、データーを書き込むまたは移動するときは、この書き込みの結果、それよりも遙かに大きなブロックのデーターを移動させ消去しなければならないというおそれがある。尚、これらのドライブをディフラグメントすると、根底にある関わりを知らないと、記憶デバイスが信頼性高く動作することができる時間を短縮する可能性があること、そして本明細書において説明する実施形態は、周期的にフラグメンテーションを除去しつつも、記憶デバイスが信頼性高く動作できる時間を延長することができることは認められてしかるべきである。
【００１３】
[0020]  回転磁気および光ドライブでのディフラグメンテーションは、ファイル・フラグメントが物理的にデバイスの新たな隣接位置に移動され、Ｉ／Ｏパイプラインにおいて最適化を達成することを必要とする。この最適化は、読み取りおよび書き込みヘッドが他のファイル・フラグメントの物理的近傍にあるときに行われる。本明細書において説明する実施形態は、オペレーティング・システムが、コンテンツが格納されているアドレス可能位置を変更することによって、実際にコンテンツを新たな物理的隣接位置にコピーすることなく、どのようにして不揮発性記憶デバイスを利用してＩ／Ｏパターンを最適化するかについて示す。不揮発性記憶デバイスは、コンテンツをアドレス可能位置に格納する。アドレス可能位置は、関連コンテンツが格納されているばらばらの(disparate)位置の参照アドレスを論理的に隣接するように変更することによって、最適化することができる。更に、本明細書において説明する実施形態は、記憶デバイスにおける早すぎる摩耗という悪影響を受けることなく、ディフラグメンテーションと同様のＩ／Ｏ性能に関する利点を提供し、電力の浪費を回避し、写真を保存するまたはムービーを再生するというようなエンド・ユーザーの作業の代わりに、大量の記憶システムのコンテンツを再配列することに関連するエンド・ユーザーの影響を回避する。
例２−不揮発性記憶デバイスの例
[0021]  本明細書において使用する場合、不揮発性記憶デバイスとは、電源を入れる必要なく、その内容を保持する任意の半導体ベースの記憶デバイスを指す。例えば、不揮発性記憶デバイスは、ソリッド・ステート・ドライブ、ＵＳＢフラッシュ・ドライブ、チップ上埋め込みメモリー、相変化メモリー・デバイス、または任意の他のタイプの不揮発性半導体ベース・ストレージとすることができる。また、本明細書において説明する実施形態は、ランダム・アクセス・メモリー（ＲＡＭ）のように、順序付けされた情報がフラグメンテーションのために分散させられる可能性がある任意のシナリオにおいても、本明細書において説明するメカニズムを使用して、ブロックまたはページ・リアドレシングによってブロックを連続レイアウトに並び替えるために、実際にデーターを異なる記憶ページにコピーする必要なく、使用することができる。
【００１４】
[0022]  本明細書において使用する場合、不揮発性メモリーとは、半導体ベースのストレージを指し、したがって、磁気記憶デバイス（例えば、ハード・ディスク・ドライブ）や光記憶デバイス（例えば、ＣＤまたはＤＶＤ媒体）を含まない。
例３−物理メモリーのリアドレシング
[0023]  磁気または光記憶デバイスとは異なり、不揮発性記憶デバイスはデーターを線形に読み取らない。例えば、磁気記憶デバイスでは、読み取りおよび書き込みヘッドは、プラッタ上の位置に移動し、プラッタが回転すると、そのプラッタから情報を読み取る。磁気記憶デバイスがプラッタ上の他の位置においてデーターを読み取りたい場合、読み取りおよび書き込みヘッドは新たな位置に移動しなければならない。磁気記憶デバイスの物理アドレスは、プラッタ（１つまたは複数）上の位置に基づいて配列される。
【００１５】
[0024]  一方、不揮発性記憶デバイスは、読み取りおよび書き込みヘッドを使用せず、代わりに、個々のトランジスタの状態を判定することによって情報を読み出すことができる。トランジスタに電圧が流されているので、電流が二進データーとして検出される。この動作は、多くの異なるトランジスタにおいて並列して実行することができる。これらのデバイスには、物理読み取り／書き込みヘッドを特定の位置に移動させることに伴うレイテンシが生じないが、これらが性能上の利点を顕在化させるのは、オペレーティング・システムおよびアプリケーションが、多くの小さいトランザクションを使用するときよりも少ないが大きなアクセスをしてデーターを引き出すまたは格納するときである。例えば、性能および電力消費の観点から、１つの連続ファイル読み取り要求にマッピングする１ＭＢのチャンクを読み出す方が、各々５１２バイトのアクセスを２０００回行って同じファイル・ペイロードを引き出すよりも良い。本明細書において説明する実施形態を採用するシステムは、連続ブロックを解放する代わりに、ばらばらの１組のブロックにデーターをダンプする(dumping)ことによって、高い書き込み速度を提供する(deliver)ことができる。何故なら、データーは、あたかもそれが実際に物理的に隣接するアドレス可能ブロックに配置されたかのように、アドレシングされることになるからである。
【００１６】
[0025]  しかしながら、不揮発性記憶デバイスを使用する計算デバイス、および記憶デバイス自体は、通常、不揮発性記憶デバイスを磁気記憶デバイスと同様に扱う。即ち、線形に読み出されなければならないかのように扱う。フラッシュ変換レイヤ（ＦＴＬ： flash translation layer）は、データーが特定の物理位置にあるように見せることを可能にし、ＦＴＬは、不揮発性記憶デバイスにおいて物理メモリー・アドレスの物理位置に対するマッピングを追跡する。つまり、不揮発性記憶デバイスは、線形に読み取られるように見せることができるように、物理アドレスをトランジスタ位置に割り当てる。
【００１７】
[0026]  しかしながら、記憶デバイスにおける特定のトランジスタの物理アドレスおよび物理位置には共通のマッピング方式がない。即ち、物理アドレスは、記憶デバイスにおける任意の位置にマッピングすることができ、近隣の物理アドレスは、近隣の物理位置にマッピングする必要がなく、代わりに各半導体記憶デバイスの製造業者が、それら自身の方式を考え出して物理メモリー・アドレスを記憶デバイスに割り当てる。例えば、ある製造業者は、記憶デバイスにおいて物理メモリー・アドレスをハード・コード化する場合があり、一方他の製造業者は、例えば、摩耗平準化のために、動的にメモリー・アドレスを割り当てる場合もある。
例４−動作環境例
[0027]  本明細書における例のいずれにおいても、メモリー・アドレスをリアドレシングするための動作環境１００を設けることができる。図１は、動作環境例１００を示す図である。動作環境例１００は、ディフラグメンテーション・アプリケーション１２０およびオペレーティング・システム１３０を含む計算デバイス１１０を含む。例えば、計算デバイス１１０は、移動体電話機またはタブレット・コンピューターのような、移動体計算デバイスでもよい。
【００１８】
[0028]  オペレーティング・システム１３０は、不揮発性記憶デバイス１６０と通信することができる。オペレーティング・システム１３０は、ファイル・システム１４０およびデバイス・ドライバー１５０を含む。ファイル・システム１４０は、不揮発性記憶デバイス１６０におけるファイルの位置を維持し、不揮発性記憶デバイス１６０へのアクセスを管理する。例えば、ファイル・システム１４０は、ＮＴＦＳ(新技術ファイル・システム）、即ち、Microsoft Corporation（マイクロソフト社）によってそのWindows（登録商標）オペレーティング・システムのために開発されたファイル・システムであってもよい。デバイス・ドライバー１５０は、不揮発性記憶デバイスを制御し、オペレーティング・システム１３０と不揮発性記憶デバイス１６０との間における通信を処理する。
【００１９】
[0029]  図１において、計算デバイス１１０および不揮発性記憶デバイス１６０は、例示の目的上、別のコンポーネントとして示されている。しかしながら、計算デバイス１１０および不揮発性記憶デバイス１６０は同じデバイスであってもよいことは言うまでもない。
【００２０】
[0030]  図１において、オペレーティング・システム１３０は、ファイル・システム１４０と、不揮発性記憶デバイス１６０と通信するためのデバイス・ドライバー１５０とを含む。しかしながら、オペレーティング・システム１３０は、不揮発性記憶デバイス１６０と通信する他のコンポーネントを含んでもよい。一実施形態では、メモリーをリアドレシングするコマンドは、これら他のオペレーティング・システムのコンポーネントの内１つから来ても良い。
【００２１】
[0031]  一例では、計算デバイス１１０はディフラグメンテーション・アプリケーション１２０を含むことができる。ディフラグメンテーション・アプリケーション１２０は、図１においてオペレーティング・システム１３０の外部にあるように示されているが、ディフラグメンテーション・アプリケーション１２０がファイル・システム１４０内に統合される、またはデバイス・ドライバー１５０に含まれるように、変更されてもよいことは認められてしかるべきである。更に、ある実施形態では、ディフラグメンテーションが不揮発性記憶デバイス１６０自体に統合されてもよい。
【００２２】
[0032]  ディフラグメンテーション・アプリケーション１２０が計算デバイス１１０において実行されるとき、記憶デバイスのリアドレシングを遂行するために、メモリー・アドレスをリアドレシングすることを不揮発性記憶デバイス１６０に命令することができる。ディフラグメンテーション・アプリケーション１２０は、ファイル・システム１４０内に格納されている各ファイルがどのように、デバイス・ドライバー１５０を介して、不揮発性記憶デバイス１６０における記憶アドレスにマッピングされているのか検査することができる。ディフラグメンテーション・アプリケーション１２０が、ファイルが構成可能な数または予め定められた数よりも多いフラグメント（１、２、２０等）にまたがって格納されていると判定したとき、リアドレシング手法を呼び出すことができる。他の実施形態では、ディフラグメンテーション・アプリケーション１２０は、頻繁にアクセスされるファイルというような判断基準、あるいはファイル・サイズ、システム・ファイル、ユーザー・ファイル等のような、任意の数の他の発見的方法を使用することができる。ディフラグメンテーション・アプリケーション１２０は、ファイル・システム１４０およびデバイス・ドライバー１５０を介して、フラグメントされたアドレス位置を含むコマンドを記憶デバイス１６０に発行し、新たな非フラグメント化（またはフラグメント化が少ない）アドレス位置（１つまたは複数）を含む応答を受けることができる。例えば、あるファイルが１５個の不連続記憶アドレスに跨がって分散されていることが発見された場合、リアドレシングの後、ファイル・システムは、それを１５個の連続記憶アドレス位置として見る。次いで、ファイル・システム１４０は、ファイルに対して読み取りまたは書き込みを行うためにシーケンシャル・アクセスを実行することができる。これは、各フラグメントを引き出して組み立てるための１５回の別個のトランザクションよりも遙かに速い。本明細書において説明する実施形態は、記憶デバイス１６０が、利用可能な空いているストレージにファイル・フラグメントをコピーすることなく、代わりに記憶ブロックを連続アドレス可能範囲に単にリアドレシングして、デバイス・ドライバー１５０およびファイル・システム１４０が一層効率的な転送モードで動作するようにするには、リアドレシングをどのように遂行するのかについて説明する。他の実施形態では、ディフラグメンテーション・アプリケーション１２０は、ファイル・システム１４０およびデバイス・ドライバー１５０を介して、供給されるファイル記憶アドレスのリストを使用してファイルを連続にすることを、単に記憶デバイス１６０に命令することができる。コマンドが成功応答を受けた場合、ファイル・システムは、新たなアドレス位置（１つまたは複数）を使用すべきことを知り、一方誤り応答を受けた場合、後の時点においてリアドレシングを再度試すことができる。
【００２３】
[0033]  代わりに、ディフラグメンテーション・アプリケーション１２０は不揮発性記憶デバイス１６０内に存在してもよく、オペレーティング・システム１３０は、不揮発性記憶デバイス１６０に、ディフラグメンテーション・アプリケーション１２０を周期的に実行するように命令することができ、不揮発性記憶デバイス１６０は、代わりに、記憶デバイス１６０自体においてメモリーのリアドレシングを実行することができる。この例では、記憶デバイス１６０には、ファイル・システム１４０によって、ファイルのリスト、およびこれらが格納されているフラグメント位置というような情報が提供される。不揮発性記憶デバイス１６０がリアドレシングを完了した後、ファイル・コンテンツの新たな位置を記述する情報を含む応答することができ、デバイス・ドライバー１５０およびファイル・システム１４０に対する変更を更新する。次いで、ファイル・システム１４０は、ファイル・ブロックの読み出しまたは書き込みを行うときは、リアドレシングされた位置において、ファイル・フラグメントに対する新たなアドレスを使用する。
【００２４】
[0034]  一例では、デバイス・ドライバー１５０がディフラグメンテーション・アプリケーション１２０を内蔵してもよく、またはデバイス・ドライバー外部のディフラグメンテーション・アプリケーション１２０が、不揮発性記憶デバイス１６０をディフラグメントまたはリアドレスするルーチンをコールしてもよい。あるいは、デバイス・ドライバー１５０が、それ自体のディフラグメンテーション・アプリケーション１２０を有し、リアドレシング動作を開始し、記憶デバイス１６０を計算デバイス１１０に通信可能に結合するバスを介して、記憶位置をリアドレシングするために使用される特殊プロトコル・コマンドを使用して通信してもよい。
例５−リアドレシングを実行する方法
[0035]  図２は、不揮発性記憶デバイス１６０においてフラグメント化ファイルに対してメモリーのリアドレシングを実行する方法例２００のフローチャートである。
【００２５】
[0036]  ２１０において、フラグメント化ファイルに対してメモリーをリアドレシングするコマンドを不揮発性記憶デバイス１６０に送る。
[0037]  リアドレシング・コマンド２１０の目標は、不揮発性記憶デバイス１６０には本質的にランダムＩ／Ｏアクセス・パターンに見えるいくつかの非連続アドレス記憶ブロックに跨がって分散されたファイルを、もっと少ない（例えば、１回）シーケンシャル・アクセスに変換することである。本明細書において説明する実施形態は、物理的にデーターを新たな記憶位置にコピーする必要なく、記憶位置のリアドレシングを遂行する。物理的にデーターを新たな記憶位置にコピーすると、その結果、リアドレシングよりも多くの電力を使い果たし、ストレージの寿命に悪影響を及ぼし、ファイルをディフラグメントする目的でストレージ・コンテンツをオペレーティング・システムにそして再度ストレージ部分にコピーするのに遙かに長大なＩ／Ｏサイクルを招く。これは、エンド・ユーザーが実行したいアプリケーションまたは通常のオペレーティング・システムの挙動に関連するタスクの邪魔になる可能性がある。
【００２６】
[0038]  ２２０において、フラグメント化ファイルに対するメモリーがリアドレシングされたという応答を、不揮発性記憶デバイス１６０から受ける。
[0039]  ２３０において、ファイル・システム１４０は、ファイル・フラグメントがアドレスされている場所を保持するその内部レコードを更新する。ある実施形態では、ファイル・システム１４０は、２１０においてコマンドが送られるときにそのレコードを更新し、２２０において成功応答を受けない場合、リアドレシング・トランザクションをロール・バックすることができる。他の実施形態では、ファイル・システム１４０は、応答を受けるまで、応答２２０において戻される新たなアドレス・ブロックに基づいて、対応するリアドレシング変更をコミットするまたは行うのを待つこともできる。例えば、応答２２０は、コマンド２１０においてリアドレシングされることを要求されたブロックに対して新たなマッピングを含むことができ、これらのブロックに対して最終的に合意したアドレシングは、ファイル・システム１４０が２３０において更新されたときに完了する。
【００２７】
[0040]  一例では、ファイル・システム１４０が更新された後、計算デバイス１１０は、リアドレシングされたメモリーを反映する動作を実行することもできる。
[0041]  一例では、計算デバイスは、連続物理アドレスを含む、リアドレシングされたメモリーを使用して、不揮発性記憶デバイス１６０に他のコマンドを送ることができる。例えば、計算デバイスは、連続物理アドレスにおいてファイルを引き出すために、１つの要求または複数の要求の１群を送ることができる。ファイルは連続物理アドレスに配置されているので、計算デバイスにとって動作数が減少する。不揮発性記憶デバイス１６０によって使用される内部キャッシング・メカニズムは、一層効率的に利用することができる。何故なら、リアドレシング後の格納要求は、データーに対する連続シーケンシャル要求として実施することができるからである。小規模のランダムな読み出しおよび書き込みに対して、大規模のシーケンシャルな読み出しおよび書き込みに固有な性能上の利点は、ＳＤカード、ｅＭＭＣデバイス、ＭＭＣ、およびＳＳＤデバイスのような、最新の記憶デバイスの性能ベンチマークによって、詳しく文書化されている。
【００２８】
[0042]  図３は、不揮発性記憶デバイス１６０においてフラグメント化ファイルに対するメモリーのリアドレシングを実行する方法例３００のフローチャートである。図３に示すステップは、図２に示すそれらに対応する。３１０において、フラグメント化ファイルのメモリーをリアドレシングするコマンドを受ける。
【００２９】
[0043]  ３２０において、フラグメント化ファイルのメモリーに、連続物理メモリー・アドレスを割り当てる。即ち、以前に複数の不連続物理メモリー・アドレスに配置されたファイル・フラグメントの各々を、連続物理メモリー・アドレスにリアドレシングする。
【００３０】
[0044]  ３２５において、不揮発性記憶デバイス１６０は、リアドレシング変更を処理するエラーを戻すこともあり、システムは３４０に進み、リアドレシング変更を行わず、リアドレシングを中断する。リアドレシングが成功した場合、システムは３３０に進む。不揮発性記憶デバイス１６０がコマンドを完了することができない場合、オペレーティング・システム１３０は、３４０によって示すように、ファイル・システム１４０がリアドレシングしない一部として、エラーを受けることができる。
【００３１】
[0045]  ３３０において、不揮発性記憶デバイス１６０は、オペレーティング・システム１３０（デバイス・ドライバー１５０およびファイル・システム１４０を含む）に、 ファイル・フラグメントに対する新たなアドレス位置を含む応答を送ることができる。ある実施形態では、不揮発性記憶デバイス１６０は単にコマンドを完了するだけであるので、計算デバイス１１０は、オペレーティング・システム１３０に応答するためにステップ３３０を実行する必要がない場合もある。何故なら、不揮発性記憶デバイス１６０が単にコマンドを完了するからである。他の実施形態では、応答は、ブロックがリアドレシングされたという成功応答だけあればよい場合もある。
【００３２】
[0046]  ある実施形態では、リアドレシング・ロジックをオペレーティング・システム１３０の一部として含むことができ、全てのブロック、およびリアドレシングによってディフラグメントさせるために変更することができる利用可能なブロックを追跡する。他の実施形態では、オペレーティング・システムは、不揮発性記憶デバイス１６０がブロックを管理することを要求し、非常にフラグメント化されていることをそれが知っているファイルを、リアドレシングするように求めるだけにすることができ、新たなブロック・マッピングを含む応答を期待する。
【００３３】
[0047]  最後に、ある実施形態では、リアドレシングはファイルに対して元の開始ブロック・アドレスを保持し、リアドレシングは、全ての後続の記憶ブロックを開始アドレスの後に連続的にアドレスさせるので、これらがシーケンシャル・アドレスであるように見える。しかしながら、後続のブロックは実際には、他のファイルに属するとして計算することができるアドレスと比較して、一意のアドレスを有していないこともある。これは、後に図４ｃにおいて詳細に、２つのファイルを含むブロックが外部観察者には重複ブロックに見えるときに、疎なアドレシング（sparse addressing)を組み込むリアドレシング・ソリューションとして説明する。
【００３４】
[0048]  図１に関する実現例(example implementation)では、不揮発性記憶デバイス１６０は、フラグメント化ファイルのメモリーがリアドレシングされたという応答３３０を送ることができるが、応答を返送することは必要ではない。例えば、不揮発性記憶デバイス１６０は、フラグメント化ファイルをリアドレシングするコマンドだけを受ける場合もあり、オペレーティング・システム１３０、ファイル・システム１４０、デバイス・ドライバー１５０、またはディフラグメンテーション・アプリケーション１２０が、不揮発性記憶デバイス１６０が正常に動作していれば、首尾良く完了したと想定する。
【００３５】
[0049]  例えば、図１を参照すると、メモリーをリアドレシングするコマンドは、ファイル・システム１４０、デバイス・ドライバー１５０、または不揮発性記憶デバイス１６０から来ることができる。実施形態では、計算デバイス１１０内には、不揮発性記憶デバイス１６０にコマンドを供給する他のオペレーティング・システム・コンポーネントがあってもよい。他の実施形態では、コマンドを不揮発性記憶デバイス１６０に供給する別のコンポーネントが、オペレーティング・システム１３０と不揮発性メモリーとの間に存在してもよい。ディフラグメンテーション・アプリケーション１２０は、計算デバイス１１０、オペレーティング・システム１３０、ファイル・システム１４０、およびデバイス・ドライバー１５０の内１つ以上に存在してもよい。ディフラグメンテーションをどこから始めるかの選択は、システムの設計者に委ねられ、設計者は、どのように種々の販売業者がリアドレシング・ソリューションの品質およびコストを実現するかに基づいて、どのアプリケーション・モデルを配備するか選択することができる。
【００３６】
[0050]  図１に関する実現例では、メモリーをリアドレシングするコマンドは、不揮発性記憶デバイス１６０によって受け取られる。しかしながら、このコマンドは、どのフラグメント化ファイルをリアドレシングする必要があるか指定しない場合もある。例えば、このコマンドは、不揮発性記憶デバイス１６０へのディフラグメンテーション要求の一部であってもよい。この場合、不揮発性記憶デバイス１６０は、ファイルのフラグメンテーションの度合いに基づいて、リアドレシングする可能性が最も高い候補ファイルを決定し、このファイルをリアドレシングするために選択することができる。しかしながら、リアドレシングすべきフラグメント化ファイルは、最もフラグメント化されたファイルである必要はない。例えば、不揮発性記憶デバイス１６０は、オペレーティング・システムによるファイルのアクセス頻度、ファイルの物理メモリー・アドレスの位置、または任意の他の判断基準に基づいて、最も可能性が高い候補を決定してもよい。不揮発性記憶デバイス１６０には、フラグメントがある全てのファイルのリストを提供することができる。このリストは、ファイル・システム１４０によって提供されるか、あるいはデバイス・ドライバー１５０、またはオペレーティング・システム１３０、またはディフラグメンテーション・アプリケーション１２０によって追跡される。
【００３７】
[0051]  不揮発性記憶デバイス１６０は、本明細書において開示する方法の内任意のものを使用して、リアドレシングを実行することができるが、これらの方法に限定されるのではない。不揮発性記憶デバイスにおけるフラグメント化ファイルに対してメモリーをリアドレシングする任意の方法を実行することができる。
例６−仮想マッピングの例
[0052]  図４ａおよび図４ｂは、物理メモリー・アドレスをリアドレシングする例を示す。この例では、フラグメント化ファイルのファイル・フラグメントは、複数の不連続物理アドレスに跨がって広がる。例えば、フラグメント化ファイルがメモリー・アドレス１、３、４、および７に位置すると仮定する。一旦記憶デバイスが、フラグメント化ファイルを連続物理メモリー・アドレスにリアドレシングするコマンドを受けたなら、記憶デバイスは、どの物理メモリー・アドレスにこのファイルをリアドレシングすればよいか決定する。この例では、ファイルは、メモリー・アドレス１から開始してリアドレシングされるが、代わりに、任意の物理メモリー・アドレスにおいて開始してリアドレシングされてもよい。
【００３８】
[0053]  この例では、古いメモリー・アドレス３が新たなメモリー・アドレス２にリアドレシングされる。しかしながら、古いメモリー・アドレス２は他のデーターを含んでもよい。つまり、メモリー・アドレスが交換されたのであり、即ち、古いメモリー・アドレス３は新たなメモリー・アドレス２にリアドレシングされ、そして古いメモリー・アドレス２は新たなメモリー・アドレス３にリアドレシングされる。これは、フラグメント化ファイルの残りのメモリー・アドレスの全てに対して繰り返される。最終結果では、古いメモリー・アドレス３、４、および７が新たなメモリー・アドレス２、３、および４にリアドレシングされ、フラグメント化ファイルのメモリーを連続物理メモリー・アドレスにおいてアドレスすることが可能になり、古いメモリー・アドレス２は新たなメモリー・アドレス７にリアドレシングされる。ファイル・システム１４０によって管理されるクラスタまたはセクタ・サイズが記憶デバイス１６０におけるブロック・サイズに対して、密接な１：１関係にあるというシナリオでは、この実現例は、図４ａによって示されるものと非常に類似する。尚、ファイル・システム１４０によって管理されるクラスタまたはセクタ・サイズは、ディフラグメンテーションを実行するために実際にデーターをコピーすることなく、既に実施されているディフラグメンテーション・ソリューションと比較してデーターのコピーおよび書き込み回数を減らして、記憶位置をリアドレシングする基本原理に対して、１：１の関係である必要はないことは認められてしかるべきである。
【００３９】
[0054]  しかしながら、物理メモリー・アドレスは、必ずしも交換される必要はなく、代わりに、使用されていないメモリー・アドレスにリアドレシングすることができる。例えば、図４ｂにおいて、古いメモリー・アドレス２を利用可能なメモリー・アドレス１００（例えば、空である利用可能なメモリー・アドレス）にリアドレシングするのでもよい。次いで、フラグメント化ファイルの他のメモリー・アドレスを連続物理アドレスにリアドレシングすることができる。
【００４０】
[0055]  図４ｃは、ファイルに対する元の一意の開始ブロック・アドレスを保持するリアドレシング・メカニズムの代替実施形態について説明する。この実施形態では、リアドレシングは、全ての後続の記憶ブロックを、開始アドレスの後に連続してアドレスさせ、これらが、ファイル・システム１４０またはオペレーティング・システム１３０にはシーケンシャル・アクセスに見えるようにする。しかしながら、２番目以降のブロックは、実際には、他のファイルに属するとして計算することができるアドレスと比較して、一意のアドレスを有さないかもしれない（例えば、２番目以降のブロックは、共有可能な物理メモリー・アドレスを有することができる）。ファイルは、一意の開始アドレスおよび特定のブロック長を使用しなければ引き出されないので、そしてそれは常にシーケンシャル・アクセスであるので、最初の一意のブロック・アドレスに続くコンテンツのストリームは、明確にアドレスされると考えられる。例えば、図４ｃにおいて、１番上にある１組のブロックは、リアドレシング前の状態を示し、ブロック１において開始し、合計３ブロックの長さにわたってブロック３および５において追加のフラグメントを含むファイル "a.txt"を示す（それぞれ、フラグメントa.txt1、a.txt2、a.txt3によって示されるように）。また、本システムは、ブロック２において開始し、ブロック４および６においてフラグメントとして格納されたコンテンツを有するファイル"b.txt"も有することができる（それぞれ、b.txt1, b.txt2, b.txt3 で示されるように）。ファイル"a.txt"に対するリアドレシング・コマンドは、ファイル・システム１４０によって送られ、ブロック１、３、５におけるファイルがシーケンシャルになるために、即ち、ブロック１において開始し３ブロックの長さになるために、リアドレシングを命令することができる。このリアドレシングは、ブロック１におけるコンテンツを不変のまま残すが、ブロック３をブロック２としてリアドレシングし（ブロック１の読み取りに続くときのみ）、ブロック１および２の読み取りに続くときにのみ、ブロック５をブロック３としてリアドレシングする。したがって、リアドレシングの後、ファイル "a.txt"は、外部ソースからシーケンシャルにアクセスされるとき（図４ｃの下半分に示すように）、ブロック１、２、および３に格納される。不揮発性記憶デバイス１６０は、ファイル・システム１４０がブロック２または３を１ブロックの長さだけ読み取ろうとした場合、エラーを報告する。何故なら、システムはブロック１を読み取り、その後１回のシーケンシャル・アクセスの一部として任意にブロック２および３を読み取ることのみによって、ファイルを引き出さなければならないことを知っているからである。コンテンツが、ブロック１において開始し長さを３とするコマンドを使用してシーケンシャルにアドレスされるのであれば、一意にファイル・システム１４０およびストレージ・ドライバー１５０に供給される。また、ファイル・システム１４０は、図４ｃに示したのと同じメカニズムを使用してブロック２、３、４になることを想定して、ブロック２において開始しブロック４および６を含むファイル"b.txt"をリアドレシングすることを命令する。ファイル・システ���１４０のような外部観察者は、"a.txt"および"b.txt"の開始アドレスおよび長さが双方共ブロック２および３におけるコンテンツを共有し、したがって、このコンテンツは同じ記憶ブロックを占有していることを推定する(compute)ことができる。しかしながら、これが当てはまらない場合もある。何故なら、不揮発性記憶デバイス１６０は、"a.txt"および"b.txt"へのアクセスは常にシーケンシャル・アクセスであり一意のアドレスにて開始するので、このストレージ部分は、ブロック１にて開始する３ブロック長のアクセスを受けたときには、ファイル"a.txt"のみにマッピングされた一意のコンテンツを送り出し、ブロック２において開始する３ブロック長の要求を受けたときは、ファイル"b.txt"のコンテンツのみを引き出すと判断するからである。不揮発性記憶デバイス１６０は、ブロック・アドレス１または２を他のいずれのファイルにも供給せず、ある実施形態では、ファイル・システム１４０は、開始アドレスを使用してファイルにアクセスすることしか知らず、ファイル内を捜して重複しているブロックにアクセスすることは知らない。また、ある実施形態では、ファイル・システム１４０は、ブロック３、４、５、または６の開始アドレスを有する開始記憶ブロックを受けない。何故なら、これらのブロックは実際にファイル"a.txt"および"b.txt"によって使用されているからである。代替実施形態では、ブロック３、４、５、または６の開始アドレスを供給してもよい。しかしながら、ファイル・システム１４０に供給される全アドレス・ブロックは、不揮発性記憶デバイス１６０の記憶容量を超えることはない。更に、図４ｃは、３の利用可能な開始ブロック・アドレスを供給するために、空きブロック７がリアドレシングされることを示す。ファイル・システム１４０がアドレス３への１ブロック書き込みとして新たなファイル "c.txt"を格納しようとすると仮定すると、アドレス２において開始する３ブロック・アクセスを読み取るときにファイル"b.txt"のコンテンツを受けることを予想し、アドレス３において開始する１ブロック読み取りを発行ときに、"c.txt"コンテンツを受けることを予想する。ある実施形態では、このタイプのリアドレシングは、シーケンシャルに読み取られるファイルに対してのみ実行される。ある実施形態では、ファイル・システム１４０は、このようにリアドレシングされるこれらの種類のファイルをシークしないように属性を設定することができる。
【００４１】
[0056]  尚、図４ａ〜図４ｃの例は全て、ファイル・システム１４０によって追跡されるファイル・フラグメントに対する離散記憶単位（即ち、クラスタ）と、記憶ブロック（不揮発性記憶デバイス１６０によって供給される離散記憶単位、即ち、ブロックまたはセクタ）との間における１：１のマッピングを示す。しかしながら、本明細書において説明する実施形態では、ファイル・フラグメントが記憶ブロックの副部分(sub portion)を占有すること、そして各クラスタに格納されたファイル・フラグメントが数個のアドレス可能な記憶ブロックに跨がってマッピングすることは、容易に示すことができる。即ち、ファイル・フラグメント（クラスタ）および記憶ブロック（セクタ）の比率は、１：１、２：１、１：２、１：１６、１６：１等とすることもできる。リアドレシングの原理は、実際には、部分的ページを移動させる必要があるとき、リアドレシング処理の間に行われるデーターコピーを最少にして、一意のアドレスを記憶のために供給することを保証するように拡張される。そして、ファイル"a.txt"および"b.txt"によって消費される記憶空間は、リアドレシングの前後で一定のままであり、不揮発性記憶デバイス１６０の６ブロックを消費する。
【００４２】
[0057]  物理メモリー・アドレスのリアドレシングは（例えば、図４ａおよび図４ｂを参照して先に説明したような）、不揮発性記憶デバイス１６０においてメモリーの物理位置を移動させることなく実行される。図５ａおよび図５ｂは、図４ａおよび図４ｂにおいて説明したリアドレシング動作が、メモリーの物理位置を移動させることなく、どのように実行されるかを示す図である。直前の例をあげると、古いメモリー・アドレス１、３、４、および７が、新たなメモリー・アドレス１、２、３、および４にリアドレシングされる。しかしながら、メモリー・デバイスにおけるフラグメント化ファイルのファイル・フラグメントの実際の物理位置は移動させられない。この例を参照して、図５ａは、リアドレシング前におけるメモリー・アドレス１、３、４、および７を示す。図５ａに示すように、不揮発性記憶デバイス１６０は、不揮発性記憶デバイス１６０内部の特定の物理位置におけるメモリー・アドレス１、３、４、および７に対応するファイル・フラグメントを格納する。これは、簡略化された形式で、５１０において "LOC1" 〜 "LOC4"で示されている。図５ｂは、メモリー・リアドレシングが実行された後におけるメモリー・アドレスを示す。図５ｂに示すように、メモリー・アドレスが連続になる（アドレス１、２、３、４）ように、リアドレシングが実行された。また、図５ｂに示すように、リアドレシングが実行されたが、不揮発性記憶デバイス１６０におけるメモリーの物理位置は変化していない。このように、例えば、古いメモリー・アドレス３が新たなメモリー・アドレス２にリアドレシングされたが、メモリーの物理位置は変化していない。
【００４３】
[0058]  ある実施形態では、このアドレス変換を実行しリマッピングをサポートするソフトウェアおよび／またはハードウェアは、不揮発性記憶デバイス１６０の内部に格納することができる。他の実施形態では、リマッピングは、ファイル・システム１４０、ストレージ・ドライバー１５０、および不揮発性記憶デバイス１６０に跨がる分散型ソリューションとなることができる。例えば、ファイル・システム１４０は、論理ブロック対物理ブロックのマッピングを追跡し続け、不揮発性記憶デバイス１６０にリマッピング・ソリューションを提出することもでき、不揮発性記憶デバイス１６０はこの変更を適用する。他の実施形態では、ストレージ・ドライバーは、ファイル・システム１４０が記憶デバイス１６０における記憶ブロックにマッピングしたことが分かっているアドレス間で変換を実行することができ、したがって、ファイル・システム１４０がリマッピングを知ることなく、記憶デバイスのリマッピングを行う。
例７−マッピング・テーブルの例
[0059]  図６ａおよび図６ｂは、ＬＢＡマッピング・テーブル、および図４ａおよび図４ｂにおけるフラグメント化ファイルの物理アドレスの例を示すテーブルである。例えば、ＬＢＡマッピング・テーブルは、論理アドレスを不揮発性記憶デバイス１６０における物理アドレスに割り当てるために、オペレーティング・システム１３０によって使用することができる。直前の例では、物理アドレスがリアドレシングされたので、ＬＢＡマッピング表は、リアドレシングされたメモリーに基づいて更新される。つまり、例えば、図６ａにおいて、LBA0000は物理アドレス１を指し示し、LBA0001は物理アドレス３を指し示し、LBA0002は物理アドレス４を指し示し、LBA0003は物理アドレス７を指し示す。リアドレシングの後、図６ｂに示すように、LBA0000は物理アドレス１を指し示し、LBA0001は物理アドレス２を指し示し、LBA0002は物理アドレス３を指し示し、LBA0003は物理アドレス４を指し示す。
【００４４】
[0060]  図６ａおよび図６ｂに示すように、ＬＢＡマッピング・テーブルは、メモリーのリアドレシングを反映するように更新することができる。しかしながら、ＬＢＡマッピング・テーブルは、必ずしも更新される必要はない。例えば、仮想マッピング・テーブルが、ＬＢＡマッピング・テーブルと記憶デバイスとの間に存在してもよい。仮想マッピング・テーブルは、メモリーのリアドレシングの新たな情報で更新することができる。ＬＢＡマッピング・テーブルがアドレスを捜すとき、更新された仮想マッピング・テーブルが、リアドレシングされた物理アドレスを指し示すことができ、ＬＢＡマッピング・テーブルは、このようなリアドレシングが行われたことに気がつかない。この場合、ＬＢＡマッピング・テーブルはリアドレシングされた物理メモリー・アドレスについての情報を含む仮想マッピング・テーブルと通信する。
例８−計算環境例
[0061]  図７は、以上で説明した改革を実現することができる、適した計算環境７００を一般化した例を示す。計算環境７００は、使用範囲や機能に関して限定を示唆する意図は全くない。何故なら、本改革は、多様な汎用または特殊目的計算システムにおいても実現できるからである。例えば、計算環境７００は、種々の計算デバイス（例えば、デスクトップ・コンピューター、ラップトップ・コンピューター、サーバー・コンピューター、タブレット・コンピューター、メディア・プレーヤー、ゲーミング・システム、移動体デバイス等）の内任意のものにすることができる。
【００４５】
[0062]  図７を参照すると、計算環境７００は、１つ以上の処理ユニット７１０、７１５、およびメモリー７２０、７２５を含む。図７では、この基本構成７３０は、破線内に含まれる。処理ユニット７１０、７１５は、コンピューター実行命令を実行する。処理ユニットは、汎用中央処理ユニット（ＣＰＵ）、特定用途集積回路（ＡＳＩＣ）におけるプロセッサー、または任意の他のタイプのプロセッサーとすることができる。マルチ処理システムでは、多数の処理ユニットが、処理パワーを増大するために、コンピューター実行可能命令を実行する。例えば、図７は、中央処理ユニット７１０、更にグラフィクス処理ユニットまたは共処理ユニット７１５を示す。有形メモリー７２０、７２５は、揮発性メモリー（例えば、レジスタ、キャッシュ、ＲＡＭ）、不揮発性メモリー（例えば、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュ・メモリー等）、または処理ユニット（１つまたは複数）によってアクセス可能な、これら２つの何らかの組み合わせであってもよい。メモリー７２０、７２５は、処理ユニット（１つまたは複数）による実行に適しており、本明細書において説明した１つ以上の革新を実現するコンピューター実行可能命令の形態としたソフトウェア７８０を格納する。
【００４６】
[0063]  計算システムは、追加の機構を有してもよい。例えば、計算環境７００は、ストレージ７４０、１つ以上の入力デバイス７５０、１つ以上の出力デバイス７６０、および１つ以上の通信接続７７０を含む。バス、コントローラー、またはネットワークのような相互接続メカニズム（図示せず）は、計算環境７００のコンポーネントを相互接続する。通例、オペレーティング・システム・ソフトウェア（図示せず）は、計算環境７００において実行する他のソフトウェアのために動作環境を提供し、計算環境７００のコンポーネントのアクティビティを調整する。
【００４７】
[0064]  有形ストレージ７４０は、リムーバブルまたは非リムーバブルでもよく、磁気ディスク、磁気テープまたはカセット、ＣＤ−ＲＯＭ、ＤＶＤ、あるいは情報を一時的でない方法で格納するために使用することができ、更に計算環境７００内でアクセスすることができる任意の他の媒体を含む。ストレージ７４０は、本明細書において説明した１つ以上の革新を実現するソフトウェア７８０の命令を格納する。
【００４８】
[0065]  入力デバイス（１つまたは複数）７５０は、キーボード、マウス、ペン、またはトラックボールのようなタッチ入力デバイス、音声入力デバイス、走査デバイス、あるいは入力を計算環境７００に供給する他のデバイスであってもよい。ビデオ・エンコーディング用では、入力デバイス（１つまたは複数）７５０は、カメラ、ビデオ・カード、ＴＶチューナ・カード、あるいはアナログまたはディジタル形態でビデオ入力を受け入れる同様のデバイス、あるいはビデオ・サンプルを計算環境７００に読み込むＣＤ−ＲＯＭまたはＣＤ−ＲＷであってもよい。出力デバイス（１つまたは複数）７６０は、ディスプレイ、プリンター、スピーカー、ＣＤ−ライター、または計算環境７００からの出力を供給する他のデバイスであってもよい。
【００４９】
[0066]  通信接続（１つまたは複数）７７０は、通信媒体または他の計算エンティティを通じた通信を可能にする。通信媒体は、コンピューター実行可能命令、オーディオまたはビデオ入力または出力、あるいは変調データー信号における他のデーターというような情報を伝える。変調データー信号とは、当該信号において情報をエンコードするように、その特性の内１つ以上が設定されたまたは変化させられた信号である。一例として、そして限定ではなく、通信媒体は、電気、光、ＲＦ、または他の搬送波を使用することができる。
【００５０】
[0067]  本革新は、計算システムにおけるターゲットの実プロセッサーまたは仮想プロセッサー上で実行されるプログラム・モジュールに含まれるような、コンピューター実行可能命令という一般的なコンテキストで説明することができる。一般に、プログラム・モジュールは、ルーチン、プログラム、ライブラリ、オブジェクト、クラス、コンポーネント、データー構造等を含み、特定のタスクを実行するか、または特定の抽象データー型を実装する。プログラム・モジュールの機能は、種々の実施形態において所望通りに、プログラム・モジュール間で組み合わせてもまたは分割してもよい。プログラム・モジュールのコンピューター実行可能命令は、ローカルまたは分散型計算システム内部で実行することもできる。
【００５１】
[0068]  本明細書では、「システム」および「デバイス」という用語は相互交換可能に使用される。そうでないことを文脈が明らかに示すのではなければ、いずれの用語も、計算システムまたは計算デバイスのタイプに対して何の限定も強制しない。一般に、計算システムまたは計算デバイスは、ローカルまたは分散型であることができ、特殊目的ハードウェアおよび／または汎用ハードウェアと、本明細書において説明した機能を実現するソフトウェアとの任意の組み合わせを含むことができる。
例９−移動体デバイスの例
[0069]  図８は、全体的に８０２で示す、種々の任意のハードウェアおよびソフトウェア・コンポーネントを含む移動体デバイスの一例８００を示すシステム図である。一般に、移動体デバイス内にあるコンポーネント８０２は、他のいずれのコンポーネントとも通信することができるが、図示を容易にするために、全ての接続は示されていない。移動体デバイスは、種々の計算デバイス（例えば、セル・フォン、スマート・フォン、ハンドヘルド・コンピューター、パーソナル・ディジタル・アシスタント（ＰＤＡ）等）のいずれでも可能であり、セルラまたは衛星ネットワーク、あるいは他のネットワークのような、１つ以上の移動体通信ネットワーク８０４とのワイヤレス双方向通信を可能にすることができる。
【００５２】
[0070]  図示した移動体デバイス８００は、信号コード化、データー処理、入力／出力処理、電力制御、および／または他の機能というようなタスクを実行するために、コントローラーまたはプロセッサー８１０（例えば、信号プロセッサー、マイクロプロセッサー、ＡＳＩＣ、または他の制御および処理論理回路）を含むことができる。オペレーティング・システム８１２は、コンポーネント８０２の割り当ておよび使用、ならびにアプリケーション８１４、８１５の内１つ以上のサポートを制御することができる。アプリケーション８１４は、一般的な移動体計算アプリケーション（例えば、電子メール・アプリケーション、カレンダー、連絡先マネージャー、ウェブ・ブラウザー、メッセージング・アプリケーション）、または任意の他の計算アプリケーションを含むことができる。アプリケーション・ストアにアクセスする機能８１３は、アプリケーション８１４を取得し更新するためにも使用することができる。
【００５３】
[0071]  図示した移動体デバイス８００は、メモリー８２０を含むことができる。メモリー８２０は、非リムーバブル・メモリー８２２および／またはリムーバブル・メモリー８２４を含むことができる。非リムーバブル・メモリー８２２は、ＲＡＭ、ＲＯＭ、フラッシュ・メモリー、ハード・ディスク、または他の周知のメモリー記憶技術を含むことができる。リムーバブル・メモリー８２４は、フラッシュ・メモリーまたはＧＳＭ通信システムでは周知であるサブスクライバー識別モジュール（ＳＩＭ）カード、あるいは「スマート・カード」のような他の周知のメモリー記憶技術を含むことができる。メモリー８２０は、オペレーティング・システム８１２およびアプリケーション８１４を実行するためのデーターおよび／またはコードを格納するために使用することができる。データーの例は、ウェブ・ページ、テキスト、画像、音響ファイル、ビデオ・データー、あるいは１つ以上の有線またはワイヤレス・ネットワークを介して１つ以上のネットワーク・サーバーまたは他のデバイスにおよび／またはから送られるその他のデーター集合を含むことができる。メモリー８２０は、国際移動体サブスクライバー識別（ＩＭＳＩ）のようなサブスクライバー識別子、および国際移動体機器識別子（ＩＭＥＩ）のような機器識別子を格納するために使用することができる。このような識別子は、ユーザーおよび機器を識別するために、ネットワーク・サーバーに送信することができる。
【００５４】
[0072]  移動体デバイス８００は、タッチスクリーン８３２、マイクロフォン８３４、カメラ８３６、物理キーボード８３８および／またはトラックボールのような１つ以上の入力デバイス８３０、ならびにスピーカー８５２およびディスプレイ８５４のような１つ以上の出力デバイス８５０をサポートすることができる。他の可能な出力デバイス（図示せず）は、圧電型出力デバイスまたは他の触覚型出力デバイスを含むことができる。あるデバイスは、１つよりも多い入力／出力機能を供与することができる。例えば、タッチスクリーン８３２およびディスプレイ８５４を組み合わせて１つの入力／出力デバイスにすることができる。
【００５５】
[0073]  入力デバイス８３０は、自然ユーザー・インターフェース（ＮＵＩ）を含むことができる。ＮＵＩは、ユーザーが「自然な」方法でデバイスと対話処理することを可能とし、マウス、キーボード、リモコン等のような入力デバイスによって強制される人工的な制約から解放することができる、あらゆるインターフェース技術として定義することができる。ＮＵＩ方法の例は、音声認識(speech recognition)、タッチおよびスタイラス認識、画面上および画面近傍双方におけるジェスチャー認識、エア・ジェスチャー(air gesture)、頭部および視線追尾、音声(voice)および発話(speech)、視覚、タッチ、ジェスチャー、ならびに機械インテリジェンスを拠り所とするものを含む。ＮＵＩの他の例は、加速度計／ジャイロスコープを使用する動きジェスチャー(motion gesture)検出、顔認識、３Ｄディスプレイ、頭部、視線および凝視追尾、没入型拡張現実および仮想現実システムを含み、これらの全ては、電界検知電極（ＥＥＧおよび関係する方法）を使用して脳活動を検知する技術だけでなく、一層自然なインターフェースを提供する。このように、具体的な一例では、オペレーティング・システム８１２またはアプリケーション８１４は、音声認識ソフトウェアを、ユーザーに音声コマンドによってデバイス８００を動作させる音声ユーザー・インターフェースの一部として含むことができる。更に、デバイス８００は、ゲーミング・アプリケーションに入力を供給するためにジェスチャーを検出し解釈するというような、ユーザーの空間ジェスチャーによってユーザーの対話処理を可能にする入力デバイスおよびソフトウェアも含むことができる。
【００５６】
[0074]  ワイヤレス・モデム８６０は、アンテナ（図示せず）に結合することができ、プロセッサー８１０と外部デバイスとの間における双方向通信をサポートすることができる。これは当技術分野では良く理解されている。モデム８６０は包括的に示され、移動体通信ネットワーク８０４と通信するためのセルラ・モデム、および／または他の無線系モデム（例えば、Ｂｌｕｅｔｏｏｔｈ８６４またはＷｉ−Ｆｉ８６２）を含むことができる。ワイヤレス・モデム８６０は、通例、１つのセルラ・ネットワーク内、セルラ・ネットワーク間、または移動体デバイスと公衆電話交換網（ＰＳＴＮ）との間におけるデーターおよび音声通信のためのＧＳＭ（登録商標）ネットワークのような、１つ以上のセルラ・ネットワークとの通信のために構成される。
【００５７】
[0075]  更に、移動体デバイスは、少なくとも１つの入力／出力ポート８８０、電源８８２、汎地球測位システム（ＧＰＳ）受信機のような衛星ナビゲーション・システム受信機８８４、加速度計８８６、および／または物理コネクター８９０も含むことができる。物理コネクター８９０は、ＵＳＢポート、ＩＥＥＥ１３９４（Ｆｉｒｅ    Ｗｉｒｅ）ポート、および／またはＲＳ−２３２ポートとすることができる。図示したコンポーネント８０２は、必須ではなく、全てを含むのでもない。何故なら、いずれのコンポーネントでも削除することができ、他のコンポーネントを追加することができるからである。
例１０−実現例
[0076]  開示した方法の一部の動作は、都合のよい提示のために、特定の連続順序で説明したが、この説明のやり方は、以下に明記される特定の文言によって特定の順序付けが要求されない限り、再配列を含むことは理解されてしかるべきである。例えば、順次説明した動作は、場合によっては、配列し直しても、または同時に実行されてもよい。更に、簡略さのために、添付図面は、開示した方法を他の方法と併せて使用することができる種々のやり方を示さない場合もある。
【００５８】
[0077]  開示した方法はいずれも、１つ以上のコンピューター読み取り可能記憶媒体上に格納され、計算デバイス（例えば、スマート・フォンまたは計算ハードウェアを含む他の移動体デバイスを含む、任意の入手可能なコンピューター）上で実行されるコンピューター実行可能命令として実現することができる。コンピューター読み取り可能記憶媒体は、計算環境内においてアクセスすることができる任意の入手可能な有形媒体である（例えば、１つ以上の光媒体ディスクのような非一時的コンピューター読み取り可能媒体、揮発性メモリー・コンポーネント（ＤＲＡＭまたはＳＲＡＭのような）、または不揮発性メモリー・コンポーネント（フラッシュ・メモリーまたはハード・ドライブのような））。一例として、そして図７を参照すると、コンピューター読み取り可能記憶媒体は、メモリー７２０および７２５、ならびにストレージ７４０を含む。一例として、そして図８を参照すると、コンピューター読み取り可能記憶媒体は、メモリー８２０、８２２、および８２４を含む。コンピューター読み取り可能記憶媒体という用語は、信号および搬送波のような通信接続（例えば、７７０、８６０、８６２、および８６４）を含まない。
【００５９】
[0078]  開示した技法を実現するためのコンピューター実行可能命令、および開示した実施形態の実現の間に作成および使用されるデーターはいずれも、１つ以上のコンピューター読み取り可能媒体上に格納することができる。コンピューター実行可能命令は、例えば、専用ソフトウェア・アプリケーション、あるいはウェブ・ブラウザーまたは他のソフトウェア・アプリケーション（リモート計算アプリケーション等）によってアクセスまたはダウンロードされる、ソフトウェア・アプリケーションの一部であることができる。このようなソフトウェアは、例えば、１つのローカル・コンピューター（例えば、任意の適した市販のコンピューター）上で、または１つ以上のネットワーク・コンピューターを使用するネットワーク環境において（例えば、インターネット、ワイド・エリア・ネットワーク、ローカル・エリア・ネットワーク、クライアント−サーバー・ネットワーク（クラウド計算ネットワーク等）、または他のこのようなネットワークを介して）、実行することができる。
【００６０】
[0079]  明確さのために、ソフトウェア・ベースの実施態様からある種の選択された態様だけについて説明した。当技術分野では周知である他の詳細は省略した。例えば、開示した技術は、いずれの特定のコンピューター言語にもプログラムにも限定されない。例えば、開示した技術は、Ｃ＋＋、Ｊａｖａ（登録商標）、Ｐｅｒｌ、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ａｄｏｂｅ  Ｆｌａｓｈ、または任意の他の適したプログラミング言語で書かれたソフトウェアによって実現することができる。同様に、開示した技術は、いずれの特定のコンピューターにもハードウェアのタイプにも限定されない。適したコンピューターおよびハードウェアのある種の詳細は、周知であり、本開示において詳細に明記される必要はない。
【００６１】
[0080]  また、本明細書において説明した機能はいずれも、ソフトウェアの代わりに、少なくとも部分的に、１つ以上のハードウェア論理コンポーネントによって実行できることも、良く理解されてしかるべきである。例えば、限定ではなく、使用することができるハードウェア論理コンポーネントの代表的なタイプは、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、特定プログラム集積回路（ＡＳＩＣ）、特定プログラム標準製品（ＡＳＳＰ）、チップ上システム・システム（ＳＯＣ）(System-on-a-Chip System)、複合プログラマブル論理デバイス（ＣＰＬＤ）等を含む。
【００６２】
[0081]  更に、ソフトウェア・ベースの実施形態（例えば、開示した方法の内任意のものをコンピューターに実行させるためのコンピューター実行可能命令を含む）はいずれも、適した通信手段を介して、アップロードすること、ダウンロードすること、または離れてアクセスすることができる。このような適した通信手段は、例えば、インターネット、ワールド・ワイド・ウェブ、イントラネット、ソフトウェア・アプリケーション、ケーブル（光ファイバ・ケーブルを含む）、磁気通信、電磁通信（ＲＦ、マイクロ波、および赤外線通信を含む）、電子通信、または他のこのような通信手段を含む。
【００６３】
[0082]  開示した方法、装置、およびシステムは、決して限定するように解釈してはならない。代わりに、本開示は、単独での、そして互いとの種々のコンビネーションおよびサブコンビネーションにおける、種々の開示した実施形態の全ての新規で非自明な特徴および態様を対象とする。開示した方法、装置、およびシステムは、いずれの特定の態様や特徴、その組み合わせにも限定されず、開示した実施形態は、いずれの１つ以上の特定の利点が得られることも、問題が解決されることも必要としない。
代替
[0083]  任意の例からの技術は、他の例の任意の１つ以上において説明した技術と組み合わせることができる。開示した技術の原理を適用することができる多くの可能な実施形態があることに鑑み、例示した実施形態は、開示した技術の例に過ぎず、開示した技術の範囲を限定するように捕らえてはならないことは、認識されてしかるべきである。逆に、開示した技術の範囲は、以下の請求項によって定められることとする。したがって、これらの請求項の範囲内に該当する全てを、本発明として特許請求する。
【図１】
0006355650.tif 000002
【図２】
0006355650.tif 000003
【図３】
0006355650.tif 000004
【図４ａ】
0006355650.tif 000005
【図４ｂ】
0006355650.tif 000006
【図４ｃ】
0006355650.tif 000007
【図５ａ】
0006355650.tif 000008
【図５ｂ】
0006355650.tif 000009
【図６ａ】
0006355650.tif 000010
【図６ｂ】
0006355650.tif 000011
【図７】
0006355650.tif 000012
【図８】
0006355650.tif 000013