(57)【要約】【課題】【解決手段】１つの実施形態は、記憶ユニット上で、ホストによって見られる論理アドレス（例えば、論理ブロック・アドレス、即ちＬＢＡ）の第１のセットと、記憶ユニットの物理アドレス（例えば、物理ブロック・アドレス、即ちＰＢＡ）の第１のセットおよび物理アドレスの第２のセットとの間のマッピング・データを維持することを含む方法を提供する。論理アドレスの第１のセットの第１の論理アドレス（例えばＬＢＡ）は、第１の論理アドレスについての現在のデータを維持する物理アドレスの第１のセットの第１の物理アドレス（例えばＰＢＡ）に対応する。第１の論理アドレスは、第１の論理アドレスについての前のデータを維持する物理アドレスの第２のセットの第２の物理アドレス（例えばＰＢＡ）に、さらに対応する。方法は、記憶ユニットにおいて、第１の論理アドレスに関係するマルチデバイス動作を実行するためにホストからコマンドを受信することをさらに含む。動作は、原子的に実行される。【選択図】図７
2021522577.tif 000002
【特許請求の範囲】
【請求項１】
方法であって、
記憶ユニット上で、ホストによって見られる論理アドレスの第１のセットと、前記記憶ユニットの物理アドレスの第１のセットおよび物理アドレスの第２のセットとの間のマッピング・データを維持することであって、前記論理アドレスの第１のセットの第１の論理アドレスが、前記第１の論理アドレスについての現在のデータを維持する前記物理アドレスの第１のセットの第１の物理アドレスに対応し、前記第１の論理アドレスが、前記第１の論理アドレスについての以前のデータを維持する前記物理アドレスの第２のセットの第２の物理アドレスにさらに対応する、前記維持することと、
前記記憶ユニットにおいて、前記第１の論理アドレスに関係するマルチデバイス動作を実行するために前記ホストからコマンドを受信することであって、前記動作が原子的に実行される、前記受信することと、
を含む、方法。
【請求項２】
前記動作が、更新書き込み動作である、請求項１に記載の方法。
【請求項３】
前記マッピング・データが、前記第１の論理アドレスについての１つまたは複数の以前のバージョン・コピーを識別および追跡し、前記マッピング・データが、前記第１の論理アドレスについての以前のバージョン・コピー毎に、前記以前のバージョン・コピーを維持する対応物理アドレスを含む、請求項２に記載の方法。
【請求項４】
前記マッピング・データが、前記更新書き込み動作についてのトランザクション・シーケンス番号を含む、請求項２に記載の方法。
【請求項５】
前記マッピング・データが、前記更新書き込み動作に関与する各記憶ユニットを示すホスト定義メタデータを含む、請求項２に記載の方法。
【請求項６】
マルチデバイス原子性を示す通知である、前記記憶ユニット上の更新書き込みが完了していることを確認する通知、グローバル書き込み完了フラグが設定されていることを確認する通知、および前記第１の論理アドレスに対応し、前記トランザクション・シーケンス番号を含む前記マッピング・データ内のエントリが前記マッピング・データから除去されることを確認する通知を、前記ホストが前記記憶ユニットから受信することに応答して、前記動作が完了する、請求項４に記載の方法。
【請求項７】
前記現在のデータが、現在のデータ・ブロックを含み、前記以前のデータが、以前のデータ・ブロックを含む、請求項１に記載の方法。
【請求項８】
前記現在のデータが、現在のパリティ・ブロックを含み、前記以前のデータが、以前のパリティ・ブロックを含む、請求項１に記載の方法。
【請求項９】
システムであって、
少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサによる実行時に、
記憶ユニット上で、ホストによって見られる論理アドレスの第１のセットと、前記記憶ユニットの物理アドレスの第１のセットおよび物理アドレスの第２のセットとの間のマッピング・データを維持することであって、前記論理アドレスの第１のセットの第１の論理アドレスが、前記第１の論理アドレスについての現在のデータを維持する前記物理アドレスの第１のセットの第１の物理アドレスに対応し、前記第１の論理アドレスが、前記第１の論理アドレスについての以前のデータを維持する前記物理アドレスの第２のセットの第２の物理アドレスにさらに対応する、前記維持することと、
前記記憶ユニットにおいて、前記第１の論理アドレスに関係するマルチデバイス動作を実行するために前記ホストからコマンドを受信することであって、前記動作が原子的に実行される、前記受信することと、
を含む動作を前記少なくとも１つのプロセッサに実行させる命令を記憶する、非一過性プロセッサ可読メモリ・デバイスと、
を備える、システム。
【請求項１０】
前記動作が、更新書き込み動作である、請求項９に記載のシステム。
【請求項１１】
前記マッピング・データが、前記第１の論理アドレスについての１つまたは複数の以前のバージョン・コピーを識別および追跡し、前記マッピング・データが、前記第１の論理アドレスについての以前のバージョン・コピー毎に、前記以前のバージョン・コピーを維持する対応物理アドレスを含む、請求項１０に記載のシステム。
【請求項１２】
前記マッピング・データが、前記更新書き込み動作についてのトランザクション・シーケンス番号を含む、請求項１０に記載のシステム。
【請求項１３】
前記マッピング・データが、前記更新書き込み動作に関与する各記憶ユニットを示すホスト定義メタデータを含む、請求項１０に記載のシステム。
【請求項１４】
マルチデバイス原子性を示す通知である、前記記憶ユニット上の更新書き込みが完了していることを確認する通知、グローバル書き込み完了フラグが設定されていることを確認する通知、および前記第１の論理アドレスに対応し、前記トランザクション・シーケンス番号を含む前記マッピング・データ内のエントリが前記マッピング・データから除去されることを確認する通知を、前記ホストが前記記憶ユニットから受信することに応答して、前記動作が完了する、請求項１２に記載のシステム。
【請求項１５】
前記現在のデータが、現在のデータ・ブロックを含み、前記以前のデータが、以前のデータ・ブロックを含む、請求項９に記載のシステム。
【請求項１６】
前記現在のデータが、現在のパリティ・ブロックを含み、前記以前のデータが、以前のパリティ・ブロックを含む、請求項９に記載のシステム。
【請求項１７】
具現化されたプログラム・コードを有するコンピュータ可読ハードウェア記憶媒体を含むコンピュータ・プログラム製品であって、前記プログラム・コードが、
記憶ユニット上で、ホストによって見られる論理アドレスの第１のセットと、前記記憶ユニットの物理アドレスの第１のセットおよび物理アドレスの第２のセットとの間のマッピング・データを維持することであって、前記論理アドレスの第１のセットの第１の論理アドレスが、前記第１の論理アドレスについての現在のデータを維持する前記物理アドレスの第１のセットの第１の物理アドレスに対応し、前記第１の論理アドレスが、前記第１の論理アドレスについての以前のデータを維持する前記物理アドレスの第２のセットの第２の物理アドレスにさらに対応する、前記維持することと、
前記記憶ユニットにおいて、前記第１の論理アドレスに関係するマルチデバイス動作を実行するために前記ホストからコマンドを受信することであって、前記動作が原子的に実行される、前記受信することと、
を含む方法を実施するようにコンピュータによって実行可能である、コンピュータ・プログラム製品。
【請求項１８】
前記動作が、更新書き込み動作である、請求項１７に記載のコンピュータ・プログラム製品。
【請求項１９】
前記マッピング・データが、前記第１の論理アドレスについての１つまたは複数の以前のバージョン・コピーを識別および追跡し、前記マッピング・データが、前記第１の論理アドレスについての以前のバージョン・コピー毎に、前記以前のバージョン・コピーを維持する対応物理アドレスを含む、請求項１８に記載のコンピュータ・プログラム製品。
【請求項２０】
前記マッピング・データが、前記更新書き込み動作についてのトランザクション・シーケンス番号を含む、請求項１８に記載のコンピュータ・プログラム製品。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、概して、記憶システムに関し、より詳細には、ホスト認識更新書き込みプロトコルを実施するシステムおよび方法に関する。
【背景技術】
【０００２】
ハードウェアベース記憶システムは、典型的には、意図的でない電力損失に対するデータ保護のために別個の不揮発性記憶装置を提供する。この別個の不揮発性記憶装置についての典型的な使用は、ログ先行書き込みの実施であり、それは、欠落した更新が、消失訂正符号に関連する原子的(atomic)リード・モディファイ・ライト動作に適用され得ることを保証する。比較すると、データ保護のために消失訂正符号を実施するソフトウェア定義記憶システムは、不揮発性記憶装置の存在を想定できず、したがって、追加の記憶デバイスを用いてこれらのログ先行書き込みを実施させる。それはシステム・レベルでのＩ／Ｏ負荷を増大させ、スループットの減少および応答時間の増加につながる。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
本発明は、上記課題の少なくとも１つの課題を解決しようとする。
【課題を解決するための手段】
【０００４】
１つの実施形態は、記憶ユニット上で、ホストによって見られる論理アドレス（例えば、論理ブロック・アドレス、即ちＬＢＡ）の第１のセットと、記憶装置の物理アドレス（例えば、物理ブロック・アドレス、即ちＰＢＡ）の第１のセットおよび物理アドレスの第２のセットとの間のマッピング・データを維持することを含む方法を提供する。論理アドレスの第１のセットの第１の論理アドレス（例えばＬＢＡ）が、第１の論理アドレスについての現在のデータを維持する物理アドレスの第１のセットの第１の物理アドレス（例えばＰＢＡ）に対応する。第１の論理アドレスは、第１の論理アドレスについての以前のデータを維持する物理アドレスの第２のセットの第２の物理アドレス（例えばＰＢＡ）に、さらに対応する。方法は、記憶ユニットにおいて、第１の論理アドレスに関係するマルチデバイス動作を実行するためにホストからコマンドを受信することをさらに含む。動作は、原子的に（atomically）実行される。
【０００５】
発明のこれらのおよび他の態様、特徴、および利点は、描かれた図面および本明細書の詳細な説明を参照して理解され、添付の特許請求の範囲において詳細に指示される様々な要素および組み合わせによって実現される。前述の概略的な説明、ならびに以下の図面の簡単な説明および発明の詳細な説明の両方が、発明の好適な実施形態の例示および説明であり、特許請求される発明を限定するものではないと理解されるべきである。
【０００６】
発明と見なされる主題は、明細書の末尾における特許請求の範囲において詳細に指示され、明確に特許請求される。発明の前述のおよび他の目的、特徴、および利点は、添付図面と併せて行われる以下の詳細な説明から明らかである。
【図面の簡単な説明】
【０００７】
【図１】時間ｔ０における初期状態の従来のソフトウェア定義消失訂正符号記憶システムを示す。
【図２】時間ｔ１における記憶システムを示す。
【図３】時間ｔ２における記憶システムを示す。
【図４】時間ｔ３における記憶システムを示す。
【図５】時間ｔ４における記憶システムを示す。
【図６】時間ｔ５における記憶システムを示す。
【図７】１つまたは複数の実施形態における、記憶装置のための例としてのフレームワークを示す。
【図８】１つまたは複数の実施形態における、記憶装置のための別の例としてのフレームワークを示す。
【図９】１つまたは複数の実施形態における、記憶装置のためのさらに別の例としてのフレームワークを示す。
【図１０】１つまたは複数の実施形態における、単一のパリティ消失訂正符号を保全するためのホスト認識更新プロトコルを実施する、例としてのプロセスを示すフローチャートである。
【図１１】本発明の実施形態を実施するのに有用な情報処理システムを示すハイレベル・ブロック図である。
【発明を実施するための形態】
【０００８】
詳細な説明は、例として図面を参照して、利点および特徴と共に発明の好適な実施形態を説明する。
【０００９】
本発明は、概して、記憶システムに関し、より詳細には、ホスト認識更新書き込みプロトコルを実施するシステムおよび方法に関する。１つの実施形態は、記憶ユニット上で、ホストによって見られる論理アドレス（例えば、論理ブロック・アドレス、即ちＬＢＡ）の第１のセットと、記憶ユニットの物理アドレス（例えば、物理ブロック・アドレス、即ちＰＢＡ）の第１のセットおよび物理アドレスの第２のセットとの間のマッピング・データを維持することを含む方法を提供する。論理アドレスの第１のセットの第１の論理アドレス（例えばＬＢＡ）は、第１の論理アドレスについての現在のデータを維持する物理アドレスの第１のセットの第１の物理アドレス（例えばＰＢＡ）に対応する。第１の論理アドレスは、第１の論理アドレスについての以前のデータを維持する物理アドレスの第２のセットの第２の物理アドレス（例えばＰＢＡ）に、さらに対応する。方法は、記憶ユニットにおいて、第１の論理アドレスに関係するマルチデバイス動作を実行するためにホストからコマンドを受信することをさらに含む。動作は、原子的に実行される。
【００１０】
説明のため、本明細書で使用される「消失訂正符号記憶システム」という用語は、概して、独立ディスクの冗長アレイ（ＲＡＩＤ）の任意のレベルを実施する記憶システムなどであるがこれに限定されない、データ復元性のためのアルゴリズムの汎用クラスを実施する記憶システムを指す。
【００１１】
データ保護のための消失訂正符号を実施する従来のソフトウェア定義記憶システムは、不揮発性記憶装置の存在を想定できない。図１〜６は、従来のソフトウェア定義消失訂正符号記憶システム１０上において更新書き込み動作を実行するための例としてのステップ・シーケンスを示す。
【００１２】
図１は、時間ｔ０における初期状態の記憶システム１０を示す。記憶システム１０は、データ保護のための３＋Ｐ消失訂正符号を実施する。記憶システム１０は、データ（例えば、データ・ブロックおよびパリティ・ブロック）を維持するための１つまたは複数の不揮発性記憶ユニット１２を含む。記憶システム１０は、１つまたは複数の記憶ユニット１２上の入力／出力（Ｉ／Ｏ）動作中にデータを保持するための揮発性バッファ１１をさらに含む。図１に示されるように、初期状態において、１つまたは複数の記憶ユニット１２は、データ・ブロックＤ０、データ・ブロックＤ１、データ・ブロックＤ２、および以下に提供されるパリティ方程式（１）に従って計算されるパリティ・ブロックＤＰを維持する。
ＤＰ＝Ｄ０＋Ｄ１＋Ｄ２  （１）
＋は、排他的ＯＲ（ＸＯＲ）演算を意味する。
【００１３】
パリティ・ストライプは、データ・ブロックのセット、およびデータ・ブロックのセットに対応する１つまたは複数のパリティ・ブロックを含む。例えば、データ・ブロックＤ０〜Ｄ２およびパリティ・ブロックＤＰは、共にパリティ・ストライプを形成する。
【００１４】
図２は、時間ｔ１における記憶システム１０を示す。更新書き込み動作は、外部ホスト・システムによって発行され、新たなデータ・ブロックＤ０’で１つまたは複数の記憶ユニット１２内のデータ・ブロックＤ０の更新書き込みを要求する、マルチデバイス動作であると仮定する。時間ｔ１において、外部ホスト・システムから更新書き込み動作を受信することに応答して、記憶システム１０は、１つまたは複数の記憶ユニット１２から揮発性バッファ１１内にデータ・ブロックＤ０を読み出す。
【００１５】
図３は、時間ｔ２における記憶システム１０を示す。更新書き込み動作の完了を成功させるためには、パリティ・ブロックＤＰは、また、新たなパリティ・ブロックＤＰ’に更新されなければならない。時間ｔ２において、記憶システム１０は、１つまたは複数の記憶ユニット１２から揮発性バッファ１１内にパリティ・ブロックＤＰを読み出す。
【００１６】
図４は、時間ｔ３における記憶システム１０を示す。時間ｔ３において、記憶システム１０は、以下に提供されるパリティ方程式（２）に従って新たなパリティ・ブロックＤＰ’を計算する。
ＤＰ’＋Ｄ０＋Ｄ０’＋ＤＰ  （２）
【００１７】
図５は、時間ｔ４における記憶システム１０を示す。時間ｔ４において、記憶システム１０は、１つまたは複数の記憶ユニット１２内に新たなデータ・ブロックＤ０’を書き込む。
【００１８】
図６は、時間ｔ５における記憶システム１０を示す。時間ｔ５において、記憶システム１０は、１つまたは複数の記憶ユニット１２０内に新たなパリティ・ブロックＤＰ’を書き込んで、更新書き込み動作を完了する。
【００１９】
データ・ブロックＤ０およびパリティ・ストライプＤＰに関係するステップは、非同期であり、したがって図１〜図６に示されるステップのシーケンスは、１つの可能性のある順序である。
【００２０】
意図的でない電力損失事象が時間ｔ４と時間ｔ５との間に発生する場合、データ完全性の危急が結果として生じる。特に、パリティ・ブロックＤＰは、危険にさらされる場合があり、記憶システム１０が回復できない不確定パリティ状態をもたらす。パリティ・ブロックＤＰについての不確定パリティ状態は、以下に提供される式（３）に従って表され得る。
ＤＰ！＝Ｄ０’＋Ｄ１＋Ｄ２  （３）
【００２１】
外部ホスト・システムが、更新書き込み動作を再試行した場合、記憶システム１０が以下に提供されるパリティ方程式（４）に従って新規パリティ・ブロックＤＰ’を計算するように、記憶システム１０は、無効な新規パリティ・ブロックＤＰ’を提供する。
ＤＰ’＝Ｄ０’＋Ｄ０’＋ＤＰ  （４）
パリティ方程式（４）は、ＸＯＲ演算の特性に起因して、以下に提供されるパリティ方程式（５）に簡略化される。
ＤＰ’＝ＤＰ  （５）
【００２２】
時間ｔ４およびｔ５において実行されるステップが、逆にされた場合、類似のデータ完全性危急が、電力損失の場合に生じる。さらに、パリティ・ブロックが、より複雑なパリティ方程式を用いて表される場合、データ完全性危急の可能性は、より大きくなる。したがって、更新書き込み動作を堅牢にする必要性、およびこのマルチデバイス動作が原子的である必要性がある。
【００２３】
ソフトウェア定義システムは、原子性、および耐久性に関連するその他の特性のような、電力損失などの事象から回復するのに必要な特性を表すことが望ましい。例えば、更新書き込み動作中に意図的でない電力損失が発生する場合、ソフトウェア定義記憶システムは、記憶の整合状態を回復し、正しい消失訂正符号を確保することが可能でなければならない。
【００２４】
不揮発性バッファを有しない従来のソフトウェア定義記憶システムでは、データ更新について原子性を実施するために、ログが使用される。ログは、典型的には、記憶システムの追加の不揮発性記憶ユニットに記憶される。電力損失の場合に生じるデータ完全性危急を回避するために、複製がログのデータ保護のために実施され得る。
【００２５】
データ更新についての原子性を実施するための１つの従来の方法は、パリティ・ブロックを更新するときにトランザクション・ログ先行書き込みを用いることに関係する、ログ先行書き込み（即ち、シャドウ・ログ）である。ログ先行書き込みは、高いＩ／Ｏ拡大の不利益を負う。
【００２６】
例えば、ｄ１’、ｄ２’、．．．、ｄＮ’が、原子的更新書き込みを必要とする（即ち、不揮発性記憶ユニットにわたって原子的に更新書き込みを行う）新規データ・ブロックについてのＮ個の論理アドレス（例えば、論理ブロック・アドレス、即ちＬＢＡ）のセットを意味するとする。ｐ１’、ｐ２’、．．．、ｐＭ’が、また原子的更新書き込みを必要とするＮ個のＬＢＡに対応する新規パリティ・ブロックについてのＭ個のＬＢＡのセットを意味するとする。ｄ１、ｄ２、．．．、ｄＮおよびｐ１、ｐ２、．．．、ｐＭが、それぞれＮ個のＬＢＡおよびＭ個のＬＢＡの以前のバージョンを意味するとする。
【００２７】
パリティ・ブロックを更新書き込みするためには、Ｍ個のＬＢＡがパリティ方程式を用いてＮ個のＬＢＡから計算され得るように、不揮発性記憶ユニットからＮ個のＬＢＡおよびＭ個のＬＢＡ（即ち、ｄ１、ｄ２、．．．、ｄＮおよびｐ１、ｐ２、．．．、ｐＭ）の以前のバージョンを読み出すことに関係する読み出し動作が必要とされる。これらの読み出し動作は、Ｎ＋Ｍ個のブロック読み出しを必要とする。
【００２８】
更新書き込みについての原子性を達成するために、新規データ・ブロックおよび新規パリティ・ブロックを不揮発性記憶ユニットに書き込む前に、マルチブロック・ログ・レコードが書き込まれる。ログ・レコードは、新規データ・ブロックおよび新規パリティ・ブロック（即ち、ｄ２’、．．．、ｄＮ’およびｐ１’、ｐ２’、．．．、ｐＭ’）を含む。ログ・レコードは、新規データおよびパリティ値をログ・レコード自体の一部としてインラインで含んでもよく、または実施管理されたシャドウ・ブロック領域から割り当てられるブロックへのポインタを含んでもよい。いずれにしても、ログ・レコードまたはシャドウ・ブロック領域あるいはその両方へのＮ＋Ｍ個のブロック書き込みが必要とされる。さらに、ログ・レコードのＣ個のミラー・コピーが、ログ・レコード自体をデータ損失から保護するために必要とされる。Ｃは、記憶システムによって実施される消失訂正符号の障害トレランスに合致するように選択される値である。その結果、ログ先行書き込みは、Ｃ（Ｎ＋Ｍ）個の書き込みの書き込み増幅係数をもたらす。
【００２９】
新規データ・ブロックおよびパリティ・ブロックがログ・レコードに安全に書き込まれるときにのみ、新規データ・ブロックおよびパリティ・ブロックが、不揮発性記憶ユニットに書き込まれ得る。したがって、ログ先行書き込みを用いる原子的更新書き込みについての総Ｉ／Ｏ増幅係数は、Ｎ＋Ｍ個のブロック読み出しおよびＣ（Ｎ＋Ｍ）個の書き込みの合計である。
【００３０】
データ・ブロックおよびパリティ・ブロックは同期されないため、パリティ・ブロックが危険にさらされる場合がある（即ち、不確定パリティ状態）。
【００３１】
１つの実施形態は、基礎となる記憶装置がコピー・オン・ライト（ＣＯＷ）方法論を使用するときに、原子性を通してデータ完全性を維持するためのトランザクション・ログ先行書き込みと併せて、シャドウ・ログを用いて記憶システム上の書き込み減少のための（即ち、書き込みＩ／Ｏ負荷を減少させる）システムおよび方法を提供する。そのようなデータ保護がないと、意図的でない電力損失がある場合にデータ完全性危急が発生し得る。１つの実施形態は、フラッシュ記憶装置およびＺＦＳなどのＣＯＷファイル・システムに適用する。１つの実施形態は、シャドウ・コピーについての復元性およびトランザクション・ログ先行書き込みを提供するために典型的に必要とされる、追加の書き込み動作を回避する。
【００３２】
フラッシュなどのＣＯＷ記憶ユニットは、外部ホスト・システムによって参照される論理アドレス（例えばＬＢＡ）のセットを記憶ユニットの物理アドレス（例えば、物理ブロック・アドレス、即ちＰＢＡ）のセットにマッピングするためのメタデータ情報（「マッピング・データ」）を維持する内部変換レイヤを有する。フラッシュ記憶装置は、概して書き込み動作についてその場更新をサポートしないため、マッピング・データを内部的に維持することは、記憶ユニットが全削除ブロックのガベージ・コレクションをサポートすることを可能にする。
【００３３】
図７は、１つまたは複数の実施形態における記憶装置のための例としてのフレームワーク５０を示す。例としてのフレームワーク５０は、ソフトウェア定義記憶システム１００、および記憶システム１００に接続される外部ホスト・システム６０を含む。
【００３４】
１つの実施形態において、記憶システム１００は、データ（例えば、データ・ブロックおよびパリティ・ブロック）を維持するための１つまたは複数の不揮発性記憶ユニット１２０（例えば、ＣＯＷ記憶ユニット）を含む記憶アレイである。記憶システム１００は、コマンド（例えば、読み出しコマンド、書き込みコマンドなど）を受信するなど、ホスト・システム６０とデータを交換するように構成されるＩ／Ｏユニット１３０をさらに含む。記憶システム１００は、受信したコマンドに応答して１つまたは複数の記憶ユニット１２０に対して実行されるＩ／Ｏ動作中にデータを保持するための揮発性バッファ１１０をさらに含む。１つの実施形態において、記憶システム１００は、データ保護のための消失訂正符号を実施する（即ち、消失訂正符号化記憶システム）。
【００３５】
１つの実施形態において、ホスト・システム６０は、１つまたは複数の記憶ユニット１２０の境界または記憶システム１００によって実施される消失訂正符号の詳細の知識なしで、ＬＢＡの仮想アドレス空間として１つまたは複数の記憶ユニット１２０上に記憶されたデータを見る。ホスト・システム６０は、コマンド（例えば、読み出しコマンド、書き込みコマンドなど）を発行するなど、記憶システム１００とデータを交換するように構成されるＩ／Ｏユニット６１を含む。ホスト・システム６０は、書き込みコマンドが消失訂正符号を保全するための追加更新書き込み動作を伴い得ることを認識することなく、仮想アドレス空間にコマンドを発行し得る。
【００３６】
１つの実施形態において、記憶システム１００は、ホスト・システム６０によって参照される仮想アドレス空間のＬＢＡについて、ＬＢＡに対応するデータ・ブロックおよびパリティ・ブロックを含む１つまたは複数の記憶ユニット１２０の１つまたは複数の部分を識別するように構成されるコントローラ／仮想化ユニット１４０をさらに含む。コントローラ／仮想化ユニット１４０は、仮想化アドレス空間の論理アドレスを１つまたは複数の記憶ユニット１２０の物理アドレスにマッピングする（例えば、仮想アドレス空間のＬＢＡを対応するデータ・ブロックおよびパリティ・ブロックを含む１つまたは複数の記憶ユニット１２０のＰＢＡにマッピングする）。別の実施形態では、コントローラ／仮想化ユニット１４０は、その代わりに（図８に示されるように）ホスト・システム６０上で実施される。さらに別の実施形態では、コントローラ／仮想化ユニット１４０は、（図９に示されるように）コントローラ・システム８０などの別の外部システム上で実施される。
【００３７】
従来のソフトウェア定義記憶システムと比較すると、フレームワーク５０は、必要とされる追加の書き込み動作の数の減少を達成するために、記憶システム１００の挙動に対する修正およびホスト・システム６０とのＩ／Ｏインターフェースに対する修正をサポートする。具体的には、フレームワーク５０は、少なくとも１つの記憶ユニット１２０の内部変換レイヤ１２１内に維持されるマッピング・メタデータを拡張する。拡張されたマッピング・メタデータは、１つまたは複数のＬＢＡ（即ち、データ・ブロックまたはパリティ・ブロックについてのＬＢＡ）の１つまたは複数の以前のバージョン・コピーを識別および追跡する、以前のバージョンのマッピング情報１２５を含むが、これに限定されない。フレームワーク５０は、以前のバージョンのマッピング情報の処理および管理を容易にするためにコントローラ／仮想化ユニット１４０および１つまたは複数の記憶ユニット１２０によって実施される１つまたは複数の新規Ｉ／Ｏインターフェースをさらに提供する。
【００３８】
記憶ユニット１２０の内部変換レイヤ１２１は、以下の機能、（１）ＬＢＡに関連付けられた記憶ユニット１２０のＰＢＡを判断するための機能、および（２）書き込み動作のための記憶ユニット１２０の空きＰＢＡを取得するための機能、を実施するように構成される。
【００３９】
フレームワーク５０は、機能の大部分が記憶装置内で実行されるホスト認識モデル、および新規機能を提供するために必要な情報がホスト・レベルにおいて利用可能かつ実行可能であるホスト管理手法の両方をサポートする。
【００４０】
１つの実施形態では、従来のソフトウェア定義記憶システムとは異なり、ＬＢＡは、複数のＰＢＡに対応し得る。例えば、ＬＢＡは、データ・ブロックを維持する第１のＰＢＡ、およびデータ・ブロックの以前のバージョン・コピーを維持する第２のＰＢＡに対応し得る。本明細書において後で詳細に説明される以前のバージョンのマッピング情報の実施形態は、１つまたは複数のＬＢＡの単一の以前のバージョン・コピーを識別および追跡するが、以前のバージョンのマッピング情報は、１つまたは複数のＬＢＡの複数の以前のバージョン・コピーを識別および追跡し得る。
【００４１】
以前のバージョン・マッピング情報は、ハッシュ・テーブル、キーバリュー・ストア、データベースなどであるがこれらに限定されない複数の方式で、少なくとも１つの記憶ユニット１２０上に記憶され得る。以前のバージョン・コピーの総数は、利用可能なＬＢＡの総数よりも著しく少なくなることが予期されるため、以前のバージョン・コピーは、効率的な記憶のために、例えば疎なデータ構造を用いて、１つの実施形態において別々に記憶されてもよく、それによって、各ＬＢＡの以前のバージョン・コピーのための以前のバージョンのマッピング情報内のエントリを有する要件を除去する。
【００４２】
１つの実施形態において、記憶ユニット１２０上の以前のバージョンのマッピング情報の管理は、ＬＢＡについてのデータの現在のバージョン・コピー（即ち、現在のデータ・ブロックまたは現在のパリティ・ブロック）を維持する第１のＰＢＡへの第１のポインタ、およびＬＢＡについてのデータの以前のバージョン・コピー（即ち、以前のデータ・ブロックまたは以前のパリティ・ブロック）を維持する第２のＰＢＡへの第２のポインタを、ＬＢＡについて含むことによって実施される。本明細書において後で詳細に説明されるように、少なくとも１つの記憶ユニット１２０上で以前のバージョンのマッピング情報を維持することが、電力損失事象後のデータ回復のために少なくとも１つの記憶ユニット１２０の内部動作の状態を追跡することを容易にする。
【００４３】
以下の表１は、ＬＢＡについての例としてのエントリを提供する。エントリは、１つまたは複数の実施形態における、記憶ユニット１２０上の以前のバージョンのマッピング情報に含まれる。
【００４４】
【表１】
2021522577.tif 000003
【００４５】
上で提供される表１に示されるように、エントリは、複数のフィールドを含む。複数のフィールドは、（１）エントリの内部管理における使用のためのエントリ用ローカル識別子（例えば、記憶アレイ内のアドレス）を含む任意のＩＤフィールド、（２）ホスト・システム６０によって参照される／見られる仮想アドレス空間のＬＢＡを含むＬＢＡフィールド、（３）ＬＢＡについてのデータの現在のバージョン・コピーを含む記憶ユニット１２０のＰＢＡを含む現在のＰＢＡフィールド、（４）ＬＢＡについてのデータの以前のバージョン・コピーを含む記憶ユニット１２０の異なるＰＢＡを含む以前のＰＢＡフィールド、（５）書き込み動作が完了したかどうかを示すｇｗｃフラグを含むグローバル書き込み完了（ｇｗｃ）フィールド、（６）記憶ユニット１２０上の以前のバージョンのマッピング情報に含まれる全てのエントリにわたって一意であるｔｓｎを含むトランザクション・シーケンス番号（ｔｓｎ）フィールド、および（７）ｈｍｄを含むホスト定義メタデータ（ｈｍｄ）・フィールド、のうちの１つまたは複数を含むが、これらに限定されない。
【００４６】
エントリが空の場合、ＬＢＡフィールドは、エントリを空としてマークする代わりにＮＵＬＬ値を維持してもよい。ＬＢＡについてのデータの現在のバージョン・コピーが割り当てられない場合、現在のＰＢＡフィールドは、その代わりにＮＵＬＬ値を維持してもよい。ＬＢＡについてのデータの以前のバージョン・コピーが割り当てられない場合、以前のＰＢＡフィールドは、その代わりにＮＵＬＬ値を維持してもよい。
【００４７】
説明のため、「データ・ユニット」という用語は、概して、１つまたは複数のデータ・ブロックを含む１つまたは複数のＰＢＡを含む記憶ユニット１２０の一部を指すものとする。「パリティ・ユニット」という用語は、概して、１つまたは複数のパリティ・ブロックを含む１つまたは複数のＰＢＡを含む記憶ユニット１２０の一部を指すものとする。「影響を受けるデータ・ユニット」という用語は、概して、未処理コマンドの完了を成功させるために更新書き込みを必要とするデータ・ブロックを含むデータ・ユニットを指すものとする。「影響を受けるパリティ・ユニット」という用語は、概して、未処理コマンドの完了を成功させるために更新書き込みを必要とするパリティ・ブロックを含むパリティ・ユニットを指すものとする。
【００４８】
１つの実施形態において、ｈｍｄは、未処理の更新書き込み動作に関与する１つまたは複数のデータ・ブロックについての１つまたは複数のＬＢＡ、および１つまたは複数のデータ・ブロックを含む１つまたは複数の影響を受けるデータ・ユニットを識別する。別の実施形態において、ｈｍｄは、書き込み動作に関する他のホスト固有情報を記憶するために使用され得る。
【００４９】
１つの実施形態において、未処理の更新書き込み動作の一部でないデータについてのＬＢＡは、記憶ユニット１２０上の以前のバージョンのマッピング情報内にエントリを有する必要はない。
【００５０】
少なくとも１つの記憶ユニット１２０上で以前のバージョンのマッピング情報を維持することは、記憶システム１００への原子的書き込み動作を保証する。
【００５１】
１つの実施形態において、記憶システム１００は、単一のパリティ消失訂正符号を実施する。別の実施形態において、記憶システム１００は、より複雑なパリティ方程式／構成を用いて消失訂正符号を実施する。
【００５２】
図８は、１つまたは複数の実施形態における、記憶装置のための別の例としてのフレームワーク５１を示す。フレームワーク５１において、コントローラ／仮想化ユニット１４０および揮発性バッファ１１０は、代わりにホスト・システム６０上で実施される。
【００５３】
上述したフレームワーク５０と同様に、フレームワーク５１は、必要とされる追加の書き込み動作の数の減少を達成するために、記憶システム１００の挙動に対する修正およびホスト・システム６０とのＩ／Ｏインターフェースに対する修正をサポートする。フレームワーク５１は、以前のバージョンのマッピング情報の処理および管理を容易にするために、コントローラ／仮想化ユニット１４０および１つまたは複数の記憶ユニット１２０によってそれぞれＩ／Ｏユニット６１および１３０を介して実施される１つまたは複数の新たなＩ／Ｏインターフェースを提供する。フレームワーク５１は、機能の大部分が記憶装置内で実行されるホスト認識モデル、および新規機能を提供するために必要な情報がホスト・レベルにおいて利用可能かつ実行可能であるホスト管理手法の両方をサポートする。
【００５４】
図９は、１つまたは複数の実施形態における、記憶装置のための別の例としてのフレームワーク５２を示す。フレームワーク５２において、コントローラ／仮想化ユニット１４０および揮発性バッファ１１０は、代わりにコントローラ・システム８０などの別の外部システム上で実施される。コントローラ・システム８０は、ホスト・システム６０とデータを交換するように構成される第１のＩ／Ｏユニット８１と、記憶システム１００とデータを交換するように構成される第２のＩ／Ｏユニット８２と、をさらに含む。
【００５５】
上述したフレームワーク５０と同様に、フレームワーク５２は、必要とされる追加の書き込み動作の数の減少を達成するために、記憶システム１００の挙動に対する修正およびホスト・システム６０とのＩ／Ｏインターフェースに対する修正をサポートする。フレームワーク５２は、以前のバージョンのマッピング情報の処理および管理を容易にするために、コントローラ／仮想化ユニット１４０および１つまたは複数の記憶ユニット１２０によってそれぞれＩ／Ｏユニット８２および１３０を介して実施される１つまたは複数の新たなＩ／Ｏインターフェースを提供する。フレームワーク５２は、機能の大部分が記憶装置内で実行されるホスト認識モデル、および新規機能を提供するために必要な情報がホスト・レベルにおいて利用可能かつ実行可能であるホスト管理手法の両方をサポートする。
【００５６】
図１０は、１つまたは複数の実施形態における、単一のパリティ消失訂正符号を保全するためのホスト認識更新プロトコルを実施する、例としてのプロセス４００を示すフローチャートである。プロセス・ブロック４０１は、ホスト・システム６０が仮想アドレス空間に対して書き込みコマンドを発行することを含む。例えば、ホスト・システム６０が、新規データ・ブロックｄ０’を仮想アドレス空間のＬＢＡ  ｂへ書き込むための書き込みコマンド（例えば、ｗｒｉｔｅ（ｂ，ｄ０’））を発行すると仮定する。１つの実施形態において、書き込みコマンドは、連続したＬＢＡの範囲を参照し得る。
【００５７】
プロセス・ブロック４０２は、コントローラ／仮想化ユニット１４０が、書き込みコマンドの完了を成功させるために更新書き込みを必要とする各影響を受けるデータ・ユニットおよび各影響を受けるパリティ・ユニット、ならびに各影響を受けるデータ・ユニットおよび各影響を受けるパリティ・ユニットに対応する各ＬＢＡを識別することを含む。プロセス・ブロック４０２において、コントローラ／仮想化ユニット１４０は、更新書き込み動作が書き込みコマンドの完了を成功させるために必要とされることを識別する。
【００５８】
例えば、コントローラ／仮想化ユニット１４０は、影響を受けるデータ・ユニットが対応するＬＢＡ  ｎを有するデータ・ユニット０であり、影響を受けるパリティ・ユニットが対応するＬＢＡ  ｍを有するパリティ・ユニット３であることを識別すると仮定する。コントローラ／仮想化ユニット１４０は、現在のデータ・ブロックｄ０（即ち、現在のバージョン・コピー）を取得するために、対応するＬＢＡ  ｎを有するデータ・ユニット０に対して読み出しコマンド（例えば、ｒｅａｄ（０，ｎ））を発行し、現在のパリティ・ブロックｐ０（即ち、現在のバージョン・コピー）を取得するために、対応するＬＢＡ  ｍを有するパリティ・ユニット３に対して別の読み出しコマンド（例えば、ｒｅａｄ（３，ｍ））を発行する。コントローラ／仮想化ユニット１４０は、次いで、新規パリティ・ブロックｐ０’を計算し、ｐ０’＝ｄ０＋ｄ０’＋ｐ０である。
【００５９】
プロセス・ブロック４０３は、コントローラ／仮想化ユニット１４０が現在のトランザクション・シーケンス番号ｔｎをインクリメントすることを含む。トランザクション・シーケンス番号ｔｎは、未処理の更新書き込み動作に対応する。プロセス・ブロック４０３は、コントローラ／仮想化ユニット１４０がトランザクション・レコードｔｒを生成することをさらに含む。トランザクション・レコードｔｒは、各影響を受けるデータ・ユニットのリスト、各影響を受けるデータ・ユニットに対応する各ＬＢＡ、および任意選択でタイムスタンプを含む。例えば、コントローラ／仮想化ユニット１４０は、データ・ユニット０、ＬＢＡ  ｎ、およびタイムスタンプｔｉｍｅを含むトランザクション・レコードｔｒを生成すると仮定する（例えば、ｃｒｅａｔｅｔｒ（０，ｎ，ｔｉｍｅ））。
【００６０】
プロセス・ブロック４０４は、コントローラ／仮想化ユニット１４０が、書き込みコマンドの完了を成功させるために更新書き込みを必要とする各影響を受けるデータ・ユニットおよび各影響を受けるパリティ・ユニット上で更新書き込み動作を開始することを含む。例えば、コントローラ／仮想化ユニット１４０は、新規データ・ブロックｄ０’を書き込むために対応するＬＢＡ  ｎを有するデータ・ユニット０（例えば、ｗｒｉｔｅ（０，ｎ，ｄ０’，ｕｐｄａｔｅ，ｔｎ，ｔｒ））、および新規パリティ・ブロックｐ０’を書き込むために対応するＬＢＡ  ｍを有するパリティ・ユニット３（例えば、ｗｒｉｔｅ（３，ｍ，ｐ０’，ｕｐｄａｔｅ，ｔｎ，ｔｒ））のそれぞれの上で更新書き込み動作を開始すると仮定する。コントローラ／仮想化ユニット１４０は、各影響を受けるデータ・ユニットおよび各影響を受けるパリティ・ユニットに対して書き込みコマンドを並列で発行する。発行された各書き込みコマンドは、以下のパラメータ、書き込みコマンドが更新書き込み動作であることを示すように設定される更新書き込みフラグｕｐｄａｔｅ、トランザクション・シーケンス番号ｔｎ、およびトランザクション・レコードｔｒを含む。
【００６１】
コントローラ／仮想化ユニット１４０が各影響を受けるデータ・ユニットおよび各影響を受けるパリティ・ユニットに対して書き込みコマンドを発行した後、コントローラ／仮想化ユニット１４０は、各影響を受けるデータ・ユニットおよび各影響を受けるパリティ・ユニットからの書き込み完了通知を待機するためにプロセス・ブロック４０５に進む。コントローラ／仮想化ユニット１４０が、プロセス・ブロック４０５において待機する間、データ・ユニット０は、プロセス・ブロック４２１〜４２５のステップを実行し、パリティ・ユニット３は、プロセス・ブロック４４１〜４４５のステップを実行する。プロセス・ブロック４２１〜４２５のステップは、プロセス・ブロック４４１〜４４５のステップと非同期である（即ち、プロセス・ブロック４２５および４４５の完了は、任意の順序で発生し得る）。
【００６２】
プロセス・ブロック４２１は、データ・ユニット０が、コントローラ／仮想化ユニット１４０から書き込みコマンドを受信することに応答して、ＬＢＡ  ｎに対応するデータ・ユニット０のＰＢＡを判断すること（例えば、ｇｅｔＰＢＡ（ｎ））を含む。例えば、データ・ユニット０が、その内部変換レイヤを介して、ＰＢＡ  ｊがＬＢＡ  ｎに対応すると判断すると仮定する。プロセス・ブロック４２１は、データ・ユニット０が、ＬＢＡ  ｎについてのエントリｖｍｅｄを取得するために（例えば、ｖｍａｐ＿ｆｉｎｄ（ｎ））、（その内部変換レイヤ内に維持される）その以前のバージョンのマッピング情報のルックアップ検索を実行することをさらに含む。エントリｖｍｅｄは、ＬＢＡ  ｎについての以前のバージョン・コピーを識別し追跡する。ルックアップ検索が成功すると、エントリｖｍｅｄが返される。プロセス・ブロック４２１は、ＰＢＡ  ｊおよびエントリｖｍｅｄの状態が、更新書き込みについて有効であるかどうかを判断すること（例えば、ｕｐｄｗ＿ｃｈｅｃｋ（ｊ，ｖｍｅｄ））をさらに含む。ＰＢＡ  ｊの状態も、エントリｖｍｅｄの状態も、更新書き込みについて有効でない場合、エラー回復プロセスが呼び出され得る。ＰＢＡ  ｊおよびエントリｖｍｅｄの状態が、更新書き込みについて有効である場合、データ・ユニット０は、プロセス・ブロック４２２に進む。
【００６３】
プロセス・ブロック４２２は、データ・ユニット０が、新規データ・ブロックｄ０’を書き込むためのターゲットＰＢＡとして使用するために、データ・ユニット０の空きＰＢＡ  ｋを取得すること（例えば、ｇｅｔｆｒｅｅＰＢＡ（））を含む。エラー回復プロセスは、データ・ユニット０が空きＰＢＡを取得できない場合に呼び出されてもよい。プロセス・ブロック４２２は、データ・ユニット０が、ＬＢＡ  ｎについての新規エントリをその以前のバージョンのマッピング情報に追加すること（例えば、ａｄｄ＿ｖｍａｐ（ｎ，ＮＵＬＬ，ｊ，ｔｎ，ｔｒ））をさらに含む。例えば、新規エントリは、以下の割り当てられた値を有する以下のフィールド、（１）ＮＵＬＬ値を割り当てられた現在のＰＢＡフィールド、（２）ｊを割り当てられた以前のＰＢＡフィールド、（３）ｔｎを割り当てられたｔｓｎフィールド、（４）ｔｒを割り当てられたｈｍｄフィールド、および（５）クリアされた（即ち、設定されていない）ｇｗｃフィールド、を含む。新規エントリを追加することは、ＰＢＡ  ｊに記憶され、およびＬＢＡ  ｎに関連付けられた現在のデータ・ブロックｄ０の両方を、消去されることまたは再使用されることから保護し、それによって、（例えば、電力損失の場合に）それをデータ回復動作に利用可能にする。データ・ブロックは書き込まれないため、新規エントリを追加することによって、小さな原子的なテーブル更新を受けるだけである。
【００６４】
プロセス・ブロック４２３は、データ・ユニット０が新規データ・ブロックｄ０’を空きＰＢＡ  ｋに書き込むこと（例えば、ｗｒｉｔｅ（ｋ，ｄ０’））を含む。
【００６５】
プロセス・ブロック４２４は、データ・ユニット０が、エントリの現在のＰＢＡフィールドにｋを割り当てることによって、ＬＢＡ  ｎに対応し、トランザクション・シーケンス番号ｔｎを含むその以前のバージョンのマッピング情報内のエントリを更新すること（例えば、ｓｅｔ＿ｖｍａｐ＿ｃｕｒｒ（ｎ，ｔｎ，ｋ））を含む。この更新は、新規データ・ブロックｄ０’がＰＢＡ  ｋに書き込まれた後にのみ発生する、原子的なテーブル更新である。
【００６６】
プロセス・ブロック４２５は、データ・ユニット０が、コントローラ／仮想化ユニット１４０から受信した書き込みコマンドが完了したことを確認する書き込み完了通知を、コントローラ／仮想化ユニット１４０に発行することを含む。
【００６７】
プロセス・ブロック４４１は、パリティ・ユニット３が、コントローラ／仮想化ユニット１４０から書き込みコマンドを受信することに応答して、ＬＢＡ  ｍに対応するパリティ・ユニット３のＰＢＡを判断すること（例えば、ｇｅｔＰＢＡ（ｍ））を含む。例えば、パリティ・ユニット３が、その内部変換レイヤを介して、ＰＢＡ  ｆがＬＢＡ  ｍに対応すると判断すると仮定する。プロセス・ブロック４４１は、パリティ・ユニット３が、ＬＢＡ  ｍについてのエントリｖｍｅｐを取得するために、（その内部変換レイヤ内に維持される）その以前のバージョンのマッピング情報のルックアップ検索を実行すること（例えば、ｖｍａｐ＿ｆｉｎｄ（ｍ））をさらに含む。エントリｖｍｅｐは、ＬＢＡ  ｍについての以前のバージョン・コピーを識別し追跡する。ルックアップ検索が成功すると、エントリｖｍｅｐが返される。プロセス・ブロック４４１は、ＰＢＡ  ｆおよびエントリｖｍｅｐの状態が、更新書き込みについて有効であるかどうかを判断すること（例えば、ｕｐｄｗ＿ｃｈｅｃｋ（ｆ，ｖｍｅｐ））をさらに含む。ＰＢＡ  ｆの状態も、エントリｖｍｅｐの状態も、更新書き込みについて有効でない場合、エラー回復プロセスが呼び出され得る。ＰＢＡ  ｆおよびエントリｖｍｅｐの状態が、更新書き込みについて有効である場合、パリティ・ユニット３は、プロセス・ブロック４４２に進む。
【００６８】
プロセス・ブロック４４２は、パリティ・ユニット３が、新規パリティ・ブロックｐ０’を書き込むためのターゲットＰＢＡとして使用するために、パリティ・ユニット３の空きＰＢＡ  ｇを取得すること（例えば、ｇｅｔｆｒｅｅＰＢＡ（））を含む。エラー回復プロセスは、パリティ・ユニット３が空きＰＢＡを取得できない場合に呼び出されてもよい。プロセス・ブロック４４２は、パリティ・ユニット３が、ＬＢＡ  ｍについての新規エントリをその以前のバージョンのマッピング情報に追加すること（例えば、ａｄｄ＿ｖｍａｐ（ｍ，ＮＵＬＬ，ｆ，ｔｎ，ｔｒ））をさらに含む。例えば、新規エントリは、以下の割り当てられた値を有する以下のフィールド、（１）ＮＵＬＬ値を割り当てられた現在のＰＢＡフィールド、（２）ｆを割り当てられた以前のＰＢＡフィールド、（３）ｔｎを割り当てられたｔｓｎフィールド、（４）ｔｒを割り当てられたｈｍｄフィールド、および（５）クリアされた（即ち、設定されていない）ｇｗｃフィールド、を含む。新規エントリを追加することは、ＰＢＡ  ｆに記憶され、およびＬＢＡ  ｍに関連付けられた現在のパリティ・ブロックｐ０の両方を、消去されることまたは再使用されることから保護し、それによって、（例えば、電力損失の場合に）それをデータ回復動作に利用可能にする。データ・ブロックは書き込まれないため、新規エントリを追加することによって、小さな原子的なテーブル更新を受けるだけである。
【００６９】
プロセス・ブロック４４３は、パリティ・ユニット３が新規のパリティ・ブロックｐ０’を空きＰＢＡ  ｇに書き込むこと（例えば、ｗｒｉｔｅ（ｇ，ｐ０’））を含む。
【００７０】
プロセス・ブロック４４４は、パリティ・ユニット３が、エントリの現在のＰＢＡフィールドにｇを割り当てることによって、ＬＢＡ  ｍに対応し、トランザクション・シーケンス番号ｔｎを含むその以前のバージョンのマッピング情報内のエントリを更新すること（例えば、ｓｅｔ＿ｖｍａｐ＿ｃｕｒｒ（ｍ，ｔｎ，ｆ））を含む。この更新は、新規のパリティ・ブロックｐ０’がＰＢＡ  ｇに書き込まれた後にのみ発生する、原子的なテーブル更新である。
【００７１】
プロセス・ブロック４４５は、パリティ・ユニット３が、コントローラ／仮想化ユニット１４０から受信した書き込みコマンドが完了したことを確認する書き込み完了通知を、コントローラ／仮想化ユニット１４０に発行することを含む。
【００７２】
プロセス・ブロック４０５は、コントローラ／仮想化ユニット１４０が、データ・ユニット０およびパリティ・ユニット３に発行された未処理の書き込みコマンドが完了したことを確認する、データ・ユニット０およびパリティ・ユニット３からの書き込み完了通知を待機することによって、バリア同期（「バリア同期」）動作を実施することを含む。１つの実施形態において、影響を受けるユニット（即ち、影響を受けるデータ・ユニットまたは影響を受けるパリティ・ユニット）に対する追加の書き込みコマンドは、コントローラ／仮想化ユニット１４０が影響を受けるユニットから書き込み完了通知を受信するまでブロックされる。１つの実施形態において、影響を受けるユニット上に維持される以前のバージョンのマッピング情報が、ＬＢＡについての複数の以前のバージョン・コピーを識別および追跡する場合、影響を受けるパリティ・ストライプの影響を受けるブロック（即ち、データ・ブロックおよびパリティ・ブロック）に対する追加の書き込みコマンドは、以前のバージョン・コピーの総数に対する限度に達すると、ブロックされる。
【００７３】
プロセス・ブロック４０６は、コントローラ／仮想化ユニット１４０が、各影響を受けるユニットから書き込み完了通知を受信することに応答して、各影響を受けるユニットに対してグローバル書き込み完了コマンドを発行することを含む。例えば、コントローラ／仮想化ユニット１４０が、以下の影響を受けるユニット、対応するＬＢＡ  ｎを有するデータ・ユニット０（例えば，ｇｌｏｂａｌ＿ｗｃｏｍｐ（０，ｎ，ｔｎ））および対応するＬＢＡ  ｍを有するパリティ・ユニット３（例えば、ｇｌｏｂａｌ＿ｗｃｏｍｐ（３，ｍ，ｔｎ））のそれぞれに対してグローバル書き込み完了コマンドを発行すると仮定する。発行された各グローバル書き込みコマンドは、トランザクション・シーケンス番号ｔｎをパラメータとして含む。
【００７４】
コントローラ／仮想化ユニット１４０が各影響を受けるユニットに対してグローバル書き込みコマンドを発行した後、コントローラ／仮想化ユニット１４０は、各影響を受けるユニットからのグローバル書き込み完了通知を待機するためにプロセス・ブロック４０７に進む。コントローラ／仮想化ユニット１４０が、プロセス・ブロック４０７において待機する間、データ・ユニット０は、プロセス・ブロック４２６〜４２７のステップを実行し、パリティ・ユニット３は、プロセス・ブロック４４６〜４４７のステップを実行する。プロセス・ブロック４２６〜４２７のステップは、プロセス・ブロック４４６〜４４７のステップと非同期である（即ち、プロセス・ブロック４２７および４４７の完了は、任意の順序で発生し得る）。
【００７５】
プロセス・ブロック４２６は、データ・ユニット０が、コントローラ／仮想化ユニット１４０からグローバル書き込みコマンドを受信することに応答して、エントリのｇｗｃフラグを設定することによって、ＬＢＡ  ｎに対応し、トランザクション・シーケンス番号ｔｎを含むその以前のバージョンのマッピング情報内のエントリを更新すること（例えば、ｓｅｔ＿ｖｍａｐ＿ｇｗｃ（ｎ，ｔｎ））を含む。ｇｗｃフラグを設定した後、データ・ユニット０は、プロセス・ブロック４２７に進む。
【００７６】
プロセス・ブロック４２７は、データ・ユニット０が、コントローラ／仮想化ユニット１４０から受信したグローバル書き込み完了コマンドが完了したことを確認するグローバル書き込み完了通知を、コントローラ／仮想化ユニット１４０に発行することを含む。
【００７７】
プロセス・ブロック４４６は、パリティ・ユニット３が、コントローラ／仮想化ユニット１４０からグローバル書き込みコマンドを受信することに応答して、エントリのｇｗｃフラグを設定することによって、ＬＢＡ  ｍに対応し、トランザクション・シーケンス番号ｔｎを含むその以前のバージョンのマッピング情報内のエントリを更新すること（例えば、ｓｅｔ＿ｖｍａｐ＿ｇｗｃ（ｍ，ｔｎ））を含む。ｇｗｃフラグを設定した後、パリティ・ユニット３は、プロセス・ブロック４４７に進む。
【００７８】
プロセス・ブロック４４７は、パリティ・ユニット３が、コントローラ／仮想化ユニット１４０から受信したグローバル書き込み完了コマンドが完了したことを確認するグローバル書き込み完了通知を、コントローラ／仮想化ユニット１４０に発行することを含む。
【００７９】
プロセス・ブロック４０７は、コントローラ／仮想化ユニット１４０が、データ・ユニット０およびパリティ・ユニット３に発行された未処理のグローバル書き込みコマンドが完了したことを確認する、データ・ユニット０およびパリティ・ユニット３からのグローバル書き込み完了通知を待機することを含む。１つの実施形態において、コントローラ／仮想化ユニット１４０は、プロセス・ブロック４０７の間にバリア同期動作を実施する。
【００８０】
プロセス・ブロック４０８は、コントローラ／仮想化ユニット１４０が、各影響を受けるユニットからグローバル書き込み完了通知を受信することに応答して、ホスト・システム６０に対して仮想アドレス空間のＬＢＡ  ｂについてのホスト書き込み完了通知を発行すること（例えば、ｈｏｓｔ＿ｗｒｉｔｅｃｏｍｐ（ｂ））を含む。プロセス・ブロック４０８は、コントローラ／仮想化ユニット１４０が、更新書き込み動作が堅牢にされるように、影響を受けるユニットに対応するＬＢＡに対応し、トランザクション・シーケンス番号ｔｎを含む、その以前のバージョン・マッピング情報内のエントリを解放するために各影響を受けるユニットに対して解放コマンドを発行することを、さらに含む。例えば、コントローラ／仮想化ユニット１４０が、以下の影響を受けるユニット、対応するＬＢＡ  ｎを有するデータ・ユニット０（例えば、ｆｒｅｅ＿ｖｍａｐ（０，ｎ，ｔｎ））および対応するＬＢＡ  ｍを有するパリティ・ユニット３（例えば、ｆｒｅｅ＿ｖｍａｐ（３，ｍ，ｔｎ））のそれぞれに対して解放コマンドを発行すると仮定する。発行された各解放コマンドは、トランザクション・シーケンス番号ｔｎをパラメータとして含む。
【００８１】
コントローラ／仮想化ユニット１４０が各影響を受けるユニットに対して解放コマンドを発行した後、コントローラ／仮想化ユニット１４０は、各影響を受けるユニットからの解放完了通知を待機するためにプロセス・ブロック４０９に進む。コントローラ／仮想化ユニット１４０が、プロセス・ブロック４０９において待機する間、データ・ユニット０は、プロセス・ブロック４２８〜４２９のステップを実行し、パリティ・ユニット３は、プロセス・ブロック４４８〜４４９のステップを実行する。プロセス・ブロック４２８〜４２９のステップは、プロセス・ブロック４４８〜４４９のステップと非同期である（即ち、プロセス・ブロック４２９および４４９の完了は、任意の順序で発生し得る）。
【００８２】
プロセス・ブロック４２８は、データ・ユニット０が、コントローラ／仮想化ユニット１４０から解放コマンドを受信することに応答して、ＬＢＡ  ｎに対応し、トランザクション・シーケンス番号ｔｎを含むその以前のバージョンのマッピング情報内のエントリを除去すること（例えば、ｒｅｍ＿ｖｍａｐ（ｎ，ｔｎ））を含む。
【００８３】
プロセス・ブロック４４９は、データ・ユニット０が、コントローラ／仮想化ユニット１４０から受信した解放コマンドが完了したことを確認する解放完了通知を、コントローラ／仮想化ユニット１４０に発行することを含む。
【００８４】
プロセス・ブロック４４８は、パリティ・ユニット３が、コントローラ／仮想化ユニット１４０から解放コマンドを受信することに応答して、ＬＢＡ  ｍに対応し、トランザクション・シーケンス番号ｔｎを含むその以前のバージョンのマッピング情報内のエントリを除去すること（例えば、ｒｅｍ＿ｖｍａｐ（ｍ，ｔｎ））を含む。
【００８５】
プロセス・ブロック４４９は、パリティ・ユニット３が、コントローラ／仮想化ユニット１４０から受信した解放コマンドが完了したことを確認する解放完了通知を、コントローラ／仮想化ユニット１４０に発行することを含む。
【００８６】
プロセス・ブロック４０９は、コントローラ／仮想化ユニット１４０が、データ・ユニット０およびパリティ・ユニット３に発行された未処理の解放コマンドが完了したことを確認する、データ・ユニット０およびパリティ・ユニット３からの解放完了通知を待機することを含む。１つの実施形態において、コントローラ／仮想化ユニット１４０は、プロセス・ブロック４０９の間にバリア同期動作を実施する。
【００８７】
プロセス・ブロック４１０は、プロセス４００の終了である。
【００８８】
ホスト認識更新書き込みプロトコルは、記憶システム１００がより複雑なパリティ方程式／構成で消失訂正符号を実施する場合に、上述したプロセス４００に類似のやり方で実施される。
【００８９】
以下の表２は、プロセス４００のいくつかのプロセス・ブロックの間のＬＢＡ  ｎに対応するデータ・ユニット０上における以前のバージョンのマッピング情報内のエントリを提供する。
【００９０】
【表２】
2021522577.tif 000004
【００９１】
表３は、プロセス４００のいくつかのプロセス・ブロックの間のＬＢＡ  ｍに対応するパリティ・ユニット３上における以前のバージョンのマッピング情報内のエントリを提供する。
【００９２】
【表３】
2021522577.tif 000005
【００９３】
上で提供された表２〜３に示されるように、データ・ユニット０によって実行されるステップの順序は、パリティ・ユニット３によって実行されるステップの順序と、プロセス・ブロック４０５におけるバリア同期動作を介して同期されるだけである。この特定の時点を除いて、データ・ユニット０の状態は、他の時点におけるパリティ・ユニット３の状態に任意に関連する。
【００９４】
表２に示されるように、プロセス・ブロック４２１および４２８の間のデータ・ユニット０上の以前のバージョンのマッピング情報は、ＬＢＡ  ｎについてのエントリを含まない。表３に示されるように、プロセス・ブロック４４１および４４８の間のパリティ・ユニット３上の以前のバージョンのマッピング情報は、ＬＢＡ  ｍについてのエントリを含まない。
【００９５】
以下の表４は、１つまたは複数の実施形態における、影響を受けるユニットの異なる起こり得る状態のリストを提供する。
【００９６】
【表４】
2021522577.tif 000006
【００９７】
以下の表５は、１つまたは複数の実施形態における、プロセス４００のいくつかのプロセス・ブロックの間のデータ・ユニット０およびパリティ・ユニット３の状態を示す状態情報を提供する。
【００９８】
【表５】
2021522577.tif 000007
【００９９】
上記で提供された表５に示されるように、データ・ユニット０およびパリティ・ユニット３がそれぞれプロセス・ブロック４２４および４４１のステップを実行しているとき、記憶システム１００の全体の状態（即ち、データ・ユニット０およびパリティ・ユニット３の状態）は、５０３である（即ち、元の書き込み動作の完了が可能である（やり直し））。
【０１００】
電力損失事象からの回復時に、記憶システム１００は、各ＬＢＡの状態を判断する必要がある。１つの実施形態において、電力損失事象後に記憶システム１００を復元するために、各影響を受けるユニットに対応する各ＬＢＡの状態が、表２〜３に含まれる以前のバージョンのマッピング情報および表５に含まれる状態情報などの、状態情報および以前のバージョンのマッピング情報に基づいて判断され得る。例えば、データ・ユニット０上の以前のバージョンのマッピング情報が、ＬＢＡ  ｎについてのエントリを含まず、かつパリティ・ユニット３上の以前のバージョンのマッピング情報が、ＬＢＡ  ｍについてのエントリを含まない（即ち、データ・ユニット０がプロセス・ブロック４２１または４２８のいずれかのステップを実行しており、パリティ・ユニット３がプロセス・ブロック４４１または４４８のいずれかのステップを実行している）場合、記憶システム１００全体の状態（即ち、データ・ユニット０の状態およびパリティ・ユニット３の状態）は、５０１である（即ち、保留／未処理の書き込み動作はない）。
【０１０１】
記憶システム１００全体の状態（即ち、データ・ユニット０の状態およびパリティ・ユニット３の状態）が５０２である（即ち、取り消しが可能である）場合、データ・ユニット０上の以前のバージョンのマッピング情報およびパリティ・ユニット３上の以前のバージョンのマッピング情報は、以前のバージョン・コピーを含むが、現在のバージョン・コピーを含まない。この状態において、書き込み動作は、ＬＢＡについての以前のバージョン・コピーをＬＢＡについての現在のバージョン・コピーに復元することによって、一貫したパリティ・ストライプが存在する状態に取り消しされ得る。１つの実施形態において、ＬＢＡについての以前のバージョン・コピーは、ＬＢＡに対応するエントリを以前のバージョンのマッピング情報から除去することによって、復元され得る。ホスト・システム６０が、書き込みコマンドの発行後にホスト書き込み完了通知をコントローラ／仮想化ユニット１４０から受信しない場合、ホスト・システム６０は、書き込みコマンドを再試行してもよい。
【０１０２】
記憶システム１００全体の状態（即ち、データ・ユニット０の状態およびパリティ・ユニット３の状態）が５０３である（即ち、元の書き込み動作の完了が可能である）場合、データ・ユニット０上の以前のバージョンのマッピング情報およびパリティ・ユニット３上の以前のバージョンのマッピング情報が、ＬＢＡについての以前のバージョン・コピーおよびＬＢＡについての現在のバージョン・コピーの両方を含む。この状態において、書き込みコマンドは、新規パリティ・ブロックを再計算することによって、完了され得る。
【０１０３】
記憶システム１００全体の状態（即ち、データ・ユニット０の状態およびパリティ・ユニット３の状態）が、５０４である（即ち、クリーンアップが必要である）場合、記憶システム１００は、一貫したパリティ・ストライプを含み、それによって、記憶システム１００によって実施される消失訂正符号を保全する。この状態において、以前のバージョンのマッピング情報から関連するエントリを除去するために、クリーンアップのみが必要とされる。各影響を受けるユニットは、記憶システム１００にグローバル書き込み完了通知を返し得る。
【０１０４】
記憶システム１００全体の状態（即ち、データ・ユニット０の状態およびパリティ・ユニット３の状態）が５０５である（即ち、クリーンアップが１つまたは複数の他の影響を受けるユニット上で必要とされ得る）場合、全てではなくいくつかの、影響を受けるユニットが、クリーンアップを完了している。クリーンアップは、保留中の解放コマンドを用いて各影響を受けるユニット上で必要とされる。
【０１０５】
１つの実施形態において、各フレームワーク５０、５１、および５２は、以前のバージョンのマッピング情報の処理および管理を容易にするために１つまたは複数の新規Ｉ／Ｏインターフェースを提供する。例えば、１つまたは複数の新規Ｉ／Ｏインターフェースが、図３に示されるホスト認識更新書き込みプロトコルを実施し管理するためのコマンドのセットを含み得る。以下の表６および表７は、１つまたは複数の実施形態における、コマンドのセットの例としての実施を提供する。
【０１０６】
【表６】
2021522577.tif 000008
【０１０７】
【表７】
2021522577.tif 000009
【０１０８】
例えば、フレームワーク５０において、コマンドのセットは、コントローラ／仮想化ユニット１４０および１つまたは複数の記憶ユニット１２０によって実施される。別の例として、フレームワーク５１において、コマンドのセットは、コントローラ／仮想化ユニット１４０および１つまたは複数の記憶ユニット１２０によって、それぞれＩ／Ｏユニット６１および１３０を介して実施される。さらに別の例として、フレームワーク５２において、コマンドのセットは、コントローラ／仮想化ユニット１４０および１つまたは複数の記憶ユニット１２０によって、それぞれＩ／Ｏユニット８２および１３０を介して実施される。
【０１０９】
各フレームワーク５０、５１、および５２は、更新書き込み動作が、ファイル・システム、データベースなどを含む異種記憶ユニットにわたって原子的である必要がある任意の状況に適用可能である。
【０１１０】
図１１は、発明の一実施形態を実施するのに有用な情報処理システム３００を示すハイレベル・ブロック図である。コンピュータ・システムは、プロセッサ３０２などの１つまたは複数のプロセッサを含む。プロセッサ３０２は、通信インフラ３０４（例えば、通信バス、クロスオーバ・バー、またはネットワーク）に接続される。
【０１１１】
コンピュータ・システムは、ディスプレイ・ユニット３０８上での表示用にグラフィック、文字、および他のデータを通信インフラ３０４から（または図示されないフレーム・バッファから）転送するディスプレイ・インターフェース３０６を含み得る。コンピュータ・システムは、また、メイン・メモリ３１０、好適にはランダム・アクセス・メモリ（ＲＡＭ）を含み、セカンダリ・メモリ３１２も含み得る。セカンダリ・メモリ３１２は、例えば、ハード・ディスク・ドライブ３１４、または例えば、フロッピー・ディスク・ドライブ、磁気テープ・ドライブ、もしくは光ディスク・ドライブを表すリムーバブル記憶ドライブ３１６、あるいはその両方を含み得る。リムーバブル記憶ドライブ３１６は、当業者に周知のやり方でリムーバブル記憶ユニット３１８から読み出しまたは書き込みあるいはその両方を行う。リムーバブル記憶ユニット３１８は、例えば、フロッピー（Ｒ）・ディスク、コンパクト・ディスク、磁気テープ、または光ディスクなどを表し、それは、リムーバブル記憶ドライブ３１６によって読み出され、書き込まれる。当然のことながら、リムーバブル記憶ユニット３１８は、その中にコンピュータ・ソフトウェアまたはデータあるいはその両方が記憶されているコンピュータ可読媒体を含む。
【０１１２】
代替的実施形態において、セカンダリ・メモリ３１２は、コンピュータ・プログラムまたは他の命令がコンピュータ・システム内にロードされることを可能にする、他の類似の手段を含み得る。そのような手段は、例えば、リムーバブル記憶ユニット３２０およびインターフェース３２２を含み得る。そのような手段の例は、プログラム・パッケージおよびパッケージ・インターフェース（ビデオ・ゲーム・デバイスに見出されるような）、リムーバブル・メモリ・チップ（ＥＰＲＯＭまたはＰＲＯＭなど）および関連するソケット、ならびに他のリムーバブル記憶ユニット３２０およびインターフェース３２２を含んでもよく、それは、ソフトウェアおよびデータがリムーバブル記憶ユニット３２０からコンピュータ・システムに移送されることを可能にする。
【０１１３】
コンピュータ・システムは、また、通信インターフェース３２４を含み得る。通信インターフェース３２４は、ソフトウェアおよびデータがコンピュータ・システムと外部デバイスとの間で移送されることを可能にする。通信インターフェース３２４の例は、モデム、ネットワーク・インターフェース（イーサネット（Ｒ）・カードなど）、通信ポート、またはＰＣＭＣＩＡスロットおよびカードなどを含み得る。通信インターフェース３２４を介して移送されるソフトウェアおよびデータは、例えば、電子、電磁気、光学、または通信インターフェース３２４によって受信可能な他の信号であり得る信号の形態である。これらの信号は、通信パス（即ち、チャネル）３２６を介して通信インターフェース３２４に提供される。この通信パス３２６は、信号を搬送し、ワイヤもしくはケーブル、光ファイバ、電話回線、セルラ電話リンク、ＲＦリンク、または他の通信チャネル、あるいはそれらの組み合わせを用いて実施され得る。
【０１１４】
本発明は、システム、方法、またはコンピュータ・プログラム製品、あるいはそれらの組み合わせであってもよい。コンピュータ・プログラム製品は、プロセッサに本発明の態様を実行させるためのコンピュータ可読プログラム命令をその上に有するコンピュータ可読記憶媒体（または複数の媒体）を含んでもよい。コンピュータ可読記憶媒体は、命令実行デバイスにより使用するための命令を保持し、記憶し得る有形デバイスであり得る。コンピュータ可読記憶媒体は、例えば、電子記憶デバイス、磁気記憶デバイス、光学記憶デバイス、電磁気記憶デバイス、半導体記憶デバイス、または前述したものの任意の適当な組み合わせであってもよいが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例の非網羅的リストは、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み取り専用メモリ（ＲＯＭ）、消去可能プログラマブル読み取り専用メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、静的ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読み取り専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー（Ｒ）・ディスク、パンチカードまたはその上に記録された命令を有する溝内の隆起構造などの機械的に符号化されたデバイス、および前述したものの任意の適当な組み合わせを含む。本明細書で用いられるコンピュータ可読記憶媒体は、本来、電波もしくは他の自由伝播する電磁波、導波管もしくは他の送信媒体を通って伝播する電磁波（例えば、光ファイバ・ケーブルを通過する光パルス）、または電線を通って送信される電気信号などの、一過性信号であると解釈されるべきではない。
【０１１５】
本明細書で説明されるコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング／処理デバイスに、あるいはネットワーク、例えば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、もしくはワイヤレス・ネットワーク、またはそれらの組み合わせを介して外部コンピュータまたは外部ストレージ・デバイスに、ダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバ、あるいはそれらの組み合わせを含み得る。各コンピューティング／処理デバイス内のネットワーク・アダプタ・カードまたはネットワーク・インターフェースは、コンピュータ可読プログラム命令をネットワークから受信し、それぞれのコンピューティング／処理デバイス内のコンピュータ可読記憶媒体の記憶用にコンピュータ可読プログラム命令を転送する。
【０１１６】
本発明の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ（ＩＳＡ）命令、機械命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、またはＳｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および「Ｃ」プログラミング言語もしくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む、１つもしくは複数のプログラミング言語の任意の組み合わせで書かれたソース・コードもしくはオブジェクト・コードのいずれかであってもよい。コンピュータ可読プログラム命令は、ユーザのコンピュータ上で完全に、ユーザのコンピュータ上で部分的に、スタンドアロン・ソフトウェア・パッケージとして、ユーザのコンピュータ上で部分的にかつリモート・コンピュータ上で部分的に、またはリモート・コンピュータもしくはサーバ上で完全に、実行してもよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）またはワイド・エリア・ネットワーク（ＷＡＮ）を含む任意の種類のネットワークを通して、ユーザのコンピュータに接続されてもよい。あるいは、接続は、（例えば、インターネット・サービス・プロバイダを使用してインターネットを通して）外部コンピュータに対して行われてもよい。いくつかの実施形態では、例えば、プログラマブル・ロジック回路、フィールドプログラマブル・ゲート・アレイ（ＦＰＧＡ）、またはプログラマブル・ロジック・アレイ（ＰＬＡ）を含む電子回路は、本発明の態様を実行するために、コンピュータ可読プログラム命令の状態情報を利用して電子回路を個別化することによって、コンピュータ可読プログラム命令を実行し得る。
【０１１７】
本発明の態様は、発明の実施形態による、方法、装置（システム）、およびコンピュータ・プログラム製品のフローチャート図またはブロック図あるいはその両方を参照して、本明細書において説明される。フローチャート図またはブロック図あるいはその両方の各ブロック、およびフローチャート図またはブロック図あるいはその両方のブロックの組み合わせが、コンピュータ可読プログラム命令によって実施され得ると理解されたい。
【０１１８】
コンピュータまたは他のプログラマブル・データ処理装置のプロセッサによって実行する命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定される機能／動作を実施する手段を作成するように、これらのコンピュータ可読プログラム命令は、汎用コンピュータ、専用コンピュータ、または機械を製造するための他のプログラマブル・データ処理装置のプロセッサに提供されてもよい。コンピュータ可読記憶媒体に記憶される命令を有するコンピュータ可読記憶媒体が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定される機能／動作の態様を実施する命令を含む製品を含むように、これらのコンピュータ可読プログラム命令は、また、コンピュータ、プログラマブル・データ処理装置、または他のデバイス、あるいはそれらの組み合わせに特定のやり方で機能するように指示し得る、コンピュータ可読記憶媒体に記憶されてもよい。
【０１１９】
コンピュータ、他のプログラマブル装置、または他のデバイス上で実行する命令が、フローチャートまたはブロック図あるいはその両方の１つまたは複数のブロックにおいて指定される機能／動作を実施するように、コンピュータ可読プログラム命令は、また、コンピュータ実施されたプロセスを作り出すために、コンピュータ、他のプログラマブル装置、または他のデバイス上で一連の動作ステップを実行させるコンピュータ、他のプログラマブル・データ処理装置、または他のデバイス上にロードされてもよい。
【０１２０】
図面中のフローチャートおよびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実施のアーキテクチャ、機能性、および動作を例示する。この点に関して、フローチャートまたはブロック図の各ブロックは、指定された論理機能を実施するための１つまたは複数の実行可能命令を含む、モジュール、セグメント、または命令の一部を表し得る。いくつかの代替的な実施において、ブロック内に記載された機能は、図面中に記載された順序以外で発生してもよい。例えば、連続して示される２つのブロックが、実際には、実質的に同時に実行されてもよく、または、ブロックが、関係する機能性次第で逆の順序で実行されることがあってもよい。ブロック図またはフローチャート図あるいはその両方の各ブロック、およびブロック図またはフローチャート図あるいはその両方におけるブロックの組み合わせが、指定された機能もしくは動作を実行し、または専用ハードウェアおよびコンピュータ命令の組み合わせを実行する専用ハードウェアベース・システムによって実施され得ることにも留意されたい。
【０１２１】
上記説明から、本発明は、発明の実施形態を実施するシステム、コンピュータ・プログラム製品、および方法を提供することが分かる。本発明は、発明の実施形態を実施する非一過性コンピュータ使用可能記憶媒体をさらに提供する。非一過性コンピュータ使用可能記憶媒体は、コンピュータ可読プログラムを有し、プログラムは、コンピュータ上で処理されると、本明細書に説明される実施形態に従って本発明のステップをコンピュータに実施させる。特許請求の範囲における単数形の要素への参照は、明示的にそのように述べられない限り、「ただ１つ」ではなく「１つまたは複数」を意味することを意図するものである。当業者に現在知られている、または後で知られることとなる上述の例示的実施形態の要素の全ての構造的および機能的均等物が、本特許請求の範囲によって包含されることを意図するものである。要素が、「ｍｅａｎｓ  ｆｏｒ」または「ｓｔｅｐ  ｆｏｒ」という語句を用いて明示的に列挙されない限り、本明細書におけるいかなる請求項の要素も、米国特許法第１１２条第６項の規定により解釈されるべきでない。
【０１２２】
本明細書で使用される専門用語は、特定の実施形態のみを説明するためのものであり、発明を限定することを意図するものではない。本明細書で使用される、単数形「ａ」、「ａｎ」、および「ｔｈｅ」は、文脈が特段明示していない限り、複数形も同様に含むことを意図するものである。「comprises（備える）」または「comprising（備えている）」という用語、あるいはその両方は、本明細書で使用されるとき、述べられた特徴、整数、ステップ、動作、要素、またはコンポーネント、あるいはそれらの組み合わせの存在を示しているが、１つまたは複数の他の特徴、整数、ステップ、動作、要素、コンポーネント、またはそれらの集合、あるいはそれらの組み合わせの存在または追加を排除するものではないと、さらに理解されるものとする。
【０１２３】
下記の特許請求の範囲における全てのミーンズ・プラス・ファンクション要素またはステップ・プラス・ファンクション要素の対応する構造、物質、動作、および均等物は、他の特許請求された要素と組み合わせて機能を実行するための任意の構造、物質、または動作を具体的に請求されるように含むことを意図するものである。本発明の説明は、例示および説明の目的で提示されているが、網羅的であるように、または開示された形態に発明を限定されることを意図するものではない。発明の範囲および思想から逸脱することなく、多くの修正および変形が当業者には明らかであろう。実施形態は、発明の原理および実際の適用を最もよく説明するため、ならびに考えられる特定の用途に適する多様な修正を伴う多様な実施形態についての発明を他の当業者が理解できるようにするために、選択され説明された。
【図１】
2021522577.tif 000010
【図２】
2021522577.tif 000011
【図３】
2021522577.tif 000012
【図４】
2021522577.tif 000013
【図５】
2021522577.tif 000014
【図６】
2021522577.tif 000015
【図７】
2021522577.tif 000016
【図８】
2021522577.tif 000017
【図９】
2021522577.tif 000018
【図１０】
2021522577.tif 000019
【図１１】
2021522577.tif 000020
【手続補正書】
【提出日】令和3年4月13日(2021.4.13)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
記憶ユニットを備えるコンピュータにより実行される方法であって、
前記記憶ユニット上で、ホストによって見られる論理アドレスの第１のセットと、前記記憶ユニットの物理アドレスの第１のセットおよび物理アドレスの第２のセットとの間のマッピング・データを維持することであって、前記論理アドレスの第１のセットの第１の論理アドレスが、前記第１の論理アドレスについての現在のデータを維持する前記物理アドレスの第１のセットの第１の物理アドレスに対応し、前記第１の論理アドレスが、前記第１の論理アドレスについての以前のデータを維持する前記物理アドレスの第２のセットの第２の物理アドレスにさらに対応する、前記維持することと、
前記記憶ユニットにおいて、前記第１の論理アドレスに関係するマルチデバイス動作を実行するために前記ホストからコマンドを受信することであって、前記動作が原子的に実行される、前記受信することと、
を含む、方法。
【請求項２】
前記動作が、更新書き込み動作である、請求項１に記載の方法。
【請求項３】
前記マッピング・データが、前記第１の論理アドレスについての１つまたは複数の以前のバージョン・コピーを識別および追跡し、前記マッピング・データが、前記第１の論理アドレスについての以前のバージョン・コピー毎に、前記以前のバージョン・コピーを維持する対応物理アドレスを含む、請求項２に記載の方法。
【請求項４】
前記マッピング・データが、前記更新書き込み動作についてのトランザクション・シーケンス番号を含む、請求項２に記載の方法。
【請求項５】
前記マッピング・データが、前記更新書き込み動作に関与する各記憶ユニットを示すホスト定義メタデータを含む、請求項２に記載の方法。
【請求項６】
マルチデバイス原子性を示す通知である、前記記憶ユニット上の更新書き込みが完了していることを確認する通知、グローバル書き込み完了フラグが設定されていることを確認する通知、および前記第１の論理アドレスに対応し、前記トランザクション・シーケンス番号を含む前記マッピング・データ内のエントリが前記マッピング・データから除去されることを確認する通知を、前記ホストが前記記憶ユニットから受信することに応答して、前記動作が完了する、請求項４に記載の方法。
【請求項７】
前記現在のデータが、現在のデータ・ブロックを含み、前記以前のデータが、以前のデータ・ブロックを含む、請求項１乃至６のいずれかに記載の方法。
【請求項８】
前記現在のデータが、現在のパリティ・ブロックを含み、前記以前のデータが、以前のパリティ・ブロックを含む、請求項１乃至６のいずれかに記載の方法。
【請求項９】
少なくとも１つのプロセッサと、
少なくとも１つの記憶ユニットと備えるシステムであって、
前記プロセッサにより、
前記記憶ユニット上で、ホストによって見られる論理アドレスの第１のセットと、前記記憶ユニットの物理アドレスの第１のセットおよび物理アドレスの第２のセットとの間のマッピング・データを維持することであって、前記論理アドレスの第１のセットの第１の論理アドレスが、前記第１の論理アドレスについての現在のデータを維持する前記物理アドレスの第１のセットの第１の物理アドレスに対応し、前記第１の論理アドレスが、前記第１の論理アドレスについての以前のデータを維持する前記物理アドレスの第２のセットの第２の物理アドレスにさらに対応する、前記維持することと、
前記記憶ユニットにおいて、前記第１の論理アドレスに関係するマルチデバイス動作を実行するために前記ホストからコマンドを受信することであって、前記動作が原子的に実行される、前記受信することと、
を含む動作をさせる、
システム。
【請求項１０】
前記動作が、更新書き込み動作である、請求項９に記載のシステム。
【請求項１１】
前記マッピング・データが、前記第１の論理アドレスについての１つまたは複数の以前のバージョン・コピーを識別および追跡し、前記マッピング・データが、前記第１の論理アドレスについての以前のバージョン・コピー毎に、前記以前のバージョン・コピーを維持する対応物理アドレスを含む、請求項１０に記載のシステム。
【請求項１２】
前記マッピング・データが、前記更新書き込み動作についてのトランザクション・シーケンス番号を含む、請求項１０に記載のシステム。
【請求項１３】
前記マッピング・データが、前記更新書き込み動作に関与する各記憶ユニットを示すホスト定義メタデータを含む、請求項１０に記載のシステム。
【請求項１４】
マルチデバイス原子性を示す通知である、前記記憶ユニット上の更新書き込みが完了していることを確認する通知、グローバル書き込み完了フラグが設定されていることを確認する通知、および前記第１の論理アドレスに対応し、前記トランザクション・シーケンス番号を含む前記マッピング・データ内のエントリが前記マッピング・データから除去されることを確認する通知を、前記ホストが前記記憶ユニットから受信することに応答して、前記動作が完了する、請求項１２に記載のシステム。
【請求項１５】
前記現在のデータが、現在のデータ・ブロックを含み、前記以前のデータが、以前のデータ・ブロックを含む、請求項９乃至１４のいずれかに記載のシステム。
【請求項１６】
前記現在のデータが、現在のパリティ・ブロックを含み、前記以前のデータが、以前のパリティ・ブロックを含む、請求項９乃至１４のいずれかに記載のシステム。
【請求項１７】
記憶ユニットを備えるコンピュータにより実行されるコンピュータ・プログラムであり、前記コンピュータに、
前記記憶ユニット上で、ホストによって見られる論理アドレスの第１のセットと、前記記憶ユニットの物理アドレスの第１のセットおよび物理アドレスの第２のセットとの間のマッピング・データを維持することであって、前記論理アドレスの第１のセットの第１の論理アドレスが、前記第１の論理アドレスについての現在のデータを維持する前記物理アドレスの第１のセットの第１の物理アドレスに対応し、前記第１の論理アドレスが、前記第１の論理アドレスについての以前のデータを維持する前記物理アドレスの第２のセットの第２の物理アドレスにさらに対応する、前記維持することと、
前記記憶ユニットにおいて、前記第１の論理アドレスに関係するマルチデバイス動作を実行するために前記ホストからコマンドを受信することであって、前記動作が原子的に実行される、前記受信することと、
を含む方法を実行させる、コンピュータ・プログラム。
【請求項１８】
前記動作が、更新書き込み動作である、請求項１７に記載のコンピュータ・プログラム。
【請求項１９】
前記マッピング・データが、前記第１の論理アドレスについての１つまたは複数の以前のバージョン・コピーを識別および追跡し、前記マッピング・データが、前記第１の論理アドレスについての以前のバージョン・コピー毎に、前記以前のバージョン・コピーを維持する対応物理アドレスを含む、請求項１８に記載のコンピュータ・プログラム。
【請求項２０】
前記マッピング・データが、前記更新書き込み動作についてのトランザクション・シーケンス番号を含む、請求項１８に記載のコンピュータ・プログラム。
【国際調査報告】
2021522577.tif 000021
2021522577.tif 000022