(57)【特許請求の範囲】
【請求項１】
トランザクションに関与するオブジェクトの１つ又は複数の指示を取得するステップと、
前記トランザクションに関与する前記オブジェクトのための、記憶装置における記憶位置の第１のセットを特定するステップと、
前記トランザクションとの関係において修正されたオブジェクトの論理的コピーを作成するステップと、
前記論理的コピーのための、前記記憶装置における記憶位置の第２のセットを決定するステップと、
前記オブジェクトの前記論理的コピーを原子単位で結び付ける関連付けを作成するステップと、
前記記憶装置上の前記オブジェクトのオリジナルを維持したまま前記関連付け及び前記論理的コピーを前記記憶装置に書き込む１つ又は複数の要求を送信するステップと、
障害が発生した後にリカバリ動作を実施するステップと、
を含み、前記リカバリ動作は、
不揮発性記憶装置内のオブジェクトの最後に知られた正しい記憶位置を示す第１のデータ構造を取得するステップと、
前記論理的コピーが記憶されることが予定された前記不揮発性記憶装置の記憶位置を示す別のデータ構造を取得するステップであって、前記別のデータ構造は更に、前記論理的コピーの正しいコンテンツを示しているハッシュからなる第１のセットを示す、ステップと、
前記記憶位置に配置されたコンテンツを読み出すステップと、
前記コンテンツのハッシュからなる第２のセットを計算するステップと、
もし前記ハッシュの第１及び第２のセットの対応する要素が等しければ、前記論理的コピーが前記記憶位置に記憶されていることを示すように前記第１のデータ構造を更新するステップと、
もし前記ハッシュの第１及び第２のセットの対応する要素の何れかが等しくなければ、前記リカバリ動作を終了するステップと、
を含む、少なくとも部分的にコンピューターによって実現される方法。
【請求項２】
トランザクションに関与するオブジェクトの１つ又は複数の指示を取得する前記ステップは、前記トランザクションとの関係において前記オブジェクトを修正する要求と共に前記オブジェクトの識別子を受信するステップを含み、前記トランザクションに関与する前記オブジェクトのための、記憶装置における記憶位置の第１のセットを特定する前記ステップは、前記識別子を探索テーブルにおけるキーとして利用するステップであって、前記探索テーブルは前記キーを前記オブジェクトが記憶装置内に記憶されている位置と関連付けている、ステップを含む、請求項１に記載の方法。
【請求項３】
前記第２のセットに含まれる各記憶位置は、前記第１のセットに含まれる各記憶位置と異なり、前記オブジェクトの論理的コピーを作成する前記ステップは、前記トランザクションの間に修正されたオブジェクトの一部分のコピーを作成するステップを含む、請求項１に記載の方法。
【請求項４】
前記オブジェクトの前記論理的コピーを原子単位で結び付ける関連付けを作成する前記ステップは、前記論理的コピーのペア間のリンクを作成するステップを含み、各リンクは、前記ペアの論理的コピーのうちの少なくとも１つに対する正しいコンテンツを示すハッシュ値を含む、請求項１に記載の方法。
【請求項５】
前記関連付け及び前記論理的コピーを書き込む１つ又は複数の要求を送信する前記ステップは、前記論理的コピーのためのそれぞれの記憶位置を示すデータ構造を書き込む１つ又は複数の要求を送信するステップ、前記論理的コピーのうち１つを除いてそれ以外の全てを前記記憶装置に書き込む１つ又は複数の要求を送信するステップ、及び、前記論理的コピーのうちの当該１つを書き込む要求の送信を予め定められたイベントが発生するまで待機するステップを含む、請求項１に記載の方法。
【請求項６】
前記論理的コピーのうちの当該１つを書き込む要求の送信を予め定められたイベントが発生するまで待機する前記ステップは、別のトランザクションが完了するまで、予め定められた時間期間が経過するまで、及びチェックポイントに到達するまで、のうちの１つ又は複数の間、待機するステップを含む、請求項５に記載の方法。
【請求項７】
全ての論理的コピーを前記記憶装置の不揮発性メモリへ掃き出すことに成功した後に、前記オブジェクトの前記オリジナルに関連付けられた記憶位置が使用可能であること、及び前記論理的コピーに関連付けられた記憶位置が有効であることを示すステップを更に含む、請求項１に記載の方法。
【請求項８】
コンピューター実行可能命令を有するコンピューター記憶媒体であって、前記コンピューター実行可能命令は、実行されると、
１つ又は複数のトランザクションの更新に関与するオブジェクトの指示を取得するステップと、
前記オブジェクトを記憶装置の第１の記憶位置において特定するステップと、
前記１つ又は複数のトランザクションとの関係において前記オブジェクトに対して行われた変更を含む、前記オブジェクトの論理的コピーを作成するステップと、
前記論理的コピーを記憶するための、前記記憶装置の第２の記憶位置を決定するステップと、
変更された前記論理的コピーを前記第２の記憶位置に書き込む要求を送信するステップと、
前記要求の送信と共に、別のトランザクションに関連する論理的コピーが存在する場合に当該論理的コピーが書き込まれるべき次の記憶位置を示すデータを供給するステップと、
前記論理的コピーが前記第２の記憶位置に記憶されていることを示すように揮発性データ構造を更新するステップと、
前記揮発性データ構造に対する変更を前記記憶装置に書き込む要求を送信し、前記変更を書き込む要求の送信と共に、前記記憶装置に関連付けられたキャッシュを前記記憶装置の不揮発性メモリに書き込むことを前記記憶装置のコントローラーへ指示するフラッシュコマンドを、前記記憶装置へ送信するステップと、
障害が発生した後にリカバリ動作を実施するステップであって、
不揮発性記憶装置内のオブジェクトの最後に知られた正しい記憶位置を示す第１のデータ構造を取得するステップと、
前記論理的コピーが記憶されることが予定された前記不揮発性記憶装置の記憶位置を示す別のデータ構造を取得するステップであって、前記別のデータ構造は更に、前記論理的コピーの正しいコンテンツを示しているハッシュからなる第１のセットを示す、ステップと、
前記記憶位置に配置されたコンテンツを読み出すステップと、
前記コンテンツのハッシュからなる第２のセットを計算するステップと、
もし前記ハッシュの第１及び第２のセットの対応する要素が等しければ、前記論理的コピーが前記記憶位置に記憶されていることを示すように前記第１のデータ構造を更新するステップと、
もし前記ハッシュの第１及び第２のセットの対応する要素の何れかが等しくなければ、前記リカバリ動作を終了するステップと、
を含むステップと、
を含むアクションを実行する、コンピューター記憶媒体。
【請求項９】
前記オブジェクトを記憶装置の第１の記憶位置において特定する前記ステップは、前記オブジェクトの識別子を受信するステップ、及び、前記識別子を用いて、識別子と記憶位置とを関連付けるデータ構造における関連付けを探索するステップを含む、請求項８に記載のコンピューター記憶媒体。
【請求項１０】
前記リカバリ動作は、
リンクされたリストの先頭位置を特定するステップであって、前記リンクされたリストの各要素は、前記リンクされたリストによって特定される前記記憶装置の記憶位置に書き込まれるべき論理的コピーに関連付けられている、ステップと、
前記リンクされたリストの要素が前記要素に関連付けられた記憶位置に書き込まれていない論理的コピーに関連付けられるまで、前記リンクされたリストを反復適用するステップと、
前記リンクされたリストの反復適用と共に、論理的コピーが前記要素によって特定される前記記憶位置に書き込まれた各要素に対して、前記論理的コピーに関連付けられたオブジェクトのための新たな記憶位置を示すようにデータ構造を更新するステップと、
を含む、請求項８に記載のコンピューター記憶媒体。
【請求項１１】
トランザクションに関与するオブジェクトを修正する要求を受信するように動作可能なインターフェースと、
不揮発性メモリ及び揮発性メモリを有する記憶装置と、
前記不揮発性メモリへの書き込みを、前記書き込みの要求が受信された順序と異なる順序で続行することを潜在的に可能にする記憶装置コントローラーと、
アクションを実行するように動作可能なＩ／Ｏマネージャーであって、前記アクションは、
前記オブジェクトを前記記憶装置の第１の記憶位置において特定するステップと、
前記トランザクションとの関係において前記オブジェクトに対して行われた変更を含む、前記オブジェクトの論理的コピーを作成するステップと、
前記論理的コピーを記憶するための、前記記憶装置の第２の記憶位置を決定するステップと、
変更された前記論理的コピーを前記第２の記憶位置に書き込む要求を送信するステップと、
前記論理的コピーが前記第２の記憶位置に記憶されていることを示すように揮発性データ構造を更新するステップと、
を含むＩ／Ｏマネージャーと、
アクションを実行するように動作可能なリカバリマネージャーであって、前記アクションは、
前記オブジェクトの変更された前記論理的コピー、及び、前記オブジェクトに原子性を有して結合されている少なくとも１つの他のオブジェクトのそれぞれに対する変更された論理的コピーが、前記第２の記憶位置に書き込まれたか否かを判断するステップと、
前記オブジェクトの前記論理的コピーと前記少なくとも１つの他のオブジェクトのそれぞれに対する前記論理的コピーとのうちの少なくとも一方に対応する変更が前記第２の記憶位置に書き込まれなかったと判断された場合に、前記オブジェクトの前記論理的コピー及び前記少なくとも１つの他のオブジェクトの前記論理的コピーに対応する前記第２の記憶位置に書き込まれた変更を放棄するステップと、
を含むリカバリマネージャーと、
を含み、
前記リカバリマネージャーは、前記オブジェクトの変更された前記論理的コピーの記憶されたハッシュと前記第２の記憶位置から読み出されたコンテンツにより計算されるハッシュとの比較に基づいて、前記オブジェクトの変更された前記論理的コピーが前記第２の記憶位置に書き込まれたかどうかを決定するように更に動作可能であり、もし前記ハッシュが等しければ前記オブジェクトの前記論理的コピーが前記第２の記憶位置に記憶されていることを示すよう別のデータ構造を更新するように更に動作可能である、計算機環境におけるシステム。
【請求項１２】
前記インターフェースは更に、前記トランザクションに関与する前記少なくとも１つの他のオブジェクトのうちの１つを修正する要求を受信するように動作可能であり、前記Ｉ／Ｏマネージャーは更に、付加的なアクションを実行するように動作可能であり、前記付加的なアクションは、
前記少なくとも１つの他のオブジェクトのうちの前記１つと前記オブジェクトを１つに結び付ける関連付けを作成するステップと、
変更された前記論理的コピーを前記第２の記憶位置に書き込む要求の前記送信と共に、前記関連付けを書き込む要求を前記記憶装置コントローラーへ送信するステップと、
を含む、請求項１１に記載のシステム。
【請求項１３】
前記揮発性データ構造を書き込む要求、及び、前記記憶装置の前記揮発性メモリから前記不揮発性メモリへデータを掃き出すように前記記憶装置コントローラーに指示するフラッシュ要求を、前記記憶装置コントローラーへ送信するように動作可能なチェックポイントマネージャーを更に含む、請求項１１に記載のシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  ディスクの性能を向上させるために、ディスクの製造者はキャッシュを有したディスクを編み出した。これらのキャッシュはかつてディスクからデータを読み出す際に用いられたが、最近ではディスクにデータを書き込む際にも用いられている。特に、データがディスクに書き込まれることをオペレーティングシステムが要求する時、ディスクコントローラーが、データが実際にディスクキャッシュから不揮発性ディスクメモリへ転送される前に、データが書き込まれたことを報告することがある。そしてまた、不揮発性ディスクメモリにデータが書き込まれる順序が、ディスクコントローラーがデータを受け取る順序とは異なることがある。これらの振る舞いは、整合性を維持しようとするシステムにとっては問題となる。
【０００２】
[0002]  本明細書において請求される対象は、上述されたような環境においてのみ欠点のいくらかを解決し、あるいは動作する実施態様に限定されるものではない。それよりはむしろ、この背景は、本明細書において説明されるいくつかの実施態様が実施され得る１つの例示的な技術分野を明らかにするために提供されたにすぎないものである。
【発明の概要】
【０００３】
[0003]  簡潔に述べれば、本明細書において説明される主題の側面は、記憶装置システムにおける整合性を維持することに関する。いくつかの側面では、トランザクションとの関係において１つ又は複数のオブジェクトが更新されることができる。オブジェクトの更新と共に、そのオブジェクトの論理的コピーが得られ、修正されることができる。更新された論理的コピーの書き込み要求が、記憶装置コントローラーへ送信される。この論理的コピーは、オリジナルのコピーを上書きしない。要求の送信と共に、ディスク上に記憶を行うため、データ構造が記憶装置コントローラーに提供される。このデータ構造は、ディスクに書き込まれる予定の１つ又は複数のオブジェクトを示し、ディスクに書き込まれる予定であるコンテンツを示す検証データを含むことができる。リカバリの間、このデータ構造を用いて、オブジェクトの全てが正しくディスクに書き込まれたかどうかを判定することができる。
【０００４】
[0004]  この概要は、以下の詳細な説明において更に説明される主題のいくつかの側面を簡潔に特定するために提供されたものである。この概要は、請求項に係る対象の主要な又は本質的な特徴を特定することを意図したものではなく、請求項に係る対象の範囲を限定するために用いられることを意図したものでもない。
【０００５】
[0005]  「本明細書において説明される主題」という文言は、文脈上明らかにそれ以外のことを指し示すのでない限り、詳細な説明において説明される主題を意味する。「側面」という用語は、「少なくとも１つの側面」と解されなければならない。詳細な説明において説明される主題の側面を特定することは、請求項に係る対象の主要な又は本質的な特徴を特定することを意図するものではない。
【０００６】
[0006]  上述の側面及び本明細書において説明される主題の他の側面は、例として示されるものであり、同様の参照番号が類似の構成要素を示している以下の添付された図面に限定されるものではない。
【図面の簡単な説明】
【０００７】
【図１】[0007]  図１は、本明細書において説明される主題の側面が組み込まれることができる例示の汎用計算機環境を表すブロック図である。
【図２】[0008]  図２は、本明細書において説明される主題の側面が動作し得るシステムのコンポーネントの例示的な構成を表すブロック図である。
【図３】[0009]  図３は、本明細書において説明される主題の側面を示すブロック図である。
【図４】[0010]  図４は、本明細書において説明される主題の側面に従って単独のオブジェクトがトランザクションとの関係において修正される場合に行われることができる例示のアクションを概略的に表すフロー図である。
【図５】[0011]  図５は、本明細書において説明される主題の側面に従って多数のオブジェクトがトランザクションとの関係において修正される場合に行われることができる例示のアクションを概略的に表すフロー図である。
【発明を実施するための形態】
【０００８】
＜定義＞
[0012]  本明細書において用いられるように、「含む」という用語及びその変体は、「含むが、それには限定されない」ということを意味する制限のない用語と解されなければならない。「又は」という用語は、文脈上明らかにそれ以外のことを述べるのでない限り、「及び／又は」と解されなければならない。「基づいて」という用語は、「少なくとも一部分が基づいて」と解されなければならない。「１つの実施態様」及び「実施態様」という用語は、「少なくとも１つの実施態様」と解されなければならない。「別の実施態様」という用語は、「少なくとも１つの他の実施態様」と解されなければならない。他の定義は、明示的なものも暗示的なものも、以下において含まれることがある。
【０００９】
＜例示の動作環境＞
[0013]  図１は、本明細書において説明される主題の側面が実現され得る相応しい計算機システム環境１００の例を示す。計算機システム環境１００は、相応しい計算機環境の１つの例にすぎず、本明細書において説明される主題の側面についての使用又は機能の範囲に関して、如何なる限定をも示唆することを意図したものではない。計算機環境１００はまた、例示の動作環境１００の中に示されたコンポーネントのいずれか１つ、又はその組み合わせに関係する如何なる依存性又は要求を有するものと解釈されてもならない。
【００１０】
[0014]  本明細書において説明される主題の側面は、多数の他の汎用又は専用の計算機システム環境又は構成と共に使用可能である。本明細書において説明される主題の側面と共に用いられるのに適したものであり得る、周知の計算機システム、環境、又は構成の多くの例は、パーソナルコンピューター、サーバーコンピューター、ハンドヘルド又はラップトップデバイス、マルチプロセッサーシステム、マイクロコントローラーベースのシステム、セットトップボックス、プログラマブル家電製品、ネットワークＰＣ、ミニコンピューター、メインフレームコンピューター、携帯情報端末（ｐｅｒｓｏｎａｌ  ｄｉｇｉｔａｌ  ａｓｓｉｓｔａｎｔｓ：ＰＤＡｓ）、ゲームデバイス、プリンター、セットトップやメディアセンターや他の電気製品を含む電気製品、車載若しくは付属の計算機、他のモバイルデバイス、上記システム若しくはデバイスのいくつかを含む分散コンピューティング環境等を含む。
【００１１】
[0015]  本明細書において説明される主題の側面は、コンピューターによって実行されるプログラムモジュール等のコンピューター実行可能命令についての一般的な文脈の中で説明されることができる。通常、プログラムモジュールは、特定のタスクを実施する、又は特定の抽象的データ型を実装する、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含む。本明細書において説明される主題の側面はまた、通信ネットワークを通じてリンクされているリモート処理装置がタスクを実施する分散コンピューティング環境において実行されることができる。分散コンピューティング環境において、プログラムモジュールは、ローカル及びリモートコンピューター双方の、メモリ記憶装置を含む記憶媒体に配置されることができる。
【００１２】
[0016]  図１を参照すると、本明細書において説明される主題の側面を実現するための例示のシステムは、コンピューター１１０の形で表された汎用の計算機を含む。コンピューターは、命令を実行する能力のある任意の電子デバイスを含むことができる。コンピューター１１０のコンポーネントは、処理装置１２０、システムメモリ１３０、及びシステムメモリを含む様々なシステムコンポーネントを処理装置１２０に結合するシステムバス１２１を含むことができる。システムバス１２１は、様々なバスアーキテクチャーの何れかを用いた、メモリバス又はメモリコントローラー、周辺機器バス、及びローカルバスを含むバス構造のいくつかのタイプのうち、任意のものであり得る。例として、また限定ではなく、そのようなアーキテクチャーは、インダストリスタンダードアーキテクチャー（Ｉｎｄｕｓｔｒｙ  Ｓｔａｎｄａｒｄ  Ａｒｃｈｉｔｅｃｔｕｒｅ：ＩＳＡ）バス、マイクロチャネルアーキテクチャー（Ｍｉｃｒｏ  Ｃｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ：ＭＣＡ）バス、エンハンスドＩＳＡ（Ｅｎｈａｎｃｅｄ  ＩＳＡ：ＥＩＳＡ）バス、ビデオエレクトロニクス標準化協会（Ｖｉｄｅｏ  Ｅｌｅｃｔｒｏｎｉｃｓ  Ｓｔａｎｄａｒｄｓ  Ａｓｓｏｃｉａｔｉｏｎ：ＶＥＳＡ）ローカルバス、メザニンバスとしても知られる周辺機器インターコネクト（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ：ＰＣＩ）バス、周辺機器インターコネクト拡張（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ  Ｅｘｔｅｎｄｅｄ：ＰＣＩ−Ｘ）バス、アドバンスドグラフィックスポート（Ａｄｖａｎｃｅｄ  Ｇｒａｐｈｉｃｓ  Ｐｏｒｔ：ＡＧＰ）、及びＰＣＩエクスプレス（ＰＣＩ  ｅｘｐｒｅｓｓ：ＰＣＩｅ）を含む。
【００１３】
[0017]  コンピューター１１０は、通常、様々なコンピューター読み取り可能媒体を含む。コンピューター読み取り可能媒体は、コンピューター１１０がアクセスすることができる任意の利用可能な媒体であり得ると共に、揮発性及び不揮発性媒体の双方、並びにリムーバブル及び非リムーバブル媒体の双方を含む。例として、また限定ではなく、コンピューター読み取り可能媒体は、コンピューター記憶媒体及び通信媒体を含むことができる。
【００１４】
[0018]  コンピューター記憶媒体は、コンピューター読み取り可能命令、データ構造、プログラムモジュール、又は他のデータ等の情報を記憶するための任意の方法又は技術によって実装された、揮発性及び不揮発性媒体の双方、並びにリムーバブル及び非リムーバブル媒体の双方を含む。コンピューター記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュメモリ若しくは他のメモリ技術、ＣＤ−ＲＯＭ、デジタル多用途ディスク（ｄｉｇｉｔａｌ  ｖｅｒｓａｔｉｌｅ  ｄｉｓｃｓ：ＤＶＤｓ）若しくは他の光ディスク記憶装置、磁気カセット、磁気テープ、磁気ディスク記憶装置若しくは他の磁気記憶装置、又は、所望の情報を格納するのに用いることができコンピューター１１０がアクセスすることができる任意の他の媒体を含む。
【００１５】
[0019]  通信媒体は、通常、コンピューター読み取り可能命令、データ構造、プログラムモジュール、又は他のデータを、搬送波又は他の伝送メカニズム等の変調データ信号の形で具現化し、任意の情報配送媒体を含む。「変調データ信号」という用語は、その信号の中に情報を符号化するような方法でその特性の１つ又は複数が調整され又は変化を付けられた信号を意味する。例として、また限定ではなく、通信媒体は、有線ネットワーク又は直接有線接続等の有線媒体、及び、音響、ＲＦ、赤外、又は他の無線媒体等の無線媒体を含む。上記のうち何れかの組み合わせもまた、コンピューター読み取り可能媒体の範囲内に含まれるべきである。
【００１６】
[0020]  システムメモリ１３０は、リードオンリーメモリ（ｒｅａｄ  ｏｎｌｙ  ｍｅｍｏｒｙ：ＲＯＭ）１３１及びランダムアクセスメモリ（ｒａｎｄｏｍ  ａｃｃｅｓｓ  ｍｅｍｏｒｙ：ＲＡＭ）１３２等の揮発性及び／又は不揮発性メモリの形式のコンピューター記憶媒体を含む。基本入出力システム１３３（ｂａｓｉｃ  ｉｎｐｕｔ／ｏｕｔｐｕｔ  ｓｙｓｔｅｍ：ＢＩＯＳ）は、スタートアップの間等にコンピューター１１０内部の構成要素間で情報を伝送するのに役立つ基本ルーチンを収容し、通常、ＲＯＭ１３１に格納される。ＲＡＭ１３２は、通常、処理装置１２０によって直接アクセス可能であり及び／又は現在動作が行われている、データ及び／又はプログラムモジュールを収容する。例として、また限定ではなく、図１は、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、及びプログラムデータ１３７を示す。
【００１７】
[0021]  コンピューター１１０はまた、他のリムーバブル／非リムーバブルで揮発性／不揮発性のコンピューター記憶媒体を含むことができる。単なる例として、図１は、非リムーバブルで不揮発性の磁気媒体に対する読み出し又は書き込みを行うハードディスクドライブ１４１、リムーバブルで不揮発性の磁気ディスク１５２に対する読み出し又は書き込みを行う磁気ディスクドライブ１５１、及びリムーバブルで不揮発性のＣＤ  ＲＯＭ又は他の光媒体等の光ディスク１５６に対する読み出し又は書き込みを行う光ディスクドライブ１５５を示す。例示の動作環境において用いられることができる他のリムーバブル／非リムーバブルで揮発性／不揮発性のコンピューター記憶媒体は、磁気テープカセット、フラッシュメモリカード、デジタル多用途ディスク、他の光ディスク、デジタルビデオテープ、ソリッドステートドライブ、ソリッドステートＲＡＭ、ソリッドステートＲＯＭ、２つ又はそれ以上の記憶媒体を含むハイブリッドデバイス、個々のデバイスが類似の及び／又は異なる特性を含む単独のデバイスとして論理的に取り扱われる複数の記憶装置のセット、等を含む。ハードディスクドライブ１４１は、通常、インターフェース１４０等の非リムーバブルメモリインターフェースを通じてシステムバス１２１に接続され、磁気ディスクドライブ１５１及び光ディスクドライブ１５５は、通常、インターフェース１５０等のリムーバブルメモリインターフェースによってシステムバス１２１に接続される。
【００１８】
[0022]  ローカルな記憶装置にアドレス指定するインターフェースに加えて、インターフェース１４０は、ストレージエリアネットワーク（ｓｔｏｒａｇｅ  ａｒｅａ  ｎｅｔｗｏｒｋ：ＳＡＮ）ベースのインターフェース、ネットワークアドレス指定ストレージ（ｎｅｔｗｏｒｋ  ａｄｄｒｅｓｓｅｄ  ｓｔｏｒａｇｅ：ＮＡＳ）ベースのインターフェース、ＳＡＮやＮＡＳを含むハイブリッドインターフェース等を含むことができる。ＳＡＮ及び／又はＮＡＳは、ファイバチャネル、ＳＣＳＩ、ｉＳＣＳＩ、ＰＣＩ−Ｘ、イーサーネット（登録商標）、ＵＳＢ、又は記憶装置と通信するための他のいくつかの相互接続技術を用いることができる。
【００１９】
[0023]  上で議論され、図１に示されたドライブ及びそれに関連したコンピューター記憶媒体は、コンピューター読み取り可能命令、データ構造、プログラムモジュール、及びコンピューター１１０のための他のデータの記憶を提供する。図１において、例えば、ハードディスクドライブ１４１は、オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、及びプログラムデータ１４７を記憶するように示されている。これらのコンポーネントは、オペレーティングシステム１３４、アプリケーションプログラム１３５、他のプログラムモジュール１３６、及びプログラムデータ１３７と同じものであるか、又は異なるものであるか、その何れでもあり得ることに注意されたい。オペレーティングシステム１４４、アプリケーションプログラム１４５、他のプログラムモジュール１４６、及びプログラムデータ１４７は、最低でもそれらが異なるコピーであることを示すために、本明細書においては異なる番号を与えられている。
【００２０】
[0024]  ユーザーは、キーボード１６２、及び、通例はマウス、トラックボール、又はタッチパッドと呼ばれるポインティングデバイス１６１等の入力デバイスを通じて、コンピューター１１０にコマンド及び情報を入力することができる。他の入力デバイス（不図示）は、マイクロフォン、ジョイスティック、ゲームパッド、衛星放送受信アンテナ、スキャナー、タッチスクリーン、手書き用タブレット等を含むことができる。これらの及び他の入力デバイスは、多くの場合、システムバスに結合されたユーザー入力インターフェース１６０を通じて処理装置１２０に接続されるが、パラレルポート、ゲームポート、又はユニバーサルシリアルバス（ｕｎｉｖｅｒｓａｌ  ｓｅｒｉａｌ  ｂｕｓ：ＵＳＢ）等の他のインターフェース及びバス構造によって接続されることもできる。
【００２１】
[0025]  モニター１９１又は他のタイプの表示デバイスもまた、ビデオインターフェース１９０等のインターフェースを介してシステムバス１２１に接続される。モニターに加えて、コンピューターはまた、スピーカー１９７及びプリンター１９６等の他の周辺機器出力デバイスを含むことができ、それらは出力周辺機器インターフェース１９５を通じて接続されることができる。
【００２２】
[0026]  コンピューター１１０は、リモートコンピューター１８０等の１つ又は複数のリモートコンピューターへの論理的接続を用いたネットワーク環境において動作することができる。リモートコンピューター１８０は、パーソナルコンピューター、サーバー、ルーター、ネットワークＰＣ、ピアデバイス、又は他の一般的なネットワークノードであることが可能であり、図１においてはメモリ記憶装置１８１のみが示されているが、一般には、コンピューター１１０に関して上述された多くの又は全ての構成要素を含む。図１に描かれた論理的接続は、ローカルエリアネットワーク（ｌｏｃａｌ  ａｒｅａ  ｎｅｔｗｏｒｋ：ＬＡＮ）１７１及びワイドエリアネットワーク（ｗｉｄｅ  ａｒｅａ  ｎｅｔｗｏｒｋ：ＷＡＮ）を含むが、他のネットワークを含むこともできる。そのようなネットワーク環境は、オフィス、全企業のコンピューターネットワーク、イントラネット、及びインターネットにおいては一般的なものである。
【００２３】
[0027]  ＬＡＮネットワーク環境において使用される場合、コンピューター１１０は、ネットワークインターフェース又はアダプター１７０を通じてＬＡＮ１７１に接続される。ＷＡＮネットワーク環境において使用される場合、コンピューター１１０は、モデム１７２、又は、インターネット等のＷＡＮを介して通信を確立するための他の手段を含むことができる。モデム１７２は、内蔵型であっても外付け型であってもよく、ユーザー入力インターフェース１６０又は他の適切なメカニズムを介してシステムバス１２１に接続されることができる。ネットワーク環境において、コンピューター１１０に関して説明されたプログラムモジュール又はその一部分は、リモートのメモリ記憶装置に格納されることができる。例として、また限定ではなく、図１は、メモリデバイス１８１上に存在するものとしてリモートアプリケーションプログラム１８５を示す。説明されたネットワーク接続は例示であり、コンピューター間に通信リンクを確立する他の手段が使用されることが可能であることは、十分理解されるであろう。
【００２４】
＜整合性＞
[0028]  既に言及されたように、ディスクに対してキャッシュをすること及び乱れた順序で書き込みを行うことは、整合性を維持しようとするシステムにとっては問題となる。本明細書において時々、トランザクションという用語が用いられる。トランザクションは、例えば、原子性を有すること、整合性を有すること、独立性を有すること、及び永続性を有することを含む、様々な特性を含むことができる一群の動作である。本明細書において用いられるように、トランザクションは、少なくとも原子性を有する特性を含み、他の上記特性のうち１つ又は複数を含むことができる。
【００２５】
[0029]  原子性を有する特性は、その一群の全ての動作が成功するか、又は、その一群の動作による実質的な影響（例えばファイルの変更）が取り消され、放棄され、若しくは不適用とされるか、その何れかである一群の動作を表すために用いられる。単純化のため、放棄されるという用語は、トランザクションとの関係において行われた如何なる変更もその変更に関連するオブジェクトに反映されていないことの確証をとるのに適した、何らかのアクションを行うことを表すものとして、本明細書において時々用いられる。放棄することは、更新動作を取り消し、放棄し、不適用とすること等を含むことができる。
【００２６】
[0030]  例えば、銀行の送金は、１つの口座からの借方ともう一方の口座への貸方という２つの動作の、原子性を有した一組として実現されることができる。もしこの２つの動作が両方とも成功しなければ、その時は、送金は不公平なことに、銀行に有利であるか、口座保有者に有利であるかの何れかとなる。このように、トランザクションにおいて両方の動作が成功するか、あるいは、成功した何れかの動作による実質的な影響（例えば、ディスク又はメモリに格納されたデータ）が放棄される。
【００２７】
[0031]  本明細書において「トランザクション」が使用される場合、トランザクションに関与するコンポーネントが、トランザクションが発生していることを知っていることを意味するかもしれないが、必ずしもそうであるわけではない。例えば、あるコンポーネントが、２つ又はそれ以上のオブジェクトがトランザクションに関与していることを明示的に通知されることができる。そのコンポーネントは、次いで、上述されたように、そのオブジェクトへの動作に対して原子性を有する特性を適用することができる。別の例として、あるコンポーネントが、トランザクションが発生していることを必ずしも通知されないかもしれない。その代わり、そのコンポーネントは、そのコンポーネントに与えられた２つ又はそれ以上の動作が首尾よく完了されるべきであること、あるいは、その動作による影響が放棄されるべきであることの何れかを決定し、又は指示されることができる。
【００２８】
[0032]  上記の第１の例において、コンポーネントは、オブジェクトがトランザクションに関与しているという明示的な情報を与えられた。第２の例において、コンポーネントは、トランザクションが２つ又はそれ以上の動作に影響を及ぼすことを通知されなかったかもしれない。そうではなく、そのコンポーネントは、その動作に対して原子性を有する特性を適用すべきであることを指示されることができる。本明細書において説明される主題の側面は、上記の両方の例に適用可能である。
【００２９】
[0033]  更に、１つ又は複数のオブジェクトが「トランザクションとの関係において」修正される場合、このことは、原子性を有する特性が、１つ又は複数のオブジェクトを修正するために発せられた更新動作に関して適用されるという仮定があることを意味する。例えば、トランザクションとの関係において修正を要求するアプリケーションは、修正を実行するための全ての更新動作が成功するであろうこと、あるいは、成功した又は成功したであろう更新が放棄されるであろうことの何れかを、問題なく仮定することができる。
【００３０】
[0034]  図２は、本明細書において説明される主題の側面が動作し得るシステムのコンポーネントの例示的な構成を表すブロック図である。図２に示されたコンポーネントは、例示的なものであり、必要とされ得る又は包含し得るコンポーネントの全てを含むものであることを意味していない。他の実施態様において、図２と関連して説明されるコンポーネント及び／又は機能は、本明細書において説明される主題の側面の趣旨又は範囲から逸脱することなく、（図示され、又は図示されていない）他のコンポーネントに含まれることができ、又はサブコンポーネントに配置されることができる。いくつかの実施態様において、図２と関連して説明されるコンポーネント及び／又は機能は、多数のデバイスにわたって分散されることができる。
【００３１】
[0035]  図２に目を向けると、システム２０５は、１つ又は複数のアプリケーション２１０、ＡＰＩ２１５、整合性コンポーネント２２０、記憶装置２５０、通信メカニズム２５５、及び他のコンポーネント（不図示）を含むことができる。システム２０５は、１つ又は複数の計算機から構成されることができる。そのような計算機は、例えば、パーソナルコンピューター、サーバーコンピューター、ハンドヘルド又はラップトップデバイス、マルチプロセッサーシステム、マイクロコントローラーベースのシステム、セットトップボックス、プログラマブル家電製品、ネットワークＰＣ、ミニコンピューター、メインフレームコンピューター、携帯電話、携帯情報端末（ＰＤＡｓ）、ゲームデバイス、プリンター、セットトップやメディアセンターや他の電気製品を含む電気製品、車載若しくは付属の計算機、他のモバイルデバイス、上記システム若しくはデバイスのいくつかを含む分散コンピューティング環境等を含むことができる。
【００３２】
[0036]  システム２０５が単独のデバイスから成る場合、システム２０５として振る舞うように構成されることができる例示的なデバイスは、図１のコンピューター１１０から成る。システム２０５が複数のデバイスから成る場合、複数のデバイスのそれぞれは、同様に又は異なるように構成された図１のコンピューター１１０から成ることができる。
【００３３】
[0037]  整合性コンポーネント２２０は、リカバリマネージャー２２５、チェックポイントマネージャー２３０、Ｉ／Ｏマネージャー２３５、及び他のコンポーネント（不図示）を含むことができる。本明細書において用いられるように、コンポーネントという用語は、デバイスの全て又は一部分、１つ又は複数のソフトウェアモジュールの集合又はその一部分、１つ又は複数のソフトウェアモジュール又はその一部分及び１つ又は複数のデバイス又はその一部分からなるいくつかの組み合わせ等を含むものと解されなければならない。
【００３４】
[0038]  通信メカニズム２５５は、システム２０５が他のエンティティと通信することを可能にする。例えば、通信メカニズム２５５は、システム２０５がリモートホスト上のアプリケーションと通信することを可能にすることができる。通信メカニズム２５５は、ネットワークインターフェース若しくはアダプター１７０、モデム１７２、又は図１と関連して説明されたように通信を確立するための任意の他のメカニズムであり得る。
【００３５】
[0039]  記憶装置２５０は、データへのアクセスを提供する能力を有した任意の記憶媒体である。記憶装置は、揮発性メモリ（例えばキャッシュ）及び不揮発性メモリ（例えば永続性記憶装置）を含むことができる。データという用語は、１つ又は複数のコンピューター記憶要素によって表現されることができる如何なるものも含むように広く解されなければならない。論理上、データは、揮発性又は不揮発性メモリにおいて一連の１と０の並びとして表現されることができる。非２進法の記憶媒体を有するコンピューターにおいて、データは、その記憶媒体の能力に応じて表現されることができる。データは、数字や文字等の単純なデータ型、階層化され、リンク付けされ、又は他の関連付けされたデータ型、多数の他のデータ構造又は単純なデータ型を含むデータ構造、等を含む、異なる型のデータ構造に編成されることができる。データのいくつかの例は、情報、プログラムコード、プログラム状態、プログラムデータ、他のデータ等を含む。
【００３６】
[0040]  記憶装置２５０は、ハードディスク記憶装置、他の不揮発性記憶装置、ＲＡＭ等の揮発性メモリ、他の記憶装置、上記のいくつかの組み合わせ等から構成されることができ、多数のデバイスにわたって分散されることができる。記憶装置２５０は、外付け型、内蔵型であることが可能であり、あるいは、システム２０５に内蔵されるものと外付けされるものの両方からなる複数のコンポーネントを含むことができる。
【００３７】
[0041]  記憶装置２５０は、記憶装置コントローラー２４０を介してアクセスされることができる。本明細書において用いられるように、アクセスは、データの読み出し、データの書き込み、データの消去、データの更新、上記のうち２つ又はそれ以上を含む組み合わせ等を含むことができる。記憶装置コントローラー２４０は、記憶装置２５０へのアクセス要求を受信することができ、そのような要求を適切に実行することができる。記憶装置コントローラー２４０は、データが受信された順序で記憶装置２５０に書き込まれることを保証するようには構成されないかもしれない。更に、記憶装置コントローラー２４０は、要求されたデータを記憶装置２５０の不揮発性メモリに実際に書き込み終える前に、そのデータを書き込んだことを知らせることができる。
【００３８】
[0042]  １つ又は複数のアプリケーション２１０は、リソースを生成し、削除し、又は更新するトランザクションに関与することができる任意のプロセスを含む。そのようなプロセスは、ユーザーモード又はカーネルモードで実行することができる。本明細書において用いられるように、「プロセス」という用語及びその変体は、１つ又は複数の従来的なプロセス、スレッド、コンポーネント、ライブラリ、タスクを実施するオブジェクト等を含むことができる。プロセスは、ハードウェア、ソフトウェア、又は、ハードウェア及びソフトウェアの組み合わせによって実装されることができる。実施態様において、プロセスは、どのように呼び出されたのであっても、アクションを実行する能力がある、又はアクションを実行するのに用いられる、任意のメカニズムである。プロセスは、多数のデバイス又は単独のデバイスにわたって分散されることができる。１つ又は複数のアプリケーション２１０は、（例えば、ファンクション／メソッド呼び出しを介して）ＡＰＩ２１５を通じてＩ／Ｏマネージャー２３５にファイルシステム要求を渡すことができる。
【００３９】
[0043]  Ｉ／Ｏマネージャー２３５は、どのようなＩ／Ｏ要求を記憶装置コントローラー２４０（又は他のいくつかの中間コンポーネント）に対して発行するかを決定することができる。Ｉ／Ｏマネージャー２３５はまた、ファイルシステム要求に関連した動作が進行し、完了し、又は失敗した時に、１つ又は複数のアプリケーション２１０へデータを返すことができる。ファイルシステム要求がトランザクションを伴う場合、Ｉ／Ｏマネージャー２３５は、トランザクションマネージャー（不図示）がトランザクションを正しく管理できるようにトランザクションマネージャーに通知することができる。いくつかの実施態様において、トランザクションマネージャーの機能は、Ｉ／Ｏマネージャー２３５の中に含まれることができる。
【００４０】
[0044]  以下において、障害後の整合性及びリカバリを容易にする方法で記憶装置２５０にデータを書き込むための、例示的なアルゴリズムが提示される。このアルゴリズムに提示されるように、それぞれのオブジェクトは、ｎがシステムへのオブジェクトを識別するとして、Ｄｎによって表される。オブジェクトは、直列可能である（即ち、記憶装置２５０上のデータとして表現されることが可能である）と仮定される。オブジェクトテーブルが、それぞれのオブジェクトの識別子を記憶装置２５０上のオブジェクトの記憶位置と関連付ける。
【００４１】
[0045]  修正のためのトランザクションにより最初にＤｎが更新される時、Ｄｎは、オブジェクトテーブルにおいてｎを用いてその記憶位置を探索することによって、記憶位置が決定される。この例で用いるために、記憶装置２５０上のＤｎの記憶位置はＬ１と呼ばれる。
【００４２】
[0046]  次に、Ｌ１のコンテンツが記憶装置２５０から読み出され、オブジェクトが非直列化される（例えば、直列化形式からそのオブジェクトの構造へ変換される）ことができ、そのオブジェクトの修正されるべき一部分がメインシステムメモリ内へコピーされる。更新は、メモリ内の当該一部分（又はそのコピー）に対して実施される。メモリ内の修正される一部分と関連して、記憶装置２５０上の１つ又は複数の新たな記憶位置（これをＬ２と呼ぶ）が、その修正された一部分のために指定される。
【００４３】
[0047]  メインシステムメモリ内のこれらのコピーは、本明細書において時々、オブジェクトの「論理的コピー」と呼ばれる。オブジェクトの論理的コピーは、そのオブジェクトを表現するために用いられることができる１つ又は複数のデータ構造を含む。論理的には、論理的コピーはオブジェクトの複製である。物理的には、論理的コピーは、そのオブジェクトの複製を生成するために用いられることができるデータ（他のデータへのポインターを含む）を含むことができる。例えば、１つの具体化において、論理的コピーは、オブジェクトの実際のコピー（例えば、ビットバイビットのコピー）、又はそのオブジェクトを生成するために用いられることができるデータを含むデータ構造であり得る。別の具体化において、修正されていない論理的コピーは、オリジナルのオブジェクトを参照する１つ又は複数のポインターを含むことができる。論理的コピーが修正されると、論理的コピー中のポインターは、（例えば、論理的コピーの変更された一部分のために）新たなメモリ記憶位置を参照することができ、その一方、他のポインターは、（例えば、論理的コピーの変更されていない一部分のために）オリジナルのオブジェクトの一部分を参照することができる。ポインターを使用することにより、オリジナルのオブジェクトの修正されたデータを修正されていないデータと共に用いて修正されたコピーが構築されることができる。論理的コピーの生成は、オブジェクトの複製を生成するのに必要とされる記憶を削減するために実施されることができる。
【００４４】
[0048]  更に、直列化及び非直列化が本明細書において時々言及されるが、本明細書において説明される主題の側面を、慣習的に直列化及び非直列化として考えられているものに限定する意図は何ら存在しない。１つの実施態様において、直列化されたバージョンは、非直列化されたバージョンとビット毎に全く同一であることがある。別の実施態様において、直列化されたバージョンのビットは、非直列化されたバージョンにおけるビットとは異なるフォーマット及び順序にパッケージされることができる。実際、１つの実施態様において、直列化及び非直列化は、オブジェクトを表現するデータを記憶装置から記憶し検索するための、如何なるメカニズムをも意味するものと理解されなければならない。他のメカニズムは、例えば、オブジェクトの属性をテキスト形式で記憶装置に書き込むこと、オブジェクトの属性を記憶装置においてマークアップ言語に符号化すること、オブジェクトの属性及び他の特徴を記憶装置上に記憶する他の方法等を含むことができる。
【００４５】
[0049]  システムの自由裁量で（例えば、トランザクションが完遂した後、又は何らかの他の時点で）、システムは、修正された論理的コピーを直列化し持続性のある媒体に戻すことができるが、記憶位置Ｌ２に対してそのようにする。修正された論理的コピーを新たな記憶位置に書き戻すことを意図したものは、書き込みプランと呼ばれる。書き込みプランは、１つ又は複数のオブジェクトに対する任意の数の更新を含むことができる。書き込みプランは、１つ以上のトランザクションにおいて発生する変更を参照することができる。多数の書き込みプランが単独の書き込みプランに組み合わせられることができる。
【００４６】
[0050]  チェックポイントの直後で修正が発生した場合、（多数の記憶位置に複製されることができる）リカバリブロックと呼ばれるブロックが、その修正された論理的コピーの開始位置（即ちＬ２）を指し示すように修正される。Ｌ２に存在するオブジェクト内のフィールドは、次に書き込まれる記憶位置を指し示す。このフィールドは、書き込みプランのチェーンにおけるリンクを表す。
【００４７】
[0051]  論理的コピーの書き込み要求の送信と共に、オブジェクトテーブルに対して修正が行われることができる。特に、オブジェクトの識別子によってインデックスを付された記憶位置の値は、修正された論理的コピーが記憶されるべき記憶位置の値（即ちＬ２）に設定されることができる。これは、引き続いて行われるオブジェクトＤｎの記憶位置の探索が、記憶位置Ｌ２即ちオブジェクトの新たなバージョンに向けられるように、行われるものである。
【００４８】
[0052]  もしトランザクションが１つ以上のオブジェクト、例えばＤｉ及びＤｊを修正するのであれば、これらのオブジェクトは、相互に「原子性を有して結合されている」とみなされ、１つの書き込みプランに書き込まれる。書き込みプランは、この関係性を（例えば、関与するオブジェクトへのリンクによって）特定することができる。
【００４９】
[0053]  任意の数のオブジェクトが、このような方法により存続することができる。定期的に、オブジェクトテーブルはまた、他のオブジェクトと同じ方法で記憶装置２５０に書き込まれることができる。
【００５０】
[0054]  記憶装置２５０へのオブジェクトテーブルの書き込み要求の送信と共に、記憶装置コントローラー２４０へフラッシュ（ｆｌｕｓｈ）コマンドも送信されることができる。フラッシュコマンドは、記憶装置コントローラー２４０に、その揮発性メモリから記憶装置２５０の不揮発性メモリへまだ書き込まれていない全てのデータを書き込むよう、指示する。
【００５１】
[0055]  定期的に、チェックポイントが発生することができる。チェックポイントは、記憶装置２５０によって記憶されているチェックポイントレコードによって示されることができる。チェックポイントは、任意の時点で書き込まれることができ、フラッシュ（ｆｌｕｓｈ）の後に持続性／永続性を有するようになることができる。持続性／永続性を有するとは、チェックポイントが記憶装置の不揮発性メモリ上に記憶されていることを意味する。
【００５２】
[0056]  チェックポイントが持続性／永続性を有するようになった後、オブジェクトのあらゆる古い未使用のコピーのために用いられているスペース（又はその一部分）が再利用されることができる。フラッシュが完了した後、次いで、リカバリブロックが、次の書き込みプランのチェーンの開始位置に指し示される。１つの実施態様において、リカバリブロックは、書き込みプランのチェーンの開始位置をオブジェクトテーブルの新たな記憶位置として指し示すことができる。
【００５３】
[0057]  図３は、本明細書において説明される主題の側面を示すブロック図であり、図３と関連して、より具体的な例が説明される。例示されるように、図３は、メインメモリ３０５及び記憶装置２５０を示す。直線３０７は、メインメモリ３０５と記憶装置２５０の間の境界線を表す。直線３０７の上側にあるオブジェクトはメインメモリ内のものであり、一方、直線３０７の下側にあるオブジェクトは記憶装置２５０の揮発性又は不揮発性メモリ内のものである。
【００５４】
[0058]  オブジェクト３１４−３１６は、メインメモリ３０５内に示されている。具体化において、オブジェクト３１４−３１６は、それぞれオブジェクト３１９−３２１の非直列化された論理的コピーである。オブジェクト３１９は、記憶装置２５０上の記憶位置１５００に配置され、オブジェクト３２０は、記憶装置２５０上の記憶位置２００に配置され、オブジェクト３２１は、記憶装置２５０上の記憶位置８００に配置されている。
【００５５】
[0059]  オブジェクトテーブル３１０は、記憶装置２５０上のオブジェクト３１４−３１６の記憶位置を示すキー値ペアを含む。キー値ペアは、オブジェクト３１４−３１６の識別子（ｎ）を用いてインデックス付けされる。
【００５６】
[0060]  トランザクションがオブジェクト３１６を（例えば、その名前をｆｏｏ．ｔｘｔに変更することによって）修正した場合、整合性コンポーネント（例えば、図２の整合性コンポーネント２２０）は、更新されたオブジェクトのための新たな記憶位置（例えば記憶位置８０１）を決定することができる。もしオブジェクトがファイルであれば、その名前をトランザクションとの関係において更新することにより更に、そのファイルを含むディレクトリも、同様にそのトランザクションに関与することになる。例えば、ファイル名が変更された場合、そのファイルを表すオブジェクト及びそのファイルを含むディレクトリを表すオブジェクトの両方が、トランザクションに関与することが必要とされる。この場合、そのオブジェクトを含むディレクトリはオブジェクト３１４として表され、更新されたディレクトリ（例えばオブジェクト３１８）の論理的コピーは記憶装置２５０内のオブジェクト３２３として表される。更に、テーブル３１０は、修正されたオブジェクト（即ちオブジェクト３１７及び３１８）の新たな記憶位置（即ち８０１及び１０００）を示すようにテーブル３１１に論理的に更新されている。
【００５７】
[0061]  トランザクションとの関係におけるオブジェクトの修正が別のオブジェクトに対する影響をも及ぼすことは、例えば図２のＩ／Ｏマネージャー２３５又は他のいくつかのコンポーネントによって、明示的に示され決定されることができる。
【００５８】
[0062]  ２つ又はそれ以上のオブジェクトがトランザクションの更新に関与している場合、既に言及されたように、これらのオブジェクトは、「原子性を有して結合されている」とみなされる。リカバリ動作において、トランザクションとの関係において変更された全てのオブジェクトに対して記憶装置２５０に変更が見つかるのでない限り、見つかった変更の全ては放棄される。言い換えれば、もしオブジェクトのうちの１つに対する変更が見つかったがオブジェクトのうちの別のものに対する変更が見つからなければ、オブジェクトのうちの前記１つに対する変更は放棄される。
【００５９】
[0063]  １つの実施態様において、２つ又はそれ以上のオブジェクトを原子性を有して結合するために、ポインターが記憶装置２５０に記憶され、あるいは記憶装置２５０内の各オブジェクトと関連付けられることができる。ポインターは、トランザクションに関与する別のオブジェクト（又はその一部分）の記憶位置を示すことができる。もしトランザクションに関与する更なるオブジェクトが存在しなければ、ポインターは、「デッドブロック」を指し示すことができ、又は、別の書き込みプランの「最初の（ｈｅａｄ）」オブジェクトの記憶位置を示すことができる。この最初のオブジェクトは、書き込みプランや、その書き込みプランの修正されたオブジェクト（又はその一部分）等を含むことができる。
【００６０】
[0064]  ファイルシステムは多くのトランザクションに関与し得るので、性能上の理由により、完了したトランザクションの「最後の」オブジェクトに対する変更を書き込む要求を行うのを、別のトランザクションが完了するまで待つことが望ましいかもしれない。トランザクションの最後のオブジェクトは、別の書き込みプランの「最初の」オブジェクトを指し示すべきポインターに関連付けられることができる。しかしながら、別のトランザクションが完了するまで、「最初の」オブジェクトの記憶位置は知られていないかもしれない。それ故、書き込みプランのチェーンを継続するために、書き込みプランの「最後の」オブジェクトは、別の書き込みプランの最初のオブジェクトに対し記憶位置が知られるまで、書き込まれないようにすることができる。
【００６１】
[0065]  トランザクションの「最後の」オブジェクトが不揮発性メモリに書き込まれる前に、もしディスクが電力を失うか、あるいは別の障害が生じると、上記の技法が、書き込みプランにおける変更が放棄されることを命ずる。トランザクションの頻度が低いシステムにおいてこのような結果を避けるために、いくつかの実施態様において、整合性コンポーネントは、１）別のトランザクションが完了するか、２）「最後の」オブジェクトをそのポインターと共に次の記憶位置に書き込む前にタイムアウト期間が経過するか、その何れか早い方まで待つことができ、又は、３）常に「最後の」オブジェクトをそのポインターと共に次の記憶位置に書き込むことができる。上記２）及び３）において、整合性コンポーネントは、「最後の」オブジェクトのための指し示すべき記憶位置を決定することができる。この記憶位置は、従って、別の書き込みプランの「最初の」オブジェクトを指し示すポインターを有することができる。「最後の」オブジェクトが指し示すこの記憶位置は、時々、「デッドブロック」と呼ばれる。このようにして、トランザクションの最中に行われた変更の損失が低減されることができる。
【００６２】
[0066]  次の記憶位置へのポインターに加えて、「指し示された」オブジェクトの正しいコンテンツを示すためのデータも同様に記憶装置２５０に記憶されることができる。例えば、指し示されたオブジェクトの正しいコンテンツを示すハッシュが記憶されることができる。
【００６３】
[0067]  図３に提示された例において、オブジェクト３２２に関連付けられたポインターは、オブジェクト３２３に関連付けられた記憶位置を指し示すことができる。このポインターは、この２つのオブジェクトを１つに結び付ける。リカバリの間に、もしこれらのオブジェクトの何れかが見つからないか、又はそれらが正しいコンテンツを有していなければ、見つかったオブジェクトによって表される変更は、放棄されることができる。
【００６４】
[0068]  記憶装置２５０の性質により、最初にどのオブジェクトが記憶装置２５０の不揮発性メモリに書き込まれるかに関する如何なる保証も存在しないことがある。もしオブジェクト３２２が最初に書き込まれオブジェクト３２３が書き込まれなければ、オブジェクト３２２からのポインターは、スプリアスなデータを有する記憶位置を指し示すであろう。しかしながら、その記憶位置におけるデータのハッシュを計算し、このハッシュをオブジェクト３２２と共に記憶されたハッシュと比較することによって、整合性コンポーネントは、オブジェクト３２３に関する無効なデータを検出することができる。この場合、リカバリの間、整合性コンポーネントは、オブジェクト３２２及び３２３によって表される変更を放棄することができる。
【００６５】
[0069]  リカバリブロック３３０は、データがチェックポイントの後に記憶されることが想定される第１の記憶位置（この場合は８０１）を指し示す。リカバリブロック３３０はまた、第１の記憶位置に記憶されたオブジェクトの正しいコンテンツを用いて計算されるハッシュを含む、又はそのハッシュに関連付けられることができる。
【００６６】
[0070]  リカバリの間、初めに、オブジェクトテーブルの最後に知られた有効なバージョンが復元される。オブジェクトテーブルの最後に知られた有効なバージョンは、記憶装置２５０の不揮発性メモリへの記憶が成功した最後の論理的なオブジェクトテーブルである。次いで、リカバリブロック３３０によって指し示されたものを手始めとして、書き込みプランが調査される。
【００６７】
[0071]  書き込みプランは、トランザクションに関与する全ての修正された論理的コピーを記憶装置２５０に書き込むことを意図したものであることを思い出されたい。書き込みプランは、その書き込みプランに関与するオブジェクトの記憶位置へのリンクと共にそのオブジェクトの数を示すデータによって、記憶装置上に符号化されることができる。１つの実施態様において、オブジェクトの数を示すデータは、書き込みプランの「最初の」オブジェクトに記憶されることができ、一方、次の記憶位置へのリンクを張るデータは、記憶装置２５０に書き込まれるそれぞれの要素と共に記憶されることができる。別の実施態様において、オブジェクトの数及び記憶位置へのリンクを含むデータ構造が、書き込みプランに関連付けられた複数の記憶位置のうちの１つ（例えば、「最初の」記憶位置）に、又は、それらの記憶位置とは別個に、記憶されることができる。別の実施態様において、書き込みプランは、次の記憶位置のみを含むことができる。
【００６８】
[0072]  １つの実施態様において、チェックポイントの後に生じる書き込みプランは、書き込みプラン間の「リンク」を持たずに不揮発性記憶装置上の既知の記憶位置に書き込まれることができる。この実施態様において、リカバリの間、リカバリマネージャーは、その既知の記憶位置からそれぞれの書き込みプランを読み出して、オブジェクトテーブル及び他の記憶されたデータ構造を、もし書き込みプランによって示された書き込みが成功すれば、適切なものに更新することができる。
【００６９】
[0073]  上記の例は、書き込みプランの要素を示すのに用いられ得るデータ構造の型の全てを含むものであること、又は包括的であることを意図するものではない。本明細書における教示に基づいて、当業者は、本明細書において説明される主題の側面の趣旨又は範囲から逸脱することなく、書き込みプランの要素を示すのに用いられ得る他のデータ構造を認識することができる。
【００７０】
[0074]  それぞれの書き込みプランが調査されると、その書き込みプランのオブジェクトが記憶装置２５０に書き込まれることが成功したかどうかが判定される。これは例えば、書き込みプランに関連付けられたそれぞれの記憶位置にあるコンテンツのハッシュを、その記憶位置へのリンクに関連付けられたハッシュと比較することによって、行われることができる。もしこれらのハッシュがその書き込みプランの全てのオブジェクトに対して等しければ、オブジェクトの新たな記憶位置を反映するようにオブジェクトテーブルが更新される。もしこれらのハッシュのいずれかが等しくなければ、リカバリは停止する。
【００７１】
[0075]  リカバリが終了した後、オブジェクトテーブルは、成功した書き込みプランによって更新された全てのオブジェクトのルートの記憶位置を有する。ここで、成功した書き込みプランが生じるのは、プランに関連付けられた全てのオブジェクトがディスクの不揮発性メモリに書き込まれることが成功した場合である。
【００７２】
[0076]  図２に戻り、ＡＰＩ２１５は、トランザクションに関与するオブジェクトの修正要求を受信することができる。これに応答して、Ｉ／Ｏマネージャー２３５は、そのオブジェクトを記憶装置の記憶位置（例えばＬ１）において見つけ出し、そのオブジェクトの論理的コピーを作成し、トランザクションとの関係においてそのオブジェクトに変更を加え、変更されたその論理的コピーを記憶するための第２の記憶位置（例えばＬ２）を決定し、その変更された論理的コピーの書き込み要求を記憶装置コントローラー２４０へ送信し、その論理的コピーが第２の記憶位置に記憶されたことを示すように揮発性データ構造（例えばオブジェクトテーブル３１０）を更新することができる。
【００７３】
[0077]  もしＡＰＩ２１５がトランザクションに関与する別のオブジェクトの修正要求を受信したら、Ｉ／Ｏマネージャー２３５は、当該別のオブジェクトと第１のオブジェクトを１つに結び付ける関連付け（例えば書き込みプラン）の作成を含む、更なるアクションを実行することができる。次いで、オブジェクトの修正を記憶装置に書き込む要求の送信と共に、Ｉ／Ｏマネージャー２３５はまた、その関連付けの書き込み要求を記憶装置コントローラー２４０へ送信することができる。
【００７４】
[0078]  チェックポイントマネージャー２３０は、揮発性データ構造（例えばオブジェクトテーブル）の書き込み要求及びフラッシュ（ｆｌｕｓｈ）要求を記憶装置コントローラー２４０へ送信するよう動作可能である。フラッシュ要求は、記憶装置２５０の揮発性メモリから不揮発性メモリへデータを一斉に掃き出す（ｆｌｕｓｈ）よう記憶装置コントローラー２４０に指示する。
【００７５】
[0079]  リカバリマネージャー２２５は、既に説明されたリカバリアクションを実行することができる。指し示された記憶位置に正しいコンテンツが含まれるかどうかを決定するに際して、リカバリマネージャー２２５は、変更された論理的コピーが第２の記憶位置に書き込まれたかどうかを、その変更された論理的コピーの記憶されたハッシュと当該第２の記憶位置から読み出されたコンテンツにより計算されるハッシュとの比較に基づいて、決定することができる。もしこれらのハッシュが等しければ、リカバリマネージャーは、更に、その論理的コピーが第２の記憶位置に記憶されたことを示すように別のデータ構造（例えば、最後に知られた有効な状態から構成されたオブジェクトテーブル）を更新するよう、動作可能である。記憶装置上の割り当てられた／解放されたデータ構造はまた、（例えば、書き込みプランが成功したために）有効な書き込みであることが現時点において知られている記憶位置と整合性を持つように更新されることができる。
【００７６】
[0080]  図４−５は、本明細書において説明される主題の側面に従って行われることができるアクションを概略的に表すフロー図である。説明を簡単にするため、図４−５と共に説明される技法は、一連の動作として表され、説明される。示された動作及び／又は動作の順序によって、本明細書において説明される主題の側面は限定されないことは、理解され認識されなければならない。１つの実施態様において、動作は以下に説明されるような順序で行われる。しかしながら、他の実施態様において、動作は、並列して、別の順序で、及び／又は、本明細書において提示及び説明されない他の動作と共に、行われることができる。更に、示された全ての動作が、本明細書において説明される主題の側面に従った技法を実現するのに必要とされるわけではない。加えて、当業者は、この技法が状態図による一連の相互関係を有した状態として、又は事象として、代わりに表現されることができることを理解し認識するであろう。
【００７７】
[0081]  図４は、本明細書において説明される主題の側面に従って単独のオブジェクトがトランザクションとの関係において修正される場合に行われることができる例示のアクションを概略的に表すフロー図である。ブロック４０５において、アクションが開始する。例えば、図２−３を参照して、ＡＰＩ２１５は、オブジェクト３１６内のデータの更新要求を受信することができる。
【００７８】
[0082]  ブロック４１０において、トランザクションの更新に関与するオブジェクトの指示が受信される。例えば、図２−３を参照して、Ｉ／Ｏマネージャー２３５は、オブジェクト３１６の識別子１０を受信することができる。
【００７９】
[0083]  ブロック４１５において、オブジェクトが記憶装置の第１の記憶位置において見つけ出される。例えば、図２−３を参照して、Ｉ／Ｏマネージャー２３５は、オブジェクトテーブル３１０を調べて、オブジェクト３２１の記憶位置８００を決定することができる。オブジェクト３２１は、例えば、オブジェクト３１６の直列化表現に対応することができる。
【００８０】
[0084]  ブロック４２０において、トランザクションとの関係においてオブジェクトに対して行われた変更を含む、そのオブジェクトの論理的コピーが作成される。例えば、図３を参照して、（例えばオブジェクト３１７によって表される）論理的コピーが作成され、トランザクションとの関係において特定される更新により更新される。
【００８１】
[0085]  ブロック４２５において、更新された論理的コピーを記憶するために新たな記憶位置が決定される。例えば、図２−３を参照して、Ｉ／Ｏマネージャー２３５は、（例えばオブジェクト３１７によって表される）更新された論理的コピーの直列化表現を記憶するのに記憶位置８０１が用いられるべきであることを決定することができる。
【００８２】
[0086]  ブロック４３０において、論理的コピーの新たな記憶位置への書き込み要求が記憶装置コントローラーへ送信される。例えば、図２−３を参照して、Ｉ／Ｏマネージャー２３５は、オブジェクト３１７を記憶装置２５０の記憶位置８０１に書き込むよう、記憶装置コントローラー２４０へ要求を送信する。
【００８３】
[0087]  ブロック４３５において、次の記憶位置へのリンク付けデータが供給される。既に説明されたように、これは、別のトランザクションによって行われた変更の先頭の記憶位置を示すデータを記憶装置へ送信すること、又は、もしあれば次のトランザクションにおいて行われた変更を発見するのに用いられることができる「デッドブロック」を示すデータを送信することを、伴うことができる。このリンク付けデータは、論理的コピーの書き込み要求と同じ要求に含めて、又は異なる要求として、送信されることができる。例えば、図２−３を参照して、Ｉ／Ｏマネージャー２３５は、別のトランザクションとの関係において行われたデータの更新が記憶装置２５０の記憶位置１０００を開始位置として記憶されることを示すリンク付けデータ１０００を送信することができる。
【００８４】
[0088]  ブロック４４０において、オブジェクトの論理的コピーが新たな記憶位置に記憶されるよう要求されることを反映するように、オブジェクトテーブルが更新される。例えば、図２−３を参照して、Ｉ／Ｏマネージャー２３５は、ＩＤ１０を持つオブジェクトのための値が８０１に更新されるように、オブジェクトテーブル３１０を更新することができる。
【００８５】
[0089]  ブロック４４５において、もしあれば他のアクションが実行されることができる。例えば、オブジェクトテーブルに対する変更の書き込み要求が、その後にフラッシュコマンドを伴って、記憶装置コントローラーへ送信されることができる。別の例として、リカバリアクションが実行されることができる。前に説明されたように、１つの具体化において、そのようなアクションは、例えば、リンクされたリストの先頭位置を見つけ出すこと、そのリンクされたリストを反復適用して、当該リンクされたリストの要素に関連付けられているが記憶装置に書き込まれていないオブジェクトを発見すること、リンクされたリストの反復適用と共に、オブジェクトの新たな記憶位置を示すようにオブジェクトテーブルを更新することを含むことができる。
【００８６】
[0090]  図５は、本明細書において説明される主題の側面に従って多数のオブジェクトがトランザクションとの関係において修正される場合に行われることができる例示のアクションを概略的に表すフロー図である。ブロック５０５において、アクションが開始する。例えば、図２−３を参照して、ＡＰＩ２１５は、ファイル名の更新要求を受信することができる。ファイル名の更新は、例えばディレクトリのデータ構造の更新を伴うことができる。
【００８７】
[0091]  ブロック５１０において、トランザクションに関与するオブジェクトの指示が取得される。例えば、図２−３を参照して、Ｉ／Ｏマネージャー２３５は、オブジェクト３１６に対応するファイルのファイル名の変更要求に加えて、オブジェクト３１６の識別子１０を受信することができる。そのファイル名が変更されると、Ｉ／Ｏマネージャー２３５（又は別のコンポーネント）は、そのトランザクションにディレクトリ（例えば、オブジェクト３１８に対応するディレクトリ）も関与していることを判定することができる。そのディレクトリのＩＤ（１１）も同様に取得されることができる。
【００８８】
[0092]  ブロック５１５において、オブジェクトの記憶位置が記憶装置において見つけ出される。例えば、図２−３を参照して、Ｉ／Ｏマネージャー２３５は、オブジェクトテーブル３１０を調べて、オブジェクト３１９及び３２１の記憶位置１５００及び８００をそれぞれ決定することができる。オブジェクト３２１は、例えば、オブジェクト３１６の直列化表現に対応することができ、一方、オブジェクト３１９は、オブジェクト３１４の直列化表現に対応することができる。
【００８９】
[0093]  ブロック５２０において、トランザクションとの関係において修正されたオブジェクトの論理的コピーが作成される。例えば、図３を参照して、（例えばオブジェクト３１７及び３１８によって表される）論理的コピーが作成され、トランザクションとの関係において特定される更新により更新される。
【００９０】
[0094]  ブロック５２５において、変更されたオブジェクトを記憶するために新たな記憶位置が決定される。例えば、図２−３を参照して、Ｉ／Ｏマネージャー２３５は、（オブジェクト３１７によって表される）ファイルの更新された論理的コピーの直列化表現を記憶するのに記憶位置８０１が用いられるべきであり、一方、（オブジェクト３１８によって表される）ディレクトリの更新された論理的コピーの直列化表現を記憶するのに記憶位置１０００が用いられるべきであることを決定することができる。
【００９１】
[0095]  ブロック５３０において、オブジェクトの論理的コピーを原子単位（ａｔｏｍｉｃ  ｕｎｉｔ）で結び付ける関連付けが作成される。例えば、論理的コピーをリンクさせる書き込みプランが作成されることができる。例えば、図２−３を参照して、Ｉ／Ｏマネージャー２３５は、オブジェクト３１７及び３１８をリンクさせる書き込みプランを作成することができる。別の例として、ハッシュ値と共に記憶位置間の参照を含むリンクされたリストが作成されることができる。既に言及されたように、これらのハッシュ値は、書き込み要求に関与する論理的コピーの正しいコンテンツを示すことができる。
【００９２】
[0096]  ブロック５３５において、関連付け及びオブジェクトの記憶装置への書き込み要求が送信される。既に言及されたように、この要求は、記憶装置上のオブジェクトの新たなコピーを作りオリジナルを保持するためのものである。例えば、図２−３を参照して、Ｉ／Ｏマネージャー２３５は、記憶装置２５０にオブジェクト３１７−３１８と共に書き込みプランを書き込む要求を、記憶装置コントローラー２４０へ送信することができる。
【００９３】
[0097]  別の例として、関連付け及びオブジェクトの書き込み要求の送信は、論理的コピーのためのそれぞれの記憶位置を示すデータ構造を書き込む１つ又は複数の要求を送信すること、論理的コピーのうち１つを除いてそれ以外の全てを記憶装置に書き込む１つ又は複数の要求を送信すること、並びに、論理的コピーのうちの当該１つを書き込む要求の送信を、別のトランザクションが完了する、予め定められた時間期間が経過する、及びチェックポイントに到達する等の、予め定められたイベントが発生するまで待機することを伴うことができる。もし別のトランザクションが完了したら、当該別のトランザクションとの関係において修正されたオブジェクトの論理的コピーの記憶位置への参照と共に「最後の」論理的コピーを書き込む要求を送信することを含む、更なるアクションが実行されることができる。
【００９４】
[0098]  ブロック５４０において、オブジェクトテーブルが更新される。例えば、図３を参照して、オブジェクトテーブル３１０は、オブジェクトテーブル３１１を生じさせる新たな記憶位置を用いて更新されることができる。
【００９５】
[0099]  ブロック５４５において、もしあれば他のアクションが実行されることができる。例えば、リカバリアクションが実行されることができる。これらのリカバリアクションは、以下を含むことができる。
【００９６】
[0100]  １．不揮発性記憶装置内のオブジェクトの最後に知られた正しい記憶位置を示す第１のデータ構造を取得するステップ。
【００９７】
[0101]  ２．論理的コピーが記憶されることが予定された不揮発性記憶装置の記憶位置を示す別のデータ構造を取得するステップ。このデータ構造はまた、その論理的コピーの正しいコンテンツを示しているハッシュからなる第１のセットを示す。
【００９８】
[0102]  ３．その記憶位置に配置されたコンテンツを読み出すステップ。
【００９９】
[0103]  ４．そのコンテンツのハッシュからなる第２のセットを計算するステップ。
【０１００】
[0104]  ５．もしハッシュの第１及び第２のセットの対応する要素が等しければ、論理的コピーがその記憶位置に記憶されていることを示すように第１のデータ構造を更新し、記憶装置上に更新されたローカルコピーの次のセットがもし記憶されていればそのセットに対して上記ステップ１−５を繰り返すステップ。
【０１０１】
[0105]  ６．もしハッシュの第１及び第２のセットの対応する要素の何れかが等しくなければ、リカバリアクションを終了するステップ。
【０１０２】
[0106]  実行されることができる別の例示のアクションは、全ての論理的コピーを記憶装置の不揮発性メモリへ首尾よく掃き出した後にオブジェクトのオリジナルに関連付けられた記憶位置が使用可能であることを示すステップを含む。
【０１０３】
[0107]  これらの他の例示のアクションは、行われることができるアクションの全てを含むものであること、又は包括的であることを意図するものではなく、行われることができるいくつかの他のアクションを単に例示するために本明細書において提供されたにすぎない。
【０１０４】
[0108]  上述の詳細な説明から分かるように、記憶装置システムにおいて整合性を維持することに関する側面が説明された。本明細書において説明された主題の側面は、様々な変形及び代替的構成の余地を有しているものの、それについての一定の例示的実施態様が、図面に示され、上記において詳細に説明された。しかしながら、請求項に係る対象の側面を開示された特定の形態に限定する如何なる意図も存在せず、それどころか、その意図は、本明細書において説明された主題の様々な側面の趣旨及び範囲に属するあらゆる変形、代替的構成、及び均等物を包含することであることは、理解されるべきである。
【図１】
0005628341.tif 000002
【図２】
0005628341.tif 000003
【図３】
0005628341.tif 000004
【図４】
0005628341.tif 000005
【図５】
0005628341.tif 000006