(57)【要約】  本明細書において記載する主題の形態は、オフロード・リードおよびライトに関する。形態において、データーを送ろうとする要求元が、データーの表現に対する要求を送る。応答して、要求元は、そのデーターを表す１つ以上のトーキンを受け取る。次いで、要求元は、これらのトークンの内１つ以上を、これら１つ以上のトークンによって表されるデーターを書き込む要求と共に、コンポーネントに供給することができる。用途例の中には、前述のコンポーネントが、要求元との追加の相互作用を行うことなく、１つ以上のトークンを使用してデーターを特定することができ、次いでそのデーターを読み出すまたは論理的に書き込むことができる場合もある。トークンは、要求によって、または他の要因に基づいて、無効にすることができる。【選択図】      図２
2013539119.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも部分的にコンピューターによって実施される方法であって、
ストアの第１データーの表現に対する要求を送るステップであって、前記要求が、前記ストアの一部を特定する記述と共に伝えられる、ステップと、
前記要求に応答して、前記ストアの前記一部に論理的に格納された第２データーを表すトークンを受け取るステップであって、前記第２データーが、前記第１データーの部分集合であり、適正な部分集合であることが可能である、ステップと、
前記トークンを、第３データーを論理的に書き込むことを指示する情報と共に、前記トークンを使用して少なくとも前記第３データーを突き止めるように動作可能なオフロード・プロバイダーを介して供給するステップであって、前記第３データーが、前記第２データーの部分集合であり、適正な部分集合であることが可能である、ステップと、
を含む、方法。
【請求項２】
請求項１記載の方法において、ストレージの一部の記述を含む要求を送るステップが、オフセットおよび長さを送るステップを含み、前記オフセットが前記ストアにおける前記第１データーの位置を表し、前記長さが前記第１データーのサイズを表す、方法。
【請求項３】
請求項１記載の方法において、前記トークンを受け取るステップが、前記トークンが前記第２データーに結び付けられたときに前記第２データーが存在していた場合、前記第２データーを得るために使用可能な数値を受け取るステップを含み、前記数値が、前記第２データーを特定するために前記オフロード・プロバイダーによって使用可能であり、前記数値がランダムまたは擬似ランダム・メカニズムによって生成される、方法。
【請求項４】
請求項１記載の方法において、前記トークンを受け取るステップが、データー構造における他のトークンと共に前記トークンを受け取るステップを含み、前記データー構造における各トークンが、該トークンが前記第２データーの異なる部分に結び付けられたときに前記異なる部分が存在していた場合、前記異なる部分を得るために使用可能である、方法。
【請求項５】
請求項１記載の方法であって、更に、１つ以上の他のトークンを受け取るステップであって、その各々も前記第２データーを表すステップを含み、更に、前記他のトークンの内１つ以上を、前記トークンの供給と共に供給するステップを含む、方法。
【請求項６】
コンピューター実行可能命令を有するコンピューター記憶媒体であって、前記コンピューター実行可能命令が実行されると、
要求元から、ストアに論理的に格納された第１データーの表現に対する要求を受け取る動作であって、前記要求が、前記ストアにおいて前記第１データーが位置する一部を特定する記述と共に伝えられる、動作と、
前記ストアの前記一部に論理的に格納された第２データーを表すトークンを生成する動作であって、前記第２データーが、前記第１データーの部分集合あり、適正な部分集合であることが可能である、動作と、
データー構造を介して、前記トークンを前記第２データーと関連付ける動作であって、前記トークンが、該トークンが前記第２データーと結び付けられたときに前記第２データーが存在していた場合、前記第２データーを得るために使用可能である、動作と、
前記トークンを前記要求元に供給する動作と、
を含む動作を実行する、コンピューター記憶媒体。
【請求項７】
請求項６記載のコンピューター記憶媒体であって、更に、
前記第２データーの全部または一部のどちらを書き込むべきかを示す第３データーと共に、前記トークンを受け取る動作と、
前記トークンが有効であるか否か判断する動作と、
前記トークンが有効でない場合、前記要求に応じない動作と、
を含む、コンピューター記憶媒体。
【請求項８】
請求項６記載のコンピューター記憶媒体において、ストアに論理的に格納された第１データーの表現に対する要求を受け取る動作が、記憶エリア・ネットワーク・デバイスのデーター・アクセス・コンポーネントにおいて前記要求を受け取る動作を含み、前記第２データーを表すトークンを生成する動作が、前記記憶エリア・ネットワーク・デバイスのコンポーネントによって値を生成する動作を含み、データー構造を介して前記トークンを前記第２データーと関連付ける動作が、エントリーを表に入れる動作を含み、前記エントリーが、前記トークンと、前記要求が前記データー・アクセス・コンポーネントにおいて受け取られた時点またはその後、および前記トークンが前記要求元に戻された時点またはその前において前記第２データーが存在していた場合、前記第２データーの識別子とを含む、コンピューター記憶媒体。
【請求項９】
請求項６記載のコンピューター記憶媒体であって、更に、前記第１データーを変更する要求を受け取る動作と、それに応答して、前記トークンを無効にする動作とを含む、コンピューター記憶媒体。
【請求項１０】
請求項６記載のコンピューター記憶媒体であって、更に、メモリー制限、書き込み動作、ディスク制限、ネットワーク帯域幅制限、レイテンシー制限、および存続時間の内１つ以上に基づいて、前記トークンを無効にする動作を含む、コンピューター記憶媒体。
【請求項１１】
請求項６記載のコンピューター記憶媒体であって、更に、前記第１データーを変更する要求を受け取る動作と、それに応答して前記変更を行い、前記トークンが前記第２データーに結び付けられたときに前記第２データーが存在していた場合、前記第２データーの論理コピーを維持する動作とを含む、コンピューター記憶媒体。
【請求項１２】
コンピューター環境におけるシステムであって、
ストアの第１データーの表現に対する要求を送るように動作可能な要求元であって、更に、前記第１データーの部分集合であり、適正な部分集合であることが可能である第２データーを表すトークンを受け取るように動作可能であり、更に、前記第２データーの全部または一部を論理的に書き込むことを指示する第３データーと共に、前記トークンを供給するように動作可能な、要求元と、
前記トークンを生成し、データー構造を介して前記トークンを前記第２データーと関連付けるように動作可能なトークン・マネージャーと、
前記トークンを前記第３データーと共に受け取るように動作可能なオフロード・プロバイダーであって、更に、前記トークンが有効であるか否か判断するために前記トークン・マネージャーを参照するように動作可能であり、前記第２データーが、少なくとも前記トークンが有効である間変化しないまま論理的に維持される、オフロード・プロバイダーと、
を含む、システム。
【請求項１３】
請求項１２記載のシステムにおいて、前記オフロード・プロバイダーが、更に、前記トークンが有効である場合、前記第３データーによって示される、前記第２データーの全部または一部を論理的に書き込むように動作可能であり、前記第３データーが、書き込まれたデーターを送る宛先も含む、システム。
【請求項１４】
請求項１２記載のシステムにおいて、前記要求元が、前記オフロード・プロバイダーをホストする装置に対して外部である装置のコンポーネントを含む、システム。
【請求項１５】
請求項１２記載のシステムにおいて、前記トークン・マネージャーおよび前記オフロード・プロバイダーが、双方とも、記憶エリア・ネットワークの装置にホストされている、システム。 
【発明の詳細な説明】
【従来技術】
【０００１】
[0001]  データーを送るメカニズムの１つは、ソース位置のファイルから主メモリーにデーターを読み出し、次いでそのデーターを主メモリーから宛先位置に書き込むことである。
【発明の概要】
【発明が解決しようとする課題】
【０００２】
環境の中には、比較的少ないデーターではこれが容認可能に機能することもあるが、データーが増大するに連れて、データーを読み出しそのデーターを他の位置に送るのに要する時間が長くなる。加えて、ネットワークを介してデーターにアクセスする場合、データーをソース位置から宛先位置まで送るときに、ネットワークが追加の遅延を課すこともある。更に、セキュリティ問題が記憶構成の複雑さと組み合わされて、データー移動(data transfer)を複雑にすることもある。
【０００３】
[0002]  本明細書において特許請求する主題は、いずれの欠点を解決する実施形態にも、以上に記載したような環境においてのみ動作する実施形態にも限定されるのではない。逆に、この背景は、本明細書に記載する実施形態を実施することができる技術分野の一例を例示するために示されたに過ぎない。
【課題を解決するための手段】
【０００４】
[0003]  端的に言うと、本明細書において記載する主題の形態は、オフロード・リードおよびライトに関する。形態では、データーを送ろうとする要求元が、そのデーターの表現に対する要求を送る。応答して、要求元は、そのデーターを表す１つ以上のトークンを受け取る。次いで、要求元は、これらのトークンの内１つ以上を、これら１つ以上のトークンによって現されるデーターを書き込む要求と共に、コンポーネントに供給することができる。アプリケーション例の中には、このコンポーネントが１つ以上のトークンを使用してデーターを特定することができ、次いで、要求元との追加の対話処理を行うことなく、データーを読み出すこと、またはデーターを論理的に書き込むことができるものもある。トークンは、要求によって、または他の要因に基づいて無効にすることができる。
【０００５】
[0004]  この摘要は、詳細な説明の章において以下で更に説明する主題のいくつかの形態を端的に特定するために設けられている。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を限定するために使用されることを意図するのでもない。
【０００６】
[0005]  「本明細書において記載する主題」という句は、コンテキストが明らかに他のことを示すのでなければ、詳細な説明において記載する主題を指す。「形態」(aspects)という用語は、「少なくとも１つの形態」と解釈することとする。詳細な説明において記載する主題の形態を特定することは、特許請求する主題の鍵となる特徴または必須の特徴を特定することを意図するのではない。
【０００７】
[0006]  以上に記載した形態、および本明細書において記載する主題の他の形態は、一例として例示するのであり、添付図面に限定されるのではない。図面では、同様の参照番号は、同様の要素を示す。
【図面の簡単な説明】
【０００８】
【図１】図１は、本明細書において記載する主題の形態を組み込むことができる汎用計算環境の一例を表すブロック図である。
【図２】図２は、本明細書において記載する主題の形態が動作することができるシステムのコンポーネントの構成例を表すブロック図である。
【図３】図３は、本明細書において記載する主題の形態が動作することができるシステムのコンポーネントの構成例を表すブロック図である。
【図４】図４は、本明細書において記載する主題の形態が動作することができるシステムのコンポーネントの構成例を表すブロック図である。
【図５】図５は、本明細書において記載する主題の形態が動作することができるシステムのコンポーネントの構成例を表すブロック図である。
【図６】図６は、本明細書において記載する主題の形態にしたがって行うことができる動作例を概略的に表す流れ図である。
【図７】図７は、本明細書において記載する主題の形態にしたがって行うことができる動作例を概略的に表す流れ図である。
【図８】図８は、本明細書において記載する主題の形態にしたがって行うことができる動作例を概略的に表す流れ図である。
【発明を実施するための形態】
【０００９】
定義
[0010]  本明細書において使用する場合、「含む」という用語およびその変形は、「含むがそれに限定されるのではない」ことを意味する、制限のない用語と解釈するものとする。「または」という用語は、コンテキストが明らかに他のことを明言するのでないならば「および／または」と解釈するものとする。[基づく」という用語は、「少なくとも部分的に基づく」と解釈するものとする。「一実施形態」および「実施形態」は、「少なくとも１つの実施形態」と解釈するものとする。「他の実施形態」は、「少なくとも１つの他の実施形態」と解釈するものとする。明示的および暗示的な他の定義も、以下に含まれることがある。
【００１０】
[0011]  本明細書では、「第１」、「第２」、「第３」等という用語が使用されることがある。これらの用語の使用は、特に特許請求の範囲においては、順序を含意することを意図するのではなく、むしろ識別の目的で使用される。例えば、「第１データー」および「第２データー」という句は、必ずしも、第１データーが物理的にまたは論理的に第２データーの前に位置することを意味するのではなく、第１データーが第２データーの前に要求または処理されることも意味するのでもない。むしろ、これらの句は、別個であるまたは同一である可能性があるデーター集合を識別するために使用される。即ち、第１データーおよび第２データーは、異なるデーター、同じデーター、同じデーターおよび異なるデーターの内の一部等に言及することができる。第１データーは、第２データーの部分集合、適正であることが可能な部分集合(potentially proper subset)であってもよく、またその逆であってもよい。
【００１１】
[0012]  尚、「ストアのデーター」および「ストアにおけるデーター」という句が本明細書では使用されることがあるが、述べられたデーターを、物理的にストアに格納されているデーターに限定するためにこれらの句を使用することを意図しているのではないことを注記しておく。むしろ、これらの句は、そのデーターが物理的にストアにない場合であっても、論理的にそのストアにあるデーターに限定することを意味する。例えば、記憶抽象化（以下で説明する）が最適化を実行する場合、ゼロ（または他のデーター値）のチャンク(chunk)が実際には基礎の記憶媒体には格納されず、代わりにゼロを表す短縮データー（例えば、データーおよび長さ）によって表されることもある。他の例も以下では示される。
動作環境の一例
[0013]  図１は、本明細書において記載する主題の形態を実現することが可能な適した計算システム環境１００の一例を示す。計算システム環境１００は、適した計算環境の一例に過ぎず、本明細書において記載する主題の形態の使用範囲や機能に関して、何の限定も示唆することは意図していない。また、動作環境１００において示されるコンポーネントの内任意の１つまたはその組み合わせに関していかなる依存性や用件も有するように、計算環境１００を解釈してはならない。
【００１２】
[0014]  本明細書において記載する主題の形態は、複数の他の汎用または特殊目的の計算システム環境または構成とでも動作する。本明細書において記載する主題の形態と共に使用するのに適していると考えられる周知の計算システム、環境、または構成の例には、パーソナル・コンピューター、サーバー・コンピューター、ハンド・ヘルドまたはラップ・トップ・デバイス、マルチプロセッサー・システム、マイクロコントローラ・ベース・システム、セット・トップ・ボックス、プログラマブル消費者電子機器、ネットワークＰＣ、ミニコンピューター、メインフレーム・コンピューター、パーソナル・ディジタル・アシスタント（ＰＤＡ）、ゲーミング・デバイス、プリンター、セット・トップを含む機器、メディア・センター、または他の機器、自動車埋め込み型または取り付け型計算デバイス、他のモバイル・デバイス、以上のシステムまたはデバイスの内任意のものを含む分散型計算環境等が含まれる。
【００１３】
[0015]  本明細書において記載する主題は、コンピューターによって実行される、プログラム・モジュールのような、コンピューター実行可能命令という一般的なコンテキストで説明することができる。一般に、プログラム・モジュールは、ルーチン、プログラム、オブジェクト、コンポーネント、データー構造等を含み、特定のタスクを実行するか、または特定の抽象的データー・タイプを実現する。また、本明細書において記載する主題は、分散型計算環境も使用することができ、この場合、通信ネットワークを通じてリンクされている遠隔処理デバイスによってタスクが実行される。分散型計算環境では、プログラム・モジュールは、メモリー記憶デバイスを含むローカルおよびリモート双方のコンピューター・ストレージに配置することができる。
【００１４】
[0016]  図１を参照すると、本明細書において記載する主題を実現するシステム例は、コンピューター１１０の形態とした汎用計算デバイスを含む。コンピューターは、命令を実行することができる任意の電子デバイスを含むことができる。コンピューター１１０のコンポーネントは、処理ユニット１２０、システム・メモリー１３０、およびシステム・バス１２１を含むことができる。システム・バス１２１は、システム・メモリーを含む種々のシステム・コンポーネントを処理ユニット１２０に結合する。システム・バス１２１は、メモリー・バスまたはメモリー・コントローラ、周辺バス、および種々のバス・アーキテクチャーの内任意のものを使用するローカル・バスを含む、様々なタイプのバス構造の内任意のものとすることができる。一例として、そして限定ではなく、このようなアーキテクチャーは、業界標準アーキテクチャー（ＩＳＡ）バス、マイクロ・チャネル・アーキテクチャー（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ビデオ・エレクトロニクス標準連盟（ＶＥＳＡ）ローカル・バス、 メザニン・バス(Mezzanine bus)としても知られている 周辺素子相互接続（ＰＣＩ）バス、周辺素子相互接続拡張（ＰＣＩ−Ｘ）バス、高度グラフィクス・ポート（ＡＧＰ）、およびＰＣＩエクスプレス（ＰＣＩｅ）を含む。
【００１５】
[0017]  コンピューター１１０は、通例、種々のコンピューター読み取り可能媒体を含む。コンピューター読み取り可能媒体は、コンピューター１１０によってアクセスすることができる任意の入手可能な媒体とすることができ、揮発性および不揮発性双方の媒体、リムーバブルおよび非リムーバブル媒体を含む。一例として、そして限定ではなく、コンピューター読み取り可能媒体は、コンピューター記憶媒体および通信媒体を含むことができる。
【００１６】
[0018]  コンピューター読み取り可能記憶媒体は、揮発性および不揮発性媒体、リムーバブルおよび非リムーバブル媒体を含み、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、または他のデーターというような、情報の任意の記憶方法または技術で実現される。 コンピューター読み取り可能記憶媒体には、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、フラッシュ・メモリーまたは他のメモリー技術、ＣＤ−ＲＯＭ、ディジタル・バーサタイル・ディスク（ＤＶＤ）または他の光ストレージ、磁気カセット、磁気テープ、磁気ディスク記憶デバイスまたはその他の磁気記憶デバイス、あるいは所望の情報を格納するために使用することができ、計算デバイス１１０によってアクセスすることができる任意の他の媒体が含まれる。
【００１７】
[0019]  通信媒体は、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、あるいは搬送波または他の伝送メカニズムのような、変調データー信号における他のデーターを具体化することができ、任意の情報配信媒体を含むことができる。「変調データー信号」という用語は、属性を有する信号であって、その信号の中に情報をエンコードするような形態でその属性の１つ以上が設定された信号または変化させられた信号を指す。一例として、そして限定ではなく、通信媒体は、有線ネットワークまたは直接有線接続のような有線媒体、ならびに音響、ＲＦ、赤外線、および他のワイヤレス媒体というような、ワイヤレス媒体を含む。以上の内任意のものの組み合わせも、コンピューター読み取り可能媒体の範囲内に含まれてよい。
【００１８】
[0020]  システム・メモリー１３０は、リード・オンリ・メモリー（ＲＯＭ）１３１およびランダム・アクセス・メモリー（ＲＡＭ）１３２のような揮発性および／または不揮発性メモリーの形態をなすコンピューター記憶媒体を含む。基本入出力システム１３３（ＢＩＯＳ）は、起動中のように、コンピューター１１０内のエレメント間における情報転送を補助する基本的なルーチンを含み、通例ＲＯＭ１３１内に格納されている。ＲＡＭ１３２は、通例、処理ユニット１２０が直ちにアクセス可能であるデーターおよび／またはプログラム・モジュール、および／または現在処理ユニット１２０によって処理されているデーターおよび／またはプログラム・モジュールを含む。一例として、そして限定ではなく、図１は、オペレーティング・システム１３４、アプリケーション・プログラム１３５、その他のプログラム・モジュール１３６、およびプログラム・データー１３７を示す。
【００１９】
[0021]  また、コンピューター１１０は、その他のリムーバブル／非リムーバブル揮発性／不揮発性コンピューター記憶媒体も含むことができる。一例として示すに過ぎないが、図１は、非リムーバブル不揮発性磁気媒体からの読み取りおよびこれへの書き込みを行なうハード・ディスク・ドライブ１４１、リムーバブル不揮発性磁気ディスク１５２からの読み取りおよびこれへの書き込みを行なう磁気ディスク・ドライブ１５１、ならびにＣＤＲＯＭまたはその他の光媒体のようなリムーバブル不揮発性光ディスク１５６からの読み取りおよびこれへの書き込みを行なう光ディスク・ドライブ１５５を示す。本動作環境例において使用可能なその他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピューター記憶媒体には、磁気テープ・カセット、フラッシュ・メモリー・カード、ディジタル・バーサタイル・ディスク、他の光ディスク、ディジタル・ビデオ・テープ、ソリッド・ステートＲＡＭ、ソリッド・ステートＲＯＭ等が含まれる。ハード・ディスク・ドライブ１４１は、インターフェース１４０を介してシステム・バス１２１に接続することができ、磁気ディスク・ドライブ１５１および光ディスク・ドライブ１５５は、通例、インターフェース１５０のようなリムーバブル不揮発性メモリー用インターフェースによって、システム・バス１２１に接続することができる。
【００２０】
[0022]  先に論じ図１に示すドライブおよびそれらと関連のあるコンピューター記憶媒体は、コンピューター読み取り可能命令、データー構造、プログラム・モジュール、およびコンピューター１１０のその他のデーターを格納する。図１では、例えば、ハード・ディスク・ドライブ１４１は、オペレーティング・システム１４４、アプリケーション・プログラム１４５、その他のプログラム・モジュール１４６、およびプログラム・データー１４７を格納するように示されている。尚、これらの構成要素は、オペレーティング・システム１３４、アプリケーション・プログラム１３５、その他のプログラム・モジュール１３６、およびプログラム・データー１３７と同じでも異なっていても可能であることを注記しておく。オペレーティング・システム１４４、アプリケーション・プログラム１４５、その他のプログラム・モジュール１４６、およびプログラム・データー１４７は、ここで、少なくともこれらが異なるコピーであることを示すために、ＲＡＭ１３２におけるこれらの対応する相当物とは異なる番号が与えられている。
【００２１】
[0023]  ユーザーは、キーボード１６２のような入力デバイス、および一般にマウス、トラックボールまたはタッチ・パッドと呼ばれているポインティング・デバイス１６１によって、コマンドおよび情報をコンピューター１１０に入力することができる。他の入力デバイス（図示せず）には、マイクロフォン、ジョイスティック、ゲーム・パッド、衛星ディッシュ、スキャナー、タッチ感応スクリーン、ライティング・タブレット(writing tablet)等を含むことができる。これらおよびその他の入力デバイスは、多くの場合、ユーザー入力インターフェース１６０を介して、処理ユニット１２０に接続されている。ユーザー入力インターフェース１６０は、システム・バスに結合されているが、パラレル・ポート、ゲーム・ポート、またはユニバーサル・シリアル・バス（ＵＳＢ）のようなその他のインターフェースおよびバス構造によって接続することも可能である。
【００２２】
[0024]  モニター１９１またはその他の形式のディスプレイ・デバイスも、ビデオ・インターフェース１９０のようなインターフェースを介して、システム・バス１２１に接続されている。モニターに加えて、コンピューターは、スピーカー１９７およびプリンター１９６のような、その他の周辺出力装置も含むことができ、これらは出力周辺インターフェース１９５を通じて接続することができる。
【００２３】
[0025]  コンピューター１１０は、リモート・コンピューター１８０のような１つ以上のリモート・コンピューターへの論理接続を使用して、ネットワーク接続環境において動作することも可能である。リモート・コンピューター１８０は、パーソナル・コンピューター、サーバー、ルーター、ネットワークＰＣ、ピア・デバイス、またはその他の共通ネットワーク・ノードとすることができ、通例、コンピューター１１０に関して先に説明したエレメントの多くまたは全てを含むが、図１にはメモリー記憶装置１８１のみを示す。図１に示す論理接続は、ローカル・エリア・ネットワーク（ＬＡＮ）１７１およびワイド・エリア・ネットワーク（ＷＡＮ）１７３を含むが、他のネットワークも含むことができる。このようなネットワーク環境は、事務所、企業規模のコンピューター・ネットワーク、イントラネットおよびインターネットにおいては、極一般的である。
【００２４】
[00２6]  ＬＡＮネットワーク環境で使用する場合、コンピューター１１０は、ネットワーク・インターフェースまたはアダプター１７０を介してＬＡＮ１７１に接続される。ＷＡＮネットワーク環境で使用する場合、コンピューター１１０は、通例、モデム１７２、またはインターネットのようなＷＡＮ１７３を通じて通信を行うその他の手段を含む。モデム１７２は、内蔵でも外付けでもよく、ユーザー入力インターフェース１６０またはその他のしかるべき機構を介してシステム・バス１２１に接続することができる。ネットワーク接続環境では、コンピューター１１０に関して図示したプログラム・モジュール、またはその一部は、リモート・メモリー記憶装置に格納することもできる。一例として、そして限定ではなく、図１は、リモート・アプリケーション・プログラム１８５がメモリー・デバイス１８１に存在するものとして示している。尚、図示のネットワーク接続は一例であり、コンピューター間で通信リンクを作る他の手段も使用可能であることは認められよう。
オフロード・リードおよびライト
[0027]  先に述べたように、従前からのデーター移動動作には、効率的でなかったり、または今日の記憶環境では動作しないものもある。
【００２５】
[0028]  図２から図５は、本明細書において記載する主題の形態が動作することができるシステムのコンポーネントの構成例を表すブロック図である。図２から図５に示されているコンポーネントは一例であり、必要とされるコンポーネントまたは含まれるかもしれないコンポーネントが全て含まれていることを意図するのではない。他の実施形態では、本明細書において記載する主題の形態の範囲から逸脱せずに、図２から図５と関連付けて説明するコンポーネントおよび／または機能が他のコンポーネント（図示されている、またはされていない）に含まれていてもよく、またはサブコンポーネントの中に配置されていてもよい。実施形態の中には、図２から図５と関連付けて説明するコンポーネントおよび／または機能が複数のデバイスに跨がって分散されていてもよい場合もある。
【００２６】
[0029]  図２に移ると、システム２０５は、要求元２１０、データー・アクセス・コンポーネント２１５、トークン・マネージャー２２５、ストア２２０、および他のコンポーネント（図示せず）を含むことができる。システム２０５は、１つ以上の計算デバイスによって実現することもできる。このようなデバイスは、例えば、パーソナル・コンピューター、サーバー・コンピューター、ハンド・ヘルドまたはラップ・トップ・デバイス、マルチプロセッサー・システム、マイクロコントローラ・ベース・システム、セット・トップ・ボックス、プログラマブル消費者電子機器、ネットワークＰＣ、ミニコンピューター、メインフレーム・コンピューター、セル・フォン、パーソナル・ディジタル・アシスタント（ＰＤＡ）、ゲーミング・デバイス、プリンター、セット・トップを含む機器、メディア・センター、または他の機器、自動車埋め込み型または取り付け型計算デバイス、他のモバイル・デバイス、以上のシステムまたはデバイスの内任意のものを含む分散型計算環境等が含まれる。
【００２７】
[0030]  システム２０５が１つのデバイスで構成される場合、システム２０５として動作するように構成することができるデバイスの一例は、図１のコンピューター１１０で構成される。システム２０５が複数のデバイスで構成される場合、複数のデバイスの内１つ以上は、図１と同様に構成されたコンピューター１１０またはこれとは異なる構成のコンピューター１１０を含むことができる。
【００２８】
[0031]  データー・アクセス・コンポーネント２１５は、データーをストア２２０間で送信するために使用することができる。データー・アクセス・コンポーネント２１５は、例えば、Ｉ／Ｏマネージャー、フィルター、ドライバー、ファイル・サーバー・コンポーネント、記憶エリア・ネットワーク（ＳＡＮ）または他の記憶デバイスにおけるコンポーネント、および他のコンポーネント（図示せず）の内１つ以上を含むことができる。ＳＡＮは、例えば、論理記憶ターゲットを露出するデバイスとして、このようなデバイスを含む通信ネットワーク等として実現することができる。
【００２９】
[0032]  一実施形態では、データー・アクセス・コンポーネントは、要求元２１０とストア２２０との間におけるＩ／Ｏを調べる機会が与えられ、Ｉ／Ｏを変化させる、完了する、または実行しない(failing)、あるいはそれに基づいて他の動作を実行するまたは何の動作も実行しないことができる任意のコンポーネントを含むことができる。例えば、システム２０５が１つのデバイスに存在する場合、データー・アクセス・コンポーネント２１５は、要求元２１０とストア２２０との間にあるＩ／Ｏスタックにおける任意のオブジェクトを含むことができる。システム２０５が複数のデバイスによって実現される場合、データー・アクセス・コンポーネント２１５は、要求元２１０をホストするデバイスにおけるコンポーネント、ストア２２０へのアクセスを与えるデバイス、および／または他のデバイスにおけるコンポーネント等を含むことができる。他の実施形態では、データー・アクセス・コンポーネント２１５は、使用されているコンポーネントをデーターが通過しなくても、Ｉ／Ｏが通過するコンポーネントによって使用される任意のコンポーネント（例えば、サービス、データーベース等）を含むことができる。
【００３０】
[0033]  本明細書において使用する場合、コンポーネントという用語は、デバイスの全部または一部、１つ以上のソフトウェア・モジュールの集合体またはその一部、１つ以上のソフトウェア・モジュールの何らかの組み合わせまたはその一部、および１つ以上のデバイスまたはその一部等を含むというように解釈するものとする。
【００３１】
[0034]  一実施形態では、ストア２２０は、データーを格納することができる任意の記憶媒体である。ストア２２０は、揮発性メモリー（例えば、キャッシュ）および不揮発性メモリー（例えば、永続的ストレージ）を含むことができる。データーという用語は、１つ以上のコンピューター記憶エレメントによって表すことができる任意のものを含むように広く解釈するものとする。論理的に、データーは、揮発性メモリーまたは不揮発性メモリーにおける一連の１および０として表すことができる。二進以外の記憶媒体を有するコンピューターでは、その記憶媒体の能力にしたがってデーターを表すことができる。データーは、異なるタイプのデーター構造に編成することもでき、数値、文字等のような単純なデーター・タイプ、階層状、リンク、または他の関連データー・タイプ、複数の他のデーター構造または単純なデーター・タイプを含むデーター構造等を含む。データー例の一部には、情報、プログラム・コード、プログラム状態、プログラム・データー、コマンド、他のデーター等が含まれる。
【００３２】
[0035]  ストア２２０は、ハード・ディスク・ストレージ、ソリッド・ステート・ストレージ、または他の不揮発性ストレージ、ＲＡＭのような揮発性メモリー、他のストレージ、以上の何らかの組み合わせ等を含むことができ、複数のデバイス（例えば、複数のＳＡＮ、多数のファイル・サーバー、異質なデバイスの組み合わせ等）に跨って分散されていてもよい。ストア２２０を実現するために使用されるデバイスは、物理的に一緒に位置付けられてもよく（例えば、１つのデバイスにおいて、データーセンターにおいて等）、または地理的に分散されてもよい。ストア２２０は、層状記憶配列または非層状記憶配列に配列することができる。ストア２２０は、外部であっても、内部であってもよく、またシステム２０５を実現する１つ以上のデバイスに対して内部または外部の双方であるコンポーネントを含むこともできる。ストア２２０は、フォーマットされていても（例えば、ファイル・システムによって）、またはフォーマットされていなくても（例えば、生）よい。
【００３３】
[0036]  他の実施形態では、ストア２２０は、直接的な物理ストレージとしてではなく、ストレージ抽象化として実現することもできる。ストレージ抽象化は、例えば、ファイル、ボリューム、ディスク、仮想ディスク、論理ユニット、データー・ストリーム、代替データー・ストリーム、メタデーター・ストリーム等を含むことができる。例えば、ストア２２０は、複数の物理記憶デバイスを有するサーバーによって実現することもできる。この例では、サーバーが、ストアのデーターにアクセスすることをデーター・アクセス・コンポーネントに可能にするインターフェースを提示する(present)ことができ、ストアは、このサーバーの物理記憶デバイスの内１つ以上またはその一部を使用して実現される。
【００３４】
[0037]  この抽象化のレベルは、いずれの任意の深度にでも繰り返すことができる。例えば、ストレージ抽象化をデーター・アクセス・コンポーネント２１５に提供するサーバーもストレージ抽象化を拠り所としてデーターにアクセスし格納することもできる。
【００３５】
[0038]  他の実施形態では、ストア２２０は、不揮発性ストレージにおいて永続することができるデーターまたは永続しなくてもよいデーターを概観するコンポーネントを含むこともできる。
【００３６】
[0039]  データー・アクセス・コンポーネント２１５の内１つ以上が、要求元２１０をホストする装置に存在してもよく、一方データー・アクセス・コンポーネント２１５の内１つ以上の他のものが、ストア２２０へのアクセスをホストするまたは提供する装置に存在してもよい。例えば、要求元２１０がパーソナル・コンピューターにおいて実行するアプリケーションである場合、データー・アクセス・コンポーネント２１５の内１つ以上は、このパーソナル・コンピューターにおいてホストされているオペレーティング・システムに存在するのであってもよい。他の例として、ストア２２０が記憶エリア・ネットワーク（ＳＡＮ）によって実現される場合、データー・アクセス・コンポーネント２１５の内１つ以上が、ストア２２０へのアクセスを管理するおよび／または提供するストレージ・オペレーティング・システムを実装することもできる。要求元２１０およびストア２２０が１つの装置においてホストされる場合、データー・アクセス・コンポーネント２１５の全てまたはその多くがその装置に存在するのであってもよい。
【００３７】
[0040]  ストア２２０のデーターのオフロード・リード（以下で説明する）を開始するために、要求元２１０は、予め定められたコマンドを使用して（例えば、ＡＰＩを介して）そのデーターを表すトークンを求める要求を送ることができる。応答して、データー・アクセス・コンポーネント２１５の内１つ以上が要求元２１０に応答し、データーまたはその部分集合を表す１つ以上のトークンを供給することができる。
【００３８】
[0041]  例えば、種々の理由によって、本来要求したデーターよりも少ないデーターを表すトークンを返すことが望ましい場合がある。トークンが戻されるとき、そのトークンが表すデーターの長さまたは複数の範囲と共に戻されるのでもよい。この長さは、本来要求されたデーターの長さよりも小さいこともある。
【００３９】
[0042]  データー・アクセス・コンポーネント２１５の内１つ以上は、オフロード・リードおよびオフロード・ライトのいずれにおいても、トークンと関連のある要求長よりも短い長さのデーターに対して動作することもできる。実際に処理されるデーターの長さを、本明細書では、「有効長」と呼ぶこともある。要求長よりも短い長さで動作することは、種々の理由のために望ましい場合がある。有効長を戻して、コマンドによって何バイトが実際に処理されたのかを、要求元または他のデーター・アクセス・コンポーネントが把握するようにしてもよい。
【００４０】
[0043]  データー・アクセス・コンポーネント２１５は、例えば、次のことを含むオフロード・リードまたはライトに応答して種々の方法で動作することができる。
[0044]  １．区分データー・アクセス・コンポーネントが、次に低いデーター・アクセス・コンポーネントに要求を転送する前に、オフロード・リードまたはオフロード・ライト要求のオフセットを調節することができる。
【００４１】
[0045]  ２．ＲＡＩＤデーター・アクセス・コンポーネントがオフロード・リードまたはライト要求を分割し、これらの複数の要求(pieces)を同じまたは異なるデーター・アクセス・コンポーネントに転送することができる。ＲＡＩＤ−０の場合、受け取られた要求はストライプ境界に沿って分割することができ（有効長が短くなる結果となる）、一方ＲＡＩＤ−１の場合、要求全体を１つよりも多いデーター・アクセス・コンポーネントに転送することができる（同じデーターに対して複数のトークンが得られる結果となる）。
【００４２】
[0046]  ３．キャッシング・データー・アクセス・コンポーネントが、オフロード・リード要求によって得られようとしているデーターを含む、そのキャッシュの部分を書き出すことができる。
【００４３】
[0047]  ４．キャッシング・データー・アクセス・コンポーネントが、そのキャッシュの内、オフロード・ライト要求によって上書きされようとしているデーターを含む部分を無効にすることができる。
【００４４】
[0048]  ５．データー検証データー・アクセス・コンポーネントが、オフロード・ライト要求によって上書きされようとしているデーターの、キャッシュされているチェックサムの内任意のものを無効にすることができる。
【００４５】
[0049]  ６．暗号化データー・アクセス・コンポーネントが、オフロード・リードまたはライト要求に応じない(fail)ことができる。
[0050]  ７．スナップショット・データー・アクセス・コンポーネントが、オフロード・ライト要求によって上書きされようとしている場所におけるデーターをコピーすることができる。これは、部分的に、必要であればそのデーターの「以前のバージョン」に後になって「戻す」ことができるように行うことができる。スナップショット・データー・アクセス・コンポーネントは、それ自体がオフロード・リードおよびライト命令を使用して、その場所におけるデーター（上書きされようとしている）をバックアップ位置にコピーすることもできる。この例では、スナップショット・データー・アクセス・コンポーネントを「下流要求元」（以下で説明する）と見なすことができる。
【００４６】
[0051]  以上の例は、全てを含むことも網羅的であることも意図していない。本明細書における教示に基づいて、当業者は、本明細書において記載する主題の形態の主旨や範囲から逸脱することなく、本明細書の教示を適用することができる他のシナリオも認めることができよう。
【００４７】
[0052]  データー・アクセス・コンポーネント２１５がオフロード・ライトまたはリードを行うことができない場合、エラー・コードを戻すことができ、他のデーター・アクセス・コンポーネントまたは要求元が、そのデーターを読み出すまたは書き込むための他のメカニズムを試すことを可能にする。例えば、初期化の間に能力発見を実行することができる。ストアまたは下位の層のデーター・アクセス・コンポーネントさえも特定の動作をサポートしない場合、上位のデーター・アクセス・コンポーネントまたは要求元によって他の動作を実行して、同じ結果を得ることができる。例えば、記憶システム（以下で説明する）がオフロード・リードおよびライトをサポートしない場合、データー・アクセス・コンポーネントがトークンを管理し、データーの概観(view)を維持して、ストアまたは下位のデーター・アクセス・コンポーネントがこの能力を提供しないことを上位のデーター・アクセス・コンポーネントが意識しないようにすることができる。
【００４８】
[0053]  要求元は、原初要求元または下流側要求元を含むことができる。例えば、要求元は、トークンを要求するアプリケーションを含むことができ、このアプリケーションがオフロード・ライトを実行することができる。このタイプの要求元を原初要求元と呼ぶことができる。他の例として、要求元は、クライアントからのコピー・コマンドを受け取るサーバー・アプリケーション（例えば、サーバー・メッセージ・ブロック（ＳＭＢ）サーバーのような）を含むことができる。このクライアントは、そのデーターをソース・ストアから宛先ストアに、コピー・コマンドによって、コピーすることを要求していたのでもよい。ＳＭＢサーバーは、この要求を受け取り、次いでオフロード・リードおよびライトを使用してコピーを実行することができる。この場合、この要求元を下流側要求元と呼ぶことができる。
【００４９】
[0054]  本明細書において使用する場合、特に指定されていない限りまたはコンテキストから明らかでない限り、要求元という用語は、原初要求元および下流側要求元の双方を含むように解釈するものとする。原初要求元は、オフロード・リードまたはライトの要求を最初に送った要求元である。言い換えると、要求元という用語は、要求元の上に追加のコンポーネントがあり、この要求元が追加のコンポーネントに応答してオフロード・リードを開始する場合、および要求元がそれ自体の責任でオフロード・リードまたはライトを始める場合を包含することを意図している。
【００５０】
[0055]  例えば、原初要求元は、データーをソースから宛先に送ることを望むアプリケーションであってもよい。このタイプの原初要求元は、１つ以上のオフロード・リードおよびライト要求をデーター・アクセス・コンポーネント２１５に送り、そのデーターを送ることができる。
【００５１】
[0056]  下流側要求元は、他の要求元からの要求を満たすために、１つ以上のオフロード・リードまたはライトを発行する要求元である。たとえば、データー・アクセス・コンポーネント２１５の内１つ以上が下流側要求元として動作することができ、他の要求元から出された要求を満たすために、１つ以上のオフロード・リードまたはライトを開始することができる。下流側要求元のいくつかの例が、ＲＡＩＤ−０、区分、およびスナップショット・データー・アクセス・コンポーネントを参照して先に示されているが、これらの例は、全てを含むことも網羅的であることも意図していない。
【００５２】
[0057]  一実施形態では、トークンは、想像することが難しい乱数または擬似乱数を含む。数値を想像することの難度は、その数値のサイズ、およびその数値を生成するために使用されるメカニズムによって選択することができる。この数値は、ストア２２０におけるデーターを表すが、そのデーターよりも遙かに小さくでもよい。例えば、要求元が１００ギガバイトのファイルに対してトークンを要求するとする。応答して、要求元は、例えば、５１２バイトまたは他のサイズに作られたトークンを受け取るのであってもよい。
【００５３】
[0058]  トークンが有効である限り、トークンはデーターを表す。実現例の中には、トークンがデーターに結び付けられたときに論理的に存在していたデーターを表すことができる場合もある。論理的にという用語は、データー全てがストアに存在しているのではないとき、または永続しなくてもよいときにも使用される。例えば、データーの一部がキャッシュの中にあり、トークンを供給できるようになる前にキャッシュを一掃しなければならないという場合がある。他の例として、データーの一部を他のデーターから導き出すこともできる。他の例として、別個のソースからのデーターを組み合わせる、またはそれ以外で操作して、トークンによって表されるデーターを作る必要がある場合もある。結び付きは、トークンの要求が受けられた後で、トークンが戻される前または戻される時点において行うことができる。
【００５４】
[0059]  他の実現例では、トークンによって表されるデーターが変化してもよい。トークンが有効である間にデーターが変化することができるか否かの挙動は、要求元と、またはコンポーネント間で取り決めることができる。これについては以下で更に詳しく説明する。
【００５５】
[0060]  トークンは、有効期限が過ぎしたがって無効になることがあり、または期限切れの前に明示的に無効にさせることもできる。例えば、トークンによって表されるファイルが閉じられたとき、要求元２１０をホストしているコンピューターが停止されたとき、トークンによって表されるデーターを有するボリュームがディスマウント(dismount)されたとき、意図されていたトークンの使用が完了したとき等において、トークンを明示的に無効にするためにメッセージを送ることができる。
【００５６】
[0061]  実現例の中には、トークンを無効にするメッセージが、強制として扱われ、それに従わせることもできる場合がある。他の実現例では、トークンを無効にするメッセージは、ヒントとして扱われるのでもよく、それに従っても従わなくてもよい。トークンが無効にされた後、もはやデーターにアクセスするためには使用することができない。
【００５７】
[0062]  トークンが表すデーターを保護する同じセキュリティー・メカニズムによって、このトークンも保護することができる。例えば、ユーザーがファイルを開いて読み出す権利を有する場合、これは、ユーザーがこのファイルをいずれかの場所でコピーすることを許可するトークンを、ユーザーが得ることを可能にすることができる。ファイルを読み出すためにチャネルが確保される場合、確保されたチャネルを介してトークンを渡すとよい。データーを他のエンティティに提供することができる場合、トークンは、データーを渡すことができるように、他のエンティティに渡せばよい。受け取る側のエンティティは、データー自体が受け取る側に送られていたのであれば受け取る側のエンティティがデーター自体を使用することができたのと丁度同じように、このトークンを使用してデーターを求めることができる。
【００５８】
[0063]  トークンは、不変であってもよい。即ち、任意の方法でトークンが変化させられた場合、もはやトークンが表していたデーターにアクセスするためにこれを使用可能ではなくするのでもよい。
【００５９】
[0064]  一実施形態では、データーを表す１つのトークンのみが供給される。しかしながら、他の実施形態では、複数のトークンを供給することができ、各々がデーターの一部を表す。更に他の実施形態では、データーの一部または全部が複数のトークンによって表されるのであってもよい。これらのトークンは、他のデーター構造の中にカプセル化すること、または別個に供給することもできる。
【００６０】
[0065]  カプセル化される場合、要求元がデーターに対して処理（例えば、オフロード・ライト、トークンの無効化）を実行しようとするときに、高度でない要求元(non-advanced requestor)であれば、単にデーター構造をデーター・アクセス・コンポーネントに渡すのであってもよい。より高度な要求元２１０であれば、カプセル化データー構造においてトークンを構成し直し、個々のトークンを他のトークンとは別々に使用してデーター処理を実行し、または複数のトークンが受け戻されたときに他の動作を実行することができるとよい。
【００６１】
[0066]  トークンを受け取った後、要求元２１０は、そのトークンによって表されるデーターの全部または一部を論理的に書き込むことを要求することができる。本明細書では、この動作をオフロード・ライトと呼ぶこともある。要求元２１０は、トークンを１つ以上のオフセットおよび長さと共にデーター・アクセス・コンポーネント２１５に送ることによって、これを行うことができる。
【００６２】
[0067]  オフロード・ライトでは、関与するトークン毎に、トークン関連オフセット(token-relative offset)および宛先関連オフセット(destination-relative offset)を示すことができる。これらのオフセットのいずれかまたは双方は、暗示的でも明示的でもよい。トークン関連オフセットは、例えば、トークンによって表されるデーターの先頭からのバイト数（または他の単位）を表すことができる。宛先関連オフセットは、宛先におけるデーターの先頭からのバイト数（または他の単位）を表すことができる。長さは、オフセットにおいて開始する、コピーするバイト数（または他の単位）を示すことができる。
【００６３】
[0068]  データー・アクセス・コンポーネント２１５の内１つ以上は、トークンを受け取り、このトークンがストアにおけるデーターを表すことを検証し、そうであれば、基礎となるストア２２０をホストする記憶システムの能力にしたがって、トークンによって表されるデーターの部分を論理的に書き込むことができる。基礎となるストア２２０をホストする記憶システムは、１つ以上のＳＡＮ、専用ファイル・サーバー、汎用サーバーまたは他のコンピューター、ネットワーク機器、図１のコンピューター１１０を実現するのに適した任意の他のデバイス等を含むことができる。
【００６４】
[0069]  例えば、ＳＡＮのような記憶システムによってストア２２０がホストされており、要求元２１０が、このＳＡＮに存在するデーターを表すトークンを使用して、オフロード・ライトをＳＡＮに要求している場合、ＳＡＮは、当該ＳＡＮ固有のメカニズムを利用して、データーを論理的に書き込むことができ、このデーターの他の物理的なコピーを行うことはない。例えば、参照カウンティング(reference counting)または他のメカニズムを使用して、データーの論理コピーの数を示すことができる。例えば、参照カウントをブロック・レベルで使用するとよく、ブロックの参照カウントを増やすことによって、このブロックを論理的にＳＡＮにおいて複製することができる。
【００６５】
[0070]  他の例として、ストア２２０が、オフロード・ライトが物理的にデーターをコピーすることを伴わないようにオフロード・ライトを実行するときに有用な他のメカニズムを有することができるファイル・サーバーのような、記憶システムによってホストされていてもよい。
【００６６】
[0071]  更に他の例として、ストア２２０が「データー処理能力がない」記憶システム(dumb storage system)によってホストされていてもよい。これは、オフロード・ライトに応答して、当該記憶システムの１つの位置から他の位置にデーターを物理的にコピーする。
【００６７】
[0072]  以上の例は、全てを含むことも網羅的であることも意図していない。実際に、要求元の視点からは、記憶システムが、オフロード・ライトに対応するデーター移動をどのように実施するのかについては、関連がなくてもよい。
【００６８】
[0073]  先に注記したように、記憶システムのデーター移動動作は、時間遅延することがある。シナリオの中には、データー移動動作が全く行われないこともある。例えば、記憶システムは、オフロード・ライトが完了したことに素早く応答することができるが、記憶システムが実際にデーター移動を開始する前に、基礎となるストアをトリムするコマンドを受けることもあり得る。この場合、記憶システムにおけるデーター移動動作が取り消されることもある。
【００６９】
[0074]  要求元２１０は、トークンを１つ以上の他のエンティティと共有することもできる。例えば、要求元は、その要求元２１０がホストされている装置に対して外部にある装置にホストされているアプリケーションにトークンを送ることができる。このアプリケーションは、次いで、要求元２１０が行うことができたのと同様に、このトークンを使用してデーターを書き込むことができる。このシナリオを図５に示す。
【００７０】
[0075]  図５に移ると、データー・アクセス・コンポーネント２１５を使用して、要求元２１０はストア２２０におけるデーターを表すトークンを要求して入手する。次いで、要求元２１０はこのトークンを要求元５１０に渡す。要求元５１０は、次いで、このトークンをデーター・アクセス・コンポーネント５１５を介して送ることによって、このデーターを書き込むことができる。
【００７１】
[0076]  データー・アクセス・コンポーネント２１５および５１５の内１つ以上が同じであってもよい。例えば、要求元２１０および５１０が同じ装置においてホストされている場合、データー・アクセス・コンポーネント２１５および５１５の全てが、双方の要求元に対して同じであってもよい。要求元２１０および５１０が異なる装置においてホストされている場合、一部のコンポーネントは同一であってもよいが（例えば、ストア２２０をホストするまたはこれへのアクセスを与える装置を実現するコンポーネント）、他のコンポーネントは異なっていてもよい（例えば、異なる装置におけるコンポーネント）。
【００７２】
[0077]  図２に戻って、一実施形態では、データー・アクセス・コンポーネント２１５の内１つ以上が、トークン・マネージャー（トークン・マネージャー２２５のような）を含む、またはこれを参照することもできる。トークン・マネージャーは、ストア２２０におけるデーターを表すトークンを生成または入手し、これらのトークンを正規の要求元に供給し、これらのトークンを使用してデーターを書き込む要求に応答し、トークンをいつ無効にするか決定することができる１つ以上のコンポーネントを含むことができる。以下で更に詳しく説明するが、トークン・マネージャーを複数のデバイスに跨がって分散させて、オフロード・リードにおいてトークンを得るため、そしてオフロード・ライトにおいてそのトークンを使用するための双方に、論理的に同じトークン・マネージャーが使用されるようにすることもできる。この場合、トークン・マネージャーの分散コンポーネントは、必要に応じて、互いに通信してトークンについての情報を得るようにするとよい。一実施形態では、トークン・マネージャーがトークンを生成し、これらのトークンをストア２２０におけるデーターと関連付けるトークン・ストアにこれらのトークンを格納し、要求元から受け取ったトークンがトークン・ストアにおいて発見されることを検証することができる。
【００７３】
[0078]  トークン・マネージャー２２５は、どこでデーターを発見することができるか特定するデーターと、トークンを関連付けることができる。また、このデーターは、トークン・マネージャー２２５が複数のデバイス間で分散されている場合にも、トークン・マネージャー２２５の分散コンポーネントからトークン情報（トークンが表すのはどのデーターか、トークンが期限切れになっているか否か、他のデーター等）を得るために使用することができる。また、トークン・マネージャー２２５は、トークンと関連のあるデーターの終端を越えたデーターを要求元が入手できないことを確保するために、トークンをデーターの長さと関連付けることもできる。
【００７４】
[0079]  ストア２２０におけるデーターを変化させる場合または削除する場合、トークン・マネージャー２２５は、どのようにトークン・マネージャー２２５が構成されているかに依存して、種々の動作を実行することができる。例えば、トークンによって表されるデーターを保存するように構成されている場合、トークン・マネージャー２２５は、トークンが生成された時点において存在していたデーターのコピーが維持されることを確保することができる。記憶システムの中には、データーが変化したときでもこのようなコピーを維持するための精巧なメカニズムを有するものもある。この場合、トークン・マネージャー２２５は、記憶システム（ストア２２０がその一部をなすことができる）に、ある時間期間またはそれ以外では命令された時間まで、元のデーターのコピーを維持することを命令することができる。
【００７５】
[0080]  他の場合では、記憶システムが、元のデーターのコピーを維持するメカニズムを実装しないこともある。この場合、トークン・マネージャー２２５またはデーター・アクセス・コンポーネント２１５の別のものが、ある時間期間またはそれ以外では命令された時間まで、元のデーターのコピーを維持することを命令することができる。
【００７６】
[0081]  尚、元のデーターのコピーを維持するには、元のデーターの複製コピーではなく、論理コピーを維持することを伴っても良いことを注記しておく。論理コピーは、正確なコピーを作るために使用することができるデーターを含む。例えば、論理コピーは、データーの現在の状態と共に、変化ログを含むことができる。変化ログを逆に現在の状態に適用することによって、元のコピーを得ることができる。他の例として、コピー−オン−ライト（copy-on-write)技法を使用して論理コピーを維持してもよく、この論理コピーは、元のデーターを再現するために使用することができる。以上の例は、限定を意図するのではない。何故なら、本明細書において記載する主題の形態の主旨や範囲から逸脱することなく、論理コピーを実現することができる方法は数多くあることは、当業者には分かっているからである。
【００７７】
[0082]  トークン・マネージャー２２５は、データーが変化したときにトークンを無効にするように構成することもできる。この場合、トークンと関連のあるデーターが変化することを可能にすることと合わせて、トークン・マネージャー２２５は、トークンがもはや有効でないことを示すことができる。これは、例えば、トークンを削除する、またはトークン・ストアにおいてこのトークンに無効の印を付けることによって行うことができる。トークン・マネージャー２２５が記憶システムのコンポーネントによって実装されている場合、１つ以上の障害コードを１つ以上の他のデーター・アクセス・コンポーネントに渡し、そして要求元２１０に渡すことができる。
【００７８】
[0083]  トークン・マネージャー２２５は、トークンの期限切れを管理することもできる。例えば、トークンが存続時間(time to live)を有することができる。この存続時間が過ぎた後、トークンを無効にすることができる。他の実施形態では、以下を含む種々の要因に依存して、トークンが有効のままでいることもできる。
【００７９】
[0084]  １．ストレージの制限。データーの元のコピーを維持すると、しきい値を超えて空間を消費する場合がある。その時点で、空間を取り戻すために１つ以上のトークンを無効にすることができる。
【００８０】
[0085]  ２．メモリーの制限。複数のトークンを維持することによって消費されるメモリーがしきい値を超える場合がある。その時点で、メモリー空間を取り戻すために、１つ以上のトークンを無効にすることができる。
【００８１】
[0086]  ３．トークンの数。システムが、ある設定された数のアクティブなトークンを許容することができる。トークンの最大数に達した後、トークン・マネージャーは、他のトークンを供給する前に、既存のトークンを無効にすることができる。
【００８２】
[0087]  ４．入力／出力（ＩＯ）オーバーヘッド。余りに多くのトークンを有することによるＩＯオーバーヘッドについては、トークン・マネージャーが１つ以上のトークンを無効にして、ＩＯオーバーヘッドを低減することができるようにするとよい。
【００８３】
[0088]  ５．ＩＯコスト／レイテンシー。ソースから宛先までのデーター移動のコストおよび／またはレイテンシーに基づいて、トークンを無効にすることもできる。例えば、コストがしきい値を超えた場合、トークンを無効にすることができる。同様に、レイテンシーがしきい値を超えた場合、トークンを無効にすることができる。
【００８４】
[0089]  ６．優先順位。ある種のトークンは、他のトークンよりも高い優先順位を有することができる。トークンを無効にしようとするとき、優先順位が低いトークンを無効にすることができる。トークンの優先順位は、種々の方針（例えば、使用度、トークンについての明示的または暗示的知識、要求元による要求、他の方針等）に基づいて調節することができる。
【００８５】
[0090]  ７．ストレージ・プロバイダーの要求。ストレージ・プロバイダー（例えば、ＳＡＮ）が、アクティブなトークンの数の減少を要求することができる。応答して、トークン・マネージャーは、適宜、１つ以上のトークンを無効にすることができる。
【００８６】
[0091]  トークンを無効にするのは、そのトークンが成功したことに基づいて、１つ以上のオフロード・ライトの前、または後であっても任意の時点に行うことができる。
[0092]  一実施形態では、トークンはデーターを表す値のみを含む。他の実施形態では、トークンは他のデーターも含むか、またはそれと関連付けられていてもよい。この他のデーターは、例えば、データーを得ることができる記憶デバイス、記憶システム、または他のエンティティを決定するために使用することができるデーター、ネットワーク記憶システムの識別情報、ルーティング・データーおよびヒント、アクセス制御メカニズムに関する情報、トークンによって表されるデーターに関するチェックサム、データーのタイプ（例えば、システム、メタデーター、データーベース、仮想ハード・ドライブ等）、データーのアクセス・パターン（例えば、シーケンシャル、ランダム）、使用パターン（例えば、しばしばアクセスする、時々アクセスする、まれにしかアクセスしない等）、望まれるデーターの整列、オフロード・ライトの間にデーターの配置を最適化するためのデーター（例えば、異なるタイプの記憶デバイスを有する混成環境において）等を含むことができる。
【００８７】
[0093]  以上の例は、トークンに含むことができるまたはトークンと関連付けることができる他のデーターを全てを含むことも網羅的であることも意図していない。本明細書における教示に基づいて、当業者は、本明細書において記載する主題の形態の主旨や範囲から逸脱することなく、トークンと共に伝えることができる他のデーターを認めることができよう。
【００８８】
[0094]  ストアに対するリード／ライト要求は、ファイル・フラグメント境界、ＲＡＩＤストライプ境界、ボリューム空間境界等に遭遇すると、内部において、記憶スタックの下位層にリード要求を分割する結果になることもある。この分割が行われるとよいのは、ソース／宛先が分割の前後で（across)異なるからであり、またはオフセット変換が分割の前後で異なるからである。この分割は、結果的に生ずる分割ＩＯが全て完了するまで、分割される必要がある要求を完了しないことによって、スプリッターによって隠すこともできる。
【００８９】
[0095]  このように記憶スタックにおける分割層内での分割を隠すのは、記憶スタック内における上位の層が分割について知る必要がないということにおいて便利である。本明細書において記載するトークンに基づく手法を使用する場合、一実施形態では、分割が見えるとよい。具体的には、分割の前後でソース／宛先が異なるために分割が行われる場合、オフロード・プロバイダー（以下で説明する）が分割の前後で異なる可能性がある。例えば、データーを複製する場合（または複製しない場合であっても）、データーへのアクセスを与える複数のオフロード・プロバイダーがあることがある。他の例として、ＳＡＮに面する(front)複数のファイル・サーバーがあることもある。ＳＡＮに加えてサーバーまたは他のデーター・アクセス・コンポーネントの内１つ以上をオフロード・プロバイダーと見なすこともある。
【００９０】
[0096]  オフロード・プロバイダーとは、ストア−−ソースまたは宛先と関連のあるデーターへのアクセスを与える論理エンティティ（恐らくは、複数のデバイス間に広がる複数のコンポーネントを含む）である。本明細書において使用する場合、アクセスは、データーを読み出すこと、データーを書き込むこと、データーを削除すること、データーを更新すること、以上の内２つ以上を含む組み合わせ等を含むことができる。論理的に、オフロード・プロバイダーは、オフロード・リードまたはライトを実行することができる。物理的に、オフロード・プロバイダーは、データー・アクセス・コンポーネント２１５の内１つ以上を含むことができ、更にトークン・マネージャー２２５も含むことができる。
【００９１】
[0097]  オフロード・プロバイダーは、データーをソース・ストアから送り、データーを宛先ストアに書き込み、このデーターと関連のあるトークンを受け取ったときに提供すべきデーターを維持することができる。実現例の中には、オフロード・プロバイダーが、データーが論理的に宛先ストアに書き込まれた後に、オフロード・ライト・コマンドが完了したことを示すことができる場合もある。加えて、オフロード・プロバイダーは、オフロード・ライト・コマンドが完了したことを示すが、都合がよくなるまで、オフロード・ライトと関連のあるデーターを物理的に書き込むのを遅らせることもできる。
【００９２】
[0098]  データーが分割されるとき、オフロード・プロバイダーは、要求されたデーターの一部へのアクセスを与えることができるが、要求されたデーターの他の部分へのアクセスを与えることはできない。この場合、別々のトークンを、分割点の前にある部分に、そして分割点の後にある部分に供給することができる。記憶スタックの層またはオフロード・プロバイダーにおいて、他に実現例に依存する制限があると、他の理由のために、トークンが分割範囲全域に亘ることができなくなる場合がある。要求元はリードから戻されるトークン（１つまたは複数）を見ることができるので、この実施形態では、分割は要求元には見ることができるのであってよい。
【００９３】
[0099]  分割を扱う２つの手法例を以下に示す。
[00100]  １．リード要求が１つよりも多いトークンを戻すことができ、この場合、各トークンには、要求されたデーターの内異なる範囲が関連付けられている。これら複数のトークンは、前述のように、１つのデーター構造の中で戻すことができる。要求元がデーターを書き込もうとしている場合、データー構造全体を渡すことができ、また高度な方法で(advanced way)動作している場合、データー構造における１つ以上のトークンのみを渡すことができる。
【００９４】
[00101]  ２．１つのトークンが戻された場合、このトークンは、本来要求されたデーターから狭められた範囲を表す場合がある。したがって、要求元は、このトークンを使用して、短縮範囲の長さ限度内で１回以上のオフロード・ライトを実行することができる。オフロード・ライトが要求された場合、要求された書き込みの長さを切り捨てることもできる。リードおよびライト双方に対して、要求元は、以前の要求によって扱われなかったオフセットにおいて開始する他の範囲に対する要求を行うことができる。このように、要求元は、その要求元が必要とする範囲全体にわたって動作する(work)ことができる。
【００９５】
[00102]  以上の手法は例示に過ぎない。本明細書における教示に基づいて、当業者は、本明細書において記載する主題の形態の主旨や範囲から逸脱することなく、利用することができる分割を扱う他の手法も認めることができよう。
【００９６】
[00103]  同じスタックの中に複数のオフロード・プロバイダーがあってもよい。オフロード・リード要求から戻される所与の範囲（範囲切り捨ての場合、恐らく唯一の範囲）について、トークンを供給しようとする複数のオフロード・プロバイダーがあることもある。一実施形態では、同じデーターに対するこれら複数のトークンを要求元に戻し、オフロード・ライトにおいてこの要求元によって使用することができる。
【００９７】
[00104]  例えば、要求元は、オフロード・ライトにおいて使用するために、これらのトークンから１つを選択することができる。１つのトークンだけをオフロード・プロバイダーに渡すことによって、要求元は、このように、データーを得るために使用されるソース・オフロード・プロバイダーを決定することができる。他の例では、要求元がこれらのトークンの内２つ以上を宛先オフロード・プロバイダーに渡すこともできる。すると、宛先オフロード・プロバイダーは、トークンと関連のあるソース・オフロード・プロバイダーから、トークンによって表されるデーターを得ようとする１つ以上を選択することができる。
【００９８】
[00105]  他の例では、複数のトークンを戻して、バルク・データーのオフロード・コピー(offloaded copy)、およびバルク・データーに加えて他の補助データーのオフロード・コピーの双方を可能にすることもできる。補助データーの一例に、データーに関するメタデーターがある。例えば、ファイル・システム・オフロード・プロバイダーが、オフロード・ライト要求が２つのトークン（例えば、主データー・トークンおよびメタデーター・トークン）を含み、オフロード・コピー全体が成功するために宛先スタックにおいて首尾良く使用されることを指定することができる。
【００９９】
[00106]  対照的に、スタックにおける複数のバルク・データー・オフロード・プロバイダーをサポートする目的で使用される複数のトークンは、オフロード・ライトが成功するために、宛先スタックにおいて１つのトークンしか使用してはならないことが必要となる場合がある。
【０１００】
[00107]  データーをソースから宛先に送るのに複数のオフロード・プロバイダーが利用可能であるとき、要求元は、利用可能なものの中から１つ以上の特定のオフロード・プロバイダーを選択することができるとよい。一実施形態では、これは、スキップＮコマンド(skip N command)を使用することを含むことができ、ここで「スキップＮ」は、最初のＮ個のオフロード・プロバイダーを飛ばすことを示す。他の実施形態では、特定のオフロード・プロバイダー（１つまたは複数）を特定するために使用される他のメカニズムがあってもよい（例えば、オフロード・プロバイダーのＩＤ）。更に他の実施形態では、一部のオフロード・プロバイダーが、トークンによって表されるデーターをコピーすることができないかもしれず、他のものはそれをできるかもしれないので、複数のトークンから１つを選択することは、データーをコピーするためのオフロード・プロバイダー（１つまたは複数）を選択するために使用することもできる。
【０１０１】
[00108]  実施形態の中には、２つよりも多いオフロード・プロバイダーが、トークンによって表されるデーターをコピーするために利用可能である場合、最初のオフロード・プロバイダー、最後のオフロード・プロバイダー、ランダムなオフロード・プロバイダー、少なくともロードされているオフロード・プロバイダー、最も効率的なオフロード・プロバイダー、レイテンシーが最も少ないオフロード・プロバイダー、またはそれ以外で決定されたオフロード・プロバイダーを自動的に選択することもできる。
【０１０２】
[00109]  トークンは、ハード・ディスクまたは他の記憶媒体のあるセクターにおいて開始するデーターを表すことができる。トークンが表すデーターは、正確にセクターの倍数であることもあるが、多くの場合そうではない。ファイル処理においてその長さの終端を越えるデーターに対してトークンが使用されている場合、戻されるデーターは、ヌル、０、またはデーターがないことの他の何らかの指示とすることができる。つまり、要求元が、トークンによって表されるデーターの終端を越えてコピーしようとする場合、要求元は、このメカニズムによって、データーの終端を越えて物理的に位置するデーターを得ることはできない。
【０１０３】
[00110]  大きなファイルの破棄(zeroing)をオフロードするために、トークンを使用することもできる。例えば、トークンが、ヌル、０、または他の「データーなし」ファイルを表すことができる。このトークンをオフロード・ライトにおいて使用することによって、ファイルまたは他のデーターを初期化するために、このトークンを使用することができる。
【０１０４】
[00111]  図３は、トークン・マネージャーが、ストアをホストするデバイスによってホストされるシステムのコンポーネントの配置例を概略的に表すブロック図である。図示のように、システム３０５は、図２の要求元２１０およびストア２２０を含む。図３のデーター・アクセス・コンポーネント２１５は、要求元２１０をホストするデバイス３３０に存在するデーター・アクセス・コンポーネント３１０と、ストア２２０をホストするデバイス３３５に存在するデーター・アクセス・コンポーネント３１５とに分割されている。他の実施形態では、ストア２２０がデバイス３３５の外部にある場合、ストア２２０へのアクセスを与える追加のデーター・アクセス・コンポーネントがあってもよい。
【０１０５】
[00112]  デバイス３３５は、オフロード・プロバイダーであると見なすことができる。何故なら、このデバイスは、トークンを供給するために必要なコンポーネント、およびトークンを与えられるとデーターを書き込むのに必要なコンポーネントを含むからである。
【０１０６】
[00113]  トークン・マネージャー３２０は、前述のように、トークンを生成しそれを有効にすることができる。例えば、要求元２１０がストア２２０におけるデーターに対するトークンを要求すると、トークン・マネージャー３２０は、そのデーターを表すトークンを生成することができる。次いで、このトークンを要求元２１０に、データー・アクセス・コンポーネント３１０および３１５を介して送り返すことができる。
【０１０７】
[00114]  トークンの生成と合わせて、トークン・マネージャー３２０はトークン・ストア３２５においてエントリーを作ることができる。このエントリーは、ストア２２０のどこで、トークンによって表されるデーターを発見することができるかを示すデーターと、このトークンを関連付けることができる。また、エントリーは、いつトークンを無効にすべきか、トークンの存続時間、他のデーター等というような、トークンを管理するときに使用される他のデーターも含むことができる。
【０１０８】
[00115]  要求元２１０または任意の他のエンティティがトークンをトークン・マネージャー３２０に供給すると、このトークン・マネージャーはトークン・ストア３２５において参照を行い、そのトークンが存在するか否か判断することができる。トークンが存在し有効である場合、トークン・マネージャー３２０は位置情報をデーター・アクセス・コンポーネント３１５に提供し、これらのコンポーネントが論理的に、要求通りに、データーを書き込むことができるようにする。
【０１０９】
[00116]  複数の物理的デバイスがストア２２０へのアクセスを与える場合、トークン・マネージャー３２０および／またはトークン・ストア３２５が、これらの物理デバイスの内１つ以上によってホストされているコンポーネントを有するとよい。例えば、トークン・マネージャー３２０がデバイス全てに亘るトークン状態を複製してもよく、集中トークン・コンポーネントを有して、他のトークン・コンポーネントがそれを参照するのでもよく、分散型システムを有し、トークン状態が必要に応じてピア・トークン・マネージャーから供給される等であってもよい。
【０１１０】
[00117]  論理的に、トークン・マネージャー３２０はトークンを管理する。物理的に、トークン・マネージャー３２０は、１つのデバイスによってホストされてもよく、または２つ以上のデバイスにわたって分散されたコンポーネントを有してもよい。トークン・マネージャー３２０は、ストア２２０をホストするいずれのデバイスからも別であるデバイスにホストされるのであってもよい。例えば、トークン・マネージャー３２０は、アクセス・コンポーネント３１５がコールするサービスであって、トークンを生成し有効にし、それと関連のある位置情報を提供することができるサービスとして存在することもできる。
【０１１１】
[00118]  一実施形態では、トークン・ストア３２５をストア２２０に格納することもできる。他の実施形態では、トークン・ストア３２５はストア２２０と別々であってもよい。
【０１１２】
[00119]  図４は、本明細書において記載する主題の形態にしたがって動作するシステムのコンポーネントの他の配置例を概略的に表すブロック図である。図示のように、装置４０５は、要求元２１０ならびにデーター・アクセス・コンポーネント３１０および仮想化層４３０もホストする。データー・アクセス・コンポーネント３１０は、積層状に配列されており、コンポーネント４１５、４２０、４２５、および他のコンポーネント（図示せず）を含むＮ個のコンポーネントを含む。数値Ｎは変数であり、装置毎に異なってもよい。
【０１１３】
[00120]  要求元２１０は、データー・アクセス・コンポーネント３１０の内１つ以上に、アプリケーション・プログラミング・インターフェース（ＡＰＩ）４１０を介してアクセスする。仮想化層４３０は、要求元またはデーター・アクセス・コンポーネントの内任意のものが仮想環境内に存在するかもしれないことを示す。
【０１１４】
[00121]  仮想環境とは、コンピューターによってシミュレートまたはエミュレートされた環境のことである。仮想環境は、物理的マシン、オペレーティング・システム、１つ以上のインターフェースの集合、以上の内の一部、以上の組み合わせ等をシミュレートまたはエミュレートすることができる。マシンがシミュレートまたはエミュレートされるとき、そのマシンが仮想マシンと呼ばれることもある。仮想マシンとは、その仮想マシンにおいて実行しているソフトウェアには、物理的マシンであるように見えるマシンである。ソフトウェアは、仮想ハード・ドライブ、仮想フロッピー（登録商標）・ディスク等のような仮想記憶デバイスの中にファイルを保存することができ、仮想ＣＤからファイルを読み出すことができ、仮想ネットワーク・アダプターを介して通信すること等ができる。
【０１１５】
[00122]  仮想ハード・ドライブ、フロッピー（登録商標）、ＣＤ、または他の仮想記憶デバイスの中にあるファイルは、装置４０５に対してローカルまたはリモートでもよい物理的媒体によってバックアップすることもできる。仮想化層４３０は、物理的媒体上にデーターを配列し、このデーターにアクセスする１つ以上のコンポーネントが、これらが仮想環境におけるデーターにアクセスしていることが分からないように、そのデーターを仮想環境に提供することができる。
【０１１６】
[00123]  １つよりも多い仮想環境が１つのコンピューターにおいてホストされていてもよい。即ち、２つ以上の仮想環境が１つの物理的コンピューターにおいて実行してもよい。各仮想環境において実行するソフトウェアには、仮想環境はそれ自体のリソース（例えば、ハードウェア）を有するように見えるが、１つのコンピューターにおいてホストされているこれらの仮想環境は、互いにそしてホストしているオペレーティング・システムと、１つ以上の物理的デバイスを物理的に共有すると考えられる。
【０１１７】
[00124]  ソース・ストア４３５は、要求元２１０がトークンを要求しているストアを表す。宛先ストア４４０は、要求元がトークンを使用してデーターを書き込むことを要求するストアを表す。実現例では、ソース・ストア４３５および宛先ストア４４０は、１つのストア（例えば、複数のボリュームを有するＳＡＮ）、または２つ以上のストアとして実装することができる。ソース・ストア４３５が元のデーターのコピーを維持することをサポートしない場合、コンポーネント４１５〜４２５の内１つ以上が、トークンの寿命の間元のデーターのコピーを維持するように動作することができる。
【０１１８】
[00125]  ソース・ストア４３５および宛先ストア４４０が２つの別々のストアとして実装されている場合、装置４０５を巻き込むことなく、追加のコンポーネント（例えば、記憶サーバーまたは他のコンポーネント）がデーターをソース・ストア４３５から宛先ストア４４０に送ることができる。一実施形態では、しかしながら、ソース・ストア４３５および宛先ストア４４０が２つの別々のストアとして実装されていても、データー・アクセス・コンポーネント３１０の内１つ以上が、ソース・ストア４３５から宛先ストア４４０にデーターをコピーするように動作することができる。要求元２１０は、どのようにして基礎となるコピーが行われるかについて、知っていても知らなくてもよく、知らされても知らされなくてもよい。
【０１１９】
[00126]  要求元２１０とソース・ストア４３５および／または宛先ストア４４０との間に、複数の経路がある場合もある。一実施形態では、本明細書において記載するトークン方法は、表されたデーター（例えば、トークン・マネージャーを介して入手可能）が入手可能であることを示す情報があれば、通過する経路には無関係である。言い換えると、要求元２１０が、仮想化層４３０を通過する経路、仮想化層４３０を通過しないネットワーク経路、ＳＭＢ経路、あるいはソース・ストアまたは宛先ストアまでの任意の他の経路を有する場合、要求元２１０は、これらの経路の内１つ以上を使用して、オフロード・ライトを宛先ストア４４０に発行することができる。言い換えると、ソース・ストアまでに通過する経路、および宛先ストアまでに通過する経路は、同じであっても異なっていてもよい。
【０１２０】
[00127]  オフロード・ライトでは、トークンは、１つ以上のオフセットと、書き込むデーターの長さと共に、宛先ストア４４０に渡される。データー・アクセス・コンポーネント（必ずしもデーター・アクセス・コンポーネント３１０の内の１つでなくてもよい）がこのトークンを受け取り、このトークンを使用してトークン・マネージャーから位置情報を得て、ソース・ストア４３５から宛先ストア４４０に論理的にデーターを書き込むことを開始することができる。
【０１２１】
[00128]  コンポーネント４１５〜４２５の内１つ以上または他のコンポーネント（図示せず）がトークン・マネージャーを実装することもできる。
[00129]  以下に、本明細書において記載する主題の形態と共に使用することができるいくつかのデーター構造のいくつかの定義例を示す。
【０１２２】
【表１−１】
2013539119.tif 000003
【０１２３】
【表１−２】
2013539119.tif 000004
【０１２４】
【表１−３】
2013539119.tif 000005
【０１２５】
[00130]  本明細書において記載する主題の態様を実現するためのＩＯＣＴＬデーター構造の例は、次のように定めることができる。
【０１２６】
【表２−１】
2013539119.tif 000006
【０１２７】
【表２−２】
2013539119.tif 000007
【０１２８】
【表２−３】
2013539119.tif 000008
【０１２９】
【表２−４】
2013539119.tif 000009
【０１３０】
【表２−５】
2013539119.tif 000010
【０１３１】
[00131]  図６から図８は、本明細書において記載する主題の形態にしたがって行うことができる動作例を概略的に表す流れ図である。説明を簡単にするために、図６から図８と関連付けて説明する方法は、一連の動作として図示されており、そのように説明する。尚、本明細書において記載する主題の形態は、図示される動作、および／またはその動作の順序によって限定されないことは言うまでもないことであり、認められてしかるべきである。一実施形態では、これらの動作は、以下で説明するような順序で行われる。しかしながら、他の実施形態では、これらの動作が並行に行われること、他の順序で行われること、および／または本明細書には紹介や説明がされない他の動作と共に行われることもある。更に、本明細書において記載する主題の形態にしたがってこの方法を実施するためには、図示されている動作の全てが必要ではない場合もある。加えて、この方法は、代わりに、状態図による一連の相互に関係付けられた状態として、またはイベントとして表すこともできることは、当業者には理解され認められよう。
【０１３２】
[00132]  図６に移ると、ブロック６０５において、動作が開始する。ブロック６１０において、ストアのデーターの表現に対する要求が受け取られる。この要求は、ストアの一部を特定する記述（例えば、位置および長さ）と共に伝えられる。ここでは、「一部」という単語は、ストアの全部または全部未満であってもよい。例えば、図２を参照すると、要求元２１０は、ストア２２０におけるデーターに対してトークンを要求することができる。要求を行うとき、要求元２１０は、データーの位置（例えば、ファイル名、開いているファイルに対するハンドル、ファイルへの物理的オフセット、ボリューム、生ディスク等）を長さと共に送ることができる。
【０１３３】
[00133]  ブロック６１５において、要求に応答して、トークンがデーターに結び付けられたときにストアの一部に論理的に格納されていたデーターを表すトークンが受け取られる。前述のように、トークンは、要求されたデーターよりも少ないデーターを表すこともある。例えば、図２を参照すると、データー・アクセス・コンポーネント２１５の内１つ以上が、要求されたデーターまたはその部分集合を表すトークンを要求元２１０に戻すことができる。トークンは、そのトークンによって表されるデーターのサイズとは無関係なサイズ（あるビット数またはバイト数）であってもよい。トークンは、データー構造における他のトークンと共に受け取られてもよく、この場合データー構造における各トークンには、データーの異なる部分と関連付けられているか、または２つ以上のトークンがデーターの同じ部分に関連付けられている。
【０１３４】
[00134]  トークンの受け取りは、トークンが、要求されたデーターの部分集合であるデーターを表すことの指示を伴うこともできる。この指示は、例えば、トークンによって表されるデーターの長さの形態をなすことができる。
【０１３５】
[00135]  ブロック６２０において、オフロード・ライトを実行するために、トークンが供給される。トークンは、オフロード・プロバイダーを介して、データーの全部または一部のどちらを論理的に書き込むのかを示す情報と共に供給することもできる。この情報は、例えば、宛先関連オフセット、トークン関連オフセット、および長さを含むことができる。トークン関連オフセットが０の場合、そして長さがトークンによって表されるデーターの全長に等しい場合、データーの全てをコピーすることを示すことができる。一方、長さがデーターの全長未満である場合、データー全体未満をコピーすることを示すことができる。
【０１３６】
[00136]  例えば、図２を参照すると、要求元は、トークンをトークン・マネージャー２２５に渡したかもしれないデーター・アクセス・コンポーネント２１５にトークンを渡して、表されたデーターの位置を得ることができる。トークン・マネージャー２２５が、ストア２２０へのアクセスを与える記憶システムの一部である場合（例えば、ＳＡＮにおける）、トークンはＳＡＮのデーター・アクセス・コンポーネントに供給され、次いで、このデーター・アクセス・コンポーネントがこのトークンを使用してデーターを特定し、要求によって示されるデーターを論理的に書き込むことができる。
【０１３７】
[00137]  前述のように、オフロード・プロバイダーは、要求を送る装置の外部であってもよい。加えて、一旦オフロード・プロバイダーが要求を受けたなら、このオフロード・プロバイダーは、要求を送った装置の任意のコンポーネントとの追加の相互作用とは関係なく、データーを論理的に書き込むことができる。例えば、図３を参照すると、一旦トークンおよびライト要求がデーター・アクセス・コンポーネント３１５に到達すると、デバイス３３５のコンポーネントは、デバイス３３０からの追加の補助が全くなくても、要求通りにデーターを論理的に書き込むことができる。
【０１３８】
[00138]  ブロック６２５において、何らかの他の動作があれば、実行することができる。尚、ブロック６３０において、トークンが生成された後の任意の時点において、要求元（またはデーター・アクセス・コンポーネントの内他のもの）が、トークンを無効にすることを明示的に要求できることを注記しておく。この要求がコピー動作の間に送られた場合、一実現例では、コピーが完了するまで進めることを許可するとよい。他の実現例では、コピーを中断することもでき、エラーを発生してもよく、または他の動作を行ってもよい。
【０１３９】
[00139]  図７に移って、ブロック７０５において、動作が開始する。ブロック７１０において、ストアのデーターの表現に対する要求が受け取られる。この要求は、ストアにおいてデーターが位置する部分を特定する記述と共に伝えられる。この要求は、記憶エリア・ネットワークのコンポーネントまたは他のデーター・アクセス・コンポーネントにおいて受け取られるのであればよい。例えば、図３を参照すると、データー・アクセス・コンポーネント３１５の内１つ以上が、トークンの要求を、ストア２２０におけるデーターを特定するオフセット、長さ、論理単位番号、ファイル・ハンドル等と共に受け取ることができる。
【０１４０】
[00140]  ブロック７１５において、トークンが生成される。生成されたトークンは、論理的に格納された（例えば、図３のストア２２０に）データーを表すことができる。前述のように、このデーターは、実現例に依存して、トークンが有効である間変化しないのでも、変化することが許されているのでもよい。このトークンは、以前に示したように、要求されたデーターの部分集合を表す場合もある。例えば、図３を参照すると、トークン・マネージャー３２０は、ストア２２０において、要求元２１０によって要求されたデーターを表すトークンを生成することができる。
【０１４１】
[00141]  ブロック７２０において、データー構造によって、トークンが、表されているデーターと関連付けられる。例えば、図３を参照すると、トークン・マネージャー３２０は、生成されたトークンを、表されているデーターと関連付ける関連付けをトークン・ストア３２５に格納することができる。
【０１４２】
[00142]  ブロック７２５において、トークンが要求元に供給される。例えば、図３を参照すると、トークン・マネージャーまたはデーター・アクセス・コンポーネント３１５の内１つが、要求元２１０に供給するために、トークンをデーター・アクセス・コンポーネント３１０に供給することができる。トークンは、このトークンによって表されるデーターのサイズを示す長さと共に戻すことができる。
【０１４３】
[00143]  ブロック７３０において、何らかの他の動作があれば、行うことができる。尚、ブロック７３５において、トークンが生成された後の任意の時点において、トークン・マネージャーが、前述のような種々の要因に依存してトークンを無効にすることができることを注記しておく。データーに影響を及ぼす書き込み動作の間にトークンが無効にされた場合、一実現例では、書き込みを完了するまで進めることを許可するとよい。他の実現例では、書き込みを中断することもでき、エラーを発生してもよく、または他の動作を行ってもよい。
【０１４４】
[00144]  図８は、オフロード・ライトがオフロード・プロバイダーにおいて受け取られたときに、本明細書において記載する主題の種々の形態にしたがって行うことができる動作例を概略的に表すブロック図である。ブロック８０５において、動作が開始する。
【０１４５】
[00145]  ブロック８１０において、トークンが受け取られる。トークンは、このトークンによって表されるデーターの全部または一部のどちらを論理的に書き込むのかを示すデーターと共に受け取ることができる。例えば、図３を参照すると、データー・アクセス・コンポーネント３１５の内の１つが、図３のデーター・アクセス・コンポーネント３１０の内の１つからトークンを受け取ることができる。
【０１４６】
[00146]  ブロック８１５において、このトークンが有効か否かについて判断する。例えば、図３を参照すると、トークン・マネージャー３２０は、トークン・ストア３２０を参照することによって、受け取ったトークンが有効か否か判断することができる。トークンが有効である場合、動作はステップ８２０に進む。そうでない場合、要求に応じなくてもよく、動作はブロック８１７に進む。
【０１４７】
[00147]  ブロック８１７において、要求は応じられない(fail)。例えば、図３を参照すると、データー・アクセス・コンポーネント３１５は、コピーが行われないことを示すことができる。
【０１４８】
[00148]  ブロック８２０において、オフロード・コピーによって要求されたデーターが特定される。例えば、図３を参照すると、トークン・マネージャー３２０は、トークン・ストア３２５を参照して、トークンと関連のあるデーターの位置または他の識別子を得ることができる。トークンは、このトークンによって表されるデーターをホストする装置を示すデーターを含むこと、またはこのデーターと関連付けることができる。
【０１４９】
[00149]  ブロック８２５において、トークンによって表されるデーターの論理的書き込みが実行される。例えば、図３を参照すると、デバイス３３５が、トークンによって表されるデーターを論理的に書き込むことができる。
【０１５０】
[00150]  ブロック８３０において、何らかの他の動作があれば、実行することができる。
[00151]  以上の詳細な説明から分かるように、オフロード・リードおよびライトに関する形態について説明した。本明細書において記載する主題の形態は、種々の変更および代替構造の余地があるが、図面にはその内のある種の例示の実施形態を示し、以上で詳細に説明した。しかしながら、特許請求する主題の形態を、開示された特定の形態に限定するという意図はなく、逆に、全ての変更、代替構造、および本明細書において記載した主題の種々の形態の主旨および範囲に該当する均等物を全て包含することを意図していることは言うまでもない。
【図１】
2013539119.tif 000011
【図２】
2013539119.tif 000012
【図３】
2013539119.tif 000013
【図４】
2013539119.tif 000014
【図５】
2013539119.tif 000015
【図６】
2013539119.tif 000016
【図７】
2013539119.tif 000017
【図８】
2013539119.tif 000018
【国際調査報告】
2013539119.tif 000019
2013539119.tif 000020