(57)【特許請求の範囲】
【請求項１】
少なくとも１つのプロセッサーとメモリーを含む計算デバイス上で実施される方法であって、
前記計算デバイスによって、各々が固定サイズである２つ以上のサブトークンを受け取るステップであって、前記サブトークンは、前記固定サイズよりも大きなサイズの拡大トークンを集合的に表し、前記拡大トークンに対応するデータがオフロード・プロバイダーによって維持され、前記拡大トークンは、当該拡大トークンが有効である限りインミュータブルであるデータを表す、ステップと、
前記拡大トークンを作成するために前記２つ以上のサブトークンからのデータを組み合わせるステップであって、前記２つ以上のトークンは、前記拡大トークンに含まれる全てのデータを少なくとも含む、ステップと、
前記計算デバイスによって、前記拡大トークンからキーを取得するステップと、
前記拡大トークンによって表される前記データの一部を、前記データの当該一部が前記サブトークンを供給したイニシエーターを通過することなく、取得するために、前記計算デバイスによって、前記キーの証拠を前記オフロード・プロバイダーに供給するステップと、
を含む方法。
【請求項２】
前記キーを取得するステップは、前記サブトークンのうちの１または複数から暗号論的安全乱数を取得するステップを含み、前記方法は更に、前記サブトークンのうちの１または複数からアドレシング情報を取得するステップを含み、前記アドレシング情報は、前記拡大トークンによって表される前記データを取得可能なソースを識別する、請求項１に記載の方法。
【請求項３】
前記サブトークンは、各々正確に５１２バイトであり、または、前記サブトークンのうちの１または複数は、規格によって要求されるフィールドを含み、前記フィールドは、データ・トークン・タイプの表現を識別する、請求項１に記載の方法。
【請求項４】
前記サブトークンは、サーバー・メッセージ・ブロックによってファイル・データを転送するファイル共有プロトコルによって送信される、請求項１に記載の方法。
【請求項５】
前記サブトークンは、遠隔手続き呼び出しを介してファイルにアクセスする分散型ファイル・システム・プロトコルによって送信される、請求項１に記載の方法。
【請求項６】
アクションを実施するように一体に構成された計算デバイスと少なくとも１つのプログラム・モジュールとを備えるシステムであって、前記計算デバイスは、少なくとも１つのプロセッサーとメモリーを含み、前記アクションは、
前記計算デバイスによって、イニシエーターによって開始されたオフロード・リード・メッセージを受け取るステップと、
前記計算デバイスによって、前記受け取られたオフロード・リード・メッセージに応答してキーを生成するステップと、
前記計算デバイスによって、各々が固定サイズであるサブトークンを供給するステップであって、前記サブトークンは、オフロード・プロバイダーによって維持される拡大トークンに対応する前記固定サイズのデータよりも大きなサイズの拡大トークンを集合的に表し、前記拡大トークンは、当該拡大トークンが有効である限りインミュータブルであるデータを表し、前記拡大トークンは、前記キーを含み、前記キーは、前記拡大トークンを前記拡大トークンに対応する前記データと関連付ける数値であり、前記２つ以上のサブトークンからのデータを組み合わせることによって前記拡大トークンが作成され、前記２つ以上のサブトークンは、前記拡大トークンに含まれる全てのデータを少なくとも含む、ステップと、
を含む、システム。
【請求項７】
コンピューター実行可能命令を有するコンピューター記憶媒体であって、前記コンピューター実行可能命令は、少なくとも１つのメモリーを含む計算デバイスの少なくとも１つのプロセッサーによって実行されると、前記計算デバイスに、
前記計算デバイスによって、ソース・ストレージ・スタックのコンポーネントと通信することによりオフロード・リード要求を開始するステップと、
前記計算デバイスによって、前記オフロード・リード要求に応答してサブトークンを受け取るステップであって、前記サブトークンは、個々の前記サブトークンのいずれよりも大きな拡大トークンを集合的に表し、前記拡大トークンは、当該拡大トークンが有効である限りインミュータブルであるデータを表す、ステップと、
前記計算デバイスによって、前記サブトークンを宛先ストレージ・スタックに供給することによりオフロード・ライト要求を開始するステップであって、前記拡大トークンは、キーを含み、前記キーは、前記拡大トークンを前記拡大トークンに対応する前記データと関連付ける数値であり、前記２つ以上のサブトークンからのデータを組み合わせることによって前記拡大トークンが作成され、前記２つ以上のサブトークンは、前記拡大トークンに含まれる全てのデータを少なくとも含む、ステップと、
を含むアクションを実施させる、コンピューター記憶媒体。
【請求項８】
前記アクションは、更に、前記オフロード・リード要求と共に、前記オフロード・リード要求に応答して戻されることが許されるサブトークンの最大数を示す数値を送るステップを含む、請求項７に記載のコンピューター記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  データを転送する１つのメカニズムは、そのデータをソース位置のファイルから主メモリーに読み出すこと、そしてそのデータを主メモリーから宛先位置に書き込むことである。環境によっては、これは比較的小さいデータに対しては容認可能に作用することもあるが、データが増えるに連れて、このデータを読み取ってこのデータを他の位置に転送するのに要する時間は長くなる。加えて、ネットワークを通じてデータにアクセスする場合、このネットワークが、データをソース位置から宛先位置に転送するときに、追加の遅延を負わせるおそれがある。更に、セキュリティの問題が記憶構成の複雑さと結びついて、データ転送を複雑化するおそれもある。
【０００２】
[0002]  本明細書において特許請求する主題は、欠点を解消する実施形態にも、以上で説明したような環境だけで動作する実施形態にも限定されない。むしろ、この背景は、本明細書において説明する実施形態を実施することができる技術分野の一例を例示するために設けられた。
【発明の概要】
【０００３】
[0003]  端的に言うと、本明細書において説明する主題は、オフロード技術に関する。態様では、オフロード・プロバイダー（offload provider）に拡大トークン（larger token）を使用させるメカニズムについて説明する。拡大トークンは、物理的でも仮想的でもよい。オフロード・リード・コマンドに応答して、拡大トークンを作成することができ、拡大トークンからのデータを、それよりも小さいサイズの多数のトークンに分割または注入（inject）することができる。オフロード・ライト・コマンドに応答して、多数のトークンからのデータを組み合わせて拡大トークンにすること、および／または抽出してバルク・データを得るために使用することができる。
【０００４】
[0004]  この摘要は、詳細な説明において以下で更に詳しく説明する主題の一部の態様を端的に識別するために設けられている。この摘要は、特許請求する主題の主要な特徴や必須の特徴を特定することを意図するのではなく、特許請求する主題の範囲を限定するために使用されることを意図するのでもない。
【０００５】
[0005]  「本明細書において説明する主題」という句は、文脈が明らかに別のことを示さない限り、詳細な説明において説明される主題を指す。「態様」（aspects）という用語は、「少なくとも１つの態様」として読解されてしかるべきである。詳細な説明において説明される主題の態様を識別することは、特許請求する主題の主要な特徴または必須の特徴を識別することを意図するのではない。
【０００６】
[0006]  本明細書において説明する主題の以上で説明した態様、および他の態様について、一例としてそして限定ではなく、添付図面に例示する。添付図面では、同様の参照番号は同様のエレメントを示すこととする。
【図面の簡単な説明】
【０００７】
【図１】図１は、本明細書において説明する主題の態様を組み込むことができる汎用計算環境例を表すブロック図である。
【図２】図２は、本明細書において説明する主題の態様が動作することができるシステムのコンポーネントの構成例を表すブロック図である。
【図３】図３は、本明細書において説明する主題の態様が動作することができるシステムのコンポーネントの構成例を表すブロック図である。
【図４】図４は、本明細書において説明する主題の態様が動作することができるシステムのコンポーネントの構成例を表すブロック図である。
【図５】図５は、本明細書において説明する主題の態様にしたがって、１つの拡大トークンを１つ以上のそれよりも小さいサブトークンによって表す方式の一例を示す図である。
【図６】図６は、本明細書において説明する主題の態様が動作することができるシステムのコンポーネントの構成例を表すブロック図である。
【図７】図７は、本明細書において説明する主題の態様にしたがって行うことができるアクション例を概略的に表す流れ図である。
【図８】図８は、本明細書において説明する主題の態様にしたがって行うことができるアクション例を概略的に表す流れ図である。
【図９】図９は、本明細書において説明する主題の態様にしたがって行うことができるアクション例を概略的に表す流れ図である。
【発明を実施するための形態】
【０００８】
定義
[0012]  「本明細書において説明する主題」という句は、文脈が明らかに別のことを示さない限り、詳細な説明において説明される主題を指す。「態様」（aspects）という用語は、「少なくとも１つの態様」として読解されてしかるべきである。詳細な説明において説明される主題の態様を識別することは、特許請求する主題の主要なまたは必須の特徴を識別することを意図するのではない。
【０００９】
[0013]  本明細書において使用する場合、「含む」という用語およびその変形は、「含むが限定されない」ことを意味する、制約のない用語として読解されることとする。「または」（or）という用語は、文脈が明らかに別のことを示さない限り、「および／または」として読解されることとする。「〜に基づく」という用語は、「少なくとも部分的に〜に基づく」として読解することとする。「一実施形態」（one embodiment）および「実施形態」（an embodiment）という用語は、「少なくとも１つの実施形態」として読解されることとする。「他の実施形態」という用語は、「少なくとも１つの他の実施形態」として読解されることとする。
【００１０】
[0014]  本明細書において使用する場合、「ａ」、「ａｎ」、および「ｔｈｅ」のような用語は、示された品目またはアクションの１つ以上を含むこととする。特に、請求項において、ある品目を引用するときは、一般に、少なくとも１つのそのような品目があることを意味し、あるアクションを引用するときは、そのアクションの少なくとも１つのインスタンスが実行されることを意味する。
【００１１】
[0015]  本明細書では、「第１の」、「第２の」、「第３の」等という用語が使用される場合もときにはあり得る。追加のコンテキストがない場合、請求項におけるこれらの用語の使用は、順序付けを暗示することは意図しておらず、むしろ識別の目的で使用される。例えば、「第１バージョン」および「第２バージョン」という句は、第１バージョンが最初のバージョンであり第２バージョンよりも前に作られたことを必ずしも意味する訳ではなく、第１バージョンが第２バージョンの前に要求されるまたは動作させられることを意味するのでもない。むしろ、これらの句は異なるバージョンを識別するために使用される。
【００１２】
[0016]  見出しは便宜上に過ぎない。所与の話題についての情報は、見出しがその話題を示す章以外でも見られることもある。
[0017]  明示的および暗示的な他の定義も以下に含まれる場合がある。
動作環境例
[0018]  図１は、本明細書において説明する主題の態様を実現することができる、適した計算システム環境１００の一例を示す。計算システム環境１００は、適した計算環境の一例に過ぎず、本明細書において説明する主題の態様の使用範囲や機能性に関して限定を示唆することは全く意図していない。また、計算環境１００が、動作環境例１００に図示されるコンポーネントのいずれの１つまたはその組み合わせに関しても何ら依存性や用件を有するように解釈しては決してならない。
【００１３】
[0019]  本明細書において説明する主題の態様は、多数の他の汎用または特殊目的計算システム環境あるいは構成でも動作する。良く知られている計算システム、環境、または構成の内、本明細書において説明する主題の態様と共に使用するのに適すると考えられる例には、パーソナル・コンピューター、ベア・メタル上でも仮想マシンとしてでもよいサーバー・コンピューター、ハンドヘルドまたはラップトップ・デバイス、マルチプロセッサー・システム、マルチコントローラ・ベースのシステム、セット・トップ・ボックス、プログラマブルまたはプログラマブルではない消費者用電子機器、ネットワークＰＣ、ミニコンピューター、メインフレーム・コンピューター、パーソナル・ディジタル・アシスタント（ＰＤＡ）、ゲーミング・デバイス、プリンター、セット・トップ、メディア・センター、または他のアプライアンスを含むアプライアンス、自動車埋め込みまたは取り付け型計算デバイス、その他の移動体デバイス、セル・フォン、ワイヤレス・フォン、および有線フォンを含む電話デバイス、以上のシステムまたはデバイスの内任意のものを含む分散型計算環境等が含まれる。
【００１４】
[0020]  本明細書において説明する主題の態様は、コンピューターによって実行されるプログラム・モジュールのような、コンピューター実行可能命令という一般的なコンテキストで説明することができる。一般に、プログラム・モジュールは、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造等を含み、特定のタスクを実行するか、または特定の抽象データ型を実装する。本明細書において説明する主題の態様は、分散型計算環境において実施することもできる。分散型計算環境では、タスクは、通信ネットワークを通じてリンクされたリモート処理デバイスによって実行される。分散型計算環境では、プログラム・モジュールは、メモリー記憶デバイスを含むローカルおよびリモート双方のコンピューター記憶媒体に配置することができる。
【００１５】
[0021]  あるいはまたは加えて、本明細書において説明する機能性は、少なくとも部分的に１つ以上のハードウェア・ロジック・コンポーネントによって実行することができる。例えば、そして限定ではなく、使用することができる例示的なタイプのハードウェア・ロジック・コンポーネントには、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、特定プログラム集積回路（ＡＳＩＣ）、特定プログラム標準製品（ＡＳＳＰ）、システム−オン−チップ・システム（ＳＯＣ）（System-on-Chip System）、複合プログラマブル論理デバイス（ＣＰＬＤ）等が含まれる。
【００１６】
[0022]  図１を参照すると、本明細書において説明する主題の態様を実現するシステム例は、コンピューター１１０の形態となっている汎用計算デバイスを含む。コンピューターは、命令を実行することができる任意の電子デバイスを含むことができる。コンピューター１１０のコンポーネントは、処理ユニット１２０、システム・メモリー１３０、およびシステム・メモリーから処理ユニット１２０までを含む種々のシステム・コンポーネントを結合する１つ以上のシステム・バス（システム・バス１２１によって代表される）を含むことができる。システム・バス１２１は、メモリー・バスまたはメモリー・コントローラ、周辺バス、および種々のバス・アーキテクチャの内任意のものを使用するローカル・バスを含む、様々なタイプのバス構造の内任意のものとすることができる。一例として、そして限定ではなく、このようなアーキテクチャーは、業界標準アーキテクチャー（ＩＳＡ）バス、マイクロ・チャネル・アーキテクチャー（ＭＣＡ）バス、拡張ＩＳＡ（ＥＩＳＡ）バス、ビデオ電子規格連合（ＶＥＳＡ）ローカル・バス、およびMezzanineバスとしても知られる周辺コンポーネント相互接続（ＰＣＩ）バス、周辺素子相互接続拡張（ＰＣＩ−Ｘ）バス、高度グラフィクス・ポート（ＡＧＰ）、およびＰＣＩエクスプレス（ＰＣＩｅ）を含む。
【００１７】
[0023]  処理ユニット１２０は、ハードウェア・セキュリティ・デバイス１２２に接続することができる。セキュリティ・デバイス１２２は、コンピューター１１０の種々の態様の安全性を確保するために使用することができる暗号鍵を格納し、生成することができるとよい。一実施形態では、セキュリティ・デバイス１２２は、信頼プラットフォーム・モジュール（ＴＰＭ）チップ、ＴＰＭセキュリティ・デバイス等を含むことができる。
【００１８】
[0024]  コンピューター１１０は、通例、種々のコンピューター読み取り可能媒体を含む。コンピューター読み取り可能媒体は、コンピューター１１０によってアクセスすることができる任意の入手可能な媒体とすることができ、揮発性および不揮発性双方の媒体、ならびにリムーバブルおよび非リムーバブル媒体を含む。一例として、そして限定ではなく、コンピューター読み取り可能媒体は、コンピューター記憶媒体および通信媒体を含むことができる。
【００１９】
[0025]  コンピューター記憶媒体は、揮発性および不揮発性の双方の、リムーバブルおよび非リムーバブル媒体を含み、コンピューター読み取り可能命令、データ構造、プログラム・モジュール、または他のデータというような情報の格納のためのいずれかの方法または技術で実現される。コンピューター記憶媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ソリッド・ステート・ストレージ、フラッシュ・メモリーまたは他のメモリー技術、ＣＤ−ＲＯＭ、ディジタル・バーサタイル・ディスク（ＤＶＤ）または他の光ディスク・ストレージ、磁気カセット、磁気テープ、磁気ディスク・ストレージまたは他の磁気記憶デバイス、または所望の情報を格納するために使用することができそしてコンピューター１１０によってアクセスすることができる他のあらゆる媒体を含む。コンピューター記憶媒体は、通信媒体を含まない。
【００２０】
[0026]  通信媒体は、通例、コンピューター読み取り可能命令、データ構造、プログラム・モジュール、または他のデータを、搬送波のような変調データ信号または他の移送メカニズムに具体化し、任意の情報配信媒体を含む。「変調データ信号」という用語は、その信号内に情報をエンコードするようにして、その特性の１つ以上が設定または変更された信号を意味する。一例として、そして限定ではなく、通信媒体は、有線ネットワークまたは直接有線接続というような有線媒体と、音響、ＲＦ、赤外線、および他のワイヤレス媒体というようなワイヤレス媒体とを含む。以上の内任意のものの組み合わせも、コンピューター読み取り可能媒体の範囲に含まれてしかるべきである。
【００２１】
[0027]  システム・メモリー１３０は、リード・オンリー・メモリー（ＲＯＭ）１３１およびランダム・アクセス・メモリー（ＲＡＭ）１３２のような、揮発性および／または不揮発性メモリーの形態としたコンピューター記憶媒体を含む。基本入力／出力システム１３３（ＢＩＯＳ）は、起動中におけるように、コンピューター１１０内部にあるエレメント間で情報を転送するのに役立つ基本的なルーチンを含み、通例ＲＯＭ１３１に格納される。ＲＡＭ１３２は、通例、処理ユニット１２０によって直ちにアクセス可能なデータおよび／またはプログラム・モジュール、および／または現在処理ユニット１２０によって処理されているデータおよび／またはプログラム・モジュールを含む。一例として、そして限定ではなく、図１は、オペレーティング・システム１３４、アプリケーション・プログラム１３５、他のプログラム・モジュール１３６およびプログラム・データ１３７を示す。
【００２２】
[0028]  また、コンピューター１１０は、他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピューター記憶媒体も含むことができる。一例としてに過ぎないが、図１は、非リムーバブル、不揮発性磁気媒体に対して読み取りまたは書き込みを行うハード・ディスク・ドライブ１４１、リムーバブル、不揮発性磁気ディスク１５２に対して読み取りまたは書き込みを行う磁気ディスク・ドライブ１５１、およびＣＤ−ＲＯＭ、ＤＶＤ、または他の光媒体のようなリムーバブル、不揮発性光ディスク１５６に対して読み取りまたは書き込みを行う光ディスク・ドライブ１５５を示す。この動作環境例において使用することができる他のリムーバブル／非リムーバブル、揮発性／不揮発性コンピューター記憶媒体には、磁気テープ・カセット、フラッシュ・メモリー・カードおよび他のソリッド・ステート記憶デバイス、ディジタル・バーサタイル・ディスク、他の光ディスク、ディジタル・ビデオ・テープ、ソリッド・ステートＲＡＭ、ソリッド・ステートＲＯＭ等が含まれる。ハード・ディスク・ドライブ１４１は、通例、インターフェース１４０を介してシステム・バス１２１に接続され、磁気ディスク・ドライブ１５１および光ディスク・ドライブ１５５は、通例、インターフェース１５０のようなリムーバブル不揮発性メモリー用インターフェースによってシステム・バス１２１に接続される。
【００２３】
[0029]  以上で論じ図１に示すこれらのドライブおよびそれに関連するコンピューター記憶媒体は、コンピューター１１０のためのコンピューター読み取り可能命令、データ構造、プログラム・モジュール、および他のデータの格納を行う。図１では、例えば、ハード・ディスク・ドライブ１４１は、オペレーティング・システム１４４、アプリケーション・プログラム１４５、他のプログラム・モジュール１４６、およびプログラム・データ１４７を格納することが示される。尚、これらのコンポーネントは、オペレーティング・システム１３４、アプリケーション・プログラム１３５、他のプログラム・モジュール１３６、およびプログラム・データ１３７と同一であること、または異なることもできる。オペレーティング・システム１４４、アプリケーション・プログラム１４５、他のプログラム・モジュール１４６、およびプログラム・データ１４７は、ここでは、少なくともこれらが異なるコピーであることを示すために、異なる番号が与えられる。
【００２４】
[0030]  ユーザーは、キーボード１６２、および一般にマウス、トラックボール、またはタッチ・パッドと呼ばれるポインティング・デバイス１６１というような入力デバイスによって、コマンドおよび情報をコンピューター１１０に入力することができる。他の入力デバイス（図示せず）には、マイクロフォン（例えば、音声またはその他のオーディオを入力するため）、ジョイスティック、ゲーム・パッド、衛星ディッシュ、スキャナー、タッチ感応画面、書き込みタブレット、カメラ（例えば、ジェスチャーまたは他の視覚入力を入力するため）等を含むことができる。これらおよび他の入力デバイスは、多くの場合、ユーザー入力インターフェース１６０を介して処理ユニット１２０に接続される。ユーザー入力インターフェース１６０は、システム・バスに結合されるが、パラレル・ポート、ゲーム・ポート、またはユニバーサル・シリアル・バス（ＵＳＢ）のような他のインターフェースおよびバス構造によって接続されてもよい。
【００２５】
[0031]  以上で識別した入力デバイスの内１つ以上の使用によって、自然ユーザー・インターフェース（ＮＵＩ）を策定することもできる。ＮＵＩは、音声認識、タッチおよび／またはスタイラス認識、画面上および画面付近の双方におけるジェスチャー認識、エア・ジェスチャー、頭部および眼球追跡、音声および発話、視覚（vision）、タッチ、ジェスチャー、および機械インテリジェンス等に頼ることができる。ユーザーと対話処理するために採用することができるいくつかのＮＵＩ技術の例には、タッチ感応ディスプレイ、音声および発話認識、意図および目標理解、深度カメラ（立体視カメラ・システム、赤外線カメラ・システム、ＲＧＢカメラ・システム、およびこれらの組み合わせ等）を使用する動きジェスチャー検出、加速度計／ジャイロスコープを使用する動きジェスチャー検出、顔認識、３Ｄディスプレイ、頭部、眼球、および凝視追跡、没入拡張現実および仮想現実システム、ならびに電界検知電極を使用して脳の活動を検知する仮想現実システムおよび技術（ＥＥＧおよび関連方法）が含まれる。
【００２６】
[0032]  また、モニター１９１または他のタイプのディスプレイ・デバイスも、ビデオ・インターフェース１９０のようなインターフェースを介して、システム・バス１２１に接続される。モニターに加えて、コンピューターは、スピーカー１９７およびプリンター１９６のような他の周辺出力デバイスも含むことができ、これらは出力周辺インターフェース１９５を介して接続されればよい。
【００２７】
[0033]  コンピューター１１０は、リモート・コンピューター１８０のような１つ以上のリモート・コンピューターへの論理接続を使用して、ネットワーク接続環境（networked environment）において動作することもできる。リモート・コンピューター１８０は、パーソナル・コンピューター、サーバー、ルーター、ネットワークＰＣ、ピア・デバイス、または他の一般的なネットワーク・ノードであってよく、通例、コンピューター１１０に関して先に説明したエレメントの多くまたは全部を含むが、図１にはメモリー記憶デバイス１８１だけが示されている。図１に示す論理接続は、ローカル・エリア・ネットワーク（ＬＡＮ）１７１およびワイド・エリア・ネットワーク（ＷＡＮ）１７３を含むが、電話ネットワーク、近場（near field）ネットワーク、および他のネットワークを含むこともできる。このようなネットワーキング環境（networking environment）は、事務所、企業規模のコンピューター・ネットワーク、イントラネット、およびインターネットでは極普通である。
【００２８】
[0034]  ＬＡＮネットワーキング環境において使用される場合、コンピューター１１０は、ネットワーク・インターフェースまたはアダプター１７０を介してＬＡＮ１７１に接続することができる。ＷＡＮネットワーキング環境において使用される場合、コンピューター１１０は、通例、インターネットのようなＷＡＮ１７３を介して通信を確立するモデム１７２または他の手段を含む。モデム１７２は、内蔵型でも外付けでもよく、ユーザー入力インターフェース１６０または他のしかるべきメカニズムを介してシステム・バス１２１に接続することができる。ネットワーク接続環境では、コンピューター１１０に関して図示したプログラム、またはその一部が、リモート・メモリー記憶デバイスに格納されてもよい。一例として、そして限定ではなく、図１は、リモート・アプリケーション・プログラム１８５を、メモリー・デバイス１８１上に存在するものとして示す。尚、図示したネットワーク接続は一例であり、コンピューター間に通信リンクを確立する他の手段を使用してもよいことは認められよう。
オフロード・リードおよびライト
[0035]  前述のように、従前からのデータ転送動作の中には、効率的でないものや、今日の記憶環境では作用しないものさえある。
【００２９】
[0036]  図２〜図４および図６は、本明細書において説明する主題の態様が動作することができるシステムのコンポーネントの構成例を表すブロック図である。図２〜図４および図６に示すコンポーネントは、一例では、必要とされ得るまたは含まれ得るコンポーネントの全てを含むことを意味するのではない。他の実施形態では、本明細書において説明する主題の態様の主旨や範囲から逸脱することなく、図２〜図４および図６と関連付けて説明するコンポーネントおよび／または機能が、他のコンポーネント（図示するまたは図示しない）に含まれても、またはサブコンポーネント内に置かれてもよい。ある実施形態では、図２〜図４および図６に関連付けて説明するコンポーネントおよび／または機能は、多数のデバイスに跨がって分散されてもよい。
【００３０】
[0037]  図２に移り、システム２０５は、イニシエーター（initiator）２１０、データ・アクセス・コンポーネント２１５、トークン・プロバイダー（１つまたは複数）２２５、ストア２２０、およびその他のコンポーネント（図示せず）を含むことができる。システム２０５は、１つ以上の計算デバイスによって実現することもできる。このようなデバイスは、例えば、パーソナル・コンピューター、サーバー・コンピューター、ハンドヘルドまたはラップトップ・デバイス、マルチプロセッサー・システム、マイクロコントローラ・ベースのシステム、セットトップ・ボックス、プログラマブル消費者用電子機器、ネットワークＰＣ、ミニコンピューター、メインフレーム・コンピューター、セル・フォン、パーソナル・ディジタル・アシスタント（ＰＤＡ）、ゲーミング・デバイス、プリンター、セット・トップ、メディア・センター、または他のアプライアンスを含むアプライアンス、自動車埋め込みまたは取り付け計算デバイス、他の移動体デバイス、以上のシステムまたはデバイスの内任意のものを含む分散計算環境等を含むことができる。
【００３１】
[0038]  システム２０５が１つのデバイスを含む場合、システム２０５として動作する（act）ように構成することができるデバイス例は、図１のコンピューター１１０を含む。システム２０５が多数のデバイスを含む場合、これら多数のデバイスの内１つ以上が、図１のコンピューター１１０を含めばよく、多数のデバイスは、同様に構成されても、または異なって構成されてもよい。
【００３２】
[0039]  データ・アクセス・コンポーネント２１５は、データをストア２２０へ、そしてストア２２０から送信するために使用することができる。データ・アクセス・コンポーネント２１５は、例えば、Ｉ／Ｏマネージャ、フィルター、ドライバー、ファイル・サーバー・コンポーネント、ストレージ・エリア・ネットワーク（ＳＡＮ）または他の記憶デバイス上のコンポーネント、および他のコンポーネント（図示せず）を含むことができる。本明細書において使用する場合、ＳＡＮは、例えば、論理ストレージ・ターゲット（logical storage target）を露出するデバイスとして、またはこのようなデバイスを含む通信ネットワークとして等で実現することができる。
【００３３】
[0040]  一実施形態では、データ・アクセス・コンポーネントは、イニシエーター２１０とストア２２０との間におけるＩ／Ｏを検査する機会が与えられ、Ｉ／Ｏを変更する、完了する、または失敗する（fail）ことがあり得る、あるいはそれに基づいて他のアクションを実行するまたはアクションを実行しない任意のコンポーネントを含むことができる。例えば、システム２０５が１つのデバイス上に存在する場合、データ・アクセス・コンポーネント２１５は、イニシエーター２１０とストア２２０との間のＩ／Ｏスタックにおけるあらゆるオブジェクトを含むことができる。システム２０５が多数のデバイスによって実現される場合、データ・アクセス・コンポーネント２１５は、イニシエーター２１０をホストするデバイス上のコンポーネント、ストア２２０へのアクセスを与えるデバイス上のコンポーネント、および／または他のデバイス上等にあるコンポーネントを含むことができる。他の実施形態では、データ・アクセス・コンポーネント２１５は、使用されるコンポーネントをデータが通過しなくても、Ｉ／Ｏが通過するコンポーネントによって使用される任意のコンポーネント（例えば、サービス、データベース等のような）を含むことができる。
【００３４】
[0041]  本明細書において使用する場合、コンポーネントという用語は、デバイスの全部または一部、１つ以上のソフトウェア・モジュールの集合体またはその一部、１つ以上のソフトウェア・モジュールまたはその一部、および１つ以上のデバイスまたはその一部の何らかの組み合わせ等を含むように読解することとする。コンポーネントがコードを含むこと、またはコードによって表されることも可能である。
【００３５】
[0042]  本明細書において使用する場合、コンピューター・コードという用語は、コンピューターになすべきアクションを指令する命令を含むように読解することとする。これらの命令は、揮発性または不揮発性の任意のコンピューター読み取り可能媒体に含むことができる。
【００３６】
[0043]  一実施形態では、ストア２２０は、データを格納することができる任意の記憶媒体である。ストア２２０は、揮発性メモリー（例えば、キャッシュ）および不揮発性メモリー（例えば、永続的ストレージ）を含むことができる。データという用語は、１つ以上のコンピューター記憶エレメントによって表すことができる任意のものを含むように、広く読解することとする。論理的に、データは揮発性または不揮発性メモリーにおいて一連の１および０として表すことができる。非二進記憶媒体を有するコンピューターでは、データは、記憶媒体の能力に応じて表すことができる。非二進記憶媒体を有するコンピューターでは、データは、この記憶媒体の能力に応じて表すことができる。データは、異なるタイプのデータ構造に編成することができ、数値、文字等のような単純なデータ型、階層型、リンク型、またはその他の関連データ型、多数のデータ構造または単純なデータ型を含むデータ構造等を含む。データ例には、情報、プログラム・コード、プログラム状態、プログラム・データ、コマンド、他のデータ等が含まれる場合もある。
【００３７】
[0044]  ストア２２０は、ハード・ディスク・ストレージ、ソリッド・ステート、または他の不揮発性ストレージ、ＲＡＭのような揮発性メモリー、他のストレージ、以上のものの何らかの組み合わせ等を含むことができ、多数のデバイス（例えば、多数のＳＡＮ、多数のファイル・サーバー、異質なデバイスの組み合わせ等）にわたって分散することもできる。ストア２２０を実現するために使用されるデバイスは、物理的に一緒に配置されても（例えば、１つのデバイス上に、データセンターに等）、または地理的に分散されてもよい。ストア２２０は、層状記憶構成（tiered storage arrangement）または非層状記憶構成で構成することができる。ストア２２０は、外部、内部、またはシステム２０５を実現する１つ以上のデバイスに対して内部および外部双方であるコンポーネントを含むことができる。ストア２２０は、フォーマットされても（例えば、ファイル・システムによって）またはフォーマットされなくても（例えば、生）よい。
【００３８】
[0045]  他の実施形態では、ストア２２０は、直接的な物理ストレージではなく、ストレージ・コンテナとして実現することもできる。ストレージ・コンテナは、例えば、ファイル、ボリューム、ディスク、仮想ディスク、論理ユニット、論理ディスク、書き込み可能クローン、ボリューム・スナップショット、論理ディスク・スナップショット、物理ディスク、ソリッド・ステート・ストレージ（ＳＳＤ）、ハード・ディスク、データ・ストリーム、代替データ・ストリーム、メタデータ・ストリーム等を含むことができる。例えば、ストア２２０は、多数の物理記憶デバイスを有するサーバーによって実現することもできる。この例では、サーバーは、データ・アクセス・コンポーネントが、このサーバーの物理記憶デバイスまたはその一部の内１つ以上を使用して実現されるストアのデータにアクセスすることを可能にするインターフェースを表す（present）ことができる。
【００３９】
[0046]  抽象のレベルは、いずれの任意の深度まででも繰り返すことができる。例えば、ストレージ・コンテナをデータ・アクセス・コンポーネント２１５に提供するサーバーは、データにアクセスするために、ストレージ・コンテナに頼ることができる。
【００４０】
[0047]  他の実施形態では、ストア２２０は、不揮発性ストレージ内に存続するかもしれない、または不揮発性ストレージ内に存続しないかもしれないデータへのビュー（view）を提供するコンポーネントを含むこともできる。
【００４１】
[0048]  データ・アクセス・コンポーネント２１５の内１つ以上は、イニシエーター２１０をホストする装置上に存在することができ、一方データ・アクセス・コンポーネント２１５の他の１つ以上は、ストア２２０をホストする装置またはストア２２０へのアクセスを与える装置上に存在することができる。例えば、イニシエーター２１０がパーソナル・コンピューター上で実行するアプリケーションである場合、データ・アクセス・コンポーネント２１５の内１つ以上は、このパーソナル・コンピューター上にホストされたオペレーティング・システム内に存在することができる。これの例を図３に示す。
【００４２】
[0049]  他の例として、ストア２２０がストレージ・エリア・ネットワーク（ＳＡＮ）によって実現される場合、データ・アクセス・コンポーネント２１５の内１つ以上は、ストア２２０を管理するおよび／またはストア２２０へのアクセスを与えるストレージ・オペレーティング・システムを実現することができる。イニシエーター２１０およびストア２２０が１つの装置内にホストされるとき、データ・アクセス・コンポーネント２１５の全てまたは多くもこの装置上に存在することができる。
【００４３】
[0050]  オフロード・リードは、イニシエーターが、ストアのデータを表すトークンを得ることを可能にする。このトークンを使用して、このイニシエーターまたは他のイニシエーターはオフロード・ライトを要求することができる。オフロード・ライトは、イニシエーターが、オフロード・プロバイダーに、トークンによって表されるデータの一部または全部を書き込ませることを可能にする。
【００４４】
[0051]  一実施形態では、トークンは、成功オフロード・リード（successful offload read）によって得られる暗号論的安全乱数（cryptographically secure number）を含む。現時点において、暗号論的安全乱数の一例は、しかるべき方法で生成される２５６ビットの数である（例えば、何らかのランダムな物理現象をサンプリングすることによって乱数を発生することによる）。暗号論的安全乱数を生成するための手順例のいくつかが、Request for Comments (RFC) 1750に記載されている。技術進歩によって、安全乱数の長さ、および暗号論的安全乱数を生成するために使用される手順が、本明細書において説明する主題の態様の主旨や範囲から逸脱することなく、変化することもあり得る。
【００４５】
[0052]  トークンは、このトークンが有効である限りインミュータブルであるデータを表す。トークンが表すデータを、バルク・データと呼ぶこともある。
[0053]  オフロード・プロバイダーとは、トークンに関連付けられたデータへの間接的なアクセスを与えるエンティティである（多数のデバイスにわたって拡散する多数のコンポーネントを含むことが可能）。論理的に、オフロード・プロバイダーは、オフロード・リードおよび／またはオフロード・ライトを実行することができる。物理的に、オフロード・プロバイダーは、データ・アクセス・コンポーネント２１５の内１つ以上およびトークン・プロバイダーによって実現することができる。
【００４６】
[0054]  オフロード・リードまたはオフロード・ライトをサービスする（service）とき、オフロード・プロバイダーは論理的に、ストアのデータおよび／またはトークン・プロバイダーに関連付けられたトークンに対して動作を実行することができる。例えば、オフロード・リードでは、オフロード・プロバイダーは、ストアのデータによってバッキング（back）された論理ストレージ・コンテナからトークン（これもストアのデータによってバッキングされてもよい）にデータを論理的にコピーすることができ、一方、オフロード・ライトでは、オフロード・プロバイダーは、トークンから、ストアのデータによってバッキングされる論理ストレージ・コンテナにデータを論理的にコピーすることができる。
【００４７】
[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]  図５は、本明細書において説明する主題の態様にしたがって、１つの大きなトークンをそれよりも小さな１つ以上のサブトークンで表す方式の一例を示す図である。図示のように、大きなトークンの一例５０５は、標準要求フィールド（standard required fields）Ｈ、プロバイダーＩＤ  Ｐ、乱数データＲ、ベンダー・データＶ、およびその他のデータＸを有することができる。
【００７７】
[0086]  標準要求フィールドＨは、規格によって要求されるまたそうでなければ指定される任意のフィールドを含むことができる。例えば、標準要求フィールドＨは、いつトークンが生成されたかを示すデータ、いつトークンが失効する予定であるかを示すデータ、トークンがどこから来たかを示すデータ、または規格によって指定される他のデータを含むことができる。
【００７８】
[0087]  プロバイダーＩＤ  Ｐは、トークンを生成したオフロード・プロバイダーのインスタンスを示すことができる。プロバイダーＩＤ  Ｐは、トークンを無視すべきか否か決定するために閾値検査において使用することができる。プロバイダーＩＤ  Ｐがオフロード・プロバイダーによって供給されたプロバイダーＩＤでない場合、オフロード・プロバイダーはトークンを完全に拒絶することができる。そうでない場合、オフロード・プロバイダーは、トークンの有効性を判断するために、追加のアクションを行うことができる。
【００７９】
[0088]  ベンダー・データＶは、オフロード・プロバイダーを実装したベンダーが望むかもしれない任意のデータを含むことができる。一例として、ベンダーは、トークン５０５を供給したオフロード・プロバイダーのアドレスを示すアドレシング情報を含むことができる。他の例として、ベンダー・データＶは、ハッシュ鍵、ダイジェスト、調査鍵（lookup key）、メタデータ、バルク・データに関係するデータ、バルク・データの一部を識別または突き止めるのに役立つデータ、他のデータ等を含むことができる。
【００８０】
[0089]  他のデータＸは、トークン５０５に含まれる任意の他のデータを含むことができる。
[0090]  サブトークンは、事実上あらゆるプロトコルによって送信することができる。例えば、一例では、サブトークンは、小型コンピューター・システム・インターフェース（ＳＣＳＩ）プロトコルによって送信することができる。他の例では、ファイル・データをサーバー・メッセージ・ブロックを介して転送するファイル共有プロトコルによって、サブトークンを送信することができる。ファイル共有プロトコルの一例には、サーバー・メッセージ・ブロック（ＳＭＢ）プロトコルが含まれる。他の例では、ファイルにアクセスする遠隔手続き呼び出しに基づく分散ファイル・システム・プロトコルによってサブトークンを送信することができる。遠隔手続き呼び出しに基づくプロトコルに一例には、ネットワーク・ファイル・システム（ＮＦＳ）プロトコルが含まれる。
【００８１】
[0091]  以上の例は、使用することができるプロトコルを全て含むことも、網羅的であることも意図していない。実際、本明細書における教示に基づけば、当業者は、本明細書において説明する主題の態様の主旨や範囲から逸脱することなく、使用することができる多くの他のプロトコルを認めることができよう。
【００８２】
[0092]  サブトークン５１０〜５１５は、トークン５０５を表す固定サイズ（規格によって規定される）のトークンであってもよい。サブトークン５１０〜５１５は、種々のフィールドを含むことができる。例えば、サブトークンは、規格によって要求されるフィールド（Ｈ０、ＨＮ１、Ｈ．．．）、プロバイダーＩＤフィールド（Ｐ）、トークンＩＤ（Ｔ）、シーケンス・データ（Ｓ０、ＳＮ１、Ｓ．．．）、いくつのサブトークンがトークン５０５を表すかを示す数値、およびトークン５０５のデータに対応するデータを含むことができる。この他のデータは、Ｈ、Ｒ０〜ＲＮ１、Ｖ０〜ＶＮ２、およびＸ０〜ＸＮ３によって表され、ここでＨは、トークン５０５における標準要求フィールドＨに対応し、Ｒ０〜ＲＮ１は、トークン５０５における乱数データＲに対応し、Ｖ０〜ＶＮ２はトークン５０５におけるベンダー・データＶに対応し、Ｘ０〜ＸＮ３はトークン５０５における他のデータＸに対応する。
【００８３】
[0093]  フィールド（Ｈ０、ＨＮ１、Ｈ．．．）は、規格によって要求される任意のデータまたそうでなければ指定される任意のデータを含むことができる。これは、例えば、ＳＣＳＩプロトコルの任意のバージョンによって指定されるヘッダまたはその他のフィールドを含むことができる。 フィールド（Ｈ０、ＨＮ１、Ｈ．．．）は、図５に示されるいずれの他のフィールドよりも前および／または後に現れることができる。
【００８４】
[0094]  ＳＣＳＩプロトコルが使用される場合、フィールド（Ｈ０、ＨＮ１、Ｈ．．．）は、例えば、ＳＣＳＩプロトコルの任意のバージョンによって指定されるヘッダまたは他のフィールドを含むことができる。フィールドの例は、トークン作成のタイムスタンプ、トークン・タイプ（例えば、ポイント・イン・タイム・コピー）、ソースのアドレス、データ・トークン・タイプの表現を識別するデータ、バルク・データの転送を要求したコマンドのイニシエーターを通す必要なくバルク・データを転送するために、サブトークンの各々をトークンとして識別するデータ、ＳＣＳＩプロトコルによって指定されるその他のフィールド等を含む。
【００８５】
[0095]  他のプロトコルが使用される場合、フィールド（Ｈ０、ＨＮ１、Ｈ．．．）は、例えば、これらのプロトコルによって要求されるフィールドまたは許されるフィールドを含むことができる。一実施態様では、フィールド（Ｈ０、ＨＮ１、Ｈ．．．）を完全に省略することもできる。
【００８６】
[0096]  ある実施態様では、フィールド（Ｈ０、ＨＮ１、Ｈ．．．）は、例えば、トークン５０５の標準要求フィールドＨに関して以上で示したタイプのデータを含むこともできる。
【００８７】
[0097]  プロバイダーＩＤ  Ｐは、トークンを生成したオフロード・プロバイダーのインスタンスを示すことができ、以上で示したのと同様に使用することができる。
[0098]  トークンＩＤ  Ｔは、拡大トークンを表すサブトークンのグループに属するサブトークンを識別するデータとすることができる。例えば、サブトークン５１０〜５１５の各々における「ＡＢＣＤ」のトークンＩＤは、サブトークン５１０〜５１５を、トークン５０５を表すサブトークンのグループに属するものとして識別することができる。サブトークンが異なるトークンＩＤを有する場合、オフロード・プロバイダーは、そのサブトークンは、トークン５０５を表すサブトークンのグループの一部ではないと判断することができる。
【００８８】
[0099]  シーケンス・データ（Ｓ０、ＳＮ１、Ｓ．．．）は、サブトークンの順序付けを示すデータを含むことができる。例えば、シーケンス・データは、サブトークンの順序を示す、増加する数値（例えば、１、２、３、４等）を含むことができる。この順序は、サブトークン５１０〜５１５を組み合わせてトークン５０５またはその一部を再現するために、使用することができる。
【００８９】
[00100]  一実施態様では、サブトークン５１０〜５１５のフィールドからのデータを組み合わせて、トークン５０５に含まれる全てのデータを再現することができる。例えば、この実施態様では、サブトークン５１０〜５１５の組み合わされたデータは、少なくともトークン５０５に含まれるデータを含むことができる。
【００９０】
[00101]  他の実施態様では、サブトークン５１０〜５１５は、トークン５０５に含まれる全てのデータを含まない。例えば、サブトークン５１０〜５１５は、トークン５０５におけるデータを識別するのに十分なデータを含めばよい（例えば、参照表または他のデータ構造を介して）。例えば、サブトークン５１０〜５１５を組み合わせて、Ｒおよびアドレス情報を得るのでもよい。次いで、Ｒおよびアドレス情報は、オフロード・プロバイダーによって使用され、トークン５０５に含まれる他のデータを調べることができる。
【００９１】
[00102]  他の例では、サブトークン５１０〜５１５の内１つ以上が、乱数データＲにマッピングするために使用することができるデータを含むのでもよい。この例では、乱数データＲは、サブトークン５１０〜５１５において見出されるデータだけでは再現することができないが、サブトークン５１０〜５１５の内１つ以上の含まれる乱数データから、乱数データＲを発見することができる（例えば、参照表において）。この例では、他のデータ（例えば、トークン５０５のアドレス・データ）が、サブトークン５１０〜５１５の内１つ以上に含まれてもよい。次いで、例えば、トークン５０５に含まれる他のデータを突き止めるために使用することができるマッピング表を突き止めるために、アドレス・データを使用することができる。
【００９２】
[00103]  同様のメカニズムは、サブトークン５１０〜５１５内では物理的に発見されない他の省略データが、この省略されたデータにマッピングするデータを使用して発見することができれば、この他の省略データを発見するために使用することもできる。
【００９３】
[00104]  一例では、サブトークンの内の１つ（本明細書ではマスター・サブトークンと呼ばれることもある）が乱数データＲの全てを含むのでもよく、一方他のサブトークンは乱数データＲに対応するデータを全く含まなくてもよい。他の例では、サブトークン５１０〜５１５の各々が、乱数データＲに対応するデータを含むのでもよい。
【００９４】
[00105]  トークン５０５の有効性を判断するためには、種々のメカニズムを使用することができる。一例では、サブトークン５１０〜５１５からトークン５０５が再現された後、トークン５０５が、オフロード・プロバイダーによって生成されたトークンそのものであるか否か判定するために、ビット毎の比較を実行する。トークンにおけるビットが、トークン・ストアにおいてＲを有するトークンについて発見されたビットと等しい場合、トークン５０５は有効であると判定することができる。
【００９５】
[00106]  他の例では、トークン５０５のダイジェストを計算することもでき、このダイジェストを、オフロード・プロバイダーによって生成されたトークンのダイジェストと比較することができる。この例では、他のダイジェストと衝突する可能性が低いまたは可能性がないダイジェストが選択されるとよい。この例では、ダイジェストが、オフロード・プロバイダーによって生成されたトークンのダイジェストに等しい場合、トークン５０５は有効であると判定することができる。
【００９６】
[00107]  他の例では、Ｒがオフロード・プロバイダーによって格納されたトークンのＲに等しい場合、トークン５０５は有効であると判定することもできる。
[00108]  一実施態様では、拡大トークン５０５が、供給され実際に存在するトークンであり、１つ以上のデータ構造として実現される。拡大トークン５０５は、物理的に多数のサブトーク５１０に分割することができ、これらのサブトークン５１０は、再度組み合わせて拡大トークン５０５を形成することができる。
【００９７】
[00109]  他の実施態様では、拡大トークン５０５は、トークン５０５について例示されたフィールドを論理的に含む仮想オフロード・トークンを含めば、全てのフィールドが実際には同じデータ構造でなくてもよい。この実施態様では、トークン５０５は、１つのデータ・チャックがトークン５０５の全てのフィールドを含む期間に相応しない（go through）。そうではなく、サブトークン５１０〜５１５は、トークン５０５に対応するデータ（または、トークン５０５のデータを発見するのに使用可能なデータ）を含むが、実際には、サブトークン５１０〜５１５が組み合わされて、トークン５０５のフィールドを含むモノリシックなデータ・チャンクを形成するのではない。同様に、この実施形態では、トークン５０５が最初に作成され次いでサブトークン５１０〜５１５に分割されるのではない。拡大トークン５０５が仮想オフロード・トークンと呼ばれるのは、これが物理的にそしてサブトークン５１０〜５１５と独立して存在するのではなく、サブトークン５１０〜５１５のデータ内に仮想的に存在するからである。トークン５０５について本明細書において説明するとき、双方の実施態様が考えられることは、理解されるはずである。
【００９８】
[00110]  図６は、本明細書において説明する主題の態様が動作することができるシステムのコンポーネントの構成例を表すブロック図である。図示のように、このシステムは、イニシエーター６０５、ソース・ストレージ・スタック６１０、宛先ストレージ・スタック６１１、スプリッター／インジェクター６１５、コンバイナー／エキストラクター６１６、およびオフロード・プロバイダー６３０を含む。
【００９９】
[00111]  オフロード・プロバイダー６３０は、図示のように、ソース・オフロード・プロバイダー６３５と宛先オフロード・プロバイダー６３６とに分離され、オフロード・プロバイダー６３０が異なる機械上にあり、これらの機械がオフロード・プロバイダー６３０の機能を実行するために互いに通信できることを示す。しかしながら、他の例では、ソース・オフロード・プロバイダー６３５と宛先オフロード・プロバイダー６３６を併合して、１つのコンピューター上に置いてもよい。一実施態様では、ソース・オフロード・プロバイダー６３５および宛先オフロード・プロバイダー６３６は、オフロード・ライト・コマンドに応答して、オフロード・データの送信をネゴシエートすることができる、全く異なるオフロード・プロバイダーであってもよい。
【０１００】
[00112]  イニシエーター６０５はオフロード・リードまたはオフロード・ライトを開始する。一例では、イニシエーター６０５をソース・イニシエーターおよび宛先イニシエーターに分離することもでき（図４に示すように）、ソース・イニシエーターがオフロード・リードを開始してそれに応答して多数のサブトークンを得て、次いでこれらのサブトークンを宛先イニシエーターに供給し、宛先イニシエーターは後にオフロード・ライトを開始する。他の例では、イニシエーター６０５が直接オフロード・リードおよびオフロード・ライトを開始することもできる。
【０１０１】
[00113]  尚、オフロード・ライトは、形式にはかかわらないオフロード・ライトであることは理解されるはずである。例えば、トークンを異なる機械に転送し、次いでこの機械がオフロード・ライトを発行するのは、実際には、オフロード・リード・イニシエーターがオフロード・ライトを開始するための異なる方法に過ぎない。
【０１０２】
[00114]  ソース・ストレージ・スタック６１０および宛先ストレージ・スタック６１１は、各々、レイヤに構成された１つ以上のコンポーネントによって実現することができ、各レイヤが異なる機能を実行することができる。
【０１０３】
[00115]  スプリッター／インジェクター６１５は１つ以上のコンポーネントを含むことができる。スプリッター／インジェクター６１５は、オフロード・リード・コマンドをソース・ストレージ・スタック６１０から受けることができる。応答して、スプリッター／インジェクター６１５はオフロード・リード・コマンドをソース・オフロード・プロバイダー６３５に送ることができる。オフロード・リード・コマンドに応答して、ソース・オフロード・プロバイダー６３５は大きなトークンを供給することができる。大きなトークンを受けた後、スプリッター／インジェクター６１５はこのトークンを複数のそれよりも小さなトークンに分割し、これらの小さなトークンをソース・ストレージ・スタック６１０に供給することができる。サブトークンは、例えば、前述のように、固定の標準化サイズのものであってもよい。
【０１０４】
[00116]  一実施態様では、オフロード・リード・コマンドは、このオフロード・リードに応答してどれ位のサブトークンが供給されればよいかを示す数値を含むことができる。この数値は、イニシエーター６０５またはソース・ストレージ・スタック６１０のコンポーネントから発生することができる。
【０１０５】
[00117]  スプリッター／インジェクター６１５が、この数値が十分に大きいと判定した場合、スプリッター／インジェクター６１５は、ソース・ストレージ・スタック６１０によって供給される通りに、サブトークンを供給することができる。そうでない場合、一例では、スプリッター／インジェクター６１５は、オフロード・リード要求に応えるためには、いくつのサブトークンが必要とされるかを示すメッセージを戻すことができる。他の例では、スプリッター／インジェクター６１５は、数値が十分に大きくないことを示すエラーを戻すことができ、イニシエーター６０５がもっと大きな数値（１つまたは複数）を試すことを決定した場合、イニシエーター６０５にそのようにさせることができる。
【０１０６】
[00118]  他の実施態様では、オフロード・リード・コマンドが、このオフロード・リードに応答してどれ位のサブトークンを供給すればよいかを示す数値を省略してもよい。この実施態様では、スプリッター／インジェクター６１５がオフロード・リード・コマンドに対する全てのサブトークンが供給されたことを示すまで、オフロード・リード・コマンドを送るコンポーネントが、サブトークンを要求することができる。
【０１０７】
[00119]  他の実施態様では、スプリッター／インジェクター６１５が、オフロード・リード・コマンドに応答して生成されたサブトークンの数を示してもよい。次いで、オフロード・リード・コマンドを送ったコンポーネントは、スプリッター／インジェクター６１５からサブトークンを得る役割を果たすことができる。
【０１０８】
[00120]  多数のサブトークンを伴うオフロード・ライト・コマンドでは、イニシエーター６０５はこれらのサブトークンを宛先ストレージ・スタック６１１に送ることができ、宛先ストレージ・スタック６１１がこれらのサブトークンをコンバイナー／エキストラクター６１６に送ることができる。次いで、コンバイナー／エキストラクター６１６はこれらのサブトークンを組み合わせて１つの大きなトークンにして、この１つの大きなトークンを宛先オフロード・プロバイダー６３６に供給することができる。
【０１０９】
[00121]  実施態様に応じて、サブトークンを１つのメッセージにおいて供給すること、または多数のメッセージにおいて供給することもできる。
[00122]  一実施態様では、スプリッター／インジェクター６１５をソース・オフロード・プロバイダー６３５と組み合わせることもでき、更にコンバイナー／エキストラクター６１６を宛先オフロード・プロバイダー６３６と組み合わせることもできる。少なくともこの実施態様では、スプリッター／インジェクター６１５は仮想オフロード・トークンのデータをサブトークンに注入することができ、一方コンバイナー／エキストラクター６１６は、拡大トークンが物理データ構造として存在し続けなくても、サブトークンからデータを抽出することができる。
【０１１０】
[00123]  図７〜図９は、本明細書において説明した主題の態様にしたがって行うことができるアクション例を概略的に表す流れ図である。説明の簡略化のために、図７〜図９に関連付けて説明する方法は、一連のアクトとして図示し説明することとする。尚、本明細書において説明する主題の態様は、例示されるアクト、および／またはアクトの順序によって限定されないことは言うまでもないことであり、認められるはずである。一実施形態では、これらのアクトは、以下で説明する通りの順序で現れる。しかしながら、他の実施形態では、これらのアクトは、並列に、他の順序で、および／または本明細書では提示されず説明されない他のアクトと共に現れてもよい。更に、本明細書において説明する主題の態様にしたがって本方法を実現するためには、図示するアクト全てが必要とされない場合もある。加えて、本方法は、代わりに、状態図によって一連の相互に関係付けられた状態として、またはイベントとして表すこともできることは、当業者には理解され認められよう。
【０１１１】
[00124]  図７は、本明細書において説明する主題の態様にしたがって、宛先オフロード・プロバイダーにおいて行うことができるアクション例を概略的に表す流れ図である。ブロック７０５において、アクションが開始する。
【０１１２】
[00125]  ブロック７１０において、２つ以上のサブトークンがそれらよりも大きいトークンを表すことを示すメッセージを受ける。これらのサブトークンは、各々、固定サイズのものである（規格によって指定されたサイズ）。拡大トークンは、固定サイズよりも大きいサイズを有する。これが意味するのは、拡大トークンに含まれるデータは、サブトークンの内１つに収まることができるデータよりも大きいということである。拡大トークンに対応するデータは、オフロード・プロバイダーによって維持される。データは、拡大トークンに対応する１つのデータ構造、または多数のデータ構造（例えば、組み合わせられない）に維持することができる。拡大トークンは、拡大トークンにおけるデータが有効である限りインミュータブルであるデータを表す。
【０１１３】
[00126]  例えば、図６を参照すると、コンバイナー／エキストラクター６１６は宛先ストレージ・スタック６１１からサブトークンを受けることができる。これらのサブトークンは、イニシエーター６０５によって、宛先ストレージ・スタック６１１に向けられたオフロード・ライトと共に供給することができる。
【０１１４】
[00127]  ブロック７１５において、サブトークンからデータを抽出する。データの抽出は、例えば、データを得る前にサブトークンを組み合わせて拡大トークンにすること、またはサブトークンを組み合わせて拡大トークンにすることなく、サブトークンからデータを得ることを含むことができる。例えば、図６を参照すると、コンバイナー／エキストラクター６１６がサブトークンからのデータを組み合わせる／抽出することができる。例えば、抽出されたデータの一部は、トークンをそのトークンが表すデータと関連付ける数値を含むことができる。この数値は、キーと呼ばれることもある。
【０１１５】
[00128]  ブロック７２０において、サブトークンの１つ以上からキーを得る。例えば、図６を参照すると、コンバイナー／エキストラクター６１６がサブトークンを組み合わせて拡大トークンを形成した後、宛先オフロード・プロバイダー６３６はこの拡大トークンからキーを得ることができる。他の例として、サブトークンのデータを物理的に組み合わせることなく、コンバイナー／エキストラクター６１６が、物理的にサブトークンのデータ全てを組み合わせることなく、仮想トークンからキーを抽出することもできる（例えば、サブトークンの内１つ以上）。
【０１１６】
[00129]  ブロック７２５において、キーの証拠をオフロード・プロバイダーのコンポーネントに供給する。この証拠を使用して、ブロック７２５のアクションの一部として、または別の１組のアクションとして、キーの有効性を判断することができる。キーの証拠を供給するには、例えば、以下のことを含むことができる。
【０１１７】
[00130]  １．キー自体を供給する。
[00131]  ２．キーおよび拡大トークンの他のデータ（１つ以上のフィールド）を供給する。
【０１１８】
[00132]  ３．キーのダイジェスト（例えば、ハッシュ関数）を供給する。
[00133]  ４．キーおよび拡大トークンの他のデータ（１つ以上のフィールド）から導き出したダイジェストを供給する。または、
[00134]  ５．キーおよび／または拡大トークンの他の証拠を供給する。
【０１１９】
[00135]  図８は、本明細書において説明する主題の態様にしたがって、ソース・オフロード・プロバイダーにおいて行うことができるアクション例を概略的に表す流れ図である。ブロック８０５において、アクションが開始する。
【０１２０】
[00136]  ブロック８１０において、オフロード・リード要求を受ける。例えば、図６を参照すると、ソース・オフロード・プロバイダー６３５が、イニシエーター６０５によって開始されたオフロード・リード要求を受ける。
【０１２１】
[00137]  ブロック８１５において、オフロード・リード・メッセージに応答して、オフロード・リード・メッセージに応答して戻すためにキーを生成する。キーはトークン（物理的または仮想的）内に置かれ、そのデータは、オフロード・リード・メッセージに応答して戻すために、サブトークン内に置かれる。例えば、図６を参照すると、ソース・オフロード・プロバイダー６３５がキーを含むトークンを生成することができる。
【０１２２】
[00138]  ブロック８２０において、トークンのデータをサブトークンに分割／注入する。例えば、図６を参照すると、スプリッター／インジェクター６１５は、ブロック８１５において生成されたトークンからデータを取り込み、このデータをサブトークンに分割／注入する。サブトークンは、イニシエーター６０５に配信するために、ソース・ストレージ・スタック６１０に供給する。
【０１２３】
[00139]  ブロック８２５において、キーの証拠を受ける。例えば、図６を参照すると、ソース・オフロード・プロバイダー６３５のコンポーネントがキーの証拠を受ける。一例では、オフロード・プロバイダー６３０が、コンバイナー／エキストラクター６１６から受けたサブトークンからキーを得るときに、この証拠を受けることができる。他の例では、オフロード・ライトの宛先（例えば、宛先オフロード・プロバイダー６３６）におけるオフロード・プロバイダーのコンポーネントが、サブトークンに含まれるキーを得て、その中に収容されているアドレスを読み出し、このアドレスを使用して、キーを生成したオフロード・プロバイダーのコンポーネント（例えば、ソース・オフロード・プロバイダー６３５）と連絡を取り、キーをこのコンポーネントに供給することができる。他の例では、ソース・オフロード・プロバイダーとは異なるオフロード・プロバイダーである宛先オフロード・プロバイダーが、キーおよびアドレシング情報を受け、ソース・オフロード・プロバイダーと連絡を取り、キーを供給することもできる。この証拠を使用して、ブロック８２５のアクションの一部として、または別の１組のアクションとして、キーの有効性を判断することができる。
【０１２４】
[00140]  ブロック８３０において、トークンに対応するバルク・データを供給する。例えば、図６を参照すると、ソース・オフロード・プロバイダー６３５が、トークンに対応するバルク・データの一部または全部を宛先オフロード・プロバイダー６３６に供給することができる。
【０１２５】
[00141]  ブロック８３５において、他のアクションがあれば、それを実行することができる。
[00142]  図９は、本明細書において説明する主題の態様にしたがって、オフロード・イニシエーターにおいて行うことができるアクション例を概略的に表す流れ図である。ブロック９０５において、アクションが開始する。
【０１２６】
[00143]  ブロック９１０において、ソース・ストレージ・スタックのコンポーネントと通信することによって、オフロード・リード要求を開始する。例えば、図６を参照すると、イニシエーター６０５はオフロード・リード要求をソース・ストレージ・スタック６１０に送ることができる。このオフロード・リード要求と共に、オフロード・リード要求に応答して戻されることが許されるサブトークンの最大数を示す数値を送ることができる。
【０１２７】
[00144]  ブロック９１５において、メッセージに応答して、サブトークンを受ける。これらのサブトークンは、個別にこれらのサブトークンのいずれよりも大きなトークン（物理的または仮想的）を表す。拡大トークンは、この拡大トークンが有効である限りインミュータブルであるデータを表す。例えば、図６を参照すると、オフロード・リード要求に応答して、イニシエーターは多数のサブトークンを受ける。サブトークンを受けることと併せて、オフロード・リード要求に応答してどれ位のサブトークンが生成されたかを示す数値も受けることができる。
【０１２８】
[00145]  ブロック９２０において、イニシエーターはサブトークンを宛先ストレージ・スタックのコンポーネントに供給する。例えば、図６を参照すると、イニシエーター６０５はサブトークンを宛先ストレージ・スタック６１１のコンポーネントに供給する。
【０１２９】
[00146]  ブロック９２５において、他にもアクションがあれば、それを実行することができる。
[00147]  以上の詳細な説明から分かるように、オフロード技術に関する態様について説明した。本明細書において説明する主題の態様には、種々の変更や代替構造も可能であるが、例示したある種の実施形態を図面に示し、以上で詳しく説明した。しかしながら、特許請求する主題の態様を、開示した具体的な形態に限定する意図はなく、逆に、意図するのは、本明細書において説明する主題の種々の態様の主旨および範囲に該当する全ての変更、代替構造、および均等物を包含するということであることは、理解されてしかるべきである。
【図１】
0006420253.tif 000002
【図２】
0006420253.tif 000003
【図３】
0006420253.tif 000004
【図４】
0006420253.tif 000005
【図５】
0006420253.tif 000006
【図６】
0006420253.tif 000007
【図７】
0006420253.tif 000008
【図８】
0006420253.tif 000009
【図９】
0006420253.tif 000010