(57)【特許請求の範囲】
【請求項１】
記憶装置内に記憶されたデータを、アドレス空間の論理識別子と関連付けるステップであって、第１の論理識別子の組が、前記記憶装置内に記憶された元のファイルデータと関連付けられる、ステップと、
前記元のファイルデータに対応するファイルをオープンする記憶クライアントの要求に応答して、前記第１の論理識別子の組とは異なる第２の論理識別子の組を提供し、それによって、前記第１の論理識別子の組および前記第２の論理識別子の組が、前記記憶装置内に記憶された前記元のファイルデータの同一の記憶位置と関連付けられるステップと、
前記ファイルに関連する記憶動作を実装するステップであって、前記記憶動作を実装することは、前記記憶装置に修正されたファイルデータを書き込むことと、前記第１の論理識別子の組と前記記憶装置内に記憶された前記元のファイルデータとの間の前記関連付けを保存する間に、前記第２の論理識別子の組のうち選択された論理識別子を前記記憶装置に書き込まれた前記修正されたファイルデータと関連付けることとを含む、ステップと、
前記ファイルをクローズする前記記憶クライアントの要求に応答して、前記第１の論理識別子の組と前記第２の論理識別子の組を結合するステップであって、前記結合することは、前記第１の論理識別子の組のうちの指定された論理識別子を、前記第２の論理識別子の組のうちの前記選択された論理識別子と関連付けられた前記修正されたファイルデータと関連付けることを含む、ステップと、
を含む、方法。
【請求項２】
前記記憶動作は、前記元のファイルデータをログに保持する間に、前記修正されたファイルデータを前記記憶装置上の前記ログに付加することを含む、請求項１に記載の方法。
【請求項３】
前記修正されたファイルデータは、前記記憶装置に記憶された前記元のファイルデータの元のデータセグメントを置き換えるように構成された修正データセグメントを含み、
前記方法はさらに、前記第１の論理識別子の組のうちの前記指定された論理識別子を参照することによって、前記元のデータセグメントへのアクセスを提供するステップを含む、請求項１に記載の方法。
【請求項４】
前記記憶動作はさらに、
１つ以上の追加論理識別子を前記第２の論理識別子の組に割り当てるステップと、
前記記憶装置に追加のファイルデータを書き込むステップと、
前記記憶装置に書き込まれた前記追加のファイルデータを、前記第２の論理識別子の組の前記追加論理識別子と関連付け、それによって、前記追加のファイルデータが前記第１の論理識別子の組の論理識別子と関連付けられないステップと、
を含む、請求項１に記載の方法。
【請求項５】
前記方法はさらに、
前記第２の論理識別子の組の前記選択された論理識別子を通して、前記修正されたファイルデータを参照するステップであって、前記修正されたファイルデータは、前記第１の論理識別子の組を通してアクセス不可である、ステップを含む、請求項１に記載の方法。
【請求項６】
前記第２の論理識別子の組を割り当てるステップと、
前記第２の論理識別子の組に関連する記憶動作に対し、前記記憶装置上で記憶容量を予約するステップと、
をさらに含む、請求項１に記載の方法。
【請求項７】
異なる記憶クライアントの要求に応答して、前記第１の論理識別子の組を使用することによって、前記元のファイルデータへのアクセスを提供するステップをさらに含む、請求項１に記載の方法。
【請求項８】
前記ファイルをオープンする、別の記憶クライアントの要求に応答して、第３の論理識別子の組を割り当てるステップであって、前記第１の論理識別子の組および前記第３の論理識別子の組が、前記記憶装置内に記憶された前記元のファイルデータの前記同一の記憶位置と関連付けられ、ならびに前記第１の論理識別子の組と前記第３の論理識別子の組のそれぞれの前記関連付けは、前記記憶動作によって修正されない、ステップをさらに含む、請求項１に記載の方法。
【請求項９】
前記記憶装置内に記憶されたデータは、前記記憶されたデータをそれぞれの論理識別子と関連付けるように構成された永続的メタデータと関連して記憶され、
前記方法はさらに、前記ファイルをオープンする前記要求に応答して、前記元のファイルデータを前記第２の論理識別子の組と関連付けるように構成された永続的メタデータを前記記憶装置に付加するステップを含む、請求項１に記載の方法。
【請求項１０】
前記結合することはさらに、前記記憶クライアントによって前記第２の論理識別子の組の論理識別子を参照してなされた前記ファイルへの修正を、前記第１の論理識別子の組に組み込むことを含む、請求項１に記載の方法。
【請求項１１】
前記第２の論理識別子の組の論理識別子を前記元のファイルデータの記憶アドレスに結び付けるステップをさらに含む、請求項１に記載の方法。
【請求項１２】
記憶装置に記憶されたファイルの既存のデータを第１の論理識別子の組に結び付けるように構成され、かつ前記ファイルをオープンする第１の要求に応答して、前記ファイルを複製するように構成された変換モジュールであって、前記ファイルを複製することは、前記記憶装置に記憶された前記ファイルの前記既存のデータを、前記第１の論理識別子の組とは異なる第２の論理識別子の組に結び付けることを含み、それによって、前記第１の論理識別子の組と前記第２の論理識別子の組が、前記記憶装置に記憶された前記ファイルの前記既存のデータの同一の記憶位置に結び付けられる、前記変換モジュールと、
前記第２の論理識別子の組を参照して前記ファイルを変更するように構成された記憶動作を実行している間に、前記記憶装置に記憶された前記既存のファイルデータ、および前記既存のファイルデータと前記第１の論理識別子の組との間の結び付けを保存するように構成された記憶層と、
前記記憶動作を実行した後に、前記第１の論理識別子の組を通じて、前記既存のファイルデータへのアクセスを提供するように構成されたインタフェースと、を含み、
前記変換モジュールはさらに、前記ファイルをクローズする第１の要求に応答して、前記第２の論理識別子の組を前記第１の論理識別子の組に組み合わせるように構成され、前記組み合わせることは、前記第１の論理識別子の組のうちの選択された論理識別子と前記記憶装置に記憶された前記ファイルの前記既存のデータの一部との間の結び付けを置き換え、前記選択された論理識別子を、前記第２の論理識別子の組のうちの対応する論理識別子に結び付けられた前記ファイルの修正されたデータに結び付けることを含む、
装置。
【請求項１３】
前記インタフェースは、前記ファイルをクローズする前記第１の要求より前に受け取られた前記ファイルに関連する要求に応答して、前記第１の論理識別子の組を通じて前記記憶装置に記憶された前記ファイルの前記既存のデータへのアクセスを提供するように構成される、請求項１２に記載の装置。
【請求項１４】
前記変換モジュールは、前記ファイルに関連する記憶動作を前記第２の論理識別子の組にリダイレクトするように構成される、請求項１３に記載の装置。
【請求項１５】
前記記憶動作は、前記ファイルから前記既存のファイルデータのデータセグメントを削除するように構成され、前記データセグメントは、前記第２の論理識別子の組のうちの特定の論理識別子および前記第１の論理識別子の組のうちの特定の論理識別子に結び付けられており、
前記記憶層は、前記データセグメントと前記第２の論理識別子の組のうちの前記特定の論理識別子との間の結び付けを削除し、かつ前記データセグメントと前記第１の論理識別子の組のうちの前記特定の論理識別子との間の関連付けを保存するように構成され、
前記組み合わせることはさらに、前記第１の論理識別子の組のうちの前記特定の論理識別子と前記データセグメントとの間の前記結び付けを削除することを含む、請求項１２に記載の装置。
【請求項１６】
前記記憶動作は、前記記憶装置の前記ファイルの修正されたデータを書き込むことを含み、前記修正されたデータは、前記記憶装置に記憶された前記ファイルの前記既存のデータの一部を置き換えるように構成され、ならびに前記記憶層は、前記第２の論理識別子の組のうちの１つ以上の論理識別子を使用して前記ファイルの前記修正されたデータを参照し、かつ前記第２の論理識別子の組の論理識別子を使用して前記記憶装置に記憶された前記ファイルの前記既存のデータの前記一部を参照するように構成される、請求項１２に記載の装置。
【請求項１７】
前記組み合わせることはさらに、前記第２の論理識別子の組の前記論理識別子を参照して実行された前記記憶動作のファイル修正を、前記第１の論理識別子の組に組み込むことを含む、請求項１２に記載の装置。
【請求項１８】
前記ファイル修正は、前記ファイルに新しいデータセグメントを書き込むことによって、前記ファイルを拡張することを含み、
前記拡張することは、前記第２の論理識別子の組に追加の論理識別子を含めることと、前記第２の論理識別子の組の前記追加の論理識別子を、前記記憶装置に記憶された前記新しいデータセグメントの記憶位置に結び付けることとを含む、請求項１７に記載の装置。
【請求項１９】
前記組み合わせることはさらに、前記第１の論理識別子の組に追加の論理識別子を含めることと、前記第１の論理識別子の組の前記追加の論理識別子を、前記新しいデータセグメントの前記記憶位置に結び付けることとを含む、請求項１８に記載の装置。
【請求項２０】
アドレス空間の第１の論理識別子の組を通して、記憶媒体に記憶されたファイルの元バージョンのデータを参照する手段と、
前記ファイルをオープンする要求に応答して、前記ファイルの論理複製を生成する手段であって、前記論理複製を生成することは、前記アドレス空間の第２の論理識別子の組を割り当てて、前記ファイルの前記データを参照することを含み、前記第２の論理識別子の組は前記第１の論理識別子の組とは異なり、前記第１の論理識別子の組および前記第２の論理識別子の組は、前記記憶媒体に記憶された前記ファイルの前記元バージョンの前記データを参照する、手段と、
前記第２の論理識別子の組を参照して、前記ファイルを修正する手段であって、前記ファイルを修正することは、前記記憶媒体に新しいデータセグメントを記憶することと、前記記憶媒体の元のデータセグメントを保持しながら、前記第２の論理識別子の組のうちの指定された論理識別子と前記記憶媒体に記憶されたファイルデータの前記元バージョンの前記元のデータセグメントとの間の関連付けを置き換えて、前記新しいデータセグメントを参照することとを含み、前記元のデータセグメントは、前記第１の論理識別子の組のうちの指定された論理識別子によって参照される、手段と、
前記第２の論理識別子の組を参照して前記ファイルを修正した後、前記第１の論理識別子の組を通じて前記ファイルの前記元のバージョンへのアクセスを提供する手段と、
前記第２の論理識別子の組を前記第１の論理識別子の組へ結合する手段であって、前記結合することは、前記第１の論理識別子の組のうちの前記指定された論理識別子と前記元のデータセグメントとの間の前記関連付けを、前記新しいデータセグメントへの関連付けに置き換えることを含む、手段と、
を含む、システム。
【請求項２１】
前記結合することは、結合ポリシに従って、前記第２の論理識別子の組内で実装されたファイル修正を参照するように前記第１の論理識別子の組を更新することをさらに含む、請求項２０に記載のシステム。
【請求項２２】
前記結合することはさらに、前記第１の論理識別子の組のうちの前記指定された論理識別子と前記新しいデータセグメントとの間の前記関連付けを、記憶媒体に記憶された永続的記号に記録することを含む、請求項２０に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
この開示は、記憶システムに関し、特に、ファイル一貫性を維持するためのシステムおよび方法に関する。
【発明の概要】
【課題を解決するための手段】
【０００２】
本明細書で開示されるのは、とりわけ、クローズツーオープンファイル一貫性モデルを実装する方法の実施形態である。本明細書で開示される方法のステップは、プロセッサおよび／または論理回路などのマシンコンポーネントを使用して実装されてもよい。したがって、開示される方法の１つ以上のステップおよび／または動作は、特定のマシンに結び付けられてもよい。代わりに、または加えて、開示される方法のステップおよび／または動作は、記憶媒体に記憶されたコンピュータ可読コードとして具体化されてもよい。記憶媒体は、永続的または非一時的記憶媒体を含んでもよい。
【０００３】
本明細書で開示される記憶一貫性のための方法の実施形態は、記憶装置の１つ以上の記憶位置に記憶されたデータを、アドレス空間の論理識別子と関連付けるステップ、記憶クライアントの要求に応答して、論理識別子の有効な組を提供してデータにアクセスし、それによって、論理識別子の有効な組および論理識別子の一貫性の組とが同一の１つ以上の記憶位置と関連付けられるステップ、ならびに／またはデータの少なくとも一部を修正するように構成された記憶動作を実装するステップであって、記憶動作を実装することは、有効な組における論理識別子のうちの１つ以上の記憶位置の関連付けを更新すること、および論理識別子の一貫性の組と１つ以上の記憶位置との間の関連付けを保存することを含む、ステップ、を含んでもよい。
【０００４】
記憶動作は、データを記憶装置上のログに付加することを含んでもよく、および方法はさらに、付加されたデータを論理識別子の有効な組の論理識別子と関連付けるステップを含んでもよい。代わりに、または加えて、記憶動作は、記憶装置に記憶されたデータの元のデータセグメントを修正するように構成されたデータセグメントを記憶装置上で書き込むことを含んでもよく、ならびに方法はさらに、論理識別子の一貫性の組における論理識別子を参照することによって元のデータセグメントへのアクセスを提供するステップ、および／または論理識別子の有効な組における論理識別子の使用によって、元のデータセグメントを修正するように構成されたデータセグメントを関連付けるステップを含んでもよい。一部の実施形態では、記憶動作は、データをファイルに付加することを含んでもよく、ならびに方法はさらに、１つ以上の追加論理識別子を論理識別子の有効な組に割り当てるステップ、および／または１つ以上の追加論理識別子を参照することによって付加されたデータへのアクセスを提供するステップを含んでもよい。記憶動作は、ファイルの複数の元のデータセグメントのうちの１つを修正するように構成されてもよく、ならびに方法はさらに、論理識別子の一貫性の組の論理識別子の使用によって、複数の元のデータセグメントを参照する（ｒｅｆｅｒｅｎｃｉｎｇ）ステップ、論理識別子の有効な組の論理識別子の使用によって、記憶動作により修正されていない元のデータセグメントを参照するステップ、および／または論理識別子の有効な組の論理識別子を通じて、記憶動作に対応するデータセグメントを参照するステップを含んでもよい。
【０００５】
開示される方法の一部の実施形態はさらに、記憶クライアントによって実行される記憶動作に対する記憶装置上の記憶容量を予約することによって、論理識別子の有効な組を割り当てるステップを含んでもよい。方法はさらに、異なる記憶クライアントの要求に応答して、記憶動作によって修正されていないデータへのアクセスを提供するステップを含んでもよい。
【０００６】
一部の実施形態では、開示される方法はさらに、データに対応するファイルをオープンする、別の記憶クライアントの要求に応答して、論理識別子空間の追加の有効な組を割り当て、それによって、論理識別子の一貫性の組および論理識別子の追加の有効な組が同一の記憶位置と関連付けられるステップを含み、関連付けは、記憶動作によっては修正されない。データは、データをそれぞれの論理識別子と関連付けるように構成された永続的メタデータと関連して記憶装置に記憶されてもよく、ならびに方法はさらに、データを一貫性の組および有効な組の論理識別子と関連付けるように構成された永続的メタデータを記憶装置に付加するステップを含んでもよい。
【０００７】
開示される方法の実施形態はさらに、データに対応するファイルをクローズする、記憶クライアントの要求に応答して、論理識別子の一貫性の組を論理識別子の有効な組と結合するステップを含んでもよく、結合することは、記憶クライアントによって論理識別子の有効な組を参照してなされたファイルへの修正を、論理識別子の一貫性の組に組み込むことを含む。一部の実施形態では、方法はさらに、論理識別子の有効な組を、１つ以上の記憶位置の記憶アドレスに結び付ける（ｂｉｎｄ）ステップを含む。
【０００８】
本明細書で開示されるのは、記憶一貫性のための装置の実施形態である。開示される装置の実施形態は、ファイルのデータを、論理識別子の元の組および論理識別子の複製の組の両方に結び付けることによって、記憶装置に記憶されたデータに対応するファイルを複製するように構成された変換モジュールと、複製論理識別子を参照してファイルを変更するように構成された記憶動作を実行している間に、記憶装置に記憶されたファイルデータ、および保存されたファイルデータと論理識別子の元の組との間の結び付け（ｂｉｎｄｉｎｇｓ）を保存するように構成された記憶層と、記憶動作を実行した後に、元の論理識別子を通じて、保存されたファイルデータへのアクセスを提供するように構成されたインタフェースと、を含んでもよい。
【０００９】
変換モジュールは、ファイルをオープンする要求に応答して、ファイルを複製するように構成されてもよく、およびインタフェースは、ファイルに関連する異なる要求に応答して、論理識別子の元の組を通じて、保存されたファイルデータへのアクセスを提供するように構成される。変換モジュールはさらに、オープンされたファイルに関連する記憶動作を、論理識別子の複製された組にリダイレクトするように構成されてもよい。
【００１０】
記憶動作は、ファイルからデータセグメントを削除するように構成されてもよく、ならびに記憶層は、データセグメントと論理識別子の複製された組における論理識別子との間の関連付けを削除し、およびデータセグメントと論理識別子の元の組における論理識別子との間の関連付けを保存するように構成されてもよい。代わりに、または加えて、記憶動作は、ファイルの既存のデータを変更するように構成されてもよく、ならびに記憶層は、論理識別子の複製された組のうちの１つ以上の論理識別子を使用して、ファイルの変更されたデータを参照し、および論理識別子の元の組の論理識別子を使用して、対応する保存されたファイルデータを参照するように構成されてもよい。
【００１１】
一部の実施形態では、変換モジュールはさらに、論理識別子の複製された組の論理識別子を参照して実行される記憶動作のファイル修正を、論理識別子の元の組に組み込むことによって、複製された論理識別子を元の論理識別子に組み合わせる（ｆｏｌｄ  ｉｎｔｏ）ように構成される。ファイル修正は、ファイルのデータセグメントを記憶装置に記憶することを含んでもよく、およびファイル修正を組み込むことは、データセグメントを論理識別子の元の組の論理識別子のうちの１つと関連付ける永続的メタデータを記憶装置に記憶することを含む。一部の実施形態では、ファイル修正は、ファイルを拡張（ｅｘｐａｎｄ）することを含み、およびファイル修正を組み込むことは、論理識別子を元の論理識別子の組に追加して、拡張されたファイルのデータを参照することを含む。
【００１２】
本明細書で開示されるのは、記憶一貫性のためのシステムの実施形態である。開示されるシステムは、ファイルをオープンする要求に応答して、ファイルの論理複製を作成する手段であって、論理複製を作成することは、論理アドレスの２つの異なる組を通じてファイルのデータを参照することを含む、手段と、論理アドレスの２つの異なる組のうちの最初の１つを参照して、ファイルを修正する手段と、論理アドレスの最初の組を参照してファイルを修正した後に、論理アドレスの２つの異なる組の２つ目の１つを通じてファイルの元のバージョンへのアクセスを提供する手段と、を含んでもよい。一部の実施形態では、開示されるシステムはさらに、結合ポリシに従って、論理アドレスの最初の組内で実装されるファイル修正を参照するように論理アドレスの２つ目の組を更新することによって、論理アドレスの２つの異なる組を結合する手段を含む。ファイルを修正する手段は、ファイルの修正されたデータを記憶装置に記憶されたログに付加する手段を含んでもよい。論理アドレスの２つの異なる組を結合する手段は、論理アドレスの２つ目の組の論理アドレスを、修正されたデータと関連付けるように構成された永続的記号（ｐｅｒｓｉｓｔｅｎｔ  ｎｏｔｅ）をログに付加する手段を含んでもよい。
【図面の簡単な説明】
【００１３】
【図１Ａ】オープンツークローズ一貫性のためのシステムの一実施形態のブロック図である。
【図１Ｂ】メタデータを記憶する実施形態を示す図である。
【図１Ｃ】記憶配列の一実施形態を示すブロック図である。
【図１Ｄ】データパケットフォーマットの一実施形態を示す図である。
【図１Ｅ】記憶ログの一実施形態を示す図である。
【図２】オープンツークローズ一貫性のためのシステムの別の実施形態のブロック図である。
【図３Ａ】領域複製、移動、結合、および他の高レベル記憶動作を効率的に実装するように構成された記憶層を含むシステムの一実施形態のブロック図である。
【図３Ｂ】領域複製動作の実施形態を示す図である。
【図３Ｃ】領域複製動作のさらなる実施形態を示す図である。
【図３Ｄ】領域複製動作のさらなる実施形態を示す図である。
【図３Ｅ】領域複製動作のさらなる実施形態を示す図である。
【図４Ａ】オープンツークローズ一貫性のためのシステムの別の実施形態のブロック図である。
【図４Ｂ】参照マッピングの使用によって実装される領域複製動作の実施形態を示す図である。
【図４Ｃ】参照マッピングの使用によって実装される領域複製動作のさらなる実施形態を示す図である。
【図４Ｄ】参照マッピングの使用によって実装される領域複製動作のさらなる実施形態を示す図である。
【図４Ｅ】参照マッピングの使用によって実装される領域複製動作のさらなる実施形態を示す図である。
【図５Ａ】間接参照層（ｉｎｄｉｒｅｃｔｉｏｎ  ｌａｙｅｒ）を含むシステムの一実施形態のブロック図である。
【図６】重複排除（ｄｅｄｕｐｌｉｃａｔｉｏｎ）動作の実施形態を示す図である。
【図７】スナップショット動作を効率的に実装するように構成された記憶層を含むシステムの一実施形態を示すブロック図である。
【図８Ａ】領域移動動作の実施形態を示す図である。
【図８Ｂ】領域移動動作の実施形態を示す図である。
【図８Ｃ】領域移動動作の実施形態を示す図である。
【図８Ｄ】領域移動動作の実施形態を示す図である。
【図８Ｅ】領域移動動作の実施形態を示す図である。
【図９Ａ】ファイル管理動作を効率的に実装するように構成された記憶層を含むシステムのブロック図である。
【図９Ｂ】ｍｍａｐチェックポイントを実装するように構成された記憶層の一実施形態を示す図である。
【図９Ｃ】記憶層によって実装される領域複製および領域結合動作の実施形態を示す図である。
【図９Ｄ】領域複製および領域結合動作のさらなる実施形態を示す図である。
【図９Ｅ】領域複製および領域結合動作のさらなる実施形態を示す図である。
【図９Ｆ】オープンツークローズファイル一貫性を効率的に実装するように構成された記憶層を含むシステムの一実施形態のブロック図である。
【図９Ｇ】クローズツーオープンファイル一貫性のさらなる実施形態を示す図である。
【図１０】原子的記憶動作を実装するように構成された記憶層を含むシステムの一実施形態を示す図である。
【図１１】不揮発性記憶媒体上のコンテキストフォーマットでのデータ記憶の論理インタフェースを管理する方法の一実施形態のフローチャートである。
【図１２】コンテキストデータの論理インタフェースを管理する方法の一実施形態のフローチャートである。
【図１３】コンテキストデータの論理インタフェースを管理する方法の別の実施形態のフローチャートである。
【図１４】領域結合動作を管理する方法の一実施形態のフローチャートである。
【図１５】領域複製動作を管理する方法の別の実施形態のフローチャートである。
【図１６】領域結合動作を管理する方法の別の実施形態のフローチャートである。
【図１７】オープンツークローズファイル一貫性を実装する方法の一実施形態のフローチャートである。
【発明を実施するための形態】
【００１４】
図１Ａは、記憶サービスを１つ以上の記憶クライアント１０６に提供するように構成された記憶層１３０を含むコンピューティングシステム１００の一実施形態のブロック図である。記憶層１３０は、本明細書でさらに詳細に開示されるように、オープンツークローズファイルサービスを提供するように構成されてもよい。コンピューティングシステム１００は、サーバ、デスクトップ、ラップトップ、埋め込みシステム、および／またはモバイルデバイスなどを含むがそれらに限定されない、任意の適切なコンピューティングデバイスを含んでもよい。一部の実施形態では、コンピューティングシステム１００は、一群の（ｃｌｕｓｔｅｒ  ｏｆ）サーバコンピューティングデバイスなどの複数のコンピューティングデバイスを含んでもよい。コンピューティングシステム１００は、処理リソース１０１、揮発性メモリリソース１０２（例えば、ランダムアクセスメモリ（ＲＡＭ））、不揮発性記憶リソース１０３、および通信インタフェース１０４を含んでもよい。処理リソース１０１は、汎用中央処理装置（ＣＰＵ）、特定用途向け集積回路（ＡＳＩＣ）、ならびにフィールドプログラマブルゲートアレイ（ＦＰＧＡ）およびプログラマブル論理アレイ（ＰＬＧ）などのプログラマブル論理素子を含んでもよいが、それらに限定されない。不揮発性記憶リソース１０３は、磁気ハードディスク、半導体記憶媒体、および／または光学式記憶媒体などの非一時的機械可読記憶媒体を含んでもよい。通信インタフェース１０４は、コンピューティングシステム１００をネットワーク１０５に通信可能に結合するように構成されてもよい。ネットワーク１０５は、伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）ネットワーク、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、仮想プライベートネットワーク（ＶＰＮ）、ストレージエリアネットワーク（ＳＡＮ）、公衆交換電話網（ＰＳＴＮ）、および／またはインターネットなどの任意の適切な通信ネットワークを含んでもよいが、それらに限定されない。
【００１５】
コンピューティングシステム１００は、１つ以上の記憶クライアント１０６に記憶サービスを提供するように構成することができる記憶層１３０を含んでもよい。記憶クライアント１０６は、オペレーティングシステム（ベアメタル（ｂａｒｅ  ｍｅｔａｌ）オペレーティングシステム、ゲストオペレーティングシステム、仮想マシン、および仮想化環境などを含む）、ファイルシステム、データベースシステム、ならびに／またはリモート記憶クライアント（例えば、ネットワーク１０５を通じてコンピューティングシステム１００および／もしくは記憶層１３０に通信可能に結合された記憶クライアント）などを含んでもよいが、それらに限定されない。
【００１６】
記憶層１３０（および／または、そのモジュール）は、ソフトウェア、ハードウェア、またはそれらの組み合わせで実装されてもよい。一部の実施形態では、記憶層１３０の一部は、不揮発性記憶リソース１０３などの永続的、非一時的記憶媒体に記憶することができる、コンピュータプログラムコードなどの実行可能命令として具体化される。命令および／またはコンピュータプログラムコードは、処理リソース１０１によって実行されるように構成されてもよい。代わりに、または加えて、記憶層１３０の一部は、汎用および／もしくは特定用途コンポーネント、プログラム可能ハードウェア、ＦＰＧＡ、ＡＳＩＣ、ハードウェアコントローラ、ならびに／または記憶制御装置などのマシンコンポーネントとして具体化されてもよい。
【００１７】
記憶層１３０は、記憶媒体１４０上で記憶動作を実行するように構成されてもよい。記憶媒体１４０は、データを永続的に記憶することが可能な任意の記憶媒体を含んでもよい。本明細書で使用されるように、「永続的」なデータ記憶は、永続的、不揮発性記憶媒体に情報を記憶することを指す。記憶媒体１４０は、１つ以上の半導体記憶装置もしくはドライブ（ＳＳＤ）、ハードディスクドライブ（例えば、Ｉｎｔｅｇｒａｔｅｄ  Ｄｒｉｖｅ  Ｅｌｅｃｔｒｏｎｉｃｓ（ＩＤＥ）ドライブ、Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ（ＳＣＳＩ）ドライブ、Ｓｅｒｉａｌ  Ａｔｔａｃｈｅｄ  ＳＣＳＩ（ＳＡＳ）ドライブ、Ｓｅｒｉａｌ  ＡＴ  Ａｔｔａｃｈｍｅｎｔ（ＳＡＴＡ）ドライブなど）、テープドライブ、および／または書き込み可能光学ドライブ（ＣＤドライブ、ＤＶＤドライブ、Ｂｌｕ−ｒａｙドライブなど）などにおける半導体記憶媒体などの不揮発性記憶媒体を含んでもよい。
【００１８】
一部の実施形態では、記憶媒体１４０は、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、ｎａｎｏ  ＲＡＭ（ＮＲＡＭ）、磁気抵抗ＲＡＭ（ＭＲＡＭ）、相変化ＲＡＭ（ＰＲＡＭ）、Ｒａｃｅｔｒａｃｋメモリ、Ｍｅｍｒｉｓｔｏｒメモリ、ナノ結晶ワイヤベースメモリ、酸化ケイ素ベースサブ１０ナノメータプロセスメモリ、グラフェンメモリ、シリコン−酸化物−窒化物−酸化物−シリコン（ＳＯＮＯＳ）、抵抗ランダムアクセスメモリ（ＲＲＡＭ）、プログラマブルメタライゼーションセル（ＰＭＣ）、および／またはｃｏｎｄｕｃｔｉｖｅ−ｂｒｉｄｇｉｎｇ  ＲＡＭ（ＣＢＲＡＭ）などを含むことができるがそれらに限定されない、不揮発性半導体メモリを含む。記憶媒体１４０の特定の実施形態が本明細書で開示されるが、この開示の教示は、不揮発性および揮発性の両方の形式を含む、任意の適切な形式のメモリに適用されてもよい。したがって、記憶層１３０の特定の実施形態が不揮発性、半導体記憶装置１４０のコンテキストで開示されるが、他の記憶装置および／または記憶媒体と共に記憶層１３０が使用されてもよい。
【００１９】
一部の実施形態では、記憶媒体１４０は、ＲＡＭ、ダイナミックＲＡＭ（ＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、シンクロナスダイナミックＲＡＭ（ＳＤＲＡＭ）などを含むことができるがそれらに限定されない、揮発性メモリを含む。記憶媒体１４０は、ＣＰＵキャッシュ（例えば、Ｌ１、Ｌ２、Ｌ３キャッシュなど）、および／またはグラフィックスメモリなどの、処理リソース１０１のメモリに対応してもよい。一部の実施形態では、記憶媒体１４０は、インターコネクト１２７の使用によって記憶層１３０に通信可能に結合される。インターコネクト１２７は、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）、ＰＣＩエクスプレス（ＰＣＩ−ｅ）、シリアルアドバンスドテクノロジーアタッチメント（シリアルＡＴＡまたはＳＡＴＡ）、パラレルＡＴＡ（ＰＡＴＡ）、スモールコンピュータシステムインタフェース（ＳＣＳＩ）、ＩＥＥＥ１３９４（Ｆｉｒｅ  Ｗｉｒｅ）、ファイバーチャネル、および／またはユニバーサルシリアルバス（ＵＳＢ）などを含んでもよいが、それらに限定されない。代わりに、記憶媒体１４０は、ネットワーク１０５（および／または、ストレージエリアネットワーク（ＳＡＮ）、および／または仮想ストレージエリアネットワーク（ＶＳＡＮ）などの他の通信インタフェース）を通じて記憶層１３０に通信可能に結合されたリモート記憶装置であってもよい。したがって、インターコネクト１２７は、ＰＣＥ−ｅバス、ネットワーク接続（例えば、インフィニバンド）、ストレージネットワーク、ファイバーチャネルプロトコル（ＦＣＰ）ネットワーク、および／またはＨｙｐｅｒＳＣＳＩなどの、リモートバスを含んでもよい。
【００２０】
記憶層１３０は、とりわけ、記憶コントローラ１３９の使用によって、記憶媒体１４０上で記憶動作を管理するように構成されてもよい。記憶コントローラ１３９は、ストレージドライバ、Ｉ／Ｏドライバ、および／もしくはフィルタドライバなどの、コンピューティングシステム１００上で動作する１つ以上のドライバおよび／または他のソフトウェアモジュール、ならびにハードウェアコントローラおよび／もしくは通信インタフェースなどの、ハードウェアコンポーネントなどを含むがそれらに限定されないソフトウェアおよび／またはハードウェアコンポーネントを含んでもよい。記憶媒体１４０は、記憶装置１４１上で具体化されてもよい。記憶層１３０（例えば、記憶コントローラ１３９）の一部は、記憶装置１４１のハードウェアおよび／またはソフトウェアコンポーネント（例えば、ファームウェア）として実装されてもよい。
【００２１】
記憶コントローラ１３９は、記憶媒体１４０の特定の記憶位置において記憶動作を実装するように構成されてもよい。本明細書で使用されるように、記憶位置は、データを永続的に記憶することが可能な記憶リソース（例えば、記憶媒体および／または装置）の記憶の単位を指し、記憶位置は、ページ、ページのグループ（例えば、論理ページおよび／もしくは論理ページ内のオフセット）、記憶区画（例えば、物理消去ブロック、論理消去ブロックなど）、セクタ、磁気ディスク上の位置、ならびに／またはバッテリバックアップメモリ位置などを含んでもよいが、それらに限定されない。記憶位置は、記憶媒体１４０の記憶アドレス空間１４４内でアドレス指定可能であってもよい。記憶アドレスは、物理アドレス、媒体アドレス、バックエンドアドレス、および／またはアドレスオフセットなどに対応してもよい。記憶アドレスは、任意の適切な記憶アドレス空間１４４、記憶アドレス指定スキーム、および／または記憶位置の配置に対応してもよい。
【００２２】
記憶層１３０は、インタフェース１３１を含んでもよく、インタフェース１３１を通じて、記憶クライアント１０６は、記憶層１３０によって提供される記憶サービスにアクセスすることができる。記憶インタフェース１３１は、ブロックデバイスインタフェース、仮想化記憶インタフェース、１つ以上の仮想記憶ユニット（ＶＳＵ）、オブジェクト記憶インタフェース、データベース記憶インタフェース、ならびに／または他の適切なインタフェースおよび／もしくはアプリケーションプログラミングインタフェース（ＡＰＩ）のうちの１つ以上を含んでもよい。
【００２３】
記憶層１３０は、フロントエンド記憶インタフェースを通じて記憶リソースを参照することを設けてもよい。本明細書で使用されるように、「フロントエンド記憶インタフェース」は、それらと通じて記憶クライアント１０６が記憶層１３０の記憶リソースを参照することができる、インタフェースおよび／または名前空間を指す。記憶インタフェースは、論理アドレス空間１３２に対応してもよい。論理アドレス空間１３２は、識別子のグループ、組、集合、範囲（ｒａｎｇｅ）、および／または範囲（ｅｘｔｅｎｔ）を含んでもよい。本明細書で使用されるように、「識別子」または「論理識別子」（ＬＩＤ）は、ソースリソースを参照するための識別子を指し、ＬＩＤは、名前（例えば、ファイル名、および／または識別名など）、データ識別子、参照番号（ｒｅｆｅｒｅｎｃｅｓ）、リンク、ＬＩＤ、フロントエンド識別子、論理アドレス、論理ブロックアドレス（ＬＢＡ）、論理ユニット番号（ＬＵＮ）アドレス、仮想ユニット番号（ＶＵＮ）アドレス、仮想記憶アドレス、記憶アドレス、物理アドレス、媒体アドレス、および／またはバックエンドアドレスを含んでもよいが、それらに限定されない。
【００２４】
論理アドレス空間１３２の論理容量は、論理アドレス空間１３２におけるＬＩＤの数、ならびに／またはＬＩＤによって参照される記憶リソースのサイズおよび／もしくは粒度に対応してもよい。一部の実施形態では、論理アドレス空間１３２は、「シンプロビジョニング（ｔｈｉｎｌｙ  ｐｒｏｖｉｓｉｏｎｅｄ）」されてもよい。本明細書で使用されるように、シンプロビジョニングされた論理アドレス空間１３２は、内在する記憶リソースの物理記憶容量を上回る（例えば、記憶媒体１４０の記憶容量を上回る）論理容量を有する論理アドレス空間１３２を指す。一実施形態では、記憶層１３０は、記憶媒体１４０の物理記憶容量を上回ることができる、６４ビット論理アドレス空間１３２（例えば、２２６の一意なＬＩＤを含む論理アドレス空間）を提供するように構成される。大規模、シンプロビジョニングされた論理アドレス空間１３２によって、記憶クライアント１０６が効率的に連続した領域のＬＩＤを割り当て、および／または参照することが可能になると共に、名前競合（ｎａｍｅ  ｃｏｎｆｌｉｃｔｓ）の可能性を減少させる。記憶割り当てのためのシステムおよび方法のさらなる実施形態は、参照によってその全体が本明細書に組み込まれる、Ｄａｖｉｄ  Ｆｌｙｎｎらによる２０１３年４月１７日に出願された「Ｓｙｓｔｅｍｓ  ａｎｄ  Ｍｅｔｈｏｄｓ  ｆｏｒ  Ｓｔｏｒａｇｅ  Ａｌｌｏｃａｔｉｏｎ」と題する米国特許出願第１３／８６５，１５３号明細書で開示される。
【００２５】
記憶層１３０の変換モジュール１３４は、論理アドレス空間１３２のＬＩＤを記憶リソース（例えば、記憶媒体１４０の記憶アドレス空間１４４内に記憶されたデータ）にマッピングするように構成されてもよい。論理アドレス空間１３２は、バックエンド記憶リソース（例えば、記憶媒体１４０）から独立してもよく、したがって、論理アドレス空間１３２のＬＩＤと記憶アドレス空間１４４の記憶アドレスとの間の組または予め定められたマッピングが存在しなくてもよい。一部の実施形態では、論理アドレス空間１３２は、わずかに、シンプロビジョニングされ、および／またはオーバープロビジョニング（ｏｖｅｒ−ｐｒｏｖｉｓｉｏｎｅｄ）され、それによって、論理アドレス空間１３２のサイズが記憶媒体１４０の記憶アドレス空間１４４と異なるようになる。
【００２６】
記憶層１３０は、記憶媒体１４０上で実行される記憶動作に関連する記憶メタデータ１３５を維持するように構成されてもよい。記憶メタデータ１３５は、論理アドレス空間１３２のＬＩＤと記憶アドレス空間１４４内の記憶アドレスとの間のａｎｙ−ｔｏ−ａｎｙマッピングを含むフォワードマッピング、記憶媒体１４０の記憶位置の内容に関連するリバースマッピング、有効性ビットマップ（ｖａｌｉｄｉｔｙ  ｂｉｔｍａｐｓ）、信頼性試験（ｒｅｌｉａｂｉｌｉｔｙ  ｔｅｓｔｉｎｇ）および／もしくは状態メタデータ、状態情報（例えば、エラー率および消去状態（ｒｅｔｉｒｅｍｅｎｔ  ｓｔａｔｕｓ）など）、ならびに／またはキャッシュメタデータ、などを含んでもよいが、それらに限定されない。記憶メタデータ１３５の一部は、コンピューティングシステム１００の揮発性メモリリソース１０２内で維持されてもよい。代わりに、または加えて、記憶メタデータ１３５の一部は、不揮発性記憶リソース１０３および／または記憶媒体１４０に記憶されてもよい。
【００２７】
図１Ｂは、論理アドレス空間１３２のＬＩＤと記憶アドレス空間１４４内のバックエンド識別子（例えば、記憶アドレス）との間のａｎｙ−ｔｏ−ａｎｙマッピング１５０の一実施形態を示す。ａｎｙ−ｔｏ−ａｎｙマッピング１５０は、記憶メタデータ１３５の１つ以上のデータ構造において維持されてもよい。図１Ｂに示されるように、変換モジュール１３４は、任意の記憶リソース識別子（任意のＬＩＤ）を任意のバックエンド記憶位置にマッピングするように構成されてもよい。さらに示されるように、論理アドレス空間１３２は、内在する記憶アドレス空間１４４とは異なってサイジングされてもよい。図１Ｂの実施形態では、論理アドレス空間１３２は、シンプロビジョニングされてもよく、および、それ自体が記憶アドレス空間１４４における記憶アドレスの範囲よりも大きい範囲のＬＩＤを含んでもよい。
【００２８】
上記開示されるように、記憶クライアント１０６は、論理アドレス空間１３２のＬＩＤを通じて記憶リソースを参照してもよい。したがって、論理アドレス空間１３２は、記憶リソースの論理インタフェース１５２に対応してもよく、および記憶アドレス空間１４４内の特定の記憶アドレスへのマッピングは、記憶リソースのバックエンドインタフェース１５４に対応してもよい。
【００２９】
記憶層１３０は、フォワードマッピング１６０における論理インタフェース１５２とバックエンドインタフェース１５４との間のａｎｙ−ｔｏ−ａｎｙマッピング１５０を維持するように構成されてもよい。フォワードマッピング１６０は、インデックス、マッピング、ハッシュマッピング、ハッシュテーブル、ツリー、レンジエンコードツリー、および／またはｂツリーなどを含むがそれらに限定されない、任意の適切なデータ構造を含んでもよい。フォワードマッピング１６０は、記憶媒体１４０に記憶されたデータを参照するための使用に対して割り当てられているＬＩＤに対応するエントリ１６２を含んでもよい。フォワードマッピング１６０のエントリ１６２は、ＬＩＤ１６４Ａ〜Ｄを記憶アドレス空間１４４内のそれぞれの記憶アドレス１６６Ａ〜Ｄと関連付けてもよい。フォワードマッピング１６０はわずかにポピュレート（ｐｏｐｕｌａｔｅ）されてもよく、ならびに、それ自体が、記憶クライアント１０６によって現在割り当てられておらず、および／または記憶媒体１４０に記憶された有効なデータを参照するために現在使用されていないＬＩＤに対応するエントリを除外してもよい。一部の実施形態では、フォワードマッピング１６０は、レンジエンコードデータ構造を含み、それによって、エントリ１６２のうちの１つ以上が、複数のＬＩＤ（例えば、ＬＩＤの範囲（ｒａｎｇｅ）、範囲（ｅｘｔｅｎｔ）、および／または組）に対応することができる。図１Ｂの実施形態では、フォワードマッピング１６０は、記憶アドレス１６６Ａの対応する範囲にマッピングされたＬＩＤ１６４Ａの範囲に対応するエントリ１６２を含む。エントリ１６２は、ＬＩＤによってインデックス付けされてもよい。図１Ｂの実施形態では、エントリ１６２は、それぞれのリンクによってツリーデータ構造に配置される。開示はこの点に限定されないが、しかしながら、任意の適切なデータ構造および／またはインデックス付け機構を使用するように適合されてもよい。
【００３０】
図１Ｃを参照して、一部の実施形態では、記憶媒体１４０は、複数の半導体記憶要素１１６Ａ〜Ｙを含む半導体記憶配列１１５を含んでもよい。本明細書で使用されるように、半導体記憶配列（または記憶配列）１１５は、２つ以上の独立した列１１８の組を指す。列１１８は、とりわけインターコネクト１２７を使用して並列に記憶層１３０に通信可能に結合された１つ以上の半導体記憶要素１１６Ａ〜Ｙを含んでもよい。配列１１５の行１１７は、それぞれの列１１８の物理記憶単位（半導体記憶要素１１６Ａ〜Ｙ）を含んでもよい。本明細書で使用されるように、半導体記憶要素１１６Ａ〜Ｙは、パッケージ、チップ、ダイ、平面、および／またはプリント回路基板などとして具体化された半導体記憶リソースを含むが、それらに限定されない。配列１１５を含む半導体記憶要素１１６Ａ〜Ｙは、独立した動作が可能であってもよい。したがって、半導体記憶要素１１６Ａの最初の１つ目は、第１の記憶動作を実行することが可能であってもよく、２つ目の半導体記憶要素１１６Ｂは、異なる記憶動作を実行する。例えば、半導体記憶要素１１６Ａは、第１の物理アドレスにおいてデータを読み出すように構成されてもよく、もう一つの半導体記憶要素１１６Ｂは、異なる物理アドレスにおいてデータを読み出す。
【００３１】
半導体記憶配列１１５はまた、論理記憶要素（ＬＳＥ）と称されてもよい。本明細書でさらに詳細に開示されるように、半導体記憶配列１１５は、論理記憶ユニット（行１１７）を含んでもよい。本明細書で使用されるように、「論理記憶ユニット」、すなわち行１１７は、配列１１５のそれぞれの列１１８上の各々の物理記憶ユニットの２つ以上の物理記憶ユニットの組み合わせを指す。論理消去ブロックは、２つ以上の物理消去ブロックの組を指し、論理ページは、２つ以上のページなどの組を指す。一部の実施形態では、論理消去ブロックは、それぞれの論理記憶要素１１５および／またはバンク内で消去ブロックを含んでもよい。代わりに、論理消去ブロックは、複数の異なる配列１１５内で消去ブロックを含んでもよく、および／または半導体記憶要素の複数のバンクに及んで（ｓｐａｎ）もよい。
【００３２】
図１Ａを再度参照して、記憶層１３０はさらに、ログ構造化記憶構成で（例えば、記憶ログで）記憶媒体１４０にデータを記憶するように構成されたログ記憶モジュール１３６を含んでもよい。本明細書で使用されるように、「記憶ログ」、すなわち「ログ構造」は、記憶媒体１４０の記憶アドレス空間１４４内のデータの順序付けられた配置を指す。記憶ログにおけるデータは、永続的メタデータを含んでもよく、および／または永続的メタデータと関連付けられてもよい。したがって、記憶層１３０は、コンテキスト、自己記述的フォーマット（ｓｅｌｆ−ｄｅｓｃｒｉｂｉｎｇ  ｆｏｒｍａｔ）でデータを記憶するように構成されてもよい。本明細書で使用されるように、コンテキストまたは自己記述的フォーマットは、永続的メタデータと関連してデータが記憶されるデータフォーマットを指す。一部の実施形態では、永続的メタデータは、データを識別するように構成されてもよく、ならびに、それ自体がデータの論理インタフェース（例えば、データと関連付けられたＬＩＤを含んでもよい）を含んでもよく、および／またはそれを参照してもよい。永続的メタデータは、データの所有者、アクセス制御、データタイプ、相対的位置もしくはデータのオフセットに関連する情報、データと関連付けられた記憶動作（例えば、原子的記憶動作、および／もしくはトランザクションなど）に関連する情報、ログシーケンス情報、ならびに／またはデータ記憶パラメータ（例えば、圧縮アルゴリズム、暗号化など）などを含むが、それらに限定されない他の情報を含んでもよい。
【００３３】
図１Ｄは、コンテキストデータフォーマットを示す。図１Ｄのパケットフォーマット１１０は、データセグメント１１２および永続的メタデータ１１４を含む。データセグメント１１２は、いずれかの任意の長さおよび／またはサイズのセグメントであってもよい。永続的メタデータ１１４は、データパケット１１０の１つ以上のヘッダフィールドとして具体化されてもよい。上記開示されたように、永続的メタデータ１１４は、データセグメント１１２の論理インタフェースを含んでもよく、および、それ自体がデータセグメント１１２と関連付けられたＬＩＤを含んでもよい。図１Ｄはパケットフォーマット１１０を示しているが、開示はこの点に限定されず、ならびに記憶媒体１４０上のインデックス、および／または記憶区画インデックスなどを含むがそれらに限定されない他の方法で、データ（例えば、データセグメント１１２）をコンテキストメタデータと関連付けてもよい。データパケット１１０は、シーケンス情報１１３と関連付けられてもよい。シーケンス情報は、記憶ログ内のデータパケットの相対的順序を判定するために使用されてもよい。一部の実施形態では、データパケットは、記憶媒体１４０の記憶区画内で連続して付加される。記憶区画は、消去ブロックまたは論理消去ブロックなどに対応してもよい。各々の記憶区画は、大多数のデータパケット１１０を記憶することが可能であってもよい。記憶区画内のデータパケット１１０の相対的位置は、記憶ログ内のパケットの順序を判定してもよい。記憶区画の順序は、とりわけ、記憶区画シーケンス情報１１３によって判定されてもよい。記憶区画は、記憶区画が使用（例えば、消去）のために初期化され、プログラミングされ、またはクローズされるなどのときにそれぞれのシーケンス情報１１３に割り当てられてもよい。記憶区画シーケンス情報１１３は、記憶アドレス空間１４４内で記憶区画の順序付けシーケンスを判定してもよい。したがって、記憶ログ内のデータパケット１１０の相対的順序は、ａ）特定の記憶区画内のデータパケット１１０の相対的位置、およびｂ）記憶アドレス空間１４４における他の記憶区画に対する記憶区画の順序、によって判定されてもよい。
【００３４】
一部の実施形態では、記憶層１３０は、半導体記憶媒体またはフラッシュ記憶媒体などの非対称、追記型記憶媒体１４０を管理するように構成されてもよい。本明細書で使用されるように、「追記型」記憶媒体は、新たなデータが書き込まれ、またはそこでプログラミングされる度に再初期化される（例えば、消去される）記憶媒体を指す。本明細書で使用されるように、「非対称」記憶媒体は、異なるタイプの記憶動作に対して異なる待ち時間を有する記憶媒体を指す。一部の実施形態では、例えば、読み出し動作は、書き込み／プログラム動作よりも高速であることがあり、および書き込み／プログラム動作は、消去動作よりもはるかに高速であることがある（例えば、媒体を読み出すことは、消去することよりも数百倍高速であり、および記憶媒体をプログラミングすることよりも数十倍高速である）。記憶媒体１４０は、グループ（例えば、消去ブロック）として消去することができる記憶区画に区分化されてもよい。このようにして、「適当な（ｉｎ−ｐｌａｃｅ）」単一のデータセグメントを修正することは、データを含む消去ブロック全体を消去すること、および元の、変更されていないデータに従って、修正されたデータを消去ブロックに再書き込みすることを必要とすることがある。このことは、過度に媒体を摩耗させることがある、不効率な「ライトアンプリフィケーション（ｗｒｉｔｅ  ａｍｐｌｉｆｉｃａｔｉｏｎ）」をもたらすことがある。一部の実施形態では、したがって、記憶層１３０は、「不適当な（不適切な）」データを書き込むように構成されてもよい。本明細書で使用されるように、「不適当な」データを書き込むことは、「適当な」データを上書きすること（例えば、データの元の物理記憶位置を上書きすること）ではなく異なる記憶位置においてデータを更新および／または上書きすることを指す。不適当なデータを更新および／または上書きすることは、修正されることになるデータを有する消去ブロック上の既存の、有効なデータが消去および再複製される必要がないので、ライトアンプリフィケーションを回避することができる。さらに、不適当なデータを書き込むことは、多くの記憶動作の待ち時間経路からの消去を削除することができ、それによって消去待ち時間が、書き込み動作の「クリティカルパス」の一部ではなくなる。
【００３５】
記憶層１３０は、とりわけ、ログ記憶モジュール１３６の使用によって不適当な記憶動作を実行するように構成されてもよい。ログ記憶モジュール１３６は、記憶層１３０によって実行される記憶動作の相対的順序を維持する方式で、記憶アドレス空間１４４内で最新付加ポイント（ｃｕｒｒｅｎｔ  ａｐｐｅｎｄ  ｐｏｉｎｔ）においてデータを付加する（記憶媒体１４０上で「記憶ログ」を生成する）ように構成されてもよい。図１Ｅは、記憶媒体１４０の記憶アドレス空間１４４内で実行される付加専用（ａｐｐｅｎｄ−ｏｎｌｙ）記憶動作の一実施形態を示す。上記開示されるように、記憶アドレス空間１４４は、複数の記憶区画１７０Ａ〜Ｎ（例えば、消去ブロックまたは論理消去ブロックなど）を含み、その各々を、データを記憶するのに使用するために初期化（例えば、消去）することができる。記憶区画１７０Ａ〜Ｎは、本明細書で開示されるように、ページおよび／または論理ページなどに対応することができる、それぞれの記憶位置を含んでもよい。記憶位置は、それぞれの記憶アドレス（例えば、記憶アドレス０〜記憶アドレスＮ）が割り当てられてもよい。
【００３６】
ログ記憶モジュール１３６は、物理アドレス空間１４４内の追加ポイント１８０から連続してデータを記憶するように構成されてもよい。図１Ｅの実施形態では、データは、記憶区画１７０Ａの記憶位置１８２内の付加ポイント１８０において付加されてもよく、および記憶位置１８２が満たされるとき、付加ポイント１８０を次の利用可能な記憶位置に進めてもよい（１８１）。本明細書で使用されるように、「利用可能な」記憶位置は、初期化されており、およびまだプログラミングされていない（例えば、消去されている）記憶位置を指す。上記開示されるように、一部のタイプの記憶媒体は、消去されるときに初めて確実にプログラミングすることができる。したがって、利用可能な記憶位置は、初期化（または消去状態）にある記憶区画１７０Ａ〜Ｎ内の記憶位置を指してもよい。
【００３７】
図１Ｅの実施形態では、論理消去ブロック１７０Ｂは、とりわけ、消去状態にない（例えば、有効なデータを含む）ことに起因して、記憶に利用可能でないことがあり、高エラー率に起因してサービス外であることがある。したがって、記憶位置１８２を満たした後、ログ記憶モジュール１３６は、利用可能でない記憶区画１７０Ｂをスキップしてもよく、および付加ポイント１８０を次の利用可能な記憶区画１７０Ｃに進めてもよい。上記開示されたように、ログ記憶モジュール１３６は、次の利用可能な記憶区画１７０Ａ〜Ｎにおいて付加ポイント１８０が存続することを示す記憶位置１８３〜１８５にデータを付加することを継続するように構成されてもよい。
【００３８】
記憶アドレス空間１４４内の「最後の」記憶位置（例えば、記憶区画１７０Ｎ個の記憶位置Ｎ  １８９）にデータを記憶した後、ログ記憶モジュール１３６は、第１の記憶区画１７０Ａ（または、記憶区画１７０Ａが利用可能でない場合は次の利用可能な記憶区画）に再度向ける（ｗｒａｐｐｉｎｇ  ｂａｃｋ  ｔｏ）ことによって、付加ポイント１８０を進めてもよい。したがって、ログ記憶モジュール１３６は、記憶アドレス空間１４４をループまたはサイクルとして使用してもよい。
【００３９】
上記開示されるように、記憶アドレス空間１４４内でデータを連続して付加することによって、記憶媒体１４０に記憶ログを生成することができる。図１Ｅの実施形態では、記憶ログは、記憶アドレス空間１４４内で付加ポイント１８０から連続してデータパケット（および／または他のデータ構造）を記憶することによって実行される記憶動作の順序付けられたシーケンスを含んでもよい。上記開示されたように、付加専用記憶フォーマットは、不適切なデータを修正および／または上書きするために使用されてもよい。不適切な記憶動作を実行することは、修正および／または上書きされているデータを含む記憶区画１７０Ａ〜Ｎ上の既存の有効なデータが消去および／または再複製される必要がないので、ライトアンプリフィケーションを回避することができる。さらに、不適切なデータを書き込むことは、多くの記憶動作の待ち時間経路からの消去を削除することができる（消去待ち時間は、もはや書き込み動作の「クリティカルパス」の一部ではない）。
【００４０】
図１Ｅの実施形態では、ＬＩＤ  Ａに対応するデータセグメントＸ０は、記憶位置１９１に記憶されてもよい。データセグメントＸ０は、上記開示された自己記述的パケットフォーマット１１０で記憶されてもよい。パケット１１０のデータセグメント１１２は、データセグメントＸ０を含んでもよく、および永続的メタデータ１１４は、データセグメントと関連付けられたＬＩＤ（例えば、ＬＩＤ  Ａ）を含んでもよい。記憶クライアント１０６は、ＬＩＤ  Ａと関連付けられたデータを修正および／または上書きする動作を要求してもよく、それは、データセグメントＸ０をデータセグメントＸ１と置き換えることを含むことができる。記憶層１３０は、記憶位置１９１において適切な、既存のデータパケット１１０を修正するのではなく、記憶媒体１４４上で異なる記憶位置１９３においてデータセグメントＸ１を含む新たなパケット１１０を付加することによって、この不適切な動作を実行してもよい。記憶動作はさらに、記憶メタデータ１３５を更新して、ＬＩＤ  Ａを記憶位置１９３の記憶アドレスと関連付け、および／または記憶位置１９１における使用されていない（ｏｂｓｏｌｅｔｅ）データＸ０を無効化することを含んでもよい。図１Ｅに示されるように、記憶メタデータ１３５を更新することは、フォワードマッピング１６０のエントリを更新して、ＬＩＤ  Ａ  １６４Ｅを、修正されたデータセグメントＸ１の記憶アドレスと関連付けることを含んでもよい。
【００４１】
不適切な記憶動作（例えば、記憶ログにデータを付加すること）を実行することは、記憶媒体１４０上に残存する使用されていない、または無効なデータ（例えば、消去、修正および／または上書きされた不適切なデータ）をもたらすことがある。図１Ｅに示されるように、記憶位置１９１において適切なデータセグメントＸ０を上書き、および／または置き換えることとは反対に、記憶ログにデータセグメントＸ１を付加することによってＬＩＤ  Ａのデータを修正することは、記憶媒体１４０上で使用されていないバージョンのデータセグメントＸ０を維持することになることがある。使用されていないバージョンのデータセグメントＸ０は、上記開示されるように、データセグメントＸ０を消去することが、時間を要する動作であり、かつライトアンプリフィケーションをもたらすことがある、記憶区画１７０Ａ全体を消去すること、および／または記憶区画１７０Ａ上で有効なデータを移動させることを含むことがあるので、記憶媒体１４０から即時に削除（例えば、消去）されないことがある。同様に、もはや使用されていない（例えば、削除され、またはトリム（ＴＲＩＭ）動作の影響を受ける）データは、即時に削除されないことがある。このようにして、経時的に、記憶媒体１４０は、甚大な量の「無効な」データを蓄積することがある。
【００４２】
記憶層１３０は、記憶メタデータ１３５の使用によって（例えば、フォワードマッピング１６０）、記憶位置１９１におけるデータセグメントＸ０などの無効なデータを識別してもよい。記憶層１３０は、フォワードマッピング１６０において有効な識別子（ＬＩＤ）と関連付けられていない記憶位置が、記憶媒体１４０上で保持される必要がないデータを含むと判定してもよい。代わりに、または加えて、記憶層１３０は、削除されており、トリムされており（ＴＲＩＭｅｄ）、使用されておらず、および／または無効なデータを効率的に識別するために、有効性ビットマップおよび／またはリバースマッピングなどの他の記憶メタデータ１３５を維持してもよい。
【００４３】
記憶層１３０は、無効なデータによって占有される記憶リソースを再要求（ｒｅｃｌａｉｍ）するように構成されてもよい。記憶層１３０はさらに、記憶媒体１４０に記憶されたデータをリフレッシュすること（データ劣化、書き込み障害、および／もしくは読み出し障害に起因したエラー状態を防止するため）、ならびに／または媒体信頼性状況を監視することなどを含むがそれらに限定されない、他の媒体管理動作を実行するように構成されてもよい。本明細書で使用されるように、記憶区画１７０Ａ〜Ｎなどの記憶リソースを再要求することは、新たなデータをそこに記憶／プログラミングすることができるように、記憶区画１７０Ａ〜Ｎを消去することを指す。記憶区画１７０Ａ〜Ｎを再要求することは、記憶区画１７０Ａ〜Ｎ上の有効なデータを新たな記憶位置に移動することを含んでもよい。記憶層１３０は、記憶区画１７０Ａ〜Ｎにおける無効なデータの量、記憶区画１７０Ａ〜Ｎにおける有効なデータの量、摩耗レベル（例えば、プログラム／消去サイクルの数）、および記憶区画１７０Ａ〜Ｎがプログラミンングまたはレフレッシュされてからの時間などを含むことができるがそれらに限定されない、１つ以上の因子に基づいて、再要求に対する記憶区画１７０Ａ〜Ｎを識別してもよい。
【００４４】
記憶層１３０は、記憶媒体１４０上の記憶ログの内容の使用によって、フォワードマッピング１６０を含む記憶メタデータ１３５を再構築するように構成されてもよい。図１Ｅの実施形態では、ＬＩＤ  Ａと関連付けられた最新のバージョンのデータは、記憶位置１９１および１９３のそれぞれにおけるデータパケット１１０の相対的ログ順序に基づいて判定されてもよい。記憶位置１９３におけるデータパケットは、記憶ログにおける記憶位置１９１のデータパケットの後に順序付けされるので、記憶層１３０は、記憶位置１９３がＬＩＤ  Ａに対応する最新バージョンのデータを含むと判定してもよい。記憶層１３０は、フォワードマッピング１６０を再構築して、ＬＩＤ  Ａを記憶位置１９３におけるデータパケット（記憶位置１９１における使用されていないデータではなく）と関連付けてもよい。
【００４５】
図２は、記憶層１３０を含むシステム２００の別の実施形態を示す。記憶媒体１４０は、その各々が１つ以上の記憶配列１１５Ａ〜Ｎを含むことができる、複数の独立したバンク１１９Ａ〜Ｎを含んでもよい。各々の独立したバンク１１９Ａ〜Ｎは、インターコネクト１２７を介して記憶コントローラ１３９に結合されてもよい。
【００４６】
記憶コントローラ１３９は、バス１２７を介して記憶層１３０から記憶要求を受信するように構成された記憶要求受信機モジュール２３１を含んでもよい。記憶要求受信機２３１はさらに、記憶層１３０および／または記憶クライアント１０６に／からデータを転送するように構成されてもよい。したがって、記憶要求受信機モジュール２３１は、１つ以上のダイレクトメモリアクセス（ＤＭＡ）モジュール、リモートＤＭＡモジュール、バスコントローラ、ブリッジ、およびバッファなどを含んでもよい。
【００４７】
記憶コントローラ１３９は、要求モジュール２３１を介して受信された要求に応答して、記憶媒体１４０にデータを記憶するように構成された書き込みモジュール２４０を含んでもよい。記憶要求は、要求に関連するデータの論理インタフェースを含んでもよく、および／またはそれを参照してもよい。書き込みモジュール２４０は、自己記述的記憶ログにデータを記憶するように構成されてもよく、それは、上記開示されるように、記憶媒体１４０の記憶アドレス空間１４４内で連続してデータパケット１１０を追加することを含むことができる。データパケット１１０は、データの論理インタフェースを含んでもよく、および／またはそれを参照してもよい（例えば、データと関連付けられたＬＩＤを含んでもよい）。書き込みモジュール２４０は、記憶のためにデータを処理するように構成された書き込み処理モジュール２４２を含んでもよい。記憶のためにデータを処理することは、ａ）圧縮処理、ｂ）暗号化処理、ｃ）それぞれのデータパケット１１０（および／または他のコンテナ）へのカプセル化処理、およびｄ）誤り訂正コード（ＥＣＣ）処理の実行などのうちの１つ以上を含んでもよい。書き込みバッファ２４４は、記憶媒体１４０上での記憶のためにデータをバッファリングするように構成されてもよい。一部の実施形態では、書き込みバッファ２４４は、記憶コントローラ１３９のクロック領域を記憶媒体１４０（および／またはインターコネクト１２７）のクロック領域と同期するように構成された１つ以上の同期バッファを含んでもよい。
【００４８】
ログ記憶モジュール１３６は、データ記憶動作に対する記憶位置を選択するように構成されてもよく、ならびにアドレス指定情報および／または制御情報を、独立バンク１１９Ａ〜Ｎの記憶配列１１５Ａ〜Ｎに提供してもよい。本明細書で開示されるように、ログ記憶モジュール１３６は、記憶媒体１４０の記憶アドレス空間１４４内で、ログフォーマットで連続してデータを付加するように構成されてもよい。
【００４９】
データを書き込む記憶動作は、ａ）記憶媒体１４０上で１つ以上のデータパケットを記憶ログに付加すること、およびｂ）データのＬＩＤを１つ以上のデータパケットの記憶アドレスと関連付けるように記憶メタデータ１３５を更新することを含んでもよい。一部の実施形態では、記憶メタデータ１３５は、記憶コントローラ１３９のメモリリソース上で（例えば、記憶媒体１４０を含む記憶装置１４１の専用揮発性メモリリソース上で）維持されてもよい。代わりに、または加えて、記憶メタデータ１３５の一部は、記憶層１３０内で（例えば、図１Ａのコンピューティングデバイス１１０の揮発性メモリ１１２上で）維持されてもよい。一部の実施形態では、記憶メタデータ１３５は、記憶層１３０によって揮発性メモリにおいて維持されてもよく、および記憶媒体１４０に周期的に記憶されてもよい。
【００５０】
記憶コントローラ１３９はさらに、記憶要求受信機モジュール２３１を介して受信された要求に応答して、記憶媒体１４０上で記憶ログからデータを読み出すように構成されたデータ読み出しモジュール２４１を含んでもよい。要求は、要求されたデータのＬＩＤおよび／または要求されたデータの記憶アドレスなどを含んでもよい。読み出しモジュール２４１は、ａ）とりわけ、フォワードマッピング１６０の使用によって、要求されたデータを含むデータパケット１１０の記憶アドレスを判定し、ｂ）記憶媒体１４０上で判定された記憶アドレスからデータパケット１１０を読み出し、および要求エンティティによって使用するためのデータを処理する、ように構成されてもよい。記憶媒体１４０から読み出されたデータは、読み出しバッファ２４５を介して読み出しモジュール２４１にストリーミングされてもよい。読み出しバッファ２４５は、上記説明されたように、クロック領域同期のための１つ以上の読み出し同期バッファを含んでもよい。読み出し処理モジュール２４３は、ａ）復元処理、ｂ）復号化処理、ｃ）１つ以上のデータパケット１１０（および／または他のコンテナ）からのデータの抽出、ならびにｄ）ＥＣＣ処理の実行、のうちの１つ以上を含むことができるがそれらに限定されない、記憶媒体１４４から読み出されたデータを処理するように構成されてもよい。
【００５１】
記憶コントローラ１３９はさらに、特定の独立バンク１１９Ａ〜Ｎに／から、データ、ならびに／または書き込みモジュール２４０および／もしくは読み出しモジュール２４１のコマンドを選択的にルーティングするように構成されたバンクコントローラ２５２を含んでもよい。一部の実施形態では、記憶コントローラ１３９は、独立バンク１１９Ａ〜Ｎの間で記憶動作をインタリーブするように構成される。記憶コントローラ１３９は、例えば、書き込みモジュール２４０からのデータがバンク１１９Ｂの記憶配列１１５Ｂにプログラミンングされている間に、バンク１１９Ａの記憶配列１１５Ａから読み出しモジュール２４１に読み出してもよい。マルチバンク記憶動作のさらなる実施形態は、参照によって権明細書に組み込まれる、Ｄａｖｉｄ  Ｆｌｙｎｎらによる２００６年１２月１２日に出願された「Ａｐｐａｒａｔｕｓ，Ｓｙｓｔｅｍ，ａｎｄ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｍａｎａｇｉｎｇ  Ｃｏｍｍａｎｄｓ  ｆｏｒ  Ｓｏｌｉｄ−Ｓｔａｔｅ  Ｓｔｏｒａｇｅ  Ｕｓｉｎｇ  Ｂａｎｋ  Ｉｎｔｅｒｌｅａｖｅ」と題する米国特許出願第１１／９５２，０９５号明細書で開示されている。
【００５２】
書き込み処理モジュール２４２は、データパケット１１０をＥＣＣコードワードにエンコードするように構成されてもよい。本明細書で使用されるように、ＥＣＣコードワードは、データ、ならびに対応する誤り検出および／または訂正情報を指す。書き込み処理モジュール２４２は、任意の適切なＥＣＣアルゴリズムを実装し、かつ／あるいはデータセグメント、対応するＥＣＣシンドローム、ＥＣＣシンボル、ＥＣＣチャンク、ならびに／または他の構造化され、もしくは構造化されていないＥＣＣ情報を含むことができるがそれらに限定されない、任意の適切なタイプのＥＣＣコードワードを生成するように構成されてもよい。ＥＣＣコードワードは、ブロックＥＣＣエンコーディング、畳み込みＥＣＣエンコーディング、低密度パリティチェック（ＬＤＰＣ）エンコーディング、Ｇａｌｌａｇｅｒエンコーディング、リードソロモンエンコーディング、ハミングコード、多次元パリティエンコーディング、サイクリック誤り訂正コード、および／またはＢＣＨコードなどを含むがそれらに限定されない、任意の適切な誤り訂正エンコーディングを含んでもよい。書き込み処理モジュール２４２は、予め定められたサイズのＥＣＣコードワードを生成するように構成されてもよい。したがって、単一のパケットは、複数の異なるＥＣＣコードワードにエンコードされてもよく、および／または単一のＥＣＣコードワードは、２つ以上のパケットの一部を含んでもよい。代わりに、書き込み処理モジュール２４２は、任意のサイズのＥＣＣコードワードを生成するように構成されてもよい。誤り訂正コード処理のさらなる実施形態は、参照によって本明細書に組み込まれる、Ｊｅｒｅｍｙ  Ｆｉｌｌｉｎｇｉｍらによる２０１３年３月１４日に出願された「Ｓｙｓｔｅｍｓ  ａｎｄ  Ｍｅｔｈｏｄｓ  ｆｏｒ  Ａｄａｐｔｉｖｅ  Ｅｒｒｏｒ−Ｃｏｒｒｅｃｔｉｏｎ  Ｃｏｄｉｎｇ」と題する米国特許出願第１３／８３０，６５２号明細書で開示されている。
【００５３】
一部の実施形態では、記憶層１３０は、高レベルの記憶動作を効率的に実装するために論理アドレス空間１３２を利用する。記憶層１３０は、「複製」または「論理複製」動作を実装するように構成されてもよい。本明細書で使用されるように、「複製」または「論理複製」は、記憶層１３０によって管理されたデータを効率的に複製または再現する動作を指す。複製動作は、「元の」ＬＩＤの組と同一のデータに対応する「複製された」ＬＩＤの組を生成することを含んでもよい。したがって、複製動作は、２つ（またはそれ以上の）異なる論理インタフェース（例えば、異なるＬＩＤの組）を使用して同一の組の記憶位置を参照することを含んでもよい。したがって、複製動作は、記憶媒体１４０に記憶された１つ以上のデータパケット１１０の論理インタフェースを修正してもよい。「論理移動」は、記憶層１３０によって管理されるデータの論理インタフェースを修正する動作を指してもよい。論理移動動作は、記憶媒体１４０に記憶されたデータを参照するのに使用されるＬＩＤを変更することを含んでもよい。「結合（ｍｅｒｇｅ）」動作は、論理アドレス空間１３２の異なる部分を結合することを含んでもよい。本明細書でさらに詳細に開示されるように、複製および／または移動動作は、重複排除、スナップショット、論理複製、原子的動作、および／またはトランザクションなどのより高レベルの記憶動作を効率的に実装するために使用されてもよい。複製および他の論理操作の動作のためのシステムおよび方法の実施形態は、参照によってその各々が組み込まれる、Ｄａｖｉｄ  Ｆｌｙｎｎらによる２０１２年３月１９日に出願された「Ｌｏｇｉｃａｌ  Ｉｎｔｅｒｆａｃｅｓ  ｆｏｒ  Ｃｏｎｔｅｘｔｕａｌ  Ｓｔｏｒａｇｅ」、２０１１年３月１８日に出願された「Ｖｉｒｔｕａｌ  Ｓｔｏｒａｇｅ  Ｌａｙｅｒ  Ｓｕｐｐｏｒｔｉｎｇ  Ｏｐｅｒａｔｉｏｎｓ  Ｏｒｄｅｒｉｎｇ，ａ  Ｖｉｒｔｕａｌ  Ａｄｄｒｅｓｓ  Ｓｐａｃｅ，Ａｔｏｍｉｃ  Ｏｐｅｒａｔｉｏｎｓ，ａｎｄ  Ｍｅｔａｄａｔａ  Ｄｉｓｃｏｖｅｒｙ」と題する米国仮特許出願第６１／６３７，１６５号明細書、Ｄａｖｉｄ  Ｆｌｙｎｎらによる２０１２年４月１７日に出願された「Ｓｙｓｔｅｍｓ，Ｍｅｔｈｏｄｓ，ａｎｄ  Ｉｎｔｅｒｆａｃｅｓ  ｆｏｒ  Ｍａｎａｇｉｎｇ  ａ  Ｌｏｇｉｃａｌ  Ａｄｄｒｅｓｓ  Ｓｐａｃｅ」と題する米国仮特許出願第６１／６２５，６４７号明細書、および２０１２年４月２３日に出願されたＤａｖｉｄ  Ｆｌｙｎｎらによる「Ｓｙｓｔｅｍｓ，Ｍｅｔｈｏｄｓ，ａｎｄ  Ｉｎｔｅｒｆａｃｅｓ  ｆｏｒ  Ｍａｎａｇｉｎｇ  ａ  Ｌｏｇｉｃａｌ  Ａｄｄｒｅｓｓ  Ｓｐａｃｅ」と題する米国仮特許出願第６１／６３７，１６５号明細書で開示されている。
【００５４】
図３Ａを参照して、記憶層１３０は、複製動作、移動動作、および結合動作などの、記憶層１３０によって管理されるデータに関連する論理インタフェース動作を管理するように構成された論理インタフェース管理モジュール３３４を含んでもよい。ＬＩＤを複製することは、とりわけ、ＬＩＤの２つ以上の異なる組の使用によってデータが参照されることを可能にするために、記憶媒体１４０に記憶されたデータの論理インタフェースを修正することを含んでもよい。したがって、複製を生成することは、ａ）論理アドレス空間１３２（またはその専用部分）においてＬＩＤの組を割り当てること、およびｂ）とりわけ、記憶メタデータ１３５の使用によって、割り当てられたＬＩＤを、ＬＩＤの「元の」組と同一の記憶位置と関連付けることを含んでもよい。したがって、複製を生成することは、複製されたＬＩＤの新たな組を記憶位置の特定の組と関連付けるように構成されたフォワードマッピング１６０に１つ以上のエントリを追加することを含んでもよい。
【００５５】
論理インタフェース管理モジュール３３４は、複製同期ポリシに従って、複製動作を実装するように構成されてもよい。複製同期ポリシは、複数の複製またはコピーのうちの最初の１つを参照して実行される動作がどのように他の複製またはコピーに反映（ｐｒｏｐａｇａｔｅｄ  ｔｏ）されるかを判定するために使用されてもよい。例えば、複製は、割り当て動作に関して同期されてもよく、それによって、複製のうちの１つを拡張する要求が、他の複製を拡張することを含むようになる。本明細書で使用されるように、ファイル（または他のデータセグメント）を拡張することは、１つ以上の論理識別子を複製に追加すること、複製および／またはコピーに割り当てられた論理識別子のうちの１つ以上を修正することなど、を含むことができる、ファイルのサイズ、範囲（ｒａｎｇｅ）、および／または範囲（ｅｘｔｅｎｔ）を増大させることを指す。複製同期ポリシは、とりわけ、複製が結合および／または組み合わせ（ｆｏｌｄ）動作（以下でさらに詳細に開示される）で組み合わされるときに、複製の間の差異がどのように管理されるかを判定することができる、結合ポリシを含んでもよい。
【００５６】
図３Ａは、記憶層１３０によって実装される領域複製動作の一実施形態を示す。図３Ａの領域複製動作は、記憶クライアント１０６からの要求に応答して実装されてもよい。一部の実施形態では、記憶層１３０のインタフェース１３１は、複製動作を実行するためのインタフェースおよび／またはＡＰＩを提供するように構成されてもよい。代わりに、または加えて、領域複製動作は、原子的動作、トランザクション、スナップショット、論理複製、および／またはファイル管理動作などの、より高レベルの動作の一部として実行されてもよい。
【００５７】
図３Ａに示されるように、記憶層１３０のフォワードマッピング１６０は、ＬＩＤ１０２４〜２０４８を媒体記憶位置３４５３〜４４７７に結び付ける（ｂｉｎｄ）ように構成されたエントリ３６２を含む。示される実施形態の詳細を曖昧にすることを回避するために、他のエントリが図３Ａから省略される。本明細書で開示されるように、エントリ３６２、およびその結び付けは、論理インタフェース３１１Ａを定義することができ、それを通じて、記憶クライアント１０６は、対応するデータ（例えば、データセグメント３１２）を参照し、記憶クライアント１０６は、ＬＩＤ１０２４〜２０４８の使用を通じてデータセグメント３１２（および／またはその一部）にアクセスおよび／または参照することができる。したがって、ＬＩＤ１０２４〜２０４８は、とりわけ、データセグメント３１２の論理インタフェース３１１Ａを定義する。
【００５８】
本明細書で開示されるように、記憶層１３０は、記憶媒体１４０にコンテキストフォーマットでデータを記憶するように構成されてもよい（例えば、パケットフォーマット１１０）。図３Ａの実施形態では、記憶位置３４５３〜４４２７におけるデータパケット３１０は、データセグメント３１２を含む。データパケット３１０はさらに、データセグメント３１２の論理インタフェースを示す永続的メタデータ３１４（例えば、データセグメント３１２をＬＩＤ１０２４〜２０４８と関連付ける）を含む。上記開示されるように、記述的（ｄｅｓｃｒｉｐｔｉｖｅ）な、永続的メタデータと関連してデータを記憶することによって、記憶層１３０が記憶ログの内容からフォワードマッピング１６０（および／または他の記憶メタデータ１３５）を再構築することが可能になる。図３Ａの実施形態では、エントリ３６２は、記憶アドレス３４５３〜４４７７に記憶されたデータを、パケット３１０の永続的メタデータ３１４によって参照されるＬＩＤ１０２４〜２０４８と関連付けることによって、再構築されてもよい。図３Ａは単一のパケット３１０を示しているが、開示はこの点に限定されない。一部の実施形態では、エントリ３６２のデータは、各々がそれぞれの永続的メタデータ３１４を含む複数の、異なるパケット３１０（例えば、各々の記憶位置に対する別個のパケットなど）に記憶されてもよい。
【００５９】
論理インタフェース管理モジュール３３４は、とりわけ、複製されることになる元のＬＩＤに対応するＬＩＤの新たな組を割り当て、および新たなＬＩＤを、元の、ソースＬＩＤの記憶位置に結び付けることによって、エントリ３６２を複製するように構成されてもよい。図３Ｂに示されるように、ＬＩＤ１０２４〜２０４８の複製を生成することは、ＬＩＤ６１４４〜７１６８の同様の組を割り当て、および識別子の複製された組を記憶アドレス３４５３〜４４７７に結び付ける、論理インタフェース管理モジュール３３４を含んでもよい。したがって、複製を生成することは、記憶媒体１４０上で複製および／または再現されることになる内在するデータセグメント３１２を必要とせずに、ＬＩＤ６１４４〜７１６８を含めるためにデータセグメント３１２のインタフェース３１１Ｂを拡張するように記憶メタデータ１３５を修正することを含んでもよい。
【００６０】
データセグメント３１２の修正された論理インタフェース３１１Ｂは、記憶位置３４５３〜４４７７に記憶された対応するデータパケット３１０のコンテキストフォーマットと一致しないことがある。上記開示されるように、データパケット３１０の永続的メタデータ３１４は、ＬＩＤ１０２４〜２０４８を参照するが、複製されたＬＩＤ６１４４〜７１６８を含まず、および／またはそれらを参照しない。データセグメント３１２のコンテキストフォーマットは、修正された論理インタフェース３１１Ｂと一致するように更新されてもよく（例えば、データを、ＬＩＤ１０２４〜２０４８のみとは反対に、ＬＩＤ１０２４〜２０４８および６１４４〜７１６８と関連付けるように更新される）、それは、データセグメントをＬＩＤの両方の組に関連付けるパケットフォーマットでデータセグメントを再書き込みすることを含むことができる。記憶装置１４１が、ランダムアクセス、ライトインプレース（ｗｒｉｔｅ−ｉｎ−ｐｌａｃｅ）記憶装置である場合、永続的メタデータ３１４は、適切に更新されてもよい。追記型、非対称記憶媒体１４０を含む他の実施形態では、そのような適切な更新が非効率であることがある。したがって、記憶層１３０は、記憶復元および／または移動などの（媒体管理モジュール３７０による）、媒体管理動作でデータが移動されるまで、一致しないコンテキストフォーマットでデータを維持するように構成されてもよい。データセグメント３１２のコンテキストフォーマットを更新することは、時間を要する処理であり、および特にデータセグメント３１２が大きく、および／または複製が大多数のＬＩＤを含む場合に非効率となることがある、記憶媒体１４０上でデータセグメント３１２を移動および／または再書き込みすることを含んでもよい。したがって、一部の実施形態では、記憶層１３０は、複製されたデータセグメント３１２のコンテキストフォーマットを更新することを延期（ｄｅｆｅｒ）してもよく、および／または１つ以上のバックグランド動作でコンテキストフォーマットを更新してもよい。その間に、記憶層１３０は、一致しないコンテキストフォーマット（データパケット３１０）で記憶されている間にデータセグメント３１２へのアクセスを提供するように構成されてもよい。
【００６１】
記憶層１３０は、対応するデータセグメント３１２のコンテキストフォーマットが更新される前に、複製動作の完了を確認応答するように構成されてもよい。その後、データは、記憶媒体１４０上で更新されたコンテキストフォーマットで再書き込み（例えば、移動）されてもよい。更新は、複製動作および／または他のフォアグラウンドの記憶動作の「クリティカルパス」の外で行われてもよい。一部の実施形態では、データセグメント３１２は、記憶復元処理および／またはデータレフレッシュ動作などのうちの１つ以上の一部として媒体管理モジュール３７０によって移動される。したがって、記憶クライアント１０６は、修正された論理インタフェース３１１Ｂに従ってデータセグメント３１２のコンテキストフォーマットが更新されることを待つことなく、修正された論理インタフェース３１１Ｂ（例えば、ＬＩＤ１０２４〜２０４８および／または６１４４〜７１６８を参照して）を通じてデータセグメント３１２にアクセスすることが可能であってもよい。
【００６２】
データセグメント３１２のコンテキストフォーマットが記憶媒体１４０上で更新されるまで、データセグメント３１２の修正された論理インタフェース３１１Ｂは、記憶メタデータ１３５（例えば、マッピング１６０）にのみ存在することがある。したがって、とりわけ、電力故障またはデータ破損に起因してフォワードマッピング１６０が消失する場合、複製動作は再構築された記憶メタデータ１３５において反映されないことがある（複製動作は、永続的でなく、および／またはクラッシュセーフでないことがある）。上記示されたように、データパケット３１０の永続的メタデータ３１４は、データセグメント３１２がＬＩＤ６１４４〜７１６８ではなく、１０２４〜２０４８のみと関連付けられることを示す。したがって、エントリ３６２のみが再構築され（図３Ａにあるように）、およびエントリ３６４が省略され、結果として、修正された論理インタフェース３１１Ｂを通じて（例えば、６１４４〜７１６８を通じて）データセグメント３１２にアクセスする後続の試みは失敗することがある。
【００６３】
一部の実施形態では、複製動作はさらに、複製動作を永続的および／またはクラッシュセーフにするために、記憶媒体１４０に永続的記号を記憶することを含んでもよい。本明細書で使用されるように、「永続的記号」は、記憶媒体１４０に記憶されたメタデータを指す。永続的記号３６６は、本明細書で開示されるように、ログ順序に対応してもよく、および／またはパケットフォーマットで記憶されてもよい。永続的記号３６６は、データセグメント３１２の修正された論理インタフェース３１１Ｂのインジケーションを含んでもよい。図３Ｂの実施形態では、示された複製動作に対応する永続的記号３６６は、記憶アドレス３４５３〜４４７７に記憶されたデータを、ＬＩＤ１０２４〜２０４８および６１４４〜７１６８の両方の範囲と関連付けるように構成されてもよい。記憶媒体１４０の内容からのフォワードマッピング１６０の再構築の間、永続的記号３６６は、エントリ３６２および３６４の両方を再構築してデータセグメント３１２を、更新された論理インタフェース３１１Ｂの両方のＬＩＤ範囲と関連付けるために使用されてもよい。一部の実施形態では、記憶層１３０は、記憶メタデータ１３５を更新し（例えば、エントリ３６４を生成する）、および記憶媒体１４０に永続的記号３６６を記憶したことに応答して、複製動作の完了を確認応答してもよい。永続的記号３６６は、更新された論理インタフェース３１１Ｂと一致することになるデータセグメント３１２のコンテキストフォーマットを更新したことに応答して（例えば、上記開示されたように、データセグメント３１２を移動および／または再書き込みする）、記憶媒体１４０からの削除に対して無効化および／またはマーク付けされてもよい。
【００６４】
一部の実施形態では、データセグメント３１２の更新されたコンテキストフォーマットは、データセグメント３１２を、両方のＬＩＤ範囲１０２４〜２０４８および６１４４〜７１６８と関連付けることを含んでもよい。図３Ｃは、データセグメント３１２に対する更新されたコンテキストフォーマット（データパケット３２０）の一実施形態を示す。図３Ｃに示されるように、データパケット３２０の永続的メタデータ３２４は、データセグメント３１２を、更新された論理インタフェース３１１Ｂの両方のＬＩＤ範囲１０２４〜２０４８および６１４４〜７１６８と関連付ける。データパケット３２０は、フォワードマッピング１６０の更新されたエントリ３６２および３６４において反映することができる、元のデータパケット３１０とは異なる記憶アドレス（６４４３２〜６５４５６）において、不適切に書き込まれてもよい。データパケット３２０を記憶ログに付加したことに応答して、対応する永続的記号３６６（存在する場合）が無効化されてもよい（記憶媒体１４０からの後続の削除に対して削除および／またはマーク付けされる）。一部の実施形態では、永続的記号３６６を削除することは、永続的記号３６６が記憶媒体１４０上でもはや保持される必要がないことを示す１つ以上のトリムメッセージを発行することを含んでもよい。代わりに、または加えて、フォワードマッピング１６０の一部は、永続的、クラッシュセーフな記憶位置（例えば、非一時的記憶リソース１０３および／または記憶媒体１４０）に記憶されてもよい。フォワードマッピング１６０（例えば、エントリ３６２および３６４）を持続（ｐｅｒｓｉｓｔ）させたことに応答して、上記開示されるように、データセグメント３１２が更新されたコンテキストフォーマットでいまだに再書き込みされていない場合でさえ、永続的記号３６６が無効化されてもよい。
【００６５】
論理インタフェース管理モジュール３３４は、「コピーオンライトモード」を含む１つ以上の異なるモードに従って複製動作を実装するように構成されてもよい。図３Ｄは、コピーオンライトモードにおける複製される範囲内で実行される記憶動作の一実施形態を示す。コピーオンライトモードでは、複製を生成した後に行われる記憶動作によって、複製が相互に分岐することがある（例えば、エントリ３６２および３６４が異なる記憶アドレス、範囲（ｒａｎｇｅ）および／または範囲（ｅｘｔｅｎｔ）を参照することができる）。図３Ｄの実施形態では、記憶層１３０は、データセグメント３１２を両方のＬＩＤ範囲１０２４〜２０４８および６１４４〜７１６８（図３Ｃに示されるように）と関連付けるように構成された、更新されたコンテキストデータフォーマット（パケット３２０）でデータセグメント３１２を書き込んでいる。次いで、記憶クライアント１０６は、ＬＩＤ６６５７〜７１６８に対応するデータを修正および／または上書きする１つ以上の記憶要求を発行してもよい。図３Ｄの実施形態では、記憶要求は、ＬＩＤ６６５７〜７１６８のデータを修正および上書きすることを含む。それに応答して、記憶層１３０は、記憶媒体１３０に、新たなデータおよび／または修正されたデータを記憶してもよく、それは、上記開示されたように、記憶ログに新たなデータパケット３４０を付加することを含むことができる。データパケット３４０は、データセグメント３４２をＬＩＤ６６５７〜７４２４に関連付けてもよい（例えば、パケット３４０の永続的メタデータ３４４の使用によって）。フォワードマッピング１６０は、データセグメント３４２にＬＩＤ６６５７〜７４２４を関連付けるように更新されてもよく、それは、データセグメント３１２、および記憶アドレス７８５１２〜７９０２４に記憶された新たなデータセグメント３４２を参照するエントリ３６７におけるデータの修正されていない部分を参照することを継続するように構成されたエントリ３６５にエントリ３６４を分割することを含むことができる。図３Ｄに示されるコピーオンライトモードでは、ＬＩＤ１０２４〜２０４８に対応するエントリ３６２は、変更されなくてもよく、および記憶アドレス６４４３２〜６５４５６においてデータセグメント３１２を参照することを継続してもよい。図３Ｄには示されていないが、範囲１０２４〜２０４８内での修正は、エントリ３６２に影響を与える、同様に分岐する変更（ｄｉｖｅｒｇｉｎｇ  ｃｈａｎｇｅｓ）をもたらすことがある。さらに、記憶要求は、データを修正および／または上書きすることに限定されない。他の動作は、ＬＩＤの組を拡張すること（データを付加する）、ならびに／またはＬＩＤを削除すること（データを削除、切り捨て、および／もしくは切り取る）などを含んでもよい。
【００６６】
一部の実施形態では、記憶層１３０は、「同期化複製」モードなどの他の複製モードをサポートすることができる。同期化複製モードでは、ＬＩＤの複製された範囲内でなされる変更は、１つ以上の他の、対応する範囲において反映されてもよい。図３Ｄの実施形態では、「同期化複製」モードにおける説明された記憶動作を実装することは、新たなデータセグメント３４２を参照するようにエントリ３６２を更新することを含んでもよく、それは、本明細書で開示されるように、とりわけ、ＬＩＤ１０２４〜１５３６を元のデータセグメント３１２の部分と関連付けるように構成されたエントリにエントリ３６２を分割すること、およびＬＩＤ１５３７〜２０４８を新たなデータセグメント３４２と関連付けるように構成されたエントリを追加することを含むことができる。
【００６７】
図３Ｄのコピーオンライトの実施形態を再度参照して、論理インタフェース管理モジュール３３４はさらに、複製結合動作を管理するように構成されてもよい。本明細書で使用されるように、「結合」または「複製結合」は、ＬＩＤの２つ以上の異なる組および／または範囲を組み合わせる動作を指す。図３Ｄの実施形態では、領域結合動作は、エントリ３６２を、対応する複製エントリ３６５および３６７と結合することを含んでもよい。論理インタフェース管理モジュール３３４は、より最新の変更が前の変更に優先する書き込み順序ポリシ、記憶動作の相対的優先度に基づく（例えば、記憶動作と関連付けられた記憶クライアント１０６、アプリケーション、および／もしくはユーザの特性に基づく）優先度に基づくポリシ、完了インジケータ（例えば、原子的記憶動作の完了、または原子的記憶動作の失敗など）、ｆａｄｖｉｓｅパラメータ、ならびに／またはｉｏｃｔｒｌパラメータなどの、結合ポリシに従って領域結合動作を実装するように構成されてもよい。
【００６８】
図３Ｅは、領域結合動作の一実施形態を示す。図３Ｅの領域結合動作は、範囲６１４４〜６６５６を範囲１０２４〜２０４８に結合することを含んでもよい。したがって、領域結合動作は、結合ポリシに従って、ＬＩＤ範囲６１４４〜６６５６内でなされる変更を、ＬＩＤ範囲１０２４〜２０４８に選択的に適用することを含んでもよい。したがって、領域結合動作は、ＬＩＤ１５３７〜２０４８を、新たな／修正されたデータセグメント３４２を含む記憶アドレス７８５１２〜７９０２４と関連付けるようにＬＩＤ範囲１０２４〜２０４８を更新することを含んでもよい。更新は、フォワードマッピング１６０におけるエントリ３６２を分割することを含んでもよく、エントリ３７２は、ＬＩＤ１０２４〜１５３６を元のデータセグメント３１２の部分と関連付けるように構成されてもよく、およびエントリ３７３は、ＬＩＤ１５３７〜２０４８を新たなデータセグメント３４２と関連付けるように構成されてもよい。ＬＩＤ１５３７〜２０４８によってもはや参照されないデータセグメント３１２の部分は、本明細書で開示されるように無効化されてもよい。元の、ソース範囲に結合されたＬＩＤ範囲６１４４〜７１６８は、フォワードマッピング１６０から割り当て解除および／または削除されてもよい。
【００６９】
図３Ｅに示される領域結合動作は、データの一部への論理インタフェース３１１Ｃを修正することをもたらすことがある。データセグメント３４２（データパケット３４０）のコンテキストフォーマットは、データセグメント３４２を、結合されたＬＩＤ１５３７〜２０４８ではなく、ＬＩＤ６６５７〜７１６８と関連付けてもよい。上記開示されるように、記憶層１３０は、一致しないコンテキストフォーマットで記憶されたデータセグメント３４２へのアクセスを提供することができる。記憶層１３０は、データセグメント３４２が１つ以上のバックグラウンド動作（例えば、記憶復元動作）でＬＩＤ１５３７〜２０４８と関連付けられる、更新されたコンテキストフォーマットでデータセグメント３４２を記憶するように構成されてもよい。一部の実施形態では、領域結合動作はさらに、データセグメント３４２を更新された論理インタフェース３１１Ｃと関連付けるために（例えば、記憶アドレス７８５１２〜７９０２４におけるデータセグメント３４２を、ＬＩＤ１５３７〜２０４８と関連付ける）、記憶媒体１４０に永続的記号３６６を記憶することを含んでもよい。上記開示されるように、永続的記号３６６は、領域結合動作が永続的であり、およびクラッシュセーフであることを保証するために使用されてもよい。永続的記号３６６は、論理インタフェース３１１Ｃと一致したコンテキストフォーマットでデータセグメント３４２を移動し（例えば、データセグメント３４２をＬＩＤ１５３７〜２０４８と関連付ける）、および／またはフォワードマッピング１６０を持続させるなどに応答して、削除されてもよい。
【００７０】
図３Ａ〜Ｅと共に開示された複製動作は、領域移動動作などの他の論理動作を実装するために使用されてもよい。図３Ａ〜Ｃを再度参照すると、フォワードマッピング１６０のエントリ３６２を再現する複製動作は、データセグメント３１２をＬＩＤ１０２４〜２０４８の元の組および複製されたＬＩＤ６１４４〜７１６８（エントリ３６４の）の新たな組の両方を関連付けるように、データセグメント３１２と関連付けられた論理インタフェースを修正することを含んでもよい。複製動作はさらに、データセグメント３１２の更新された論理インタフェース３１１Ｂを示す永続的記号３６６を記憶すること、および／または１つ以上のバックグラウンド記憶動作で、更新された論理インタフェース３１１Ｂと関連してデータセグメント３１２を再書き込みすることを含んでもよい。
【００７１】
論理インタフェース管理モジュール３３４はさらに、「領域移動」動作を実装するように構成されてもよい。本明細書で使用されるように、「領域移動」動作は、データセグメントをＬＩＤの異なる組と関連付けるように１つ以上のデータセグメントの論理インタフェースを修正することを指す。したがって、領域移動動作は、本明細書で開示されるように、１つ以上のデータセグメントを更新された論理インタフェースと関連付けるように記憶メタデータ１３５（例えば、フォワードマッピング１６０）を更新すること、データセグメントの更新された論理インタフェースを示す永続的記号３６６を記憶媒体１４０に記憶すること、および更新された論理インタフェースと一致したコンテキストフォーマット（パケットフォーマット３１０）でデータセグメントを再書き込みすることを含んでもよい。したがって、記憶層１３０は、同一の機構を使用した領域移動動作、および／または図３Ａ〜Ｅと共に上記開示された処理ステップを実装してもよい。
【００７２】
図３Ａ〜Ｅで開示された複製および／または領域移動動作は、記憶層１３０上で或る制限を課してもよい。上記開示されるように、コンテキストフォーマットにデータを記憶することは、データを参照する各々のＬＩＤとデータを関連付けることを含んでもよい。図３Ｃの実施形態では、永続的メタデータ３２４は、両方のＬＩＤ範囲１０２４〜２０４８および６１４４〜７１６８への参照を含む。したがって、データセグメントへの参照の数を増加させることは、それに対応してコンテキストデータフォーマットのオーバーヘッドが増加することになり得る（例えば、永続的メタデータ３２４のサイズが増加する）。一部の実施形態では、永続的メタデータ３１４のサイズが制限されることがあり、それは、参照、および／または特定のデータセグメント３１２を参照することができる複製の数を制限することがある。さらに、異なるＬＩＤへの複数の参照を含めることは、記憶復元動作を複雑にすることがある。データセグメント３１２が移動されるときに更新される必要があるフォワードマッピングエントリの数は、データセグメント３１２を参照するＬＩＤの数に従って変わることがある。図３Ｃを再度参照すると、調整（ｇｒｏｏｍｉｎｇ）動作および／または記憶復元動作においてデータセグメント３１２を移動することは、２つの別個のエントリ３６２および３６４を更新することを含んでもよい。Ｎ個の異なるＬＩＤ（例えば、Ｎ個の異なる複製）によって参照されるデータセグメントを移動することは、フォワードマッピング１６０においてＮ個の異なるエントリを更新することを含んでもよい。同様に、データセグメントを記憶することは、Ｎ個のエントリを永続的メタデータ３１４に書き込むことを含んでもよい。この可変オーバーヘッドは、バックグラウンド記憶復元動作の性能を低下させることがあり、ならびにサポートすることができる同時複製および／または参照の数を制限することがある。
【００７３】
一部の実施形態では、論理インタフェース管理モジュール３３４は、複製動作によって課されるオーバーヘッドを低減させるための中間マッピング層を含んでもよく、および／またはそれを利用してもよい。中間マッピング層は、効率的な複製動作（本明細書でさらに詳細に開示される他の動作をも）を促進するように構成された「参照エントリ」を含んでもよい。本明細書で使用されるように、「参照エントリ」は、フォワードマッピング１６０（および／または他の記憶メタデータ１３５）内で他のエントリを参照するために使用されるマッピングデータ構造のエントリを指す。参照エントリは、それが論理アドレス空間１３２内で１つ以上の他のエントリによって参照される間にのみ存在してもよい。一部の実施形態では、参照エントリは、記憶クライアント１０６にアクセス可能でなくてもよく、および／または不変（ｉｍｍｕｔａｂｌｅ）であってもよい。記憶層１３０は、記憶クライアントが、単一の参照エントリインタフェースを介して複数の、異なる論理インタフェースを通じてデータの同一の組を参照することを可能にする参照エントリを利用してもよい。記憶媒体１４０上のデータ（複数のＬＩＤによって参照されるデータ）のコンテキストフォーマットは、データを参照エントリと関連付け、次いで、参照エントリは、他の永続的メタデータ（例えば、永続的記号３６６）を通じてＮ個の他の論理インタフェースと関連付けられるように簡易化されてもよい。したがって、複製データを移動することは、参照エントリとデータセグメントの新たな記憶アドレスとの間の単一のマッピングを更新することを含んでもよい。
【００７４】
図４Ａは、効率的なオープンツークローズ一貫性のためのシステム４００の別の実施形態のブロック図である。システム４００は、中間マッピング層の使用によって領域複製動作を実装するように構成された記憶層１３０を含む。記憶メタデータ１３５は、論理アドレス空間１３２に関連するフォワードマッピング１６０を含んでもよい。上記開示されたように、フォワードマッピング１６０（および／または、他の記憶メタデータ１３５）は、記憶クライアント１０６による論理アドレス空間の割り当てに関連する情報、およびＬＩＤと記憶アドレス空間１４４内の記憶アドレスとの間の結び付けに関連する情報などを含んでもよい。
【００７５】
図４Ａの実施形態では、論理インタフェース管理モジュール３３４は、参照マッピング４６０の使用によって複製動作を管理するように構成された参照モジュール４３４を含んでもよい。参照マッピング４６０は、論理アドレス空間１３２の１つ以上の論理インタフェース（例えば、ＬＩＤのうちの１つ以上の組）によって参照されているデータに対応する参照エントリを含んでもよい。参照モジュール４３４は、有効なデータを参照するのにもはや使用されておらず、および／またはフォワードマッピング１６０内でエントリによってもはや参照されていない参照エントリを削除するように構成されてもよい。図４Ａに示されるように、参照エントリは、フォワードマッピング１６０とは別個に（例えば、別個の参照マッピング４６０において）維持されてもよい。参照エントリは、論理アドレス空間１３２とは別個の名前空間で維持することができる、参照識別子の使用によって識別されてもよい。したがって、参照エントリは、記憶層インタフェース１３１を通じて記憶クライアント１０６に直接アクセス可能な論理アドレス空間１３２とは別個に、かつそれとは異なる中間、「仮想」または「参照」アドレス空間４３２の一部であってもよい。代わりに、一部の実施形態では、参照エントリは、予め定められた範囲から選択されたＬＩＤ、および／または記憶クライアント１０６によって直接アクセス可能でない論理アドレス空間１３２の部分が割り当てられてもよい。
【００７６】
論理インタフェース管理モジュール３３４は、フォワードマッピング１６０における１つ以上のＬＩＤエントリを参照マッピング４６０における参照エントリとリンクさせることによって、複製動作を実装するように構成されてもよい。参照エントリは、複製されたデータの記憶アドレスに結びつけられてもよい（ｂｏｕｎｄ  ｔｏ）。したがって、複製されたデータと関連付けられたＬＩＤは、参照マッピング４６０（例えば、参照エントリ、次いで記憶アドレスにマッピングすることができるＬＩＤ）を間接的に通じて内在するデータを参照してもよい。したがって、複製されたデータに対応するフォワードマッピング１６０におけるエントリは、「間接エントリ」と称されてもよい。本明細書で使用されるように、「間接エントリ」は、参照マッピング４６０における参照エントリを参照し、および／または参照エントリにリンクされる、フォワードマッピング１６０におけるエントリを指す。間接エントリは、論理アドレス空間１３２内でＬＩＤが割り当てられてもよく、および記憶クライアント１０６にアクセス可能であってもよい。
【００７７】
上記開示されるように、ＬＩＤの特定の組を複製した後、記憶クライアント１０６は、複製を相互に分岐させることがある（複製モードに従って）、複製された範囲のうちの１つ以上の中で記憶動作を実行してもよい。「コピーオンライト」モードでは、特定の複製に対してなされる変更は、他の複製される範囲において反映されないことがある。図４Ａの実施形態では、複製に対してなされる変更は、間接エントリと関連付けられた「ローカル」エントリにおいて反映されることがある。本明細書で使用されるように、「ローカルエントリ」は、記憶媒体１４０の１つ以上の記憶アドレスに直接マッピングされる間接エントリの一部を指す。したがって、ローカルエントリは、特定の複製において変更されたデータ、および／または他の複製の内容とは異なるデータを参照するように構成されてもよい。したがって、ローカルエントリは、特定の複製に一意なデータに対応してもよい。
【００７８】
変換モジュール１３４は、とりわけ、参照マッピング４６０および／または参照モジュール４３４の使用によって、複製されたデータと関連付けられたデータにアクセスするように構成されてもよい。変換モジュール１３４は、最初にローカルエントリを辿り（ｔｒａｖｅｒｓｅ）、ターゲットフロント識別子がローカルエントリ内で発見されない場合に、間接エントリがリンクされる参照エントリ内で辿ることを継続することを含むことができる、カスケードルックアップを実装してもよい。
【００７９】
ログ記憶モジュール１３６および媒体管理モジュール３７０は、複製されたデータのコンテキストフォーマットを管理するように構成されてもよい。図４Ａの実施形態では、複製されたデータ（フォワードマッピング１６０内で２つ以上のＬＩＤ範囲によって参照されるデータ）は、データを参照マッピング４６０の１つ以上の参照エントリと関連付けるコンテキストフォーマットで記憶されてもよい。そのような複製されたデータセグメントで記憶された永続的メタデータは、データセグメントと関連付けられた各々のＬＩＤを識別することとは反対に、単一の参照エントリに対応してもよい。したがって、複製を生成することは、上記開示されたように、とりわけ、媒体管理モジュール３７０の使用によって、１つ以上のバックグラウンド動作で複製されたデータのコンテキストフォーマットを更新することを含んでもよい。
【００８０】
図４Ｂは、参照マッピング４６０を使用した複製動作の一実施形態を示す。状態４１３Ａでは、論理アドレス空間１３２におけるＬＩＤ１０の範囲２（図４Ｂで１０、２と表される）に対応するエントリは、記憶媒体１４０上の記憶アドレス２００００におけるデータを直接参照してもよい。開示される実施形態の詳細を曖昧にすることを回避するために、他のエントリは図４Ｂから省略される。状態４１３Ｂでは、記憶層１３０は、範囲１０、２を複製する動作を実装する。範囲１０、２を複製することは、ａ）論理アドレス空間においてＬＩＤの新たな範囲（図４Ｂにおいて４００、２と表される）を割り当てること、およびｂ）それを通じてエントリ１０、２および４００、２が記憶アドレス２００００における複製されたデータを参照することができる参照マッピング４６０（図４Ｂにおいて１０００００、２と表される）において参照エントリを割り当てること、を含んでもよい。複製動作はさらに、状態４１３Ｃで示されるように、エントリ１０、２および４００、２を参照エントリ１０００００、２と関連付けることを含んでもよい。上記開示されるように、エントリ１０、２および４００、２を参照エントリ１０００００、２と関連付けることは、エントリ１０、２および４００、２が間接エントリであることを示すことを含んでもよい。状態４１３Ｃはさらに、参照マッピング４６０において、記憶アドレス２００００におけるデータを参照エントリ１０００００、２と関連付け、ならびに／またはエントリ１０、２および４００、２を参照エントリ１０００００、２と関連付けるために、記憶媒体１４０に永続的記号３６６を記憶することを含んでもよい。
【００８１】
記憶層１３０は、ＬＩＤ１０または４００のいずれかを通じて（参照エントリ１０００００、２を通じて）記憶アドレス２００００におけるデータセグメントへのアクセスを提供してもよい。ＬＩＤ１０または４００に関連する要求に応答して、変換モジュール１３４は、フォワードマッピング１６０における対応するエントリが、参照マッピング４６０におけるエントリと関連付けられた間接エントリであると判定してもよい。これに応答して、参照モジュール４３４は、フォワードマッピング１６０内のローカルエントリ（存在する場合）、および参照マッピング４６０における対応する参照エントリ（例えば、参照エントリ１０００００、２）の使用によって、記憶アドレスを判定するためにカスケードを実行する。
【００８２】
ステップ４１３Ｃにおいて複製を生成することは、データを両方のＬＩＤ範囲１０、２および４００、２を関連付けるように、ステップ２００００において記憶されたデータセグメントの論理インタフェースを修正することを含んでもよい。しかしながら、データのコンテキストフォーマットは、単に、データをＬＩＤ１０、２と関連付けてもよい。上記開示されるように、複製を生成することはさらに、参照エントリ１０００００、２を通じてデータセグメントをＬＩＤ１０、２および４００、２と関連付けるために、記憶媒体１４０に永続的記号３６６を記憶することを含んでもよい。データセグメントは、媒体管理モジュール３７０によって実行される１つ以上のバックグラウンド動作において、更新されたコンテキストフォーマットで再書き込みされてもよい。データは、別個のＬＩＤ範囲１０、２および４００、２とは反対に、データセグメントを参照エントリ１０００００、２と関連付ける永続的メタデータ３１４と共に記憶されてもよい。したがって、データセグメントを移動することは（状態４１３Ｄに示されるように）、データを参照する各々のＬＩＤ範囲に対応する複数のエントリ（例えば、複数のエントリ１０、２および４００、２）とは反対に、参照マッピング４６０において単一のエントリを更新することのみを必要とすることがある。さらに、フォワードマッピング１６０における任意の数のＬＩＤ範囲は、記憶媒体１４０上でデータと関連付けられた永続的メタデータ３１４のサイズを増大させることなく、および／または媒体管理モジュール３７０の動作を複雑にすることなく、データセグメントを参照してもよい。
【００８３】
図４Ｃは、参照エントリを使用して実装される複製動作の別の実施形態を示す。ＬＩＤ１０２４〜２０４８および／またはデータセグメント３１２の複製を生成する要求に応答して、論理インタフェース管理モジュール３３４は、データセグメント３１２を表すように参照マッピング４６０において参照エントリ４８２を割り当てるように構成されてもよい。フォワードマッピング１６０における任意の数のＬＩＤは、データセグメント３１２と関連付けられた永続的メタデータのオーバーヘッドを増大させることなく、および／または媒体管理モジュール３７０の動作を複雑にすることなく、参照エントリ４８２を通じてデータを参照してもよい。図４Ｃに示されるように、参照エントリ４８２は、データセグメント３１２の記憶アドレス（記憶アドレス６４４３２〜６５４５６）に結び付けられてもよい。フォワードマッピング１６０におけるエントリ４６２および４７２は、参照エントリ４８２を間接的に通じて記憶アドレスを参照してもよい（例えば、図４Ｃに示されるように、参照エントリ４８２にリンクされてもよい）。
【００８４】
図４Ｃの実施形態では、参照エントリ４８２は、識別子０Ｚ〜１０２４Ｚが割り当てられる。参照エントリ４８２の識別子は、論理アドレス空間１３２の特定の部分に対応してもよく、または異なる、別個の名前空間に対応してもよい。記憶層１３０は、とりわけ、エントリ４６２および／または４７２と関連付けられたメタデータの使用によって、エントリ４６２および４７２を参照エントリ４８２にリンクしてもよい。代わりに、または加えて、間接エントリ４６２および／または４７２は、記憶アドレスメタデータを参照エントリ４８２への参照および／またはリンクに置き換えてもよい。参照エントリ４８２は、記憶層１３０を介して記憶クライアント１０６によって直接アクセス可能でなくてもよい。
【００８５】
複製動作はさらに、データセグメント３１２の論理インタフェース３１１Ｄを修正することを含んでもよく、修正された論理インタフェース３１１Ｄによって、間接エントリ４６２のＬＩＤ１０２４〜２０４８および／または間接エントリ４７２のＬＩＤ６１４４〜７１６８を通じてデータセグメント３１２が参照されることが可能になる。参照エントリ４８２は記憶クライアント１０６にアクセス可能でなくてもよいが、参照エントリ４８２は、変換モジュール１３４によって（間接エントリ４６２および４７２を通じて）データにアクセスするために使用されてもよく、ならびに、それ自体がデータセグメント３１２の修正された論理インタフェース３１１Ｂの一部と見なされてもよい。
【００８６】
複製動作はさらに、記憶媒体１４０に永続的記号３６６Ａを記憶することを含んでもよい。上記開示されるように、永続的記号３６６Ａおよび／または３６６Ｂの記憶は、複製動作が永続的であり、かつクラッシュセーフであることを保証することができる。永続的記号３６６Ａは、データセグメント３１２と関連付けられた参照エントリ４８２を識別するように構成されてもよい。したがって、永続的記号３６６Ａは、記憶アドレス６４４３２〜６５４５６を、参照エントリ識別子０Ｚ〜１０２４Ｚと関連付けることができる。複製動作はさらに、エントリ４６２および／または４７２のＬＩＤを参照エントリ４８２と関連付けるように構成された別の永続的記号３６６Ｂを記憶することを含んでもよい。代わりに、エントリ４６２、４７２、および４８２の間の関連付けに関連するメタデータは、単一の永続的記号に含まれてもよい。永続的記号３６６Ａおよび／または３６６Ｂは、データセグメント３１２が更新されたコンテキストフォーマットで移動され、ならびに／またはフォワードマッピング１６０（および／もしくは参照マッピング４６０）が持続するまで、記憶媒体１４０上で保持されてもよい。
【００８７】
データセグメント３１２の修正された論理インタフェース３１１Ｄは、元のデータパケット４１０Ａのコンテキストフォーマットと一致しないことがあり、永続的メタデータ３１４Ａは、参照エントリ４８２および／または複製されたエントリ４７２ではなく、ＬＩＤ１０２４〜２０４８を参照することがある。記憶層１３０は、修正された論理インタフェース３１１Ｄと一致した、更新されたコンテキストフォーマット（パケット４１０Ｂ）でデータセグメント３１２を記憶するように構成されてもよく、永続的メタデータ３１４Ｂは、各々の複製された範囲内でＬＩＤを別個に識別することとは反対に（例えば、エントリ４６２および４７２）、データセグメント３１２を参照エントリ４８２と関連付けてもよい。したがって、間接エントリ４８２の使用によって、データセグメント３１２の論理インタフェース３１１Ｄが、永続的メタデータ３１４Ａ〜Ｂのサイズ制限とは独立した、任意の数のＬＩＤを含むことが可能になる。さらに、参照エントリ４８２の追加的な複製は、データセグメント３１２のコンテキストフォーマットを更新することなくなされてもよく、そのような更新は、新たなＬＩＤ範囲をフォワードマッピング１６０における参照エントリ４８２と関連付けることによって、および／またはとりわけ、永続的記号３６６の使用によってなされてもよい。
【００８８】
上記開示されるように、間接エントリ４６２および／または４７２は、参照エントリ４８２を通じてデータセグメント３１２を最初に参照してもよい。複製動作に続いて実行される記憶動作は、フォワードマッピング１６０内でローカルエントリの使用によって反映されてもよい。複製動作の完了の後、記憶層１３０は、複製されたＬＩＤの１つ以上と関連付けられたデータを修正してもよい。図４Ｄの実施形態では、記憶クライアント１０６は、間接エントリ４６２のＬＩＤ１０２４〜１０５２に対応するデータを修正および／または上書きしてもよく、それは、記憶ログ（記憶アドレス７８２３〜７８５１におけるデータパケット４２０の）に新たなデータセグメント４１２を付加することを含むことができる。
【００８９】
データセグメント４１２は、データセグメント４１２をＬＩＤ１０２４〜１０５２と関連付けるように構成された永続的メタデータ４１４Ａを含むコンテキストフォーマット（データパケット４２０）で記憶されてもよい。記憶層１３０は、データセグメント４１２をローカルエントリ４６５におけるＬＩＤ１０２４〜１０５２と関連付けるように構成されてもよい。ローカルエントリ４６５は、間接エントリ４６２および／または参照エントリ４８２を通じてデータを参照することとは反対に、更新されたデータを直接参照してもよい。
【００９０】
データ１０２４〜１０５２（またはそのサブセット）に関連する要求に応答して、論理インタフェース管理モジュール３３４は、参照エントリがその後に続くローカルエントリ（存在する場合）への参照を検索することを含むことができる、カスケードルックアップ動作において要求されるＬＩＤへの参照を検索してもよい。図４Ｄの実施形態では、ローカルエントリ４６５は、参照エントリ４６２ごとのＬＩＤ範囲６４４３２〜６４４６０ではなく、ＬＩＤ範囲１０２４〜１０５２（記憶アドレス７８２３〜７８５１）に関連する要求を満たすために使用されてもよい。ローカルエントリにおいて発見されないＬＩＤ（例えば、ＬＩＤ１０５３〜２０４８）に対する要求は、参照エントリ４８２を通じてサービスされることを継続してもよい。したがって、範囲１０２４〜２０４８に関連するデータの論理インタフェース３１１Ｅは、１つ以上のローカルエントリ４６５、１つ以上の間接エントリ４６２、および／または１つ以上の参照エントリ４８２を含んでもよい。
【００９１】
図４Ｅに示されるさらなる実施形態では、記憶層１３０は、論理インタフェース３１１ＥのＬＩＤ（例えば、ＬＩＤ６１４４〜６１６２）のうちの別の１つを通じて複製のデータを修正してもよく、示される実施形態の詳細を曖昧にすることを回避するために、論理インタフェースの区切り文字は図４Ｅには示されない。修正されたデータは、上記開示されたように、ローカルエントリ４７５を使用して参照されてもよい。図４Ｅの実施形態では、範囲４６２および４７２の各々は、参照エントリ４８２の識別子０Ｚ〜５２Ｚを通じて前に参照された、その自身の、それぞれのローカルなバージョンのデータを有する。このようにして、エントリ４６２および４７２のいずれかもが、範囲０Ｚ〜５２Ｚへの参照を含まない。参照モジュール４３４は、対応するデータ（および参照識別子）がもはや参照されないと判定してもよく、および、それ自体が記憶媒体１４０から削除されるために（例えば、無効化される）マーク付けされてもよい。図４Ｅに示されるように、データを無効化することは、とりわけ、範囲０Ｚ〜５２Ｚを削除するように参照エントリ４８２を修正することによって、参照マッピング４６０からデータへの参照を削除することを含んでもよい。データを無効化することはさらに、リバースマッピング、および／または有効性ビットマップなどの、他の記憶メタデータ１３５を更新すること（例えば、記憶アドレス６４４３２〜６４４８４に記憶されたデータが保持される必要がないことを示すために）を含んでもよい。上記開示されたように、参照エントリ４８２を削除することができ、それによって参照されるデータを無効化することができる、参照エントリ４８２の任意の部分を参照しないポイントまで、エントリ４６２および４７２の範囲が分岐し続けてもよい。
【００９２】
図４Ｄおよび４Ｅは、対応する間接エントリ４６２および４７２との重複するＬＩＤ範囲を含むローカルエントリ４６５および４７５を示しているが、開示はこの点に限定されない。一部の実施形態では、図４Ｄの記憶動作は、ローカルエントリ４６５を生成し、およびＬＩＤ１０５３〜２０４８のみを参照するように間接エントリ４６２を修正することによって反映されてもよい。同様に、図４Ｅの動作は、ローカルエントリ４７５を生成すること、および切り捨てられた（ｔｒｕｎｃａｔｅｄ）ＬＩＤ範囲６１６３〜７１６８を参照するように間接エントリ４７２を修正することを含んでもよい。
【００９３】
図４Ａを再度参照すると、参照モジュール４３４は、参照マッピング４６０を管理または「調整する（ｇｒｏｏｍ）」ように構成されてもよい。一部の実施形態では、参照マッピング４６０における各々のエントリは、参照カウントを含むメタデータを含む。参照カウントは、参照エントリへの新たな参照またはリンクが追加されるときにインクリメントされてもよく、およびエントリへの参照を削除したことに応答してデクリメントされてもよい。一部の実施形態では、参照カウントは、参照マッピング４６０において参照識別子ごとに維持されてもよい。代わりに、参照カウントは、参照エントリ全体に対して維持されてもよい。参照エントリの参照カウントが０に到達するとき、参照エントリ（および／または、その一部）は、参照マッピング４６０から削除されてもよい。参照エントリ（（および／または、参照エントリの一部）を削除することは、本明細書で開示されるように、記憶媒体１４０上で対応するデータを無効化することを含んでもよい（データがもはや保持される必要がないことを示す）。
【００９４】
別の実施形態では、参照モジュール４３４は、「マークアンドスイープ（ｍａｒｋ−ａｎｄ−ｓｗｅｅｐ）」アプローチを使用して参照エントリを削除してもよい。参照モジュール４３４（または、変換モジュール１３４などの他のプロセス）は、とりわけフォワードマッピング１６０における間接エントリ（または、他のタイプのエントリ）から参照エントリへのリンクに従う（ｆｏｌｌｏｗ）ことによって、参照マッピング４６０におけるエントリへの参照を周期的に検査してもよい。マークアンドスイープの間にアクセスされない参照エントリは、上記開示されたように削除されてもよい。マークアンドスイープは、バックグラウンドプロセスとして動作してもよく、ならびにもはや使用されていない参照エントリを識別および削除するためにマークアンドスイープ動作を周期的に実行してもよい。
【００９５】
一部の実施形態では、本明細書で開示される参照マッピング４６０は、オンデマンドで（例えば、複製の生成、または他の間接的データ参照に応答して）生成されてもよい。他の実施形態では、全てのデータ記憶動作は、中間マッピングを通じて実行されてもよい。そのような実施形態では、記憶クライアント１０６は、論理アドレス空間１３２などの、中間マッピング層を通じて記憶アドレスにリンクされ、および／または参照することができる、仮想アドレス空間（ＶＡＳ）の間接的、仮想識別子（ＶＩＤ）を割り当ててもよい。ＶＡＳは、記憶クライアント１０６と記憶媒体１４０との間で中間マッピング層を追加してもよい。記憶クライアント１０６は、論理アドレス空間１３２の論理識別子とマッピングし、次いでそれぞれの記憶装置１４１および／または記憶媒体１４０上の記憶アドレスと関連付けられる、仮想化アドレス空間のＶＩＤを使用してデータを参照してもよい。本明細書で使用されるように、ＶＡＳは、論理ユニット番号（ＬＵＮ）アドレス空間、および／または仮想ＬＵＮ（ｖＬＵＮ）アドレス空間などを含んでもよいが、それらに限定されない。
【００９６】
図５Ａは、とりわけ、仮想化アドレス空間５３２を使用して効率的な領域複製動作を実装するように構成された間接参照層５３０の一実施形態を示す。間接参照層５３０は、インタフェース５３１を通じてＶＡＳ５３２を記憶クライアント１０６に提示するように構成されてもよい。本明細書で開示されたインタフェース１３１と同様に、インタフェース５３１は、ブロックデバイスインタフェース、仮想記憶インタフェース、および／またはキャッシュインタフェースなどのうちの１つ以上を含んでもよい。記憶クライアント１０６は、インタフェース５３１を通じたＶＡＳ５３２のＶＩＤへの参照によって、間接参照層５３０によって管理される記憶リソースに関連する記憶動作を実行してもよい。
【００９７】
間接参照層５３０はさらに、１つ以上の中間記憶層（例えば、記憶層１３０）を通じてＶＩＤを記憶リソースにマッピングするように構成されたＶＡＳ変換モジュール５３４を含んでもよい。したがって、間接参照層５３０のＶＡＳメタデータ５３５は、ＶＡＳ５３２のＶＩＤとＶＡＳ５３２のＬＩＤとの間のａｎｙ−ｔｏ−ａｎｙマッピングを含むＶＡＳフォワードマッピング５６０を含んでもよい。図５Ａには示されていないが、ＶＡＳ変換モジュール５３４および／またはＶＡＳフォワードマッピング５６０は、複数の異なる記憶層１３０の複数の論理アドレス空間１３２を集約するように構成されてもよい。したがって、一部の実施形態では、ＶＡＳ５３２は、各々がＬＩＤの別個の組を含み、ならびに各々がそれぞれの記憶層１３０、記憶装置１４１、および／または記憶媒体１４０に対応する、複数の異なる論理アドレス空間に対応してもよい。
【００９８】
図５Ａは間接参照層５３０を記憶層１３０とは別個に示しているが、開示はこの点に限定されない。一部の実施形態では、ＶＡＳ５３２、ＶＡＳフォワードマッピング５６０、ＶＡＳ変換モジュール５３４、および／または間接参照層５３０の他のモジュールは、記憶層１３０の一部として実装されてもよい。
【００９９】
間接参照層５３０は、とりわけ、効率的な領域複製、移動、結合、および／または他の高レベル動作を実装するために、ＶＡＳ５３２によって提供される中間仮想アドレス空間を利用するように構成されてもよい。代わりに、または加えて、中間マッピング層は、ハードディスクおよび／またはその他などの、ランダムアクセス、ライトインプレース記憶装置上での効率的な複製動作を可能にするために利用されてもよい。
【０１００】
記憶クライアント１０６は、ＶＡＳ５３２のＶＩＤを参照して記憶動作を実行してもよい。したがって、記憶動作は、２つの（またはそれ以上の）変換層（ｔｒａｎｓｌａｔｉｏｎ  ｌａｙｅｒｓ）を含んでもよい。ＶＡＳフォワードマッピング５６０は、ＶＡＳ５３２のＶＩＤと記憶層１３０の論理アドレス空間１３２の識別子との間の第１の変換層を含んでもよい。記憶層１３０のフォワードマッピング１６０は、ＬＩＤと記憶媒体１４０上での記憶アドレスとの間の第２の変換層を実装してもよい。
【０１０１】
間接参照層５３０は、とりわけ、ＶＡＳメタデータ５３５、ＶＡＳフォワードマッピング５６０、および／またはＶＡＳ変換モジュール５３４の使用によって、ＶＡＳ５３２内での割り当てを管理するように構成されてもよい。一部の実施形態では、ＶＡＳ５３２においてＶＩＤを割り当てることは、論理アドレス空間１３２において１つ以上の対応するＬＩＤ（および／または、１つ以上の他の記憶層の識別子）を割り当てることを含んでもよい。したがって、ＶＡＳ５３２において割り当てられた各々のＶＩＤは、論理アドレス空間１３２の１つ以上のＬＩＤに対応してもよい。間接参照層５３０および論理アドレス空間１３２のＶＩＤの間のａｎｙ−ｔｏ−ａｎｙマッピングは、本明細書で開示されるように、まばら（ｓｐａｒｓｅ）であってもよく、および／またはａｎｙ−ｔｏ−ａｎｙであってもよい。さらに、一部の実施形態では、間接参照層５３０は、ＶＩＤと複数の異なる論理アドレス空間１３２との間のａｎｙ−ｔｏ−ａｎｙおよび／または範囲管理マッピング（ｒａｎｇｅ  ｍａｎａｇｅｄ  ｍａｐｐｉｎｇ）を維持するように構成されてもよい。したがって、間接参照層５３０は、異なるそれぞれの記憶層１３０によって管理される複数の異なる記憶装置１４１の論理アドレス空間を、単一の、集約ＶＡＳ５３２に集約および／または結合してもよい。
【０１０２】
図５Ａの実施形態では、論理アドレス空間１３２は、直接アクセス可能でなくてもよく、このようにして、記憶クライアント１０６は、インタフェース５３１を通じてＶＩＤを使用して記憶リソースを参照することができる。したがって、１つ以上のＶＩＤを参照して、間接参照層５３０を通じて記憶動作を実行することは、ａ）ＶＩＤに対応する記憶層１３０を識別すること、ｂ）ＶＡＳ変換モジュール５３４および／またはＶＡＳフォワードマッピング５６０の使用によってＶＩＤにマッピングされる記憶層１３０のＬＩＤを判定すること、ならびにｃ）判定されたＬＩＤを参照して記憶層１３０の使用によって記憶動作を実装すること、を含んでもよい。
【０１０３】
図５Ｂは、間接参照層５３０の使用によって実装される複製動作の一実施形態を示す。上記開示されるように、ＶＡＳフォワードマッピング５６０は、記憶層１３０の論理アドレス空間１３２を通じて記憶アドレスに間接的にマッピングされるＶＡＳ５３２に対応してもよい。図５Ｂは、間接参照層５３０を通じて記憶動作を実装するために使用されるアドレス指定層を示す。ＶＡＳ５３２のＶＩＤは、とりわけ、間接参照層５３０のインタフェース５３１を通じて記憶クライアント１０６にアクセス可能なトップレベルのアドレス指定層を含んでもよい。記憶層１３０の論理アドレス空間１３２は、中間アドレス指定層を含んでもよい。ＶＡＳフォワードマッピング５６０は、ＶＩＤとＬＩＤとの間のａｎｙ−ｔｏ−ａｎｙマッピングを含んでもよい。ＬＩＤは、フォワードマッピング１６０の使用によって、記憶アドレス空間１４４内で記憶アドレスにマッピングされてもよい。したがって、ＶＩＤは、記憶層１３０の中間論理アドレス空間を通じて記憶アドレス空間１４４にマッピングされてもよい。
【０１０４】
図５Ｂに示されるように、状態５６３Ａでは、ＶＡＳフォワードマッピング５６０は、ＶＡＳ５３２において２つのＶＩＤ（１０および１１）を表すエントリ１０、２を含んでもよい。ＶＡＳフォワードマッピング５６０は、ＶＩＤエントリ１０、２を論理アドレス空間１３２のＬＩＤと関連付ける。図５Ｂの実施形態では、ＶＡＳフォワードマッピング５６０は、ＶＩＤエントリ１０、２をＬＩＤ１０００００および１００００１（エントリ１０００００、２）に結び付ける。エントリ１０、２は、ＶＩＤを参照して記憶動作を実行することができる特定の記憶クライアント１０６に割り当てられてもよい。状態５６３Ａでは、記憶層１３０は、エントリ１０００００、２を記憶媒体１４０（記憶アドレス２００００）上の１つ以上の記憶アドレスとマッピングするように構成されてもよい。
【０１０５】
状態５３６Ｂでは、間接参照層５３０は、ＶＩＤエントリ１０、２を複製する複製動作を実装してもよい。複製動作は、ａ）新たなＶＩＤエントリ４００、２を割り当てること、およびｂ）新たなＶＩＤエントリ４００、２をＶＡＳフォワードマッピング５６０における対応するエントリ１０００００、２と関連付けることを含んでもよい。フォワードマッピング１６０における対応するエントリ１０００００、２は、変更されないままであってもよい。代わりに、フォワードマッピング１６０におけるエントリ１０００００、２の参照カウント（または他のインジケータ）は、エントリが複数のＶＩＤ範囲によって参照されていることを示すように更新されてもよい。記憶アドレス２００００に記憶されたデータのコンテキストフォーマットは、変更されないままであってもよい（例えば、データを論理インタフェース１０００００、２と関連付けることを継続する）。複製動作はさらに、フォワードマッピング１６０におけるＶＩＤエントリ４００、２とエントリ１０００００、２との間の関連付けを示すために、記憶媒体１４０に永続的記号３６６を記憶することを含んでもよい。代わりに、または加えて、ＶＡＳフォワードマッピング５６０（および／または、その一部）を持続させることによって、複製動作を永続的および／またはクラッシュセーフとすることができる。
【０１０６】
状態５３６Ｃでは、記憶アドレス２００００におけるデータは、記憶アドレス４００００に移動されてもよい。移動は、標準的な記憶媒体維持動作で、かつ複製されたデータのコンテキストフォーマットを更新しないように行われてもよい。データを移動することは、フォワードマッピング１６０において単一のエントリを更新することを含んでもよい。ＶＡＳフォワードマッピング５６０は変更されないままであってもよい。異なるバージョンのＶＩＤ範囲１０、２および４００、２への修正は、中間、論理アドレス空間を通じて管理されてもよい。ＶＩＤ１０への修正は、ａ）論理アドレス空間１３２において新たなＬＩＤを割り当てること、ｂ）新たなＬＩＤと関連して修正されたデータを記憶すること、およびｃ）新たなＬＩＤをＶＡＳフォワードマッピング５６０におけるＶＩＤ１０にマッピングすること、を含んでもよい。
【０１０７】
本明細書で開示される領域複製、移動、および／または結合動作を実装する実施形態は、スナップショット、重複排除、原子的動作、トランザクション、および／またはファイル−システム管理機能などの、他の、より高レベルの記憶動作を効率的に実装するために使用されてもよい。図４Ａを再度参照すると、記憶層１３０は、記憶媒体１４０上で重複データを識別するように構成された重複排除モジュール３７４を含んでもよい。重複データは、任意の適切な機構を使用して識別されてもよい。一部の実施形態では、重複データは、ａ）記憶媒体１４０の中身をスキャニングし、ｂ）種々のデータセグメントに対するシグニチャ値を生成し、およびｃ）データシグニチャ値を比較して重複データを識別する、ことによって識別される。シグニチャ値は、暗号化シグニチャ、ハッシュコード、および／またはサイクリックコードなどを含んでもよいが、それらに限定されない。シグニチャ情報は、フォワードマッピング１６０などの記憶メタデータ１３５（例えば、エントリと関連付けられたメタデータ）内に記憶されてもよく、ならびに／または記憶メタデータ１３５の１つ以上の別個のデータ構造において維持および／もしくはインデックス付けされてもよい。重複排除モジュール３７４は、データシグニチャを比較してもよく、およびシグニチャマッチを検出すると、１つ以上の重複排除動作を実行してもよい。重複排除動作は、シグニチャマッチを検証すること（バイトごとのデータ比較を実行すること）、および２つ以上のＬＩＤ範囲を通じて重複データを参照する１つ以上の領域複製動作を実行することを含んでもよい。
【０１０８】
図６は、重複排除動作の一実施形態を示す。フォワードマッピング１６０は、異なるそれぞれの記憶アドレス３４５３〜４４７７および７０２４〜８０４８に記憶された重複データを参照することができる、エントリ６６２および６７２を含んでもよい。エントリ６６２および６７２は、ＬＩＤ１０２４〜２０４８および６１４４〜６６５６にそれぞれ対応する、異なる、それぞれの論理インタフェース６６３および６７３に対応してもよい。重複データセグメント（データセグメント６１２）は、上記開示されたように、重複排除モジュール３７４によって識別および／または検証されてもよい。代わりに、重複データは、データが記憶層１３０における記憶のために受信されるときに識別されてもよい。したがって、データは、データの追加的な複製が記憶媒体１４０に記憶される前に、重複排除されてもよい。
【０１０９】
エントリ６６２および６７２が重複データを参照することを識別および／または検証したことに応答して、記憶層１３０は、データを重複排除するように構成されてもよく、それは、ＬＩＤの２つの異なる組を通じて重複データの単一の複製を参照するために１つ以上の領域複製を生成することを含むことができる。上記開示されたように、領域複製を生成することは、データセグメントの論理インタフェース６６３および６７３を修正することを含んでもよい。図６の実施形態では、重複データは、記憶位置３４５３〜４４７７および７０２４〜８０４８それぞれにおけるパケット６１０内のデータセグメント６１２として記憶される。複製動作は、データセグメント（または、新たなバージョンのデータセグメントのおよび／もしくはデータセグメントの新たな複製）のうちの１つの論理インタフェースを修正し、それによって、エントリ６６３および６７３の両方によってデータセグメントを参照することができることを含んでもよい。
【０１１０】
領域複製動作は、図３Ａ〜Ｅの領域複製の実施形態、図４Ａ〜Ｅの参照エントリの実施形態、および／または図５Ａ〜Ｂの中間マッピングの実施形態を含む、本明細書で開示される複製の実施形態のいずれかを使用して実装されてもよい。図６の重複排除の実施形態では、両方のＬＩＤ範囲１０２４〜２０４８および６１４４〜７１６８は、参照エントリ６８２を通じてデータセグメント６１２の単一のバージョンを参照するように修正されてもよい（他のデータセグメントは無効化されてもよい）。このようにして、重複排除動作は、重複排除データセグメント６１２を表す（パケット６１０を参照する）参照エントリ６８２を生成することを含んでもよい。重複排除動作はさらに、上記開示されたように、参照エントリ６８２を通じてデータセグメント６１２にマッピングすることができる、それぞれの間接エントリ６６５および６７５にエントリ６６２および６７２を修正および／または変換することを含んでもよい。重複排除動作はさらに、データセグメント６１２を、ＬＩＤ１０２４〜２０４８および６１４４〜７１６８（参照エントリ６８２と共に）の両方の組と関連付けるようにデータセグメント６１２の論理インタフェース６６９を修正することを含んでもよい。重複排除動作はさらに、上記開示されたように、記憶媒体１４０に永続的記号３６６を記憶することを含んでもよい。
【０１１１】
重複排除動作はさらに、上記開示されたように、修正された論理インタフェース６６９と一致することになるデータセグメント６１２のコンテキストフォーマットを更新することを含んでもよい。コンテキストフォーマットを更新することは、１つ以上のバックグラウンド動作において、記憶ログに（例えば、記憶位置８４４３２〜８５４５６における）更新されたコンテキストフォーマット（データパケット６１０）でデータセグメント６１２を付加することを含んでもよい。更新されたデータパケット６１０は、データセグメント６１２を更新された論理インタフェース６６９（例えば、参照識別子０Ｚ〜１０２３Ｚを通じたＬＩＤ１０２４〜２０４８および６１４４〜６６５６）と関連付ける永続的メタデータ６１４を含んでもよい。
【０１１２】
図６はＬＩＤの単一のエントリまたは範囲を複製および／または重複排除することを示しているが、開示はこの点に限定されない。一部の実施形態では、複数の前部の識別子範囲は、単一の複製動作で複製されてもよい。このタイプの複製動作は、アドレス範囲の「スナップショット」（または論理アドレス空間１３２全体）を生成するために使用されてもよい。本明細書で使用されるように、スナップショットは、特定の時点における記憶装置（またはＬＩＤの組）の状態を指す。スナップショットは、スナップショット動作を完了した後の範囲内で行われる変更に関わらず、ＬＩＤ範囲の「元の」状態を維持することができる。
【０１１３】
図７は、スナップショット動作を効率的に実装するように構成された記憶層１３０を含むシステム７００の一実施形態を示すブロック図である。図７の実施形態は、論理アドレス空間１３２内のアドレス範囲に関連する。開示はこの点に限定されないが、しかしながら、上記開示されたように、ＶＡＳ５３２内の範囲（ｒａｎｇｅ）および／または範囲（ｅｘｔｅｎｔ）などの、他のタイプのアドレス範囲で使用するように適合されてもよい。記憶層１３０は、本明細書で開示されるスナップショット動作を実装するように構成されたスナップショットモジュール７３６およびタイミングモジュール７３８を含んでもよい。
【０１１４】
状態７７３Ａでは、記憶層１３０は、ＬＩＤ範囲ＦＲ１のスナップショットを生成するように構成されてもよい。スナップショットを生成することは、特定の時にＬＩＤ範囲ＦＲ１の状態を保存することを含んでもよい。スナップショット動作はさらに、後続の記憶動作がＬＩＤ範囲内で実行されることを可能にすると共に、ＬＩＤ範囲ＦＲ１を保存することを含んでもよい。
【０１１５】
上記開示されるように、記憶層１３０は、とりわけ、ログ記憶モジュール１３６の使用によって、記憶媒体１４０上で記憶ログにデータを記憶するように構成されてもよい。記憶動作のログ順序は、記憶区画１７０Ａ〜Ｎ上のシーケンスインジケータ１１３および／または記憶媒体１４４の記憶アドレス空間１４４内の連続した記憶位置（図１Ｄおよび１Ｅと共に開示されるような）などの、データパケットと関連付けられたシーケンス情報を使用して判定されてもよい。
【０１１６】
記憶層１３０はさらに、ログにおけるデータの相対的時間順序付けなどの、他のタイプの順序付けおよび／またはタイミング情報を維持するように構成されてもよい。しかしながら、一部の実施形態では、データのログ順序は、とりわけ、データが媒体管理動作において記憶装置内で移動されることに起因して、タイミング情報を正確に反映しないことがある。データを移動することは、記憶媒体１４０上のその元の記憶位置からデータを読み出すこと、および記憶ログ内の最新の付加ポイントにおいてデータを付加することを含んでもよい。このようにして、古い、移動されたデータは、より新しい最新のデータと共に記憶ログに記憶されてもよい。したがって、記憶ログは特定のＬＩＤに関連するデータ動作の相対的ログ順序を保存することができるが、記憶ログは絶対的タイミング情報を正確に反映しないことがある。
【０１１７】
一部の実施形態では、ログ記憶モジュール１３６は、記憶媒体１３０上で実行される記憶動作の相対的タイミング情報を確立するために使用することができる、タイミング情報にデータを関連付けるように構成される。一部の実施形態では、タイミング情報は、記憶媒体１４０に記憶された各々のデータパケットに適用することができる、それぞれのタイムスタンプ（タイミングモジュール７３８によって維持される）を含んでもよい。タイムスタンプは、データパケット３１０の永続的メタデータ３１４内に記憶されてもよい。代わりに、または加えて、タイミングモジュール７３８は、より荒いレベルの粒度でタイミング情報を追跡するように構成されてもよい。一部の実施形態では、タイミングモジュール７３８は、１つ以上のグローバルタイミングインジケータ（時点識別子（ｅｐｏｃｈ  ｉｄｅｎｔｉｆｉｅｒ））を維持する。本明細書で使用されるように、「時点識別子」は、記憶層１３０を通じて実行される記憶動作の相対的タイミングを判定するために使用される識別子を指す。ログ記憶モジュール１３６は、データパケット７１０に時点インジケータ７３９を含めるように構成されてもよい。時点インジケータ７３９は、タイミングモジュール７３８によって維持される最新の時点（例えば、グローバルタイミングインジケータ）に対応してもよい。時点インジケータ７３９は、対応するデータセグメント７１２が記憶ログに書き込まれた時点（ｅｐｏｃｈ）に対応してもよい。時点インジケータ７３９はパケット７１０の永続的メタデータ７１４内に記憶されてもよく、および、それ自体が移動動作の間にデータパケット７１０と関連付けられたままであってもよい。タイミングモジュール７３８は、新たなスナップショットの生成、および／またはユーザ要求などの、或るイベントに応答してグローバル時点識別子をインクリメントするように構成されてもよい。データセグメント７１２の時点インジケータ７３９は、移動および／または他の媒体維持動作を通じて変更されないままであってもよい。したがって、時点インジケータ７３９は、記憶ログにおけるデータパケット７１０の相対的位置とは独立して、データセグメント７１２の元の記憶時間に対応してもよい。
【０１１８】
スナップショット動作は、特定の時間における特定のＬＩＤ範囲（ＦＲ１）の状態を保存することを含んでもよい。したがって、スナップショット動作は、記憶媒体１４０にＦＲ１に関連するデータを保存することを含んでもよい。データを保存することは、ａ）特定の時間枠（時点）に関するデータを識別すること、およびｂ）記憶媒体１４０に識別されたデータを保存すること（例えば、識別されたデータが、とりわけ、記憶復元動作において記憶媒体１４０から削除されることを防止すること）を含んでもよい。スナップショットに関連するデータは、後続の記憶動作（例えば、データ上書き、修正、トリム、および／または取り除く（ｏｂｖｉａｔｅ）動作）によって無効化されるかに関わらず保持されてもよい。特定のスナップショットに対して保存される必要があるデータは、上記開示された時点インジケータ７３９の使用によって識別されてもよい。
【０１１９】
状態７７３Ａ（時点インジケータｅ０によって表される時間ｔ１）では、記憶層１３０は、スナップショット動作を実装する要求を受信してもよい。要求に応答して、スナップショットモジュール７３６は、タイミングモジュール７３８によって維持される時点識別子の最新値を判定してもよい。時点識別子の最新値は、最新「スナップショット時点」と称されてもよい。図７の実施形態では、スナップショット時点は０である。スナップショットモジュール７３６はさらに、タイミングモジュール７３８が最新の、グローバル時点インジケータをインクリメントさせるように構成されてもよい（例えば、時点識別子を１にインクリメントする）。スナップショットを生成することはさらに、最新の、更新された時点インジケータを示すように構成された永続的記号３６６を記憶媒体に記憶することを含んでもよい。永続的記号３６６はさらに、スナップショット時点に関連するデータが保存されることになることを示すように構成されてもよい（例えば、スナップショット動作において保存されることになるＬＩＤ  ＦＲ１の特定の範囲を識別する）。永続的記号３６６は、メタデータ再構築動作の間に、ａ）最新時点識別子を判定し、ならびに／またはｂ）特定のスナップショット時点（例えば、時点ｅ０）と関連付けられたデータを保存するようにスナップショットモジュール７３６および／もしくは媒体管理モジュール３７０を構成するために使用されてもよい。
【０１２０】
スナップショットモジュール７３６はさらに、スナップショット時点と関連付けられたデータを保存するよう媒体管理モジュール３７０を指示するように構成されてもよい。これに応答して、媒体管理モジュール３７０は、ａ）スナップショット（スナップショットデータ）を保存するためにデータを識別し、およびｂ）とりわけ、記憶復元動作において、識別されたデータが記憶媒体１４０から削除されることを防止するように構成されてもよい。媒体管理モジュール３７０は、データパケット７１０の時点インジケータ７３９の使用によって、スナップショットデータを識別してもよい。図１Ｅと共に開示されるように、データは、記憶媒体１４０に不適切に書き込まれてもよい。特定のＬＩＤと関連付けられた最新バージョンのデータは、ログ内の対応するデータパケット７１０の順序に基づいて判定されてもよい。媒体管理モジュール３７０は、スナップショット時点内の最新バージョンのデータを、保存される必要があるデータとして識別するように構成されてもよい。スナップショット時点において他のデータによって使用されていない、レンダリングされたデータが削除されてもよい。図１Ｅの実施形態を参照して、データＸ０およびＸ１（同一のＬＩＤ  Ａと関連付けられた）の両方がスナップショット時点０でマーク付けされていた場合、媒体管理モジュール３７０は、時点０における最新バージョンのデータをＸ１として識別し、およびデータＸ０を削除するためにマーク付けしてもよい。しかしながら、データＸ０が、後の時点（例えば、スナップショット動作の後の時点１）でマーク付けされた、スナップショット時点０およびＸ１でマーク付けされていた場合、媒体管理モジュール３７０は、スナップショットのデータを保存するために、記憶媒体１４０にデータＸ０を保存してもよい。
【０１２１】
状態７７３Ｂでは、スナップショットモジュール７３８は、スナップショットＦＲｌ（時点ｅ０と関連付けられたデータ）に関連するデータを保存するとともに、後続の時点（例えば、時点ｅ１）の間に記憶動作が実行され続けることを可能にするように構成されてもよい。ＦＲｌを保存することは、ＦＲｌを複製して、時点ｅ０（ＦＲｌ（ｅ０））におけるＬＩＤ範囲の元の状態を保存するとともに、記憶動作がＦＲｌを参照し続けることを可能にすることを含んでもよい。複製動作は、重複エントリ、参照エントリ、および／または中間マッピング層のうちの１つ以上を使用して上記開示されたように実装されてもよい。記憶動作は、ＬＩＤ  ＦＲｌを参照して記憶媒体１４０上で記憶ログにデータを追加することを含んでもよい。スナップショットＦＲｌ（ｅ０）に対応する複製されたＬＩＤは、不変であってもよい。したがって、ＦＲｌ（ｅ０）のスナップショットは、ＬＩＤ範囲への変更に関わらずに保存されてもよい。状態７７３Ｂにおいて記憶されたデータは、最新の時点（ｅ１）の時点インジケータ７３９と共に記憶されてもよい。スナップショットモジュール７３６は、時点ｅ１（および、後続の時点）の間に実行される記憶動作によって使用されておらず、および／または無効化された、レンダリングされたデータを保存するように構成されてもよい。図１Ｅの実施形態を再度参照して、媒体管理モジュール３７０は、データＸ０を、スナップショットＦＲｌを保存するためのデータ（スナップショット動作が実行された後に、データＸ１が記憶されていてもよい）として識別してもよい。スナップショットモジュール７３８および／または媒体管理モジュール３７０は、その後にデータが、時点ｅ１においてデータＸ１によって使用されていなかったとしても、データＸ０を保存するように構成されてもよい。データＸ０は、ＬＩＤ  Ａが削除またはトリムなどされている場合でさえ、保持されてもよい。
【０１２２】
ＬＩＤ範囲ＦＲｌ（ｅ０）および時点インジケータｅ０でマーク付けされたデータを含む、ＦＲｌ（ｅ０）のスナップショットは、対応するスナップショットが削除されるまで保存されてもよい。スナップショットは、インタフェース１３１を通じて受信される要求に応答して削除されてもよい。状態７７３Ｃにおいて示されるように、時点０は、他の、介入（ｉｎｔｅｒｖｅｎｉｎｇ）時点（時点ｅ１〜ｅＮ）が生成および／または削除された後でさえ、記憶媒体１４０上で保持されてもよい。時点ｅ０を削除することは、時点ｅ０と関連付けられた、無効な／使用されていないデータを削除するようスナップショットモジュール７３８および／または媒体管理モジュール３７０を構成することを含んでもよい。
【０１２３】
状態７７３Ａにおいてスナップショットを生成した後に実行される記憶動作は、論理アドレス空間１３２、および特に、フォワードマッピング１６０を修正してもよい。修正は、データを記憶媒体１４０に付加したこと、ならびにＬＩＤをＦＲ１に追加および／または削除すること、などに応答して記憶アドレス結び付けを更新することを含んでもよい。一部の実施形態では、スナップショットモジュール７３６は、別個の名前空間、別個のマッピングなどにおいて、論理アドレス空間１３２の別個の領域など、別個の記憶メタデータ１３５内でスナップショット範囲ＦＲ１（ｅ０）を保存するように構成される。代わりに、スナップショットモジュール７３６は、時間ｅ０において元のバージョンのＦＲ１を保存することなく、変更がフォワードマッピング１６０において行われることを可能にしてもよい。スナップショットモジュール７３６は、記憶媒体１４０に記憶されたスナップショットデータを使用して、ｅ０（時間ｔ１）に対してフォワードマッピング１６０を再構築するように構成されてもよい。時間ｔ１におけるフォワードマッピング１６０は、上記開示されるように再構築されてもよく、それは、記憶媒体１４０に記憶された（ログ順序で）データに連続してアクセスすること、およびデータパケット７１０と関連付けられた永続的メタデータ７１４に基づいてフォワードマッピングエントリを生成することを含むことができる。図７の実施形態では、時点ｅ０に対応するフォワードマッピング１６０は、時点インジケータ７３９  ｅ０（または、それよりも低い）でマーク付けされたデータパケット７１０を参照することによって再構築されてもよい。ｅ０よりも大きい時点インジケータ７３９と関連付けられたデータは無視されてもよい（スナップショットＦＲ１（ｅ０）の生成の後の動作に対応するそのようなデータが生成されているので）。
【０１２４】
本明細書で開示される記憶層１３０は、効率的な領域移動動作を実装するようにさらに構成されてもよい。図８Ａは、本明細書で開示される記憶層１３０によって実装される移動動作の一実施形態を示す。フォワードマッピング１６０は、記憶媒体１４０上でＬＩＤ１０２３〜１０２５をそれぞれのデータセグメントに結び付けるように構成されたエントリ８６２を含む。エントリ８６２は、実施形態の詳細をより良好に示すために別個に示されるが、しかしながら、エントリ８６２は、ＬＩＤ１０２３〜１０２５の全範囲を含む単一のエントリに含まれてもよい。エントリ８６２は、記憶アドレス３２、３０９６、および８７２に記憶されたデータの論理インタフェース８６３を定義してもよい。上記開示されたように、記憶アドレス３２、３０９６、および８７２に記憶されたデータは、データを対応するＬＩＤ１０２３、１０２４、および１０２５と関連付けるコンテキストフォーマットで記憶されてもよい。
【０１２５】
記憶層１３０は、とりわけ、ＬＩＤ１０２３、１０２４、および１０２５と、それぞれの媒体記憶位置３２、３０９６、および８７２におけるデータとの間の関連付けを、ＬＩＤ（例えば、９２１５、９２１６、および９２１７）の新たな組に対応する新たな論理インタフェース８６３Ｂと置き換えることによって、エントリ８６２をＬＩＤ９２１５〜９２１７に移動するように構成されてもよい。移動動作は、インタフェース１３１を介して受信される要求に応答して、ならびに／またはより高レベルの記憶動作の一部として（例えば、ファイルをリネームする要求、またはフォワードマッピング１６０をバランスよく配置し（ｂａｌａｎｃｅ）および／もしくはデフラグする動作、など）実行されてもよい。
【０１２６】
移動動作は、上記開示された複製の実施形態のうちの１つ以上に従って実装されてもよい。一部の実施形態では、移動動作は、ＬＩＤ１０２３、１０２４、および１０２５にマッピングされた記憶アドレスを、目的（ｄｅｓｔｉｎａｔｉｏｎ）ＬＩＤ９２１５、９２１６、および９２１７と関連付けることを含んでもよく、それは、移動動作に従ってデータの論理インタフェース８６３Ａを修正することをもたらすことがある。移動動作はさらに、移動動作が永続的であり、およびクラッシュセーフであることを保証するために永続的記号３６６を記憶媒体１４０に記憶することを含んでもよい。記憶アドレス３２、８７２、および３０９６に記憶されたデータは、上記開示されたように、１つ以上のバックグラウンド動作で、更新された論理インタフェース８６３Ｂに従って再書き込みされてもよい。
【０１２７】
図８Ｂは、移動動作の別の実施形態を示す。上述したように、移動動作は、ＬＩＤ１０２３〜１０２５と関連付けられたデータをＬＩＤ９２１５〜９２１７に移動することを含んでもよい。図８Ｂの移動動作は、図４Ａ〜Ｅと共に開示された参照エントリを利用してもよい。したがって、移動動作は、移動動作を表すために、参照マッピング４６０において参照エントリ８８２を生成することを含んでもよい。移動動作はさらに、参照エントリ８８２を通じて新たな間接エントリ８６６を割り当ててデータを参照することを含んでもよい。参照エントリ８８２は、アドレス３２、３０９６、および８７２と関連付けることができる、ＬＩＤ１０２３、１０２４、および１０２５を事前移動することを含んでもよい。したがって、データの新たな論理インタフェース８６３Ｃは、間接エントリ８６６および対応する参照エントリ８８２を含んでもよい。移動動作はさらに、上記開示されたように、移動動作が永続的であり、およびクラッシュセーフであることを保証するために記憶媒体に永続的記号３６６を記憶することを含んでもよい。
【０１２８】
記憶アドレス３２、３０９６、および８７２に記憶されたデータのコンテキストフォーマットは、更新された論理インタフェース８６３Ｃと一致しないことがあり、データのコンテキストフォーマットは、それぞれのデータセグメントを、ＬＩＤ９２１５、９２１６、および９２１７（ならびに／または、参照エントリ）とは反対に、ＬＩＤ１０２３、１０２４、および１０２５と関連付けてもよい。永続的記号３６６は、データの更新された論理インタフェース８６３Ｃを含んでもよく、それによって、記憶メタデータ１３５（例えば、フォワードマッピング１６０および／または参照マッピング４６０）を必要な場合に正確に再構築することができる。
【０１２９】
記憶層１３０は、修正された論理インタフェース８６３Ｃ（ＬＩＤ９２１５、９２１６、および９２１７）を通じて、一致しないコンテキストフォーマットでのデータへのアクセスを提供してもよい。データは、移動動作に続く（移動動作および／または他の記憶動作の経路の外で）修正された論理インタフェース８６３Ｃと一致するコンテキストフォーマットで再書き込みおよび／または移動されてもよい。一部の実施形態では、記憶アドレス３２、３０９６、および／または８７２におけるデータは、上記説明されたように、１つ以上のバックグラウンド動作で媒体管理モジュール３７０によって再書き込みされてもよい。したがって、移動動作は、フォワードマッピング１６０を更新し、および／または永続的記号３６６を記憶したことに応答して完了してもよい（および／または確認応答を返してもよい）。
【０１３０】
図８Ｃに示されるように、フォワードマッピング１６０および／または他の記憶メタデータ１３５は、移動動作のデータを再書き込みしたことに応答して更新されてもよい。図８Ｃの実施形態では、媒体記憶位置３２に記憶されたデータセグメント８１２Ａは、記憶復元動作に移動されてもよく、それは、修正された論理インタフェース８６３Ｃと一致するコンテキストフォーマット（データパケット８１０Ａ）でデータを記憶することを含むことができる。データパケット８１０Ａは、データセグメント８１２ＡをＬＩＤ９２１５と関連付ける永続的メタデータ８１４Ａを含んでもよい。フォワードマッピング１６０は、更新されたコンテキストフォーマットでデータを参照するように更新されてもよく、それは、参照エントリではなくデータパケット８１０Ａを直接参照するようにＬＩＤ９２１５の間接エントリを修正することを含むことができる。ＬＩＤ９２１５に対応するエントリは、間接エントリから標準、ローカルエントリに戻ってもよく、およびＬＩＤ１０２３に対する参照エントリは、参照マッピング４６０から削除されてもよい。
【０１３１】
図８Ｄを参照して、記憶クライアント１０６は、ＬＩＤ９２１７と関連付けられたデータを修正してもよく、それは、データセグメントを不適切に記憶する（例えば、記憶アドレス７７２において）ことを含むことができる。データセグメントは、修正された論理インタフェース８６３Ｃと一致するコンテキストフォーマット（例えば、データをＬＩＤ９２１７と関連付ける）で上書きされてもよい。これに応答して、フォワードマッピング１６０は、上記開示されたように、ＬＩＤ９２１７に対するエントリをデータセグメントの記憶アドレス（例えば、記憶アドレス７７２）と関連付け、およびＬＩＤ１０２５に対する参照エントリを参照マッピング４６０から削除するように更新されてもよい。
【０１３２】
一部の実施形態では、参照マッピング４６０は、フォワードマッピング１６０とは別個に維持されてもよく、それによって、記憶クライアント１０６によって直接、そのエントリ（例えば、エントリ８８２）を参照することができなくなる。この分離（ｓｅｇｒｅｇａｔｉｏｎ）によって、記憶クライアント１０６が効率的に動作することが可能になる。例えば、データが更新されたコンテキストフォーマットで上書きおよび／または移動されるまで動作を停止させる（ｓｔａｌｌ）のではなく、データ動作は、データが１つ以上のバックグラウンド処理で再書き込みされている間に続行してもよい。図８Ｅを参照して、上記開示された移動動作に続いて、記憶クライアント１０６は、ＬＩＤ１０２４と関連してデータを記憶してもよい。ＬＩＤ１０２４に対応する参照エントリ８８２は、とりわけ、更新されたコンテキストフォーマットでいまだに再書き込みされていない記憶アドレス３０９６におけるデータに起因して、参照マッピング４６０に含まれてもよい。しかしながら、参照マッピング４６０がフォワードマッピング１６０とは別個に維持されるので、名前衝突が発生しないことがあり、および記憶動作を完了することができる。フォワードマッピング１６０は、論理インタフェース８６３Ｃ（および参照マッピング４６０）を通じてＬＩＤ１０２４に以前に結び付けられたデータへのアクセスを提供することを継続している間、媒体記憶位置４３２２に記憶されたデータに対する論理インタフェースを含む別個のエントリ８６４を含んでもよい。
【０１３３】
開示される移動動作では、とりわけ、対応するデータを再書き込み、移動、修正、削除、および／または上書きしたことに起因して、間接エントリが参照マッピング４６０の参照エントリにもはやリンクされないとき、参照エントリは削除されてもよく、および間接エントリは、直接、ローカルエントリに戻ってもよい。加えて、移動動作と関連付けられた永続的記号３６６は、上記開示されたように、記憶媒体１４０から無効化および／または削除されてもよい。
【０１３４】
図１Ａを再度参照して、記憶層１３０のインタフェース１３１は、本明細書で開示される記憶動作を実行するためのＡＰＩおよび／またはインタフェースを提供するように構成されてもよい。ＡＰＩおよび／またはインタフェースは、ブロックインタフェース、および／または拡張記憶インタフェースなどのうちの１つ以上を通じて見えるようにされてもよい。ブロックインタフェースは、ｆａｄｖｉｓｅパラメータおよびＩ／Ｏ制御パラメータなどの、インタフェース拡張の使用によって、追加ＡＰＩおよび／または機能を含むように拡張されてもよい。インタフェース１３１は、領域複製動作、領域移動動作、領域結合動作、重複排除、スナップショット、および本明細書で開示される他の、より高レベルの動作を実行するＡＰＩを提供してもよい。インタフェース１３１によって、記憶クライアント１０６が、属性および／またはメタデータをＬＩＤ範囲に適用し（例えば、範囲を凍結する（ｆｒｅｅｚｅ））、ならびに領域スナップショットを管理することが可能になる。本明細書で開示されるように、領域複製動作は、１つ以上のソースＬＩＤの組の論理複製を生成することを含む。領域複製、移動、および／または結合動作は、図３Ａ〜Ｅに示される領域複製の実施形態、図４Ａ〜Ｅの参照エントリの実施形態、および／または図５Ａ〜Ｂの中間マッピング層の実施形態を含むがそれらに限定されない、本明細書で開示される実施形態のいずれかを使用して実装されてもよい。
【０１３５】
本明細書で開示される領域複製、移動、および／または結合動作は、重複排除、スナップショット、効率的なファイル複製動作（論理ファイル複製）、ファイル一貫性管理、アドレス空間管理、ｍｍａｐチェックポイント、および原子的書き込みなどの、より高レベルの動作を実装するために使用されてもよい。それらのより高レベルの動作はまた、記憶層１３０のインタフェース１３１を通じて見えるようにされてもよい。開示される動作は、オペレーションシステム、ファイルシステ、および／またはデータベースサービスなどの、種々の異なる記憶クライアント１０６によって利用されてもよい。
【０１３６】
図９Ａは、ファイル管理動作を実装するように構成された記憶層１３０を含むシステム９００Ａの一実施形態を示す。システム９００Ａは、複雑度およびオーバーヘッドなどを低減させる記憶層１３０の機能を利用するように構成することができる、ファイルシステム９０６を含んでもよい。ファイルシステム９０６は、領域複製、移動、移動、スナップショット、重複排除、ならびに／または効率的なファイルレベルスナップショットおよび／もしくは複製動作を実装する、本明細書で開示される他の機能を利用するように構成されてもよい。ファイルシステム９０６は、クライアント要求（例えば、複製コマンド、またはファイルスナップショットｉｏｃｔｒｌなど）に応答してそのような動作を実装するように構成されてもよい。ファイルシステム９０６は、とりわけ、ａ）ソースファイルのダーティページ（存在する場合）をフラッシュし（ｆｌｕｓｈｉｎｇ）、ｂ）複製されたファイルおよび／またはファイルレベルスナップショットを表すために新たな目的ファイルを生成し、およびｃ）ソースファイルを目的ファイルに複製するように構成された領域複製動作を実行するよう記憶モジュール１３０を指示する、ことによって、ソースファイル上で効率的なファイル複製および／またはファイルレベルスナップショット動作を実装するように構成されてもよい。
【０１３７】
図９Ａは、ファイルシステム９０６に対する領域複製動作を実装するための種々の実施形態を示す。一部の実施形態では、および状態９１１Ａで示されるように、記憶層１３０は、ソースファイル（複製されることになるファイル）のＬＩＤがフォワードマッピング１６０の使用によって記憶媒体上でファイルデータにマッピングされる、論理アドレス空間１３２を維持するように構成されてもよい。状態９１１Ｂに示される対応する領域複製動作は、ａ）目的ファイルに対してＬＩＤの組を割り当てること、ならびにｂ）記憶媒体１４０上でソースファイルおよび目的ファイルのＬＩＤをファイルデータにマッピングすることを含んでもよい。領域複製動作はさらに、ファイルデータがソースファイルおよび目的ファイルＬＩＤの両方に関連付けられることを示すために記憶媒体１４０に永続的記号３６６を記憶することを含んでもよい。領域複製動作はさらに、本明細書で開示されるように、更新されたコンテキストフォーマットに従って、ファイルデータを再書き込みすることを含んでもよい。
【０１３８】
他の実施形態では、記憶層１３０は、領域複製動作（例えば、図４Ａ〜Ｅに示されるように）を実装するために参照マッピング４６０を利用してもよい。領域複製動作の前に、状態９１１Ｃでは、ソースファイルのＬＩＤがフォワードマッピング１６０における対応するファイルデータに直接マッピングされてもよい。状態９１１Ｄにおいて領域複製を生成することは、参照マッピング４６０における１つ以上の参照エントリを、ファイルデータと関連付けること、ならびにソースファイルＬＩＤおよび目的ファイルＬＩＤに対応する間接エントリを、参照エントリにリンクすることを含んでもよい。領域複製動作はさらに、本明細書で開示されるように、記憶媒体１４０に永続的記号３６６を記憶すること、および／またはファイルデータのコンテキストフォーマットを更新することを含んでもよい。
【０１３９】
一部の実施形態では、記憶層１３０は、中間層マッピング層（例えば、図５Ａ〜Ｂで開示されるように）を使用して領域複製動作を実装するように構成されてもよい。状態９１１Ｅで示されるように、ソースファイルは、中間アドレス空間（例えば、記憶層１３０の論理アドレス空間１３２）を通じて記憶媒体１４０上でファイルデータにマッピングすることができる、ＶＡＳ５３２のＶＩＤの組に対応してもよい。領域複製動作を実行することは、ａ）目的ファイルに対してＶＡＳ５３２におけるＶＩＤを割り当てること、およびｂ）目的ファイルのＶＩＳを中間マッピング層のＬＩＤ（例えば、ソースファイルＶＩＤにマッピングされるＬＩＤの同一の組）と関連付けることを含んでもよい。領域複製動作はさらに、目的ＶＩＤがファイルデータＬＩＤと関連付けられることを示す永続的記号３６６を記憶媒体１４０に記憶することを含んでもよい。ファイルデータが中間識別子に既に結び付けられているので、ファイルデータのコンテキストフォーマットは更新される必要がないことがある。
【０１４０】
ファイルシステム９０６はさらに、ｍｍａｐ動作をチェックポイントするために記憶層１３０を利用するように構成されてもよい。本明細書で使用されるように、「ｍｍａｐ」動作は、ファイルの内容が、ファイルシステム９０６の標準読み出し／書き込みインタフェースではなく、標準ロードおよび記憶動作を通じてメモリのページとしてアクセスされる動作を指す。「ｍｓｙｎｃ」動作は、ファイルのダーティページ（存在する場合）を記憶媒体１４０にフラッシュする動作を指す。ｍｍａｐ動作の使用は、ファイルのチェックポイントを困難にし得る。ファイル動作は、メモリにおいて実行され、およびｍｓｙｎｃは、状態が保存される必要があるときに発行される。しかしながら、ｍｓｙｎｃの後のファイルの状態は、最新のインメモリ（ｉｎ−ｍｅｍｏｒｙ）状態を表し、および最後に保存された状態は消失することがある。したがって、ファイルシステム９０６がｍｓｙｎｃの間に破壊された場合、ファイルは矛盾した状態のままでいることがある。
【０１４１】
一部の実施形態では、ファイルシステム９０６は、ｍｓｙｎｃでの呼び出しの間にｍｍａｐされたファイルの状態をチェックポイントするように構成される。ファイルをチェックポイントすることは、上記開示されたように、ファイルレベルスナップショット（および／または、領域複製）を生成することを含んでもよい。ファイルレベルスナップショットは、変更が適用される前のファイルの状態を保存するように構成されてもよい。ｍｓｙｎｃが発行されるとき、ｍｓｙｎｃ動作に適用される変更を反映するように別の複製が生成されてもよい。図９Ｂに示されるように、状態９１３Ａでは（ｍｍａｐ動作の前に）、ファイル１は、記憶媒体１４０上でＬＩＤ１０〜１３、および対応する記憶アドレスＰ１〜Ｐ４と関連付けられてもよい。ｍｍａｐ動作に応答して、ファイルシステム９０６は、記憶層１３０のインタフェース１３１を通じて領域複製動作を実行してもよく、それは、ファイル１の複製（ファイル１．１と表される）を生成することを含むことができる。ファイル１．１は、同一のファイルデータ（例えば、同一の記憶アドレスＰ１〜Ｐ４）を参照するＬＩＤ４０〜４３の異なる組と関連付けられてもよい。他の実施形態では、ファイル１は、上記開示されたように、参照マッピング４６０および／または中間変換層を使用して複製されてもよい。
【０１４２】
ｍｓｙｎｃ呼び出しに応答して、ファイルシステム９０６は、別の領域複製動作を実行してもよい（記憶層１３０の使用によって）。状態９１３Ｃに示されるように、ｍｓｙｎｃ動作と関連付けられた領域複製動作は、１つ以上のダーティページ（記憶アドレスＰ５およびＰ６）の内容でファイル１を更新すること、および更新されたファイル１をファイル１．２として複製することを含んでもよい。ファイル１．１は、ｍｓｙｎｃ動作の前のファイルの状態を反映してもよい。したがって、障害の事象では、ファイルシステム９０６は、ファイル１の前の状態を再構築することが可能である。
【０１４３】
上記開示されるように、記憶層１３０は、ファイル一貫性（例えば、本明細書でさらに詳細に開示されるように、クローズツーオープンファイル一貫性）および原子的動作などの、より高レベルの動作を実装するために利用することができる、領域複製および領域結合動作を実装するように構成されてもよい。それらの動作は、ａ）論理アドレス空間１３２の特定の領域を複製すること、ｂ）複製された領域内で記憶動作を実行すること、ならびにｃ）複製された領域を論理アドレス空間１３２の別の部分に選択的に結合および／または組み合わせること、を含んでもよい。本明細書で使用されるように、論理アドレス空間１３２の領域を結合および／または組み合わせることは、とりわけ、範囲のうちの１つにおいて実装される変更を１つ以上の他の範囲に組み込むことによって、２つ以上のＬＩＤ範囲を組み合わせることを指す。結合動作が、異なるＬＩＤ範囲の間の矛盾（ｃｏｎｆｌｉｃｔｓ）を解決するように構成することができる結合ポリシに従って実装されてもよい。結合ポリシは、１つのＬＩＤ範囲のうちの１つの内容が別のＬＩＤ範囲の内容を「上書き」する、「上書き」モード、ＬＩＤ範囲の内容が共に組み合わされる（例えば、論理的ＯＲ演算で）「ＯＲ」モード、および／または１つ以上のＬＩＤ範囲とは別個の独立した複製を生成することによって矛盾が解決されるコピーオンコンフリクト（ｃｏｐｙ−ｏｎ−ｃｏｎｆｌｉｃｔ）モードなどを含んでもよいが、それらに限定されない。上書きモードでは、１つ以上の他のＬＩＤ範囲の内容を上書きするＬＩＤ範囲は、コミット時間（例えば、前の動作を上書きするより最新の動作）、および／または優先度などを含むがそれらに限定されない任意の適切な基準に基づいて判定されてもよい。
【０１４４】
図９Ｃは、記憶層１３０の使用によって実装される領域結合動作の実施形態を示す。図９Ｃの実施形態では、記憶層１３０は、フォワードマッピング１６０内で１つ以上のエントリによって表すことができる、識別子範囲９１４を複製するように構成されてもよい。範囲９１４内のＬＩＤ０７２〜０８３は、記憶アドレス９５〜１０６に結び付けられてもよい。本明細書で開示される領域複製および／または結合動作は、図３Ａ〜Ｅの領域複製および／もしくは移動の実施形態、図４Ａ〜Ｅの参照エントリの実施形態ならびに／または図５Ａ〜Ｂの中間マッピング層の実施形態のうちのいずれかを使用して実装されてもよい。したがって、一部の実施形態では、ＬＩＤ０７２〜０８３は、１つ以上の参照エントリおよび／または中間マッピング層を通じて記憶アドレス９５〜１０６に結び付けられてもよい。
【０１４５】
記憶層１３０は、範囲９１４を複製するように構成されてもよく、それは、状態９４１Ａにおいて示されるように、ＬＩＤ９２４の新たな範囲を記憶アドレス９５〜１０６に結びつけることを含むことができる。範囲９１４および／または９２４は、範囲９１４および９２４が関連付けられる（例えば、記憶アドレスの同一の組に結び付けられる）ことを示すように構成されたそれぞれのメタデータ９８４および／または９９４を含んでもよい。メタデータ９８４および／または９９４は、ＬＩＤ０７２〜０８３を９７２〜９８３にリンクするように構成されてもよく、それによって、ＬＩＤ範囲のうちの１つに関連する修正を、他の範囲におけるＬＩＤと相関付けることができる（例えば、ＬＩＤ９７２と関連して書き込まれたデータを対応するＬＩＤ０７２などと関連付けることができる）。メタデータ９８４および／または９９４は、複製されたＬＩＤ範囲に対する同期ポリシを示してもよく、それは、上記開示されるように、複製の間の割り当て動作が同期されるかを示すことができる。メタデータ９８４および／または９９４はさらに、結合矛盾がどのように管理されるかを指定することができる、結合ポリシを含んでもよく、および／またはそれを参照してもよい。結合ポリシは、記憶層１３０のインタフェース１３１を通じて指定されてもよく、グローバルおよび／もしくはデフォルト結合ポリシに基づいて判定されてもよく、ならびに／または要求パラメータ（例えば、ｆａｄｖｉｓｅ、ｉｏｃｔｒｌなど）を通じて指定されてもよい、などである。複製動作はさらに、上記開示されたように、記憶アドレス９５〜１０６におけるデータをＬＩＤ範囲９７２〜９８３と関連付けるように構成された永続的記号３６６を記憶媒体１４０に追加すること（および／または、更新されたコンテキストフォーマットでデータを再書き込みすること）を含んでもよい。
【０１４６】
記憶層１３０は、１つ以上の記憶クライアント１０６からの記憶要求に応答して、範囲９１４および／また９２４のうちの１つ以上の中で記憶動作を実行してもよい。状態９４１Ｂに示されるように、記憶動作は、ＬＩＤ９７２〜９７３と関連付けられたデータを修正してもよく、それは、識別子９７２〜９７３を記憶アドレス７２１〜７２２の新たな組と関連付けることを含むことができる。状態９４１Ｂの記憶動作に続いて、記憶層１３０は、ＬＩＤ範囲９７２〜９８３を範囲０７２〜０８３と結合する領域結合動作を実行してもよい。領域結合動作は、結合ポリシに従って、ＬＩＤ範囲９２４に関してなされる修正をＬＩＤ範囲９１４に組み込むことを含んでもよい。結合ポリシは、複製された範囲９２４においてなされる修正がソース範囲９１４内でデータを上書きすることを指定してもよい。したがって、状態９４１Ｃで示される結合動作の結果は、ソース範囲９１４のＬＩＤ０７２〜０７３を記憶アドレス７２１〜７２２における修正されたデータに結びつけることを含んでもよい。領域結合動作はさらに、本明細書で開示されるように、複製されたＬＩＤ範囲９７２〜９８３の割り当てを解除すること、記憶アドレス７５６〜７５７におけるデータをＬＩＤ０７２〜０７３と関連付けるように構成された永続的記号３６６を記憶すること、および／または更新されたコンテキストフォーマットで記憶アドレス７２１〜７２２におけるデータを再書き込みすることを含んでもよい。７２１〜７２２における新たなデータによって取り除かれた記憶アドレス９５〜９６に記憶されたデータは、上記開示されたように、無効化されてもよい。
【０１４７】
範囲９１４および／または９２４内で実行される記憶動作は、矛盾をもたらすことがある。一部の実施形態では、ＬＩＤ範囲と関連付けられた結合ポリシは、矛盾を回避（ｐｒｅｅｍｐｔ）してもよい。本明細書でさらに詳細に開示されるように、原子的記憶動作では、記憶層１３０は、原子的記憶動作が１つ以上の対応する範囲において完了される間に１つ以上のＬＩＤ範囲をロックしてもよい。しかしながら、他の実装形態では、記憶層１３０によって、記憶動作が複製された範囲内で同時に実行されることが可能になる。状態９４１Ｄでは、記憶層１３０は、範囲９２４においてＬＩＤ９７２〜９７３および９８２〜９８３と関連付けられたデータを上書きおよび／または修正するように構成された記憶動作を実装してもよい。記憶層１３０は、範囲９１４のＬＩＤ０７２〜０７３と関連付けられたデータを上書きおよび／または修正するように構成された他の記憶動作を実装してもよい。ＬＩＤ０７２〜０７３および９７２〜９７３に関連する記憶動作は、範囲９１４と９２４との間の結合矛盾を生じさせることがある。結合矛盾は、上記開示されたように、結合ポリシに従って解決されてもよい。一部の実施形態では、結合ポリシは、とりわけ、記憶ログにおける記憶動作の相対的順序に基づいて最新の修正を適用することを含んでもよい。他の実装形態では、結合ポリシは、それぞれの記憶動作を要求した記憶クライアント１０６（プロセスおよび／またはアプリケーションなど）の相対的優先度に基づいて矛盾を解決してもよい。別の実装形態では、結合ポリシは、範囲９１４および／または９２４の２つ（またはそれ以上の）バージョンを生成して、異なる、矛盾のバージョンを表すことによって、矛盾を解決してもよい。
【０１４８】
状態９４１Ｅは、ＬＩＤ９７２〜９７３と関連付けられた矛盾する修正の代わりに、ＬＩＤ０７２〜０７３と関連付けられた動作を組み込むように構成された結合動作の結果の一実施形態を示す。したがって、状態９４１Ｅでは、ＬＩＤ０７２〜０７３は、ＬＩＤ９７２〜９７３を参照して実行される記憶動作に対応する記憶アドレス７２１〜７２２ではなく、ＬＩＤ０７２〜０７３を参照して実行される記憶動作に対応する記憶アドレス７５６〜７５７に結び付けられる。
【０１４９】
状態９４１Ｆは、ＬＩＤ０７２〜０７３を参照してなされる矛盾する修正の代わりに、範囲９７２〜９７３の修正を組み込むように構成された結合動作の結果の一実施形態を示す。したがって、状態９４１Ｆでは、識別子０７２〜０７３は、ＬＩＤ０７２〜０７３と関連付けられた記憶アドレス７２１〜７２２ではなく、ＬＩＤ９７２〜９７３を参照して実行される記憶動作に対応する記憶アドレス７２１〜７２２に結び付けられる。
【０１５０】
状態９４１Ｇは、別個の範囲複製またはバージョンを生成することによって結合矛盾を管理するように構成された結合動作の結果の一実施形態を示す。範囲９１４は、識別子９８２〜９８３を参照してなされる矛盾しない修正を組み込んでもよく、および識別子０７２〜０７３に関連する矛盾する記憶動作の結果を保持してもよい（記憶アドレス７２１〜７２２を組み込むのではなく）。他のＬＩＤ範囲９２４は、識別子０７２〜０７３を参照してなされる矛盾する記憶動作の結果を組み込まずに状態９４１Ｄの修正を保持してもよい。状態９４１Ｇは、元の複製されたＬＩＤ範囲０７２〜０８３  ９１４および９７４〜９８１  ９２４を使用した複製を示すが、開示はこの点に限定されず、論理アドレス空間１３２の任意の領域内の範囲複製およびバージョンを生成するように構成されてもよい。状態９４１Ｅ〜Ｇを参照して開示される領域結合動作はさらに、本明細書で開示されるように、記憶アドレス７２１〜７２２、７５６〜７５７、および／もしくは７６７〜７６８に記憶されたデータを、対応するＬＩＤと関連付けるために１つ以上の永続的記号３６６を記憶媒体１４０に追加すること、ならびに／または１つ以上のバックグラウンド記憶動作でデータを再書き込みすることを含んでもよい。
【０１５１】
一部の実施形態では、複製されたＬＩＤ範囲９１４および／または９２４のうちの１つ以上の中での動作は、とりわけ範囲９１４および／もしくは９２４を拡張し、または範囲９１４および／もしくは９２４を縮小させる（ｃｏｎｔｒａｃｔ）などによって、ＬＩＤ範囲９１４および／または９２４を修正することを含んでもよい。範囲９１４および／または９２４のうちの１つを拡張することは、他の範囲への対応する拡張を含んでもよく、そのようにして、割り当て動作は、範囲９１４および９２４の両方に追加ＬＩＤを割り当てることに基づいてもよい。
【０１５２】
本明細書で開示される領域結合動作は、図３Ａ〜Ｅの領域複製および移動の実施形態、図４Ａ〜Ｅの参照エントリの実施形態、ならびに／または図５Ａ〜Ｂの中間マッピングの実施形態のいずれかを使用して実装されてもよい。図９Ｄは、参照マッピング４６０を使用した領域結合動作の実施形態を示す。状態９４３Ａに示されるように、範囲９１４を複製することは、論理アドレス空間１３２にＬＩＤ範囲９２４を割り当てること、範囲９１４および９２４をリンクすること（とりわけ、メタデータ９８４および／もしくは９９４を使用して）、ならびに参照マッピング４６０において範囲９１４および９２４を参照識別子９３４と関連付けることを含んでもよい。領域複製動作はさらに上記開示されたように、参照マッピング４６０における範囲９３４を間接範囲９１４および／または９２４と関連付けるように構成された永続的記号３６６を記憶媒体１４０に記憶することを含んでもよい。参照マッピング４６０内の範囲９３４は、記憶アドレス９５〜１０６に結び付けられてもよい。したがって、範囲９１４および９２４の両方は、同一の記憶アドレスにおける同一のデータを間接的に参照してもよい。
【０１５３】
ＬＩＤ９８２〜９８３に対応するデータを修正するように構成された範囲９２４内での記憶動作は、状態９４３Ｂに示されるように、範囲９２４内で新たなＬＩＤを割り当てること、および新たなローカルエントリ９８２〜９８３を対応する記憶アドレス７６７〜７６８に結びつけることを含んでもよい。範囲９１４および９２４を結合することは、上記開示されたように、結合ポリシに従って、記憶アドレス７６７〜７６８における修正されたデータを範囲９１４に組み込むことを含んでもよい。図９Ｄの実施形態では、状態９４３Ｃの領域結合動作は、参照エントリ９３４を削除すること、および記憶アドレス７６７〜７６８における更新されたデータを参照するように範囲９１４のＬＩＤ０８１〜０８３を更新することを含んでもよい。結合動作はさらに、上記開示されたように、永続的記号３６６を記憶すること、および／または更新されたコンテキストフォーマットで記憶アドレス７６７〜７６８におけるデータを再書き込みすることを含んでもよい。
【０１５４】
図９Ｅは、記憶層１３０によって実装される領域複製および領域結合動作のさらなる実施形態を示す。図９Ｅは、図５Ａ〜Ｂと共に開示されるように、中間アドレス空間を含む実施形態における領域複製および領域結合動作を示す。状態９４７Ａでは、ＶＩＤ０７２〜０８３を含むＶＩＤ範囲９１４は、ＶＡＳフォワードマッピング５６０において中間識別子２７２Ｚ〜２８３Ｚを通じて記憶アドレス９５〜１０６に間接的に結び付けられる。中間識別子は、別個の、中間アドレス空間２１３６（例えば、記憶層１３０の論理アドレス空間１３２）の一部であってもよい。
【０１５５】
状態９４７Ｂに示されるように、ＶＩＤ範囲９１４を複製することは、ＶＩＤ９７２〜９８３を含む新たなＶＩＤ範囲９２４を割り当てること、およびＶＡＳフォワードマッピング５６０において範囲９２４を中間識別子２７２Ｚ〜２８３Ｚと関連付けることを含んでもよい。複製動作はさらに、ＶＩＤ範囲９２４を中間アドレス２７２Ｚ〜２８３Ｚと関連付けるように構成された永続的記号３６６を記憶媒体１４０に記憶することを含んでもよい。記憶動作は、本明細書で開示されるように、ＶＩＤ範囲９１４および／または９２４を参照して実行されてもよい。ＶＩＤ範囲９１４および／または９２４への修正は、それぞれのＶＩＤ範囲９１４および／または９２４と中間アドレス空間２１３６との間の更新されたマッピングにおいて反映されてもよい。状態９４７Ｃでは、ＶＩＤ９８２〜９８３のデータを修正する記憶動作は、ＶＩＤ９８２〜９８３および中間識別子９８４Ｚ〜９８５Ｚと記憶アドレス４５６〜４５７との間の更新されたマッピングにおいて反映される。ＶＩＤ範囲９１４および９２４を結合することは、状態９４７Ｄに示されるように、更新されたデータを参照するように（中間アドレス９８４Ｚ〜９８５Ｚを通じて）範囲９１４のＶＩＤマッピングを更新することを含んでもよい。結合動作はさらに、上記開示されたように、結合矛盾（存在する場合）を解決することを含んでもよい。結合動作はさらに、ＶＩＤ０８２〜０８３を中間アドレス９８４Ｚ〜９８５Ｚと関連付けるために１つ以上の永続的記号３６６を記憶媒体１４０に付加することを含んでもよい。
【０１５６】
一部の実施形態では、記憶層１３０は、本明細書で開示される領域複製、移動、および／または結合動作を利用して、ファイルシステムおよび／またはデータベースなどの記憶クライアント１０６に対するファイル一貫性機能を提供してもよい。図９Ｆを参照して、ファイルシステム９０６は、ネットワークファイルシステム（ＮＦＳ）バージョン３プロトコルならびに／または他のファイルシステムの実装形態および／もしくはプロトコルごとにクローズツーオープンファイル一貫性モデルを実装するために記憶層１３０を利用してもよい。クローズツーオープンファイル一貫性モデルは、複数のプロセスおよび／またはアプリケーション（ファイルシステムクライアント）が同一のファイル上で同時に動作することを可能にするように構成されてもよい。ファイル修正はファイルがクローズされる時にコミットされ、並行してファイル上で動作する他のクライアントは、ファイルがオープンされる次の時まで変更を知らない。したがって、ファイルの状態は、ファイルがオープンされる時に設定され、および他のクライアントによって並行して実装される変更は、ファイルが再オープンされるまでは適用されない。
【０１５７】
一部の実施形態では、ファイルシステム９０６は、有効な（ｗｏｒｋｉｎｇ）、複製された範囲内で修正がなされる間に、記憶層１３０を利用して、ファイル（例えば、一致したバージョンのファイル）の「元の」データを保存してもよい。本明細書で使用されるように、ファイルの「元の」データおよび／または一致したバージョンのファイルを保存することは、ファイルがオープンされた時に対応する状態でファイルデータを維持すること、および／またはファイル修正のログを保持し、ファイル修正からその元の、修正されていない状態を再構築することができること、を指す。
【０１５８】
図９Ｆは、クローズツーオープンファイル一貫性モデルを実装するように構成された記憶層１３０を含むシステム９００Ｆの一実施形態を示す。ファイルシステム９０６（および／または、他の記憶クライアント１０６）は、記憶層１３０を利用して、クローズツーオープンファイル一貫性を効率的に実装してもよい。記憶層１３０は、ａ）「主要な」または「一致した」バージョンのファイル、および「有効な」バージョンのファイルをもたらす、ファイルシステムクライアント９２６Ａ〜Ｎのファイルオープン要求に応答してファイルを複製し、ｂ）有効なバージョンのファイルを参照して記憶動作を実行し、ならびにｃ）ファイルのクローズに応答して、有効なバージョンのファイルを主要なバージョンのファイルに結合するように構成されてもよい。記憶層１３０は、本明細書で開示されるように、１つ以上の領域複製動作においてファイルデータを複製するように構成されてもよい（例えば、図３Ａ〜Ｅ、４Ａ〜Ｅ、および／または５Ａ〜Ｂなどの領域複製の実施形態を使用して）。記憶層１３０はさらに、本明細書で開示されるように、１つ以上の領域結合および／または組み合わせ動作を使用して、有効なバージョンのファイル、および主要なまたは一致したバージョンのファイルを結合するように構成されてもよい。有効なバージョンのファイルは、ファイルが特定の記憶クライアント９２６Ａ〜Ｎによってオープンされた時のファイルの状態を表してもよい。記憶クライアント９２６Ａ〜Ｎは、有効なバージョンのファイルへの排他的なアクセスを有してもよく、そのようにして、有効なバージョンのファイルは、他のクライアント９２６Ａ〜Ｎによってなされるファイル修正から分離されてもよい。記憶層１３０は、ファイルの「主要な」または「一致した」論理インタフェースを参照して、元の、修正されていないファイルデータを維持するように構成されてもよく、それは、記憶動作がファイルの有効な論理インタフェースを参照して実装されている間に、ファイルデータと、一致した論理インタフェースとの間の関連付けを維持することを含むことができる。異なる記憶クライアント９２６Ａ〜Ｎによってなされるファイル修正の間の矛盾は、最終書き込み（例えば、前の書き込みを上書きする時の最終書き込み）、矛盾に関する複製（例えば、別個のバージョンのファイルを生成する）、クライアント９２６Ａ〜Ｎに基づく優先度、アプリケーション、および／またはプロセスなどの、矛盾解決ポリシまたは結合ポリシに従って解決されてもよい。
【０１５９】
図９Ｆの実施形態では、状態９５３Ａでは、変換モジュール１３４は、記憶アドレスＰ０〜Ｐ３における記憶媒体１４０上でファイルのＬＩＤ（ファイルＬＩＤ９５０Ａ）とファイル９５２Ａのデータとの間のマッピング９５１Ａを含む。マッピング９５１Ａは、本明細書で開示されるフォワードマッピング１６０、および／または図５Ａ〜Ｂと共に開示される１つ以上の中間マッピング層を使用して実装されてもよい。
【０１６０】
状態９５３Ｂでは、記憶層１３０は、記憶クライアント（記憶クライアント９２６Ｂ）のファイルオープン要求に応答してファイルを複製するように構成されてもよい。要求は、インタフェース１３１を通じて、明示的な要求および／または要求パラメータ（例えば、ｆａｄｖｉｓｅ、ｉｏｃｔｒｌなど）などとして受信されてもよい。複製動作は、本明細書で開示されるように、有効なバージョンのファイルに対応する「複製された」ファイルＬＩＤ９５０Ｂの新たな組を割り当てること、および複製された識別子９５０Ｂを、主要なバージョンのファイル（論理識別子９５０Ａの元の、または一致する組）のＬＩＤ９５０Ａと同一のファイルデータ９５２Ａと関連付けることを含むことができる、１つ以上の領域複製動作を含んでもよい。領域複製動作はさらに、上記開示されたように、ファイルデータ９５２Ａを主要なファイルＬＩＤ９５０Ａおよび有効なバージョンのファイルＬＩＤ９５０Ｂの両方に関連付ける永続的記号３６６を記憶媒体１４０に記憶することを含んでもよい。
【０１６１】
一部の実施形態では、記憶層１３０および／またはファイルシステム９０６は、記憶クライアント９２６Ｂによって実行されるファイル動作を有効なバージョンのファイル（ＬＩＤ９５０Ｂの有効な組）に向ける（ｄｉｒｅｃｔ）ように構成されてもよい。したがって、記憶クライアント９２６Ｂによってなされる修正は、複製されたファイルＬＩＤ９５０Ｂを参照してなされてもよい。そのような修正は、元の、主要なバージョンのファイルＬＩＤ９５０Ａの状態に影響を与えないことがある。したがって、記憶クライアント９２６Ｂは、元の、主要なバージョンのファイルのＬＩＤ９５０Ａを変更することなく、ＬＩＤ９５０Ｂを参照して有効なバージョンのファイルを修正してもよい。
【０１６２】
状態９５３Ｃでは、記憶クライアント９２６Ｂは、記憶アドレスＰ３に記憶されたファイルのデータを修正する記憶動作を実行しており（記憶層１３０を通じて）、修正されたデータは、記憶アドレスＰ６４における記憶ログに付加されてもよい。それに応答して、変換モジュール１３４は、複製された、有効なバージョンのファイル９５０ＢのＬＩＤを記憶アドレスＰ６４における修正されたファイルデータ９５２Ｂに結びつけるようにマッピング９５１Ｂを更新してもよい。記憶クライアント９２６Ｂによって修正されていない他のＬＩＤは、元の、修正されていないファイルデータ９５２Ａに結び付けられたままであってもよい。記憶層１３０は、主要なバージョンのファイルの識別子９５０Ａと、記憶アドレスＰ０〜３における修正されていないファイルデータ９５２Ａとの間の元のマッピング９５１Ａを保存するように構成される。
【０１６３】
別の記憶クライアント９２６Ｎは、記憶クライアント９２６Ｂがファイルをオープンする前にファイルをオープンする要求を発行してもよい。それに応答して、および状態９５３Ｄに示されるように、記憶層１３０は、主要なファイルの別の複製を生成してもよい（主要なファイル識別子９５０Ａを複製する）。複製されたＬＩＤ（ＦＩＤ９５０Ｃ）は、複製された識別子範囲９５０Ｂを参照して記憶クライアント９２６Ｂにとって修正がなされることなく、ファイルの元の状態に対応してもよい。したがって、複製されたＬＩＤ９５０Ｃは、記憶アドレスＰ０〜３における元の、修正されていないファイルデータ９５２Ａにマッピングされた９５１Ｃであってもよい。記憶クライアント９２６Ｎは、記憶クライアント９２６Ｂと並行して、新たな複製されたファイル識別子範囲９５０Ｃを参照して記憶動作を実行してもよい。クライアント９２６Ｂおよび９２６Ｎによってなされる変更は、そのそれぞれのＬＩＤ範囲９５０Ｂおよび９５０Ｃ内で分離されてもよく、そのようにして、主要なバージョンのファイル（ＬＩＤ９５０Ａおよび／または別の１つ）に適用されてもよい。
【０１６４】
状態９５３Ｅは、記憶クライアント９２６Ｂがファイルをクローズした結果を示す。記憶クライアント９２６Ｂのファイルをクローズする要求に応答して、記憶層１３０は、１つ以上の領域結合動作において、対応する範囲（ＦＩＤ９５０Ｂ）の内容を主要なバージョンのファイル（ＬＩＤ９５０Ａ）に結合するように構成されてもよい。しかしながら、変更は、記憶クライアント９２６Ｎ（ＦＩＤ９５０Ｃ）によって使用されるバージョンのファイルに結合されなくてもよく、記憶クライアント９２６Ｎは、クライアント９２６Ｎがファイルを再オープンするまで修正へのアクセスを有しなくてもよい。修正を組み込むことは、本明細書で開示されるように、１つ以上の領域結合動作を含んでもよい。領域結合動作は、複製されたＬＩＤ範囲９５０Ｂを参照してなされる修正を主要なバージョンのファイルのＬＩＤ範囲９５０Ａに結合するように構成されてもよい。図９Ｆの実施形態では、領域結合動作は、記憶アドレスＰ６４における修正されたファイルデータ９５２Ｂを参照するように主要なファイルＬＩＤ９５０Ａのマッピング９５１Ａを更新することを含む。クライアント９２４Ｂによって修正されていなかったデータは、Ｐ０〜３における元の、修正されていないファイルデータ９５２Ａに結び付けられたままであってもよい。
【０１６５】
本明細書で開示されるように、一部の実施形態では、修正されたファイルデータ９５２Ｂは、記憶アドレスＰ６４における修正されたファイルデータ９５２Ｂを、ＬＩＤ９５０Ｂ（主要なバージョンのファイルと関連付けられたＬＩＤ９５０Ａとは反対に）の１つ以上と関連付けるように構成された永続的メタデータを含んでもよい。したがって、領域結合動作はさらに、ＬＩＤ９５０Ａの範囲の１つ以上を、記憶アドレスＰ６４における修正されたファイルデータ９５２Ｂと関連付けるように構成された永続的記号３６６を記憶媒体１４０に追加することを含んでもよい。記憶アドレスＰ６４におけるデータは、１つ以上のバックグラウンド動作で、更新された永続的メタデータと共に再書き込みされてもよい。ファイルクローズ動作に続いて（および対応する領域結合動作）、変換モジュール１３４は、範囲９５０ＢのＬＩＤを割り当て解除するように構成されてもよい。
【０１６６】
クライアント９２６Ｎは、複製されたファイル識別子９５０Ｃを参照してファイルを修正してもよい。図９Ｇの状態９５３Ｆに示されるように、記憶クライアント９２６Ｎは、クライアント９２６Ｂによって実装される修正と矛盾する１つ以上の動作を実行してもよい。修正は、クライアント９５０Ｂがファイルをクローズする前（クライアント９２６Ｂの修正が、状態９５３Ｅにあるように主要なバージョンのファイルのＬＩＤ９５０Ａに適用される前）に行われてもよい。このようにして、ＬＩＤ９５０Ａは、元の、修正されていないファイルデータ９５２Ａへのマッピングされた９５１Ａであり、記憶クライアント９２６Ｂに割り当てられた範囲９５０Ｂの識別子のうちの１つ以上は、修正されたファイルデータ９５２Ｂにマッピングされ、および記憶クライアント９２６Ｎに割り当てられた範囲９５０Ｃの識別子のうちの１つ以上は、矛盾するファイルデータ９５２Ｃにマッピングされる。修正されていないデータに対応するＬＩＤ９５０Ｂおよび９５０Ｃは、元の、修正されていないファイルデータ９５２Ａを参照することを継続してもよい。
【０１６７】
クライアント９２６Ｂおよび９２６Ｃは、そのそれぞれのファイルを最終的にクローズしてもよく、それは、それぞれのＬＩＤ範囲９５０Ｂおよび９５０Ｃを参照してなされた修正を、主要なバージョンのファイルの範囲９５０Ａに結合することを含むことができる。記憶層１３０は、結合ポリシ９４４に従って、範囲９５０Ｂと９５０Ｃとの間の矛盾を解決するように構成されてもよい。一部の実施形態では、結合ポリシ９４４は、記憶クライアント９２６Ｂおよび９２６Ｃがファイルをクローズした順序に基づいてもよく、最後にクローズされたファイルの修正は、前に適用された修正を上書きしてもよい（例えば、修正が連続してもよい（ｓｅｒｉａｌｉｚｅｄ））。状態９５３Ｇに示されるように、記憶クライアント９５０Ｂは、記憶クライアント９５０Ｃの前にファイルクローズ要求を発行してもよい。クライアント９５０Ｂがファイルをクローズした後、記憶層１３０は、範囲９５０Ｂを参照してなされた修正を、主要なバージョンのファイルの範囲９５０Ａに結合してもよい（図９Ｆの状態９５３Ｅに示されるように）。クライアント９２６Ｃによるファイルのクローズは、図９Ｇの状態９５３Ｇに示されるように、記憶クライアント９５０Ｂによってなされた修正（修正されたデータ９５２Ｂ）の一部を、データ９５２Ｃで上書くことをもたらすことがある。Ｐ３およびＰ６４におけるデータは、それがもはや主要なファイル、または最新の、有効なバージョンのファイルによって参照されないので、記憶媒体１４０から削除するためにマーク付けされてもよい。上記開示されるように、記憶層１３０は、結合ポリシ９４４に基づく優先度などの、他の結合ポリシを実装するように構成されてもよい。結合ポリシに基づく優先度は、記憶クライアント９２６Ｂおよび／または９２６Ｃの相対的優先度に基づいて、矛盾を解決することができる。状態９５３Ｈでは、記憶クライアント９２６Ｃは、記憶クライアント９２６Ｂの後にファイルをクローズしてもよいが、しかしながら、記憶クライアント９２６Ｂの修正が、記憶クライアント９２６Ｃの矛盾する修正よりも高い優先度を有していることを示す結合ポリシ９４４に起因して、記憶クライアント９２６Ｂの修正が保持されてもよい。したがって、主要なバージョンのファイルのＬＩＤ９５０Ａは、記憶クライアント９２６Ｂの修正されたファイルデータ９５２Ｂを参照することを継続してもよく、および記憶クライアント９２６Ｃの矛盾するファイルデータ（Ｐ９６におけるデータ９５２Ｃ）は、Ｐ３における使用されていないファイルデータ９５２Ａに従ってガーベジコレクションのためにマーク付けされてもよい。他の実施形態では、結合ポリシ９４４は、２つの主要なバージョンのファイルを生成することをもたらす、コピーオンコンフリクト（ｃｏｐｙ−ｏｎ−ｃｏｎｆｌｉｃｔ）ポリシを含んでもよい。そのような実施形態では、および状態９５３Ｉに示されるように、記憶層１３０は、記憶クライアント９２６Ｂの修正を主要なファイルに組み込むように構成されてもよく（主要なファイルＬＩＤ９５０Ａを使用して）、および記憶クライアント９２６Ｃの矛盾する修正を新たなバージョンのファイル（ファイル識別子９５０Ｄ）に組み込んでもよい。
【０１６８】
結合ポリシ９４４の特定の実施形態が本明細書で説明されたが、開示はこの点に限定されず、ならびに任意の適切な結合ポリシ９４４を実装および／または組み込んでもよい。結合ポリシ９４４は、記憶層１３０および／またはファイルシステム９０６内で実装されてもよい。一部の実施形態では、記憶層１３０および／またはファイルシステム９０６の結合ポリシ９４４は、記憶層１３０のインタフェース１３１と通じるように構成されてもよい。結合ポリシ９４４は、記憶層１３０を通じて実行される全てのファイル動作に適用されてもよい。代わりに、または加えて、結合ポリシ９４４は、とりわけ、上記開示されたように、ファイルシステムＡＰＩコール、ｆａｄｖｉｓｅ、および／またはｉｏｃｔｒｌなどを通じて、ファイルごと、および／または矛盾ごとをベースに設定されてもよい。
【０１６９】
記憶層１３０はさらに、効率的な原子的記憶動作を実装するように構成されてもよい。図１０は、原子的記憶動作を実装するように構成された記憶層１３０を含むシステム１０００の一実施形態のブロック図である。本明細書で使用されるように、原子的記憶動作は、全体として完全に完了するか、またはロールバックされるかのいずれかの記憶動作を指す。したがって、原子的記憶動作は、部分的に完了することがなく、記憶層１３０は、不完全な原子的記憶動作のデータを無効化および／または削除するように構成されてもよい。原子的記憶動作、特に複数のステップを含み、および／または複数の異なるＬＩＤ範囲もしくはベクトルに関連する原子的記憶動作を実装することは、高いオーバーヘッドコストを課すことがある。例えば、一部のデータベースシステムは、冗長書き込み動作の複数の組を使用して原子的記憶動作を実装する。
【０１７０】
記憶層１３０は、領域複製、領域移動、および本明細書で開示される他の動作を利用して、原子的記憶動作の効率性を増大させることができる原子的記憶モジュール１０３６を含んでもよい。一部の実施形態では、インタフェース１３１は、ベクトル原子的記憶動作を実行するためのＡＰＩおよび／またはインタフェースを提供する。ベクトルは、
【数１】
0006290405.tif 000002
などの、データ構造として定義されてもよい。
【０１７１】
ｉｏｖ＿ｂａｓｅパラメータは、ベクトルのデータを含むメモリまたはバッファ位置を指してもよく、ｉｏｖ＿ｌｅｎは、データバッファの長さまたはサイズを指してもよく、およびｄｅｓｔ＿ｌｉｄは、ベクトルに対する目的論理識別子（ｄｅｓｔｉｎａｔｉｏｎ  ｌｏｇｉｃａｌ  ｉｄｅｎｔｉｆｉｅｒ）を指してもよい（例えば、入力バッファｉｏｖ＿ｌｅｎから暗示および／または導出される範囲の長さを有する基底論理識別子）。
【０１７２】
したがって、１つ以上のベクトルにデータを書き込むベクトル記憶要求は、以下のように定義されてもよい。
【数２】
0006290405.tif 000003
【０１７３】
上記ベクトル書き込み動作は、＊ｉｏｖポインタによって参照され、および／またはベクトルカウントパラメータ（ｉｏｖ＿ｃｎｔ）によって指定されるベクトルデータ構造の各々からデータを収集し、ならびにそれぞれのｉｏｖｅｃｔ構造（例えば、ｄｅｓｔ＿ｌｉｄ）で指定された目的論理識別子にデータを書き込むように構成されてもよい。フラグパラメータは、ベクトル書き込み動作が原子的ベクトル動作として実装されるべきかを指定してもよい。
【０１７４】
上記示されたように、ベクトル記憶要求は、複数のベクトルのうちの各々上で同一の動作を実行することを含んでもよい（例えば、１つ以上の異なるベクトルに関する書き込み動作を暗黙的に実行する）。一部の実施形態では、ベクトル記憶要求は、各々の構成ベクトルに対する異なるＩ／Ｏ動作を指定してもよい。したがって、各々のｉｏｖｅｃｔデータ構造は、それぞれの動作インジケータを含んでもよい。一部の実施形態では、ｉｏｖｅｃｔ構造は以下のように拡張されてもよい。
【数３】
0006290405.tif 000004
【０１７５】
ｉｏｖ＿ｆｌａｇパラメータは、ベクトル上で実行する記憶動作を指定してもよい。ｉｏｖ＿ｆｌａｇは、書き込み、読み出し、原子的書き込み、トリムもしくは破棄要求、削除要求、フォーマット要求、パターン化書き込み要求（例えば、指定されたパターンを書き込む要求）、書き込みゼロ要求もしくは検証要求を伴う原子的書き込み動作、または割り当て要求を含むがそれらに限定されない、任意の適切な記憶動作を指定してもよい。上記説明されたベクトル記憶要求インタフェースは、ベクトル構造を受け付けるように拡張されてもよい。
【数４】
0006290405.tif 000005
【０１７６】
フラグパラメータは、ｖｅｃｔｏｒ＿ｒｅｑｕｅｓｔのベクトル動作が原始的に実行されるかを指定してもよい。原子的記憶動作のさらなる実施形態は、参照によって本明細書に組み込まれる、Ａｓｈｉｓｈ  Ｂａｔｗａｒａらによる２０１２年１２月２１日に出願された「Ｓｙｓｔｅｍｓ，Ｍｅｔｈｏｄｓ，ａｎｄ  Ｉｎｔｅｒｆａｃｅｓ  ｆｏｒ  Ｖｅｃｔｏｒ  Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｏｐｅｒａｔｉｏｎｓ」と題する米国特許出願第１３／７２５，７２８号明細書に開示されている。
【０１７７】
原子的記憶モジュール１０３６は、原子的記憶動作に関連する記憶動作を、予め定められた範囲（「進行中（ｉｎ−ｐｒｏｃｅｓｓ）」範囲１０３２）にリダイレクトするように構成されてもよい。進行中範囲１０３２は、記憶クライアント１０６にアクセス可能でない論理アドレス空間１３２の指定された部分であってもよい。代わりに、進行中範囲１０３２は、別個の名前空間（例えば、参照マッピング４６０および／または他の、中間アドレス空間）で実装されてもよい。原子的記憶動作が進行中範囲１０３２内で完了した後（例えば、構成Ｉ／Ｏベクトルの全てが処理された後）、原子的記憶モジュール１０３６は、原子的記憶要求のデータを進行中範囲１０３２から論理アドレス空間１３２における目的範囲（ｄｅｓｔｉｎａｔｉｏｎ  ｒａｎｇｅ）に移動する原子的領域移動動作を実行してもよい。上記開示されるように、領域移動動作は、単一の永続的記号３６６を記憶媒体１４０に書き込むことを含んでもよい。
【０１７８】
記憶クライアント１０６は、ベクトル１０４０Ａおよび１０４０Ｂに関連する原子的書き込み要求を発行してもよい。図１０に示されるように、原子的記憶動作が実行される前（状態１０１５Ａにおいて）、ベクトル１０４０ＡのＬＩＤ１０〜１３は、記憶アドレスＰ１〜Ｐ４に結び付けられてもよく、およびベクトル１０４０Ｂの識別子３６〜３８は、記憶アドレスＰ６〜８に結び付けられてもよい。状態１０１５Ｂに示されるように、原子的記憶モジュール１０３６は、原子的記憶動作を進行中範囲１０３２にリダイレクトするように構成されてもよい。上記開示されるように、進行中範囲１０３２は、論理アドレス空間１３２の指定された領域を含んでもよく、および／または別個の名前空間内で実装されてもよい。進行中範囲１０３２内のベクトル１０４２Ａは、ベクトル１０４０ＡのＬＩＤ１０〜１３に対応してもよく、および進行中ベクトル１０４２Ｂは、ベクトル１０４０ＢのＬＩＤ３６〜３８に対応してもよい。ベクトル１０４２Ａおよび１０４２Ｂは、論理アドレス空間１３２において対応するベクトル１０４０Ａおよび１０４０Ｂ（および／または、フォワードマッピング１６０において対応するエントリ）を参照するように構成されたメタデータを含んでもよい。状態１０１５Ｂにおいて原子的記憶動作を実装することは、進行中ベクトル１０４２Ａおよび１０４２Ｂの識別子Ｚ０〜Ｚ３および／またはＺ６〜Ｚ６に関連して記憶媒体１４０にデータを付加することを含んでもよい。他の記憶動作は、原子的ベクトル動作と同時に実行されてもよく、および／または進行中範囲１０３２内の原子的ベクトル動作内でインタリーブされてもよい。
【０１７９】
原子的記憶動作が完了の前に失敗した場合、ベクトル１０４０Ａおよび１０４０Ｂの元のデータが影響を受けないことがある。再構築の間、進行中エントリと関連付けられたデータ（Ｐ９〜Ｐ１３および／またはＰ１００〜Ｐ１０２におけるデータ）は、不完全な原子的記憶動作の一部として識別されてもよく（進行中範囲１０３２の識別子との関連付けに起因して）、およびデータが削除されてもよい。
【０１８０】
図１０に示されるように、状態１０１５Ｂでは、原子的記憶動作が完了してもよく、それは、上記開示されたように、進行中範囲１０３２の識別子と関連して記憶媒体１４０にデータを付加することを含むことができる。原子的記憶要求の完了は、進行中ベクトル１０４２Ａおよび１０４２Ｂに書き込まれたデータの論理インタフェースを、論理アドレス空間１３２に対応するように修正する領域移動動作を実行することを含んでもよい。領域移動動作は、記憶アドレスＰ９〜Ｐ１３をＬＩＤ１０〜１３およびＰ１００〜１０２からＬＩＤ３６〜３８に結び付けるために、永続的記号３６６を記憶媒体１４０に記憶する原子的記憶動作を実行することを含んでもよい。領域移動動作は、図４Ａ〜Ｅの参照エントリの実施形態および／または図５Ａ〜Ｂの中間マッピングの実施形態を含むがそれらに限定されない他の方法で実装されてもよい。
【０１８１】
図１１は、不揮発性記憶媒体にコンテキストフォーマットで記憶されたデータの論理インタフェースを管理する方法１１００の一実施形態のフローチャートである。
【０１８２】
ステップ１１２０は、不揮発性記憶媒体にコンテキストフォーマットで記憶されたデータの論理インタフェースを修正するステップを含んでもよい。論理インタフェースは、複製動作、重複排除動作、または移動動作などを含んでもよいが、それらに限定されない、データ上での動作を実行したことに応答して、ステップ１１２０において修正されてもよい。要求は、記憶クライアント１０６または記憶層１３０（例えば、重複排除モジュール３７４）などから発してもよい。
【０１８３】
論理インタフェースを修正することは、データと関連付けられたＬＩＤを修正することを含んでもよく、それは、１つ以上の追加ＬＩＤ（例えば、複製、重複排除など）を使用してデータを参照すること、またはデータ（例えば、移動）と関連付けられたＬＩＤを変更すること、などを含んでもよいが、それらに限定されない。修正された論理インタフェースは、上記説明されたように、記憶媒体１４０上のデータのコンテキストフォーマットと一致しないことがある。
【０１８４】
ステップ１１２０はさらに、論理インタフェースへの修正を識別する永続的記号を記憶媒体１４０に記憶するステップを含んでもよい。永続的記号は、論理動作を永続的およびクラッシュセーフにするために使用されてもよく、それによって、データの修正された論理インタフェース（例えば、記憶メタデータ１３５）を記憶媒体１４０の内容から再構築することができるようになる（必要な場合）。ステップ１１２０はさらに、論理インタフェースが修正されたことを確認応答してもよい（例えば、ＡＰＩコールから返し、または明確な確認応答を返す、など）。確認応答（およびステップ１１３０における修正された論理インタフェースを通じたアクセス）は、データのコンテキストフォーマットが記憶媒体１４０上で更新される前に行われる。したがって、論理動作は、本明細書で開示されるように、データが再書き込みおよび／または移動されるまで待たなくてもよく、データのコンテキストフォーマットを更新することは延期されてもよく、かつ／あるいは方法１１００の「クリティカルパス」ならびに／または他の記憶動作および／もしくは要求をサービスする経路の外での処理で実装されてもよい。
【０１８５】
ステップ１１３０は、ステップ１１２０の修正された論理インタフェースを通じて一致しないコンテキストフォーマットでデータへのアクセスを提供するステップを含んでもよい。上記説明されたように、修正されたコンテキストインタフェースと一致することになるデータのコンテキストフォーマットを更新することは、不揮発性記憶媒体上でデータを再書き込みおよび／または移動することを含んでもよく、それは、ステップ１１２０の動作および／または修正された論理インタフェースに関連する他の記憶動作上で追加の待ち時間をかけることがある。したがって、記憶層１３０は、データのコンテキストフォーマットが更新されている間に（または、その前に）、一致しないコンテキストフォーマットでデータへのアクセスを提供するように構成されてもよい。ステップ１１３０においてデータへのアクセスを提供することは、上記説明されたように、データに対応する１つ以上の参照エントリを参照および／またはそれにリンクする（１つ以上の間接エントリを介して）を含んでもよい。
【０１８６】
ステップ１１４０は、ステップ１１２０の修正された論理インタフェースと一致することになる記憶媒体１４０上のデータのコンテキストフォーマットを更新するステップを含んでもよい。ステップ１１４０は、記憶媒体１４０上でデータを別の媒体記憶位置に再書き込みおよび／または移動するステップを含んでもよい。上記説明されたように、ステップ１１４０は、ステップ１１２０のクリティカルパスの外にあるプロセス、および／または記憶層１３０によって実行される他の記憶要求を使用して実装されてもよく、ステップ１１４０は、媒体管理モジュール３７０または重複排除モジュール３７４などの、別の、自立的モジュールによって実装されてもよい。したがって、データのコンテキストフォーマットは、サービスする他の記憶動作および／または要求とは独立して更新されてもよい。このようにして、ステップ１１４０は、データのコンテキストフォーマットの即時的な更新を遅延させること、および媒体管理処理などの１つ以上の「バックグラウンド」処理で、データのコンテキストフォーマットを更新することを含んでもよい。代わりに、または加えて、データのコンテキストフォーマットを更新することは、他の記憶動作に応答して（例えば、それに従って）行われてもよい。例えば、データを修正する後続要求によって、不適切に、かつ更新されたコンテキストフォーマットでデータが再書き込みされてもよい。
【０１８７】
ステップ１１４０はさらに、記憶メタデータ１３５を、更新されるデータのコンテキストフォーマットとして更新するステップを含んでもよい。データが更新されたコンテキストフォーマットで再書き込みおよび／または移動されるので、記憶層１３０は、記憶メタデータ１３５（例えば、フォワードマッピング１６０）を更新することができる。更新は、上記説明されたように、参照マッピング４６０において参照エントリへの１つ以上のリンクを削除すること、および／または間接エントリをローカルエントリと置き換えることを含んでもよい。ステップ１１４０はさらに、上記開示されたように、データのコンテキストフォーマットを更新したことに応答して記憶媒体１４０から永続的記号を無効化および／もしくは削除すること、ならびに／または記憶メタデータ１３５を持続させることを含んでもよい。
【０１８８】
図１２は、不揮発性記憶媒体にコンテキストフォーマットで記憶されたデータの論理インタフェースを管理する方法１２００の別の実施形態のフローチャートである。方法１２００は、本明細書で開示されるように、記憶層１３０の１つ以上のモジュールおよび／またはコンポーネントによって実装されてもよい。
【０１８９】
ステップ１２２０は、消去ブロックまたは論理消去ブロックなどの、復元のための記憶区画を選択するステップを含む。上記説明されたように、ステップ１２２０の選択は、利用可能な記憶容量がないこと、特定の論理消去ブロック内で無効としてマーク付けされたデータの割合が閾値に到達することを検出すること、有効なデータの連結（ｃｏｎｓｏｌｉｄａｔｉｏｎ）、閾値に到達する誤り検出率、データ分散を改善すること、またはデータリフレッシュなどの、幾つかの異なる因子に基づいてもよい。代わりに、または加えて、ステップ１２２０の選択基準は、上記説明されたように、記憶区画がその対応する論理インタフェースと一致しないコンテキストフォーマットにあるデータを含むかを含んでもよい。
【０１９０】
上記開示されるように、記憶区画を復元（または再要求）することは、不揮発性記憶媒体上で記憶区画を消去すること、およびその有効なデータ（存在する場合）を他の記憶位置に移動することを含んでもよい。ステップ１２３０は、調整動作で移動されることになるデータのコンテキストフォーマットが更新されるべきか（例えば、データの論理インタフェースと一致しない）を判定するステップを含んでもよい。ステップ１２３０は、上記説明されたように、フォワードマッピング１６０、参照マッピング４６０、および／または中間アドレス空間などの、記憶メタデータ１３５にアクセスして、データの永続的メタデータ（例えば、論理インタフェースメタデータ）がデータの記憶メタデータ１３５と一致するかを判定するステップを含んでもよい。永続的メタデータが記憶メタデータ１３５（例えば、上記説明されたように、データを異なるＬＩＤと関連付ける）と一致しない場合、フローはステップ１２４０において継続し、それ以外の場合、フローはステップ１２５０において継続する。
【０１９１】
ステップ１２４０は、データの論理インタフェースと一致することになるデータのコンテキストフォーマットを更新するステップを含んでもよい。ステップ１２４０は、上記説明されたように、ＬＩＤ（および／または、参照エントリ）の異なる組を参照するように論理インタフェースメタデータを更新するステップを含んでもよい。
【０１９２】
ステップ１２５０は、上記説明されたように、不揮発性記憶媒体上で実行される記憶動作の順序付けられたシーケンスを保存する、ログフォーマットで異なる記憶位置にデータを移動するステップを含む。したがって、移動されたデータ（更新されたコンテキストフォーマットで）は、記憶メタデータ１３５を再構築するとき（必要な場合）の有効かつ最新バージョンのデータとして識別されてもよい。ステップ１２５０はさらに、本明細書で開示されるように、データの論理インタフェースをデータの新たな媒体記憶位置に結び付け、および一致しないコンテキストフォーマットでのデータへの間接的かつ参照エントリを削除するように記憶メタデータ１３５を更新するステップを含んでもよい。
【０１９３】
図１３は、コンテキストフォーマットで記憶されたデータの論理インタフェースを管理する方法１３００の別の実施形態のフローチャートである。ステップ１３１５は、１つ以上の記憶装置１２０上で重複データを識別するステップを含んでもよい。ステップ１３１５は、記憶層１３０内で動作する重複排除モジュール３７４によって実行されてもよい。代わりに、ステップ１３２０は、実行される記憶動作として記憶層１３０によって実行されてもよい。
【０１９４】
ステップ１３１５は、記憶媒体１４０が重複データを含むこと（または、書き込みおよび／もしくは修正要求のデータを既に含むこと）を判定および／または検証するステップを含んでもよい。したがって、ステップ１３２０は、記憶動作の経路内で（例えば、重複データが記憶媒体１４０に書き込まれる時、またはその前）に行われてもよく、および／またはサービスする記憶動作（例えば、重複データが記憶媒体１４０に既に記憶されているかを識別する）の経路の外で行われてもよい。ステップ１３２０は、記憶メタデータ１３５において、データシグニチャを生成および／または維持するステップ、ならびに重複データを識別するためにシグニチャを使用するステップを含んでもよい。
【０１９５】
ステップ１３１５において重複データを識別したことに応答して、記憶層１３０（または、重複排除モジュール３７４などの他のモジュール）は、データの複製の論理インタフェースを修正してもよく、それによって、単一の複製が、ＬＩＤの２つの組（またはそれ以上）によって参照されてもよい。ステップ１３２０における論理インタフェースへの修正は、上記説明されたように、記憶メタデータ１３５を更新すること、および／または不揮発性記憶媒体１３５に永続的記号を記憶することを含んでもよい。ステップ１３２０はさらに、上記説明されたように、不揮発性記憶媒体上でデータの他の複製を無効化および／または削除するステップを含んでもよい。
【０１９６】
記憶媒体１４０上のデータのコンテキストフォーマットは、修正された論理インタフェースと一致しないことがある。したがって、ステップ１３３０および１３４０は、上記説明されたように、修正された論理インタフェースを通じて一致しないコンテキストフォーマットでデータへのアクセスを提供するステップ、および記憶媒体１４０上でデータのコンテキストフォーマットを更新するステップを含んでもよい。
【０１９７】
図１４は、本明細書で開示される記憶層１３０によって実装される領域結合動作の一実施形態のフローチャートである。ステップ１４１０は、論理アドレス空間１３２内でＬＩＤの組を複製するステップを含んでもよい。ＬＩＤを複製することは、ＬＩＤの２つ以上の異なる組を通じて記憶媒体１４０上のデータの同一の組（例えば、同一の記憶位置および／または記憶アドレス）を参照することを含んでもよい。２つ以上の組は、ＬＩＤの有効な組およびＬＩＤの元の、一貫性の組を含んでもよい。ＬＩＤの有効な組は、ファイル修正動作を実行するために使用されてもよく、およびＬＩＤの元の、一貫性の組は、データの元の、修正されていない状態を維持するように構成されてもよい。
【０１９８】
上記開示されるように、ステップ１４１０において複製されたデータは、記憶媒体１４０上でデータの記憶位置に結び付けることができる、ＬＩＤの組によって参照されてもよい。ステップ１４１０は、論理アドレス空間１３２内で、および／または別個のアドレス空間内でＬＩＤの１つ以上の他の組を割り当てるステップを含んでもよい。ＬＩＤの１つ以上の他の組は、ＬＩＤの元の組の論理容量に等しい（例えば、同一の数のＬＩＤを含み、および／または同一の量の記憶容量に対応する）論理容量を含んでもよい。ステップ１４１０はさらに、ＬＩＤの１つ以上の他の組の論理識別子を、ＬＩＤの元の組によって参照される同一のデータと関連付けおよび／または結びつけるステップを含んでもよい。したがって、ステップ１４１０は、データをＬＩＤの２つ以上の異なる組に関連付けるように、データへの論理インタフェースを修正するステップを含んでもよい。一部の実施形態では、ステップ１４１０は、論理アドレス空間１３２内でＬＩＤの１つ以上の組を割り当てるステップ、およびＬＩＤを記憶アドレスの同一の組に結び付けるステップを含む。代わりに、または加えて、ステップ１４１０は、図４Ａ〜Ｅと共に開示されるように、参照マッピング４６０内で１つ以上の参照エントリを生成して、１つ以上の参照エントリを通じてＬＩＤの２つ以上の異なる組のＬＩＤを記憶アドレスにリンクするステップを含んでもよい。代わりに、ステップ１４１０は、１つ以上の中間マッピング層の使用によって実装されてもよい（例えば、図５Ａ〜Ｂと共に開示されるように）。ステップ１４１０はさらに、とりわけ、ＬＩＤと関連付けられたメタデータ９８４および／または９９４を通じてＬＩＤの２つ以上の組をリンクするステップを含んでもよい。メタデータ９８４および／または９９４は、ＬＩＤの組が同一の記憶エンティティ（例えば、同一のファイルのバージョン）の複製を表すことを示すように構成されてもよい。メタデータ９８４および／または９９４はさらに、上記開示されたように、ＬＩＤの２つ以上の組に対する結合ポリシを指定および／または参照するように構成されてもよい。
【０１９９】
ステップ１４１０はさらに、ステップ１４１０の複製動作を永続的およびクラッシュセーフにするように構成された永続的記号３６６を記憶媒体１４０に記憶するステップを含んでもよい。永続的記号３６６は、データの修正された論理インタフェース（例えば、データをＬＩＤの２つ以上の組と関連付ける）を示し、および複製動作の結合ポリシを示す、などのように構成されてもよい。
【０２００】
ステップ１４２０は、ステップ１４１０の異なるＬＩＤ範囲のうちの１つ以上の中で記憶動作を実行するステップを含んでもよい。記憶動作は、１つ以上の記憶クライアント１０６からインタフェース１３１を通じて受信される要求に応答して実行されてもよい。記憶動作は、データを記憶媒体１４０に付加することを含んでもよい。したがって、記憶動作は、１つ以上のＬＩＤの組におけるＬＩＤと記憶媒体１４０上の記憶位置との間の関連付けおよび／または結びつけを修正することを含んでもよい。関連付けおよび／または結びつけを修正することはさらに、１つ以上のＬＩＤの組におけるＬＩＤを、付加されたデータに、直接、ならびに／または１つ以上の間接参照および／もしくはマッピング層を通じてマッピングすることを含んでもよい。
【０２０１】
ステップ１４３０は、上記開示されたように、ＬＩＤの組を結合するステップを含んでもよい。ＬＩＤの組を結合することは、上記開示されたように、ＬＩＤ範囲の１つにおいてなされた修正を、ＬＩＤの組のうちの１つ以上に組み込むことを含んでもよい。ステップ１４３０はさらに、結合ポリシに従って、１つ以上の結合矛盾を解決することを含んでもよい。一部の実施形態では、結合することは、ＬＩＤの組の１つ以上を削除（例えば、無効化）することを含んでもよく、それは、フォワードマッピング１６０からエントリを削除すること、参照カウントデータ構造から記憶位置への共有された参照を削除すること、参照マッピング４６０から参照エントリを削除すること、および／または中間マッピング層において参照を削除すること、などを含むことができる。ステップ１４３０はさらに、上記開示されたように、結合されたデータの論理インタフェースを修正するステップを含んでもよい。修正された論理インタフェースは、ＬＩＤの組の１つ以上を参照して元から記憶されていたデータを参照するために使用されるＬＩＤを更新してもよい。修正された論理インタフェースは、記憶媒体１４０上のデータのコンテキストフォーマットと一致しないことがある。したがって、ステップ１４３０は、結合されたデータを、データの更新された論理インタフェースと関連付ける（例えば、第２の組のＬＩＤと関連して元から記憶されているデータを第１の組のＬＩＤと関連付ける）１つ以上の永続的記号３６６を記憶媒体１４０に追加するステップを含んでもよい。ステップ１４３０はさらに、上記開示されたように、一致しないコンテキストフォーマットでデータへのアクセスを提供するステップ、および／または１つ以上のバックグラウンド動作でデータのコンテキストフォーマットを更新するステップを含んでもよい。
【０２０２】
図１５は、領域結合動作のための方法１５００の別の実施形態のフローチャートである。ステップ１５２０は、ＬＩＤ範囲の論理複製を生成する要求を受信するステップを含んでもよい。要求は、インタフェース１３１を通じて記憶クライアント１０６から受信されてもよく、および／または記憶層１３０によって提供されるより高レベルのＡＰＩの一部であってもよい。要求は、全くない場合に複製がどのように同期されるか、複製がどのように行われるか（結合ポリシ）、および論理複製が一時的なものとして指定されるか、などを含むことができるがそれらに限定されない、複製の「動作モード」を含んでもよい。
【０２０３】
ステップ１５３０は、論理アドレス空間１３２においてＬＩＤを割り当てて、要求をサービスするステップを含んでもよい。ステップ１５３０の割り当てはさらに、複製されたＬＩＤ範囲への変更に適合する物理記憶空間を予約するステップを含んでもよい。物理記憶空間の予約は、複製の動作モードに基づいてもよい。例えば、全ての変更が複製と元のアドレス範囲との間で同期されることになる場合、物理記憶空間のごく一部（存在する場合）が予約されてもよい。代わりに、記憶層１３０は、コピーオンコンフリクト結合ポリシを有する論理複製動作に対する追加の物理記憶容量を予約してもよい。ステップ１５３０はさらに、論理アドレス空間１３２の指定された部分またはセグメント（例えば、論理複製および／または複製動作での使用に専用の範囲）内で複製を割り当てるステップを含んでもよい。したがって、ステップ１５３０は、ＬＩＤの第２の、異なる組を割り当てて、ＬＩＤの第１の組を複製するステップを含んでもよい。
【０２０４】
ステップ１５４０は、ステップ１５３０において割り当てられた複製されたＬＩＤと共に、データに結び付けられる元のＬＩＤの両方を参照するように、複製に対応するデータの論理インタフェースを更新するステップを含んでもよい。ステップ１５４０は、上記開示されたように、永続的記号３６６を記憶媒体１４０に記憶するステップを含んでもよい。
【０２０５】
ステップ１５５０は、記憶要求を受信するステップ、ならびに記憶要求が第１の組および／または第２の組のＬＩＤ（複製されたＬＩＤ範囲）に関連するかを判定するステップを含む。そうである場合、フローはステップ１５６０において継続し、その他の場合、フローはステップ１５５０に残る。
【０２０６】
ステップ１５６０は、他の関連付けられたＬＩＤ範囲上で何の動作が行われるか（存在する場合）を判定する（例えば、割り当て動作を同期するなど）ステップを含んでもよい。ステップ１５６０の判定は、複製の同期ポリシを含むことができ、および／または参照することができる、メタデータ９８４および／または９９４にアクセスすることを含んでもよい。
【０２０７】
ステップ１５７０は、要求された記憶動作に従って、ステップ１５６０において判定された動作（存在する場合）を実行するステップを含んでもよい。同期動作のうちの１つ以上を実行することができない場合（例えば、複製のうちの１つ以上に対する追加の論理アドレス空間１３２を割り当てることができない場合）、内在する記憶動作が失敗することがある。
【０２０８】
図１６は、領域複製および／または領域結合動作を実装するための方法１６００の別の実施形態のフローチャートである。ステップ１６１０は、上記開示されたように、ＬＩＤ範囲を複製するステップを含んでもよい。ステップ１６１０は、それぞれの記憶アドレスにおいて記憶媒体１４０に記憶されたデータと関連付けられたＬＩＤの組を複製するステップを含んでもよい。したがって、ステップ１６１０は、ＬＩＤの２つ以上の異なる組を記憶位置の同一の組（例えば、同一のデータ）と関連付けるステップを含んでもよい。ステップ１６１０はさらに、上記開示されたように、１つ以上の永続的記号３６６を記憶媒体１４０に記憶するステップ、および／または更新されたコンテキストフォーマットでデータを再書き込みするステップを含んでもよい。ステップ１６１０は、とりわけ、メタデータ９８４および／または９９４を通じてＬＩＤのうちの２つ以上の組をリンクするステップを含んでもよい。メタデータ９８４および／または９９４は、上記開示されたように、複製同期ポリシおよび／または結合ポリシなどを含んでもよく、および／またはそれらを参照してもよい。
【０２０９】
ステップ１６２０は、２つ以上の複製されたＬＩＤ範囲のうちの１つ以上を参照して記憶動作を実行するステップを含んでもよい。ステップ１６２０は、複製された範囲の間の割り当て動作を同期するステップを含んでもよい。ステップ１６２０の記憶動作は、データを記憶媒体１４０に付加すること、および／または付加されたデータを異なるＬＩＤ範囲のうちの１つ以上のＬＩＤと関連付けることを含んでもよい。
【０２１０】
ステップ１６３０は、ステップ１６１０の２つ以上のＬＩＤ範囲を結合する要求を受信するステップを含む。結合要求は、インタフェース１３１を通じて受信されてもよく、および／または原子的記憶動作などの、別の、より高レベルの動作の一部であってもよい。
【０２１１】
ステップ１６４０は、ＬＩＤの２つ以上の組（存在する場合）の間の結合矛盾を識別するステップを含んでもよい。結合矛盾を識別することは、２つ以上の複製されたＬＩＤ範囲のうちの２つ以上の中で修正されているＬＩＤを識別することを含んでもよい。図９Ｃを再度参照して、ステップ１６４０は、範囲９２４における対応するＬＩＤ９７２〜９７３にあったように、範囲９１４におけるＬＩＤ０７２〜０７３が修正されたことに応答と判定したことに応答して、状態９４１Ｄにおける結合矛盾を識別するステップを含んでもよい。このようにして、ステップ１６４０は、ＬＩＤの複製内での修正を比較して、矛盾する修正が結合動作における同一のＬＩＤにマッピングするケースを識別するステップを含んでもよい。
【０２１２】
ステップ１６５０は、ステップ１６４０において識別された結合矛盾を解決するステップを含んでもよい。ステップ１６５０は、上記開示されるように、どのように結合矛盾が解決されるかを判定することができる、適用可能な結合ポリシを判定するステップを含んでもよい。結合ポリシは、どのバージョンのＬＩＤが、結合されたＬＩＤ範囲に含まれるか、および／またはＬＩＤ範囲の別個の複製を維持することによって矛盾が解決されるかを指定することができる。ステップ１６５０はさらに、上記開示されたように、解決された結合矛盾に従ってＬＩＤ範囲を結合するステップを含んでもよい。
【０２１３】
図１７は、本明細書で開示される記憶層１３０を使用してオープンツークローズファイル一貫性を実装するための方法１７００の一実施形態のフローチャートである。ステップ１７１０は、ファイルのデータに対応するＬＩＤ範囲を複製するステップを含んでもよい。上記開示されるように、ファイルシステム９０６（および／または、他の記憶クライアント１０６）は、記憶層１３０を利用して、クローズツーオープンファイル一貫性モデルを実装するように構成されてもよい。したがって、ステップ１７１０は、ファイルをオープンする、ファイルシステム９０６からの要求に応答して、および／またはクライアントからの要求に応答して実行されてもよい。ステップ１７１０は、ＬＩＤの２つ以上の異なる組を通じてファイルデータの記憶位置を参照するようにファイルデータの論理インタフェースを修正するステップを含んでもよい。ＬＩＤの２つ以上の異なる組は、ＬＩＤの有効な組、および元の、一貫性の組を含んでもよい。したがって、ＬＩＤの元の、一貫性の組は、主要なバージョンのファイルに対応してもよく、およびＬＩＤの有効な組は、クライアントによって使用されるファイルの有効な複製に対応してもよい。有効な複製は、他の記憶クライアントによってなされる同時ファイル修正（ステップ１７１０においてクライアントがファイルをオープンした後になされた修正）から分離してもよい。同様に、論理識別子の有効な組における論理識別子を参照してなされた修正は、ＬＩＤのファイル有効な組が他のＬＩＤ組と結合されるまで（例えば、ファイルをクローズしたことに応答して）、ＬＩＤの元の、一貫性の組（主要なバージョンのファイル）に反映されなくてもよい。ステップ１７１０の領域複製動作は、図３Ａ〜Ｅの複数の参照の実施形態、図４Ａ〜Ｅの参照インデックスの実施形態、および／または図５Ａ〜Ｂの中間マッピング層の実施形態を含む、本明細書で開示される領域複製の実施形態のいずれかを使用して実行されてもよい。ステップ１７１０はさらに、ファイルオープン動作を要求した記憶クライアント１０６など、記憶クライアント１０６にＬＩＤの組のうちの１つ以上を提供するステップを含んでもよい。記憶クライアントは、ＬＩＤの有効な組が設けられてもよい。代わりに、または加えて、記憶層１３０は、記憶クライアント１０６に、ＬＩＤの元の、一貫性の組（または、他の組）を提供してもよく、および記憶層１３０は、記憶クライアント１０６の記憶要求をＬＩＤの有効な組にリダイレクトしてもよい。
【０２１４】
ステップ１７２０は、ＬＩＤの有効な組内で記憶動作を実行するステップを含んでもよい。記憶動作は、ファイルを修正するように構成された１つ以上のデータセグメント（例えば、ファイルの１つ以上の元の、修正されていないデータセグメントを修正および／または上書きするように構成されたデータセグメント）を記憶媒体１４０に記憶することを含んでもよい。記憶動作はさらに、本明細書で開示されるように、ＬＩＤの有効な組におけるＬＩＤのうちの１つ以上を、更新された記憶位置および／またはアドレスに結び付けることを含んでもよい。ファイルの修正されていないデータに関連する有効な組内のＬＩＤは、元の記憶アドレスに結び付けられたままであってもよい（ＬＩＤの元の、一貫性の組と同一の記憶位置に結び付けられたまま）。
【０２１５】
ステップ１７２２は、上記説明されたように、元の、修正されていないバージョンのファイル、および元の、一貫性の組のＬＩＤへの参照による対応するファイルデータへのアクセスを提供するステップを含んでもよい。ステップ１７２２はさらに、とりわけ、ステップ１７１０にあるようなファイルＬＩＤの別の複製を生成することによって、他のクライアントがファイルをオープンすることを可能にするステップを含んでもよい。
【０２１６】
ステップ１７３０は、上記開示されたように、ＬＩＤの有効な組を、ＬＩＤの元の、一貫性の組など、別のＬＩＤ範囲に結合するステップを含んでもよい。ステップ１７３０は、クライアントがファイルをクローズしたことに応答して実行されてもよい。ステップ１７３０はさらに、上記開示されたように、結合矛盾を識別および解決するステップを含んでもよい。結合矛盾を解決することは、複製されたＬＩＤ範囲のうちの１つ以上でなされた修正に優先することを含んでもよい。一部の実施形態では、例えば、ステップ１７１０において生成されたＬＩＤの有効な組に対応する修正は、異なる記憶クライアント１０６のＬＩＤの異なる有効な組を参照してなされた修正に優先してもよく、またはそれによって優先されてもよい。結合矛盾を解決することは、ＬＩＤ範囲を分岐させて（ｆｏｒｋ）、ＬＩＤの有効な組を参照してなされた修正に対応する第１のＬＩＤ範囲と、ＬＩＤの異なる有効な組において別の記憶クライアントによってなされた矛盾する修正に対応する別のＬＩＤ範囲とを生成することを含んでもよい。ＬＩＤ範囲を結合することはさらに、上記開示されたように、永続的記号３６６を記憶媒体１４０に記憶すること、データのコンテキストフォーマットと一致しない論理インタフェースを通じて記憶媒体１４０に記憶されたデータへのアクセスを提供すること、および／または更新されたコンテキストフォーマットでデータを再書き込みすることを含んでもよい。
【０２１７】
種々の例示的な実施形態を参照してこの開示がなされてきた。しかしながら、当業者は、本開示の範囲から逸脱することなく、例示的な実施形態に変更および修正をなしてもよいことを理解するであろう。例えば、種々の動作ステップと共に、動作ステップを実行するコンポーネントは、特定の用途の依存した代替的な方法で、またはシステムの動作と関連付けられた任意の数の費用関数を考慮した代替的な方法で実装されてもよい（例えば、ステップのうちの１つ以上が削除、修正、または他のステップと組み合わされてもよい）。したがって、この開示は、限定的な意味ではなく、例示的なものとして見なされることになり、および全てのそのような修正はその範囲内に含まれると意図される。同様に、利点、他の有利点、および課題を解決する手段が種々の実施形態に関して上記説明されてきた。しかしながら、利点、有利点、課題を解決する手段、および任意の利点、有利点、または解決手段を行わせ、かつより明確にさせることができる任意の要素は、重要な、要求され、または必須の特徴または要素と解釈されるべきでない。本明細書で使用されるように、用語「含む（ｃｏｍｐｒｉｓｅｓ）」、「含む（ｃｏｍｐｒｉｓｉｎｇ）」、および任意のそれらの他の変形は、非排他的な包含をカバーすることを意図され、それによって、処理、方法、項目、または要素のリストを含む装置は、それらの要素を含むだけでなく、明確に記載されていない他の要素、またはそのような処理、システム、項目、または装置に継承される他の要素を含んでもよい。また、本明細書で使用されるように、用語「結合される（ｃｏｕｐｌｅｄ）」、「結合する（ｃｏｕｐｌｉｎｇ）」、および任意のそれらの他の変形は、物理接続、電子的接続、磁気的接続、光学的接続、通信接続、機能的接続、および／または任意の他の接続をカバーすることを意図される。
【０２１８】
加えて、当業者は、本開示の原理が記憶媒体に具体化された機械可読プログラムコード手段を有する機械可読記憶媒体上のコンピュータプログラム製品において反映されてもよいことが理解されよう。磁気記憶装置（ハードディスクおよびフロッピーディスクなど）、光学式記憶装置（ＣＤ−ＲＯＭ、ＤＶＤ、およびブルーレイディスクなど）、ならびに／またはフラッシュメモリなどを含む、任意の有形、非一時的機械可読記憶媒体が利用されてもよい。それらのコンピュータプログラム命令は、汎用コンピュータ、特殊用途コンピュータ、または機械を生成する他のプログラム可能データ処理装置にロードされてもよく、それによって、コンピュータまたは他のプログラム可能データ処理装置上で実行する命令が指定された機能を実装する手段を生成する。それらのコンピュータプログラム命令はまた、コンピュータ、または特定の方式で機能する他のプログラム可能データ処理装置を指示することができる機械可読メモリに記憶されてもよく、それによって、機械可読メモリに記憶命令が指定された機能を実装する実装手段を含む、製造の項目を生成する。コンピュータプログラム命令はまた、コンピュータまたは他のプログラム可能データ処理装置にロードされてコンピュータまたは他のプログラム可能データ処理装置上で一連の動作ステップを実行させてコンピュータ実行処理を生成し、それによって、コンピュータまたは他のプログラム可能装置上で実行する命令が、指定された機能を実行するステップを提供する。
【０２１９】
この開示の原理が種々の実施形態で示されてきたが、特定の環境、および動作要件に特に適合される構造、配置、比率、要素、材質、および構成要素の多くの修正が、この開示の原理および範囲から逸脱せずに使用されてもよい。それらのおよび他の変更または修正は、本開示の範囲内に含まれることが意図される。
以下の項目は、国際出願時の特許請求の範囲に記載の要素である。
（項目１）
記憶装置の１つ以上の記憶位置に記憶されたデータを、アドレス空間の論理識別子と関連付けるステップと、
前記データにアクセスする記憶クライアントの要求に応答して、論理識別子の有効な組を提供し、それによって、論理識別子の前記有効な組および論理識別子の一貫性の組が前記同一の１つ以上の記憶位置と関連付けられるステップと、
前記データの少なくとも一部を修正するように構成された記憶動作を実装するステップであって、前記記憶動作を実装することは、前記有効な組における前記論理識別子のうちの１つ以上の記憶位置の関連付けを更新すること、および論理識別子の前記一貫性の組と前記１つ以上の記憶位置との間の前記関連付けを保存することを含む、ステップと
を含む、方法。
（項目２）
前記記憶動作は、データを前記記憶装置上のログに付加することを含み、前記方法はさらに、前記付加されたデータを論理識別子の前記有効な組と関連付けるステップを含む、項目１に記載の方法。
（項目３）
前記記憶動作は、前記記憶装置に記憶された前記データの元のデータセグメントを修正するように構成されたデータセグメントを前記記憶装置に書き込むことを含み、前記方法はさらに、
前記論理識別子の前記一貫性の組における論理識別子を参照することによって前記元のデータセグメントへのアクセスを提供するステップと、
論理識別子の前記有効な組における論理識別子の使用によって、前記元のデータセグメントを修正するように構成された前記データセグメントを関連付けるステップと
を含む、項目１に記載の方法。
（項目４）
前記記憶動作は、データをファイルに付加することを含み、前記方法はさらに、
１つ以上の追加論理識別子を論理識別子の前記有効な組に割り当てるステップと、
前記１つ以上の追加論理識別子を参照することによって、前記付加されたデータへのアクセスを提供するステップと
を含む、項目１に記載の方法。
（項目５）
前記記憶動作は、ファイルの複数の元のデータセグメントのうちの１つを修正するように構成され、前記方法はさらに、
論理識別子の前記一貫性の組の論理識別子の使用によって、前記複数の元のデータセグメントを参照するステップと、
論理識別子の前記有効な組の論理識別子の使用によって、前記記憶動作によって修正されていない前記元のデータセグメントを参照するステップと、
論理識別子の前記有効な組の論理識別子を通じて、前記記憶動作に対応するデータセグメントを参照するステップと
を含む、項目１に記載の方法。
（項目６）
前記記憶クライアントによって実行される記憶動作に対し前記記憶装置上で記憶容量を予約することによって論理識別子の前記有効な組を割り当てるステップをさらに含む、項目１に記載の方法。
（項目７）
異なる記憶クライアントの要求に応答して前記記憶動作によって修正されていない前記データへのアクセスを提供するステップをさらに含む、項目１に記載の方法。
（項目８）
前記データに対応するファイルをオープンする、別の記憶クライアントの要求に応答して論理識別子空間の追加の有効な組を割り当て、それによって、論理識別子の前記一貫性の組および論理識別子の前記追加の有効な組が前記同一の記憶位置と関連付けられ、ならびに前記関連付けは、前記記憶動作によって修正されない、項目１に記載の方法。
（項目９）
前記データは、前記データをそれぞれの論理識別子と関連付けるように構成された永続的メタデータと関連して前記記憶装置に記憶され、前記方法はさらに、前記データを前記一貫性の組および前記有効な組の論理識別子と関連付けるように構成された永続的メタデータを前記記憶装置に付加するステップを含む、項目１に記載の方法。
（項目１０）
前記データに対応するファイルをクローズする、前記記憶クライアントの要求に応答して、論理識別子の前記一貫性の組を、論理識別子の前記有効な組と結合するステップをさらに含み、結合することは、前記記憶クライアントによって論理識別子の前記有効な組を参照してなされた前記ファイルへの修正を、論理識別子の前記一貫性の組に組み込むことを含む、項目１に記載の方法。
（項目１１）
論理識別子の前記有効な組を前記１つ以上の記憶位置の記憶アドレスに結び付けるステップをさらに含む、項目１に記載の方法。
（項目１２）
ファイルのデータを論理識別子の元の組および論理識別子の複製の組の両方に結び付けることによって、記憶装置に記憶された前記データに対応する前記ファイルを複製するように構成された変換モジュールと、
複製論理識別子を参照して前記ファイルを変更するように構成された記憶動作を実行している間に、前記記憶装置に記憶された前記ファイルデータ、および前記保存されたファイルデータと論理識別子の前記元の組との間の結び付けを保存するように構成された記憶層と、
前記記憶動作を実行した後に前記元の論理識別子を通じて前記保存されたファイルデータへのアクセスを提供するように構成されたインタフェースと
を含む、装置。
（項目１３）
前記変換モジュールは、前記ファイルをオープンする要求に応答して、前記ファイルを複製するように構成され、および前記インタフェースは、前記ファイルに関連する異なる要求に応答して、論理識別子の前記元の組を通じて前記保存されたファイルデータへのアクセスを提供するように構成される、項目１２に記載の装置。
（項目１４）
前記変換モジュールは、前記オープンされたファイルに関連する記憶動作を論理識別子の前記複製された組にリダイレクトするように構成される、項目１３に記載の装置。
（項目１５）
前記記憶動作は、前記ファイルからデータセグメントを削除するように構成され、ならびに前記記憶層は、前記データセグメントと論理識別子の前記複製された組における論理識別子との間の関連付けを削除し、および前記データセグメントと論理識別子の前記元の組における論理識別子との間の関連付けを保存するように構成される、項目１２に記載の装置。
（項目１６）
前記記憶動作は、前記ファイルの既存のデータを変更するように構成され、ならびに前記記憶層は、論理識別子の前記複製された組のうちの１つ以上の論理識別子を使用して前記ファイルの前記変更されたデータを参照し、および論理識別子の前記元の組の論理識別子を使用して対応する保存されたファイルデータを参照するように構成される、項目１２に記載の装置。
（項目１７）
前記変換モジュールはさらに、論理識別子の前記複製された組の前記論理識別子を参照して実行された前記記憶動作のファイル修正を、論理識別子の前記元の組に組み込むことによって、前記複製された論理識別子を前記元の論理識別子に組み合わせるように構成される、項目１２に記載の装置。
（項目１８）
前記ファイル修正は、前記記憶装置に前記ファイルのデータセグメントを記憶することを含み、前記ファイル修正を組み込むことは、前記データセグメントを論理識別子の前記元の組の前記論理識別子のうちの１つと関連付ける永続的メタデータを前記記憶装置に記憶することを含む、項目１７に記載の装置。
（項目１９）
前記ファイル修正は、前記ファイルを拡張することを含み、および前記ファイル修正を組み込むことは、論理識別子を元の論理識別子の前記組に追加して、前記拡張されたファイルのデータを参照することを含む、項目１７に記載の装置。
（項目２０）
ファイルをオープンする要求に応答して、前記ファイルの論理複製を生成する手段であって、前記論理複製を生成することは、論理アドレスの２つの異なる組を通じて前記ファイルのデータを参照することを含む、手段と、
論理アドレスの前記２つの異なる組のうちの最初の１つを参照して、前記ファイルを修正する手段と、
論理アドレスの前記最初の組を参照して前記ファイルを修正した後、論理アドレスの前記２つの異なる組のうちの２つ目の１つを通じて元のバージョンのファイルへのアクセスを提供する手段と
を含む、システム。
（項目２１）
結合ポリシに従って、論理アドレスの前記最初の組内で実装されたファイル修正を参照するように論理アドレスの前記２つ目の組を更新することによって、論理アドレスの前記２つの異なる組を結合する手段をさらに含む、項目２０に記載のシステム。
（項目２２）
前記ファイルを修正する手段は、記憶装置に記憶されたログに前記ファイルの修正されたデータを付加する手段を含み、および論理アドレスの前記２つの異なる組を結合する手段は、論理アドレスの前記２つ目の組の論理アドレスを前記修正されたデータと関連付けるように構成された永続的記号を前記ログに追加する手段を含む、項目２１に記載のシステム。
【図１Ａ】
0006290405.tif 000006
【図１Ｂ】
0006290405.tif 000007
【図１Ｃ】
0006290405.tif 000008
【図１Ｄ】
0006290405.tif 000009
【図１Ｅ】
0006290405.tif 000010
【図２】
0006290405.tif 000011
【図３Ａ】
0006290405.tif 000012
【図３Ｂ】
0006290405.tif 000013
【図３Ｃ】
0006290405.tif 000014
【図３Ｄ】
0006290405.tif 000015
【図３Ｅ】
0006290405.tif 000016
【図４Ａ】
0006290405.tif 000017
【図４Ｂ】
0006290405.tif 000018
【図４Ｃ】
0006290405.tif 000019
【図４Ｄ】
0006290405.tif 000020
【図４Ｅ】
0006290405.tif 000021
【図５Ａ】
0006290405.tif 000022
【図５Ｂ】
0006290405.tif 000023
【図６】
0006290405.tif 000024
【図７】
0006290405.tif 000025
【図８Ａ】
0006290405.tif 000026
【図８Ｂ】
0006290405.tif 000027
【図８Ｃ】
0006290405.tif 000028
【図８Ｄ】
0006290405.tif 000029
【図８Ｅ】
0006290405.tif 000030
【図９Ａ】
0006290405.tif 000031
【図９Ｂ】
0006290405.tif 000032
【図９Ｃ】
0006290405.tif 000033
【図９Ｄ】
0006290405.tif 000034
【図９Ｅ】
0006290405.tif 000035
【図９Ｆ】
0006290405.tif 000036
【図９Ｇ】
0006290405.tif 000037
【図１０】
0006290405.tif 000038
【図１１】
0006290405.tif 000039
【図１２】
0006290405.tif 000040
【図１３】
0006290405.tif 000041
【図１４】
0006290405.tif 000042
【図１５】
0006290405.tif 000043
【図１６】
0006290405.tif 000044
【図１７】
0006290405.tif 000045