(57)【要約】  アトミック記憶モジュールは、識別子の第１のセットに向けられる、識別子の第２の異なるセットに関するアトミック記憶操作を実施するよう構成されてもよい。アトミック記憶操作を完了させることに応じて、アトミック記憶モジュールは、対応するデータを識別子の第１の目標セットに移動させてもよい。移動操作は、データの論理インタフェースを修正することを含んでいてもよい。移動操作は更に、データを識別子の第１のセットに結合するよう構成される永続的メタデータを格納することを含んでもよい。【選択図】図１０Ａ
2016534439.tif 000002
【特許請求の範囲】
【請求項１】
トランザクション識別子をアトミック記憶リクエストの目標識別子にリンクさせることと、
前記アトミック記憶リクエストの記憶操作を前記トランザクション識別子へリダイレクトすることと、
前記アトミック記憶リクエストの前記記憶操作を完了することに応じて、前記リダイレクトされた記憶操作のデータを前記トランザクション識別子から前記目標識別子へ移動させることと
を含む、方法。
【請求項２】
前記記憶操作は、前記追記されたデータを前記トランザクション識別子のうちの１つ以上と関連付けるよう構成されるメタデータと共に記憶媒体にデータを追記することを含む、請求項１に記載の方法。
【請求項３】
前記追記されたデータを移動させることは、前記記憶媒体上に、前記追記されたデータを前記目標識別子と関連付けるよう構成されるメタデータを格納することを含む、請求項２に記載の方法。
【請求項４】
前記記憶操作は、前記格納されたデータを、それぞれのトランザクション識別子と関連付けられる１つ以上の中間識別子と結合するよう構成されるメタデータと共に不揮発性記憶媒体上にデータを格納することを含む、請求項１に記載の方法。
【請求項５】
前記格納されたデータを移動させることは、前記不揮発性記憶媒体上に、前記１つ以上の中間識別子をそれぞれの目標識別子へ結合するよう構成される永続的ノートを格納することを含む、請求項４に記載の方法。
【請求項６】
更に、前記リダイレクトされた記憶操作の前記データを移動させることに応じて、前記アトミック記憶リクエストの完了を通知することを含む、請求項１に記載の方法。
【請求項７】
記憶リクエストの論理識別子の第１のセットへ識別子の第２のセットをマッピングするよう構成されるリダイレクトモジュールと、
前記記憶リクエストの記憶操作を記憶装置上の前記識別子の第２のセット内で実行するよう構成されるログ記憶モジュールと、
前記記憶リクエストの前記記憶操作を前記論理識別子の第１のセットへ移動させるよう構成されるアトミック記憶モジュールと
を備える、装置。
【請求項８】
前記アトミック記憶モジュールは、永続的メタデータを前記記憶装置へ格納することによって前記記憶操作を移動させるよう構成され、前記永続的メタデータは、前記識別子の第２のセットに関連して前記記憶装置上に格納されるデータセグメントを前記識別子の第１のセットと結合するよう構成される、請求項７に記載の装置。
【請求項９】
前記アトミック記憶モジュールは、前記永続的メタデータが前記記憶装置上に格納されることを判断することに応じて、前記記憶リクエストの完了を通知するよう構成される、請求項８に記載の装置。
【請求項１０】
前記識別子の第１のセットは、論理識別子の複数の互いに素なセットを備え、前記永続的メタデータは、前記データセグメントを前記論理識別子の複数の互いに素なセット内のそれぞれの論理識別子へ結合するよう構成される単一の永続的ノートを備える、請求項８に記載の装置。
【請求項１１】
前記リダイレクトモジュールは、前記識別子の第２のセットを、前記識別子の第１のセットのアドレス空間とは異なるアドレス空間内に割り当てるよう構成される、請求項７に記載の装置。
【請求項１２】
前記リダイレクトモジュールは、前記識別子の第２のセットを、前記識別子の第１のセットのアドレス空間の指定領域内に割り当てるよう構成される、請求項７に記載の装置。
【請求項１３】
前記識別子の第２のセットは、トランザクションアドレス空間に対応し、前記装置は更に、前記トランザクションアドレス空間の識別子と関連するデータセグメントを無効化するよう構成される再構築モジュールを備える、請求項７に記載の装置。
【請求項１４】
前記アトミック記憶モジュールは、前記識別子の第２のセット内の前記識別子のうちの１つのデータを無効化するよう構成される記憶操作を移動させることに応じて、前記識別子の第１のセット内の前記識別子のうちの１つを無効化するよう構成される、請求項７に記載の装置。
【請求項１５】
前記ログ記憶モジュールは、データセグメントを、前記記憶装置上のデータセグメントの順序付けられたログに追記するよう構成され、前記ログ記憶モジュールは、前記記憶リクエストの２つ以上のデータセグメントの間の前記記憶リクエストに関係しないデータセグメントをデータセグメントの前記順序付けられたログ内に追記するよう構成される、請求項７に記載の装置。
【請求項１６】
目的論理識別子のセットに関するアトミック記憶リクエストを受信する手段と、
トランザクション識別子のセットを論理識別子の目的セットにリンクさせる手段と、
前記アトミック記憶リクエストに関する複数のデータパケットを記憶装置上の順次記憶ログに追記する手段であって、前記データパケットは、前記データパケットをそれぞれのトランザクション識別子と関連付けるよう構成される永続的メタデータを備える、手段と、
永続的ノートを前記記憶ログに追記する手段であって、前記永続的ノートは、前記データパケットをそれぞれのトランザクション識別子と関連付けるよう構成される永続的メタデータを備える前記複数のデータパケットを、それぞれの目的論理識別子と関連付けるよう構成される、手段と
を備える、システム。
【請求項１７】
更に、前記目的論理識別子のセットの論理識別子をそれぞれのトランザクション識別子へマッピングする手段を備える、請求項１６に記載のシステム。
【請求項１８】
更に、前記トランザクション識別子のうちの１つ以上を、前記それぞれの１つ以上のトランザクション識別子へリンクされる論理識別子と関連する記憶位置へ結合する手段を備える、請求項１６に記載のシステム。
【請求項１９】
更に、前記永続的ノートを追記することに応じて、それぞれの目的論理識別子を用いて、前記データパケットをそれぞれのトランザクション識別子と関連付けるよう構成される前記永続的メタデータを備える前記データパケットに対するアクセスを提供する手段を備える、請求項１６に記載のシステム。
【請求項２０】
前記目的論理識別子は、論理アドレス空間に対応し、前記トランザクション識別子は、異なるトランザクションアドレス空間に対応し、前記システムは更に、
前記データパケットの永続的メタデータの使用により、前記論理アドレス空間の論理識別子と前記記憶装置上のデータパケットとの間のマッピングのインデックスを再構築する手段と、
前記異なるトランザクションアドレス空間に対応するトランザクション識別子と関連するデータパケットを無効化する手段と
を備える、請求項１６に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、記憶システムに関し、特に、ファイルの整合性を維持するためのシステム及び方法に関する。
【発明の概要】
【課題を解決するための手段】
【０００２】
本明細書中に開示するのは、アトミック記憶操作を実施するための方法の実施形態である。開示する方法の実施形態は、トランザクション識別子をアトミック記憶リクエストの目標識別子にリンクさせることと、アトミック記憶リクエストの記憶操作をトランザクション識別子へリダイレクトすることと、アトミック記憶リクエストの記憶操作を完了することに応じて、リダイレクトされた記憶操作のデータをトランザクション識別子から目標識別子へ移動させることとを含んでもよい。
【０００３】
記憶操作は、追記されたデータをトランザクション識別子のうちの１つ以上と関連付けるよう構成されるメタデータと共に記憶媒体にデータを追記することを含んでいてもよい。追記されたデータを移動させることは、記憶媒体上に、追記されたデータを目標識別子と関連付けるよう構成されるメタデータを格納することを含んでいてもよい。
【０００４】
記憶操作は、格納されたデータを、それぞれのトランザクション識別子と関連付けられる１つ以上の中間識別子と結合するよう構成されるメタデータと共に不揮発性記憶媒体上にデータを格納することを含んでいてもよい。格納されたデータを移動させることは、不揮発性記憶媒体上に、１つ以上の中間識別子をそれぞれの目標識別子へ結合するよう構成される永続的ノートを格納することを含んでいてもよい。幾つかの実施形態において、方法は更に、リダイレクトされた記憶操作のデータを移動させることに応じて、アトミック記憶リクエストの完了を通知することを含んでいる。
【０００５】
本明細書中に開示するのは、アトミック記憶操作を実施するための装置の実施形態である。開示する装置は、記憶リクエストの論理識別子の第１のセットへ識別子の第２のセットをマッピングするよう構成されるリダイレクトモジュールと、記憶リクエストの記憶操作を記憶装置上の識別子の第２のセット内で実行するよう構成されるログ記憶モジュールと、記憶リクエストの記憶操作を論理識別子の第１のセットへ移動させるよう構成されるアトミック記憶モジュールとを備えていてもよい。アトミック記憶モジュールは、永続的メタデータを記憶装置へ格納することによって記憶操作を移動させるよう構成されてもよい。永続的メタデータは、識別子の第２のセットに関連して記憶装置上に格納されるデータセグメントを識別子の第１のセットと結合するよう構成されてもよい。アトミック記憶モジュールは更に、永続的メタデータが記憶装置上に格納されることを判断することに応じて、記憶リクエストの完了を通知するよう構成されてもよい。識別子の第１のセットは、論理識別子の複数の互いに素なセットを備え、永続的メタデータは、データセグメントを論理識別子の複数の互いに素なセット内のそれぞれの論理識別子へ結合するよう構成される単一の永続的ノートを備えていてもよい。
【０００６】
幾つかの実施形態において、リダイレクトモジュールは、識別子の第２のセットを、識別子の第１のセットのアドレス空間とは異なるアドレス空間内に割り当てるよう構成される。代替として、リダイレクトモジュールは、識別子の第２のセットを、識別子の第１のセットのアドレス空間の指定領域内に割り当てるよう構成されてもよい。識別子の第２のセットは、トランザクションアドレス空間に対応してもよく、開示する装置は更に、トランザクションアドレス空間の識別子と関連するデータセグメントを無効化するよう構成される再構築モジュールを含んでもよい。
【０００７】
アトミック記憶モジュールは、識別子の第２のセット内の識別子のうちの１つのデータを無効化するよう構成される記憶操作を移動させることに応じて、識別子の第１のセット内の識別子のうちの１つを無効化するよう構成されてもよい。ログ記憶モジュールは、データセグメントを、記憶装置上のデータセグメントの順序付けられたログに追記するよう構成されてもよい。ログ記憶モジュールは更に、記憶リクエストの２つ以上のデータセグメントの間の記憶リクエストに関係しないデータセグメントをデータセグメントの順序付けられたログ内に追記するよう構成されてもよい。
【０００８】
本明細書中に開示するのは、アトミック記憶操作を実施するためのシステムの実施形態である。システムは、目的論理識別子のセットに関するアトミック記憶リクエストを受信する手段と、トランザクション識別子のセットを論理識別子の目的セットにリンクさせる手段と、アトミック記憶リクエストに関する複数のデータパケットを記憶装置上の順次記憶ログに追記する手段であって、データパケットは、データパケットをそれぞれのトランザクション識別子と関連付けるよう構成される永続的メタデータを備える、手段と、永続的ノートを記憶ログに追記する手段であって、永続的ノートは、データパケットをそれぞれのトランザクション識別子と関連付けるよう構成される永続的メタデータを備える複数のデータパケットを、それぞれの目的論理識別子と関連付けるよう構成される、手段とを含んでもよい。
【０００９】
開示するシステムは更に、目的論理識別子のセットの論理識別子をそれぞれのトランザクション識別子へマッピングする手段を含んでもよい。幾つかの実施形態において、システムは、トランザクション識別子のうちの１つ以上を、それぞれの１つ以上のトランザクション識別子へリンクされる論理識別子と関連する記憶位置へ結合する手段を含む。開示するシステムの実施形態は更に、永続的ノートを追記することに応じて、それぞれの目的論理識別子を用いて、データパケットをそれぞれのトランザクション識別子と関連付けるよう構成される永続的メタデータを備えるデータパケットに対するアクセスを提供する手段を備えていてもよい。
【００１０】
目的論理識別子は、論理アドレス空間に対応してもよく、トランザクション識別子は、異なるトランザクションアドレス空間に対応してもよい。システムは更に、データパケットの永続的メタデータの使用により、論理アドレス空間の論理識別子と記憶装置上のデータパケットとの間のマッピングのインデックスを再構築する手段と、異なるトランザクションアドレス空間に対応するトランザクション識別子と関連するデータパケットを無効化する手段とを含む。
【図面の簡単な説明】
【００１１】
【図１Ａ】図１Ａは、オープン−クローズ整合性のためのシステムの一実施形態のブロック図である。
【図１Ｂ】図１Ｂは、記憶メタデータの実施形態を示す。
【図１Ｃ】図１Ｃは、記憶アレイの一実施形態を示すブロック図である。
【図１Ｄ】図１Ｄは、データパケットフォーマットの一実施形態を示す。
【図１Ｅ】図１Ｅは、記憶ログの一実施形態を示す。
【図２】図２は、オープン−クローズ整合性のためのシステムの別の実施形態のブロック図である。
【図３Ａ】図３Ａは、範囲クローン、移動、マージ、及び他のよりハイレベルな記憶操作を効果的に実施するよう構成される記憶層を備えるシステムの一実施形態のブロック図である。
【図３Ｂ】図３Ｂは、範囲クローン操作の実施形態を示す。
【図３Ｃ】図３Ｃは、範囲クローン操作の更なる実施形態を示す。
【図３Ｄ】図３Ｄは、範囲クローン操作の更なる実施形態を示す。
【図３Ｅ】図３Ｅは、範囲クローン操作の更なる実施形態を示す。
【図４Ａ】図４Ａは、オープン−クローズ整合性のためのシステムの別の実施形態のブロック図である。
【図４Ｂ】図４Ｂは、参照マップの使用により実施される範囲クローン操作の実施形態を示す。
【図４Ｃ】図４Ｃは、参照マップの使用により実施される範囲クローン操作の更なる実施形態を示す。
【図４Ｄ】図４Ｄは、参照マップの使用により実施される範囲クローン操作の更なる実施形態を示す。
【図４Ｅ】図４Ｅは、参照マップの使用により実施される範囲クローン操作の更なる実施形態を示す。
【図５Ａ】図５Ａは、アグリゲーション層を備えるシステムの一実施形態のブロック図である。
【図５Ｂ】図５Ｂは、アグリゲーション層の使用により実施される範囲クローン操作の実施形態を示す。
【図６】図６は、重複排除操作の実施形態を示す。
【図７】図７は、スナップショット操作を効果的に実施するよう構成される記憶層を備えるシステムの一実施形態を示すブロック図である。
【図８Ａ−Ｅ】図８Ａ〜Ｅは、範囲移動操作の実施形態を示す。
【図９Ａ】図９Ａは、ファイル管理操作を効果的に実施するよう構成される記憶層を備えるシステムのブロック図である。
【図９Ｂ】図９Ｂは、ｍマップチェックポイントを実施するよう構成される記憶層の一実施形態を示す。
【図９Ｃ】図９Ｃは、記憶層によって実施される範囲クローン及び範囲マージ操作の実施形態を示す。
【図９Ｄ】図９Ｄは、範囲クローン及び範囲マージ操作の更なる実施形態を示す。
【図９Ｅ】図９Ｅは、範囲クローン及び範囲マージ操作の更なる実施形態を示す。
【図９Ｆ】図９Ｆは、ファイルオープン−クローズ整合性を効果的に実施するよう構成される記憶層を備えるシステムの一実施形態のブロック図である。
【図９Ｇ】図９Ｇは、ファイルオープン−クローズ整合性の更なる実施形態を示す。
【図１０Ａ】図１０Ａは、アトミック記憶操作を実施するよう構成される記憶層を備えるシステムの一実施形態を示す。
【図１０Ｂ】図１０Ｂは、アトミック記憶操作の実施形態を示す。
【図１１】図１１は、不揮発性記憶媒体上のコンテキストフォーマットでのデータ記憶の論理インタフェースを管理するための方法の一実施形態のフロー図である。
【図１２】図１２は、コンテキストデータの論理インタフェースを管理するための方法の一実施形態のフロー図である。
【図１３】図１３は、コンテキストデータの論理インタフェースを管理するための方法の別の実施形態のフロー図である。
【図１４】図１４は、範囲マージ操作を管理するための方法の一実施形態のフロー図である。
【図１５】図１５は、範囲マージ操作を管理するための方法の別の実施形態のフロー図である。
【図１６】図１６は、範囲マージ操作を管理するための方法の別の実施形態のフロー図である。
【図１７】図１７は、方法アトミック記憶操作の一実施形態のフロー図である。
【図１８】図１８は、アトミック記憶操作のための方法の別の実施形態のフロー図である。
【図１９】図１９は、アトミック記憶操作のための方法の別の実施形態のフロー図である。
【発明を実施するための形態】
【００１２】
図１Ａは、１つ以上の記憶クライアント１０６にストレージサービスを提供するよう構成される記憶層１３０を備える演算システム１００の一実施形態のブロック図である。記憶層１３０は、本明細書中で更に詳細に開示するような、ファイルオープン−クローズサービスを提供するよう構成されてもよい。演算システム１００は、サーバ、デスクトップ、ラップトップ、埋込みシステム、モバイル機器、及び／又は同様のものを含むが、これらに限定されない任意の適切な演算装置を備えていてもよい。幾つかの実施形態において、演算システム１００は、サーバ演算装置のクラスタ等の複数の演算装置を含んでもよい。演算システム１００は、処理リソース１０１、揮発性メモリリソース１０２（例えば、ランダムアクセスメモリ（ＲＡＭ））、不揮発性記憶リソース１０３、及び通信インタフェース１０４を備えていてもよい。処理リソース１０１は、汎用中央処理装置（ＣＰＵ）、特定用途向け集積回路（ＡＳＩＣ）、及び、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、プログラマブル論理アレイ（ＰＬＧ）、及び同様のもの等のプログラマブル論理素子を含んでもよいが、これらに限定されない。不揮発性記憶リソース１０３は、磁気ハードディスク、ソリッドステート記憶媒体、光学式記憶媒体、及び／又は同様のもの等の非一時的機械読取可能記憶媒体を備えていてもよい。通信インタフェース１０４は、演算システム１００をネットワーク１０５に通信可能に結合するよう構成されてもよい。ネットワーク１０５は、伝送制御プロトコル／インターネットプロトコル（ＴＣＰ／ＩＰ）ネットワーク、ローカルエリアネットワーク（ＬＡＮ）、ワイドエリアネットワーク（ＷＡＮ）、仮想プライベートネットワーク（ＶＰＮ）、ストレージエリアネットワーク（ＳＡＮ）、公衆交換電話網（ＰＳＴＮ）、インターネット、及び／又は同様のものを含むが、これらに限定されない任意の適切な通信ネットワークを備えていてもよい。
【００１３】
演算システム１００は、１つ以上の記憶クライアント１０６にストレージサービスを提供するよう構成されてもよい記憶層１３０を備えていてもよい。記憶クライアント１０６は、オペレーティングシステム（ベアメタルオペレーティングシステム、ゲストオペレーティングシステム、仮想マシン、仮想化環境、及び同様のものを含む）、ファイルシステム、データベースシステム、リモート記憶クライアント（例えば、ネットワーク１０５を介して演算システム１００及び／又は記憶層１３０に通信可能に結合される記憶クライアント）、及び／又は同様のものを含んでもよいが、これらに限定されない。
【００１４】
記憶層１３０（及び／又はそのモジュール）は、ソフトウェア、ハードウェア、又はそれらの組み合わせにおいて実装されてもよい。幾つかの実施形態において、記憶層１３０の一部は、不揮発性記憶リソース１０３等の永続的な非一時的記憶媒体上に格納されてもよいコンピュータプログラムコード等の実行可能命令として具現化される。命令及び／又はコンピュータプログラムコードは、処理リソース１０１による実行のために構成されてもよい。代替として、又は加えて、記憶層１３０の一部は、汎用及び／又は特定用途向け構成部品、プログラマブルハードウェア、ＦＰＧＡ、ＡＳＩＣ、ハードウェアコントローラ、記憶コントローラ、及び／又は同様のもの等の機械部品として具現化されてもよい。
【００１５】
記憶層１３０は、記憶媒体１４０上の記憶操作を実行するよう構成されてもよい。記憶媒体１４０は、データを永続的に格納することができる何れかの記憶媒体を備えていてもよい。本明細書中で用いるように、「永続的」データ記憶とは、情報を永続的不揮発性記憶媒体上に格納することを指す。記憶媒体１４０は、１つ以上のソリッドステート記憶装置又はドライブ（ＳＳＤ）、ハードディスクドライブ（例えば、統合ドライブエレクトロニクス（ＩＤＥ）ドライブ、小型コンピュータシステムインタフェース（ＳＣＳＩ）ドライブ、シリアルアタッチドＳＣＳＩ（ＳＡＳ）ドライブ、シリアルＡＴアタッチメント（ＳＡＴＡ）ドライブ等）、テープドライブ、書き込み可能な光学ドライブ（例えば、ＣＤドライブ、ＤＶＤドライブ、ブルーレイドライブ等）及び／又は同様のもの等におけるソリッドステート記憶媒体等の不揮発性記憶媒体を含んでもよい。
【００１６】
幾つかの実施形態において、記憶媒体１４０は、ＮＡＮＤフラッシュメモリ、ＮＯＲフラッシュメモリ、ナノＲＡＭ（ＮＲＡＭ）、磁気抵抗ＲＡＭ（ＭＲＡＭ）、相変化ＲＡＭ（ＰＲＡＭ）、レーストラックメモリ、メモリスタメモリ、ナノクリスタルワイヤベースメモリ、酸化シリコンベースサブ１０ナノメートルプロセスメモリ、グラフェンメモリ、Ｓｉｌｉｃｏｎ−Ｏｘｉｄｅ−Ｎｉｔｒｉｄｅ−Ｏｘｉｄｅ−Ｓｉｌｉｃｏｎ（ＳＯＮＯＳ）、抵抗変化型ランダムアクセスメモリ（ＲＲＡＭ）、プログラマブルメタライゼーションセル（ＰＭＣ）、導電性ブリッジ型ＲＡＭ（ＣＢＲＡＭ）、及び／又は同様のものを含んでもよいが、これらに限定されない不揮発性ソリッドステートメモリを備えている。記憶媒体１４０の特定の実施形態は本明細書中で開示するが、本開示の教示は、不揮発性及び揮発性形態の両方を含むメモリの任意の適切な形態に対して適用することができる。従って、記憶層１３０の特定の実施形態は、不揮発性のソリッドステート記憶装置１４０の文脈において開示するが、記憶層１３０は、他の記憶装置及び／又は記憶媒体と共に用いられてもよい。
【００１７】
幾つかの実施形態において、記憶媒体１４０は、ＲＡＭ、ダイナミックＲＡＭ（ＤＲＡＭ）、スタティックＲＡＭ（ＳＲＡＭ）、シンクロナスダイナミックＲＡＭ（ＳＤＲＡＭ）等を含んでもよいが、これらに限定されない揮発性メモリを含む。記憶媒体１４０は、ＣＰＵキャッシュ（例えば、Ｌ１、Ｌ２、Ｌ３キャッシュ等）、グラフィックスメモリ、及び／又は同様のもの等の処理リソース１０１のメモリに相当してもよい。幾つかの実施形態において、記憶媒体１４０は、相互接続１２７の使用により記憶層１３０に通信可能に結合される。相互接続１２７は、周辺構成機器相互接続（ＰＣＩ）、ＰＣＩ  ｅｘｐｒｅｓｓ（ＰＣＩ−ｅ）、シリアルアドバンストテクノロジーアタッチメント（シリアルＡＴＡ又はＳＡＴＡ）、パラレルＡＴＡ（ＰＡＴＡ）、小型コンピュータシステムインタフェース（ＳＣＳＩ）、ＩＥＥＥ  １３９４（ファイヤーワイヤー）、ファイバチャネル、ユニバーサルシリアルバス（ＵＳＢ）、及び／又は同様のものを含んでもよいが、これらに限定されない。代替として、記憶媒体１４０は、ネットワーク１０５（及び／又は、ストレージエリアネットワーク（ＳＡＮ）、仮想ストレージエリアネットワーク（ＶＳＡＮ）、及び／又は同様のもの等の他の通信インタフェース）を介して記憶層１３０に通信可能に結合される遠隔記憶装置であってもよい。相互接続１２７は、従って、ＰＣＥ−ｅバス、ネットワーク接続（例えば、インフィニバンド）、ストレージネットワーク、ファイバチャネルプロトコル（ＦＣＰ）ネットワーク、ＨｙｐｅｒＳＣＳＩ、及び／又は同様のもの等のリモートバスを備えていてもよい。
【００１８】
記憶層１３０は、特に、記憶コントローラ１３９の使用によって記憶媒体１４０上の記憶操作を管理するよう構成されてもよい。記憶コントローラ１３９は、ストレージドライバ、Ｉ／Ｏドライバ、フィルタドライバ、及び／又は同様のもの等の、演算システム１００上で動作する１つ以上のドライバ及び／又は他のソフトウェアモジュールを含むが、これらに限定されないソフトウェア及び／又はハードウェアコンポーネント；ハードウェアコントローラ、通信インタフェース、及び／又は同様のもの等のハードウェアコンポーネント等を備えていてもよい。記憶媒体１４０は、記憶装置１４１上で具現化されてもよい。記憶層１３０の一部（例えば、記憶コントローラ１３９）は、記憶装置１４１のハードウェア及び／又はソフトウェアコンポーネント（例えば、ファームウェア）として実装されてもよい。
【００１９】
記憶コントローラ１３９は、記憶媒体１４０の特定の記憶位置における記憶操作を実施するよう構成されてもよい。本明細書中で用いるように、記憶位置とは、データを永続的に格納することができる記憶リソース（例えば、記憶媒体及び／又は装置）の記憶の単位を指し；記憶位置は、ページ、ページのグループ（例えば、論理ページ及び／又は論理ページ内部のオフセット）、記憶区分（例えば、物理消去ブロック、論理消去ブロック等）、セクタ、磁気ディスク上の位置、バッテリバックアップ付きメモリ位置、及び／又は同様のものを含んでもよいが、これらに限定されない。記憶位置は、記憶媒体１４０の記憶アドレス空間１４４内部でアドレス指定可能であってもよい。記憶アドレスは、物理アドレス、媒体アドレス、バックエンドアドレス、アドレスオフセット、及び／又は同様のものに相当してもよい。記憶アドレスは、任意の適切な記憶アドレス空間１４４、アドレス指定スキーム、及び／又は記憶位置の配置に相当してもよい。
【００２０】
記憶層１３０は、記憶クライアント１０６がそれを介して記憶層１３０によって提供されるストレージサービスにアクセスしてもよいインタフェース１３１を備えていてもよい。記憶インタフェース１３１は、ブロックデバイスインタフェース、仮想化記憶インタフェース、１つ以上の仮想記憶ユニット（ＶＳＵ）、オブジェクト記憶インタフェース、データベース記憶インタフェース、及び／又は他の適切なインタフェースのうちの１つ以上、及び／又はアプリケーションプログラミングインタフェース（ＡＰＩ）を含んでもよい。
【００２１】
記憶層１３０は、フロントエンド記憶インタフェースを介して記憶リソースを参照するために設けられてもよい。本明細書中で用いるように、「フロントエンド記憶インタフェース」とは、記憶クライアント１０６がそれを介して記憶層１３０の記憶リソースを参照してもよいインタフェース及び／又は名前空間を指す。記憶インタフェースは、論理アドレス空間１３２に対応してもよい。論理アドレス空間１３２は、識別子のグループ、セット、集合、範囲、及び／又は程度を備えていてもよい。本明細書中で用いるように、「識別子」又は「論理識別子」（ＬＩＤ）とは、ソ−スリソースを参照するための識別子を指し；ＬＩＤは、名前（例えば、ファイル名、識別名、及び／又は同様のもの）、データ識別子、リファレンス、リンク、ＬＩＤ、フロントエンド識別子、論理アドレス、論理ブロックアドレス（ＬＢＡ）、論理ユニット番号（ＬＵＮ）アドレス、仮想ユニット番号（ＶＵＮ）アドレス、仮想記憶アドレス、記憶アドレス、物理アドレス、媒体アドレス、バックエンドアドレス、及び／又は同様のものを含んでもよいが、これらに限定されない。
【００２２】
論理アドレス空間１３２の論理容量は、論理アドレス空間１３２内のＬＩＤの数及び／又はサイズ及び／又はＬＩＤによって参照される記憶リソースの粒度に対応してもよい。幾つかの実施形態において、論理アドレス空間１３２は「シンプロビジョニング」されてもよい。本明細書中で用いるように、シンプロビジョニングされる論理アドレス空間１３２とは、基本となる記憶リソースの物理的な記憶容量を超える（例えば、記憶媒体１４０の記憶容量を超える）論理容量を有する論理アドレス空間１３２を指す。一実施形態において、記憶層１３０は、記憶媒体１４０の物理的な記憶容量を超えてもよい６４ビットの論理アドレス空間１３２（例えば、２の２６乗のユニークなＬＩＤを備える論理アドレス空間）を提供するよう構成される。大きな、シンプロビジョニングされる論理アドレス空間１３２は、記憶クライアント１０６が、ＬＩＤの隣接する範囲を割り当て／又は参照する一方で、命名競合の可能性を低減することを可能にしてもよい。
【００２３】
記憶層１３０の変換モジュール１３４は、論理アドレス空間１３２のＬＩＤを記憶リソース（例えば、記憶媒体１４０の記憶アドレス空間１４４内部に格納されるデータ）にマッピングするよう構成されてもよい。論理アドレス空間１３２は、バックエンド記憶リソース（例えば、記憶媒体１４０）とは無関係であってもよく；従って、論理アドレス空間１３２のＬＩＤと記憶アドレス空間１４４の記憶アドレスとの間の何のセット又は所定のマッピングもなくてもよい。幾つかの実施形態において、論理アドレス空間１３２は、論理アドレス空間１３２のサイズが記憶媒体１４０の記憶アドレス空間１４４とは異なるように、点在し、シンプロビジョニングされ、及び／又はオーバープロビジョニングされる。
【００２４】
記憶層１３０は、記憶媒体１４０上で実行される記憶操作に関する記憶メタデータ１３５を維持するよう構成されてもよい。記憶メタデータ１３５は、論理アドレス空間１３２のＬＩＤと記憶アドレス空間１４４内部の記憶アドレスとの間の何れかから何れかへのマッピングを備える前方マップ、記憶媒体１４０の記憶位置の内容、妥当性ビットマップ、信頼性試験、及び／又はステータスメタデータに関する逆方向マップ、ステータス情報（例えば、エラー率、リタイアステータス等）、キャッシュメタデータ、及び／又は同様のものを含んでもよいが、これらに限定されない。記憶メタデータ１３５の一部は、演算システム１００の揮発性メモリリソース１０２の内部に維持されてもよい。代替として、又は加えて、記憶メタデータ１３５の一部は、不揮発性記憶リソース１０３及び／又は記憶媒体１４０に格納されてもよい。
【００２５】
図１Ｂは、論理アドレス空間１３２のＬＩＤと記憶アドレス空間１４４内部のバックエンド識別子（例えば、記憶アドレス）との間の何れかから何れかへのマッピング１５０の一実施形態を示している。何れかから何れかへのマッピング１５０は、記憶メタデータ１３５の１つ以上のデータ構造内に維持されてもよい。図１Ｂに示すように、変換モジュール１３４は、何れかの記憶リソース識別子（何れかのＬＩＤ）を何れかのバックエンド記憶位置にマッピングするよう構成されてもよい。更に図示するように、論理アドレス空間１３２は、基本となる記憶アドレス空間１４４とは異なった大きさにされてもよい。図１Ｂの実施形態において、論理アドレス空間１３２は、シンプロビジョニングされてもよく、よって、記憶アドレス空間１４４内の記憶アドレスの範囲よりも大きい範囲のＬＩＤを備えていてもよい。
【００２６】
上で開示したように、記憶クライアント１０６は、論理アドレス空間１３２のＬＩＤを介して記憶リソースを参照してもよい。従って、論理アドレス空間１３２は、記憶リソースの論理インタフェース１５２に相当してもよく、記憶アドレス空間１４４内部の特定の記憶アドレスへのマッピングは、記憶リソースのバックエンドインタフェース１５４に相当してもよい。
【００２７】
記憶層１３０は、前方マップ１６０において論理インタフェース１５２とバックエンドインタフェース１５４との間の何れかから何れかへのマッピング１５０を維持するよう構成されてもよい。前方マップ１６０は、インデックス、マップ、ハッシュマップ、ハッシュテーブル、ツリー、範囲符号化ツリー、ｂツリー、及び／又は同様のものを含むが、これらに限定されない任意の適切なデータ構造を備えていてもよい。前方マップ１６０は、記憶媒体１４０に格納されたデータを参照するよう用いるために割り当てられたＬＩＤに対応するエントリ１６２を備えていてもよい。前方マップ１６０のエントリ１６２は、ＬＩＤ１６４Ａ〜Ｄを記憶アドレス空間１４４内部のそれぞれの記憶アドレス１６６Ａ〜Ｄに関連付けてもよい。前方マップ１６０は、点在して追加されてもよく、よって、記憶クライアント１０６によってその時点で割り当てられていないか、及び／又は、記憶媒体１４０に格納された有効データを参照するようその時点で使用されていないＬＩＤに対応するエントリを除外してもよい。幾つかの実施形態において、前方マップ１６０は、エントリ１６２のうちの１つ以上が複数のＬＩＤ（例えば、ＬＩＤの範囲、程度、及び／又はセット）に対応してもよいように、範囲符号化データ構造を備える。図１Ｂの実施形態において、前方マップ１６０は、記憶アドレス１６６Ａの対応する範囲にマッピングされたＬＩＤ１６４Ａの範囲に対応するエントリ１６２を含んでいる。エントリ１６２はＬＩＤによってインデックス化されてもよい。図１Ｂの実施形態において、エントリ１６２は、それぞれのリンクによってツリーデータ構造に編成されてもよい。しかし、本開示はこの点に限定されず、任意の適切なデータ構造及び／又はインデックス化機構を用いるよう成されてもよい。
【００２８】
図１Ｃを参照して、幾つかの実施形態において、記憶媒体１４０は、複数のソリッドステート記憶素子１１６Ａ〜Ｙを備えるソリッドステート記憶アレイ１１５を備えていてもよい。本明細書中で用いるように、ソリッドステート記憶アレイ（又は記憶アレイ）１１５とは、２つ以上の独立したカラム１１８のセットを指す。カラム１１８は、特に、相互接続１２７を用いて並列に記憶層１３０に通信可能に結合される１つ以上のソリッドステート記憶素子１１６Ａ〜Ｙを備えていてもよい。アレイ１１５のロウ１１７は、各カラム１１８の物理記憶単位（ソリッドステート記憶素子１１６Ａ〜Ｙ）を備えていてもよい。本明細書中で用いるように、ソリッドステート記憶素子１１６Ａ〜Ｙは、パッケージ、チップ、ダイ、平面、プリント回路基板、及び／又は同様のものとして具現化されるソリッドステート記憶リソースを含むが、これらに限定されない。アレイ１１５を備えるソリッドステート記憶素子１１６Ａ〜Ｙは、独立して動作することができてもよい。従って、ソリッドステート記憶素子１１６Ａの最初のものは、第１の記憶操作を実行することができてもよい一方で、第２のソリッドステート記憶素子１１６Ｂは異なる記憶操作を実行する。例えば、ソリッドステート記憶素子１１６Ａは、第１の物理アドレスにおけるデータを読み取るよう構成されてもよい一方で、別のソリッドステート記憶素子１１６Ｂが異なる物理アドレスにおけるデータを読み取る。
【００２９】
ソリッドステート記憶アレイ１１５はまた、論理記憶素子（ＬＳＥ）とも呼ばれる。本明細書中で更に詳細に開示するように、ソリッドステート記憶アレイ１１５は、論理記憶単位（ロウ１１７）を備えていてもよい。本明細書中で用いるように、「論理記憶単位」又はロウ１１７とは、２つ以上の物理記憶単位の組み合わせを指し、各物理記憶単位はアレイ１１５の各カラム１１８上にある。論理消去ブロックとは２つ以上の物理消去ブロックのセットを指し、論理ページとは２つ以上のページのセットを指す、等である。幾つかの実施形態において、論理消去ブロックは、各論理記憶素子１１５及び／又はバンク内部に消去ブロックを備えていてもよい。代替として、論理消去ブロックは、複数の異なるアレイ１１５内部に消去ブロックを備えていてもよく、及び／又は、ソリッドステート記憶素子の複数のバンクにまたがっていてもよい。
【００３０】
図１Ａに戻って参照すると、記憶層１３０は更に、ログ構造化記憶構成で（例えば、記憶ログの形で）記憶媒体１４０上にデータを格納するよう構成されるログ記憶モジュール１３６を備えていてもよい。本明細書中で用いるように、「記憶ログ」又は「ログ構造」とは、記憶媒体１４０の記憶アドレス空間１４４内部のデータの順序付けられた配列を指す。記憶ログ内のデータは、永続的メタデータを備えるか、及び／又は、それに関連付けられてもよい。従って、記憶層１３０は、コンテキストの自己記述的なフォーマットでデータを格納するよう構成されてもよい。本明細書中で用いるように、コンテキスト又は自己記述的なフォーマットとは、データが永続的メタデータに関連して格納されるデータフォーマットを指す。幾つかの実施形態において、永続的メタデータは、データを特定するよう構成されてもよく、よって、データの論理インタフェースを備えるか、それを参照してもよい（例えば、データと関連するＬＩＤを備えていてもよい）。永続的メタデータは、データの所有者、アクセス制御、データ型、データの相対位置又はオフセットに関する情報、データと関連する記憶操作に関する情報（例えば、アトミック記憶操作、トランザクション、及び／又は同様のもの）、ログシーケンス情報、データ記憶パラメータ（例えば、圧縮アルゴリズム、暗号化等）、及び／又は同様のものを含むが、これらに限定されない他の情報を含んでもよい。
【００３１】
図１Ｄは、コンテキストデータフォーマットの一実施形態を示している。図１Ｄのパケットフォーマット１１０は、データセグメント１１２及び永続的メタデータ１１４を備えている。データセグメント１１２は、何れかの任意の長さ及び／又はサイズのものであってもよい。永続的メタデータ１１４は、データパケット１１０の１つ以上のヘッダフィールドとして具現化されてもよい。上で開示したように、永続的メタデータ１１４は、データセグメント１１２の論理インタフェースを備えていてもよく、よって、データセグメント１１２と関連するＬＩＤを含んでもよい。図１Ｄはパケットフォーマット１１０を示しているが、本開示はこれに関して限定されず、記憶媒体１４０上のインデックス、記憶区分インデックス、及び／又は同様のものを含むが、これらに限定されない他の方法で、データ（例えば、データセグメント１１２）をコンテキストメタデータと関連付けることができる。データパケット１１０は、シーケンス情報１１３と関連付けられてもよい。シーケンス情報は、記憶ログ内部のデータパケットの相対的順序を決定するよう用いられてもよい。幾つかの実施形態において、データパケットは、記憶媒体１４０の記憶区分内部で順次追記される。記憶区分は、消去ブロック、論理消去ブロック、又は同様のものに対応してもよい。各記憶区分は、多数のデータパケット１１０を格納することができてもよい。記憶区分内のデータパケット１１０の相対位置は、記憶ログ内のパケットの順序を決定してもよい。記憶区分の順序は、特に、記憶区分シーケンス情報１１３によって決定されてもよい。記憶区分は、記憶区分が使用のために初期化される（例えば、消去される）か、プログラムされるか、閉じられるか、又は同様の時点で、それぞれのシーケンス情報１１３を割り当てられてもよい。記憶区分シーケンス情報１１３は、記憶アドレス空間１４４内部で記憶区分の順序付けられたシーケンスを決定してもよい。従って、記憶ログ内のデータパケット１１０の相対的順序は、ａ）特定の記憶区分内のデータパケット１１０の相対位置、及び、ｂ）記憶アドレス空間１４４における他の記憶区分に対する記憶区分の順序によって決定されてもよい。
【００３２】
幾つかの実施形態において、記憶層１３０は、ソリッドステート記憶媒体、フラッシュ記憶媒体、又は同様のもの等の非対称型の、ライトワンス記憶媒体１４０を管理するよう構成されてもよい。本明細書中で用いるように、「ライトワンス」記憶媒体とは、新しいデータがそれに書き込まれるか、プログラムされる度に再初期化される（例えば、消去される）記憶媒体を指す。本明細書中で用いるように、「非対称型」記憶媒体とは、異なる種類の記憶操作に対して異なる待ち時間を有する記憶媒体を指す。幾つかの実施形態において、例えば、読取り操作は、書込み／プログラム操作よりも高速であってもよく、書込み／プログラム操作は、消去操作よりも大幅に高速であってもよい（例えば、媒体を読み込むことは、消去よりも何百倍も高速であってもよく、記憶媒体をプログラミングすることよりも何十倍も高速であってもよい）。記憶媒体１４０は、グループとして消去することができる記憶区分に分割されてもよい（例えば、消去ブロック）。よって、単一データセグメントを「所定位置」で修正することは、データを備える消去ブロック全体を消去し、修正されるデータを、オリジナルの変化していないデータと共に消去ブロックに書き換えることを必要としてもよい。これは、結果として、媒体を過度に消耗させる非効率な「ライトアンプリフィケーション」を生じる。幾つかの実施形態において、従って、記憶層１３０は、データを「所定位置以外」に書き込むよう構成されてもよい。本明細書中で用いるように、データを「所定位置以外」に書き込むこととは、データを「所定位置」に上書きする（例えば、データのオリジナルの物理記憶位置を上書きする）のではなく、データを異なる記憶位置で更新及び／又は上書きすることを指す。データを所定位置以外で更新及び／又は上書きすることにより、修正されるべきデータを有する消去ブロック上の既存の有効データが、消去され、再度コピーされる必要がないため、ライトアンプリフィケーションを回避できる。更に、データを所定位置以外に書込むことにより、消去待ち時間が書込み操作の「クリティカルパス」の一部ではないように、多くの記憶操作の待ち時間パスからの消去を排除できる。
【００３３】
記憶層１３０は、特に、ログ記憶モジュール１３６の使用によって所定位置以外の記憶操作を実行するよう構成されてもよい。ログ記憶モジュール１３６は、記憶媒体１４０上に「記憶ログ」を形成する記憶層１３０によって実行される記憶操作の相対的順序を維持する方法で、記憶アドレス空間１４４内部の現在の追記点において、データを追記するよう構成されてもよい。図１Ｅは、記憶媒体１４０の記憶アドレス空間１４４内部で実行される追記のみの記憶操作の一実施形態を示している。上で開示したように、記憶アドレス空間１４４は、複数の記憶区分１７０Ａ〜Ｎ（例えば、消去ブロック、論理消去ブロック、又は同様のもの）を備え、そのそれぞれは、データを格納することに用いるために初期化（例えば、消去）されてもよい。記憶区分１７０Ａ〜Ｎは、本明細書中で開示するようなページ、論理ページ、及び／又は同様のものに対応してもよいそれぞれの記憶位置を備えていてもよい。記憶位置は、それぞれの記憶アドレス（例えば、記憶アドレス０から記憶アドレスＮ）を割り当てられてもよい。
【００３４】
ログ記憶モジュール１３６は、物理アドレス空間１４４内の追記点１８０から順次データを格納するよう構成されてもよい。図１Ｅの実施形態において、データは、記憶区分１７０Ａの記憶位置１８２内の追記点１８０において追記されてもよく、記憶位置１８２が一杯になった場合、追記点１８０は、次に利用可能な記憶位置まで進んで１８１もよい。本明細書中で用いるように、「利用可能な」記憶位置とは、初期化され、未だプログラムされていない（例えば、消去された）記憶位置を指す。上で開示したように、幾つかの種類の記憶媒体は、一旦消去された後は、確実にプログラムすることのみ可能である。従って、利用可能な記憶位置とは、初期化（又は消去）状態にある記憶区分１７０Ａ〜Ｎ内部の記憶位置を指してもよい。
【００３５】
図１Ｅの実施形態において、論理消去ブロック１７０Ｂは、特に、消去状態にない（例えば、有効データを備えている）か、高いエラー率のために使用不能であるか、又は同様の理由のために、記憶に利用できないことがあり得る。従って、記憶位置１８２が一杯になった後、ログ記憶モジュール１３６は、利用できない記憶区分１７０Ｂをスキップし、追記点１８０を次に利用可能な記憶区分１７０Ｃに進めてもよい。ログ記憶モジュール１３６は、追記するデータを記憶位置１８３〜１８５に続けるよう構成されてもよく、この点で、追記点１８０は、上で開示したように、次に利用可能な記憶区分１７０Ａ〜Ｎに続く。
【００３６】
データを記憶アドレス空間１４４内の「最後の」記憶位置（例えば、記憶区分１７０Ｎの記憶位置Ｎ１８９）に格納した後、ログ記憶モジュール１３６は、第１の記憶区分１７０Ａ（又は、記憶区分１７０Ａが利用できない場合は、次に利用可能な記憶区分）に折り返すことによって追記点１８０を進めてもよい。従って、ログ記憶モジュール１３６は、記憶アドレス空間１４４をループ又はサイクルとして扱ってもよい。
【００３７】
上で開示したように、記憶アドレス空間１４４内に順次追記するデータは、記憶媒体１４０に関する記憶ログを生成してもよい。図１Ｅの実施形態において、記憶ログは、記憶アドレス空間１４４内の追記点１８０からデータパケット（及び／又は他のデータ構造）を順次格納することによって実行される記憶操作の順序付けられたシーケンスを備えていてもよい。追記のみの記憶フォーマットは、上で開示したように、所定位置以外でデータを修正及び／又は上書きするために用いられてもよい。修正及び／又は上書きされるデータを備える記憶区分１７０Ａ〜Ｎ上の既存の有効データが消去及び／又は再度コピーされる必要がないため、所定位置以外で記憶操作を実行することにより、ライトアンプリフィケーションを回避してもよい。更に、データを所定位置以外に書込むことにより、多くの記憶操作の待ち時間パスからの消去を排除できる（消去待ち時間が、もはや書込み操作の「クリティカルパス」の一部ではない）。
【００３８】
図１Ｅの実施形態において、ＬＩＤ  Ａに対応するデータセグメントＸ０は、記憶位置１９１に格納されてもよい。データセグメントＸ０は、上で開示した自己記述型パケットフォーマット１１０で格納されてもよい。パケット１１０のデータセグメント１１２はデータセグメントＸ０を備えていてもよく、永続的メタデータ１１４はデータセグメントと関連するＬＩＤ（例えば、ＬＩＤ  Ａ）を備えていてもよい。記憶クライアント１０６は、データセグメントＸ０をデータセグメントＸ１で置換することを含んでもよいＬＩＤ  Ａと関連するデータを修正及び／又は上書きする操作を要求してもよい。記憶層１３０は、記憶位置１９１の所定位置における既存のデータパケット１１０を修正するのではなく、記憶媒体１４４上の異なる記憶位置１９３にデータセグメントＸ１を備える新規パケット１１０を追記することによって、この所定位置以外の操作を実行してもよい。記憶操作は更に、ＬＩＤ  Ａを記憶位置１９３の記憶アドレスと関連付けるか、及び／又は、記憶位置１９１の廃止データＸ０を無効化するよう記憶メタデータ１３５を更新することを含んでいてもよい。図１Ｅに示すように、記憶メタデータ１３５を更新することは、ＬＩＤ  Ａ  １６４Ｅを修正されたデータセグメントＸ１の記憶アドレスと関連付けるよう前方マップ１６０のエントリを更新することを含んでいてもよい。
【００３９】
所定位置以外で記憶操作を実行すること（例えば、データを記憶ログに追記すること）は、結果として、記憶媒体１４０上に残る廃止又は無効データ（例えば、所定位置以外で消去、修正、及び／又は上書きされたデータ）を生じる場合がある。図１Ｅに示すように、記憶位置１９１における所定位置でデータセグメントＸ０を上書き及び／又は置換することとは対照的に、データセグメントＸ１を記憶ログに追記することによってＬＩＤ  Ａのデータを修正することは、結果として、記憶媒体１４０上にデータセグメントＸ０の廃止バージョンを維持することを招く。上で開示したように、データセグメントＸ０を消去することは、記憶区分１７０Ａ全体を消去するか、及び／又は、時間のかかる操作であり、結果としてライトアンプリフィケーションを生じる場合がある記憶区分１７０Ａ上の有効データを再配置することを伴う恐れがあるため、データセグメントＸ０の廃止バージョンは、記憶媒体１４０から即座に削除（例えば、消去）されないことがあり得る。同様に、もはや使用されていない（例えば、消去されるか、トリム操作を受ける）データは、即座に削除されないことがあり得る。よって、時が経つにつれて、記憶媒体１４０は、かなりの量の「無効」データを蓄積する場合がある。
【００４０】
記憶層１３０は、記憶メタデータ１３５（例えば、前方マップ１６０）の使用によって、記憶位置１９１におけるデータセグメントＸ０等の無効データを特定してもよい。記憶層１３０は、前方マップ１６０において有効な識別子（ＬＩＤ）と関連付けられていない記憶位置が、記憶媒体１４０上で保管される必要のないデータを備えていることを判断してもよい。代替として、又は加えて、記憶層１３０は、削除されたか、トリムされたか、廃止であるか、及び／又は、そうでなければ無効であるデータを効率的に特定するよう、妥当性ビットマップ、逆方向マップ、及び／又は同様のもの等の他の記憶メタデータ１３５を維持してもよい。
【００４１】
記憶層１３０は、無効データによって占有された記憶リソースを再利用するよう構成されてもよい。記憶層１３０は更に、（データ劣化、書込み妨害、読取り妨害、及び／又は同様のものによるエラー状態を防止するよう）記憶媒体１４０上に格納されたデータをリフレッシュすること、媒体信頼性条件を監視すること、及び／又は同様のことを含むが、これらに限定されない他の媒体管理操作を実行するよう構成されてもよい。本明細書中で用いるように、記憶区分１７０Ａ〜Ｎ等の記憶リソースを再利用することとは、新しいデータがそれらに格納／プログラムされてもよいように記憶区分１７０Ａ〜Ｎを消去することを指す。記憶区分１７０Ａ〜Ｎを再利用することは、記憶区分１７０Ａ〜Ｎ上の有効データを新しい記憶位置に再配置することを含んでいてもよい。記憶層１３０は、記憶区分１７０Ａ〜Ｎ内の無効データの量、記憶区分１７０Ａ〜Ｎ内の有効データの量、ウェアレベル（例えば、プログラム／消去サイクル数）、記憶区分１７０Ａ〜Ｎがプログラム又はリフレッシュされてからの時間、等を含んでもよいが、これらに限定されない１つ以上の要因に基づく再利用に対して、記憶区分１７０Ａ〜Ｎを特定してもよい。
【００４２】
記憶層１３０は、記憶媒体１４０上の記憶ログの内容の使用によって、前方マップ１６０を含む記憶メタデータ１３５を再構築するよう構成されてもよい。図１Ｅの実施形態において、ＬＩＤ  Ａと関連するデータの現行バージョンは、記憶位置１９１及び１９３それぞれにおけるデータパケット１１０の相対的なログ順序に基づいて判断されてもよい。記憶位置１９３におけるデータパケットは、記憶ログ内の記憶位置１９１におけるデータパケットの後に順序付けられているため、記憶層１３０は、記憶位置１９３がＬＩＤ  Ａに対応するデータのつい最近の最新バージョンを備えていることを判断してもよい。記憶層１３０は、ＬＩＤ  Ａを（記憶位置１９１の廃止データではなく）記憶位置１９３のデータパケットと関連付けるよう前方マップ１６０を再構築してもよい。
【００４３】
図２は、記憶層１３０を備えるシステム２００の別の実施形態を示している。記憶媒体１４０は、複数の独立バンク１１９Ａ〜Ｎを備えていてもよく、それぞれは、１つ以上の記憶アレイ１１５Ａ〜Ｎを備えていてもよい。各独立バンク１１９Ａ〜Ｎは、相互接続１２７を介して記憶コントローラ１３９に結合されてもよい。
【００４４】
記憶コントローラ１３９は、バス１２７を介して記憶層１３０からの記憶リクエストを受信するよう構成される記憶リクエストレシーバモジュール２３１を備えていてもよい。記憶リクエストレシーバ２３１は更に、記憶層１３０及び／又は記憶クライアント１０６へ／からデータを転送するよう構成されてもよい。従って、記憶リクエストレシーバモジュール２３１は、１つ以上の直接メモリアクセス（ＤＭＡ）モジュール、リモートＤＭＡモジュール、バスコントローラ、ブリッジ、バッファ、等を備えていてもよい。
【００４５】
記憶コントローラ１３９は、リクエストモジュール２３１を介して受信したリクエストに応じて記憶媒体１４０上にデータを格納するよう構成される書込みモジュール２４０を備えていてもよい。記憶リクエストは、リクエストに関するデータの論理インタフェースを備えるか、及び／又は、それを参照してもよい。書込みモジュール２４０は、上で開示したように、記憶媒体１４０の記憶アドレス空間１４４内部に順次データパケット１１０を追記することを含んでいてもよい自己記述型記憶ログにデータを格納するよう構成されてもよい。データパケット１１０は、データの論理インタフェースを備えるか、及び／又は、それを参照してもよい（例えば、データと関連するＬＩＤを備えていてもよい）。書込みモジュール２４０は、記憶のためにデータを処理するよう構成される書込み処理モジュール２４２を備えていてもよい。記憶のためにデータを処理することは、ａ）圧縮処理、ｂ）暗号化処理、ｃ）データを各データパケット１１０（及び／又は他のコンテナ）にカプセル化、ｄ）誤り訂正符号（ＥＣＣ）処理を実行、等のうちの１つ以上を備えていてもよい。書込みバッファ２４４は、記憶媒体１４０に記憶するためのデータをバッファに格納するよう構成されてもよい。幾つかの実施形態において、書込みバッファ２４４は、記憶コントローラ１３９のクロックドメインを記憶媒体１４０（及び／又は相互接続１２７）のクロックドメインと同期させるよう構成される１つ以上の同期バッファを備えていてもよい。
【００４６】
ログ記憶モジュール１３６は、データ記憶操作のための記憶位置を選択するよう構成されてもよく、アドレス指定及び／又は制御情報を独立バンク１１９Ａ〜Ｎの記憶アレイ１１５Ａ〜Ｎに提供してもよい。本明細書中に開示するように、ログ記憶モジュール１３６は、記憶媒体１４０の記憶アドレス空間１４４内にログフォーマットで順次データを追記するよう構成されてもよい。
【００４７】
データを書き込むための記憶操作は、ａ）１つ以上のデータパケットを記憶媒体１４０上の記憶ログに追記することと、ｂ）データのＬＩＤを１つ以上のデータパケットの記憶アドレスと関連付けるよう記憶メタデータ１３５を更新することとを備えていてもよい。幾つかの実施形態において、記憶メタデータ１３５は、記憶コントローラ１３９のメモリリソース上（例えば、記憶媒体１４０を備える記憶装置１４１の専用揮発性メモリリソース上）に維持されてもよい。代替として、又は加えて、記憶メタデータ１３５の一部は、記憶層１３０内部（例えば、図１Ａの演算装置１１０の揮発性メモリ１１２上）で維持されてもよい。幾つかの実施形態において、記憶メタデータ１３５は、記憶層１３０によって揮発性メモリ内に維持されてもよく、記憶媒体１４０上に定期的に格納されてもよい。
【００４８】
記憶コントローラ１３９は更に、記憶リクエストレシーバモジュール２３１を介して受信したリクエストに応じて記憶媒体１４０上の記憶ログからデータを読み取るよう構成されるデータ読取りモジュール２４１を備えていてもよい。リクエストは、要求したデータのＬＩＤ、要求したデータの記憶アドレス、及び／又は同様のものを備えていてもよい。読取りモジュール２４１は、ａ）特に、前方マップ１６０の使用によって要求されたデータを備えるデータパケット１１０の記憶アドレスを決定し、ｂ）記憶媒体１４０上の決定された記憶アドレスからデータパケット１１０を読み取り、ｃ）要求されたエンティティによる使用のためにデータを処理するよう構成されてもよい。記憶媒体１４０から読み取られたデータは、読取りバッファ２４５を介して読取りモジュール２４１に流してもよい。読取りバッファ２４５は、上で説明したように、クロックドメイン同期のために１つ以上の読取り同期バッファを備えていてもよい。読取り処理モジュール２４３は、ａ）解凍処理、ｂ）復号化処理、ｃ）１つ以上のデータパケット１１０（及び／又は他のコンテナ）からデータを抽出、ｄ）ＥＣＣ処理を実行、等のうちの１つ以上を含んでもよいが、これらに限定されない、記憶媒体１４４から読み取られたデータを処理するよう構成されてもよい。
【００４９】
記憶コントローラ１３９は更に、書込みモジュール２４０及び／又は読取りモジュール２４１のデータ及び／又は命令を特定の独立バンク１１９Ａ〜Ｎへ／から選択的にルーティングするよう構成されるバンクコントローラ２５２を備えていてもよい。幾つかの実施形態において、記憶コントローラ１３９は、独立バンク１１９Ａ〜Ｎ間の記憶操作をインターリーブするよう構成される。記憶コントローラ１３９は、例えば、書込みモジュール２４０からのデータがバンク１１９Ｂの記憶アレイ１１５Ｂにプログラムされている間に、バンク１１９Ａの記憶アレイ１１５Ａから読取りモジュール２４１へ読み取ってもよい。マルチバンク記憶操作の更なる実施形態は、Ｄａｖｉｄ  Ｆｌｙｎｎらの２００６年１２月１２日出願の米国特許出願第１１／９５２，０９５号明細書、名称「Ａｐｐａｒａｔｕｓ，Ｓｙｓｔｅｍ，ａｎｄ  Ｍｅｔｈｏｄ  ｆｏｒ  Ｍａｎａｇｉｎｇ  Ｃｏｍｍａｎｄｓ  ｆｏｒ  Ｓｏｌｉｄ−Ｓｔａｔｅ  Ｓｔｏｒａｇｅ  Ｕｓｉｎｇ  Ｂａｎｋ  Ｉｎｔｅｒｌｅａｖｅ」に開示されており、引用して本明細書に組み込む。
【００５０】
書込み処理モジュール２４２は、データパケット１１０をＥＣＣ符号語に符号化するよう構成されてもよい。本明細書中で用いるように、ＥＣＣ符号語とは、データ及び対応するエラー検出及び／又は訂正情報を指す。書込み処理モジュール２４２は、任意の適切なＥＣＣアルゴリズムを実施するか、及び／又は、データセグメントと、対応するＥＣＣシンドローム、ＥＣＣシンボル、ＥＣＣチャンク、及び／又は、他の構造化及び／又は非構造化ＥＣＣ情報とを含んでもよいが、これらに限定されない、任意の適切な型のＥＣＣ符号語を生成するよう構成されてもよい。ＥＣＣ符号語は、ブロックＥＣＣ符号化、畳み込みＥＣＣ符号化、低密度パリティ検査（ＬＤＰＣ）符号化、Ｇａｌｌａｇｅｒ符号化、リードソロモン符号化、ハミング符号、多次元パリティ符号化、巡回誤り訂正符号、ＢＣＨ符号、及び／又は同様のものを含むが、これらに限定されない任意の適切な誤り訂正符号化を備えていてもよい。書込み処理モジュール２４２は、所定サイズのＥＣＣ符号語を生成するよう構成されてもよい。従って、単一パケットは複数の異なるＥＣＣ符号語に符号化されてもよく、及び／又は、単一のＥＣＣ符号語は２つ以上のパケットの一部を備えていてもよい。代替として、書込み処理モジュール２４２は、任意のサイズのＥＣＣ符号語を生成するよう構成されてもよい。誤り訂正符号処理の更なる実施形態は、Ｊｅｒｅｍｙ  Ｆｉｌｌｉｎｇｉｍらの２０１３年３月１４日出願の米国特許出願第１３／８３０，６５２号明細書、名称「Ｓｙｓｔｅｍｓ  ａｎｄ  Ｍｅｔｈｏｄｓ  ｆｏｒ  Ａｄａｐｔｉｖｅ  Ｅｒｒｏｒ−Ｃｏｒｒｅｃｔｉｏｎ  Ｃｏｄｉｎｇ」に開示されており、引用して本明細書に組み込む。
【００５１】
幾つかの実施形態において、記憶層１３０は、ハイレベルの記憶操作を効率的に実施するよう論理アドレス空間１３２を活用する。記憶層１３０は、「クローン」又は「論理コピー」操作を実施するよう構成されてもよい。本明細書中で用いるように、「クローン」又は「論理コピー」とは、記憶層１３０によって管理されるデータを効率的に複写又は複製する操作を指す。クローン操作は、「オリジナルの」ＬＩＤのセットと同じデータに相当する「クローン化された」ＬＩＤのセットを作成することを含んでいてもよい。クローン操作は、従って、２つ（以上）の異なる論理インタフェース（例えば、ＬＩＤの異なるセット）を用いて記憶位置の同じセットを参照することを含んでいてもよい。クローン操作は、従って、記憶媒体１４０上に格納された１つ以上のデータパケット１１０の論理インタフェースを修正することを含んでいてもよい。「論理移動」とは、記憶層１３０によって管理されるデータの論理インタフェースを修正する操作を指してもよい。論理移動操作は、記憶媒体１４０上に格納されたデータを参照するために用いられるＬＩＤを変更することを含んでいてもよい。「マージ」操作は、論理アドレス空間１３２の異なる部分をマージすることを含んでいてもよい。本明細書中で更に詳細に開示するように、クローン及び／又は移動操作は、重複排除、スナップショット、論理コピー、アトミック操作、トランザクション、及び／又は同様のもの等のよりハイレベルな記憶操作を効率的に実施するために用いられてもよい。
【００５２】
図３Ａを参照すると、記憶層１３０は、クローン操作、移動操作、マージ操作等の記憶層１３０によって管理されるデータに関する論理インタフェース操作を管理するよう構成される論理インタフェース管理モジュール３３４を備えていてもよい。ＬＩＤのクローンを作成することは、特に、ＬＩＤの２つ以上の異なるセットの使用によって、データが参照されることを可能にするために、記憶媒体１４０内に格納されたデータの論理インタフェースを修正することを含んでいてもよい。従って、クローンを作成することは、ａ）ＬＩＤのセットを論理アドレス空間１３２（又はその専用部分）内に割り当てることと、ｂ）特に、記憶メタデータ１３５の使用によって、割り当てたＬＩＤをＬＩＤの「オリジナルの」セットと同じ記憶位置に関連付けることとを含んでいてもよい。クローンを作成することは、従って、１つ以上のエントリを、クローン化したＬＩＤの新しいセットを記憶位置の特定のセットに関連付けるよう構成される前方マップ１６０に追加することを含んでいてもよい。
【００５３】
論理インタフェース管理モジュール３３４は、クローン同期ポリシーに従うクローン操作を実施するよう構成されてもよい。クローン同期ポリシーは、複数のクローン即ちコピーのうちの第１のものに関して実行される操作がどのように他のクローン即ちコピーに増殖するかを決定するために用いられてもよい。例えば、クローンは、クローンのうちの１つを展開するリクエストが他のクローン及び／又はコピーを展開することを含むように、割当操作に対して同期させてもよい。本明細書中で用いるように、ファイル（又は他のデータセグメント）を展開することとは、１つ以上の論理識別子をクローンに追加すること、クローンに割り当てられた論理識別子のうちの１つ以上を修正すること、及び／又は同様のものを含んでもよいファイルのサイズ、範囲、及び／又は程度を増加させることを指す。クローン同期ポリシーは、特に、クローンがマージ及び／又は折り畳み操作（更に詳細に以下で開示する）において組み合わされる場合に、クローン間の相違がどのように管理されるかを決定してもよいマージポリシーを備えていてもよい。
【００５４】
図３Ａは、記憶層１３０によって実施される範囲クローン操作の一実施形態を示す。図３Ａの範囲クローン操作は、記憶クライアント１０６からのリクエストに応じて実施されてもよい。幾つかの実施形態において、記憶層１３０のインタフェース１３１は、クローン操作を実行するためのインタフェース及び／又はＡＰＩを提供するよう構成されてもよい。代替として、又は加えて、範囲クローン操作は、アトミック操作、トランザクション、スナップショット、論理コピー、ファイル管理操作、及び／又は同様のもの等のよりハイレベルな操作の一部として実行されてもよい。
【００５５】
図３Ａに示すように、記憶層１３０の前方マップ１６０は、ＬＩＤ１０２４〜２０４８を媒体記憶位置３４５３〜４４７７に結合するよう構成されるエントリ３６２を備えている。他のエントリは、図示の実施形態の詳細を曖昧にしないために図３Ａから省略する。本明細書中に開示するように、エントリ３６２、及びその結合は、それを介して記憶クライアント１０６が対応するデータ（例えば、データセグメント３１２）を参照してもよい論理インタフェース３１１Ａを定義してもよく、記憶クライアント１０６は、ＬＩＤ１０２４〜２０４８の使用によって、記憶層１３０を介してデータセグメント３１２（及び／又はその一部）にアクセスするか、及び／又はそれを参照してもよい。従って、ＬＩＤ１０２４〜２０４８は、特に、データセグメント３１２の論理インタフェース３１１Ａを定義する。
【００５６】
本明細書中に開示するように、記憶層１３０は、記憶媒体１４０上にコンテキストフォーマット（例えば、パケットフォーマット１１０）でデータを格納するよう構成されてもよい。図３Ａの実施形態において、記憶位置３４５３〜４４７７におけるデータパケット３１０は、データセグメント３１２を備えている。データパケット３１０は更に、データセグメント３１２の論理インタフェースを示す（例えば、データセグメント３１２をＬＩＤ１０２４〜２０４８と関連付ける）永続的メタデータ３１４を含んでいる。上で開示したように、記述的な永続的メタデータと関連するデータを格納することにより、記憶層１３０が、記憶ログの内容から前方マップ１６０（及び／又は他の記憶メタデータ１３５）をリビルドすることを可能にしてもよい。図３Ａの実施形態において、エントリ３６２は、記憶アドレス３４５３〜４４７７に格納されたデータを、パケット３１０の永続的メタデータ３１４によって参照されたＬＩＤ１０２４〜２０４８と関連付けることによって再構築されてもよい。図３Ａは単一のパケット３１０を示しているが、本開示はこれに関して限定されない。幾つかの実施形態において、エントリ３６２のデータは、複数の異なるパケット３１０に格納されてもよく、それぞれはそれぞれの永続的メタデータ３１４（例えば、各記憶位置に対する別々のパケット、等）を備えている。
【００５７】
論理インタフェース管理モジュール３３４は、特に、クローン化されるオリジナルのＬＩＤに対応するＬＩＤの新しいセットを割り当て、新規ＬＩＤをオリジナルのソースＬＩＤの記憶位置に結合することによって、エントリ３６２をクローン化するよう構成されてもよい。図３Ｂに示すように、ＬＩＤ１０２４〜２０４８のクローンを作成することは、ＬＩＤ６１４４〜７１６８の同等のセットを割り当て、識別子のクローン化されたセットを記憶アドレス３４５３〜４４７７に結合する論理インタフェース管理モジュール３３４を備えていてもよい。クローンを作成することは、従って、記憶媒体１４０上で複写及び／又は複製される基本となるデータセグメント３１２を必要とすることなく、ＬＩＤ６１４４〜７１６８を含むようデータセグメント３１２の論理インタフェース３１１Ｂを展開するために、記憶メタデータ１３５を修正することを含んでいてもよい。
【００５８】
データセグメント３１２の修正された論理インタフェース３１１Ｂは、記憶位置３４５３〜４４７７に格納された対応するデータパケット３１０のコンテキストフォーマットと矛盾している場合がある。上で開示したように、データパケット３１０の永続的メタデータ３１４は、ＬＩＤ１０２４〜２０４８を参照するが、クローン化されたＬＩＤ６１４４〜７１６８を含まないか、及び／又は参照しない。データセグメント３１２のコンテキストフォーマットは、修正された論理インタフェース３１１Ｂと一致するよう更新され（例えば、データを、ＬＩＤ１０２４〜２０４８のみとは対照的に、ＬＩＤ１０２４〜２０４８及び６１４４〜７１６８と関連付けるよう更新され）てもよく、これは、データセグメントをＬＩＤの両セットと関連付けるパケットフォーマットでデータセグメントを書き換えることを含んでいてもよい。記憶装置１４１がランダムアクセスの所定位置に書き込む記憶装置である場合、永続的メタデータ３１４は、所定位置で更新されてもよい。ライトワンスの非対称型記憶媒体１４０を備える他の実施形態において、かかる所定位置の更新は、非効率であり得る。従って、記憶層１３０は、データが、（媒体管理モジュール３７０によって）記憶回復、再配置、及び／又は同様のもの等の媒体管理操作において再配置されるまで、矛盾したコンテキストフォーマットでデータを維持するよう構成されてもよい。データセグメント３１２のコンテキストフォーマットを更新することは、データセグメント３１２を記憶媒体１４０上に再配置及び／又は書き換えることを含んでいてもよく、これは、データセグメント３１２が大きい場合、及び／又は、クローンが多数のＬＩＤを備える場合に、時間のかかるプロセスである場合があり、特に非効率である場合がある。従って、幾つかの実施形態において、記憶層１３０は、クローン化されたデータセグメント３１２のコンテキストフォーマットを更新することを先延ばしするか、及び／又は、１つ以上のバックグラウンド操作においてコンテキストフォーマットを更新してもよい。その間に、記憶層１３０は、矛盾したコンテキストフォーマット（データパケット３１０）内に格納される間に、データセグメント３１２に対するアクセスを提供するよう構成されてもよい。
【００５９】
記憶層１３０は、対応するデータセグメント３１２のコンテキストフォーマットが更新される前に、クローン操作の完了を通知するよう構成されてもよい。データは、その後、記憶媒体１４０上に更新されたコンテキストフォーマットで書き換えられ（例えば、再配置され）てもよい。更新は、クローン操作及び／又は他のフォアグラウンド記憶操作の「クリティカルパス」の外側で生じてもよい。幾つかの実施形態において、データセグメント３１２は、記憶回復プロセス、データリフレッシュ操作、及び／又は同様のもののうちの１つ以上の一部として、媒体管理モジュール３７０によって再配置される。従って、記憶クライアント１０６は、（例えば、ＬＩＤ１０２４〜２０４８及び／又は６１４４〜７１６８に関して）修正された論理インタフェース３１１Ｂを介して、修正された論理インタフェース３１１Ｂに従って更新されるべきデータセグメント３１２のコンテキストフォーマットを待つことなく、データセグメント３１２にアクセスできてもよい。
【００６０】
データセグメント３１２のコンテキストフォーマットが記憶媒体１４０上で更新されるまで、データセグメント３１２の修正された論理インタフェース３１１Ｂは、記憶メタデータ１３５（例えば、マップ１６０）内のみに存在してもよい。従って、前方マップ１６０が、特に、電源障害又はデータの破損によって失われた場合、クローン操作は、再構築される記憶メタデータ１３５において反映されなくてもよい（クローン操作は、永続的及び／又はクラッシュセーフでなくてもよい）。上で示したように、データパケット３１０の永続的メタデータ３１４は、データセグメント３１２がＬＩＤ６１４４〜７１６８ではなく１０２４〜２０４８のみと関連付けられていることを示している。従って、エントリ３６２のみが再構築され（図３Ａのように）、エントリ３６４は除外され、結果として、修正された論理インタフェース３１１Ｂを介して（例えば、６１４４〜７１６８を介して）データセグメント３１２にアクセスするその後の試行は失敗する場合がある。
【００６１】
幾つかの実施形態において、クローン操作は更に、クローン操作を永続的及び／又はクラッシュセーフにするよう、記憶媒体１４０上に永続的ノートを格納することを含んでいてもよい。本明細書中で用いるように、「永続的ノート」とは、記憶媒体１４０上に格納されるメタデータを指す。永続的ノート３６６は、ログ順序に相当してもよく、及び／又は、本明細書中に開示するように、パケットフォーマットに格納されてもよい。永続的ノート３６６は、データセグメント３１２の修正された論理インタフェース３１１Ｂの指示を備えていてもよい。図３Ｂの実施形態において、図示するクローン操作に対応する永続的ノート３６６は、記憶アドレス３４５３〜４４７７に格納されたデータを、ＬＩＤ１０２４〜２０４８及び６１４４〜７１６８の両範囲と関連付けるよう構成されてもよい。記憶媒体１４０の内容から前方マップ１６０を再構築する間、永続的ノート３６６は、データセグメント３１２を、更新された論理インタフェース３１１Ｂの両ＬＩＤ範囲と関連付けるよう、両エントリ３６２及び３６４を再構築するために用いられてもよい。幾つかの実施形態において、記憶層１３０は、記憶メタデータ１３５を更新すること（例えば、エントリ３６４を作成すること）、及び、記憶媒体１４０上に永続的ノート３６６を格納することに応じて、クローン操作の完了を通知してもよい。永続的ノート３６６は、更新された論理インタフェース３１１Ｂと一致するようデータセグメント３１２のコンテキストフォーマットを更新すること（例えば、上で開示したように、データセグメント３１２を再配置及び／又は書き換えること）に応じた記憶媒体１４０からの削除のために、無効にされるか、及び／又は、印を付けられてもよい。
【００６２】
幾つかの実施形態において、データセグメント３１２の更新されたコンテキストフォーマットは、データセグメント３１２を両ＬＩＤ範囲１０２４〜２０４８及び６１４４〜７１６８と関連付けることを含んでいてもよい。図３Ｃは、データセグメント３１２のための更新されたコンテキストフォーマット（データパケット３２０）の一実施形態を示している。図３Ｃに示すように、データパケット３２０の永続的メタデータ３２４は、データセグメント３１２を更新された論理インタフェース３１１Ｂの両ＬＩＤ範囲１０２４〜２０４８及び６１４４〜７１６８と関連付けている。データパケット３２０は、前方マップ１６０の更新されたエントリ３６２及び３６４において反映されてもよいオリジナルのデータパケット３１０とは異なる記憶アドレス（６４４３２〜６５４５６）に所定位置以外で書き込まれてもよい。データパケット３２０を記憶ログに追記することに応じて、対応する永続的ノート３６６は（もしあれば）、無効化されてもよい（記憶媒体１４０からのその後の削除のために削除されるか、及び／又は、印を付けられてもよい）。幾つかの実施形態において、永続的ノート３６６を削除することは、永続的ノート３６６をもはや記憶媒体１４０上に保管する必要がないことを示す１つ以上のトリムメッセージを発行することを含んでいてもよい。代替として、又は加えて、前方マップ１６０の一部は、永続的なクラッシュセーフ記憶位置（例えば、非一時的記憶リソース１０３及び／又は記憶媒体１４０）に格納されてもよい。前方マップ１６０（例えば、エントリ３６２及び３６４）を永続させることに応じて、永続的ノート３６６は、データセグメント３１２が更新されたコンテキストフォーマットに未だ書き換えられていなくても、上で開示したように無効化されてもよい。
【００６３】
論理インタフェース管理モジュール３３４は、「コピーオンライトモード」を含む１つ以上の異なるモードに従ってクローン操作を実施するよう構成されてもよい。図３Ｄは、コピーオンライトモードにおいてクローン化された範囲内で実行される記憶操作の一実施形態を示している。コピーオンライトモードにおいて、クローンを作成した後に生じる記憶操作は、クローンに互いから分岐させてもよい（例えば、エントリ３６２及び３６４は、異なる記憶アドレス、範囲、及び／又は程度を参照してもよい）。図３Ｄの実施形態において、記憶層１３０は、データセグメント３１２を、（図３Ｃに示すように）データセグメント３１２を両ＬＩＤ範囲１０２４〜２０４８及び６１４４〜７１６８と関連付けるよう構成される更新されたコンテキストデータフォーマット（パケット３２０）に書き込んでいる。記憶クライアント１０６は、次いで、ＬＩＤ６６５７〜７１６８に対応するデータを修正及び／又は上書きするよう１つ以上の記憶リクエストを発行してもよい。図３Ｄの実施形態において、記憶リクエストは、ＬＩＤ６６５７〜７１６８のデータを修正及び／又は上書きすることを含んでいる。これに応じて、記憶層１３０は、新規の、及び／又は修正されたデータを記憶媒体１３０上に格納してもよく、これは、上で開示したように、新規データパケット３４０を記憶ログに追記することを含んでいてもよい。データパケット３４０は、（例えば、パケット３４０の永続的メタデータ３４４の使用により）データセグメント３４２をＬＩＤ６６５７〜７４２４と関連付けてもよい。前方マップ１６０は、ＬＩＤ６６５７〜７４２４をデータセグメント３４２と関連付けるよう更新されてもよく、これは、エントリ３６４を、データセグメント３１２内のデータの未修正部分を参照し続けるよう構成されるエントリ３６５と、記憶アドレス７８５１２〜７９０２４に格納される新規データセグメント３４２を参照するエントリ３６７とに分割することを含んでいてもよい。図３Ｄに示すコピーオンライトモードにおいて、ＬＩＤ１０２４〜２０４８に対応するエントリ３６２は、変更されなくてもよく、記憶アドレス６４４３２〜６５４５６のデータセグメント３１２を参照し続けてもよい。図３Ｄには示していないが、範囲１０２４〜２０４８内の修正は、結果として、エントリ３６２に影響を及ぼす同様の分岐変化を生じてもよい。その上、記憶リクエストは、データを修正及び／又は上書きすることに限定されない。他の操作は、ＬＩＤのセットを展開する（データを追記する）こと、ＬＩＤを削除する（データを抹消、切り捨て、及び／又はトリムする）こと、及び／又は同様のことを含んでいてもよい。
【００６４】
幾つかの実施形態において、記憶層１３０は、「同期クローン」モード等の他のクローンモードに対応してもよい。同期クローンモードにおいて、ＬＩＤのクローン化された範囲内で行われる変更は、１つ以上の他の対応する範囲に反映されてもよい。図３Ｄの実施形態において、「同期クローン」モードで説明した記憶操作を実施することは、本明細書中に開示するように、新規データセグメント３４２を参照するようエントリ３６２を更新することを含んでいてもよく、特に、エントリ３６２を、ＬＩＤ１０２４〜１５３６をオリジナルのデータセグメント３１２の一部と関連付けるよう構成されるエントリに分割することと、ＬＩＤ１５３７〜２０４８を新規データセグメント３４２と関連付けるよう構成されるエントリを追加することとを含んでいてもよい。
【００６５】
図３Ｄのコピーオンライトの実施形態に戻って参照すると、論理インタフェース管理モジュール３３４は更に、クローンマージ操作を管理するよう構成されてもよい。本明細書中で用いるように、「マージ」又は「クローンマージ」とは、ＬＩＤの２つ以上の異なるセット及び／又は範囲を組み合わせるための操作を指す。図３Ｄの実施形態において、範囲マージ操作は、エントリ３６２に対応するクローン化エントリ３６５及び３６７とをマージすることを含んでいてもよい。論理インタフェース管理モジュール３３４は、より最近の変化が早期の変化をオーバーライドする書込み順序ポリシー；記憶操作の相対的優先度に基づく（例えば、記憶操作と関連する記憶クライアント１０６、アプリケーション、及び／又はユーザのプロパティに基づく）優先度ベースポリシー；完了インジケータ（例えば、アトミック記憶操作の完了、アトミック記憶操作の失敗、又は同様のもの）；ｆａｄｖｉｓｅパラメータ；ｉｏｃｔｒｌパラメータ；及び／又は同様のもの等の、マージポリシーに従って範囲マージ操作を実施するよう構成されてもよい。
【００６６】
図３Ｅは、範囲マージ操作の一実施形態を示している。図３Ｅの範囲マージ操作は、範囲６１４４〜６６５６を範囲１０２４〜２０４８にマージすることを含んでいてもよい。従って、範囲マージ操作は、ＬＩＤ範囲６１４４〜６６５６内で行われた変更を、マージポリシーに従って、ＬＩＤ範囲１０２４〜２０４８に選択的に適用することを含んでいてもよい。範囲マージ操作は、従って、ＬＩＤ１５３７〜２０４８を、新規／修正されたデータセグメント３４２を備える記憶アドレス７８５１２〜７９０２４と関連付けるよう、ＬＩＤ範囲１０２４〜２０４８を更新することを含んでいてもよい。更新は、前方マップ１６０内のエントリ３６２を分割することを含んでいてもよく；エントリ３７２は、ＬＩＤ１０２４〜１５３６をオリジナルのデータセグメント３１２と関連付けるよう構成されてもよく、エントリ３７３は、ＬＩＤ１５３７〜２０４８を新規データセグメント３４２と関連付けるよう構成されてもよい。もはやＬＩＤ１５３７〜２０４８によって参照されないデータセグメント３１２の一部は、本明細書中に開示するように、無効化されてもよい。オリジナルのソース範囲にマージされたＬＩＤ範囲６１４４〜７１６８は、前方マップ１６０から割り当て解除されるか、及び／又は削除されてもよい。
【００６７】
図３Ｅに示す範囲マージ操作は、結果として、論理インタフェース３１１Ｃをデータの一部に修正することを招く場合がある。データセグメント３４２（データパケット３４０）のコンテキストフォーマットは、データセグメント３４２を、マージされたＬＩＤ１５３７〜２０４８ではなく、ＬＩＤ６６５７〜７１６８と関連付けてもよい。上で開示したように、記憶層１３０は、矛盾したコンテキストフォーマットに格納されるデータセグメント３４２に対するアクセスを提供してもよい。記憶層１３０は、更新されたコンテキストフォーマットでデータセグメント３４２を格納するよう構成されてもよく、データセグメント３４２は、１つ以上のバックグラウンド操作（例えば、記憶回復操作）において、ＬＩＤ１５３７〜２０４８と関連付けられる。幾つかの実施形態において、範囲マージ操作は更に、データセグメント３４２を更新された論理インタフェース３１１Ｃと関連付ける（例えば、記憶アドレス７８５１２〜７９０２４のデータセグメント３４２をＬＩＤ１５３７〜２０４８と関連付ける）よう、記憶媒体１４０上に永続的ノート３６６を格納することを含んでいてもよい。上で開示したように、永続的ノート３６６は、範囲マージ操作が永続的であり、クラッシュセーフであることを確実にするために用いられてもよい。永続的ノート３６６は、論理インタフェース３１１Ｃと一致するコンテキストフォーマットでデータセグメント３４２を再配置する（例えば、データセグメント３４２をＬＩＤ１５３７〜２０４８と関連付ける）こと、前方マップ１６０を永続させること、及び／又は同様のことに応じて、削除されてもよい。
【００６８】
図３Ａ〜Ｅと関連して開示されるクローン操作は、範囲移動操作等の他の論理操作を実施するために用いられてもよい。図３Ａ〜Ｃに戻って参照すると、前方マップ１６０のエントリ３６２を複製するクローン操作は、データセグメント３１２をＬＩＤ１０２４〜２０４８のオリジナルのセット及び（エントリ３６４の）クローン化されたＬＩＤ６１４４〜７１６８の新しいセットの両方と関連付けるよう、データセグメント３１２と関連する論理インタフェースを修正することを含んでいてもよい。クローン操作は更に、データセグメント３１２の更新された論理インタフェース３１１Ｂを示す永続的ノート３６６を格納すること、及び／又は、１つ以上のバックグラウンド記憶操作において更新された論理インタフェース３１１Ｂに従ってデータセグメント３１２を書き換えることを含んでもよい。
【００６９】
論理インタフェース管理モジュール３３４は更に、「範囲移動」操作を実施するよう構成されてもよい。本明細書中で用いるように、「範囲移動」操作とは、データセグメントをＬＩＤの異なるセットと関連付けるよう１つ以上のデータセグメントの論理インタフェースを修正することを指す。範囲移動操作は、従って、１つ以上のデータセグメントを更新された論理インタフェースと関連付けるよう記憶メタデータ１３５（例えば、前方マップ１６０）を更新することと、データセグメントの更新された論理インタフェースを示す永続的ノート３６６を記憶媒体１４０上に格納することと、本明細書中に開示するように、更新された論理インタフェースと一致するコンテキストフォーマット（パケットフォーマット３１０）でデータセグメントを書き換えることとを含んでいてもよい。従って、記憶層１３０は、図３Ａ〜Ｅと関連して上で開示したものと同じ機構及び／又は処理ステップを用いて、範囲移動操作を実施してもよい。
【００７０】
図３Ａ〜Ｅに開示するクローン及び／又は範囲移動操作は、記憶層１３０に関して特定の制限を課してもよい。上で開示したように、データをコンテキストフォーマットで格納することは、データを参照する各ＬＩＤとデータを関連付けることを含んでいてもよい。図３Ｃの実施形態において、永続的メタデータ３２４は、両ＬＩＤ範囲１０２４〜２０４８及び６１４４〜７１６８に対する参照を備えている。データセグメントに対する番号参照を増加することは、従って、コンテキストデータフォーマットのオーバーヘッドの対応する増加を課す（例えば、永続的メタデータ３２４のサイズを増加させる）。幾つかの実施形態において、永続的メタデータ３１４のサイズは制限されてもよく、それは、特定のデータセグメント３１２を参照できる参照及び／又はクローンの数を制限してもよい。その上、異なるＬＩＤに対する複数の参照を含むことは、記憶回復操作を複雑にする場合がある。データセグメント３１２が再配置される場合に更新される必要がある前方マップエントリの数は、データセグメント３１２を参照するＬＩＤの数に従って変化してもよい。図３Ｃに戻って参照すると、グルーミング及び／又は記憶回復操作においてデータセグメント３１２を再配置することは、２つの別々のエントリ３６２及び３６４を更新することを含んでいてもよい。Ｎ個の異なるＬＩＤ（例えば、Ｎ個の異なるクローン）によって参照されるデータセグメントを再配置することは、前方マップ１６０内のＮ個の異なるエントリを更新することを含んでいてもよい。同様に、データセグメントを格納することは、Ｎ個のエントリを永続的メタデータ３１４に書き込むことを含んでいてもよい。この可変オーバーヘッドは、バックグラウンド記憶回復操作の実行を低減してもよく、対応できる同時発生するクローン及び／又は参照の数を制限してもよい。
【００７１】
幾つかの実施形態において、論理インタフェース管理モジュール３３４は、クローン操作によって課せられるオーバーヘッドを低減するよう中間マッピング層を備えるか、及び／又は、それを活用してもよい。中間マッピング層は、効率的なクローン化操作（並びに、本明細書中で更に詳細に開示するような、他の操作）を容易にするよう構成される「参照エントリ」を備えていてもよい。本明細書中で用いるように、「参照エントリ」とは、前方マップ１６０（及び／又は他の記憶メタデータ１３５）内の他のエントリを参照するために用いられるマッピングデータ構造のエントリを指す。参照エントリは、論理アドレス空間１３２内の１つ以上の他のエントリによって参照されている間だけ存在してもよい。幾つかの実施形態において、参照エントリは、記憶クライアント１０６にアクセスできなくてもよく、及び／又は、不変であってもよい。記憶層１３０は、記憶クライアントが、単一参照エントリインタフェースを経由して、複数の異なる論理インタフェースを介してデータの同じセットを参照することを可能にするよう、参照エントリを活用してもよい。記憶媒体１４０上のデータ（複数のＬＩＤによって参照されるデータ）のコンテキストフォーマットは、順に、他の永続的メタデータ（例えば、永続的ノート３６６）を介してＮ個の他の論理インタフェースと関連付けられるデータを参照エントリと関連付けるよう簡素化されてもよい。クローン化されたデータを再配置することは、従って、参照エントリとデータセグメントの新規記憶アドレスとの間の単一マッピングを更新することを含んでいてもよい。
【００７２】
図４Ａは、効果的なオープン−クローズ整合性のためのシステム４００の別の実施形態のブロック図である。システム４００は、中間マッピング層の使用によって範囲クローン操作を実施するよう構成される記憶層１３０を含んでいる。記憶メタデータ１３５は、論理アドレス空間１３２に関する前方マップ１６０を備えていてもよい。前方マップ１６０（及び／又は他の記憶メタデータ１３５）は、上で開示したような、記憶クライアント１０６による論理アドレス空間の割当、記憶アドレス空間１４４内のＬＩＤと記憶アドレスとの間の結合、等に関する情報を含んでもよい。
【００７３】
図４Ａの実施形態において、論理インタフェース管理モジュール３３４は、参照マップ４６０の使用によってクローン操作を管理するよう構成される参照モジュール４３４を備えていてもよい。参照マップ４６０は、論理アドレス空間１３２の１つ以上の論理インタフェース（例えば、ＬＩＤの１つ以上のセット）によって参照されるデータに対応する参照エントリを備えていてもよい。参照モジュール４３４は、もはや有効データを参照するために用いられない、及び／又は、前方マップ１６０内のエントリによってもはや参照されない参照エントリを削除するよう構成されてもよい。図４Ａに示すように、参照エントリは、前方マップ１６０とは別に（例えば、別々の参照マップ４６０に）維持されてもよい。参照エントリは、論理アドレス空間１３２よりも別の名前空間に維持されてもよい参照識別子の使用によって特定されてもよい。従って、参照エントリは、記憶層インタフェース１３１を介して記憶クライアント１０６に直接アクセス可能な論理アドレス空間１３２とは独立した別の中間の「仮想」又は「参照」アドレス空間４３２の一部であってもよい。代替として、幾つかの実施形態において、参照エントリは、記憶クライアント１０６によって直接アクセスできない論理アドレス空間１３２の所定の範囲及び／又は部分から選択されるＬＩＤを割り当てられてもよい。
【００７４】
論理インタフェース管理モジュール３３４は、前方マップ１６０内の１つ以上のＬＩＤエントリを参照マップ４６０内の参照エントリにリンクさせることによってクローン操作を実施するよう構成されてもよい。参照エントリは、クローン化されたデータの記憶アドレスに結合されてもよい。従って、クローン化されたデータと関連するＬＩＤは、参照マップ４６０を介して間接的に基本となるデータを参照してもよい（例えば、ＬＩＤは、順に、記憶アドレスにマッピングされる参照エントリにマッピングされてもよい）。従って、クローン化されたデータに対応する前方マップ１６０内のエントリは、「間接エントリ」と呼ばれてもよい。本明細書中で用いるように、「間接エントリ」とは、参照マップ４６０内の参照エントリを参照するか、及び／又はそれにリンクされる前方マップ１６０内のエントリを指す。間接エントリは、論理アドレス空間１３２内部でＬＩＤを割り当てられてもよく、記憶クライアント１０６にアクセス可能であってもよい。
【００７５】
上で開示したように、ＬＩＤの特定のセットをクローン化した後、記憶クライアント１０６は、クローン化された範囲のうちの１つ以上の内部で記憶操作を実行してもよく、それにより、（クローンモードに従って）クローンに互いから分岐させてもよい。「コピーオンライト」モードにおいて、特定のクローンに対して行われた変更は、他のクローン化された範囲に反映されなくてもよい。図４Ａの実施形態において、クローンに対して行われた変更は、間接エントリと関連する「ローカル」エントリに反映されなくてもよい。本明細書中で用いるように、「ローカルエントリ」とは、記憶媒体１４０の１つ以上の記憶アドレスに直接マッピングされる間接エントリの一部を指す。従って、ローカルエントリは、特定のクローンにおいて変更された、及び／又は、他のクローンの内容とは異なるデータを参照するよう構成されてもよい。ローカルエントリは、従って、特定のクローンに対してユニークなデータに対応してもよい。
【００７６】
変換モジュール１３４は、特に、参照マップ４６０及び／又は参照モジュール４３４の使用によりクローン化されたデータと関連するデータにアクセスするよう構成されてもよい。変換モジュール１３４は、最初にローカルエントリをトラバースし、目標のフロント識別子がローカルエントリ内に見つからなかった場合、間接エントリがリンクされる参照エントリ内部のトラバースを継続することを含んでもよいカスケードルックアップを実施してもよい。
【００７７】
ログ記憶モジュール１３６及び媒体管理モジュール３７０は、クローン化されたデータのコンテキストフォーマットを管理するよう構成されてもよい。図４Ａの実施形態において、クローン化されたデータ（前方マップ１６０内で２つ以上のＬＩＤ範囲によって参照されるデータ）は、データを参照マップ４６０の１つ以上の参照エントリと関連付けるコンテキストフォーマットで格納されてもよい。かかるクローン化されたデータセグメントと共に格納される永続的メタデータは、データセグメントと関連する各ＬＩＤを特定することとは対照的に、単一参照エントリに対応してもよい。クローンを作成することは、従って、上で開示したように、特に、媒体管理モジュール３７０の使用によって、１つ以上のバックグラウンド操作においてクローン化されたデータのコンテキストフォーマットを更新することを含んでいてもよい。
【００７８】
図４Ｂは、参照マップ４６０を用いるクローン操作の一実施形態を示している。状態４１３Ａにおいて、論理アドレス空間１３２内のＬＩＤ１０エクステント２に対応するエントリ（図４Ｂで１０，２と表記する）は、記憶媒体１４０上の記憶アドレス２００００のデータを直接参照してもよい。他のエントリは、開示する実施形態の詳細を曖昧にしないために図４Ｂから省略する。状態４１３Ｂにおいて、記憶層１３０は、範囲１０，２をクローン化するための操作を実施する。範囲１０，２をクローン化することは、ａ）ＬＩＤの新しい範囲（図４Ｂで４００，２と表記する）を論理アドレス空間に割り当てることと、ｂ）エントリ１０，２及び４００，２が記憶アドレス２００００のクローン化されたデータ（図４Ｂで１０００００，２と表記する）を参照できる参照マップ４６０に参照エントリを割り当てることとを含んでいてもよい。クローン操作は更に、状態４１３Ｃで示すように、エントリ１０，２及び４００，２を参照エントリ１０００００，２と関連付けることを含んでいてもよい。上で開示したように、エントリ１０，２及び４００，２を参照エントリ１０００００，２と関連付けることは、エントリ１０，２及び４００，２が間接エントリであることを示すことを含んでいてもよい。状態４１３Ｃは更に、記憶アドレス２００００のデータを参照エントリ１０００００，２と関連付けるよう、及び／又は、エントリ１０，２及び４００，２を参照マップ４６０内の参照エントリ１０００００，２と関連付けるよう、記憶媒体１４０に永続的ノート３６６を格納することを含んでいてもよい。
【００７９】
記憶層１３０は、ＬＩＤ１０又は４００のどちらかを介して（参照エントリ１０００００，２を介して）記憶アドレス２００００のデータセグメントに対するアクセスを提供してもよい。ＬＩＤ１０又は４００に関するリクエストに応じて、変換モジュール１３４は、前方マップ１６０内の対応するエントリが、参照マップ４６０内のエントリと関連する間接エントリであることを判断してもよい。これに応じて、参照モジュール４３４は、前方マップ１６０（もしあれば）内部のローカルエントリ及び参照マップ４６０内の対応する参照エントリ（例えば、参照エントリ１０００００，２）の使用によって記憶アドレスを決定するためのカスケードを実行する。
【００８０】
ステップ４１３Ｃにおけるクローンを作成することは、データを両ＬＩＤ範囲１０，２及び４００，２と関連付けるようステップ２００００において格納されるデータセグメントの論理インタフェースを修正することを含んでいてもよい。しかし、データのコンテキストフォーマットは、データをＬＩＤ１０，２とのみ関連付けてもよい。上で開示したように、クローンを作成することは更に、参照エントリ１０００００，２を介してデータセグメントをＬＩＤ１０，２及び４００，２と関連付けるよう、記憶媒体１４０に永続的ノート３６６を格納することを含んでいてもよい。データセグメントは、媒体管理モジュール３７０によって実行される１つ以上のバックグラウンド操作において更新されたコンテキストフォーマットで書き換えられてもよい。データは、別々のＬＩＤ範囲１０，２及び４００，２とは対照的に、参照エントリ１０００００，２とデータセグメントを関連付ける永続的メタデータ３１４と共に格納されてもよい。従って、データセグメントを再配置すること（状態４１３Ｄで示すように）は、データを参照する各ＬＩＤ範囲に対応する複数のエントリ（例えば、複数のエントリ１０，２及び４００，２）とは対照的に、参照マップ４６０内の単一エントリを更新することのみを必要としてもよい。その上、前方マップ１６０内のＬＩＤ範囲の幾つでも、記憶媒体１４０上のデータと関連する永続的メタデータ３１４のサイズを増加させることなく、及び／又は、媒体管理モジュール３７０の操作を複雑化させることなく、データセグメントを参照してもよい。
【００８１】
図４Ｃは、参照エントリを用いて実施されるクローン操作の別の実施形態を示している。ＬＩＤ１０２４〜２０４８及び／又はデータセグメント３１２のクローンを作成するためのリクエストに応じて、論理インタフェース管理モジュール３３４は、データセグメント３１２を表すために参照エントリ４８２を参照マップ４６０内に割り当てるよう構成されてもよい。前方マップ１６０内のＬＩＤの幾つでも、データセグメント３１２と関連する永続的メタデータのオーバーヘッドを増加させることなく、及び／又は、媒体管理モジュール３７０の操作を複雑化させることなく、参照エントリ４８２を介してデータを参照してもよい。図４Ｃに示すように、参照エントリ４８２は、データセグメント３１２の記憶アドレス（記憶アドレス６４４３２〜６５４５６）に結合されてもよい。前方マップ１６０内のエントリ４６２及び４７２は、参照エントリ４８２を介して間接的に記憶アドレスを参照してもよい（例えば、図４Ｃに示すように、参照エントリ４８２にリンクされてもよい）。
【００８２】
図４Ｃの実施形態において、参照エントリ４８２は、識別子０Ｚ〜１０２４Ｚを割り当てられている。参照エントリ４８２の識別子は、論理アドレス空間１３２の特定部分に対応してもよく、又は、異なる別の名前空間に対応してもよい。記憶層１３０は、特に、エントリ４６２及び／又は４７２と関連するメタデータの使用によって、エントリ４６２及び４７２を参照エントリ４８２にリンクさせてもよい。代替として、又は加えて、間接エントリ４６２及び／又は４７２は、記憶アドレスメタデータを、参照エントリ４８２に対する参照及び／又はリンクで置き換えてもよい。参照エントリ４８２は、記憶層１３０を介して記憶クライアント１０６によって直接アクセスできなくてもよい。
【００８３】
クローン操作は更に、データセグメント３１２の論理インタフェース３１１Ｄを修正することを含んでいてもよく、修正された論理インタフェース３１１Ｄは、データセグメント３１２が間接エントリ４６２のＬＩＤ１０２４〜２０４８及び／又は間接エントリ４７２の６１４４〜７１６８を介して参照されることを可能にしてもよい。参照エントリ４８２は記憶クライアント１０６に対してアクセスできなくてもよいが、参照エントリ４８２は、変換モジュール１３４によって（間接エントリ４６２及び４７２を介して）データにアクセスするために用いられてもよく、よって、データセグメント３１２の修正された論理インタフェース３１１Ｂの一部として見なされてもよい。
【００８４】
クローン操作は更に、記憶媒体１４０上に永続的ノート３６６Ａを格納することを含んでいてもよい。上で開示したように、永続的ノート３６６Ａ及び／又は３６６Ｂの格納は、クローン操作が永続的及びクラッシュセーフであることを確実にしてもよい。永続的ノート３６６Ａは、データセグメント３１２と関連する参照エントリ４８２を特定するよう構成されてもよい。従って、永続的ノート３６６Ａは、記憶アドレス６４４３２〜６５４５６を参照エントリ識別子０Ｚ〜１０２４Ｚと関連付けてもよい。クローン操作は更に、エントリ４６２及び／又は４７２のＬＩＤを参照エントリ４８２と関連付けるよう構成される別の永続的ノート３６６Ｂを格納することを含んでいてもよい。代替として、エントリ４６２、４７２、及び４８２間の関連付けに関するメタデータは、単一の永続的ノート内に含まれてもよい。永続的ノート３６６Ａ及び／又は３６６Ｂは、データセグメント３１２が更新されたコンテキストフォーマットで再配置され、及び／又は、前方マップ１６０（及び／又は参照マップ４６０）が永続されるまで、記憶媒体１４０上に保管されてもよい。
【００８５】
データセグメント３１２の修正された論理インタフェース３１１Ｄは、コンテキストフォーマットオリジナルデータパケット４１０Ａと矛盾している場合があり、永続的メタデータ３１４Ａは、参照エントリ４８２及び／又はクローン化されたエントリ４７２ではなく、ＬＩＤ１０２４〜２０４８を参照してもよい。記憶層１３０は、修正された論理インタフェース３１１Ｄと一致する更新されたコンテキストフォーマット（パケット４１０Ｂ）でデータセグメント３１２を格納するよう構成されてもよく、永続的メタデータ３１４Ｂは、それぞれのクローン化された範囲（例えば、エントリ４６２及び４７２）内のＬＩＤを別々に特定することとは対照的に、データセグメント３１２を参照エントリ４８２と関連付けてもよい。従って、間接エントリ４８２の使用により、データセグメント３１２の論理インタフェース３１１Ｄが、永続的メタデータ３１４Ａ〜Ｂのサイズ制限とは無関係に、幾つでもＬＩＤを備えることが可能となる。その上、参照エントリ４８２の追加のクローンは、データセグメント３１２のコンテキストフォーマットを更新せずに作成されてもよく、かかる更新は、新規ＬＩＤ範囲を前方マップ１６０内の参照エントリ４８２と関連付けることによって、及び／又は、特に、永続的ノート３６６の使用によって行われてもよい。
【００８６】
上で開示したように、間接エントリ４６２及び／又は４７２は、最初に、参照エントリ４８２を介してデータセグメント３１２を参照してもよい。クローン操作の後に実行される記憶操作は、前方マップ１６０内のローカルエントリの使用によって反映されてもよい。クローン操作の完了後、記憶層１３０は、クローン化されたＬＩＤのうちの１つ以上と関連するデータを修正してもよい。図４Ｄの実施形態において、記憶クライアント１０６は、間接エントリ４６２のＬＩＤ１０２４〜１０５２に対応するデータを修正及び／又は上書きし、これは、新規データセグメント４１２を（記憶アドレス７８２３〜７８５１のデータパケット４２０内の）記憶ログに追記することを含んでいてもよい。
【００８７】
データセグメント４１２は、データセグメント４１２をＬＩＤ１０２４〜１０５２と関連付けるよう構成される永続的メタデータ４１４Ａを備えるコンテキストフォーマット（データパケット４２０）に格納されてもよい。記憶層１３０は、データセグメント４１２をローカルエントリ４６５内のＬＩＤ１０２４〜１０５２と関連付けるよう構成されてもよい。ローカルエントリ４６５は、間接エントリ４６２及び／又は参照エントリ４８２を介してデータを参照することとは対照的に、更新されたデータを直接参照してもよい。
【００８８】
データ１０２４〜１０５２（又はそれらのサブセット）に関するリクエストに応じて、論理インタフェース管理モジュール３３４は、カスケードルックアップ操作において要求されたＬＩＤに対する参照を検索してもよく、これは、ローカルエントリ（もしあれば）の後に参照エントリに対する参照を検索することを含んでいてもよい。図４Ｄの実施形態において、ローカルエントリ４６５は、参照エントリ４６２につき６４４３２〜６４４６０ではなく、ＬＩＤ範囲１０２４〜１０５２（記憶アドレス７８２３〜７８５１）に関するリクエストを満足させるために用いられてもよい。ローカルエントリ内で見つからなかったＬＩＤに対するリクエスト（例えば、ＬＩＤ１０５３〜２０４８）は、参照エントリ４８２を介して、引き続き処理されてもよい。範囲１０２４〜２０４８に関するデータの論理インタフェース３１１Ｅは、従って、１つ以上のローカルエントリ４６５、１つ以上の間接エントリ４６２、及び／又は１つ以上の参照エントリ４８２を備えていてもよい。
【００８９】
図４Ｅに示す更なる実施形態において、記憶層１３０は、論理インタフェース３１１ＥのＬＩＤのうちの別の１つ（例えば、ＬＩＤ６１４４〜６１６２）を介してクローンのデータを修正してもよく、論理インタフェースデリミタは、図示の実施形態の詳細を曖昧にしないために図４Ｅに示していない。修正されたデータは、上で開示したように、ローカルエントリ４７５を用いて参照されてもよい。図４Ｅの実施形態において、範囲４６２及び４７２のそれぞれは、参照エントリ４８２の識別子０Ｚ〜５２Ｚを介してその前に参照されたデータのそれ自体のそれぞれのローカルバージョンを有している。よって、エントリ４６２又は４７２のどちらも、範囲０Ｚ〜５２Ｚに対する参照を含んでいない。参照モジュール４３４は、対応するデータ（及び参照識別子）がもはや参照されていないことを判断してもよく、よって、記憶媒体１４０から削除（例えば、無効化される）ために印を付けられてもよい。図４Ｅに示すように、データを無効化することは、特に、範囲０Ｚ〜５２Ｚを削除するよう参照エントリ４８２を修正することによって、データに対する参照を参照マップ４６０から削除することを含んでいてもよい。データを無効化することは更に、（例えば、記憶アドレス６４４３２〜６４４８４に格納されたデータを保管する必要がないことを示すよう）逆方向マップ、妥当性ビットマップ、及び／又は同様のもの等の他の記憶メタデータ１３５を更新することを含んでいてもよい。エントリ４６２及び４７２の範囲は、どちらかが参照エントリ４８２のどの部分も参照しなくなるまで、分岐し続けてもよく、上で開示したように、その点において、参照エントリ４８２は削除されてもよく、それによって参照されるデータは無効化されてもよい。
【００９０】
図４Ｄ及び４Ｅは、対応する間接エントリ４６２及び４７２とのオーバーラップしたＬＩＤ範囲を備えるローカルエントリ４６５及び４７５を示しているが、本開示はこれに関して限定されない。幾つかの実施形態において、図４Ｄの記憶操作は、ローカルエントリ４６５を作成し、ＬＩＤ１０５３〜２０４８のみを参照するよう間接エントリ４６２を修正することによって反映されてもよい。同様に、図４Ｅの操作は、ローカルエントリ４７５を作成することと、端を切り捨てられたＬＩＤ範囲６１６３〜７１６８を参照するよう間接エントリ４７２を修正することとを含んでいてもよい。
【００９１】
図４Ａに戻って参照すると、参照モジュール４３４は、参照マップ４６０を管理するか、「グルーミング」するよう構成されてもよい。幾つかの実施形態において、参照マップ４６０内の各エントリは、参照カウントを含むメタデータを備えている。参照カウントは、参照エントリに対する新規参照又はリンクが追加されるようにインクリメントされてもよく、エントリに対する参照を削除することに応じてデクリメントされてもよい。幾つかの実施形態において、参照カウントは、参照マップ４６０内の各参照識別子に対して維持されてもよい。代替として、参照カウントは、全体として参照エントリに対して維持されてもよい。参照エントリの参照カウントが０に達した場合、参照エントリ（及び／又はその一部）は、参照マップ４６０から削除されてもよい。参照エントリ（及び／又は参照エントリの一部）を削除することは、（データをもはや保管する必要がないことを示す）本明細書中に開示するように、記憶媒体１４０上の対応するデータを無効化することを含んでいてもよい。
【００９２】
別の実施形態において、参照モジュール４３４は、「マークアンドスイープ」のアプローチを用いて参照エントリを削除してもよい。参照モジュール４３４（又は、変換モジュール１３４等の他のプロセス）は、特に、前方マップ１６０内の間接エントリ（又はエントリの他の種類）から参照エントリへのリンクを辿ることによって、参照マップ４６０内のエントリに対する参照を定期的にチェックしてもよい。マークアンドスイープ中にアクセスされない参照エントリは、上で開示したように、削除されてもよい。マークアンドスイープは、バックグラウンドプロセスとして動作してもよく、もはや使用されていない参照エントリを特定し、削除するよう、定期的にマークアンドスイープ操作を実行してもよい。
【００９３】
幾つかの実施形態において、本明細書中に開示する参照マップ４６０は、要求があり次第（例えば、クローンの作成、又は他の間接データ参照に応じて）、作成されてもよい。他の実施形態において、全てのデータ記憶操作は、中間マッピングを介して実行されてもよい。かかる実施形態において、記憶クライアント１０６は、論理アドレス空間１３２等の中間マッピング層を介して記憶アドレスにリンクされるか、及び／又は、それを参照してもよい間接的な、仮想アドレス空間（ＶＡＳ）の仮想識別子（ＶＩＤ）を割り当ててもよい。ＶＡＳは、記憶クライアント１０６と記憶媒体１４０との間に中間マッピング層を追加してもよい。記憶クライアント１０６は、論理アドレス空間１３２の論理識別子にマッピングされ、順に、それぞれの記憶装置１４１及び／又は記憶媒体１４０上の記憶アドレスと関連する、仮想化されたアドレス空間のＶＩＤを用いてデータを参照してもよい。本明細書中で用いるように、ＶＡＳは、論理ユニット番号（ＬＵＮ）アドレス空間、仮想ＬＵＮ（ｖＬＵＮ）アドレス空間、及び／又は同様のものを含んでもよいが、これらに限定されない。
【００９４】
図５Ａは、仮想化されたアドレス空間５３２を用いて、特に、効果的な範囲クローン操作を実施するよう構成されるアグリゲーション層５３０の一実施形態を示している。アグリゲーション層５３０は、インタフェース５３１を介して記憶クライアント１０６にＶＡＳ５３２を提示するよう構成されてもよい。本明細書中で開示したインタフェース１３１のように、インタフェース５３１は、ブロックデバイスインタフェース、仮想記憶インタフェース、キャッシュインタフェース、及び／又は同様のもののうちの１つ以上を備えていてもよい。記憶クライアント１０６は、インタフェース５３１を介してＶＡＳ５３２のＶＩＤに対する参照によって、アグリゲーション層５３０によって管理される記憶リソースに関する記憶操作を実行してもよい。
【００９５】
アグリゲーション層５３０は更に、１つ以上の中間記憶層（例えば、記憶層１３０）を介してＶＩＤを記憶リソースにマッピングするよう構成されるＶＡＳ変換モジュール５３４を備えていてもよい。従って、アグリゲーション層５３０のＶＡＳメタデータ５３５は、ＶＡＳ５３２のＶＩＤとＶＡＳ５３２のＬＩＤとの間の何れかから何れかへのマッピングを備えるＶＡＳ前方マップ５６０を含んでもよい。図５Ａには示していないが、ＶＡＳ変換モジュール５３４及び／又はＶＡＳ前方マップ５６０は、複数の異なる記憶層１３０の複数の論理アドレス空間１３２を単一のＶＡＳ５３２へ集約するよう構成されてもよい。従って、幾つかの実施形態において、ＶＡＳ５３２は複数の異なる論理アドレス空間１３２に対応してもよく、それぞれはＬＩＤの別々のセットを備え、それぞれがそれぞれの記憶層１３０、記憶装置１４１、及び／又は記憶媒体１４０に対応している。
【００９６】
図５Ａは、記憶層１３０とは別々にアグリゲーション層５３０を示しているが、本開示はこれに関して限定されない。幾つかの実施形態において、アグリゲーション層５３０のＶＡＳ５３２、ＶＡＳ前方マップ５６０、ＶＡＳ変換モジュール５３４、及び／又は他のモジュールは、記憶層１３０の一部として実装されてもよい。
【００９７】
アグリゲーション層５３０は、特に、効果的な範囲クローン、移動、マージ、及び／又は他のハイレベルな操作を実施するようＶＡＳ５３２によって提供される中間仮想アドレス空間を活用するよう構成されてもよい。代替として、又は加えて、中間マッピング層は、ハードディスク及び／又は同様のもの等のランダムアクセスの所定位置に書き込む記憶装置上で効果的なクローン操作を可能にするよう活用されてもよい。
【００９８】
記憶クライアント１０６は、ＶＡＳ５３２のＶＩＤに関して記憶操作を実行してもよい。従って、記憶操作は、２つ（以上）の変換層を備えていてもよい。ＶＡＳ前方マップ５６０は、ＶＡＳ５３２のＶＩＤと記憶層１３０の論理アドレス空間１３２の識別子との間に第１の変換層を備えていてもよい。記憶層１３０の前方マップ１６０は、記憶媒体１４０上のＬＩＤと記憶アドレスとの間に第２の変換層を実装してもよい。
【００９９】
アグリゲーション層５３０は、特に、ＶＡＳメタデータ５３５、ＶＡＳ前方マップ５６０、及び／又はＶＡＳ変換モジュール５３４の使用によりＶＡＳ５３２内部での割当てを管理するよう構成されてもよい。幾つかの実施形態において、ＶＩＤをＶＡＳ５３２内に割り当てることは、論理アドレス空間１３２内に１つ以上の対応するＬＩＤ（及び／又は１つ以上の他の記憶層の識別子）を割り当てることを備えていてもよい。従って、ＶＡＳ５３２内に割り当てられた各ＶＩＤは、論理アドレス空間１３２の１つ以上のＬＩＤに対応してもよい。アグリゲーション層５３０のＶＩＤと論理アドレス空間１３２との間の何れかから何れかへのマッピングは、本明細書中に開示するように、点在するか、及び／又は、何れかから何れかへであってもよい。その上、幾つかの実施形態において、アグリゲーション層５３０は、ＶＩＤと複数の異なる論理アドレス空間１３２との間の、何れかから何れかへ、及び／又は範囲管理されるマッピングを維持するよう構成されてもよい。従って、アグリゲーション層５３０は、異なるそれぞれの記憶層１３０によって管理される複数の異なる記憶装置１４１の論理アドレス空間を、単一の集約ＶＡＳ５３２に集約するか、及び／又は、組み合わせてもよい。
【０１００】
図５Ａの実施形態において、論理アドレス空間１３２は、直接アクセス可能でなくてもよく、よって、記憶クライアント１０６は、インタフェース５３１を介してＶＩＤを用いて記憶リソースを参照してもよい。従って、１つ以上のＶＩＤに関してアグリゲーション層５３０を介して記憶操作を実行することは、ａ）ＶＩＤに対応する記憶層１３０を特定すること、ｂ）ＶＡＳ変換モジュール５３４及び／又はＶＡＳ前方マップ５６０の使用により、ＶＩＤにマッピングされる記憶層１３０のＬＩＤを決定すること、及びｃ）決定されたＬＩＤに関して記憶層１３０の使用により記憶操作を実施することを含んでいてもよい。
【０１０１】
図５Ｂは、アグリゲーション層５３０の使用により実施されるクローン操作の一実施形態を示している。上で開示したように、ＶＡＳ前方マップ５６０は、記憶層１３０の論理アドレス空間１３２を介して記憶アドレスに間接的にマッピングされるＶＡＳ５３２に対応してもよい。図５Ｂは、アグリゲーション層５３０を介して記憶操作を実施するために用いられるアドレス指定層を示している。ＶＡＳ５３２のＶＩＤは、特に、アグリゲーション層５３０のインタフェース５３１を介して記憶クライアント１０６にアクセス可能な最上位アドレス指定層を備えていてもよい。記憶層１３０の論理アドレス空間１３２は、中間アドレス指定層を備えていてもよい。ＶＡＳ前方マップ５６０は、ＶＩＤとＬＩＤとの間の何れかから何れかへのマッピングを備えていてもよい。ＬＩＤは、前方マップ１６０の使用により記憶アドレス空間１４４内部の記憶アドレスにマッピングされてもよい。従って、ＶＩＤは、記憶層１３０の中間論理アドレス空間を介して記憶アドレス空間１４４にマッピングされてもよい。
【０１０２】
図５Ｂに示すように、状態５６３Ａにおいて、ＶＡＳ前方マップ５６０は、ＶＡＳ５３２内の２つのＶＩＤ（１０及び１１）を表すエントリ１０，２を備えていてもよい。ＶＡＳ前方マップ５６０は、ＶＩＤエントリ１０，２を論理アドレス空間１３２のＬＩＤと関連付ける。図５Ｂの実施形態において、ＶＡＳ前方マップ５６０は、ＶＩＤエントリ１０，２をＬＩＤ１０００００及び１００００１（エントリ１０００００，２）に結合する。エントリ１０，２は、ＶＩＤに関して記憶操作を実行してもよい特定の記憶クライアント１０６に割り当てられてもよい。状態５６３Ａにおいて、記憶層１３０は、エントリ１０００００，２を記憶媒体１４０上の１つ以上の記憶アドレス（記憶アドレス２００００）にマッピングするよう構成されてもよい。
【０１０３】
状態５３６Ｂにおいて、アグリゲーション層５３０は、ＶＩＤエントリ１０，２をクローン化するようクローン操作を実施してもよい。クローン操作は、ａ）新規ＶＩＤエントリ４００，２を割り当てることと、ｂ）新規ＶＩＤエントリ４００，２をＶＡＳ前方マップ５６０内の対応するエントリ１０００００，２と関連付けることとを含んでいてもよい。前方マップ１６０内の対応するエントリ１０００００，２は、変化しないままであってもよい。代替として、前方マップ１６０内のエントリ１０００００，２の参照カウント（又は他のインジケータ）は、エントリが複数のＶＩＤ範囲によって参照されていることを示すよう更新されてもよい。記憶アドレス２００００に記憶されたデータのコンテキストフォーマットは、変化しないままであってもよい（例えば、引き続きデータを論理インタフェース１０００００，２と関連付けてもよい）。クローン操作は更に、前方マップ１６０内のＶＩＤエントリ４００，２とエントリ１０００００，２との間の関連を示すよう、記憶媒体１４０上に永続的ノート３６６を格納することを含んでいてもよい。代替として、又は加えて、クローン操作は、ＶＡＳ前方マップ５６０（及び／又はその一部）を永続させることによって永続的及び／又はクラッシュセーフにされてもよい。
【０１０４】
状態５３６Ｃにおいて、記憶アドレス２００００のデータは、記憶アドレス４００００に再配置されてもよい。再配置は、標準の記憶媒体メンテナンス操作において生じ、クローン化されたデータのコンテキストフォーマットを更新しなくてもよい。データを再配置することは、前方マップ１６０内の単一のエントリを更新することを含んでいてもよい。ＶＡＳ前方マップ５６０は、変化しないままであってもよい。ＶＩＤ範囲１０，２及び４００，２の異なるバージョンに対する修正は、中間の論理アドレス空間を介して管理されてもよい。ＶＩＤ１０に対する修正は、ａ）新規ＬＩＤを論理アドレス空間１３２内に割り当てること、ｂ）新規ＬＩＤと関連して修正されたデータを格納すること、及びｃ）新規ＬＩＤをＶＡＳ前方マップ５６０内のＶＩＤ１０にマッピングすることを含んでいてもよい。
【０１０５】
本明細書中に開示する範囲クローン、移動、及び／又はマージ操作を実施するための実施形態は、スナップショット、重複排除、アトミック操作、トランザクション、ファイルシステム管理機能、及び／又は同様のもの等の、他の、よりハイレベルな記憶操作を効率的に実施するために用いられてもよい。図４Ａに戻って参照すると、記憶層１３０は、記憶媒体１４０上の重複データを特定するよう構成される重複排除モジュール３７４を備えていてもよい。重複データは、任意の適切な機構を用いて特定されてもよい。幾つかの実施形態において、重複データは、ａ）記憶媒体１４０の内容を入念に調べること、ｂ）様々なデータセグメントのための署名値を生成すること、及びｃ）重複データを特定するようデータ署名値を比較することによって特定される。署名値は、暗号署名、ハッシュコード、巡回符号、及び／又は同様のものを含んでもよいが、これらに限定されない。署名情報は、前方マップ１６０等の記憶メタデータ１３５内（例えば、エントリと関連するメタデータ内）に格納されてもよく、及び／又は、記憶メタデータ１３５の１つ以上の別々のデータ構造内で維持されるか、及び／又はインデックス化されてもよい。重複排除モジュール３７４は、データ署名を比較してもよく、署名一致を検出した際に、１つ以上の重複排除操作を実行してもよい。重複排除操作は、署名一致を検証する（例えば、バイト単位のデータ比較を実行する）ことと、２つ以上のＬＩＤ範囲を介して重複データを参照するよう１つ以上の範囲クローン操作を実行することとを含んでいてもよい。
【０１０６】
図６は、重複排除操作の一実施形態を示している。前方マップ１６０は、異なるそれぞれの記憶アドレス３４５３〜４４７７及び７０２４〜８０４８に格納された重複データを参照してもよいエントリ６６２及び６７２を備えていてもよい。エントリ６６２及び６７２は、それぞれＬＩＤ１０２４〜２０４８及び６１４４〜６６５６に対応する異なるそれぞれの論理インタフェース６６３及び６７３に対応してもよい。重複データセグメント（データセグメント６１２）は、上で開示したように、重複排除モジュール３７４によって特定及び／又は検証されてもよい。代替として、重複データは、データが記憶層１３０での格納のために受信された際に特定されてもよい。従って、データは、データの追加コピーが記憶媒体１４０に格納される前に、重複排除されてもよい。
【０１０７】
エントリ６６２及び６７２が重複データを参照することを特定及び／又は検証することに応じて、記憶層１３０は、データを重複排除するよう構成されてもよく、これは、ＬＩＤの２つの異なるセットを介して重複データの単一のコピーを参照するよう１つ以上の範囲クローンを作成することを含んでいてもよい。上で開示したように、範囲クローンを作成することは、データセグメントの論理インタフェース６６３及び６７３を修正することを含んでいてもよい。図６の実施形態において、重複データは、記憶位置３４５３〜４４７７及び７０２４〜８０４８それぞれにおけるパケット６１０内のデータセグメント６１２として格納される。クローン操作は、データセグメントが両エントリ６６３及び６７３によって参照できるように、データセグメント（又は、データセグメントの新しいバージョン及び／又はコピー）のうちの１つの論理インタフェースを修正することを含んでいてもよい。
【０１０８】
範囲クローン操作は、図３Ａ〜Ｅの範囲クローン実施形態、図４Ａ〜Ｅの参照エントリ実施形態、及び／又は図５Ａ〜Ｂの中間マッピング実施形態を含む本明細書中で開示したクローン実施形態の何れかを用いて実施されてもよい。図６の重複排除実施形態において、両ＬＩＤ範囲１０２４〜２０４８及び６１４４〜７１６８は、参照エントリ６８２を介してデータセグメント６１２の単一バージョン（他のデータセグメントは無効化されてもよい）を参照するよう修正されてもよい。よって、重複排除操作は、重複排除されたデータセグメント６１２（パケット６１０を参照する）を表すよう参照エントリ６８２を作成することを含んでいてもよい。重複排除操作は更に、上で開示したように、参照エントリ６８２を介してデータセグメント６１２にマッピングされてもよい、エントリ６６２及び６７２を各間接エントリ６６５及び６７５に修正及び／又は変換することを含んでいてもよい。重複排除操作は更に、データセグメント６１２をＬＩＤ１０２４〜２０４８及び６１４４〜７１６８の両セット（並びに参照エントリ６８２）に関連付けるようデータセグメント６１２の論理インタフェース６６９を修正することを含んでいてもよい。重複排除操作は更に、上で開示したように、記憶媒体１４０上に永続的ノート３６６を格納することを含んでいてもよい。
【０１０９】
重複排除操作は更に、上で開示したように、修正された論理インタフェース６６９と一致するようデータセグメント６１２のコンテキストフォーマットを更新することを含んでいてもよい。コンテキストフォーマットを更新することは、１つ以上のバックグラウンド操作において、更新されたコンテキストフォーマット（データパケット６１０）でのデータセグメント６１２を記憶ログ（例えば、記憶位置８４４３２〜８５４５６における）に追記することを含んでいてもよい。更新されたデータパケット６１０は、データセグメント６１２を更新された論理インタフェース６６９（例えば、参照識別子０Ｚ〜１０２３Ｚを介するＬＩＤ１０２４〜２０４８及び６１４４〜６６５６）と関連付ける永続的メタデータ６１４を備えていてもよい。
【０１１０】
図６は、単一のエントリ又はＬＩＤの範囲をクローン化及び／又は重複排除することを示しているが、本開示はこれに関して限定されない。幾つかの実施形態において、複数のフロント識別子範囲は、単一のクローン操作においてクローン化されてもよい。この種類のクローン操作は、アドレス範囲（又は論理アドレス空間１３２全体）の「スナップショット」を作成するために用いられてもよい。本明細書中で用いるように、スナップショットとは、特定の時点での記憶装置（又はＬＩＤのセット）の状態を指す。スナップショットは、スナップショット操作を完了した後の範囲内に生じる変更に関わらず、ＬＩＤ範囲の「オリジナルの」状態を維持してもよい。
【０１１１】
図７は、スナップショット操作を効果的に実施するよう構成される記憶層１３０を備えるシステム７００の一実施形態を示すブロック図である。図７の実施形態は、論理アドレス空間１３２内部のアドレス範囲に関係する。しかし、本開示はこれに関して限定されず、上で開示したように、ＶＡＳ５３２内の範囲及び／又は程度等の他の種類のアドレス範囲との使用に適合することができる。記憶層１３０は、本明細書中に開示するように、スナップショット操作を実施するよう構成されるスナップショットモジュール７３６及びタイミングモジュール７３８を備えていてもよい。
【０１１２】
状態７７３Ａにおいて、記憶層１３０は、ＬＩＤ範囲ＦＲ１のスナップショットを作成するよう構成されてもよい。スナップショットを作成することは、特定の時間におけるＬＩＤ範囲ＦＲ１の状態を保存することを含んでいてもよい。スナップショット操作は更に、ＬＩＤ範囲ＦＲ１を保存する一方で、その後の記憶操作がＬＩＤ範囲内で実行されることを可能にすることを含んでいてもよい。
【０１１３】
上で開示したように、記憶層１３０は、特に、ログ記憶モジュール１３６の使用によって記憶媒体１４０上の記憶ログにデータを格納するよう構成されてもよい。記憶操作のログ順序は、（図１Ｄ及び１Ｅと共に開示したような）記憶区分１７０Ａ〜Ｎ上のシーケンスインジケータ１１３及び／又は記憶媒体１４４の記憶アドレス空間１４４内の順次記憶位置等のデータパケットと関連するシーケンス情報を用いて決定されてもよい。
【０１１４】
記憶層１３０は更に、ログ内のデータの相対的な時間順序等の他の種類の順序及び／又はタイミング情報を維持するよう更新されてもよい。しかし、幾つかの実施形態において、データのログ順序は、特に、媒体管理操作において記憶装置内で再配置されるデータにより、タイミング情報を正確に反映していない場合がある。データを再配置することは、記憶媒体１４０上のそのオリジナルの記憶位置からデータを読み取ることと、記憶ログ内の現在の追記点にデータを追記することとを含んでいてもよい。よって、古い再配置されたデータは、記憶ログ内のより新しい現在のデータと共に格納されてもよい。従って、記憶ログが、特定のＬＩＤに関するデータ操作の相対的なログ順序を保存してもよいが、記憶ログは、絶対的なタイミング情報を正確に反映しない場合がある。
【０１１５】
幾つかの実施形態において、ログ記憶モジュール１３６は、データをタイミング情報と関連付けるよう構成され、これは、記憶媒体１３０上で実行される記憶操作の相対的なタイミング情報を確立するために用いられてもよい。幾つかの実施形態において、タイミング情報は、記憶媒体１４０上に格納される各データパケットに適用されてもよい（タイミングモジュール７３８によって維持される）それぞれのタイムスタンプを備えていてもよい。タイムスタンプは、データパケット３１０の永続的メタデータ３１４内に格納されてもよい。代替として、又は加えて、タイミングモジュール７３８は、より粗いレベルの粒度でタイミング情報を追跡するよう構成されてもよい。幾つかの実施形態において、タイミングモジュール７３８は、１つ以上のグローバルタイミングインジケータ（エポック識別子）を維持している。本明細書中で用いるように、「エポック識別子」とは、記憶層１３０を介して実行される記憶操作の相対タイミングを決定するために用いられる識別子を指す。ログ記憶モジュール１３６は、データパケット７１０内にエポックインジケータ７３９を含むよう構成されてもよい。エポックインジケータ７３９は、タイミングモジュール７３８によって維持される現在のエポック（例えば、グローバルタイミングインジケータ）に対応してもよい。エポックインジケータ７３９は、対応するデータセグメント７１２が記憶ログに書き込まれたエポックに対応してもよい。エポックインジケータ７３９は、パケット７１０の永続的メタデータ７１４内に格納されてもよく、よって、再配置操作中にデータパケット７１０と関連付けられたままであってもよい。タイミングモジュール７３８は、新しいスナップショットの作成、ユーザリクエスト、及び／又は同様のもの等の特定のイベントに応じてグローバルエポック識別子をインクリメントするよう構成されてもよい。データセグメント７１２のエポックインジケータ７３９は、再配置及び／又は他の媒体メンテナンス操作を通して変化しないままであってもよい。従って、エポックインジケータ７３９は、記憶ログ内のデータパケット７１０の相対位置とは無関係にデータセグメント７１２のオリジナルの記憶時間に対応してもよい。
【０１１６】
スナップショット操作は、特定の時間における特定のＬＩＤ範囲（ＦＲ１）の状態を保存することを含んでいてもよい。スナップショット操作は、従って、記憶媒体１４０上のＦＲ１に関するデータを保存することを含んでいてもよい。データを保存することは、ａ）特定の時間枠（エポック）に関するデータを特定することと、ｂ）記憶媒体１４０上に特定されたデータを保存すること（例えば、特に、記憶回復操作において、特定されたデータが記憶媒体１４０から削除されることを防ぐこと）とを含んでいてもよい。スナップショットに関するデータは、その後の記憶操作（例えば、データを上書き、修正、トリム、及び／又は、そうでなければ不要にする操作）によって無効化されることにも関わらず保持されてもよい。特定のスナップショットのために保存される必要があるデータは、上で開示したエポックインジケータ７３９の使用により特定されてもよい。
【０１１７】
状態７７３Ａ（エポックインジケータｅ０によって表記される時間ｔ１）において、記憶層１３０は、スナップショット操作を実施するためのリクエストを受信してもよい。リクエストに応じて、スナップショットモジュール７３６は、タイミングモジュール７３８によって維持されるエポック識別子の現在の値を決定してもよい。エポック識別子の現在の値は、現在の「スナップショットエポック」と呼ばれてもよい。図７の実施形態において、スナップショットエポックは０である。スナップショットモジュール７３６は更に、タイミングモジュール７３８に現在のグローバルエポックインジケータをインクリメントさせる（例えば、エポック識別子を１にインクリメントさせる）よう構成されてもよい。スナップショットを作成することは更に、現在の更新されたエポックインジケータを示すよう構成される記憶媒体上に永続的ノート３６６を格納することを含んでいてもよい。永続的ノート３６６は更に、スナップショットエポックに関するデータが保存されるべきである（例えば、スナップショット操作において保存されるべきＬＩＤの特定の範囲ＦＲ１を特定する）ことを示すよう構成されてもよい。永続的ノート３６６は、ａ）現在のエポック識別子を決定する、及び／又は、ｂ）特定のスナップショットエポック（例えば、エポックｅ０）と関連するデータを保存するようスナップショットモジュール７３６及び／又は媒体管理モジュール３７０を構成するために、メタデータ再構築操作中に用いられてもよい。
【０１１８】
スナップショットモジュール７３６は更に、スナップショットエポックと関連するデータを保存するよう媒体管理モジュール３７０に指示するよう構成されてもよい。これに応じて、媒体管理モジュール３７０は、ａ）スナップショットのために保存するようデータを特定し（スナップショットデータ）、ｂ）特に、記憶回復操作において、特定されたデータが記憶媒体１４０から削除されることを防ぐよう構成されてもよい。媒体管理モジュール３７０は、データパケット７１０のエポックインジケータ７３９の使用によりスナップショットデータを特定してもよい。図１Ｅと共に開示したように、データは記憶媒体１４０上の所定位置以外に書き込まれてもよい。特定のＬＩＤと関連するデータの最新バージョンは、ログ内の対応するデータパケット７１０の順序に基づいて決定されてもよい。媒体管理モジュール３７０は、保存する必要のあるデータとしてスナップショットエポック内のデータの最新バージョンを特定するよう構成されてもよい。スナップショットエポック内の他のデータによって廃止と表現されたデータは、削除されてもよい。図１Ｅの実施形態を参照して、データＸ０及びＸ１（同じＬＩＤ  Ａと関連する）が両方ともスナップショットエポック０で印を付けられた場合、媒体管理モジュール３７０は、エポック０における最新バージョンのデータをＸ１として特定し、データＸ０を削除のために印を付ける。しかし、仮にデータＸ０がスナップショットエポック０で印を付けられ、Ｘ１がより後のエポックで印を付けられた場合（例えば、スナップショット操作後のエポック１）、媒体管理モジュール３７０は、スナップショットのデータを保存するために、データＸ０を記憶媒体１４０上に保存してもよい。
【０１１９】
状態７７３Ｂにおいて、スナップショットモジュール７３８は、スナップショットＦＲ１に関するデータ（エポックｅ０と関連するデータ）を保存する一方で、記憶操作が引き続き、後続のエポック（例えば、エポックｅ１）の間に実行されることを可能にするよう構成されてもよい。ＦＲ１を保存することは、エポックｅ０におけるＬＩＤ範囲のオリジナルの状態（ＦＲ１（ｅ０））を保存するようＦＲ１をクローン化する一方で、記憶操作がＦＲ１に関して継続することを可能にすることを含んでいてもよい。クローン操作は、上で開示したように、重複エントリ、参照エントリ、及び／又は中間マッピング層のうちの１つ以上を用いて実施されてもよい。記憶操作は、ＬＩＤ  ＦＲ１に関して、データを記憶媒体１４０上の記憶ログに追記することを含んでいてもよい。スナップショットＦＲ１（ｅ０）に対応するクローン化されたＬＩＤは、不変であってもよい。従って、ＦＲ１（ｅ０）のスナップショットは、ＬＩＤ範囲に対する変更に関わらず、保存されてもよい。状態７７３Ｂにおいて格納されたデータは、現在のエポック（ｅ１）のエポックインジケータ７３９と共に格納されてもよい。スナップショットモジュール７３６は、エポックｅ１（及び後続のエポック）中に実行される記憶操作によって廃止と表現されるか、及び／又は無効化されるデータを保存するよう構成されてもよい。図１Ｅの実施形態に戻って参照すると、媒体管理モジュール３７０は、データＸ０を、スナップショットＦＲ１のために保存するデータとして特定してもよい（データＸ１は、スナップショット操作が実行された後に格納されてもよい）。スナップショットモジュール７３８及び／又は媒体管理モジュール３７０は、データがその後、エポックｅ１においてデータＸ１によって廃止とされたとしても、データＸ０を保存するよう構成されてもよい。データＸ０は、ＬＩＤ  Ａが削除、トリム、又は同様のことをされたとしても、保持されてもよい。
【０１２０】
ＬＩＤ範囲ＦＲ１（ｅ０）及びエポックインジケータｅ０と共に印を付けられたデータを含むＦＲ１（ｅ０）のスナップショットは、対応するスナップショットが削除されるまで、保存されてもよい。スナップショットは、インタフェース１３１を介して受信されるリクエストに応じて削除されてもよい。状態７７３Ｃにおいて示すように、エポック０は、他の介在するエポック（エポックｅ１〜ｅＮ）が作成及び／又は削除された後でさえも、記憶媒体１４０上に保持されてもよい。エポックｅ０を削除することは、エポックｅ０と関連する無効／廃止データを削除するようスナップショットモジュール７３８及び／又は媒体管理モジュール３７０を構成することを含んでいてもよい。
【０１２１】
状態７７３Ａにおいてスナップショットを作成した後に実行される記憶操作は、論理アドレス空間１３２及び、特に、前方マップ１６０を修正してもよい。修正は、データを記憶媒体１４０に追記すること、ＦＲ１に対するＬＩＤを追加及び／又は削除すること等に応じて記憶アドレス結合を更新することを含んでいてもよい。幾つかの実施形態において、スナップショットモジュール７３６は、論理アドレス空間１３２の別の領域、別の名前空間内、別のマップ内、及び／又は同様のもの等の記憶メタデータ１３５内のスナップショット範囲ＦＲ１（ｅ０）を保存するよう構成される。代替として、スナップショットモジュール７３６は、時間ｅ０におけるＦＲ１のオリジナルバージョンを保存することなく、変更が前方マップ１６０内で行われることを可能にしてもよい。スナップショットモジュール７３６は、記憶媒体１４０上に保存されたスナップショットデータを用いてｅ０（時間ｔ１）に対する前方マップ１６０を再構築するよう構成されてもよい。時間ｔ１における前方マップ１６０は、上で開示したように、再構築されてもよく、これは、（ログ順序で）記憶媒体１４０上に格納されたデータに順次アクセスすることと、データパケット７１０と関連する永続的メタデータ７１４に基づいて前方マップエントリを作成することとを含んでいてもよい。図７の実施形態において、エポックｅ０に対応する前方マップ１６０は、エポックインジケータ７３９と共にｅ０（以下）に印を付けられるデータパケット７１０を参照することによって再構築されてもよい。ｅ０よりも大きいエポックインジケータ７３９と関連するデータは、（スナップショットＦＲ１（ｅ０）の作成後の操作に対応するかかるデータが作成されたため）無視されてもよい。
【０１２２】
本明細書中に開示する記憶層１３０は更に、効果的な範囲移動操作を実施するよう構成されてもよい。図８Ａは、本明細書中に開示する記憶層１３０によって実施される移動操作の一実施形態を示している。前方マップ１６０は、ＬＩＤ１０２３〜１０２５を記憶媒体１４０上の各データセグメントに結合するよう構成されるエントリ８６２を含んでいる。エントリ８６２は、実施形態の詳細を良好に示すために別々に示されている。しかし、エントリ８６２は、ＬＩＤ１０２３〜１０２５の全範囲を備える単一のエントリ内に含まれてもよい。エントリ８６２は、記憶アドレス３２、３０９６、及び８７２に格納されたデータの論理インタフェース８６３を定義してもよい。上で開示したように、記憶アドレス３２、３０９６、及び８７２に格納されたデータは、データを対応するＬＩＤ１０２３、１０２４、及び１０２５と関連付けるコンテキストフォーマットで格納されてもよい。
【０１２３】
記憶層１３０は、特に、ＬＩＤ１０２３、１０２４、及び１０２５と各媒体記憶位置３２、３０９６、及び８７２のデータとの間の関連を、ＬＩＤの新規セット（例えば、９２１５、９２１６、及び９２１７）に対応する新規論理インタフェース８６３Ｂで置き換えることによって、エントリ８６２をＬＩＤ９２１５〜９２１７に移動するよう構成されてもよい。移動操作は、インタフェース１３１を介して受信されるリクエストに応じて、及び／又は、よりハイレベルな記憶操作（例えば、ファイル名を変更するためのリクエスト、前方マップ１６０のバランスを取るか、及び／又はデフラグするための操作、又は同様のもの）の一部として、実行されてもよい。
【０１２４】
移動操作は、上で開示したクローン化実施形態のうちの１つ以上に従って実施されてもよい。幾つかの実施形態において、移動操作は、ＬＩＤ１０２３、１０２４、及び１０２５にマッピングされた記憶アドレスを目的ＬＩＤ９２１５、９２１６、及び９２１７と関連付けることを含んでいてもよく、これは、結果として、移動操作に従うデータの論理インタフェース８６３Ａを修正することを招く。移動操作は更に、移動操作が永続的及びクラッシュセーフであることを確実にするよう、記憶媒体１４０上に永続的ノート３６６を格納することを含んでいてもよい。記憶アドレス３２、８７２、及び３０９６に格納されたデータは、上で開示したように、１つ以上のバックグラウンド操作において、更新された論理インタフェース８６３Ｂに従って書き換えられてもよい。
【０１２５】
図８Ｂは、移動操作の別の実施形態を示している。上記のように、移動操作は、ＬＩＤ１０２３〜１０２５と関連するデータをＬＩＤ９２１５〜９２１７に移動することを含んでいてもよい。図８Ｂの移動操作は、図４Ａ〜Ｅと共に開示したような参照エントリを利用してもよい。従って、移動操作は、移動操作を表すよう参照マップ４６０内に参照エントリ８８２を作成することを含んでいてもよい。移動操作は更に、参照エントリ８８２を介してデータを参照するよう新しい間接エントリ８６６を割り当てることを含んでいてもよい。参照エントリ８８２は、アドレス３２、３０９６、及び８７２と関連付けられてもよい移動前ＬＩＤ１０２３、１０２４、及び１０２５を備えていてもよい。データの新規論理インタフェース８６３Ｃは、従って、間接エントリ８６６及び対応する参照エントリ８８２を備えていてもよい。移動操作は更に、上で開示したように、移動操作が永続的及びクラッシュセーフであることを確実にするよう、記憶媒体上に永続的ノート３６６を格納することを含んでいてもよい。
【０１２６】
記憶アドレス３２、３０９６、及び８７２に格納されるデータのコンテキストフォーマットは、更新された論理インタフェース８６３Ｃと矛盾している場合があり、データのコンテキストフォーマットは、各データセグメントを、９２１５、９２１６、及び９２１７（及び／又は参照エントリ）とは対照的に、ＬＩＤ１０２３、１０２４、及び１０２５と関連付けてもよい。永続的ノート３６６は、記憶メタデータ１３５（例えば、前方マップ１６０及び／又は参照マップ４６０）を、必要であれば、正しく再構築することができるように、データの更新された論理インタフェース８６３Ｃを備えていてもよい。
【０１２７】
記憶層１３０は、修正された論理インタフェース８６３Ｃ（ＬＩＤ９２１５、９２１６、及び９２１７）を介して矛盾したコンテキストフォーマットのデータに対するアクセスを提供してもよい。データは、移動操作の後（移動操作及び／又は他の記憶操作の経路の外側）で、修正された論理インタフェース８６３Ｃと一致するコンテキストフォーマットで書き換え及び／又は再配置されてもよい。幾つかの実施形態において、記憶アドレス３２、３０９６、及び／又は８７２のデータは、上で説明したように、１つ以上のバックグラウンド操作において、媒体管理モジュール３７０によって書き換えられてもよい。従って、移動操作は、前方マップ１６０を更新すること及び／又は永続的ノート３６６を格納することに応じて完了してもよい（及び／又は、通知を返してもよい）。
【０１２８】
図８Ｃに示すように、前方マップ１６０及び／又は他の記憶メタデータ１３５は、移動操作のデータを書き換えることに応じて更新されてもよい。図８Ｃの実施形態において、媒体記憶位置３２に格納されたデータセグメント８１２Ａは、修正された論理インタフェース８６３Ｃと一致するコンテキストフォーマット（データパケット８１０Ａ）でデータを格納することを含んでいてもよい記憶回復操作において再配置されてもよい。データパケット８１０Ａは、データセグメント８１２ＡをＬＩＤ９２１５と関連付ける永続的メタデータ８１４Ａを備えていてもよい。前方マップ１６０は、更新されたコンテキストフォーマットでデータを参照するよう更新されてもよく、それは、参照エントリではなくデータパケット８１０Ａを直接参照するようＬＩＤ９２１５の間接エントリを修正することを含んでいてもよい。ＬＩＤ９２１５に対応するエントリは、間接エントリから標準のローカルエントリに戻ってもよく、ＬＩＤ１０２３に対する参照エントリは、参照マップ４６０から削除されてもよい。
【０１２９】
図８Ｄを参照すると、記憶クライアント１０６は、ＬＩＤ９２１７と関連するデータを修正してもよく、これは、データセグメントを所定位置以外（例えば、記憶アドレス７７２）に格納することを含んでいてもよい。データセグメントは、修正された論理インタフェース８６３Ｃと一致する（例えば、データをＬＩＤ９２１７と関連付ける）コンテキストフォーマットに書き込まれてもよい。これに応じて、前方マップ１６０は、ＬＩＤ９２１７に対するエントリをデータセグメントの記憶アドレス（例えば、記憶アドレス７７２）と関連付け、上で開示したように、ＬＩＤ１０２５に対する参照エントリを参照マップ４６０から削除するよう更新されてもよい。
【０１３０】
幾つかの実施形態において、参照マップ４６０は、その中のエントリ（例えば、エントリ８８２）が記憶クライアント１０６によって直接参照できないように、前方マップ１６０とは別に維持されてもよい。この分離により、記憶クライアント１０６がより効率的に動作することを可能にしてもよい。例えば、データが更新されたコンテキストフォーマットで書き換えられるか、及び／又は再配置されるまで操作を停止させるのではなく、データ操作は、データが１つ以上のバックグラウンドプロセスにおいて書き換えられている間に進んでもよい。図８Ｅを参照すると、上で開示した移動操作に続いて、記憶クライアント１０６は、ＬＩＤ１０２４に関連してデータを格納してもよい。ＬＩＤ１０２４に対応する参照エントリ８８２は、特に、更新されたコンテキストフォーマットで未だ書き換えられていない記憶アドレス３０９６のデータのため、参照マップ４６０内に含まれてもよい。しかし、参照マップ４６０は、前方マップ１６０とは別に維持されるため、名前の衝突が生じる恐れはなく、記憶操作は完了できる。前方マップ１６０は、媒体記憶位置４３２２に格納されるデータに対する論理インタフェースを備える一方で、引き続き、論理インタフェース８６３Ｃ（及び参照マップ４６０）を介してＬＩＤ１０２４に以前に結合されたデータに対するアクセスを提供する別のエントリ８６４を含んでもよい。
【０１３１】
開示した移動操作において、間接エントリが、特に、対応するデータを書き換え、再配置、修正、削除、及び／又は上書きすることに起因して、もはや参照マップ４６０の参照エントリにリンクされていない場合、参照エントリは削除されてもよく、間接エントリは、直接的なローカルエントリに戻ってもよい。加えて、移動操作と関連する永続的ノート３６６は、上で開示したように、無効化されるか、及び／又は、記憶媒体１４０から削除されてもよい。
【０１３２】
図１Ａに戻って参照すると、記憶層１３０のインタフェース１３１は、本明細書中に開示する記憶操作を実行するためのＡＰＩ及び／又はインタフェースを提供するよう構成されてもよい。ＡＰＩ及び／又はインタフェースは、ブロックインタフェース、拡張記憶インタフェース、及び／又は同様のもののうちの１つ以上を介して公開されてもよい。ブロックインタフェースは、ｆａｄｖｉｓｅパラメータ、Ｉ／Ｏ制御パラメータ、及び同様のものの使用により、追加のＡＰＩ及び／又は機能を含むよう拡張されてもよい。インタフェース１３１は、本明細書中に開示する範囲クローン操作、範囲移動操作、範囲マージ操作、重複排除、スナップショット、及び他のよりハイレベルな操作を実行するようＡＰＩを提供してもよい。インタフェース１３１は、記憶クライアント１０６が、属性及び／又はメタデータをＬＩＤ範囲に適用（例えば、範囲を凍結）し、範囲スナップショットを管理すること等を可能にしてもよい。本明細書中に開示するように、範囲クローン操作は、１つ以上のソースＬＩＤのセットの論理コピーを作成することを含んでいてもよい。範囲クローン、移動、及び／又はマージ操作は、図３Ａ〜Ｅに示す範囲クローン実施形態、図４Ａ〜Ｅの参照エントリ実施形態、及び／又は図５Ａ〜Ｂの中間マッピング層実施形態を含むが、これらに限定されない本明細書中に開示した実施形態の何れかを用いて実施されてもよい。
【０１３３】
本明細書中に開示する範囲クローン、移動、及び／又はマージ操作は、重複排除、スナップショット、効果的なファイルコピー操作（論理ファイルコピー）、ファイル整合性管理、アドレス空間管理、ｍマップチェックポイント、アトミック書込み、及び同様のもの等のよりハイレベルな操作を実施するために用いられてもよい。これらのよりハイレベルな操作も、記憶層１３０のインタフェース１３１を介して公開されてもよい。開示する操作は、オペレーションシステム、ファイルシステム、データベースサービス、及び／又は同様のもの等の種々の異なる記憶クライアント１０６によって活用されてもよい。
【０１３４】
図９Ａは、ファイル管理操作を実施するよう構成される記憶層１３０を備えるシステム９００Ａの一実施形態を示している。システム９００Ａは、複雑さ、オーバーヘッド、及び同様のものを低減するために記憶層１３０の機能を活用するよう構成されてもよいファイルシステム９０６を備えていてもよい。ファイルシステム９０６は、効果的なファイルレベルのスナップショット及び／又はコピー操作を実施するよう、本明細書中に開示する範囲クローン、移動、移動、スナップショット、重複排除、及び／又は他の機能を活用するよう構成されてもよい。ファイルシステム９０６は、クライアントリクエスト（例えば、コピーコマンド、ファイルスナップショットｉｏｃｔｒｌ、又は同様のもの）に応じてかかる操作を実施するよう構成されてもよい。ファイルシステム９０６は、特に、ａ）ソースファイルのダーティページ（もしあれば）をフラッシュすること、ｂ）コピーされたファイル及び／又はファイルレベルのスナップショットを表すよう新しい目的ファイルを作成すること、及びｃ）ソースファイルを目的ファイルにクローン化するよう構成される範囲クローン操作を実行するよう記憶モジュール１３０に指示することによって、ソースファイルに関する効果的なファイルコピー及び／又はファイルレベルのスナップショット操作を実施するよう構成されてもよい。
【０１３５】
図９Ａは、ファイルシステム９０６のための範囲クローン操作を実施するための種々の実施形態を示している。幾つかの実施形態において、及び、状態９１１Ａに示すように、記憶層１３０は、論理アドレス空間１３２を維持するよう構成されてもよく、これにより、ソースファイルのＬＩＤ（クローン化されるファイル）が、前方マップ１６０の使用により記憶媒体上のファイルデータにマッピングされる。状態９１１Ｂに示す対応する範囲クローン操作は、ａ）目的ファイルのためにＬＩＤのセットを割り当てることと、ｂ）ソースファイル及び目的ファイルのＬＩＤを記憶媒体１４０上のファイルデータにマッピングすることとを含んでいてもよい。範囲クローン操作は更に、ファイルデータがソースファイル及び目的ファイルＬＩＤの両方と関連付けられていることを示すよう、記憶媒体１４０上に永続的ノート３６６を格納することを含んでいてもよい。範囲クローン操作は更に、本明細書中に開示するように、更新されたコンテキストフォーマットに従ってファイルデータを書き換えることを含んでいてもよい。
【０１３６】
他の実施形態において、記憶層１３０は、範囲クローン操作（例えば、図４Ａ〜Ｅに開示するような）を実施するために参照マップ４６０を活用してもよい。範囲クローン操作の前に、状態９１１Ｃにおいて、ソースファイルのＬＩＤは、前方マップ１６０内の対応するファイルデータに直接マッピングされてもよい。状態９１１Ｄにおいて範囲クローンを作成することは、参照マップ４６０内の１つ以上の参照エントリをファイルデータと関連付けることと、ソースファイルＬＩＤ及び目的ファイルＬＩＤに対応する間接エントリを参照エントリにリンクさせることとを含んでいてもよい。範囲クローン操作は更に、本明細書中に開示するように、記憶媒体１４０上に永続的ノート３６６を格納すること、及び／又は、ファイルデータのコンテキストフォーマットを更新することを含んでいてもよい。
【０１３７】
幾つかの実施形態において、記憶層１３０は、中間層マッピング層（例えば、図５Ａ〜Ｂに開示するような）を用いて範囲クローン操作を実施するよう構成されてもよい。状態９１１Ｅにおいて示すように、ソースファイルは、中間アドレス空間（例えば、記憶層１３０の論理アドレス空間１３２）を介して記憶媒体１４０上のファイルデータにマッピングされてもよいＶＡＳ５３２のＶＩＤのセットに対応していてもよい。範囲クローン操作を実行することは、ａ）目的ファイルのためにＶＩＤをＶＡＳ５３２内に割り当てることと、ｂ）目的ファイルのＶＩＳを中間マッピング層のＬＩＤ（例えば、ソースファイルＶＩＤにマッピングされるＬＩＤの同じセット）と関連付けることとを含んでいてもよい。範囲クローン操作は更に、目的ＶＩＤがファイルデータＬＩＤと関連付けられていることを示す永続的ノート３６６を記憶媒体１４０上に格納することを含んでいてもよい。ファイルデータは既に、中間識別子に結合されているため、ファイルデータのコンテキストフォーマットは、更新される必要がなくてもよい。
【０１３８】
ファイルシステム９０６は更に、チェックポイントｍマップ操作に記憶層１３０を活用するよう構成されてもよい。本明細書中で用いるように、「ｍマップ」操作とは、ファイルの内容が、ファイルシステム９０６の標準の読取り／書込みインタフェースではなく、標準のロード及び格納操作を介してメモリのページとしてアクセスされる操作を指す。「ｍｓｙｎｃ」操作とは、記憶媒体１４０に対するファイルのダーティページ（もしあれば）をフラッシュするための操作を指す。ｍマップ操作の使用は、ファイルのチェックポイント設定を困難にする場合がある。ファイル操作はメモリ内で行われ、ｍｓｙｎｃは、状態をセーブしなければならない場合に発行される。しかし、ｍｓｙｎｃ後のファイルの状態は、現在のメモリ内状態を表し、最後にセーブされた状態は失われる場合がある。従って、仮にファイルシステム９０６がｍｓｙｎｃ中にクラッシュすると、ファイルは矛盾した状態のまま残る可能性がある。
【０１３９】
幾つかの実施形態において、ファイルシステム９０６は、ｍｓｙｎｃによる呼出し中にｍマッピングされたファイルの状態のチェックポイントを設定するよう構成される。ファイルのチェックポイントを設定することは、上で開示したように、ファイルレベルのスナップショット（及び／又は範囲クローン）を作成することを含んでいてもよい。ファイルレベルのスナップショットは、変更が適用される前にファイルの状態をセーブするよう構成されてもよい。ｍｓｙｎｃが発行された場合、別のクローンが作成されて、ｍｓｙｎｃ操作において適用された変更を反映してもよい。図９Ｂに示すように、状態９１３Ａ（ｍマップ操作前）において、ファイル１は、ＬＩＤ１０〜１３及び記憶媒体１４０上の対応する記憶アドレスＰ１〜Ｐ４と関連付けられてもよい。ｍマップ操作に応じて、ファイルシステム９０６は、記憶層１３０のインタフェース１３１を介して範囲クローン操作を実行してもよく、これは、ファイル１のクローン（ファイル１．１と表記する）を作成することを含んでいてもよい。ファイル１．１は、同じファイルデータ（例えば、同じ記憶アドレスＰ１〜Ｐ４）を参照する異なるセットのＬＩＤ４０〜４３と関連付けられてもよい。他の実施形態において、ファイル１は、上で開示したように、参照マップ４６０及び／又は中間変換層を用いてクローン化されてもよい。
【０１４０】
ｍｓｙｎｃ呼出しに応じて、ファイルシステム９０６は、（記憶層１３０の使用により）別の範囲クローン操作を実行してもよい。状態９１３Ｃにおいて示すように、ｍｓｙｎｃ操作と関連する範囲クローン操作は、ファイル１を１つ以上のダーティページ（記憶アドレスＰ５及びＰ６）と共に更新することと、更新されたファイル１をファイル１．２としてクローン化することとを含んでいてもよい。ファイル１．１は、ｍｓｙｎｃ操作前のファイル状態を反映していてもよい。従って、万一不具合の場合には、ファイルシステム９０６は、ファイル１の以前の状態を再構築することができてもよい。
【０１４１】
上で開示したように、記憶層１３０は、ファイル整合性（例えば、本明細書中で更に詳細に開示するような、ファイルクローズ−オープン整合性）、アトミック操作、及び同様のもの等の、よりハイレベルな操作を実施するよう活用されてもよい範囲クローン及び範囲マージ操作を実施するよう構成されてもよい。これらの操作は、ａ）論理アドレス空間１３２の特定の領域をクローン化すること、ｂ）クローン化した領域内で記憶操作を実行すること、及びｃ）クローン化した領域を論理アドレス空間１３２の別の部分に選択的にマージするか、及び／又は折り畳むことを含んでいてもよい。本明細書中で用いるように、論理アドレス空間１３２の領域をマージ及び／又は折り畳むこととは、特に、範囲のうちの１つにおいて実施された変更を１つ以上の他の範囲に組み込むことによって、２つ以上のＬＩＤ範囲を組み合わせることを指す。マージ操作は、異なるＬＩＤ範囲の間の競合を解消するよう構成されてもよいマージポリシーに従って実施されてもよい。マージポリシーは、１つのＬＩＤ範囲のうちの１つの内容が別のＬＩＤ範囲の内容を「上書き」する「上書き」モード；ＬＩＤ範囲の内容が（例えば、論理ＯＲ操作において）共に組み合わされる「ＯＲ」モード；１つ以上のＬＩＤ範囲の別の独立したコピーを作成することによって、競合が解消されるコピーオンコンフリクトモード；及び／又は同様のものを含んでもよいが、これらに限定されない。上書きモードにおいて、１つ以上の他のＬＩＤ範囲の内容を上書きするＬＩＤ範囲は、コミット時間（例えば、最近の操作が以前の操作を上書きする）、優先度、及び／又は同様のものを含むが、これらに限定されない任意の適切な基準に基づいて決定されてもよい。
【０１４２】
図９Ｃは、記憶層１３０の使用により実施される範囲マージ操作の実施形態を示している。図９Ｃの実施形態において、記憶層１３０は、前方マップ１６０内の１つ以上のエントリによって表されてもよい識別子範囲９１４をクローン化するよう構成されてもよい。範囲９１４内のＬＩＤ０７２〜０８３は、記憶アドレス９５〜１０６に結合されてもよい。本明細書中に開示する範囲クローン及び／又はマージ操作は、図３Ａ〜Ｅの範囲クローン及び／又は移動実施形態、図４Ａ〜Ｅの参照エントリ実施形態、及び／又は図５Ａ〜Ｂの中間マッピング層実施形態のうちの何れかを用いて実施されてもよい。従って、幾つかの実施形態において、ＬＩＤ０７２〜０８３は、１つ以上の参照エントリ及び／又は中間マッピング層を介して記憶アドレス９５〜１０６に結合されてもよい。
【０１４３】
記憶層１３０は、範囲９１４をクローン化するよう構成されてもよく、これは、状態９４１Ａにおいて示すように、ＬＩＤ９２４の新しい範囲を記憶アドレス９５〜１０６に結合することを含んでいてもよい。範囲９１４及び／又は９２４は、範囲９１４及び９２４が関係する（例えば、記憶アドレスの同じセットに結合される）ことを示すよう構成されるそれぞれのメタデータ９８４及び／又は９９４を備えていてもよい。メタデータ９８４及び／又は９９４は、ＬＩＤ範囲のうちの１つに関する修正が、他の範囲内のＬＩＤと相互に関係できる（例えば、ＬＩＤ９７２に関連して書き込まれるデータが対応するＬＩＤ０７２等と関連付けられる）ように、ＬＩＤ０７２〜０８３を９７２〜９８３にリンクさせるよう構成されてもよい。メタデータ９８４及び／又は９９４は、クローン化されたＬＩＤ範囲のための同期ポリシーを示してもよく、これは、上で開示したように、クローン間の割当操作が同期されるかどうかを示してもよい。メタデータ９８４及び／又は９９４は更に、マージ競合がどの様に管理されるかを指定してもよいマージポリシーを備えるか、及び／又は参照する。マージポリシーは、記憶層１３０のインタフェース１３１を介して指定されてもよく、グローバル及び／又はデフォルトのマージポリシーに基づいて決定されてもよく、リクエストパラメータ（例えば、ｆａｄｖｉｓｅ、ｉｏｃｔｒｌ等）を介して指定されてもよく、及び／又は同様のことであってもよい。クローン操作は、上で開示したように、記憶アドレス９５〜１０６のデータをＬＩＤ範囲９７２〜９８３と関連付けるよう構成される永続的ノート３６６を記憶媒体１４０に追記すること（及び／又は、更新されたコンテキストフォーマットでデータを書き換えること）を含んでいてもよい。
【０１４４】
記憶層１３０は、１つ以上の記憶クライアント１０６からの記憶リクエストに応じて範囲９１４及び／又は９２４のうちの１つ以上の内部で記憶操作を実行してもよい。状態９４１Ｂに示すように、記憶操作は、ＬＩＤ９７２〜９７３と関連するデータを修正してもよく、これは、識別子９７２〜９７３を記憶アドレス７２１〜７２２の新規セットと関連付けることを含んでいてもよい。状態９４１Ｂの記憶操作に続いて、記憶層１３０は、ＬＩＤ範囲９７２〜９８３を範囲０７２〜０８３とマージするよう範囲マージ操作を実行してもよい。範囲マージ操作は、マージポリシーに従って、ＬＩＤ範囲９２４に関して行われた修正を、ＬＩＤ範囲９１４に組み込むことを含んでいてもよい。マージポリシーは、クローン化された範囲９２４に行われた修正が、ソース範囲９１４内のデータを上書きすることを指定してもよい。従って、状態９４１Ｃに示すマージ操作の結果は、ソース範囲９１４のＬＩＤ０７２〜０７３を記憶アドレス７２１〜７２２の修正データに結合することを含んでいてもよい。範囲マージ操作は更に、クローン化されたＬＩＤ範囲９７２〜９８３の割当を解除すること、記憶アドレス７５６〜７５７のデータをＬＩＤ０７２〜０７３と関連付けるよう構成される永続的ノート３６６を格納すること、及び／又は、本明細書中に開示するように、更新されたコンテキストフォーマットで記憶アドレス７２１〜７２２のデータを書き換えることを含んでいてもよい。７２１〜７２２における新しいデータによって不要にされた記憶アドレス９５〜９６に格納されるデータは、上で開示したように、無効化されてもよい。
【０１４５】
範囲９１４及び／又は９２４内で実行される記憶操作は、結果として、競合を生じる場合がある。幾つかの実施形態において、ＬＩＤ範囲と関連するマージポリシーは、競合を予め阻止してもよい。本明細書中で更に詳細に開示するように、アトミック記憶操作において、記憶層１３０は、アトミック記憶操作が１つ以上の対応する範囲において完了する間に、１つ以上のＬＩＤ範囲をロックしてもよい。しかし、他の実施において、記憶層１３０は、記憶操作がクローン化された範囲内で同時に実行されることを可能にしてもよい。状態９４１Ｄにおいて、記憶層１３０は、範囲９２４においてＬＩＤ９７２〜９７３及び９８２〜９８３と関連するデータを上書き及び／又は修正するよう構成される記憶操作を実施してもよい。記憶層１３０は、範囲９１４のＬＩＤ０７２〜０７３と関連するデータを上書き及び／又は修正するよう構成される他の記憶操作を実施してもよい。ＬＩＤ０７２〜０７３及び９７２〜９７３に関する記憶操作は、範囲９１４及び９２４の間でマージ競合を生じる場合がある。マージ競合は、上で開示したように、マージポリシーに従って解消されてもよい。幾つかの実施形態において、マージポリシーは、特に、記憶ログ内の記憶操作の相対的順序に基づいて、つい最近の修正を適用することを含んでいてもよい。他の実施において、マージポリシーは、各記憶操作を要求する記憶クライアント１０６（プロセス、アプリケーション、及び／又は同様のもの）の相対的優先度に基づいて競合を解消してもよい。別の実施において、マージポリシーは、異なる競合するバージョンを表すよう範囲９１４及び／又は９２４の２つ（以上）のバージョンを作成することによって競合を解消してもよい。
【０１４６】
状態９４１Ｅは、ＬＩＤ９７２〜９７３と関連する競合する修正の代わりに、ＬＩＤ０７２〜０７３と関連する操作を組み込むよう構成されるマージ操作の結果の一実施形態を示している。従って、状態９４１Ｅにおいて、ＬＩＤ０７２〜０７３は、ＬＩＤ９７２〜９７３に関連して実行される記憶操作に対応する記憶アドレス７２１〜７２２ではなく、ＬＩＤ０７２〜０７３に関連して実行される記憶操作に対応する記憶アドレス７５６〜７５７に結合される。
【０１４７】
状態９４１Ｆは、ＬＩＤ０７２〜０７３に関して行われる競合する修正の代わりに、範囲９７２〜９７３の修正を組み込むよう構成されるマージ操作の結果の一実施形態を示している。従って、状態９４１Ｆにおいて、識別子０７２〜０７３は、ＬＩＤ０７２〜０７３に関連する記憶アドレス７５６〜７５７ではなく、ＬＩＤ９７２〜９７３に関連して実行される記憶操作に対応する記憶アドレス７２１〜７２２に結合される。
【０１４８】
状態９４１Ｇは、別々の範囲コピー又はバージョンを作成することによってマージ競を管理するよう構成されるマージ操作の結果の一実施形態を示している。範囲９１４は、識別子９８２〜９８３に関して行われる競合しない修正を組み込んでもよく、（記憶アドレス７２１〜７２２を組み込むのではなく）識別子０７２〜０７３に関する競合する記憶操作の結果を保持してもよい。他のＬＩＤ範囲９２４は、識別子０７２〜０７３に関して行われた競合する記憶操作の結果を組み込むことなく、状態９４１Ｄの修正を保持してもよい。状態９４１Ｇは、オリジナルのクローン化されたＬＩＤ範囲０７２〜０８３  ９１４及び９７４〜９８１  ９２４を用いるコピーを示しているが、本開示はこれに関して限定されず、論理アドレス空間１３２の何れかの領域内の範囲コピー及び／又はバージョンを作成するよう構成することができる。状態９４１Ｅ〜Ｇに関して開示する範囲マージ操作は更に、記憶アドレス７２１〜７２２、７５６〜７５７、及び／又は７６７〜７６８に格納されるデータを対応するＬＩＤと関連付けるよう記憶媒体１４０に１つ以上の永続的ノート３６６を追記すること、及び／又は、本明細書中に開示するように、１つ以上のバックグラウンド記憶操作においてデータを書き換えることを含んでいてもよい。
【０１４９】
幾つかの実施形態において、クローン化されたＬＩＤ範囲９１４及び／又は９２４のうちの１つ以上の内部の操作は、特に、範囲９１４及び／又は９２４を拡張すること、範囲９１４及び／又は９２４を縮小すること、又は同様のことによって、ＬＩＤ範囲９１４及び／又は９２４を修正することを含んでいてもよい。範囲９１４及び／又は９２４のうちの１つを拡張することは、他の範囲への対応する拡張を含んでいてもよく、よって、割当操作は、両範囲９１４及び９２４において追加のＬＩＤを割り当てることに基づいてもよい。
【０１５０】
本明細書中に開示する範囲マージ操作は、図３Ａ〜Ｅの範囲クローン及び／又は移動実施形態、図４Ａ〜Ｅの参照エントリ実施形態、及び／又は図５Ａ〜Ｂの中間マッピング実施形態のうちの何れかを用いて実施されてもよい。図９Ｄは、参照マップ４６０を用いる範囲マージ操作の一実施形態を示している。状態９４３Ａに示すように、範囲９１４をクローン化することは、ＬＩＤ範囲９２４を論理アドレス空間１３２内に割り当てること、（特に、メタデータ９８４及び／又は９９４を用いて）範囲９１４及び９２４をリンクさせること、及び、範囲９１４及び９２４を参照マップ４６０内の参照識別子９３４と関連付けることを含んでいてもよい。範囲クローン操作は更に、上で開示したように、参照マップ４６０内の範囲９３４を間接範囲９１４及び／又は９２４と関連付けるよう構成される永続的ノート３６６を記憶媒体１４０上に格納することを含んでいてもよい。参照マップ４６０内の範囲９３４は、記憶アドレス９５〜１０６に結合されてもよい。従って、両範囲９１４及び９２４は、同じ記憶アドレスの同じデータを間接的に参照してもよい。
【０１５１】
ＬＩＤ９８２〜９８３に対応するデータを修正するよう構成される範囲９２４内の記憶操作は、状態９４３Ｂに示すように、新しいＬＩＤを範囲９２４内に割り当てることと、新しいローカルエントリ９８２〜９８３を対応する記憶アドレス７６７〜７６８に結合することとを含んでいてもよい。範囲９１４及び９２４をマージすることは、記憶アドレス７６７〜７６８の修正されたデータを、上で開示したように、マージポリシーに従って範囲９１４に組み込むことを含んでいてもよい。図９Ｄの実施形態において、状態９４３Ｃの範囲マージ操作は、参照エントリ９３４を削除することと、範囲９１４のＬＩＤ０８１〜０８３を更新して記憶アドレス７６７〜７６８の更新されたデータを参照することとを含んでいてもよい。マージ操作は更に、上で開示したように、更新されたコンテキストフォーマットで永続的ノート３６６を格納すること及び／又は記憶アドレス７６７〜７６８のデータを書き換えることを含んでいてもよい。
【０１５２】
図９Ｅは、記憶層１３０によって実施される範囲クローン及び範囲マージ操作の更なる実施形態を示す。図９Ｅは、図５Ａ〜Ｂと共に開示したような、中間アドレス空間を備える実施形態における範囲クローン及び範囲マージ操作を示している。状態９４７Ａにおいて、ＶＩＤ０７２〜０８３を備えるＶＩＤ範囲９１４は、ＶＡＳ前方マップ５６０内の中間識別子２７２Ｚ〜２８３Ｚを介して記憶アドレス９５〜１０６に間接的に結合される。中間識別子は、別々の中間アドレス空間２１３６の一部（例えば、記憶層１３０の論理アドレス空間１３２）であってもよい。
【０１５３】
状態９４７Ｂに示すように、ＶＩＤ範囲９１４をクローン化することは、ＶＩＤ９７２〜９８３を備えるＶＩＤ範囲９２４を割り当てることと、範囲９２４をＶＡＳ前方マップ５６０内の中間識別子２７２Ｚ〜２８３Ｚと関連付けることを含んでいてもよい。クローン操作は更に、ＶＩＤ範囲９２４を中間アドレス２７２Ｚ〜２８３Ｚと関連付けるよう構成される永続的ノート３６６を記憶媒体１４０上に格納することを含んでいてもよい。記憶操作は、本明細書中に開示するように、ＶＩＤ範囲９１４及び／又は９２４に関して実行されてもよい。ＶＩＤ範囲９１４及び／又は９２４に対する修正は、各ＶＩＤ範囲９１４及び／又は９２４と中間アドレス空間２１３６との間の更新されたマッピングに反映されてもよい。状態９４７Ｃにおいて、ＶＩＤ９８２〜９８３のデータを修正する記憶操作は、ＶＩＤ９８２〜９８３と中間識別子９８４Ｚ〜９８５Ｚとの間の更新されたマッピング、及び記憶アドレス４５６〜４５７に反映される。ＶＩＤ範囲９１４及び９２４をマージすることは、状態９４７Ｄに示すように、（中間アドレス９８４Ｚ〜９８５Ｚを介して）更新されたデータを参照するよう範囲９１４のＶＩＤマッピングを更新することを含んでいてもよい。マージ操作は更に、上で開示したように、マージ競合（もしあれば）を解消することを含んでいてもよい。マージ操作は更に、ＶＩＤ０８２〜０８３を中間アドレス９８４Ｚ〜９８５Ｚと関連付けるよう記憶媒体１４０に１つ以上の永続的ノート３６６を追記することを含んでいてもよい。
【０１５４】
幾つかの実施形態において、記憶層１３０は、ファイルシステム、データベース、及び／又は同様のもの等の記憶クライアント１０６のためにファイル整合性機能を提供するよう本明細書中に開示する範囲クローン、移動、及び／又はマージ操作を活用してもよい。図９Ｆを参照すると、ファイルシステム９０６は、ネットワークファイルシステム（ＮＦＳ）バージョン３プロトコル及び／又は他のファイルシステム実装及び／又はプロトコルに従ってファイルクローズ−オープン整合性モデルを実装するよう記憶層１３０を活用してもよい。ファイルクローズ−オープン整合性モデルは、複数のプロセス及び／又はアプリケーション（ファイルシステムクライアント）に同じファイルを同時に操作することを可能にするよう構成されてもよい。ファイル修正は、ファイルが閉じられる時に処理され、ファイル上で並列に操作している他のクライアントは、ファイルが開かれる次の時まで変更を知らない。従って、ファイルの状態は、ファイルが開かれる時に設定され、他のクライアントによって並列で実施された変更は、ファイルが再度開かれるまで適用されない。
【０１５５】
幾つかの実施形態において、ファイルシステム９０６は、修正が作業しているクローン化された範囲内で行われている間、ファイルの「オリジナル」データ（例えば、ファイルの一致バージョン）を保存するよう記憶層１３０を活用してもよい。本明細書中で用いるように、ファイルの「オリジナル」データ及び／又はファイルの一致バージョンを保存することとは、ファイルが開かれた時に相当する状態でファイルデータを維持し、及び／又は、オリジナルの未修正の状態でファイルデータの状態を再構築できるファイル修正のログを保持することを指す。
【０１５６】
図９Ｆは、ファイルクローズ−オープン整合性モデルを実施するよう構成される記憶層１３０を備えるシステム９００Ｆの一実施形態を示している。ファイルシステム９０６（及び／又は他の記憶クライアント１０６）は、効果的にファイルクローズ−オープン整合性を実施するよう記憶層１３０を活用してもよい。記憶層１３０は、ａ）ファイルシステムクライアント９２６Ａ〜Ｎのファイルオープンリクエストに応じてファイルをクローン化して、結果として、「一次」又は「一致」バージョンのファイル及び「作業中」バージョンのファイルを生じ；ｂ）作業中バージョンのファイルに関して記憶操作を実行し；及び、ｃ）ファイルを閉じることに応じて、作業中バージョンのファイルを一次バージョンのファイルにマージするよう構成されてもよい。記憶層１３０は、本明細書中に開示するように、（例えば、図３Ａ〜Ｅ、４Ａ〜Ｅ、５Ａ〜Ｂ、及び／又は同様のものの範囲クローン実施形態を用いて）１つ以上の範囲クローン操作においてファイルデータをクローン化するよう構成されてもよい。記憶層１３０は更に、本明細書中に開示するように、１つ以上の範囲マージ及び／又は折り畳み操作を用いて、作業中バージョンのファイル及び一次又は一致バージョンのファイルをマージするよう構成されてもよい。作業中バージョンのファイルは、ファイルが特定の記憶クライアント９２６Ａ〜Ｎによって開かれた時のファイルの状態を表してもよい。記憶クライアント９２６Ａ〜Ｎは、作業中バージョンのファイルに対する排他的アクセスを有してもよく、よって、作業中バージョンのファイルは、他のクライアント９２６Ａ〜Ｎによって行われるファイル修正から隔離されてもよい。記憶層１３０は、「一次」又は「一致」論理インタフェースのファイルに関してオリジナルの修正されていないファイルデータを維持するよう構成されてもよく、これは、記憶操作が作業中論理インタフェースのファイルに関して実行される間、ファイルデータと一致論理インタフェースとの間の関連性を維持することを含んでいてもよい。異なる記憶クライアント９２６Ａ〜Ｎによって行われるファイル修正間の競合は、最後の書込み（例えば、以前の書込みを上書きする時の最後の書込み）；コピーオンコンフリクト（例えば、別のバージョンのファイルを作成する）；クライアント９２６Ａ〜Ｎ、アプリケーション、プロセス、及び／又は同様のものに基づく優先度；及びその他等の競合解消ポリシー又はマージポリシーに従って解消されてもよい。
【０１５７】
図９Ｆの実施形態において、状態９５３Ａで、変換モジュール１３４は、ファイルのＬＩＤ（ファイルＬＩＤ９５０Ａ）と、記憶媒体１４０上の記憶アドレスＰ０〜Ｐ３のファイル９５２Ａのデータとの間のマッピング９５１Ａを備えている。マッピング９５１Ａは、本明細書中に開示する前方マップ１６０及び／又は図５Ａ〜Ｂと共に開示するような１つ以上の中間マッピング層を用いて実装されてもよい。
【０１５８】
状態９５３Ｂにおいて、記憶層１３０は、記憶クライアント（記憶クライアント９２６Ｂ）のファイルオープンリクエストに応じてファイルをクローン化するよう構成されてもよい。リクエストは、明示的リクエスト、リクエストパラメータ（例えば、ｆａｄｖｉｓｅ、ｉｏｃｔｒｌ等）、及び／又は同様のものとして、インタフェース１３１を介して受信されてもよい。クローン操作は、本明細書中に開示するように、作業中バージョンファイルに対応する「クローン化」ファイルＬＩＤ９５０Ｂの新規セットを割り当てることと、クローン化識別子９５０Ｂのセットを、一次バージョンのファイルのＬＩＤ９５０Ａ（オリジナルの論理識別子９５０Ａ又はその一致するセット）と同じファイルデータ９５２Ａと関連付けることとを含んでいてもよい、１つ以上の範囲クローン操作を含んでいてもよい。範囲クローン操作は更に、上で開示したように、ファイルデータ９５２Ａを、一次ファイルＬＩＤ９５０Ａ及び作業中バージョンのファイルＬＩＤ９５０Ｂの両方と関連付けるよう、記憶媒体１４０上に永続的ノート３６６を格納することを含んでいてもよい。
【０１５９】
幾つかの実施形態において、記憶層１３０及び／又はファイルシステム９０６は、記憶クライアント９２６Ｂによって実行されるファイル操作を作業中バージョンのファイル（ＬＩＤ９５０Ｂの作業中セット）に向けるよう構成されてもよい。従って、記憶クライアント９２６Ｂによって行われる修正は、クローン化されたファイルＬＩＤ９５０Ｂに関して行われてもよい。かかる修正は、オリジナルの一次バージョンのファイルＬＩＤ９５０Ａの状態に影響を及ぼさない場合がある。従って、記憶クライアント９２６Ｂは、オリジナルの一次バージョンのファイルのＬＩＤ９５０Ａを変更することなく、ＬＩＤ９５０Ｂに関して作業中バージョンのファイルを修正してもよい。
【０１６０】
状態９５３Ｃにおいて、記憶クライアント９２６Ｂは、記憶アドレスＰ３に格納されたファイルのデータを修正するよう（記憶層１３０を介する）記憶操作を実行しており、修正されたデータは、記憶アドレスＰ６４において記憶ログに追記されてもよい。これに応じて、変換モジュール１３４は、クローン化された作業中バージョンのファイル９５０ＢのＬＩＤを、記憶アドレスＰ６４の修正されたファイルデータ９５２Ｂに結合するようマッピング９５１Ｂを更新してもよい。記憶クライアント９２６Ｂによって修正されていない他のＬＩＤは、引き続き、オリジナルの修正されていないファイルデータ９５２Ａに結合されてもよい。記憶層１３０は、一次バージョンのファイルの識別子９５０Ａと記憶アドレスＰ０〜３の未修正ファイルデータ９５２Ａとの間のオリジナルのマッピング９５１Ａを保存するよう構成される。
【０１６１】
別の記憶クライアント９２６Ｎは、記憶クライアント９２６Ｂがファイルを閉じる前に、ファイルを開くためのリクエストを発行する場合がある。これに応じて、及び、状態９５３Ｄにおいて示すように、記憶層１３０は、一次ファイルの別のクローンを作成（一次ファイル識別子９５０Ａをクローン化）してもよい。クローン化されたＬＩＤ（ＦＩＤ９５０Ｃ）は、クローン化された識別子範囲９５０Ｂに関して記憶クライアント９２６Ｂによって行われる修正のない、ファイルのオリジナルの状態に対応してもよい。従って、クローン化ＬＩＤ９５０Ｃは、記憶アドレスＰ０〜３のオリジナルの未修正ファイルデータ９５２Ａにマッピング９５１Ｃされてもよい。記憶クライアント９２６Ｎは、記憶クライアント９２６Ｂと並行して、新規クローン化ファイル識別子範囲９５０Ｃに関して記憶操作を実行してもよい。クライアント９２６Ｂ及び９２６Ｎによって行われる変更は、それらそれぞれのＬＩＤ範囲９５０Ｂ及び９５０Ｃ内で隔離されてもよく、よって、一次バージョンのファイル（ＬＩＤ９５０Ａ及び／又は相互）に適用されなくてもよい。
【０１６２】
状態９５３Ｅは、ファイルを閉じる記憶クライアント９２６Ｂの結果を示している。記憶クライアント９２６Ｂのファイルを閉じるリクエストに応じて、記憶層１３０は、１つ以上の範囲マージ操作において対応する範囲（ＦＩＤ９５０Ｂ）の内容を一次バージョンのファイル（ＬＩＤ９５０Ａ）にマージするよう構成されてもよい。しかし、変更は、記憶クライアント９２６Ｎ（ＦＩＤ９５０Ｃ）によって使用中のファイルのバージョンにマージされなくてもよく、記憶クライアント９２６Ｎは、クライアント９２６Ｎがファイルを再度開くまで、修正に対するアクセスを有していなくてもよい。修正を組み込むことは、本明細書中に開示するように、１つ以上の範囲マージ操作を含んでいてもよい。範囲マージ操作は、クローン化されたＬＩＤ範囲９５０Ｂに関して行われた修正を、一次バージョンのファイルのＬＩＤ範囲９５０Ａにマージすることを含んでいてもよい。図９Ｆの実施形態において、範囲マージ操作は、記憶アドレスＰ６４の修正されたファイルデータ９５２Ｂを参照するよう一次ファイルＬＩＤ９５０Ａのマッピング９５１Ａを更新することを含んでいる。クライアント９２４Ｂによって修正されなかったデータは、Ｐ０〜３のオリジナルの未修正ファイルデータ９５２Ａに結合されたままであってもよい。
【０１６３】
本明細書中に開示するように、幾つかの実施形態において、修正されたファイルデータ９５２Ｂは、記憶アドレスＰ６４の修正されたファイルデータ９５２Ｂを、（一次バージョンのファイルと関連するＬＩＤ９５０Ａとは対照的に）ＬＩＤ９５０Ｂのうちの１つ以上と関連付けるよう構成される永続的メタデータを含んでもよい。従って、範囲マージ操作は更に、ＬＩＤ９５０Ａの範囲の１つ以上を記憶アドレスＰ６４の修正されたファイルデータ９５２Ｂと関連付けるよう構成される永続的ノート３６６を記憶媒体１４０に追記することを含んでいてもよい。記憶アドレスＰ６４のデータは、１つ以上のバックグラウンド操作において、更新された永続的メタデータで書き換えられてもよい。ファイルクローズ操作（及び対応する範囲マージ操作）に続いて、変換モジュール１３４は、範囲９５０ＢのＬＩＤの割り当てを解除するよう構成されてもよい。
【０１６４】
クライアント９２６Ｎは、クローン化されたファイル識別子９５０Ｃに関してファイルを修正してもよい。図９Ｇの状態９５３Ｆに示すように、記憶クライアント９２６Ｎは、クライアント９２６Ｂによって実施される修正と競合する１つ以上の操作を実行する場合がある。修正は、クライアント９５０Ｂがファイルを閉じる前（クライアント９２６Ｂの修正が、状態９５３Ｅにおけるような一次バージョンのファイルのＬＩＤ９５０Ａに適用される前）に生じる場合がある。よって、ＬＩＤ９５０Ａは、オリジナルの未修正ファイルデータ９５２Ａにマッピング９５１Ａされ、記憶クライアント９２６Ｂに割り当てられる範囲９５０Ｂの識別子のうちの１つ以上は、修正されたファイルデータ９５２Ｂにマッピングされ、記憶クライアント９２６Ｎに割り当てられる範囲９５０Ｃの識別子のうちの１つ以上は、競合するファイルデータ９５２Ｃにマッピングされる。未修正データに対応するＬＩＤ９５０Ｂ及び９５０Ｃは、引き続き、オリジナルの未修正ファイルデータ９５２Ａを参照してもよい。
【０１６５】
クライアント９２６Ｂ及び９２６Ｃは、それらそれぞれのファイルを最終的に閉じてもよく、これは、各ＬＩＤ範囲９５０Ｂ及び９５０Ｃに関して行われた修正を一次バージョンのファイルの範囲９５０Ａにマージすることを含んでいてもよい。記憶層１３０は、マージポリシー９４４に従って、範囲９５０Ｂ及び９５０Ｃ間の競合を解消するよう構成されてもよい。幾つかの実施形態において、マージポリシー９４４は、記憶クライアント９２６Ｂ及び９２６Ｃがファイルを閉じた順序に基づいてもよく、最後に閉じられたファイルの修正は、以前に適用された修正を上書きしてもよい（例えば、修正はシリアル化されてもよい）。状態９５３Ｇに示すように、記憶クライアント９５０Ｂは、記憶クライアント９５０Ｃの前にファイルクローズリクエストを発行してもよい。クライアント９５０Ｂがファイルを閉じた後、記憶層１３０は、範囲９５０Ｂに関して行われた修正を、（図９Ｆの状態９５３Ｅに示すように）一次バージョンのファイルの範囲９５０Ａにマージしてもよい。クライアント９２６Ｃによるファイルのクローズは、結果として、図９Ｇの状態９５３Ｇに示すように、記憶クライアント９５０Ｂ（修正されたデータ９５２Ｂ）によって行われる幾つかの修正をデータ９５２Ｃで上書きすることを招く場合がある。Ｐ３及びＰ６４のデータは、それがもはや一次ファイル又は現在の作業中バージョンのファイルによって参照されないため、記憶媒体１４０から削除のために印を付けられてもよい。上で開示したように、記憶層１３０は、優先度ベースのマージポリシー９４４等の他のマージポリシーを実施するよう構成されてもよい。優先度ベースのマージポリシーは、記憶クライアント９２６Ｂ及び／又は９２６Ｃの相対的優先度に基づいて競合を解消してもよい。状態９５３Ｈにおいて、記憶クライアント９２６Ｃは、記憶クライアント９２６Ｂの後にファイルを閉じてもよいが、しかし、記憶クライアント９２６Ｂの修正は、記憶クライアント９２６Ｂの修正が、記憶クライアント９２６Ｃの競合する修正よりも高い優先度を有することを示すマージポリシー９４４により保持されてもよい。従って、一次バージョンのファイルのＬＩＤ９５０Ａは、引き続き、記憶クライアント９２６Ｂの修正されたファイルデータ９５２Ｂを参照してもよく、記憶クライアント９２６Ｃの競合するファイルデータ（Ｐ９６のデータ９５２Ｃ）は、Ｐ３の廃止ファイルデータ９５２Ａと共にガベージコレクションのために印を付けられてもよい。他の実施形態において、マージポリシー９４４は、結果として、２つの一次バージョンのファイルを作成するコピーオンコンフリクトポリシーを備えていてもよい。かかる実施形態において、及び、状態９５３Ｉに示すように、記憶層１３０は、記憶クライアント９２６Ｂの修正を（一次ファイルＬＩＤ９５０Ａを用いる）一次ファイルに組み込むよう構成されてもよく、記憶クライアント９２６Ｃの競合する修正を新しいバージョンのファイル（ファイル識別子９５０Ｄ）に組み込んでもよい。
【０１６６】
マージポリシー９４４の特定の実施形態を本明細書中で説明するが、本開示はこれに関して限定されず、任意の適切なマージポリシー９４４を実施及び／又は組み込むことができる。マージポリシー９４４は、記憶層１３０及び／又はファイルシステム９０６内で実施されてもよい。幾つかの実施形態において、記憶層１３０及び／又はファイルシステム９０６のマージポリシー９４４は、記憶層１３０のインタフェース１３１を介して構成されてもよい。マージポリシー９４４は、記憶層１３０を介して実行される全てのファイル操作に適用されてもよい。代替として、又は加えて、マージポリシー９４４は、特に、上で開示したように、ファイルシステムＡＰＩ呼出し、ｆａｄｖｉｓｅ、ｉｏｃｔｒｌ、及び／又は同様のものを介して、ファイル毎及び／又は競合毎ベースで設定されてもよい。
【０１６７】
記憶層１３０は更に、効果的なアトミック記憶操作を実施するよう構成されてもよい。図１０Ａは、アトミック記憶操作を実施するよう構成される記憶層１３０を備えるシステム１０００Ａの一実施形態のブロック図である。本明細書中で用いるように、アトミック記憶操作とは、全体として完全に完了されるか、ロールバックされる記憶操作を指す。従って、アトミック記憶操作は、部分的に完了されず、記憶層１３０は、不完全なアトミック記憶操作のデータを無効化及び／又は削除するよう構成されてもよい。アトミック記憶操作を実施すること、及び、特に、複数のステップを備えるか、及び／又は、複数の異なる識別子範囲又はＩ／Ｏベクトルに関するアトミック記憶操作は、高い間接費を課す場合がある。例えば、幾つかのデータベースシステムは、冗長書込み操作の複数のセットを用いるアトミック記憶操作を実装している。
【０１６８】
記憶層１３０は、記憶トランザクションを実装するよう構成されるトランザクションモジュール１０３６を備えていてもよい。トランザクションモジュール１０３６は、アトミック記憶操作の効率を高めるために本明細書中に開示する範囲クローン、範囲移動、及び／又は他の操作を活用するようアトミック記憶モジュール１０３５を備えていてもよい。幾つかの実施形態において、インタフェース１３１は、ベクトル化されたアトミック記憶操作を実行するためのＡＰＩ及び／又はインタフェースを提供する。ベクトルは、以下のようなデータ構造として定義されてもよい。
【数１】
2016534439.tif 000003
【０１６９】
ｉｏｖ＿ｂａｓｅパラメータは、ベクトルのデータを備えるメモリ又はバッファ位置を参照してもよく、ｉｏｖ＿ｌｅｎは、データバッファの長さ又はサイズを指してもよく、ｄｅｓｔ＿ｌｉｄは、ベクトルのための目的論理識別子（例えば、入力バッファｉｏｖ＿ｌｅｎから暗示されるか、及び／又は導出される範囲の長さを有するベース論理識別子）を指してもよい。
【０１７０】
データを１つ以上のベクトルに書き込むためのベクトル記憶リクエストは、従って、以下のように定義されてもよい。
【数２】
2016534439.tif 000004
【０１７１】
上記のベクトル書込み操作は、＊ｉｏｖポインタによって参照され、及び／又は、ベクトルカウントパラメータ（ｉｏｖ＿ｃｎｔ）によって指定されるそれぞれのベクトルデータ構造からデータを収集し、それぞれのｉｏｖｅｃｔ構造において指定される目的論理識別子（例えば、ｄｅｓｔ＿ｌｉｄ）にデータを書き込むよう構成されてもよい。ｆｌａｇパラメータは、ベクトル書込み操作がアトミックベクトル操作として実施されるべきかどうかを指定してもよい。
【０１７２】
上で示すように、ベクトル記憶リクエストは、複数のベクトルのそれぞれに関して同じ操作を実行する（例えば、１つ以上の異なるベクトルに関する書込み操作を暗示的に実行する）ことを含んでいてもよい。幾つかの実施形態において、ベクトル記憶リクエストは、各構成要素ベクトルに対し、異なるＩ／Ｏ操作を指定してもよい。従って、各ｉｏｖｅｃｔデータ構造は、それぞれの操作インジケータを備えていてもよい。幾つかの実施形態において、ｉｏｖｅｃｔ構造は、以下のように拡張されてもよい。
【数３】
2016534439.tif 000005
【０１７３】
ｉｏｖ＿ｆｌａｇパラメータは、ベクトルに関して実行する記憶操作を指定してもよい。ｉｏｖ＿ｆｌａｇは、書込み、読取り、アトミック書込み、トリム又は廃棄リクエスト、削除リクエスト、フォーマットリクエスト、パターン化書込みリクエスト（例えば、特定のパターンを書き込むリクエスト）、ゼロ書込みリクエスト、又は検証リクエストによるアトミック書込み操作、割当リクエスト、又は同様のものを含むが、これらに限定されない任意の適切な記憶操作を指定してもよい。上で説明したベクトル記憶リクエストインタフェースは、ベクトル構造を受け入れるよう拡張されてもよい。
【数４】
2016534439.tif 000006
【０１７４】
ｆｌａｇパラメータは、ベクトルリクエストのベクトル操作がアトミックに実行されるかどうかを指定してもよい。アトミック記憶操作の更なる実施形態は、Ａｓｈｉｓｈ  Ｂａｔｗａｒａらの２０１２年１２月２１日に出願された米国特許出願第１３／７２５，７２８号明細書、名称「Ｓｙｓｔｅｍｓ，Ｍｅｔｈｏｄｓ，ａｎｄ  Ｉｎｔｅｒｆａｃｅｓ  ｆｏｒ  Ｖｅｃｔｏｒ  Ｉｎｐｕｔ／Ｏｕｔｐｕｔ  Ｏｐｅｒａｔｉｏｎｓ」に開示されており、引用して本明細書に組み込む。
【０１７５】
トランザクションモジュール１０３６は、記憶層１３０内でアトミック記憶操作を実施するよう構成されるアトミック記憶モジュール１０３５を備えていてもよい。アトミック記憶モジュール１０３５は、リクエストの目標又は目的識別子とは異なる識別子のセットに関してアトミック記憶リクエストの記憶操作を実施するよう構成されてもよい。アトミック記憶操作が完了した後、アトミック記憶モジュール１０３５は、本明細書中に開示するように、アトミック記憶リクエストのそれぞれの目標又は目的識別子にデータを移動するよう構成されてもよい。
【０１７６】
幾つかの実施形態において、アトミック記憶モジュール１０３５は、識別子の第２のセットに関して論理識別子の第１のセットに向けられるアトミック記憶操作を実施する。識別子の第２のセットは、短命、一時的、作業中、又はプロセス中の識別子であると見なされてもよい。識別子の第２のセットは、記憶クライアント１０６に対して直接アクセス可能でなくてもよい。識別子の第２のセットは、論理アドレス空間１３２の特定の領域、特定の仮想アドレス空間（例えば、ＶＡＳ５３２）、別の名前空間、及び／又は同様のものに対応してもよい。アトミック記憶リクエストの記憶操作を完了した後、アトミック記憶モジュール１０３５は、アトミック記憶リクエストのデータを識別子の第１のセットと関連付けるよう構成される範囲移動操作を実施してもよい。データは、識別子の第２のセットとの関連付けを解除されてもよい。上記のように、識別子の第２のセットは、論理アドレス空間１３２のＬＩＤ及び／又はＶＡＳ５３２のＶＩＤと区別できてもよい。万一不具合状態の場合には、再構築モジュール１０３７は、失敗したトランザクション（例えば、不完全なアトミック記憶操作）に関するような識別子に結合されるデータを特定してもよい。特定されたデータは、メタデータ再構築操作の間、無効化されてもよく、及び／又は、対応するエントリは、記憶メタデータ１３５から除外（例えば、前方マップ１６０、ＶＡＳ前方マップ５６０、参照マップ４６０、及び／又は同様のものから除外）されてもよい。
【０１７７】
幾つかの実施形態において、アトミック記憶モジュール１０３５は、図１０Ａのトランザクションアドレス空間１０３２等の別のアドレス空間内でアトミック記憶操作を実施する。図１０Ａはトランザクションアドレス空間１０３２の使用を説明しているが、本開示はこれに関して限定されず、論理アドレス空間１３２の一部（例えば、ＬＩＤの範囲、程度、及び／又はセット）、ＶＡＳ５３２一部、参照マップ４６０、中間アドレス空間、及び／又は同様のものを含むが、これらに限定されない任意の適切なアドレス範囲及び／又は名前空間を用いるよう成すことができる。トランザクションアドレス空間１０３２の識別子（トランザクションの識別子）は、記憶クライアント１０６に対して直接アクセス可能でなくてもよい。
【０１７８】
アトミック記憶モジュール１０３５は、トランザクションアドレス空間１０３２に関してアトミック記憶操作を実行してもよく、アトミック記憶操作が完了した後、アトミック記憶操作のデータをトランザクションアドレス空間１０３２から論理アドレス空間１３２（又は特定のＶＡＳ５３２等の他の目的又は目標名前空間）へ移動するよう構成されるアトミック範囲移動操作を実行してもよい。アトミック範囲移動操作は、本明細書中に開示するように、前方マップ１６０内の結合を更新すること、メタデータを記憶媒体１４０に書き込むこと（例えば、永続的ノート３６６をログに追記すること）、及び／又は同様のことを含んでもよい。
【０１７９】
図１０Ａの実施形態において、記憶クライアント１０６は、論理アドレス空間１３２内のベクトル１０４０Ａ及び１０４０Ｂに関するアトミック記憶リクエストを発行する。図１０Ａに示すように、ベクトル１０４０Ａ及び１０４０Ｂは、前方マップ１６０内の既存のエントリに対応してもよい。アトミック記憶操作が（状態１０１５Ａにおいて）実施される前に、ベクトル１０４０ＡのＬＩＤ１０〜１３は、記憶アドレスＰ１〜Ｐ４に結合されてもよく、ベクトル１０４０ＢのＬＩＤ３６〜３８は、記憶アドレスＰ６〜８に結合されてもよい。他の実施形態において、アトミック記憶リクエストは、記憶アドレスに割り当てられていない、及び／又は、未だ結合されていないＬＩＤに関連してもよく、よって、前方マップ１６０（及び／又は他のマッピング層）内に対応するエントリを有していない。
【０１８０】
アトミック記憶リクエストに応じて、アトミック記憶モジュール１０３５は、特に、リダイレクトモジュール１０３４の使用により、トランザクションアドレス空間１０３２内の識別子の第２のセットにアクセスしてもよい。リダイレクトモジュール１０３４は、識別子の第２のセットをトランザクションアドレス空間１０３２内に割り当てるよう構成されてもよい。トランザクション識別子は、アトミック記憶リクエストの一部を実施する（例えば、アトミック記憶操作のプロセス中部分を追跡する）ために用いられてもよい。リダイレクトモジュール１０３４は更に、特に、記憶メタデータ１３５、前方インデックス１６０及び／又は他のインデックスメタデータ内のエントリ、及び／又は同様のものの使用により、識別子の第２のセットをＬＩＤの第１のセット（例えば、アトミック記憶リクエストの目標ＬＩＤ）にリンクさせるよう構成されてもよい。幾つかの実施形態において、アトミック記憶モジュール１０３５は更に、本明細書中に開示するように、識別子の第２のセットを、識別子の第１のセットと同じ記憶アドレス（ベクトル１０４０Ａ及び１０４０Ｂ）に結合するよう構成される範囲クローン操作を実行するよう構成されてもよい。
【０１８１】
状態１０１５Ｂに示すように、リダイレクトモジュール１０３４は、トランザクション識別子Ｚ０〜３及びＺ６〜８を含むベクトル１０４２Ａ及び１０４２Ｂを備える識別子の第２のセットを割り当ててもよい。トランザクション識別子と記憶位置との間の結合は、特に、トランザクションマップ１０６０等の中間マッピング層を用いて記憶メタデータ内に維持されてもよい。トランザクションマップ１０６０は、トランザクション識別子と論理アドレス空間１３２のＬＩＤ（及び／又はＶＡＳ５３２のＶＩＤ）との間のマッピングを備えていてもよい。図１０Ａの実施形態において、トランザクションマップ１０６０は、ベクトル１０４２Ａのトランザクション識別子とベクトル１０４０Ａの対応するＬＩＤ（ＬＩＤ１０〜１３）との間のリンク１０６４Ａを備え、トランザクションマップ１０６０は更に、ベクトル１０４２Ｂのトランザクション識別子とベクトル１０４０ＢのＬＩＤ３６〜３８との間のリンク１０６４Ｂを含む。トランザクションマップ１０６０は更に、トランザクション識別子と記憶位置との間の結合を含んでもよい。状態１０１５Ｂは、トランザクション識別子１０４２Ａとベクトル１０４０Ａ内のＬＩＤの記憶位置Ｐ１〜４との間の結合１０６２Ａ、及びトランザクション識別子１０４２Ｂとベクトル１０４０Ｂ内のＬＩＤの記憶位置Ｐ６〜８との間の結合１０６２Ｂを含む、トランザクションマップ１０６０における範囲クローン操作を示している。
【０１８２】
アトミック記憶モジュール１０３５は、トランザクションアドレス空間１０３２内のアトミック記憶リクエストのアトミック記憶操作を実施してもよく、これは、ＬＩＤの第１のセット（ベクトル１０４０Ａ及び／又は１０４０Ｂ）から識別子の第２のセット（１０４２Ａ及び１０４２Ｂのトランザクション識別子）へ記憶操作をリダイレクトすることを含んでいてもよい。記憶操作リダイレクトすることは、特に、トランザクションマップ１０６０の使用により、アトミック記憶リクエスト内のＬＩＤに対する参照をトランザクション識別子の第２のセットへ変換することを含んでいてもよい。例えば、ＬＩＤ１０に関する記憶操作は、トランザクションマップ１０６０のマッピング１０６４Ａに基づいてトランザクション識別子Ｚ０へリダイレクトされてもよい。論理容量を割り当てるよう構成される記憶操作は、トランザクションアドレス空間１０３２へリダイレクトされ（及び、内部に維持され）てもよい。例えば、ＬＩＤ１４〜２０を含むようベクトル１０４０Ａを拡張するリクエストは、ａ）ＬＩＤを論理アドレス空間１３２内で割り当てること、ｂ）対応するトランザクション識別子をトランザクションアドレス空間１０３２内で割り当てること、及びｃ）割り当てたトランザクション識別子及びＬＩＤをトランザクションマップ１０６０内でリンクさせることを含んでいてもよい。ＬＩＤをトリムするリクエストは、対応する識別子をトランザクションマップ１０６０内で無効として印を付けることを含んでいてもよい。論理アドレス空間１３２内の対応するＬＩＤは、本明細書中で更に詳細に開示するように、アトミック記憶操作の完了時に実行される範囲移動操作に応じてトリムされてもよい。
【０１８３】
状態１０１５Ｃに示すように、アトミック記憶リクエストの記憶操作は、データを記憶位置Ｐ９〜１３及びＰ１００〜１０２において記憶媒体１４０に追記することを含んでいてもよい。対応する記憶操作は、本明細書中に開示するように、トランザクションアドレス空間１０３２へリダイレクトされてもよい。従って、アトミック記憶リクエストのデータは、トランザクション識別子Ｚ０〜３及びＺ６〜８と関連付けられてもよく、これは、ａ）トランザクションマップ１０６０において記憶位置Ｐ９〜１３及びＰ１００〜１０２をトランザクション識別子Ｚ０〜３及びＺ６〜８に結合することと、ｂ）データを各トランザクション識別子Ｚ０〜３及びＺ６〜８と関連付けるよう構成される永続的メタデータ１１４と共にＰ９〜１３及びＰ１００〜１０２のデータを格納することとを含んでいてもよい。
【０１８４】
他の記憶操作は、アトミックベクトル操作と同時に実行されるか、及び／又は、その内部でインターリーブされてもよい。従って、アトミック記憶リクエストのデータは、記憶媒体１４０の記憶アドレス空間１４４内部で隣接する記憶位置に格納される必要はない。アトミック記憶リクエストのデータは、特に、記憶位置Ｐ９〜１０及びＰ１００〜１０２のデータとトランザクション識別子Ｚ０〜３及びＺ６〜８との間の結合に基づいて、アトミック記憶リクエストに関係しない他のデータと区別されてもよい。
【０１８５】
状態１０１５Ｃにおいて更に示すように、ベクトル１０４０Ａ及び１０４０Ｂ内のオリジナルの修正されていない状態のＬＩＤは、アトミック記憶操作の進行中に変更されなくてもよく、記憶位置Ｐ１〜４及びＰ６〜８におけるデータは記憶媒体１４０に残ってもよく、オリジナルの修正されていないデータとＬＩＤ１０〜１３及び３６〜３８との間の結合は、前方インデックス１６０内に維持されてもよい。従って、ベクトル１０４０Ａ及び１０４０Ｂに対応するオリジナルの修正されていないデータは、アトミック記憶操作が実行されている間、一貫した状態で維持されてもよく、アトミック記憶操作における不具合に関係なく保存されてもよい。
【０１８６】
アトミック記憶操作の完了は、トランザクションアドレス空間１０３２の内容を論理アドレス空間１３２にマージすることを含んでいてもよい。状態１０１５Ｄにおいて示すように、（状態１０１５Ｃにおいて示すような）トランザクションアドレス空間内のアトミック記憶操作を完了した後、アトミック記憶モジュール１０３５は、データをＬＩＤの第１のセット（ベクトル１０４０Ａ及び１０４０Ｂの目的ＬＩＤ）に結合するためにＰ９〜１３及びＰ１００〜１０２におけるデータの論理インタフェースを修正するよう範囲移動操作を実行してもよい。範囲移動操作は、ベクトル１０４０ＡのＬＩＤ１０〜１３を記憶位置Ｐ９〜１３と関連付け、ベクトル１０４０ＢのＬＩＤ３６〜３８を記憶位置Ｐ１００〜１０２と関連付けるよう前方マップ１６０を更新することを含んでいてもよい。範囲移動操作は更に、本明細書中に開示するように、記憶アドレスＰ９〜Ｐ１３をＬＩＤ１０〜１３に、及びＰ１００〜１０２をＬＩＤ３６〜３８に結合するよう、記憶媒体１４０上に永続的ノート３６６を格納することを含んでいてもよい。範囲移動操作は、図４Ａ〜Ｅの参照エントリ実施形態及び／又は図５Ａ〜Ｂの中間マッピング実施形態を含むが、これらに限定されない他の方法で実施されてもよい。範囲移動操作はまた、更新された論理インタフェースと一致するコンテキストフォーマットでデータを書き換えることを含んでいてもよく、これは、データをＬＩＤの第１のセット（例えば、それぞれ、論理アドレス空間１３２のＬＩＤ１０〜１３及び／又は３６〜３８）と関連付けるよう構成される永続的メタデータ１１４でデータを書き換えることを含んでいてもよい。データは、本明細書中に開示するように、１つ以上のバックグラウンド操作において書き換えられてもよい。
【０１８７】
アトミック記憶モジュール１０３５は、範囲移動操作の完了に応じてアトミック記憶リクエストの完了を通知するよう構成されてもよい。従って、完了は、永続的ノート３６６を格納すること及び／又は永続的ノート３６６を書込みバッファ（及び／又は記憶装置１４１の停電セーフ領域）に入れることに応じて通知されてもよい。アトミック記憶リクエストの完了は更に、アトミック記憶リクエストを実施するために用いられるトランザクション識別子の割り当てを解除することを含んでいてもよい。
【０１８８】
幾つかの実施形態において、範囲移動操作は更に、論理アドレス空間１３２内のＬＩＤ割り当てを修正することを含んでいてもよい。上で開示したように、アトミック記憶操作は、論理アドレス空間１３２内にＬＩＤを割り当てるためのリクエストを含んでいてもよい。かかる操作を実施することは、本明細書中に開示するように、ａ）要求されたＬＩＤ（又は代替ＬＩＤ）を論理アドレス空間１３２内に割り当てること、ｂ）対応するトランザクション識別子をトランザクションアドレス空間１０３２に割り当てること、及びｃ）ＬＩＤをトランザクション識別子にリンクさせることを含んでもよい。範囲移動操作は、本明細書中に開示するように、トランザクション識別子を削除すること、及び／又は、対応するトランザクション識別子と関連するデータを割り当てられたＬＩＤに移動することを含んでいてもよい。１つ以上のＬＩＤをトリムする操作を実施することは、対応するトランザクション識別子をトランザクションマップ１０６０内で無効として印を付けることを含んでいてもよい。対応する範囲移動操作は、特に、ＬＩＤを前方インデックス１６０から削除するか、及び／又は、ＬＩＤが削除されたことを示す永続的メタデータを格納することによって、トランザクション識別子にマッピングされたＬＩＤをトリムすることを含んでいてもよい。図１０Ａの実施形態において、ＬＩＤ１２をトリムするためのリクエストを備えるアトミック記憶リクエストは、トランザクションマップ１０６０内のトランザクション識別子Ｚ２を無効化することを含んでいてもよい。トランザクション識別子Ｚ２を無効化することは、トランザクション識別子Ｚ２を表すエントリをトランザクションマップ１０６０内に保持することと、エントリを無効、削除済、トリム済、又は同様のものとして印を付けることを含んでいてもよい。アトミック記憶リクエストを完了することは、ａ）トランザクション識別子Ｚ２にマッピングされたＬＩＤを無効化すること（例えば、前方マップ１６０内のＬＩＤ１２に対応するエントリ及び／又は他の記憶メタデータ１３５を無効化すること）、及び／又は、ｂ）ＬＩＤ１２をトリムするよう（例えば、ＬＩＤ１２に結合された記憶位置におけるデータが記憶媒体１４０上で保持される必要がないことを示す）永続的ノート３６６を構成することを含んでいてもよい。
【０１８９】
幾つかの実施形態において、記憶層１３０は更に、記憶ログの内容から記憶メタデータ１３５を再構築するよう構成される再構築モジュール１０３７を備えていてもよい。再構築モジュール１０３７は、記憶メタデータ１３５に対する損失及び／又はその破損を結果としてもたらす不具合状態に応じて記憶メタデータ１３５を再構築してもよい。再構築モジュール１０３７は、（最新のものから最も古いものへ、又はその逆の）ログ順序で記憶アドレス空間１４４内の物理記憶位置をトラバースするよう構成されてもよい。再構築モジュール１０３７は、前方マップ１６０の記憶アドレス割当てに対して、特に、ＬＩＤを再構築するよう、記憶ログの永続的メタデータ１１４にアクセスしてもよい。
【０１９０】
図１０Ａのアトミック記憶操作の不具合に応じて、再構築モジュール１０３７は、Ｐ１〜４及びＰ６〜８のそれぞれの内容に基づいてベクトル１０４０Ａ及び１０４０Ｂを再構築するよう構成されてもよい。再構築モジュール１０３７は、Ｐ９〜１３及び／又はＰ１００〜１０２に格納されたデータが、プロセス中のアドレス空間１０３２の識別子Ｚ０〜３及びＺ６〜９とのデータの関連付けに基づく不完全なアトミック記憶リクエストに関連することを認識してもよい。再構築モジュール１０３７は、従って、前方インデックス１６０からエントリを除外し、対応する記憶位置のデータを無効化してもよい。代替として、再構築モジュール１０３７は、部分的なアトミック記憶リクエストが完了できる（例えば、最初からアトミック記憶操作を再開するのではなく、障害発生時点から再開する）ように、トランザクションマップ１０６０内の対応するエントリを再構築してもよい。
【０１９１】
再構築モジュール１０３７は更に、完了したアトミック記憶リクエストに関するデータを特定するよう構成されてもよい。図１０Ａのアトミック記憶リクエストが正常に完了した後、記憶メタデータ１３５を再構築する場合、再構築モジュール１０３７は、物理的な記憶位置Ｐ９〜１３及びＰ１００〜１０２が、記憶位置１０９に格納された永続的ノート３６６に基づいて、論理アドレス空間１３２のＬＩＤに対応する（及び、正常なアトミック記憶リクエストの結果である）かを判断してもよい。上で開示したように、永続的ノート３６６は、Ｐ９〜１３及びＰ１００〜１０２のデータをベクトル１０４０Ａ及び１０４０ＢのＬＩＤと関連付けるよう構成される永続的メタデータを備えていてもよい。従って、再構築モジュール１０３７は更に、対応するデータが更新されたコンテキストフォーマットで書き換えられたかに関わらず、永続的ノート３６６の使用により状態１０１５Ｃの関連付けを再構築するよう構成されてもよい。
【０１９２】
図１０Ｂは、特に、本明細書中に開示する記憶層１３０及びアグリゲーション層５３０の使用により実施されるアトミック記憶操作の更なる実施形態１０００Ｂを示している。状態１０１７Ａにおいて、ＶＩＤの第１のセットに関するアトミック記憶操作が受信されてもよい。状態１０１７Ａに示すように、ベクトル４０９６〜４１５９の目標ＶＩＤは、既存のＶＩＤ割当及び／又はデータに対応していなくてもよい。従って、ＶＡＳ前方マップ５６０は、ＶＩＤ４０９６〜４１５９に対応するエントリ及び／又は中間マップ１０７０内のエントリを含んでいなくてもよい。
【０１９３】
状態１０１７Ｂに示すように、アトミック記憶リクエストに応じて、アトミック記憶モジュール１０３５は、アトミック記憶リクエストに対応するＶＩＤ（エントリ４０９６，６４）を割り当てるよう構成されてもよい。要求されたエントリが利用できない（例えば、既に別のクライアント及び／又は既存のデータに割り当てられている）場合、アトミック記憶リクエストは失敗する場合がある。代替として、アトミック記憶モジュール１０３５は、アトミック記憶リクエストを実施するようＶＩＤの異なるセットを割り当ててもよく、これは、アトミック記憶リクエストの完了時に記憶クライアント１０６に返されてもよい。
【０１９４】
リダイレクトモジュール１０３４は、ＶＩＤ４０９６，６４に対応する一時的なプロセス中の識別子９８７２Ｚ，６４を割り当てるよう構成されてもよい。本明細書中に開示するトランザクション識別子と同様に、プロセス中識別子９８７２Ｚ，６４は、目標ＶＩＤ（例えば、トランザクションアドレス空間１０３２）、ＶＡＳ５６０の特定の領域、別のＶＡＳ５６０、及び／又は同様のものとは異なる名前空間に対応してもよい。リダイレクトモジュール１０３４は、特に、ＶＡＳ前方マップ５６０内のそれぞれのエントリのメタデータ（及び／又は他の記憶メタデータ１３５）の使用により、及び／又はトランザクションマップ１０６０（又はプロセス中インデックス）の使用により、ＶＩＤ４０９６，６４をプロセス中識別子９８７２Ｚ，６４にリンクさせるよう構成されてもよい。トランザクション識別子９８７２Ｚ，６４を中間識別子１０３２，６４に結合することは、永続的ノート１０６６Ａを記憶媒体１４０に追記することを含んでいてもよい。永続的ノート１０６６Ａは、プロセス中識別子を中間識別子１０３２，６４と関連付けるよう構成される永続的メタデータを備えていてもよい。
【０１９５】
状態１０１７Ｃにおいて、アトミック記憶モジュール１０３５は、プロセス中識別子に関してアトミック記憶リクエストに対応する記憶操作を実施するよう構成されてもよく、これは、アトミック記憶リクエストのＶＩＤを対応するプロセス中識別子にリダイレクト（及び／又は変換）することを含んでいてもよい。記憶操作は、特に、ログ記憶モジュール１３７の使用によってデータを記憶媒体１４０に追記することを含んでいてもよい。プロセス中識別子９８７２Ｚ，６４は、中間マッピング層１０７０（識別子１０３２，６４）及び／又は永続的ノート１０６６Ａを介して追記されたデータに結合されてもよい。記憶ログに追記されたデータは、アトミック記憶操作のデータをそれぞれの中間識別子１０３２，６４に結合するよう構成される永続的メタデータ１１４を備えていてもよい。永続的メタデータ１１４は更に、データをアトミック記憶リクエストの一部として特定するよう構成されるフラグ又は他のインジケータを備えていてもよい。
【０１９６】
アトミック記憶リクエストの完了は、データをアトミック記憶リクエストの目的ＶＩＤ（ＶＩＤ４０９６，６４）に結合するために追記されたデータの論理インタフェースを修正するよう構成される範囲移動操作を含んでいてもよい。アトミック記憶リクエストの記憶操作を完了した後、アトミック記憶モジュール１０３５は、特に、ａ）目標ＶＩＤ４０９６，６４を中間エントリ１０３２，６４と関連付けるようＶＡＳ前方マップ５６０を更新すること、及びｂ）プロセス中識別子９８７２Ｚ，６４と中間エントリ１０３２，６４との間のマッピングを削除することによって範囲移動操作を実施してもよい。
【０１９７】
範囲移動操作は更に、プロセス中識別子９８７２Ｚ，６４の割り当てを解除すること（例えば、上で開示したように、プロセス中インデックス１０６０からエントリ及び／又は対応するメタデータを削除すること）を含んでいてもよい。状態１０１７Ｄに示すように、範囲移動操作は更に、追記されたデータの修正された論理インタフェースを特定するよう構成されてもよい別の永続的ノート１０６６Ｂを記憶媒体１４０に追記することを含んでいてもよい。永続的ノート１０６６Ｂは、中間エントリ１０３２，６４を目的ＶＩＤ範囲４０９６，６４に結合してもよい。永続的ノート１０６６Ｂは更に、アトミック記憶操作が正常に完了したことを示してもよい。アトミック記憶モジュール１０３５は、永続的ノート１０６６Ｂを記憶媒体１４０上に格納すること（及び／又は、例えば、停電セーフ領域内の記憶のために永続的ノート１０６６Ｂをスケジュール設定すること）に応じてアトミック記憶リクエストの完了を通知するよう構成されてもよい。
【０１９８】
上で開示したように、幾つかの実施形態において、アトミック記憶モジュール１０３５によって実施される範囲移動操作は、目標名前空間（例えば、論理アドレス空間１３２）に対する修正を含んでいてもよい。一実施形態において、例えば、アトミック記憶リクエストは、Ｉ／Ｏベクトルをトリムするためのリクエストを含んでいてもよい。アトミック記憶リクエストを実施することは、上で開示したように、対応するプロセス中又はトランザクション識別子をトリムするよう構成される、永続的ノート３６６を記憶ログ内に格納することを含んでいてもよい。範囲移動操作は、目標名前空間内でトリム操作を実施することを含んでいてもよい。トリム操作は、本明細書中に開示するように、目標Ｉ／Ｏベクトルをトリムするよう永続的ノート１０６６Ｂを構成すること、及び／又は、格納されたトリムコマンドを目標Ｉ／Ｏベクトルに移動させることを含んでいてもよい。
【０１９９】
永続的ノート１０６６Ｂは、上で開示したように、万一の不具合状態の場合に記憶メタデータ１３５をリビルドするよう、再構築モジュール１０３７によって用いられてもよい。再構築モジュール１０３７は、中間マップ１０７０及び／又はＶＡＳ前方マップ５６０の結合をリビルドしてもよい。状態１０１７Ｄにおいて、再構築モジュール１０３７は、ログ内に（例えば、それぞれのパケットヘッダ内に）対応するデータセグメントと共に格納される永続的メタデータ１１４の使用により、１０３２，６４に対応する記憶アドレスとの間の関連付けを再構築してもよい。再構築モジュール１０３７は更に、永続的ノート１０６６Ｂの使用により中間アドレス１０３２，６４をＶＩＤ４０９６，６４と関連付けるよう構成されてもよい。
【０２００】
状態１０１７Ｅに示すように、再構築モジュール１０３７は、アトミック記憶リクエストの完了を示す永続的ノート１０６６Ｂが記憶媒体１４０上に存在しないことを判断することに応じて、失敗したアトミック記憶操作のデータを特定してもよい。再構築モジュール１０３７は、ａ）プロセス中識別子９８７２Ｚ，６４に結合される、及び／又は、ｂ）（それぞれの永続的メタデータ１１４において）アトミックとして印を付けられる中間識別子１０３２，６４に結合されるデータを特定することに応じて、追記されたデータが不完全な失敗したアトミック記憶リクエストの一部だったかを判断してもよい。これに応じて、再構築モジュール１０３７は、ａ）エントリ１０３２，６４を中間マップ１０７０から削除及び／又は除外し、ｂ）エントリ４０９６，６４及び／又は９８７２Ｚ，６４をＶＡＳ前方マップ５６０から削除及び／又は除外し、及び／又はｃ）記憶媒体１４０上の対応するデータを無効化してもよい。
【０２０１】
図１１は、不揮発性記憶媒体上にコンテキストフォーマットで格納されるデータの論理インタフェースを管理するための方法１１００の一実施形態のフロー図である。
【０２０２】
ステップ１１２０は、不揮発性記憶媒体上にコンテキストフォーマットで格納されるデータの論理インタフェースを修正することを含んでいてもよい。論理インタフェースは、クローン操作、重複排除操作、移動操作、又は同様のものを含んでもよいが、これらに限定されないデータに関する操作を実行することに応じて、ステップ１１２０において修正されてもよい。リクエストは、記憶クライアント１０６、記憶層１３０（例えば、重複排除モジュール３７４）、又は同様のものから生じてもよい。
【０２０３】
論理インタフェースを修正することは、データと関連するＬＩＤを修正することを含んでいてもよく、これは、１つ以上の追加のＬＩＤ（例えば、クローン、重複排除等）を用いてデータを参照すること、データと関連するＬＩＤを変更すること（例えば、移動）、又は同様のことを含んでもよいが、これらに限定されない。修正された論理インタフェースは、上で説明したように、記憶媒体１４０上のデータのコンテキストフォーマットと矛盾する場合がある。
【０２０４】
ステップ１１２０は更に、論理インタフェースに対する修正を特定する永続的ノートを記憶媒体１４０上に格納することを含んでいてもよい。永続的ノートは、データの修正された論理インタフェース（例えば、記憶メタデータ１３５）が（必要であれば）記憶媒体１４０の内容から再構築できるように、論理操作を永続的及びクラッシュセーフにするために用いられてもよい。ステップ１１２０は更に、論理インタフェースが修正されたことを通知すること（例えば、ＡＰＩ呼出しから返すこと、明示的な通知を返すこと、又は同様のこと）を含んでいてもよい。通知（及びステップ１１３０の修正された論理インタフェースを介するアクセス）は、データのコンテキストフォーマットが記憶媒体１４０上で更新される前に生じる。従って、論理操作は、データが書き換えられ、及び／又は再配置されるまで、待機しなくてもよく、本明細書中に開示するように、データのコンテキストフォーマットを更新することは、遅延されるか、及び／又は、方法１１００の「クリティカルパス」及び／又は他の記憶操作及び／又はリクエストを処理するための経路の外側のプロセス中に実施されてもよい。
【０２０５】
ステップ１１３０は、ステップ１１２０修正された論理インタフェースを介して、矛盾したコンテキストフォーマット内のデータに対するアクセスを提供することを含んでいてもよい。上で説明したように、修正されたコンテキストインタフェースと一致するようデータのコンテキストフォーマットを更新することは、不揮発性記憶媒体上のデータを書き換えること及び／又は再配置することを含んでいてもよく、これは、ステップ１１２０の操作及び／又は修正された論理インタフェースに関する他の記憶操作に追加の待ち時間を課す場合がある。従って、記憶層１３０は、データのコンテキストフォーマットが更新される間（又は前）に、矛盾したコンテキストフォーマット内のデータに対するアクセスを提供するよう構成されてもよい。ステップ１１３０においてデータに対するアクセスを提供することは、上で説明したように、（１つ以上の間接エントリを介して）データに対応する１つ以上の参照エントリを参照すること、及び／又は、それにリンクさせることを含んでいてもよい。
【０２０６】
ステップ１１４０は、ステップ１１２０の修正された論理インタフェースと一致するよう記憶媒体１４０上のデータのコンテキストフォーマットを更新することを含んでいてもよい。ステップ１１４０は、データを記憶媒体１４０上の別の媒体記憶位置に書き換えるか、及び／又は、再配置することを含んでいてもよい。上で説明したように、ステップ１１４０は、ステップ１１２０のクリティカルパスの外側のプロセス、及び／又は、記憶層１３０によって実行される他の記憶リクエストを用いて実施されてもよく、ステップ１１４０は、媒体管理モジュール３７０、重複排除モジュール３７４、又は同様のもの等の別の自律モジュールによって実施されてもよい。従って、データのコンテキストフォーマットは、他の記憶操作及び／又はリクエストを処理することとは無関係に更新されてもよい。よって、ステップ１１４０は、データのコンテキストフォーマットの即時更新を遅延させることと、媒体管理プロセス等の１つ以上の「バックグラウンド」プロセスにおいて、データのコンテキストフォーマットを更新することとを含んでいてもよい。代替として、又は加えて、データのコンテキストフォーマットを更新することは、他の記憶操作に応じて（例えば、それと共に）生じてもよい。例えば、データを修正するための後続のリクエストは、データが所定位置以外及び更新されたコンテキストフォーマットで書き換えられることをもたらしてもよい。
【０２０７】
ステップ１１４０は更に、データのコンテキストフォーマットが更新されるように、記憶メタデータ１３５を更新することを含んでいてもよい。データが、更新されたコンテキストフォーマットで書き換えられるか、及び／又は再配置されるように、記憶層１３０は、それに従って、記憶メタデータ１３５（例えば、前方マップ１６０）を更新してもよい。更新は、上で説明したように、参照マップ４６０内の参照エントリへの１つ以上のリンクを削除すること、及び／又は、間接エントリをローカルエントリで置換することを含んでいてもよい。ステップ１１４０は更に、上で開示したように、データのコンテキストフォーマットを更新すること、及び／又は、記憶メタデータ１３５を永続させることに応じて、永続的ノートを無効化すること、及び／又は、それを記憶媒体１４０から削除することを含んでいてもよい。
【０２０８】
図１２は、不揮発性記憶媒体上にコンテキストフォーマットで格納されるデータの論理インタフェースを管理するための方法１２００の別の実施形態のフロー図である。方法１２００は、本明細書中に開示するように、記憶層１３０の１つ以上のモジュール及び／又はコンポーネントによって実施されてもよい。
【０２０９】
ステップ１２２０は、消去ブロック又は論理消去ブロック等の、回復のための記憶区分を選択することを含んでいる。上で説明したように、ステップ１２２０の選択は、利用可能な記憶容量の不足、閾値に達する特定の論理消去ブロック内で無効として印を付けられたデータの割合を検出すること、有効データの連結、閾値に達するエラー検出率、データ分散を向上すること、データリフレッシュ、又は同様のもの等の多数の異なる要因に基づいてもよい。代替として、又は加えて、ステップ１２２０の選択基準は、記憶区分が、上で説明したように、その対応する論理インタフェースと一致しないコンテキストフォーマットでデータを備えているかどうかを含んでもよい。
【０２１０】
上で開示したように、記憶区分を回復すること（又は再利用すること）は、記憶区分を消去することと、その有効データ（もしあれば）を不揮発性記憶媒体上の他の記憶位置に再配置することを含んでいてもよい。ステップ１２３０は、グルーミング操作において再配置されるデータのコンテキストフォーマットが更新されるべき（例えば、データの論理インタフェースと一致しない）かどうかを決定することを含んでいてもよい。ステップ１２３０は、データの永続的メタデータ（例えば、論理インタフェースメタデータ）がデータの記憶メタデータ１３５と一致するかどうか決定するよう、上で説明したような、前方マップ１６０、参照マップ４６０、及び／又は中間アドレス空間等の記憶メタデータ１３５にアクセスすることを含んでいてもよい。永続的メタデータが記憶メタデータ１３５と一致していない（例えば、上で説明したように、データを異なるＬＩＤと関連付けている）場合、フローはステップ１２４０で継続し、それ以外の場合、フローはステップ１２５０で継続する。
【０２１１】
ステップ１２４０は、データの論理インタフェースと一致するようデータのコンテキストフォーマットを更新することを含んでいてもよい。ステップ１２４０は、上で説明したように、ＬＩＤの異なるセット（及び／又は参照エントリ）を参照するよう論理インタフェースメタデータを修正することを含んでいてもよい。
【０２１２】
ステップ１２５０は、上で説明したように、不揮発性記憶媒体上で実行される記憶操作の順序付けられたシーケンスを保存するログフォーマットで異なる記憶位置にデータを再配置することを含んでいる。従って、再配置されたデータ（更新されたコンテキストフォーマットでの）は、記憶メタデータ１３５を再構築する場合（必要であれば）、有効で、最新バージョンのデータとして特定されてもよい。ステップ１２５０は更に、データの論理インタフェースをデータの新しい媒体記憶位置に結合、矛盾したコンテキストフォーマットのデータに対する間接及び／又は参照エントリを削除等するよう、記憶メタデータ１３５を更新することを含んでいてもよい。
【０２１３】
図１３は、コンテキストフォーマットで格納されるデータの論理インタフェースを管理するための方法１３００の別の実施形態のフロー図である。ステップ１３１５は、１つ以上の記憶装置１２０上の重複データを特定することを含んでいてもよい。ステップ１３１５は、記憶層１３０内で動作する重複排除モジュール３７４によって実行されてもよい。代替として、ステップ１３２０は、記憶操作が実行されるように、記憶層１３０によって実行されてもよい。
【０２１４】
ステップ１３１５は、記憶媒体１４０が重複データを備えている（又は、書込み及び／又は修正リクエストのデータを既に備えている）ことを判断すること及び／又は評価することを含んでいてもよい。従って、ステップ１３２０は、（例えば、重複データが記憶媒体１４０に書き込まれる際、又は、その前に）記憶操作の経路内で生じてもよいか、及び／又は、処理する記憶操作の経路の外側で生じてもよい（例えば、既に記憶媒体１４０上に格納された重複データを特定する）。ステップ１３２０は、記憶メタデータ１３５内でデータ署名を生成すること及び／又は維持することと、重複データを特定するために署名を用いることとを含んでいてもよい。
【０２１５】
ステップ１３１５における重複データを特定することに応じて、記憶層１３０（又は、重複排除モジュール３７４等の他のモジュール）は、単一コピーがＬＩＤの２つ（以上）のセットによって参照されてもよいように、データのコピーの論理インタフェースを修正してもよい。ステップ１３２０における論理インタフェースに対する修正は、上で説明したように、記憶メタデータ１３５を更新すること及び／又は不揮発性記憶媒体１３５上に永続的ノートを格納することを含んでいてもよい。ステップ１３２０は更に、上で説明したように、不揮発性記憶媒体上のデータの他のコピーを無効化すること及び／又は削除することを含んでいてもよい。
【０２１６】
記憶媒体１４０上のデータのコンテキストフォーマットは、修正された論理インタフェースと矛盾する場合がある。従って、ステップ１３３０及び１３４０は、上で説明したように、修正された論理インタフェースを介して矛盾したコンテキストフォーマットのデータに対するアクセスを提供することと、記憶媒体１４０上のデータのコンテキストフォーマットを更新することを含んでいてもよい。
【０２１７】
図１４は、本明細書中に開示する記憶層１３０によって実施される範囲マージ操作の一実施形態のフロー図である。ステップ１４１０は、論理アドレス空間１３２内のＬＩＤのセットをクローン化することを含んでいてもよい。ＬＩＤをクローン化することは、ＬＩＤの２つ以上の異なるセットを介して記憶媒体１４０上のデータの同じセット（例えば、同じ記憶位置及び／又は記憶アドレス）を参照することを含んでいてもよい。２つ以上のセットは、ＬＩＤの作業中のセット及びＬＩＤのオリジナルの一致するセットを含んでもよい。ＬＩＤの作業中のセットは、ファイル修正操作を実行するために用いられてもよく、ＬＩＤのオリジナルの一致するセットは、オリジナルの修正されていない状態のデータを維持するよう構成されてもよい。
【０２１８】
上で開示したように、ステップ１４１０においてクローン化されたデータは、記憶媒体１４０上のデータの記憶位置に結合されてもよいＬＩＤのセットによって参照されてもよい。ステップ１４１０は、ＬＩＤの１つ以上の他のセットを論理アドレス空間１３２内及び／又は別のアドレス空間内に割り当てることを含んでいてもよい。ＬＩＤの１つ以上の他のセットは、ＬＩＤのオリジナルのセットの論理容量と等しい（例えば、同じ数のＬＩＤを含むか、及び／又は、同じ量の記憶容量に相当する）論理容量を備えていてもよい。ステップ１４１０は更に、ＬＩＤの１つ以上の他のセットの論理識別子をＬＩＤのオリジナルのセットによって参照される同じデータと関連付けるか、及び／又は結合することを含んでいてもよい。従って、ステップ１４１０は、データをＬＩＤの２つ以上の異なるセットと関連付けるよう、データに対する論理インタフェースを修正することを含んでいてもよい。幾つかの実施形態において、ステップ１４１０は、ＬＩＤの１つ以上のセットを論理アドレス空間１３２内に割り当てることと、ＬＩＤを記憶アドレスの同じセットに結合することとを含んでいる。代替として、又は加えて、ステップ１４１０は、図４Ａ〜Ｅと共に開示したように、１つ以上の参照エントリを介して、ＬＩＤの２つ以上の異なるセットのＬＩＤを記憶アドレスに間接的にリンクさせるよう、参照マップ４６０内で１つ以上の参照エントリを作成することを含んでいてもよい。代替として、ステップ１４１０は、（例えば、図５Ａ〜Ｂと共に開示したように）１つ以上の中間マッピング層の使用により実施されてもよい。ステップ１４１０は更に、特に、ＬＩＤと関連するメタデータ９８４及び／又は９９４を介してＬＩＤの２つ以上のセットをリンクさせることを含んでいてもよい。メタデータ９８４及び／又は９９４は、ＬＩＤセットが同じ記憶エンティティ（例えば、同じファイルのバージョン）のクローンを表すことを示すよう構成されてもよい。メタデータ９８４及び／又は９９４は更に、上で開示したように、ＬＩＤの２つ以上のセットのためのマージポリシーを指定及び／又は参照するよう構成されてもよい。
【０２１９】
ステップ１４１０は更に、ステップ１４１０のクローン操作を永続的及びクラッシュセーフにするよう構成される永続的ノート３６６を記憶媒体１４０上に格納することを含んでいてもよい。永続的ノート３６６は、データの修正された論理インタフェースを示し（例えば、データをＬＩＤの２つ以上のセットと関連付ける）、クローン操作のマージポリシーを示し、及び同様のことを行うよう構成されてもよい。
【０２２０】
ステップ１４２０は、ステップ１４１０の異なるＬＩＤ範囲のうちの１つ以上の内部で記憶操作を実行することを含んでいてもよい。記憶操作は、１つ以上の記憶クライアント１０６からインタフェース１３１を介して受信されたリクエストに応じて実行されてもよい。記憶操作は、データを記憶媒体１４０に追記することを含んでいてもよい。記憶操作は、従って、ＬＩＤセットのうちの１つ以上におけるＬＩＤと記憶媒体１４０上の記憶位置との間の関連性及び／又は結合を修正することを含んでいてもよい。関連性及び／又は結合を修正することは更に、直接、及び／又は、１つ以上の間接参照及び／又はマッピング層を介して、ＬＩＤセットのうちの１つ以上におけるＬＩＤを追記されたデータにマッピングすることを含んでいてもよい。
【０２２１】
ステップ１４３０は、上で開示したように、ＬＩＤセットをマージすることを含んでいてもよい。ＬＩＤセットをマージすることは、上で開示したように、ＬＩＤ範囲のうちの１つにおいて行われた修正をＬＩＤセットのうちの１つ以上に組み込むことを含んでいてもよい。ステップ１４３０は更に、マージポリシーに従って１つ以上のマージ競合を解消することを含んでいてもよい。幾つかの実施形態において、マージすることは、ＬＩＤセットのうちの１つ以上を削除すること（例えば、無効化すること）を含み、これは、エントリを前方マップ１６０から削除すること、記憶位置に対して共有された参照を参照カウントデータ構造から削除すること、参照エントリを参照マップ４６０から削除すること、中間マッピング層内の参照を削除すること、及び／又は同様のことを含んでいてもよい。ステップ１４３０は更に、上で開示したように、マージされたデータの論理インタフェースを修正することを含んでいてもよい。修正された論理インタフェースは、ＬＩＤセットのうちの１つ以上に関して当初格納されたデータを参照するために用いられるＬＩＤを更新してもよい。修正された論理インタフェースは、記憶媒体１４０上のデータのコンテキストフォーマットと矛盾する場合がある。従って、ステップ１４３０は、マージされたデータをデータの更新された論理インタフェースと関連付ける（例えば、第２のセット内のＬＩＤと関連して当初格納されたデータを第１のセット内のＬＩＤと関連付ける）よう、記憶媒体１４０上の１つ以上の永続的ノート３６６を追記することを含んでいてもよい。ステップ１４３０は更に、上で開示したように、矛盾したコンテキストフォーマットのデータに対するアクセスを提供すること、及び／又は、１つ以上のバックグラウンド操作においてデータのコンテキストフォーマットを更新することを含んでいてもよい。
【０２２２】
図１５は、範囲マージ操作のための方法１５００の別の実施形態のフロー図である。ステップ１５２０は、ＬＩＤ範囲の論理コピーを作成するためのリクエストを受信することを含んでいてもよい。リクエストは、インタフェース１３１を介して記憶クライアント１０６から受信されてもよく、及び／又は、記憶層１３０によって提供されるよりハイレベルなＡＰＩの一部であってもよい。リクエストは、仮に、クローンがどの様に同期されるか；マージはどのように生じるか（マージポリシー）；論理コピーが短命として指定されているかどうか等を含んでもよいが、これらに限定されないクローンの「動作モード」を含んでもよい。
【０２２３】
ステップ１５３０は、リクエストを処理するようＬＩＤを論理アドレス空間１３２内に割り当てることを含んでいてもよい。ステップ１５３０の割り当ては更に、クローン化されたＬＩＤ範囲に対する変更を適応するよう物理記憶空間を確保することを含んでいてもよい。物理記憶空間の確保は、クローンの動作モードを前提としてもよい。例えば、全ての変更がクローンとオリジナルのアドレス範囲との間で同期されると、物理記憶空間の小さい部分（もしあれば）が確保されてもよい。代替として、記憶層１３０は、コピーオンコンフリクトマージポリシーを有する論理コピー操作のために追加の物理記憶容量を確保してもよい。ステップ１５３０は更に、論理アドレス空間１３２の指定部分又はセグメント（例えば、論理コピー及び／又はクローン操作と共に使用するための専用の範囲）内にクローンを割り当てることを含んでいてもよい。従って、ステップ１５３０は、ＬＩＤの第１のセットをクローン化するようＬＩＤの第２の異なるセットを割り当てることを含んでいてもよい。
【０２２４】
ステップ１５４０は、データに結合されるオリジナルのＬＩＤとステップ１５３０において割り当てられたクローン化ＬＩＤの両方を参照するようクローンに対応するデータの論理インタフェースを更新することを含んでいてもよい。ステップ１５４０は、上で開示したように、記憶媒体１４０上に永続的ノート３６６を格納することを含んでいてもよい。
【０２２５】
ステップ１５５０は、記憶リクエストを受信することと、記憶リクエストが第１及び／又は第２のセット（クローン化ＬＩＤ範囲）におけるＬＩＤに関係するかどうかを判断することとを含んでいてもよい。もしそうであれば、フローはステップ１５６０で継続し、それ以外の場合、フローはステップ１５５０に留まる。
【０２２６】
ステップ１５６０は、（もしあれば）操作が他の関連するＬＩＤ範囲上で行われるか（例えば、同期割当操作等）を決定することを含んでいてもよい。ステップ１５６０の決定は、メタデータ９８４及び／又は９９４にアクセスすることを含んでいてもよく、これは、クローンの同期ポリシーを備えるか、及び／又は参照してもよい。
【０２２７】
ステップ１５７０は、要求された記憶操作と共にステップ１５６０において決定された操作（もしあれば）を実行することを含んでいてもよい。同期操作のうちの１つ以上が実行できない（例えば、クローンのうちの１つ以上のための追加の論理アドレス空間１３２が割り当てられない）場合、基本となる記憶操作が失敗する場合がある。
【０２２８】
図１６は、範囲クローン及び／又は範囲マージ操作を実施するための方法１６００の別の実施形態のフロー図である。ステップ１６１０は、上で開示したように、ＬＩＤ範囲をクローン化することを含んでいてもよい。ステップ１６１０は、それぞれの記憶アドレスで記憶媒体１４０上に格納されたデータと関連するＬＩＤのセットをクローン化することを含んでいてもよい。ステップ１６１０は、従って、ＬＩＤの２つ以上の異なるセットを記憶位置の同じセット（例えば、同じデータ）と関連付けることを含んでいてもよい。ステップ１６１０は更に、上で開示したように、１つ以上の永続的ノート３６６を記憶媒体１４０上に格納すること、及び／又は、更新されたコンテキストフォーマットでデータを書き換えることを含んでいてもよい。ステップ１６１０は、特に、メタデータ９８４及び／又は９９４を介してＬＩＤの２つ以上のセットをリンクさせることを含んでもよい。メタデータ９８４及び／又は９９４は、上で開示したような、クローン同期ポリシー、マージポリシー、及び／又は同様のものを備えるか、及び／又は参照してもよい。
【０２２９】
ステップ１６２０は、２つ以上のクローン化ＬＩＤ範囲のうちの１つ以上に関して記憶操作を実行することを含んでいてもよい。ステップ１６２０は、クローン化された範囲間の割当操作を同期させることを含んでいてもよい。ステップ１６２０の記憶操作は、データを記憶媒体１４０に追記すること、及び／又は、追記されたデータを異なるＬＩＤ範囲のうちの１つ以上のＬＩＤと関連付けることを含んでいてもよい。
【０２３０】
ステップ１６３０は、ステップ１６１０の２つ以上のＬＩＤ範囲をマージするためのリクエストを受信することを含む。マージリクエストは、インタフェース１３１を介して受信してもよく、及び／又は、アトミック記憶操作又は同様のもの等の別の、よりハイレベルな操作の一部であってもよい。
【０２３１】
ステップ１６４０は、ＬＩＤの２つ以上のセット（もしあれば）の間のマージ競合を特定することを含んでいてもよい。マージ競合を特定することは、２つ以上のクローン化されたＬＩＤ範囲のうちの１つを超える内部で修正されたＬＩＤを特定することを含んでいてもよい。図９Ｃに戻って参照すると、ステップ１６４０は、範囲９２４内の対応するＬＩＤ９７２〜９７３のように、範囲９１４内のＬＩＤ０７２〜０７３が修正されたかを決定することに応じて、状態９４１Ｄにおけるマージ競合を特定することを含んでいてもよい。よって、ステップ１６４０は、競合する修正がマージ操作において同じＬＩＤにマッピングされた場合を特定するよう、ＬＩＤクローン内部の修正を比較することを含んでいてもよい。
【０２３２】
ステップ１６５０は、ステップ１６４０において特定されたマージ競合を解消することを含んでいてもよい。ステップ１６５０は、適用できるマージポリシーを決定することを含んでいてもよく、これは、上で開示したように、マージ競合がどの様に解消されるかを決定してもよい。マージポリシーは、ＬＩＤのどのバージョンがマージされたＬＩＤ範囲に含まれるか、及び／又は、競合が、ＬＩＤ範囲の別のコピーを維持することによって解消されるかどうかを指定してもよい。ステップ１６５０は更に、上で開示したように、解消されたマージ競合に従って、ＬＩＤ範囲をマージすることを含んでいてもよい。
【０２３３】
図１７は、アトミック記憶操作を実施するための方法１７００の一実施形態のフロー図である。ステップ１７１０は、アトミック記憶リクエストの識別子の第１のセットに対応する識別子の第２のセットにアクセスすることを含んでいてもよい。ステップ１７１０は、識別子の第１のセット（例えば、目標ＬＩＤ、ＶＩＤ、又は同様のもの）に関するアトミック記憶リクエストに応じて実行されてもよい。識別子の第１のセットは、記憶媒体１４０上に格納された既存のデータに対応してもよい。代替として、アトミック記憶リクエストは、論理アドレス空間１３２又はＶＡＳ５３２内の識別子の第１のセットのうちの幾つか（又は全部）を割り当てるためのリクエストを含んでいてもよい。アトミック記憶リクエストは、ＬＩＤ及び／又はＶＩＤの異なる互いに素なベクトルに関する複数の記憶操作に対応してもよい。従って、識別子の第１のセットは、複数の互いに素なＩ／Ｏベクトルを備えていてもよい。
【０２３４】
幾つかの実施形態において、ステップ１７１０は、トランザクションアドレス空間１０３２、中間インデックス１０７０、ＶＡＳ５３２、又は同様のもの等の別のアドレス空間内の識別子の第１のセットに対応する識別子を割り当てることを含む。代替として、ステップ１７１０は、論理アドレス空間１３２の特定の範囲又は領域内に識別子を割り当てることを含んでいてもよい。ステップ１７１０は、識別子の第１のセットと同じ量及び／又は論理容量の識別子の対応するセットを割り当てることを含んでいてもよい。識別子の第２のセットは、本明細書中に開示するように、特に、リダイレクトモジュール１０３４の使用によりアクセスされるか、及び／又は割り当てられてもよい。ステップ１７１０は更に、本明細書中に開示するように、特に、トランザクションマップ１０６０の使用により、識別子の第１及び第２のセットをリンクさせることを含んでもよい。
【０２３５】
ステップ１７１０は更に、識別子の第２のセットを識別子の第１のセットのデータ（もしあれば）に結合するよう範囲クローン操作を実施することを含んでいてもよい。範囲クローン操作は、図３Ａ〜Ｅの範囲クローン実施形態、図４Ａ〜Ｅの参照エントリ実施形態、及び／又は図５Ａ〜Ｂの中間マッピング層実施形態を含むが、これらに限定されない本明細書中で開示した実施形態の何れかを用いて実施されてもよい。
【０２３６】
ステップ１７２０は、ステップ１７１０においてアクセスされた識別子の第２のセットに関してアトミック記憶リクエストの記憶操作を実施することを含んでいてもよい。ステップ１７２０は、記憶操作を識別子の第１のセットから識別子の第２のセットにリダイレクトすること（例えば、本明細書中に開示するように、識別子の第１及び第２のセット間で変換すること）を含んでいてもよい。ステップ１７２０の記憶操作は、特に、ログ記憶モジュール１３７の使用によってデータを記憶媒体１４０上に格納することを含んでいてもよい。ステップ１７２０の記憶操作は、ａ）記憶リソースを割り当てる操作（例えば、論理及び／又は物理記憶リソースを割り当てる操作）、ｂ）記憶リソースの割り当てを解除する操作（例えば、トリム、永続的トリム、及び／又は同様のもの）、ｃ）データを記憶ログに書き込むこと、ｄ）記憶媒体１４０上に格納された既存のデータを修正すること、ｅ）記憶媒体１４０上に格納されたデータを上書きすること、及び／又は同様のことを含んでもよいが、これらに限定されない。ログ記憶モジュール１３６は、記憶媒体１４０上に格納された既存のデータを修正、上書き、及び／又は置換するよう構成される操作が、記憶ログに追記される一方で、追記されたデータによって修正、上書き、及び／又は置換されるデータが、記憶媒体１４０上で変更されないままで残るように、記憶アドレス空間１４４内部の所定位置以外で記憶操作を実施するよう構成されてもよい。
【０２３７】
ステップ１７２０において記憶媒体１４０に書き込まれたデータは、データの論理インタフェースを示すよう構成される永続的メタデータ１１４を備えていてもよい。永続的メタデータ１１４は、データを、ステップ１７１０でアクセスされた識別子の第２のセットに結合するよう構成されてもよい。代替として、又は加えて、永続的メタデータ１１４は、特に、記憶ログに格納される永続的ノート３６６を介して識別子の第２のセットに結合される中間アドレス空間に追記されたデータを結合するよう構成されてもよい。幾つかの実施形態において、永続的メタデータ１１４は更に、データがアトミック記憶操作の一部であることを示すよう構成されてもよい。代替として、又は加えて、データは、永続的メタデータ１１４の使用により（例えば、データと識別子の第２のセットとの間の関連性を介して）アトミック記憶操作の一部として特定されてもよい。
【０２３８】
ステップ１７３０は、アトミック記憶リクエストを完了させることを含んでいてもよい。アトミック記憶リクエストの完了は、識別子の第２のセットに関してステップ１７２０において実施された記憶操作のデータを目標識別子の第１のセットに移動させるよう構成される範囲移動操作を含んでいてもよい。範囲移動操作は、単一のアトミック書込み操作において完了されてもよい。単一のアトミック書込み操作は、永続的メタデータ（例えば、永続的ノート３６６及び／又は１０６６Ｂ）を記憶媒体１４０上に格納する操作を含んでいてもよい。永続的メタデータは、データを識別子の第１のセット（例えば、アトミック記憶リクエストの目標ＬＩＤ又はＶＩＤ）に結合するようステップ１７２０において書き込まれたデータの論理インタフェースを修正するよう構成されてもよい。永続的メタデータは、複数の異なる記憶ベクトル（例えば、識別子の複数の異なる不連続なセット）の論理インタフェースを修正するよう構成されてもよい。ステップ１７３０は更に、識別子の第１のセットを介して追記されたデータを参照するよう記憶メタデータ１３５を更新することを含んでいてもよく、これは、前方インデックス１６０、参照マップ４６０、中間マッピング層１０７０、及び／又は同様のもの内の１つ以上のマッピングを修正することを含んでいてもよい。
【０２３９】
ステップ１７３０は更に、データを論理識別子の第１のセットと関連付けるよう構成されるコンテキストフォーマットで、１７２０において格納されたデータを書き換えることを含んでいてもよい。データは、１つ以上のバックグラウンド記憶操作において書き換えられてもよい。記憶層１３０及び／又はアグリゲーション層５３０は、データが書き換えられる前に、識別子の第１のセットを介したデータに対するアクセスを提供してもよい。
【０２４０】
ステップ１７３０は更に、アトミック記憶リクエストの完了を通知することを含んでいてもよい。完了は、永続的メタデータ（永続的ノート３６６及び／又は１０６６Ｂ）を記憶媒体１４０上に格納すること、及び／又は、適切な確実性で、永続的メタデータが記憶媒体１４０上に格納されることを判断することに応じて通知されてもよい。
【０２４１】
図１８は、アトミック記憶操作のための方法１８００の別の実施形態のフロー図である。ステップ１８１０は、アトミック記憶リクエストを受信することを含んでいてもよい。アトミック記憶リクエストは、特に、記憶インタフェース１３１を介して記憶層１３０で受信されてもよい。代替として、アトミック記憶リクエストは、アグリゲーション層５３０のインタフェース５３１を介して受信されてもよい。アトミック記憶リクエストは、それぞれのＩ／Ｏベクトル内で実行される複数のアトミック記憶操作を含んでいてもよく、それぞれは、異なるそれぞれのＬＩＤ及び／又はＶＩＤの目標セットに対応してもよい。
【０２４２】
ステップ１８２０は、トランザクション又はプロセス中識別子のセットに関してアトミック記憶リクエストの記憶操作を実施することを含んでいてもよい。トランザクション識別子は、論理アドレス空間１３２；ＶＡＳ５３２（又は特定のＶＡＳ５３２内の領域）；上で開示したトランザクションアドレス空間１０３２等の別の名前空間；及び／又は同様のものの特定の領域に対応してもよい。ステップ１８２０は、アトミック記憶リクエストの目標識別子に対応するトランザクション識別子を割り当てること及び／又は特定することを含んでいてもよく、トランザクション識別子は、ベクトル化されたアトミック記憶リクエストのＩ／Ｏベクトルに対応する複数の識別子範囲及び／又は程度を備えていてもよい。幾つかの実施形態において、トランザクション識別子は、目標識別子とは異なる範囲及び／又は程度において割り当てられ、及び／又は特定されてもよい。例えば、ＬＩＤ１０２４〜２０４８及び６１４４〜７１８６の２つの不連続な範囲に対応するアトミック記憶操作を実施するために用いられるトランザクション識別子は、短命識別子１０２４０〜１２２８８の単一範囲又はトランザクション識別子の複数のより小さな範囲及び／又は程度内で実施されてもよい。トランザクション識別子は、特に、記憶メタデータ１３５の使用により、目標識別子にリンクされてもよい。幾つかの実施形態において、トランザクション識別子は、トランザクションマップ１０６０内の目標識別子にリンクされる。トランザクションマップ１０６０は更に、トランザクション識別子を、目標ＬＩＤ及び／又はＶＩＤに対応する記憶位置に結合するよう構成されてもよい。
【０２４３】
ステップ１８２０は更に、トランザクション識別子のセットに関してアトミック記憶リクエストの記憶操作を実施することを含んでいてもよい。アトミック記憶操作のうちの１つ以上は、論理アドレス空間１３２、ＶＡＳ５３２、又は同様のもの等の目標又は目的名前空間内のリソースの可用性を前提としてもよい。幾つかの実施形態において、例えば、アトミック記憶リクエストは、ＬＩＤの特定のセットを割り当てるためのリクエストを含んでいてもよい。ステップ１８２０は、従って、上で開示したように、特に、１つ以上の永続的ノート３６６の使用により、目標名前空間内の論理容量を一時的に確保することを含んでいてもよい。ステップ１８２０は更に、上で開示したように、対応するトランザクション識別子を割り当てること及び／又は確保することを含んでいてもよい。割当操作の不具合に応じて、アトミック記憶モジュール１０３５は、ａ）アトミック記憶リクエストを失敗させるか、ｂ）アトミック記憶操作の完了時に返却されてもよい目標名前空間内の目標ＬＩＤの異なるセットを割り当てるか、及び／又は確保してもよい。
【０２４４】
ステップ１８２０の記憶操作は更に、データをアトミック記憶操作の一部として特定するよう構成される永続的メタデータ１１４に関連して、データを記憶ログに追記することを含んでいてもよい。永続的メタデータは、ステップ１８１０のトランザクション識別子を備えていてもよい。代替として、又は加えて、永続的メタデータは、データが不完全なアトミック記憶操作の一部であることを示すよう構成されるアトミック記憶フラグ（又は他のデータ）を備えていてもよい。
【０２４５】
ステップ１８３０は、アトミック記憶リクエストを完了させることを含んでいてもよい。ステップ１８３０は、ステップ１８２０において実施されたアトミック記憶リクエストを閉じることを含んでいてもよい。アトミック記憶リクエストを閉じることは、ステップ１８２０の記憶操作のデータを目標識別子に結合するよう範囲移動操作を実行することを含んでいてもよく、それは、目標識別子をステップ１８２０の記憶操作において格納されたデータにマッピングするよう記憶メタデータ１３５を更新することを含んでいてもよい。範囲移動操作は更に、上で開示したように、目標名前空間内で１つ以上のトリム操作を実施することを含んでいてもよい。アトミック記憶リクエストを完了させることは更に、ａ）アトミック記憶リクエストのデータを目標識別子に結合し、及び／又は、ｂ）アトミック記憶リクエストが完了したことを示すよう構成される永続的メタデータを記憶媒体１４０上に格納することを含んでいてもよい。永続的メタデータは、単一の記憶操作において、記憶ログ（例えば、永続的ノート３６６及び／又は１０６６Ｂ内）に追記されてもよい。ステップ１８３０は更に、アトミック記憶リクエストの完了を通知することを含んでいてもよい。完了は、範囲移動操作を完了すること、及び／又は対応する永続的メタデータを格納することに応じて通知されてもよい。
【０２４６】
図１９は、アトミック記憶操作のための方法１９００の別の実施形態のフロー図である。ステップ１９１０は、記憶媒体１４０上の記憶ログにアクセスすることを含んでいてもよい。ステップ１９１０は、不具合状態後に記憶メタデータ１３５を再構築するよう再構築モジュール１０３７によって実行されてもよい。再構築モジュール１０３７は、記憶ログのログ順序に従って、記憶ログにアクセスするよう構成されてもよい。再構築モジュール１０３７は、記憶ログ内の最後の追記点を特定し、（例えば、ログの先頭から末尾まで）逆のログ順序で記憶ログをトラバースするよう構成されてもよい。
【０２４７】
ステップ１９２０は、不完全なアトミック記憶リクエストのデータを特定することを含んでいてもよい。ステップ１９２０は、トランザクション又はプロセス中識別子、及び／又は、トランザクション及び／又はプロセス中のアドレス空間１０３２の識別子に結合されるデータを特定することを含んでいてもよい。ステップ１９２０は、記憶ログ内にデータセグメントと共に格納される永続的メタデータ１１４にアクセスすることを含んでいてもよい。ステップ１９２０は更に、記憶ログ内の他の永続的メタデータが、特定されたデータ結合を修正することに失敗した（例えば、データセグメントを、論理アドレス空間１３２及び／又はＶＡＳ５３２等の異なるアドレス空間内の識別子と関連付けられていない）かを判断することを含んでいてもよい。
【０２４８】
ステップ１９３０は、特定されたデータセグメントを記憶メタデータ１３５から省略することを含んでいてもよく、これは、データを備える記憶位置を無効化することと、データセグメントに対応するエントリを前方マップ１６０、中間マッピング層１０７０、及び／又は同様のものから省略することとを含んでいてもよい。ステップ１９３０は、従って、部分的に完了されたアトミック記憶操作のデータが目標識別子及び／又は名前空間に影響を及ぼさないように、失敗したアトミック記憶操作をロールバックすることを含んでいてもよい。
【０２４９】
本開示を、様々な例示的な実施形態を参照して行ってきた。しかし、当業者は、変更及び修正が、本開示の適用範囲から逸脱することなく、例示的な実施形態に対して行われてもよいことを認識するであろう。例えば、種々の動作ステップ、並びに動作ステップを実行するための構成部品は、特定の用途によって、又は、システムの運用に関連する幾らかの費用関数を考慮して、代替方法で実装されてもよい（例えば、ステップのうちの１つ以上は、削除、修正、又は他のステップと組み合わされてもよい）。従って、本開示は、限定的な意味ではなく、例示的に見なされるべきであり、かかる全ての修正は、これらの適用範囲内に含まれることを意図している。同様に、利益、他の利点、及び問題に対する解決は、種々の実施形態に関して、上で説明してきた。しかし、利益、利点、問題に対する解決、及び、何れかの利益、利点、又は解決が生じるか、より明白となる何れかの要素も、重要、必要、又は必須の特徴又は要素として解釈されるべきではない。本明細書中で用いるように、用語「備える」、「備えている」、及びそれらの何れか他の変形形態も、要素の目録を備えるプロセス、方法、製品、又は装置が、それらの要素のみを含むのではなく、明示的に列挙されていないか、かかるプロセス、方法、製品、又は装置に固有の他の要素を含むことができるように、非排他的包含をカバーすることを意図している。また、本明細書中で用いるように、用語「結合される」、「結合する」、及びそれらの何れか他の変形形態も、物理的接続、電気的接続、磁気的接続、光学的接続、通信接続、機能的接続、及び／又は、何れか他の接続をカバーすることを意図している。
【０２５０】
加えて、当業者によって正しく理解されるように、本開示の原理は、記憶媒体内で具現化される機械読取可能なプログラムコード手段を有する機械読取可能な媒体上のコンピュータプログラム製品に反映されてもよい。何れかの有体物の、非一時的機械読取可能な媒体は、磁気記憶装置（ハードディスク、フロッピーディスク及び同様のもの）、光学的記憶装置（ＣＤ−ＲＯＭ、ＤＶＤ、ブルーレイディスク、及び同様のもの）、フラッシュメモリ、及び／又は同様のものを含んで利用されてもよい。これらのコンピュータプログラム命令は、コンピュータ又は他のプログラマブルデータ処理装置上で実行される命令が、指定した機能を実施する手段を作成するように、汎用コンピュータ、特殊用途コンピュータ、又は、機械を作製する他のプログラマブルデータ処理装置上にロードされてもよい。これらのコンピュータプログラム命令はまた、機械読取可能なメモリに格納された命令が、指定した機能を実施する実施手段を含む製造品を作成するように、特定の方法で機能するようコンピュータ又は他のプログラマブルデータ処理装置を向けることができる機械読取可能なメモリに格納されてもよい。コンピュータプログラム命令はまた、コンピュータ又は他のプログラマブル装置上で実行する命令が指定した機能を実施するステップを提供するように、コンピュータ又は他のプログラマブルデータ処理装置上にロードされて、一連の動作ステップがコンピュータ又は他のプログラマブル装置上で実行されて、コンピュータ実装プロセスを生じさせる。
【０２５１】
本開示の原理を種々の実施形態において示してきたが、特定の環境及び動作要件に対して特になされる構造、配置、比率、要素、材料、及び構成部品の多くの修正形態は、本開示の原理及び適用範囲から逸脱することなく用いられてもよい。これらの、及び他の変更形態又は修正形態は、本開示の適用範囲内に含まれることを意図している。
【図１Ａ】
2016534439.tif 000007
【図１Ｂ】
2016534439.tif 000008
【図１Ｃ】
2016534439.tif 000009
【図１Ｄ】
2016534439.tif 000010
【図１Ｅ】
2016534439.tif 000011
【図２】
2016534439.tif 000012
【図３Ａ】
2016534439.tif 000013
【図３Ｂ】
2016534439.tif 000014
【図３Ｃ】
2016534439.tif 000015
【図３Ｄ】
2016534439.tif 000016
【図３Ｅ】
2016534439.tif 000017
【図４Ａ】
2016534439.tif 000018
【図４Ｂ】
2016534439.tif 000019
【図４Ｃ】
2016534439.tif 000020
【図４Ｄ】
2016534439.tif 000021
【図４Ｅ】
2016534439.tif 000022
【図５Ａ】
2016534439.tif 000023
【図５Ｂ】
2016534439.tif 000024
【図６】
2016534439.tif 000025
【図７】
2016534439.tif 000026
【図８Ａ】
2016534439.tif 000027
【図８Ｂ】
2016534439.tif 000028
【図８Ｃ】
2016534439.tif 000029
【図８Ｄ】
2016534439.tif 000030
【図８Ｅ】
2016534439.tif 000031
【図９Ａ】
2016534439.tif 000032
【図９Ｂ】
2016534439.tif 000033
【図９Ｃ】
2016534439.tif 000034
【図９Ｄ】
2016534439.tif 000035
【図９Ｅ】
2016534439.tif 000036
【図９Ｆ】
2016534439.tif 000037
【図９Ｇ】
2016534439.tif 000038
【図１０Ａ】
2016534439.tif 000039
【図１０Ｂ】
2016534439.tif 000040
【図１１】
2016534439.tif 000041
【図１２】
2016534439.tif 000042
【図１３】
2016534439.tif 000043
【図１４】
2016534439.tif 000044
【図１５】
2016534439.tif 000045
【図１６】
2016534439.tif 000046
【図１７】
2016534439.tif 000047
【図１８】
2016534439.tif 000048
【図１９】
2016534439.tif 000049
【国際調査報告】
2016534439.tif 000050
2016534439.tif 000051
2016534439.tif 000052