(57)【特許請求の範囲】
【請求項１】
ターミナルサーバまたは仮想マシンへのリモートアクセスを提供するコンピューティングシステムにおいて、リモートデスクトップグラフィックス処理タスクをネットワーク周辺機器にオフロードする方法であって、前記タスクはグラフィックスレンダリング及び圧縮タスクを含み、前記方法は、
前記ネットワーク周辺機器が、指定された一または複数のリモートデスクトップグラフィックス処理タスクを実行するためのタスクオフロード機能を含むことを判定することと、
後続のデータユニットと共に使用されるコンテキスト情報を含む、前記ネットワーク周辺機器が前記一または複数のリモートデスクトップグラフィックス処理タスクを実行するという指示を、前記ネットワーク周辺機器に送信することと、
前記一または複数のリモートデスクトップグラフィックス処理タスクを前記ネットワーク周辺機器に実行させることと
を備え、
前記リモートデスクトップグラフィックス処理タスクは、さもなければ前記コンピューティングデバイスに実行されるタスクである、
方法。
【請求項２】
前記一または複数のリモートデスクトップグラフィックス処理タスクは、部分的なリモートアクセス処理を提供する請求項１に記載の方法。
【請求項３】
前記一または複数のリモートデスクトップグラフィックス処理タスクは、完全なリモートアクセス処理を提供する請求項１に記載の方法。
【請求項４】
前記一または複数のリモートデスクトップグラフィックス処理タスクは、ビットマップ圧縮処理を行う請求項１に記載の方法。
【請求項５】
前記一または複数のリモートデスクトップグラフィックス処理タスクは、バルク圧縮処理を行う請求項１に記載の方法。
【請求項６】
前記一または複数のリモートデスクトップグラフィックス処理タスクは、キャッシング処理を行う請求項１に記載の方法。
【請求項７】
前記一または複数のリモートデスクトップグラフィックス処理タスクは、前記コンピューティングシステム、ネットワーク接続タイプ、およびリモートクライアントのうちの少なくとも１つの進行中の要求に応じて、前記ネットワーク周辺機器に選択的にオフロードされる請求項１に記載の方法。
【請求項８】
前記ネットワーク周辺機器に関連付けられたタスクオフロードバッファ内の少なくとも１つのフラグインジケータを設定することにより前記タスクオフロード機能をイネーブルするステップをさらに備えた請求項１に記載の方法。
【請求項９】
前記ネットワーク周辺機器は、ネットワークインタフェースカード（ＮＩＣ）である請求項１に記載の方法。
【請求項１０】
前記データユニットは、階層化ネットワークモデルを介して転送され、前記データユニットは、ネットワークデータおよびパケット拡張データを含むことを特徴とする請求項１に記載の方法。
【請求項１１】
前記データユニットは、前記ネットワーク周辺機器が前記リモートデスクトップグラフィックス処理タスクのバッチを実行することを指示し、前記パケット拡張データは、前記ネットワーク周辺機器によって実行されるために、少なくとも１つの前記リモートデスクトップグラフィックス処理タスクを示す少なくとも１つのデータフィールドを含む請求項１０に記載の方法。
【請求項１２】
ターミナルサーバまたは仮想マシンへのリモートアクセスを提供するコンピューティングシステムであって、前記コンピューティングシステムは、リモートデスクトップグラフィックス処理タスクをネットワーク周辺機器にオフロードするように適合され、前記コンピューティングシステムは、
少なくとも１つのプロセッサと、
前記少なくとも１つのプロセッサに通信できるように結合された少なくとも１つのメモリとを含み、前記メモリは、前記プロセッサに、
前記ネットワーク周辺機器によってビットマップ圧縮、バルク圧縮、またはキャッシングのうちの１つの処理を行うリモートデスクトップグラフィックス処理タスクを実行させることを指示するデータパケットを、前記ネットワーク周辺機器に送信させ、
前記ネットワーク周辺機器に前記リモートデスクトップグラフィックス処理タスクを実行するためのタスクオフロード機能が含まれないと判定されたことに応答して、前記処理タスクを実行させる
コンピュータ実行可能命令を格納していることを特徴とするコンピューティングシステム。
【請求項１３】
ターミナルサーバまたは仮想マシンへのリモートアクセスを提供するコンピューティングシステムにより実行されると、前記コンピューティングシステムに、請求項１ないし１１いずれか一項に記載の方法のステップを実行させるコンピュータプログラム。
【請求項１４】
前記タスクオフロード機能は、多重化／フレーム化、暗号化、およびコマンド命令符号化のうちの１つをさらに備える請求項１３に記載のコンピュータプログラム。
【請求項１５】
請求項１３または１４に記載のコンピュータプログラムを記憶したコンピュータ可読記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、リモートデスクトップのアクセス機能およびタスクを周辺機器にオフロードすることにより、ハードウェア高速化を図るシステムおよび方法に関する。
【背景技術】
【０００２】
コンピューティングシステムにおけるネットワークアプリケーションは、７階層ＩＳＯモデルまたはＷｉｎｄｏｗｓ（登録商標）（商標）オペレーティングシステムによって使用される階層化モデルなどの階層化アーキテクチャが原因で、相当なホストプロセッサリソースを必要とし得る。データパケットがレイヤ間を進むようにデータパケットに対して実行される機能は、ソフトウェア集約型とすることができ、相当な量のプロセッサリソースおよびメモリリソースを要求し得る。さらに、ネットワークインタフェースカード（ＮＩＣ）などの多くのコンピュータハードウェア周辺機器の能力、効率、およびスループットは向上している。このようなコンピュータシステム周辺機器は、しばしば専用プロセッサおよび専用メモリを備えており、そうした備えがなければコンピュータシステムプロセッサによってソフトウェアで実行される、高度で複雑なコンピューティングタスクを実行することが一般に可能である。例えば、多くのＮＩＣは、チェックサム計算／検証、データ暗号化／復号化、メッセージダイジェスト計算、ＴＣＰセグメンテーションまたはＵＤＰセグメンテーション、受信側パケット分類、およびサービス妨害（Ｄｏｓ）攻撃に対する防御としてのパケットフィルタリングなど、ＮＩＣが実行しなければ適切なネットワークレイヤにおいて、ＣＰＵによって、ソフトウェアで実行されるタスクを独自に実行することが可能である。そのため、このようなＣＰＵ集約型タスクを周辺ハードウェア機器にオフロードすること(offloading)には利点がある。これにより、ホストコンピュータにおけるＣＰＵ使用率およびメモリ帯域幅使用量が低減され、それによって、システム全体の効率、速度、およびスループットが向上する。
【０００３】
リモートコンピューティングシステムは、リモートコンピューティングシステムによってホストリソースにアクセスするユーザを有効にすることができる。リモートコンピューティングシステム上のサーバは、プログラムを実行し、ＴＣＰ／ＩＰプロトコルなどの通信プロトコルに準拠するネットワークを介して信号を送信することによって接続できるクライアントに、ユーザインタフェースを示す信号を伝送することができる。各接続クライアントは、セッション、すなわち、リソース一式を含む実行環境を提供され得る。各クライアントは、ユーザ入力を示す信号をサーバに伝送することができ、サーバは、ユーザ入力を適切なセッションに適用することができる。クライアントは、リモートデスクトッププロトコル（ＲＤＰ）などのプロトコルを使用して、サーバリソースに接続することができる。ＲＤＰなどのプロトコルは、一般に、グラフィックス、ならびにＵＳＢ、プリンタ、キーボード、およびマウスなどのデバイストラフィック、加えて、サーバとクライアントの間のアプリケーションのための仮想チャネルも扱う。ターミナルサーバは、一般的なサーバ構成では数百存在し得るクライアントセッションを提供する。
【０００４】
ＲＤＰなどのプロトコルは、様々なこのようなリモートクライアントマシン機能をサポートする。一般に、サーバからのグラフィックスデータは、グラフィックスプリミティブ形式で符号化され、暗号化されるか、またはサーバ上でレンダリングされる必要があり、結果として現れるビットマップは、圧縮／暗号化され、ネットワークを介して伝送される必要がある。符号化操作、レンダリング操作、および暗号化操作は、本来は、非常にコンピュータを利用しており、高いＣＰＵ使用率を必要とする。したがって、上述の技法を使用して、このようなＣＰＵ集約型タスクを周辺ハードウェア機器にオフロードすることが有利である。
【発明の概要】
【０００５】
本開示は、これまではソフトウェアのプロセッサレベルにおいて実行されたリモート端末アクセス機能およびタスクを、コンピュータシステムに結合された適切なハードウェア周辺機器にオフロードするためのシステムおよび方法に関する。一実施形態では、タスクは、ネットワークインタフェースカード（ＮＩＣ）周辺機器にオフロードすることができ、周辺機器は、オフロードされなければコンピュータＣＰＵによって、ソフトウェアで、実行されるタスクの一部または全部を実行することができる。
【０００６】
一実施形態では、ＯＳ（オペレーティングシステム）は、コンピュータシステムに接続された（ＮＩＣなどの）ハードウェア周辺機器のデバイスドライバに「問い合わせ(query)」を行うことができる。様々なデバイスドライバは、本明細書において「タスクオフロード機能(task offload capabilities)」と呼ばれる、それぞれのハードウェア周辺機器の処理能力を識別することによって応答することができる。一実施形態では、各特定の周辺機器のタスクオフロード機能が識別されると、ＯＳは、その後、選択された周辺機器が一定のタスクを実行できるようにすることができる。ＯＳは、その後、既に実行できるようにされたタスクを周辺機器が実行するよう、動的に必要に応じて要求することができる。
【０００７】
様々な実施形態では、このようなタスクは、ＲＤＰプロトコル処理中にレンダリングおよび圧縮機能が必要とされる場合は、このようなレンダリングおよび／または圧縮を含むことができる。したがって、プロトコルデータフローとともに埋め込まれ、ＴＣＰ／ＩＰなどであり、オフロードされた他のネットワークオフロードタスク上のＲＤＰレベルの処理のための、オフロードパスを使用することによって、ネットワークカード上のハードウェア機能を利用することができる。
【０００８】
上述に加えて、本開示の一部を形成する特許請求の範囲、図面、および本文では、他の態様も説明される。本開示の１つまたは複数の様々な態様が、限定することなく、本明細書で言及される本開示の態様を達成するための回路構成および／またはプログラミングを含むことができ、回路構成および／またはプログラミングは実質的に、システム設計者の設計選択に応じて、本明細書で言及される態様を達成するように構成されたハードウェア、および／またはソフトウェア、および／またはファームウェアの任意の組み合わせとすることができることが当業者には理解できよう。
【０００９】
上述されたことは要約であり、したがって、簡略化、一般化、および細部の省略を必然的に含んでいる。要約はもっぱら一例に過ぎず、いかなる方法でも限定的であることを意図していないことが当業者には理解されよう。
【図面の簡単な説明】
【００１０】
【図１】本開示の態様を実施できるコンピュータシステム例を示す図である。
【図１ａ】複数の仮想プロセッサおよび対応するゲストオペレーティングシステムを含む複数の仮想マシンを備える仮想マシン環境であって、仮想マシンは、スケジューラおよび他のコンポーネントを含み得る仮想化レイヤによって維持され、仮想化レイヤは、複数の仮想マシンのためにハードウェアを仮想化する、仮想マシン環境を示す図である。
【図２】本開示の態様を実施するための動作環境を示す図である。
【図３】本開示の態様を実施するための動作環境を示す図である。
【図４】本開示の態様を実施するための動作環境を示す図である。
【図５】ネットワークスタックの機能レイヤおよび本明細書で開示されるバイパス経路を示す図である。
【図６】ＮＤＩＳ経路の機能レイヤおよび本明細書で開示されるバイパス経路を示す図である。
【図７】本明細書で開示されるオフロード機構を示すラダー図である。
【図８】ホストコンピュータと周辺機器の間の同期を説明するブロック図である。
【図９】階層化ネットワークアーキテクチャ内に存在する機能コンポーネントのいくつかを示す図である。
【図１０】本開示にしたがって、プログラムコンポーネントを通過するデータパケットのフローを説明する機能ブロック図である。
【図１１】データパケットおよびパケット拡張の実施形態を示す図である。
【図１２】リモートターミナルサービス処理を説明するアーキテクチャ例を示す図である。
【図１３】リモートターミナルサービス処理の態様を説明する機能ブロック図である。
【図１４】本開示の態様を実施するための操作手順例を示す図である。
【図１５】本開示の態様を実施するための操作手順例を示す図である。
【図１６】本開示の態様を実施するための操作手順例を示す図である。
【図１７】上の図１〜図１６に関して説明されるコンピュータ実行可能命令を持つコンピュータ可読媒体を示す図である。
【発明を実施するための形態】
【００１１】
一般論としてのコンピューティング環境
本開示の様々な実施形態についての完全な理解を提供するために、以下の説明および図において、ある具体的な詳細が説明される。本開示の主題の様々な実施形態を不必要に曖昧にすることを避けるために、しばしばコンピューティングおよびソフトウェア技術に関連するあるよく知られた詳細は、以下の開示では説明されない。さらに、以下で説明される詳細の１つまたは複数を用いずに、本開示の主題の他の実施形態を実施できることが当業者には理解されよう。最後に、以下の開示では、様々な方法が手順および順序を参照して説明されるが、このような説明は、本開示の主題の実施形態の明瞭な実施を可能にするためのものであり、その手順および順序が、本開示を実施するために必須であると理解されるべきではない。
【００１２】
本明細書で説明される様々な技法は、ハードウェア、ソフトウェア、または必要に応じて両方の組み合わせ、に関連して実施できることを理解されたい。したがって、本開示の方法および本開示の一連の装置、またはそれらのある態様もしくは部分は、磁気ディスク、ＣＤ−ＲＯＭ、ハードドライブ、または他の任意の機械可読記憶媒体など、有形な媒体内に具現化されるプログラムコード（すなわち命令）形式を取ることができ、プログラムコードがコンピュータなどの機械にロードされ、機械によって実行された場合、機械は開示される主題を実施するための装置になる。プログラム可能なコンピュータ上でのプログラムコード実行の場合、コンピュータデバイスは一般に、プロセッサ、プロセッサによって可読な（揮発性メモリおよび不揮発性メモリおよび／または記憶素子を含む）記憶媒体、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを含む。１つまたは複数のプログラムは、例えば、アプリケーションプログラミングインタフェース（ＡＰＩ）、または再利用可能コントロールなどの使用を通して、本開示の主題に関連して説明されるプロセスを実施または利用することができる。このようなプログラムは、望ましくは、高水準手続き型プログラミング言語またはオブジェクト指向プログラミング言語で実装されて、コンピュータシステムと情報伝達を行う。しかし、プログラムは、必要に応じて、アセンブリ言語または機械語で実装することもできる。いずれの場合も、言語は、コンパイル言語またはインタプリタ言語とすることができ、ハードウェア実装と組み合わせることができる。
【００１３】
リモートデスクトップシステムは、クライアントコンピュータシステムによって遠隔地で実行できるアプリケーションを維持するコンピュータシステムである。入力は、クライアントコンピュータシステムにおいて入力され、（例えば、リモートデスクトッププロトコル（ＲＤＰ）など、国際電気通信連合（ＩＴＵ）Ｔ．１２０ファミリのプロトコルに基づいたプロトコルを使用して）ネットワークを介してターミナルサーバ上のアプリケーションに転送される。アプリケーションは、入力がターミナルサーバにおいて入力されたかのように、入力を処理する。アプリケーションは、受信した入力に応答して出力を生成し、出力は、ネットワークを介してクライアントコンピュータシステムに転送される。クライアントコンピュータシステムは、出力データを渡す。したがって、入力が受け取られ、出力が渡されるのは、クライアントコンピュータシステムにおいてであるが、処理が実際に行われるのは、ターミナルサーバにおいてである。セッションは、デスクトップ、デスクトップ内でのマウスの動きを追跡するサブシステム、アイコン上でのマウスクリックをプログラムのインスタンスを生成させるコマンドに変換するサブシステムなどの、シェルおよびユーザインタフェースを含むことができる。別の実施形態例では、セッションは、アプリケーションを含むことができる。この例では、アプリケーションは描画されているが、デスクトップ環境はまだ生成されており、ユーザから隠されていることがある。上述の説明は、例示的なものであること、本開示の主題は、様々なクライアント／サーバ環境で実施することができ、特定のターミナルサービス製品に限定されないことを理解されたい。
【００１４】
必ずしもすべてのリモートデスクトップ環境ではないが、ほとんどの場合、（クライアントコンピュータシステムにおいて入力される）入力データは一般に、アプリケーションに対するコマンドを表すマウスおよびキーボードデータを含み、（ターミナルサーバのアプリケーションによって生成される）出力データは一般に、ビデオ出力デバイス上に表示するためのビデオデータを含む。多くのリモートデスクトップ環境は、他のタイプのデータを転送できるように拡張する機能も含む。
【００１５】
プラグインがＲＤＰ接続を介してデータを転送できるようにすることによって、通信チャネルを使用して、ＲＤＰプロトコルを拡張することができる。このような多くの拡張が存在する。プリンタリダイレクション、クリップボードリダイレクション、ポートリダイレクションなどの機能は、通信チャネル技術を使用する。したがって、入力データおよび出力データに加えて、データを転送する必要がある多くの通信チャネルが存在することがある。したがって、出力データを転送するための不定期な要求と、利用可能なネットワーク帯域幅を求めて競合する他のデータを転送するための１つまたは複数のチャネル要求が存在することがある。
【００１６】
図２は、ターミナルサービスを可能にする実施２００を示している。ターミナルサーバクライアントマシン２０２とターミナルサーバ２０４は、ＲＤＰを使用して通信する。ターミナルサーバクライアントマシン２０２は、ターミナルサーバクライアントプロセス２０６を実行し、ターミナルサーバクライアントプロセス２０６は、例えば、キーボードデータおよびマウスクリックデータなどのＲＤＰ入力デバイスデータ２０８を、ターミナルサーバ上でス生成されたターミナルサーバセッション２１０に送信し、ユーザインタフェースグラフィックスデータなどのＲＤＰ表示データ２１２を受信する。一般に、ターミナルサーバクライアントプロセス２０６は、シンクライアントプロセスであり、ほとんどの処理が、ターミナルサーバ２０４上で提供される。
【００１７】
図３は、ファイアウォール３０２を通してターミナルサービスを可能にする実施３００を示している。リモートターミナルサーバクライアント３０４は、ネットワーク３０８を介してターミナルサービスゲートウェイ（ＴＳＧ）３０６に接続する。ターミナルサーバクライアント上のハイパーテキスト転送プロトコル（ＨＴＴＰ）転送プロセス３１０とＴＳＧ  ３０６上のＨＴＴＰプロセス３１２は、ファイアウォール３０２を通過する通信を容易にする。ＨＴＴＰ転送プロセス３１０は、リモートプロシージャコール（ＲＰＣ）データ、またはＲＤＰデータなどのデータを、ＴＳＧ  ３０６のためのＨＴＴＰＳヘッダ内にラップする。ＴＳＧ  ３０６は、ソケット出力プロセス３１６によってソケット接続３１８を介してターミナルサーバ  ３１４に接続することができる。ターミナルサーバクライアント３０４が認証され、接続が確立されると、ＲＤＰデータ３２０は、ターミナルサーバクライアント３０４とターミナルサーバ  ３１４の間で双方向に通過することができる。
【００１８】
図４は、一般化された実施例４００を示しており、既存のリモートプロシージャコール／ハイパーテキスト転送プロトコル（ＲＰＣ／ＨＴＴＰ）プロキシを利用し、それによって、ファイアウォール４０２を通過するＲＰＣ／ＨＴＴＰ接続を介して、ＲＤＰなどのターミナルサービスプロトコルを提供する。実施のアーキテクチャは、ＲＤＰプロトコルをＲＰＣコール内にラップすることによって、既存のＲＰＣベースのプロキシを有利に利用できることを示している。特に、ターミナルサーバクライアント４０６上のＲＰＣ転送プラグイン４０４は、ターミナルサーバクライアント４０６とターミナルサーバ４０８の間の通信を提供するＲＤＰストリームをＲＰＣプロトコル内にラップする。これは、ＲＰＣベースのプロキシの利用を容易にし、それによって、ファイアウォールナビゲーションを可能にする。ターミナルサーバ上で、ユーザモードで動作できるＲＰＣベースのプロキシ４１０は、受信したデータを、ターミナルサーバ上で、カーネルモードで動作できるソケットリスナ４１２に転送することができる。
【００１９】
上述したように、クライアントは、ターミナルサービスを使用してリソースに接続するために、リモートデスクトッププロトコル（ＲＤＰ）などのリモートプロトコルを使用することができる。リモートデスクトップクライアントが、ターミナルサービスゲートウェイを介してターミナルサーバに接続する場合、ゲートウェイは、ターミナルサーバとのソケット接続を開き、クライアントトラフィックをＲＤＰポート、またはリモートアクセスサービス専用のポートにリダイレクトすることができる。ゲートウェイはまた、ＨＴＴＰＳを介して伝送されるターミナルサービスゲートウェイプロトコルを使用して、クライアントとのあるゲートウェイ固有のやり取りを実行することができる。
【００２０】
ハイパーバイザなどの仮想マシンモニタは、仮想マシンを生成するプログラムであり、各仮想マシンは、下層の物理的なハードウェアリソースによって支援できる仮想ハードウェアリソースを有する。図１ａは、複数の仮想マシン１２０、１２１を有する仮想マシン環境１００を示しており、仮想マシン１２０、１２１は、複数の仮想プロセッサ１１０、１１２、１１４、１１６と、対応するゲストオペレーティングシステム１３０、１３２とを備える。仮想マシン１２０、１２１は、スケジューラ１４２および他のコンポーネント（図示されず）から成ることができる仮想化レイヤ１４０によって維持され、仮想化レイヤ１４０は、複数の仮想マシン１２０、１２１のためのハードウェア１５０を仮想化する。複数の仮想プロセッサ１１０、１１２、１１４、１１６は、下層のハードウェアの物理的なプロセッサ１６０、１６２に相当する仮想のものとすることができる。
【００２１】
上記区分を実施するためのバリエーションのすべては、単なる例示的な実施にすぎず、本明細書において本開示を任意の特定の仮想化態様に限定すると解釈すべきではない。
【００２２】
オフローディングを使用するハードウェアアクセラレーション
本開示の実施形態は、一般に、処理ユニット２１の処理オーバヘッドおよびメモリ使用量を低減する能力を提供することに関する。これは、例えば、処理ユニット／ＣＰＵ  ２１上で動作しているオペレーティングシステム、および／またはアプリケーションプログラム、および／または他のプログラムモジュールを用いて達成される特定のコンピューティングタスクを、コンピュータシステム２０に接続された適切な周辺ハードウェア機器にオフロードすることによって達成される。このような周辺機器の多くは、専用プロセッサおよび専用メモリをいっそう装備するようになっており、一般にはもっぱらＣＰＵ  ２１によって達成される同じタスクの多くを十分に実行することが可能である。このようなデバイス例は、例えば、ネットワークインタフェースカード（図１の５３）、ディスクドライブインタフェースカード（例えば、図１の３２、３３、３４）、小型コンピュータシステムインタフェース（ＳＣＳＩ）デバイス、インテリジェントシリアルインタフェースカード、またはデータの暗号化／復号化のためのデバイスなどのアプリケーション固有の周辺機器を含むことができる。
【００２３】
本明細書で説明する本発明の一般的な概念は、上記の周辺ハードウェア機器のいずれかと接続して、コンピューティングタスクをオフロードするために使用できるが、開示された主題は、現在推奨の一実施形態例に関して説明され、コンピューティングタスクは、図１に示されるＮＩＣ  ５３などのネットワーク通信デバイスにオフロードされる。より具体的には、実例となる実施形態は、マイクロソフト（登録商標）コーポレーションから入手可能なＷｉｎｄｏｗｓ（登録商標）オペレーティングシステムのネットワーク環境およびアーキテクチャにおいて実施されるものとして説明される。しかし、Ｗｉｎｄｏｗｓ（登録商標）の概念およびＷｉｎｄｏｗｓ（登録商標）の専門用語を具体的に参照しはするが、ほとんどではないものの多くのオペレーティングシステムおよびネットワークアーキテクチャが、本開示の環境に関連する類似性を共有することを当業者が認識することが理解されよう。
【００２４】
図５は、本開示のネットワークモデルおよび本開示のコンポーネントを構成するコンポーネントの一部の相互関係を示している。通常の動作中、ネットワーク伝送されるメッセージが、アプリケーション５００によって、ネットワークスタック５０２を介して周辺機器５０４に送られ、周辺機器５０４では、メッセージは、ネットワーク上の他のデバイスおよびアプリケーションに送信され、また他のデバイスおよびアプリケーションから受信される。ネットワークスタック５０２は、１つまたは複数の中間ソフトウェアレイヤ５０６を含む。アプリケーション５００から送られたデータは、中間ソフトウェアレイヤ５０６を通過し、中間ソフトウェアレイヤ５０６では、データのパッケージ化、信頼性の高いデータ伝送、データ暗号化、およびメッセージダイジェストの計算など、特定の操作をデータに対して実行することができる
【００２５】
スイッチ５０８は、中間ソフトウェアレイヤ５０６のためのネットワークスタック操作を実行することから、処理ユニット１５０をオフロードするために使用される。スイッチ５０８は、別個に示されているが、ネットワークスタック５０２の最上位の中間レイヤに統合できることに留意されたい。データが、周辺機器５０４のためのチムニ５１０を通して周辺機器５０４に送られ、ネットワークスタック操作を実行する。この階層構造では、中間ソフトウェアレイヤは、ホストまたは周辺機器に排他的に存在する必要はなく、中間レイヤのいずれについても、完全にオフロードすること、ホストに残すこと、または両方を組み合わせる（例えば、１つもしくは複数の特定の接続をオフロードする）ことが可能である。加えて、チムニは、チムニ上にレイヤを形成することができる（例えば、ＩＰｓｅｃチムニは、ＴＣＰチムニの上にレイヤを形成することができる）。接続は、信頼性の高いデータ転送および信頼性の低いデータ転送、ならびにユニキャストデータ転送またはマルチキャストデータ転送の任意の組み合わせとすることができる。中間レイヤをホストに残す場合、ホストは、周辺機器５０４内のキャッシュされた変数を（以下で説明されるように）更新する。例えば、接続のための転送制御ブロック(transport control block)（ＴＣＢ）状態エントリは、周辺機器５０４にオフロードされるネットワーク層のためのルートキャッシュエントリ(route cache entry)（ＲＣＥ）とともに、トランスポート層のためにオフロードすることができる。スイッチ５０８は、同じＲＣＥを共有するネットワークスタック５０２を介して異なるＴＣＢのためのトラフィックを送り続ける一方、スイッチ５０８は、オフロードされたＴＣＢのためのチムニ５１０を通してトラフィックを送る。
【００２６】
スイッチ５０８は、オフロード要求を中間レイヤ５０６に送信することによって、オフロードを開始する。オフロード要求は、正常に接続をオフロードできるかどうかを決定する周辺機器５０４を支援するリソース情報を含む。各中間レイヤ５０６は、オフロード要求を拒否するか、またはリソース情報をオフロード要求に追加して、ネットワークスタック５０２内の隣接したソフトウェアレイヤにオフロード要求を送る。周辺機器５０４は、オフロード要求を受け取ったとき、接続をオフロードするために利用可能なリソースを有するかどうかを計算する。周辺機器５０４は、オフロードが可能でない場合はオフロード要求を拒否する。オフロードが可能である場合、周辺機器５０４は、オフロード要求を受け入れ、接続のためのリソースを割り当てる。周辺機器５０４は、パラメータの連結リストを有する完了メッセージを中間ソフトウェアレイヤ５０６に送ることによって、オフロード要求を完了する。パラメータの連結リストは、中間ソフトウェアレイヤ５０６およびスイッチ５０８が周辺機器と情報伝達することを可能にするために、中間ソフトウェアレイヤ５０６およびスイッチ５０８に情報を提供する。各中間ソフトウェアレイヤ５０６は、自身のための情報をパラメータの連結リストから削除する。
【００２７】
中間レイヤ５０６は、オフロードについての完了メッセージを受け取ったとき、その状態を周辺機器５０４に渡す。各状態は、３つのタイプの変数、すなわちＣＯＮＳＴ、ＣＡＣＨＥＤ、およびＤＥＬＥＧＡＴＥＤを有することができる。状態は、３つのタイプの変数のすべてまたは一部を有することができる。ＣＯＮＳＴ変数は、オフロードされた接続の存続期間中に変化しない定数である。ＣＯＮＳＴ変数は、接続がアップロードされるとき、レイヤにリードバック(read back)されない。ホスト処理ユニット２１は、ＣＡＣＨＥＤ変数の所有権を維持し、ホスト処理ユニット２１におけるＣＡＣＨＥＤ変数へのいかなる変更も、周辺機器５０４において更新されることを保証する。ＣＡＣＨＥＤ状態を変更する制御メッセージは、ネットワークスタック５０２によって処理される。結果として、接続がアップロードされるとき、ホストは、ＣＡＣＨＥＤ変数を書き込むが、リードバックする必要はない。ホスト処理ユニット２１は、ＤＥＬＥＧＡＴＥＤ変数の所有権を周辺機器５０４に転送する。ＤＥＬＥＧＡＴＥＤ変数は、オフロードが発生したときに一度書き込まれ、オフロードが終了したときにリードバックされる。ＤＥＬＥＧＡＴＥＤ変数を転送し戻すことだけなので、接続をホストに転送し戻すことのオーバヘッドは最小限に抑えられる。ネットワークスタック５０２と、様々な性能上の理由でオフロード（すなわち権限委譲）されている周辺機器５０４との間で共有されなければならない状態（例えば制御）は、ネットワークスタック５０２および周辺機器５０４の両方が、状態の排他的な部分を互いに所有するように、ネットワークスタック５０２とチムニ５１０の間できれいに分割される（例えば、ＴＣＰオフロードにおけるＩＰ  ＩＤ）。ホスト処理ユニット２１は、（例えば統計のために）必要とされる場合、ＤＥＬＥＧＡＴＥＤ変数について周辺機器５０４に問い合わせる。ホスト処理ユニット２１は、診断のためにＣＯＮＳＴまたはＣＡＣＨＥＤ変数について問い合わせることもできる。状態を３つのカテゴリに分割することで、ネットワークスタック５０２は、チムニ５１０ときれいに共存することができる。状態をオフロード要求に含めることができることに留意されたい。これは、状態が、委譲された状態変数を含まない場合、または最初のオフロード要求からオフロード要求が完了するまでの間に変化しない委譲された状態変数を含む場合に行うことができる。
【００２８】
周辺機器５０４またはホストは、オフロードされた接続をいつアップロードすべきかを決定する。アップロードは、周辺機器５０４またはスイッチ５０８のいずれかによって開始される。アップロードが開始されると、周辺機器５０４は、すべての未解決の要求を適切な状態で完了し、最上位の中間レイヤの委譲された状態をスイッチ５０８に渡す。スイッチ５０８は、さらなる送信要求をすべて待ち行列に入れ、受信バッファの提示を停止する。スイッチ５０８は、委譲された状態の制御権を取得するように最上位の中間レイヤに命令する。最上位の中間レイヤは、委譲された状態の制御権を取得し、スイッチ５０８に完了メッセージを送る。スイッチ５０８は、完了メッセージを受け取った後、周辺機器５０４にアップロードを確認し、それによって、周辺機器５０４は、もはや使用されていないリソースを解放することができる。
【００２９】
最上位の中間レイヤは、委譲された状態の制御権を取得するまで、オフロードされた接続についての到着データパケットを、処理のために周辺機器５０４に転送することに留意されたい。周辺機器５０４が委譲された状態をスイッチ５０８に渡すときと、最上位の中間レイヤが委譲された状態の制御権を取得するときの間に、データパケットが到着することがある。周辺機器５０４は、委譲された状態をスイッチ５０８に渡した後は、もはや到着データパケットを処理しない。周辺機器５０４は、到着データを受け取った場合、アップロードが進行中であることを通知するエラーメッセージを最上位の中間レイヤに送る。エラーメッセージは、最上位の中間レイヤが委譲された状態を受け取るまで、到着データの転送を停止し、さらなるデータをバッファリングするように最上位の中間レイヤに通知する。あるいは、周辺機器５０４上の増設バッファメモリのコストにおいて、到着データを周辺機器５０４に転送し、周辺機器５０４にデータをバッファリングさせることができる。
【００３０】
中間ソフトウェアレイヤ５０６によって、複数の接続を周辺機器５０４にオフロードすることができる。オフロードのために中間ソフトウェアレイヤの状態オブジェクトを参照する、上位レイヤ状態オブジェクト（すなわち、中間ソフトウェアレイヤ５０６の上位のレイヤの状態オブジェクト）の数についての参照カウンタが、中間ソフトウェアレイヤ５０６によって維持される。本明細書で使用される状態オブジェクトは、本明細書で使用されるようなＣＯＮＳＴ、ＣＡＣＨＥＤ、またはＤＥＬＥＧＡＴＥＤとして分類される、特定のレイヤのための状態変数の集まりである。中間レイヤのオフロードされた状態オブジェクトが、中間レイヤの上位のレイヤによる状態オブジェクトへの参照を有さない場合、中間レイヤ５０６は、中間レイヤのための状態オブジェクトをアップロードし、委譲された状態変数を中間レイヤ５０６に送るように、メッセージを周辺機器５０４に送る。周辺機器５０４は、中間レイヤ５０６のための状態オブジェクトを削除し、中間レイヤ５０６は、完了メッセージをスイッチ５０８に送る。
【００３１】
図９は、Ｗｉｎｄｏｗｓ（登録商標）環境におけるネットワークモデルを構成する一定のコンポーネント群からなる概略図を示している。説明の目的で、様々なＷｉｎｄｏｗｓ（登録商標）コンポーネントに対応するＯＳＩレイヤも示されている。ＯＳＩモデルの物理層に対応する下部レイヤには、（ネットワークカードまたはネットワークアダプタと呼ばれることがある）実際のＮＩＣ  ９００〜９０４が存在する。ＮＩＣは、物理的な媒体（ネットワークケーブル）との物理的な相互接続と、特定のネットワークトポロジに従った、すべてのより高位のレベルのレイヤによって生成されたデータを運ぶ信号の伝送とを提供するハードウェアデバイスである。上述したように、多くのＮＩＣは、専用プロセッサおよびメモリを装備し、ＮＩＣが実行しなければホストプロセッサＣＰＵによって処理できるタスクを含む、追加の高度なコンピューティングタスクを実行することが可能である。ＮＩＣは、コンピュータのスロット内に配置されるプリント回路基板カードとして、ＰＣＭＣＩＡ対応のスロット内に配置されるＰＣＭＣＩＡタイプカードとして、マザーボード上のコンピュータ筐体内に配置される専用チップとして、または他の任意の適切なもので、物理的に実装することができる。
【００３２】
各ＮＩＣは、双方向ライン９０８〜９１２によって概略的に表されるように、対応するネットワークドライバ９１６〜９２０を介して、Ｗｉｎｄｏｗｓ（登録商標）ネットワークモデルと論理的に相互接続される。ネットワークドライバは、ネットワークモデルのＭＡＣサブレイヤ内に常駐し、対応するＮＩＣを介してＷｉｎｄｏｗｓ（登録商標）を物理ネットワークチャネルにリンクする。対応するＮＩＣのベンダによって提供されるソフトウェアコンポーネントとして一般に実装される各ドライバは、対応するネットワーク接続を介してパケットを送信および受信すること、ならびにオペレーティングシステムの代わりにＮＩＣを管理することを担う。各ドライバはまた、対応するＮＩＣ上でＩ／Ｏを開始し、対応するＮＩＣから割り込みを受け取り、上位のプロトコルドライバを呼び出すことで送信データ転送の完了を通知する。また、デバイスドライバは、対応するＮＩＣの追加の処理機能のいずれかを起動し、制御し、および／または監視することも担う。
【００３３】
ある環境では、ドライバコンポーネントは、ＴＣＰ／ＩＰまたはＸＮＳなどの、単一の特定のネットワークプロトコルを実装するために書かれる。本開示の主題は、このような環境に適用可能である。しかし、説明目的で、本開示は、Ｗｉｎｄｏｗｓ（登録商標）ネットワークアーキテクチャに関連して説明され、Ｗｉｎｄｏｗｓ（登録商標）ネットワークアーキテクチャでは、ｎｅｔｗｏｒｋ  ｄｒｉｖｅｒ  ｉｎｔｅｒｆａｃｅ  ｓｐｅｃｉｆｉｃａｔｉｏｎ（ＮＤＩＳ）と呼ばれるインタフェースおよび環境が提供される。ＮＤＩＳインタフェースは、図９では９２６として機能的に示されている。ＮＤＩＳは、（その例が９２８〜９３４として示される）様々なトランスポートプロトコルの一つ一つからネットワークドライバ９１６〜９２０の各々を、またネットワークドライバの各々から様々なトランスポートプロトコルの一つ一つを隠蔽する。より詳細には、ＮＤＩＳは、１つまたは複数のＮＩＣドライバ（９１６〜９２０）が、１つまたは複数の下位のＮＩＣ（９００〜９０４）、（図９で９２８〜９３４として表される）１つまたは複数の上位のトランスポートプロトコルドライバまたはトランスポート、およびオペレーティングシステムと情報伝達を行うインタフェースを表す。
【００３４】
本質的に、ＮＤＩＳは、ＮＩＣドライバ開発のための完全に抽象化された環境を定義する。したがって、ＮＩＣハードウェア割り込みの登録および捕捉から、トランスポートプロトコルドライバとの情報伝達、レジスタ操作およびポートＩ／Ｏを介した下位のＮＩＣとの情報伝達まで、ＮＩＣドライバが実行する必要があるあらゆる外部機能について、ＮＩＣドライバは、ＮＤＩＳ  ＡＰＩを頼りに機能を実行することができる。このレベルの抽象化およびその結果の移植性を提供するため、ＮＤＩＳは、ＮＤＩＳインタフェースライブラリラッパ(NDIS Interface Library Wrapper)と呼ばれるエクスポートライブラリ（図示されず）を使用する。ＮＩＣドライバとプロトコルドライバ、ＮＩＣドライバとオペレーティングシステム、およびＮＩＣドライバとＮＩＣの間の対話は、ラッパ機能へのコールを介して実行される。したがって、Ｗｉｎｄｏｗｓ（登録商標）  ＮＴのためのトランスポート固有のドライバを書く代わりに、ネットワークベンダは、単一のネットワークドライバの最上位レイヤとしてＮＤＩＳインタフェースを提供する。そうすることで、いずれのプロトコルドライバも、このインタフェースをコールすることによって、そのネットワーク要求をネットワークカードに送ることができる。したがって、ユーザは、１つのネットワークカードおよび単一のネットワークドライバを使用して、ＴＣＰ／ＩＰネットワークおよびＤＬＣ（もしくはＮＷＬＩＮＫ、またはＤＥＣｎｅｔ、ＶＩＮＥＳ、およびＮｅｔＢＥＵＩなど）ネットワークを介して通信することができる。
【００３５】
ネットワーク層およびデータリンク層には、図９の例では９２８〜９３４として示される、トランスポート、プロトコル、および関連ドライバが存在する。Ｗｉｎｄｏｗｓ（登録商標）では、トランスポートプロトコルドライバは、ネットワークのユーザにサービスを提供するために、トランスポートドライバインタフェース（ＴＤＩ）を、または場合によってはＴＤＩの上位で別のアプリケーション固有のインタフェースを実装する、ソフトウェアコンポーネントである。Ｗｉｎｄｏｗｓ（登録商標）では、ＴＤＩは、機能ブロック９３８として示されるリダイレクタ機能およびサーバ機能など、セッション層において通信するネットワークコンポーネントに共通インタフェースを提供する。よく知られているように、トランスポートプロトコルは、ネットワークのためのデータオーガナイザとして動作し、基本的に、次の受信レイヤにデータをどのように提示すべきかを定義し、それに沿ってデータをパッケージ化する。トランスポートプロトコルは、対応するＮＩＣを介してネットワーク上にデータを送信できるように、（Ｗｉｎｄｏｗｓ（登録商標）環境ではＮＤＩＳパケットと呼ばれることがある）パケットを割り当て、送信元アプリケーションからのデータをパケットにコピーし、ＮＤＩＳをコールすることによって、より下位のレベルのデバイスドライバにパケットを送る。
【００３６】
データパケットが様々なネットワークレイヤを、一般にネットワークモデルのレイヤ３およびレイヤ４を通過するとき、データパケットに対して追加の機能またはタスクも実行できることが理解されよう。本開示によれば、このような追加の機能またはタスクは、ＮＩＣハードウェアによって、その代わりに実行することもできる。
【００３７】
例えば、従来はトランスポートプロトコルドライバによって実行していた１つのタスクは、チェックサム値を計算し、次にチェックサム値をパケットに追加することができる。これは、データがネットワークリンクを行き来するときに、データの整合性を保証する助けとなる。一般に、この操作は、パケットを構成するデータ要素を合計することによって計算された数をネットワークパケットに追加するために、ネットワークパケットの送信側に対応するトランスポートプロトコルを必要とする。次に、パケットの受信側は、追加されたチェックサム数をデータと比較し、それによって、データが送信中に変更されなかったことを確認する。このチェックサム計算および比較は、代わりにＮＩＣハードウェアにオフロードすることができる。
【００３８】
ＮＩＣハードウェアにおいて最適に実行できる別の関連タスクは、データパケットのためのメッセージダイジェストの計算である。チェックサムと同様に、メッセージダイジェストは、パケット内のデータの整合性を保証するために使用される。加えて、メッセージダイジェストは、メッセージを送った当事者が、その主張通り当事者本人であることを保証することによって、データの信頼性を保証するために使用することができる。メッセージダイジェストの計算は、非常にＣＰＵ集約型であり、ソフトウェアで実行するにはコストが高い機能である。
【００３９】
別の望ましい機能は、パケット内のデータの暗号化である。暗号化とは、パケットの読み込み権限のない者が、事前に暗号鍵の情報を得られないまま、メッセージの内容を実際に見ることが不可能になるように、パケット内のメッセージを変換する暗号プロセスのことを指す。もちろん、暗号アルゴリズムも、非常にＣＰＵ集約型およびメモリ集約型となる傾向があり、ソフトウェアで実行した場合には非常にコストが高くなり得る。そのような暗号化の例は、セキュアソケットレイヤ（ＳＳＬ）プロトコル暗号化、およびインターネットセキュリティプロトコル暗号化、すなわち「ＩＰＳｅｃ」を含む。よく知られているように、ＳＳＬ暗号化プロトコルおよびＩＰＳｅｃ暗号化プロトコルはどちらも、非常にＣＰＵ集約型およびメモリ集約型である。
【００４０】
データパケットに対して実行できる別のタスクは、ＴＣＰセグメンテーションまたはＵＤＰセグメンテーションである。よく知られているように、ＴＣＰプロトコルおよびＵＤＰプロトコルは、大きなデータパケットを、下位のネットワークによって許容される最大データサイズに合ったセグメントに分割する。例えば、イーサネット（登録商標）は、最大で１５１４バイトのパケットをネットワーク上で許容する。したがって、ＴＣＰまたはＵＤＰは、例えば６４Ｋバイトを送信しなければならない場合、データを解析、１５１４バイトのセグメントに分割しなければならない。
【００４１】
加えて、データパケットがネットワークから受信されるとき、データパケットに対してしばしばパケット分類が実行される。パケット分類は、サービス品質（ＱｏＳ）ついてのデータパケットの識別を含む。言い換えれば、各データパケットは、最適性能を保証するためにデータパケットに対して実行されるべきサービスの形態を定義するフィールドを含む。例えば、ビデオおよびオーディオを含むデータパケットは、ビデオおよびオーディオを提示する際の高忠実性を保証するために、データパケットに対して実行される一定の機能を必要とすることがある。サービスの形態を識別するためのデータパケットの分類は、本開示に従って、ＮＩＣハードウェアにオフロードすることができる。
【００４２】
パケットフィルタリングも、ＣＰＵの代わりに、ＮＩＣハードウェアによって実行することができる。特に、データパケットは、それらがサービス妨害攻撃の一部である特徴を有するかどうかを特定するために評価することができる。しばしば、サーバソフトウェアは、サービスを要求するクライアントには悪意がないという仮定の下で作成される。しかし、クライアントが十分な教育を受けており、しかも悪意を有する場合、ユーザはしばしば、他のユーザに対するサーバのサービスを妨害するように設計された要求をサーバに向けて発行することができる。サービス妨害攻撃フィルタリングとは、データパケットがサービス妨害攻撃の特徴を有するかどうか特定するためにデータパケットを評価する能力に関係する。
【００４３】
サービス妨害攻撃の一例は、「ＳＹＮフラッド攻撃」であり、ＳＹＮフラッド攻撃では、１つまたは別の理由で、クライアントは、ハンドシェイクシーケンスにおいて、サーバのＳＹＮｃｒｏｎｉｚｅ−ＡＣＫｎｏｗｒｅｄｇｅ（ＳＹＫ−ＡＣＫ）応答に対していかなる最終的な肯定応答も送信しない。これによって、サーバが最終的にタイムアウトになるまで、サーバはシグナリングを続けることになる。
【００４４】
別のタイプのサービス妨害攻撃は、フラグメンテーションまたは「ティアドロップ(teardrop)」攻撃と呼ばれている。インターネットプロトコルは、パケットが次のルータで処理するには大き過ぎる場合、パケットを断片化する必要がある。後続の断片化されたパケットは、受信側においてパケット全体を再構築することを可能にする、最初のパケットの先頭のオフセットを識別する。フラグメンテーション攻撃では、ユーザは、しばしば受信側を機能不能にする偽のオフセット値を後続のフラグメント内に配置する。ＮＩＣハードウェアは、データパケットを評価して、データパケットが特定の種類のサービス妨害攻撃の特徴を有するかどうかを特定することによって、これらのタイプのサービス妨害攻撃のためのフィルタリングを処理するように構成することができる。
【００４５】
上記および他の機能は一般に、様々なネットワークレイヤに存在するソフトウェアコンポーネントにおいてコンピュータＣＰＵ  ２０によって実行され、その結果、相当のコンピュータリソースを利用することがあり、コンピュータシステム性能の全般的な低下をもたらす。したがって、これらまたは他の類似のタスクを、代わりに対応するＮＩＣハードウェアにおいて実行できるようにオフロードすることによって、コンピュータシステムの全体的な速度および効率を大幅に向上させることができる。
【００４６】
ここで図６を参照すると、周辺機器５０４がＮＩＣ  ５６であり、スイッチ５０８は、トランスポート層インタフェース（ＴＬＩ）スイッチ６０６である一実施形態が示されており、ネットワークスタック５０２は、トランスポート層６００、ネットワーク層６０２、およびフレーム化層(framing layer)６０４を含む。ネットワーク層６０２は、経路層(path layer)としても知られており、フレーム化層６０４は、近傍層(neighbor layer)としても知られている。
【００４７】
ネットワークメッセージは、動作中に、アプリケーション５００によって、ネットワークスタック５０２を介してＮＩＣ  ５６に送られる。アプリケーション５００から送られたデータは、ＴＬＩスイッチ６０６を通過し、ＴＬＩスイッチ６０６は、データが、ホストベースのネットワークスタック５０２を下るのか、それともチムニ６０８を下るのかを制御する。ＴＬＩスイッチ６０６をネットワークスタック５０２の最上位レイヤに組み込むことができることに留意されたい。ネットワークスタック５０２内のソフトウェアレイヤは、アプリケーション５００からデータを受け取り、そのデータをパケット形式にパッケージ化し、ＮＤＩＳミニドライバ６１０を介して、そのデータを周辺ハードウェア６１４に送る。データパケットがスタック５０２を通過するときに、ネットワークスタック５０２が実行できる他のタスクは、データ暗号化、信頼性の高いデータ伝送、およびメッセージダイジェスト（例えば、データパケットのためのチェックサムまたは巡回冗長検査（ＣＲＣ））の計算を含む。これらのタスクの多くは、処理ユニット２１によって実行され、プロセッサ集約型である。
【００４８】
接続のためのデータを、チムニ６０８（およびチムニドライバ６１２）を介してＮＩＣ５６に送ることによって、スタック操作を実行することから処理ユニット２１をオフロードするために、ＴＬＩスイッチ６０６が使用される。ＮＤＩＳミニドライバ６１０とチムニドライバ６１２の上縁が、マイクロソフト（登録商標）の製品版オペレーティングシステムのＮＤＩＳ  ＡＰＩであることを当業者は理解されよう。説明目的で、伝送制御プロトコル（ＴＣＰ）ベースのプロトコルスタックを使用して、開示される主題について説明する。しかし、本開示の教示を使用して、多くの種類の周辺機器を使用できること、また他のネットワークスタックをオフロードできることを当業者が認識することが理解されよう。例えば、ストリーム制御伝送プロトコル（ＳＣＴＰ）またはユーザデータグラムプロトコル（ＵＤＰ）ベースのプロトコルスタックをオフロードすることができる。加えて、本開示は、インターネット小型コンピュータシステムインタフェース（ｉＳＣＳＩ）、ネットワークファイルシステム（ＮＦＳ）、または共通インタフェースファイルシステム（ＣＩＦＳ）など、より高位の機能プロトコルをオフロードするために使用することもできる。
【００４９】
オフロードが発生する多くの理由が存在する。限定ではなく、例として、理由のいくつかを以下で提供する。システム管理者は、オフロードされる特定のサービスを選択することができる。特定の接続上のトラフィック（バイト数またはパケット数の点で）が相当な量のリソースを消費している場合、その接続をオフロードすることができる。サービスの種類をオフロードすることができる。例えば、ＩＰｓｅｃなどのセキュリティプロトコルをオフロードすることができる。オフロードは、ポリシによってさせることができる。例えば、管理者は、ある組織内からのすべての接続が最初にオフロードされるというポリシをもつことができる。使用されているシステムリソース（例えば、ＣＰＵ利用、データキャッシュ使用、ページテーブルキャッシュ使用、メモリ帯域幅）は、接続をオフロードするようにホストプロセッサを誘導することができる。
【００５０】
図７は、ＴＣＰ接続をオフロードするために取られる手順を示している。３ステージのプロセスが使用される。一般に、３ステージのプロセスは、ＴＣＰ接続をオフロードするのに必要とされるリソースを割り当てること、層５００、５０２、５０４、５０６の各々にハンドルを提供すること、層５００、５０２、５０４、５０６の各々についての状態をＮＩＣ  ５３にオフロードすることである。オフロード遷移中、ＴＬＩスイッチ５０６は、アプリケーション２００から送られたすべてのメッセージをバッファリングする。あるいは、トランスポート層５００が、データをバッファリングする。オフロードが完了したとき、バッファリングされたデータが、オフロードデータ伝送と同じ機構を使用して、ＮＩＣ  ５３に転送される。オフロード遷移中に到着パケットを受信した場合、ＮＩＣ  ５３は、トランスポート層委譲状態がＮＩＣ  ５３に渡されるまで、層５００、５０２、５０４、５０６を介してデータを上方に移動させ続ける。
【００５１】
ＴＬＩスイッチ５０６は、トランスポート層５００にオフロード要求を送ることによって（ライン７００）、オフロードを開始する。オフロード要求は、次層の局所的状態を指示するポインタ（例えば、トランスポート層５００の場合のＴＣＢポインタ、ネットワーク層５０２の場合のＲＣＥポインタ、フレーム化層５０４の場合のＡＲＰテーブルポインタ、またはＮＤＩＳミニドライバ５１０の場合のＮＤＩＳミニポートポインタ）、オフロードタイプ（例えば、ＴＬＩスイッチ５０６の場合のＴＣＰ、ネットワーク層５０２の場合のＩＰｖ６など）、および正常にＴＣＰ接続をオフロードできるかどうかをＮＩＣ  ５３が決定する助けとなるリソース情報を含む。また、ＴＬＩスイッチ５０６は、ディスパッチテーブルもＮＩＣ  ５３に提供することができる。トランスポート層５００は、オフロード要求を拒否するか、またはＴＬＩスイッチリソース情報にＴＣＰリソース情報を追加して、オフロード要求をネットワーク層５０２に送る（ライン７０２）。
【００５２】
ネットワーク層５０２は、オフロード要求を受け取り、接続をオフロードすることを拒否するか、またはＴＣＰリソース情報およびＴＬＩスイッチリソース情報にネットワークリソース要件を追加して、オフロード要求をフレーム化層５０４に送る（ライン７０４）。ネットワーク層５０２は、ディスパッチテーブルもＮＩＣ  ５３に提供することができる。フレーム化層５０４は、接続をオフロードすることを拒否するか、またはネットワークリソース要件、ＴＣＰリソース情報、およびＴＬＩスイッチリソース情報にフレーム化リソース要件を追加して、オフロード要求をＮＩＣ  ５３に送る（ライン５０６）。
【００５３】
ＮＩＣ  ５３は、オフロード要求を受け取り、ＴＣＰ接続をオフロードするのに利用可能なリソースを有するかどうかを計算する。ＮＩＣは、オフロードが可能でないと判定した場合、オフロード要求を拒否する。ＮＩＣは、オフロードが可能であると判定した場合、オフロード要求を受け入れ、接続のためのリソース（例えば、ＴＣＢ、ルートキャッシュエントリ（ＲＣＥ）、アドレス解決プロトコル（ＡＲＰ）テーブルエントリ（ＡＴＥ））を割り当てる。ＮＩＣ  ５３は、パラメータの連結リストおよびディスパッチテーブルを生成し、層５００、５０２、５０４、５０６に渡し、パラメータの連結リストを有する完了メッセージをフレーム化層５０４に送ることによって（ライン４０８）、オフロード要求を完了する。パラメータは、層５００、５０２、５０４、５０６の各々のためのオフロードハンドルおよびディスパッチテーブルを含む。本明細書で使用されるオフロードハンドルとは、ソフトウェアレイヤが周辺機器と情報伝達することを可能にする機構を意味する。限定ではなく、例として、オフロードハンドルは、ポインタベースのハンドル、配列への参照として使用される整数値、ハッシュテーブル（例えばハッシュ関数）、ソフトウェアレイヤ（もしくはネットワークスタック）と周辺機器との間の通信チャネル、または状態オブジェクトを参照するために周辺機器が使用する、ソフトウェアレイヤによって渡されるパラメータ一式になり得る。
【００５４】
ディスパッチテーブルは、データを直接ＮＩＣ  ５３に送るため、またはデータを直接ＮＩＣ  ５３から受け取るために使用される。ディスパッチテーブルは、診断を提供するために使用することもできる。例えば、ソフトウェアレイヤを追加して、システムを監視すること、またシステムが適切に機能していることを確認するために誤りを投入することができる。加えて、必要に応じて、追加の機能を追加できるソフトウェアレイヤによって、ディスパッチテーブルにパッチを適用することができる。例えば、ソフトウェアレイヤを追加して、フィルタドライバの機能を提供することができる。パッチは一般に、追加機能が挿入される元の機能を指示するポインタを獲得し、追加機能にポインタをリダイレクトする（すなわちポインタを向ける）ことによって適用される。パッチが挿入された後、元の機能が呼び出されたときは常に、追加機能がその機能を実行し、その後、元の機能を呼び出す。
【００５５】
フレーム化層５０４は、宛先ＭＡＣアドレスが変化した場合またはカプセル化タイプが変化した場合の容易な更新のために、ＡＲＰテーブルエントリ内にフレーム化層のためのオフロードハンドルおよびディスパッチテーブルを格納する。その後、フレーム化層５０４は、ＡＴＥに関連するＮＩＣ  ５３状態を更新する（ライン７１０）。フレーム化層５０４は、その状態を連結リストから除去し、連結リスト内の残りの情報をネットワーク層５０２に転送する（ライン７１２）。
【００５６】
ネットワーク層５０２は、ネットワーク層５０２のためのオフロードハンドルおよびディスパッチテーブルを格納する。ネットワーク層５０２はまた、その状態をＮＩＣ  ５３に送る（ライン７１４）。ネットワーク層５０２は、連結リストからネットワーク層情報を除去し、パラメータの連結リストおよびディスパッチテーブルを有する完了メッセージをトランスポート層５００に送る（ライン７１６）。ネットワーク層５０２は、オフロードされた状態のために受け取るＩＰフラグメントを、処理のためにＮＩＣ  ５３に転送することができ、また、ネットワーク層５０２がＩＰフラグメントをネットワーク層において処理し、トランスポート層５００に転送することができる。
【００５７】
一代替実施形態では、層の状態オブジェクトが、オフロード要求と共に送られる。例えば、フレーム化層状態オブジェクトおよびネットワーク層状態オブジェクトは、オフロード要求と共に送られ、オフロード要求と完了イベントとの間に、キャッシュされた状態が変化した場合にのみ、状態が更新される。層状態オブジェクト全体は、委譲された状態が存在しないか、またはオフロード要求とオフロード要求の完了との間に変化できない場合にのみ、オフロード要求と共に送ることができる。しかし、委譲された状態が存在し、オフロード要求とオフロード要求の完了との間に変化できる場合であっても、ＣＯＮＳＴとして分類された変数は、オフロード要求と共に送ることができる。
【００５８】
トランスポート層５００は、トランスポート層のためのオフロードハンドルを格納し、その状態をＮＩＣ  ５３に送る（ライン７１８）。任意の未解決送信バッファまたは任意の未解決受信バッファが保留状態で存在する場合、トランスポート層５００は、バッファをＴＬＩスイッチ５０６に返す。トランスポート層５００がバッファをＴＬＩスイッチ５０６に返し始めると、ＴＬＩスイッチ５０６は、トランスポート層５００にバッファを送るのを停止し、それらを待ち行列に入れ、トランスポート層５００がパラメータの連結リストおよびディスパッチテーブルを有する完了メッセージをＴＬＩスイッチ２０４に送るのを待つ。トランスポート層５００は、すべてのバッファを返し、その後、完了メッセージを送る（ライン７２０）。ＴＬＩスイッチ５０６は、完了メッセージを受け取ると、送信バッファおよび受信バッファをＮＩＣ  ５３に転送する（ライン７２２）。ＴＬＩスイッチ５０６は、ディスパッチテーブルを使用して、すべての未解決受信バッファをおよびすべての将来の受信バッファをポストし、処理のためにＮＩＣ  ５３に送る。オフロード要求が完了するのにかかる時間の間、各層５００、５０２、５０４は、オフロードされる状態オブジェクト（すなわち、層に関連する状態オブジェクト）についての新しいオフロード要求を拒否するか、またはオフロードが完了するまで、それらを待ち行列に入れる。
【００５９】
トランスポート層５００は、トランスポート状態がＮＩＣ  ５３にオフロードされていない場合、到着ＴＣＢデータを処理して、ＴＬＩスイッチ５０６にデータを渡す能力を依然として有する。ＴＣＢデータがオフロードの最中に到着した場合、トランスポート層５００は、データを保持し続けるか、またはデータを処理して、それをＴＬＩスイッチ５０６に渡すことができる。トランスポート層５００がその状態をＮＩＣ  ５３に送ったとき（ライン７１８）とＴＬＩスイッチがバッファをＮＩＣ  ５３に転送したとき（ライン７２２）の間は、ネットワークスタック２０２を通って来る到着ＴＣＢデータが、ＮＩＣ  ５３に送られる。
【００６０】
後のオフロード要求のとき、ネットワーク層５０２およびフレーム化層５０４は、ＮＩＣ  ５３から受け取ったオフロードハンドルを、先のオフロードからＮＩＣ  ５３に渡す。これは、ネットワーク層５０２およびフレーム化層５０４のためのリソースがすでに割り当てられていることをＮＩＣ  ５３に伝え、それによって、ＮＩＣリソースを節約し、オフロードをスピードアップする。
【００６１】
先に示したように、層５００、５０２、５０４は、それらの状態をＮＩＣ  ５３に渡す。各状態は、３つのタイプの変数を、すなわち、ＣＯＮＳＴ、ＣＡＣＨＥＤ、およびＤＥＬＥＧＡＴＥＤを有する。ＣＯＮＳＴ変数は、オフロードされた接続の存続期間中に変化しない定数である。ＣＯＮＳＴ変数は、接続が終了したとき、その層にリードバックされない。ホスト処理ユニット２１は、ＣＡＣＨＥＤ変数の所有権を維持し、ホスト処理ユニット２１におけるＣＡＣＨＥＤ変数へのいかなる変更も、ＮＩＣ  ５３において更新されることを保証する。結果として、ホストは、ＣＡＣＨＥＤ変数を書き込むが、（システム診断がそれを要求しない限り）リードバックはしない。ホスト処理ユニット２１は、ＤＥＬＥＧＡＴＥＤ変数の所有権をＮＩＣ  ５３に転送する。ＤＥＬＥＧＡＴＥＤ変数は、オフロードが発生したときに一度書き込まれ、オフロードが終了したときにリードバックされる。ＤＥＬＥＧＡＴＥＤ変数を転送し戻すことだけなので、接続をホストに転送し戻すことのオーバヘッドは最低限に抑えられる。ホスト処理ユニット２１は、（例えば統計のために）必要とされる場合、ＤＥＬＥＧＡＴＥＤ変数についてＮＩＣ  ５３に問い合わせる。
【００６２】
トランスポート層５００のためのＣＯＮＳＴ変数は、宛先ポート、送信元ポート、「気付(care-of)」アドレスが変化する可能性がある場合にモバイルＩＰが存在することを示すフラグ、ＳＥＮＤウィンドウスケールファクタおよびＲＥＣＶウィンドウスケールファクタ、ならびにネットワーク層５０２のためのＮＩＣハンドルを含む。トランスポート層５００のためのＣＡＣＨＥＤ変数は、ＴＣＰ変数およびＩＰ変数である。ＴＣＰ変数は、有効ＭＳＳ(Effective MSS)、ＮＩＣ  ５３によって受信指示にコピーされるバイトの数、ネーグリング(Nagling)をオフにするフラグ、キープアライブ(Keep-Alive)が必要であることを示すフラグ、およびキープアライブ設定（すなわち、間隔、プローブの数、デルタ）を含む。ＩＰ変数は、ＴＯＳおよびＴＴＬを含む。ＤＥＬＥＧＡＴＥＤ変数は、現在のＴＣＰ状態、次のＲＥＣＶ（すなわちＲＣＶ．ＮＥＸＴ）のシーケンス番号、受信ウィンドウサイズ（ＲＣＶ．ＷＮＤ）、最初の送達確認なしのデータ(First Un-Acked Data)のシーケンス番号（ＳＮＤ．ＵＮＡ）、次のＳＥＮＤのシーケンス番号（ＳＮＤ．ＮＥＸＴ）、これまで送信された最大のシーケンス番号（ＳＮＤ．ＭＡＸ）、最大の送信ウィンドウ（ＭＡＸ＿ＷＩＮ）、現在の輻輳ウィンドウ（ＣＷＩＮ）、スロースタート閾値（ＳＳＴＨＲＥＳＨ）、平滑化ＲＴＴ（８＊Ａ）、デルタ（８＊Ｄ）、現在の再送カウント、次の再送についての残存時間、およびエコーされるタイムスタンプを含む。
【００６３】
ネットワーク層５０２のためのＣＯＮＳＴ変数は、（ＩＰｖ４またはＩＰｖ６のための）宛先ＩＰアドレスおよび（ＩＰｖ４またはＩＰｖ６のための）送信元宛先ＩＰアドレスを含む。ネットワーク層５０２のためのＣＡＣＨＥＤ変数は、フレーム化層５０４のためのＮＩＣハンドルを含む。ネットワーク層５０２のためのＤＥＬＥＧＡＴＥＤ変数は、ＩＰパケットＩＤ開始値を含む。フレーム化層５０４のためのＣＡＣＨＥＤ変数は、ＡＲＰアドレス、およびヘッダのフォーマット（例えば、ＬＬＣ／ＳＮＡＰ［Ｌｏｇｉｃａｌ  Ｌｉｎｋ  Ｃｏｎｔｒｏｌ／Ｓｕｂ−Ｎｅｔｗｏｒｋ  Ａｃｃｅｓｓ  Ｐｒｏｔｏｃｏｌ］またはＤＩＸ［Ｄｉｇｉｔａｌ、Ｉｎｔｅｌ、Ｘｅｒｏｘ］）を示すフラグを含む。
【００６４】
ネットワーク層状態は、複数の接続の間で共有でき、フレーム化層状態は、複数の経路（例えばＩＰエイリアス）の間で共有できるので、トランスポート層状態は、ネットワーク層のためのハンドルを含み、ネットワーク層状態は、フレーム化状態へのハンドルを含む。この階層構造は、いくつかの理由のために維持される。ＩＰ  ＩＤ名前空間は、すべてのオフロードされた接続にわたって、経路毎に管理されなければならないので、接続は、ネットワーク層のためのＮＩＣハンドルを必要とする。ルート更新は次のホップアドレスを変更することができ、その結果、新しいＭＡＣアドレスをポイントすることができるので、経路は、フレーム化層のためのＮＩＣハンドルを必要とする。階層はまた、ＮＩＣによって維持される必要がある状態の量を縮約する。例えば、ＩＰｖ４のためのＡＲＰ更新は、ＩＰアドレスからＭＡＣアドレスへのマッピングを変更することができる（例えば、サーバ上でフェイルオーバされるインタフェース）。ホストは、キャッシュされた変数としてＭＡＣアドレスを維持し、その結果、ホストは、キャッシュされた状態を１回だけ更新すればよく、すべての接続は、新しいインタフェースに引き継がれる。
【００６５】
ＴＣＰ接続がオフロードされると、ＮＩＣ  ５３は、ＮＩＣ  ５３が送信するパケットのパケット識別子（例えばＩＰ  ＩＤ）の割り当てを担う。ＩＰ  ＩＤは、インタフェース毎または層状態オブジェクト毎にオフロードされる。ＮＩＣ  ５３には、ＩＰ  ＩＤ名前空間の一部が割り当てられる。一実施形態では、ＮＩＣ  ５３には、ＩＰ  ＩＤ名前空間全体の半分が割り当てられ、ネットワーク状態がＮＩＣ  ５３に渡されるときに使用する、ＩＰパケットＩＤ開始値が与えられる。ＮＩＣ  ５３は、以下の公式を使用して、ＮＩＣ  ５３が送信するＩＰパケット上でＩＰ  ＩＤを生成する。Ｃｕｒ．ｓｕｂ．−−ＩＰＩＤ＝［（Ｓｔａｒｔ．ｓｕｂ．−−ＩＰＩＤ＿Ｆｏｒ＿Ｔｈｉｓ＿Ｐａｔｈ）＋（Ｃｏｕｎｔｅｒ＿Ｆｏｒ＿Ｔｈｉｓ＿Ｐａｔｈ）ｍｏ−ｄ３２ｋ］ｍｏｄ  ６４Ｋ  Ｃｏｕｎｔｅｒ＿Ｆｏｒ＿Ｔｈｉｓ＿Ｐａｔｈ＝Ｃｏｕｎｔｅｒ＿Ｆｏｒ＿Ｔｈｉｓ＿Ｐａｔｈ＋１
【００６６】
オフロードされた接続がアップロードされたか、または無効化された場合、ＮＩＣ  ５３は、ＮＩＣ  ５３が使用する次のＩＰＩＤ値をネットワーク層に転送し、次に発生するオフロードのために格納し、ホスト処理ユニット２１は、割り当てられたＩＰ  ＩＤ名前空間の一部を使用し続ける。ホスト処理ユニット２１は、最大限のＩＰ  ＩＤ名前空間を使用することができるが、オフロードが発生するたびに、カウンタが設定されなければならない。
【００６７】
ＮＩＣ  ５３は、データが受信された順番で、データを受信バッファ内に配置し、オフロードされた接続についてポストされた順番で、アプリケーションバッファを満たす。多くのアプリケーションは、受信バッファをポストする前に、受信指示を待つ。一実施形態では、ＮＩＣ  ５３は、グローバルなバッファプールを有し、接続のためにデータが到着したが、アプリケーション受信バッファがポストされていない場合に使用する。グローバルなバッファプールは、オフロードされた接続にわたって使用され、１）順序が狂ったＴＣＰ伝送に対する対処、２）ＩＰデータグラムのデフラグメント、３）アプリケーションがゼロコピーアルゴリズムには小さ過ぎるバッファをポストしている場合に、ゼロコピーアルゴリズムで以外のバッファコピーアルゴリズムを実行するために使用することができる。あるいは、リソースの効率的な使用が問題とならない場合、接続毎のバッファプールを使用することもできる。しかし、ＮＩＣが接続毎のバッファプールをサポートしない場合、またはシステムリソースが不足している（例えば、メモリ内にアプリケーションバッファを確保するにはリソースが十分でない）場合は、グローバルなバッファプールが使用される。
【００６８】
ここで図８を参照すると、接続がＮＩＣ  ５３にオフロードされると、ＮＩＣ  ５３への２つの経路が存在することとなる。第１の経路は、ＮＤＩＳミニドライバ５１０を通って、フレーム化層５０４、ネットワーク層５０２、およびトランスポート層５００に到る。第２の経路は、オフロードされた接続８０８を通り、これはチムニと呼ばれる。ホストコンピュータの観点からすれば、２つの経路について、通信の点ではすべてが同じである。キャッシュされた状態変数は、先に示したように、ＮＩＣ  ５３のキャッシュされた状態変数を更新する処理ユニット２１を用いて、２つの経路を同期させる。キャッシュされた変数の更新は、矢印８０２、８０４、８０６によって示されている。
【００６９】
到着データパケットが到着したとき、ＮＩＣ  ５３は、到着データパケットがオフロードされた経路を通過するか、それともオフロードされていない経路を通過する（すなわち、ＮＤＩＳミニドライバ５１０およびレイヤ５０４、５０２、５００のＮＤＩＳ経路を通る）か、を判定する。一実施形態では、ＮＩＣ  ５３は、送信元ＴＣＰポート番号および宛先ＴＣＰポート番号、送信元ＩＰアドレスおよび宛先ＩＰアドレス、ならびにプロトコルタイプに対してハッシュ関数を実行することによって、どちらの経路に到着データパケットを送るべきか判定する。ハッシュがオフロードされた接続パラメータと一致する場合（すなわち、ハッシュバケットチェーンが探索され、接続のすべてのタプルについて正確な一致が生じる場合）、チムニ８０８が使用される。ハッシュがハッシュインデックスと一致しない場合、ネットワークスタック５０２を通るオフロードされていない経路が使用される。キャッシュされた状態を更新する制御メッセージが、ホストによって処理される。これによって、ＮＩＣ  ５３は、ＩＣＭＰ、ＤＮＳ、およびＲＩＰメッセージなど、オフロードされた接続を除いて、どのような制御メッセージも処理する必要がなくなる。
【００７０】
先に述べたように、Ｗｉｎｄｏｗｓ（登録商標）または類似の階層化ネットワークモデルにおけるデータ伝送の基本単位は、データパケットである。Ｗｉｎｄｏｗｓ（登録商標）環境では、データパケットは、ＮＤＩＳパケットと呼ばれる。各パケットは、スタックの最上位（すなわちＩＳＯスタックのレイヤ５）から最低位のソフトウェアレイヤ（すなわちＩＳＯスタックのレイヤ２）まで移動する。したがって、パケットは、データの送信中およびデータの受信中にレイヤを通過するとき、各レベルにわたって共通のデータ構造を定義する。例として、図１０は、パケットがそれぞれのレイヤを通過して、イーサネット（登録商標）ＮＩＣとして９００で示されるＮＩＣまで下るときに、パケットによってたどられる経路を示している。上で述べたように、トランスポートドライバ９２８は、送信元アプリケーションからデータを受け取り、それを下位のプロトコルに準拠するパケット形式でパッケージ化し、その後、パッケージ化したパケットを、ＮＤＩＳインタフェース９２６を介してより下位のレベルのデバイスドライバ９１６に転送する。加えて、トランスポートプロトコルは、パケットに対して他の機能（例えばチェックサム計算など）を実行することができる。あるいは、図１０に示されるＩＰセキュリティ機能１０４４（例えば、暗号化および／またはメッセージダイジェスト計算）などの追加機能をパケットに対して実行する他の機能コンポーネントが、ネットワーク層またはデータリンク層に存在することができる。
【００７１】
一実施形態では、データパケット１０４２は、コンピューティングタスクをＮＩＣハードウェア９００などの周辺機器にオフロードする手段となる。例えば、図１０では、アプリケーションデータ１０４０は、ネットワークモデルの上位レイヤから、ＴＣＰ／ＩＰ  ９２８などの適切なトランスポートプロトコルドライバに渡される。ドライバは、データを適切なデータパケット１０４２に再パッケージ化する。その後、この特定のデータパケット１０４２に対してどのような追加機能が実行されようとも、それに応じて、パケット拡張と呼ばれる事前定義されたデータ構造をデータパケットに追加する機能コンポーネントが含まれる。以下でさらに詳細に説明されるように、パケット拡張の内容は、データパケットがＮＩＣ  ５３に到達したときに、１つのタスクまたは複数のタスクのどれを、データパケットに対して実行するか指示する。データパケット１０４２がネットワークドライバ９１６に到達したとき、ＮＩＣ  ５３によってどのタスクを実行するかを確認するために、このパケット拡張の内容が、ドライバ９１６によって問い合わされる。その後、ドライバ９１６は、パケット拡張の内容を介して要求された機能タスクが何であろうとも実行できるように、ＮＩＣ上でハードウェアを制御／操作する。
【００７２】
例えば、図１０では、データパケット１０４２は、ソフトウェアコンポーネント１０４４に渡され、ソフトウェアコンポーネント１０４４は、別途実装することができ、またはパケット拡張をパケット１０４２に付加するトランスポートプロトコルドライバ自身の一部として実装することができる。オフロードされる特定のタスクに応じて、データがパケット拡張内に含まれる。例えば、ＩＰセキュリティ機能が実装される場合、指定された暗号鍵に従ってＮＩＣ  ５３がデータパケットを暗号化すべきであることを示すデータが含まれるだろう。もちろん、ソフトウェアコンポーネント１０４４は、上で説明したような多くの機能のいずれか１つが、ネットワーク層に存在するソフトウェアコンポーネントによる代わりに、ハードウェアレベルで実行されるように、事前定義されたデータを付加することができる。デバイスドライバ９１６は、パケット拡張から情報を取り出し、その後、ＮＩＣ  ５３において指定されたタスクを起動する。
【００７３】
図１１は、データパケット１０４２の一般的な構造の一実施形態を示している。パケット１０４２は、使用されるネットワーク環境そのものに応じて、任意のフォーマットをとることができるが、Ｗｉｎｄｏｗｓ（登録商標）環境では、パケットは、ＮＤＩＳに従ってフォーマットされ、協同するデバイスドライバおよび協同するプロトコルドライバによって目的が定義されるフラグ、パケットに関連するＯｕｔ−ｏｆ−ｂａｎｄ  ｄａｔａ（ＯＯＢ）の格納のための領域、パケットの長さに関する情報、およびパケットのデータ内容に関するメモリ記憶場所を指示するポインタなどの情報を含む。
【００７４】
さらに、図１１は、タスクオフロードを識別するためにＮＤＩＳデータパケットに付加される追加のデータ構造フィールドである、パケット拡張１１５０を示している。説明されるように、宛先ＮＩＣにオフロードされる特定の１つのタスクの識別、または特定の複数のタスクの識別のために必要な情報を含むデータ構造を定義するのは、このパケット拡張１１５０である。好ましい実施形態では、タスクオフロードタイプ（例えば、チェックサム、暗号化／復号化など）毎に、事前定義されたデータフィールドが、パケット拡張１１５０内に含まれる。このデータフィールドは、（チェックサムなどの）特定の機能が実行されることを指示するだけの、１つの制御フラグの型または複数の制御フラグの型を容易に取ることができ、または、情報は、タスクをどのように実行すべきかをさらに定義するデータ構造を指示するポインタの型を取ることができる。
【００７５】
ＮＩＣ  ５３は、添付したパケットのみに適用するように、パケット拡張１１５０内のタスクオフロード制御フィールドを認識するように構成することができる。したがって、例えば、ＮＩＣ  ５３がチェックサム操作を実行することを示すフラグを特定のパケットが含む場合、ＮＩＣ  ５３は、添付したパケットのみにチェックサム操作を実行する。しかし、与えられたパケットにおいてそのようなフラグが存在しない場合、ＮＩＣ  ５３は、そのパケットに対してチェックサム操作を実行しない。あるいは、ＮＩＣ  ５３が別途命令されるまで、ＮＩＣはネットワーク上に送信されたこのパケットおよびすべての後続のパケットに対して、オフロードされたタスクを実行することを、パケット拡張１１５０内のタスクオフロード制御フィールドは指示できる。
【００７６】
パケット拡張１１５０は、どのタスクを実行するかを、受信機構のＮＩＣ機構に命令することができる。例えば、パケット拡張は、復号化、チェックサム操作、パケット分類、サービス妨害攻撃に対する防御としてのパケットフィルタリング、パケットの再構築、およびパケット拡張を実行するようにＮＩＣを構成できる他の任意の受信機能などの、ネットワークからパケットを受信したときに適切な一定の機能を、受信機構ＮＩＣが実行することを、ＮＩＣに命令することができる。もちろん、送信機構は、受信機構ＮＩＣのタスクオフロード機能を知らない可能性がある。受信機構ＮＩＣが要求された機能を実行できない場合、受信機構ＣＰＵが、代わりにその機能を果たすだろう。したがって、送信機構は、受信機構においてＮＩＣが特定のパケットに対して何を行うかについて、一部の制御を有することができる。
【００７７】
加えて、送信機構は、パケットを受信するためにＮＩＣ  ５３が機能するとき、ＮＩＣ  ５３を制御するために、パケット拡張を使用することもできる。例えば、ネットワーク上に送信される特定のパケットは、ＮＩＣ  ５３がパケットを受信したときに、ＮＩＣ  ５３がパケットの復号化を実行するという、ＮＩＣ  ５３への命令を含む、パケット拡張を含むことができる。この場合、前記命令はネットワークから受信したパケットに対して機能を実行するためのものであるので、前記命令はネットワーク上に送信されるパケットには適用されない。したがって、この場合、ネットワーク上に送信されるパケットのためのパケット拡張は、パケットを受信するときに、どの受信機能がＮＩＣ  ５３にオフロードされるかを制御するための機構としての機能を果たす。送信機構は、パケットを送信するときは常に、パケット毎にＮＩＣ  ５３の受信機能を制御する機会を有する。
【００７８】
図１１に示された例をさらに参照すると、パケット拡張１１５０は、ＮＩＣ（例えば、ＮＩＣ  ５３）にオフロードされた送信機能を制御する多くのデータフィールド１１５１から１１５３、およびＮＩＣ（例えば、ＮＩＣ  ５３または受信機構のＮＩＣ）にオフロードされた受信機能を制御する多くのデータフィールド１１５４から１１５８を含む。
【００７９】
例えば、パケット拡張１１５０は、ＮＩＣ  ５３がチェックサム操作を実行することを示すデータフィールド１１５１を含む。これは、送信ＮＩＣ  ５３自身が、付加されたパケットに対してチェックサム操作を実行することを、送信ＮＩＣ  ５３に指示する。
【００８０】
パケット拡張１１５０はまた、パケットデータのＳＳＬ暗号化もしくはパケットデータのＩＰＳｅｃ暗号化、および／またはメッセージダイジェストの計算に関連して実行されるようなセキュリティ機能を、ＮＩＣ  ５３が実行すべきであることを指示するために、セキュリティ機能データフィールド１１５２も含むことができる。このタイプのセキュリティタスクのため、フィールド１１５２は、データ構造（例えばデータ構造１１６０）を含むメモリ記憶場所を指示するポインタを好ましくは含み、同様に、そのデータ構造が、暗号化および／またはメッセージダイジェスト機能の実行に関する情報を含む。ある状況下では、関連するデータを有するメモリ記憶場所を指示するポインタを含むことは、パケット拡張自身の中に実際のデータを格納することに勝る利点を有する。
【００８１】
図１１を参照すると、チェックサムデータフィールド１１５４は、チェックサム計算が送信機構で実行されたすべての受信パケットについて、データがＮＩＣ  ５３へ行く途中で変更されていないことを確認するために、ＮＩＣ  ５３がチェックサム計算を実行することを指示する。後のチェックサムフィールドによってはっきりと違反されない限り、このチェックサムフィールド１１５４は、無期限に、または与えられた期間の間、すべてのパケットのためのチェックサム受信機能を制御することができる。
【００８２】
パケット拡張は、パケットデータのＳＳＬ復号化もしくはパケットデータのＩＰＳｃｃ復号化、および／またはメッセージダイジェストの計算に関連して実行されるようなセキュリティ機能を、パケットが受信されたときに、ＮＩＣ  ５３が実行することを指示する、セキュリティフラグ１１５５も含むことができる。このタイプのセキュリティタスクのため、フィールド１１５５は、データ構造（例えばデータ構造１１６０）を含むメモリ記憶場所を指示するポインタを好ましくは含み、同様に、そのデータ構造が、暗号化および／またはメッセージダイジェスト機能の実行に関する情報を含む。
【００８３】
パケット拡張はまた、受信したパケットを大量データ(bulk data)に構築するようＮＩＣ  ５３に命令するアセンブリデータフィールド１１５６、上述したように、サービス品質のために各パケットを分類するようＮＩＣ  ５３に命令する分類フィールド１１５７、
および上述したように、ＤＯＳ攻撃の特徴について到着パケットをフィルタリングするためのＤｅｎｉａｌ  ｏｆ  Ｓｅｒｖｉｃｅ（ＤＯＳ）攻撃フィルタフィールド１１５８も含むことができる。パケット拡張１１５０はまた、受信機構ＮＩＣが、攻撃されたパケットに対して実行することが意図された、フラグ１１５４〜１１５８に類似した受信機能データフィールドを含むことができる。
【００８４】
一実施形態では、パケット拡張１１５０内に含まれる情報は、パケット１１４２が送信された特定のデバイスドライバによって問い合わされる。例示的な実施形態において説明されるＷｉｎｄｏｗｓ（登録商標）環境では、このタイプの機能は、適切なＮＤＩＳファンクション呼び出しを行うことによって、好んで実行される。例えば、パケットのためのパケット拡張１１５０のメモリ記憶場所を指示するポインタを返す、事前定義されたＮＤＩＳ機能への呼び出しを実行することができる。その後、デバイスドライバソフトウェアは、どのタスクを実行すべきかを識別することができ、オフロードされたタスクに応じて、適切な方法で、ドライバの対応するＮＩＣハードウェアを実行／操作することができる。
【００８５】
コンピュータプロセッサからハードウェア周辺機器にコンピューティングタスクをオフロードするために実際のデータパケットを利用することは、多くの理由で有利である。例えば、トランスポートドライバは、パケット毎に周辺機器の機能を利用することができる。これによって、タスクを動的にダウンロードすることが可能になり、周辺機器の機能を必要に応じて使用することができる。したがって、コンピュータシステムについての処理オーバヘッドが特定の時点において低い場合、あるタスクを、従来の方式によりコンピュータプロセッサ上で実行するほうが望ましいことがある。あるいは、他のコンピューティングタスクによってＣＰＵに重い負荷がかかっている場合、ＣＰＵは、必要なパケット拡張をデータパケットに付加するだけで、周辺機器にタスクをオフロードすることができる。
【００８６】
別の利点は、単一のパケットによって複数のタスクをオフロードし、実質的に多くの操作を一度に「バッチ処理」する能力である。例えば、コンピュータプロセッサが、チェックサム操作または暗号化操作を実行する場合、データフィールド全体をメモリ記憶場所にロードしなければならず、その後で、操作を、すなわち、チェックサムの計算またはパケットデータの暗号化を完了することができる。さらに、階層化ネットワークモデルのため、一度にただ１つの操作しか実行できず、その結果、複数回にわたってデータをメモリにコピーする必要がある。しかし、パケット単位の手法は、１つのパケットで複数のタスクをオフロードすることを可能にする。したがって、ハードウェア周辺機器は、ハードウェアの能力に応じて、データに対して単一パスで２つ以上の操作を実行することができ、それによって、コンピュータシステムのスループットおよび効率を大幅に高めることができる。
【００８７】
上記の方式は、特定のＮＩＣにオフロードされるタスクを指定する能力に関連して特に役立つが、他の方法では、パケット単位の情報転送も使用できることが理解されよう。例えば、特定のＮＩＣが所定の時間にパケットの配信をスケジュールすることが可能である場合、ＮＩＣハードウェアによってパケットをどのように、および／または、いつ送信すべきかを識別する情報を渡すために、パケット拡張データ構造を使用することができる。
【００８８】
一実施形態では、トランスポートプロトコルドライバが、特定のタスクをＮＩＣにオフロードするために、パケット拡張をデータパケットに付加する前に、２つの追加機能が最初に実行される。様々な処理能力を各々が有する、多くの異なるタイプのハードウェア周辺機器が存在する場合において、本開示の実施形態は、トランスポートドライバが、コンピュータシステムに接続された周辺機器のタスクオフロード機能について最初に問い合わせることができる手段を望ましくは提供する。これらの機能が確認されると、その後、トランスポートプロトコルドライバは、関心のあるこれらのタスクを設定し、または有効にすることができる。有効にされると、以降は、上述した方法で、パケット単位に、指定されたタスクを利用することができる。
【００８９】
リモートアクセスプロトコルのためのハードウェアアクセラレーション
言及したように、リモートアクセスおよびターミナルサービスは一般に、リモートデスクトッププロトコル（ＲＤＰ）などのプロトコルを使用するデスクトップ仮想化を必要とする。本開示はＲＤＰプロトコルに関して説明されるが、開示される原理は、仮想ネットワークコンピューティング（ＶＮＣ）およびＣｉｔｒｉｘ（登録商標）  ＸｅｎＡｐｐ（登録商標）など、リモートアクセスサービスを提供する任意のシステムに容易に適用できることを当業者は理解されよう。
【００９０】
ＲＤＰなどのプロトコルは、グラフィック表示情報をリモートコンピュータからユーザに転送することによって、また入力をユーザからリモートコンピュータに転送し、リモートコンピュータにおいて入力を局所的に投入できるようにすることによって、リモートコンピュータシステムとのユーザ対話を円滑化するように設計される。このプロトコルはまた、ユーザコンピュータ上のコンポーネントとリモートコンピュータ上で動作するコンポーネントの間で専用の通信を行なうことを可能にする、拡張可能なトランスポート機構を提供する。そのようなプロトコルは、仮想デスクトップを提示し、一般にグラフィックスを扱い、ＵＳＢ、プリンタ、キーボード、およびマウスなどのデバイストラフィックを処理する。ターミナルサーバは、一般に複数のリモートクライアントセッションを提供する。ターミナルサーバからのグラフィックスデータは、グラフィックスプリミティブ形式で符号化され、暗号化されるか、またはサーバでレンダリングされる必要があり、結果のビットマップは、圧縮および暗号化され、クライアントに伝送される必要がある。
【００９１】
符号化操作、レンダリング操作、および暗号化操作は、本来はきわめてコンピュータ集約型であり、一般に高いＣＰＵ使用率を必要とする。豊富なデスクトップ仮想化技術を提供するため、対応するグラフィックス忠実度は、豊富であるべきである。符号を最適化するよりも、ＲＤＰ処理中の必要なときにレンダリングタスクおよび／または圧縮タスクを実行できる追加のハードウェアリソースを利用することによって、レンダリングおよび暗号化に関連するホストＣＰＵサイクルおよびネットワーク使用率を低減することができる。加えて、データが伝送される前に、ＣＰＵ集約型リモートデスクトップ操作をネットワークプロセッサまたは他の周辺機器にオフロードすることによって、ホストＣＰＵ処理を低減ことができる。上述したように、チムニオフロードとも呼ばれるタスクオフロードは、チェックサム、大きな送信セグメンテーション、ＩＰｓｅｃ、およびＴＣＢ状態処理などのＴＣＰ／ＩＰ処理を、インテリジェントネットワークインタフェースにオフロードするために使用することができる。したがって、上で説明されたチムニオフロードの原理を利用して、ＲＤＰなどのプロトコルを使用するリモートアクセスサービスの提供に関連するタスクの一部または全部を扱うほうが有利である。
【００９２】
図１２は、リモートデスクトップ仮想化を提供するための例示的アーキテクチャを示している。リモートデスクトッププロセスは一般に、リモートデスクトップデータパケットを送信および受信するためにトランスポート層インタフェース（ＴＬＩ）を利用する、一般にはＴＣＰである、トランスポートプロバイダ上に積み重ねられる。例えば、１つまたは複数のアプリケーション１２００は、グラフィックスＡＰＩおよび媒体ＡＰＩを呼び出すことができ、それを受けて、グラフィックスＡＰＩおよび媒体ＡＰＩは、リモートアクセス処理スタック１２１０によってさらに処理されるグラフィックス出力を生成する。その後、ネットワーク移送ドライバ１２２０が、データパケットの伝送を処理することができる。
【００９３】
図１３は、リモートデスクトップ処理機能のさらなる例示的な図を提供する。１つまたは複数のアプリケーションは、サーバ上で動作し、クライアントディスプレイに表示するためのグラフィックスを生成することができる。例えば、アプリケーション１  １３１０およびアプリケーション２  １３１２は、グラフィックススタック１３１８によって処理されるグラフィックスを生成することができる。グラフィックススタック１３１８は、グラフィカルオブジェクトを表現し、それらを出力デバイスに伝送することを担う、様々なグラフィックスコンポーネントを含むことができる。このようなコンポーネント例は、グラフィックスデバイスインタフェース（ＧＤＩ）１３１４およびＤｉｒｅｃｔＸ（ＤＸ）１３１６を含む。
【００９４】
このようなアプリケーションのグラフィックス出力は、リモートアクセスプロトコルスタック１３２０によって捕捉され、コマンド命令１３２２およびビットマップ１３２４としてさらに処理される。コマンド命令または描画命令は、グラフィック画像を生成するのに必要な操作を符号化するため、または特定のキャッシュを操作するために使用される。プライマリ描画命令は一般に、描画操作を符号化するために使用される。各プライマリ命令は、フィールド圧縮アルゴリズムが適用される１組のフィールドに体系化することができる。これらのアルゴリズムは、命令が最後に送られて以降、フィールドが変更されていない場合は、そのフィールドの送信を排除するように、またあるフィールドタイプがより小さなサイズのデータによって表すことができる場合は、そのフィールドタイプのためのフィールド符号化のサイズを削減するように設計することができる。プライマリ命令例は、長方形および線などのグラフィックオブジェクトを描画すること、ならびにテキストの断片を表示することを含む。セカンダリ描画命令は、キャッシュを管理するために使用することができる。
【００９５】
ビットマップ処理１３２４は、キャッシング１３２６および圧縮１３２８をさらに含む。キャッシングプロセスは、タイリング機能１３３０およびハッシュ計算機能１３３２をさらに含むことができる。リモートアクセスプロトコルは、ビットマップ、カラーテーブル、および文字などの描画プリミティブを格納するために、キャッシュを使用することができる。キャッシング技法の使用は、複数の描画操作で使用されるアイテムをサーバからクライアントに送信するのが一度だけであることを保証することによって、データトラフィックを低減することができる。
【００９６】
ビットマップ処理１３２４およびコマンド命令処理１３２２の出力は、符号化された命令１３３４として組み合わせることができる。リモートアクセスプロトコルは、データを圧縮するために大量圧縮１３３６を使用することができる。
【００９７】
データのための大量圧縮を利用することに加えて、リモートアクセスプロトコルは、サーバからクライアントに送信されるビットマップデータの圧縮を実行するために、ランレングス符号化（ＲＬＥ）規則の変形を使用することもできる。この時点で、データをフレーム化し（１３３８）、データを暗号化し（１３４０）、ネットワーク（１３４２）を介して、データを伝送することができる。
【００９８】
上述したように、ＴＣＰなどの機能は、上述したチムニオフロードの技法を利用して、周辺機器にオフロードすることができる。上述したように、ＲＤＰなどのプロトコルに関連するグラフィックス画像のリモート処理は、更新されたビットマップ画像をサーバからクライアントに継続的に送信することによって達成され、これはコンピュータ集約的なタスクである。したがって、本開示は、上述のリモートアクセス処理タスクを包含するように、チムニオフロードの概念を拡張する。様々な実施形態では、リモートデスクトップ仮想化に関連する１つまたは複数の処理タスクは、チムニにオフロードすることができる。一部の実施形態では、リモートアクセス処理タスクのサブセットをオフロードすることができる。例えば、一部の実施形態では、ビットマップ圧縮１３２８、キャッシング１３２６、および大量圧縮１３３６の１つまたは複数は、開示したオフロードの原理を使用して処理するために、ＮＩＣなどの周辺機器にオフロードすることができる。他の実施形態では、リモートアクセス処理の大部分または全部を、例えば、図１３において説明したタスクを、周辺機器にオフロードすることができ、ホストプロセッサは、制御機能および管理機能のみを保持する。
【００９９】
図１４および図１５は、処理１４００、処理１４０２、処理１４０４、処理１４０６、処理１４０８、処理１４１０、処理１４１２、処理１４１４、および処理１４１６を含む、ターミナルサーバまたは仮想マシンへのリモートアクセスを提供するための例示的な操作手順を示しており、リモートアクセスデータユニットを送信および受信するために、トランスポート層インタフェースが使用される。図１４を参照すると、処理１４００は、操作手順を開始し、処理１４０２は、周辺機器が１つまたは複数の指定されたリモートアクセス処理タスクを実行するためのタスクオフロード機能を含むことを判定することを示している。処理１４０４は、後続のデータユニットと共に使用されるコンテキスト情報を含む、周辺機器が１つまたは複数の処理タスクを実行するという指示を、周辺機器に送ることを示している。処理１４０６は、１つまたは複数のリモートアクセス処理タスクを、周辺機器に実行させることを示している。
【０１００】
処理１４０８は、一実施形態では、リモートアクセスがリモートデスクトッププロトコル（ＲＤＰ）を使用して実行されることを示している。処理１４１０は、処理タスクが部分的なＲＤＰ処理を提供できることを示している。あるいは、処理１４１２は、処理タスクが完全なＲＤＰ処理を提供することを示している。処理１４１４は、例示的な処理タスクはＲＤＰビットマップ圧縮を含むことを示している。処理１４１６は、例示的な処理タスクはＲＤＰ大量圧縮を含むことを示している。
【０１０１】
図１５に進むと、処理１５０２は、処理タスクがＲＤＰキャッシングを含むことを示している。処理１５０４は、処理タスクが、コンピュータシステムの進行中の要求に応じて、選択的に周辺機器にオフロードされることを示している。処理１５０４は、タスクオフロードバッファ内の少なくとも１つのフラグインジケータを設定することによって、タスクオフロード機能を使用可能にすることを示している。一実施形態では、各周辺機器ドライバ（例えば図９を参照）は、そのデバイスドライバおよびそれに対応する周辺機器のためのタスクオフロード機能を各々が含む、事前定義されたタスクオフロードバッファロケーションを、それに関連付けておくことができる。タスクオフロードバッファは、周辺機器およびそのデバイスドライバによってサポートされる特定のタスクを識別することができ、サポートされる個々のタスクに固有の任意の情報も含む。一実施形態では、デバイスドライバのタスクオフロードバッファの内容は、ＮＤＩＳファンクション呼び出しによって検索することができる。処理１５０８は、一実施形態では、周辺機器がネットワークインタフェースカード（ＮＩＣ）であることを示している。
【０１０２】
処理１５１０は、データパケットを、階層型ネットワークモデルを介して転送できることを示している。処理１５１２は、データパケットはネットワークデータおよびパケット拡張データを含むことができることを示している。処理１５１４は、データパケットは、周辺機器が処理タスクのバッチを実行することを指示する。処理１５１６は、パケット拡張データが、少なくとも１つの処理タスクが周辺機器によって実行されることを示す少なくとも１つのデータフィールドを含むことを示している。
【０１０３】
図１６は、処理１６００、処理１６０２、および処理１６０４を含む、リモートアクセス処理タスクを周辺機器にオフロードするための例示的な操作手順を示している。図１６を参照すると、処理１６００は、操作手順を開始し、処理１６０２は、デバイスがリモートアクセスプロトコル処理タスクを実行することを指示するデータパケットを、周辺機器に送ることを示している。処理１６０４は、処理タスクを前記プロセッサに実行させることを示している。
【０１０４】
上記で言及した態様のいずれも、方法、システム、コンピュータ可読媒体、または任意のタイプの製造物で実施することができる。例えば、図１７によれば、コンピュータ可読媒体は、リモートアクセス処理タスクを周辺機器にオフロードためのコンピュータ実行可能命令を格納することができる。このような媒体は、周辺機器がタスクオフロード機能を含むことを判定するための第１の命令サブセット１７１０、周辺機器が前記処理タスクの１つを実行するという指示を周辺機器に送るための第２の命令サブセット１７１２、および１つまたは複数のリモートアクセス処理タスクを周辺機器に実行させるための第３の命令サブセット１７１４を含むことができる。本明細書で開示される他の様々な態様を表現するために追加的な命令セットが使用できること、また現在開示された３つの命令サブセットは、本開示によれば細部において異なり得ることが当業者には理解されよう。
【０１０５】
例えば、命令には、リモートデスクトッププロトコル（ＲＤＰ）を使用して実行される前記リモートアクセスのための命令１７１６をさらに含むことができる。命令には、キャッシングおよび大量圧縮のための命令１７１８、多重化／フレーム化、暗号化、およびコマンド命令符号化のための命令１７２０、ならびにデータパケットを、階層型ネットワークモデルを介して転送するための命令１７２２をさらに含むことができる。
【０１０６】
上述したように、本開示の主題の態様は、プログラムされたコンピュータ上で実行することができる。図１および以下の説明は、これらの態様を実行できる適切なコンピューティング環境の簡単な説明を提供することを意図している。図１のコンピュータシステムが、一部の実施形態において、図２〜図４のサーバおよびクライアントを達成できることを当業者は理解できよう。これらの例示的な実施形態では、サーバおよびクライアントは、図１で説明されたコンポーネントの一部または全部を含むことができ、ある実施形態では、サーバおよびクライアントは各々、本開示の特定の態様を実例化するように構成された回路構成を含むことができる。
【０１０７】
本開示において使用される回路構成という用語は、専用ハードウェアコンポーネントを含むことができる。同一の実施形態または他の実施形態では、回路構成は、ファームウェアまたはスイッチによって機能を実行するように構成されたマイクロプロセッサを含むことができる。同一の実施形態または他の例示的な実施形態では、回路構成は、機能を実行するように動作可能なロジックを具現化するソフトウェア命令がメモリに、例えば、ＲＡＭおよび／または仮想メモリにロードされたときに構成することができる、１つまたは複数の汎用処理ユニットおよび／またはマルチコア処理ユニットなどを含むことができる。回路がハードウェアとソフトウェアの組み合わせを含む例示的な実施形態では、実装者は、ロジックを具現化するソースコードを書くことができ、ソースコードは、汎用処理ユニットによって処理できる機械可読コードにコンパイルすることができる。
【０１０８】
図１は、本開示の態様と共に構成されるコンピューティングシステムの例を示している。コンピューティングシステムは、コンピュータ２０など含むことができ、コンピュータ２０は、処理ユニット２１、システムメモリ２２、およびシステムメモリを含む様々なシステムコンポーネントを処理ユニット２１に結合するシステムバス２３を含む。システムバス２３は、様々なバスアーキテクチャのいずれかを使用する、メモリバスまたはメモリコントローラ、周辺機器のバス、およびローカルバスを含む、いくつかのタイプのバス構造のいずれかとすることができる。システムメモリは、リードオンリメモリ（ＲＯＭ）２４およびランダムアクセスメモリ（ＲＡＭ）２５を含む。基本入出力システム（ＢＩＯＳ）２６は、スタートアップ中などにコンピュータ２０内の要素間で情報を転送する助けとなる基本ルーチンを含み、ＲＯＭ  ２４内に格納される。コンピュータ２０は、図示されていないハードディスクから読み取り、ハードディスクに書き込むためのハードディスクドライブ２７、リムーバブル磁気ディスク２９から読み取り、または磁気ディスク２９に書き込むための磁気ディスクドライブ２８、およびＣＤ  ＲＯＭまたは他の光学媒体などのリムーバブル光ディスク３１から読み取り、または光ディスク３１に書き込むための光ディスクドライブ３０をさらに含むことができる。一部の例示的な実施形態では、本開示の態様を具現するコンピュータ実行可能命令は、ＲＯＭ  ２４、ハードディスク（図示されず）、ＲＡＭ  ２５、リムーバブル磁気ディスク２９、光ディスク３１、および／または処理ユニット２１のキャッシュ内に格納することができる。ハードディスクドライブ２７、磁気ディスクドライブ２８、および光ディスクドライブ３０は、それぞれハードディスクドライブインタフェース３２、磁気ディスクドライブインタフェース３３、および光ドライブインタフェース３４によってシステムバス２３に接続される。ドライブおよび関連するコンピュータ可読媒体は、コンピュータ可読命令、データ構造、プログラムモジュール、および他のデータの不揮発性ストレージをコンピュータ２０に提供する。本明細書で説明した環境は、ハードディスク、リムーバブル磁気ディスク２９、およびリムーバブル光ディスク３１を利用するが、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌイカートリッジ、ランダムアクセスメモリ（ＲＡＭ）、およびリードオンリメモリ（ＲＯＭ）など、コンピュータによってアクセス可能なデータを格納できる他のタイプのコンピュータ可読媒体も、動作環境において使用できることを当業者であれば理解されたい。
【０１０９】
オペレーティングシステム３５、１つまたは複数のアプリケーションプログラム３６、他のプログラムモジュール３７、およびプログラムデータ３８を含む、多くのプログラムモジュールは、ハードディスク、磁気ディスク２９、光ディスク３１、ＲＯＭ  ２４、またはＲＡＭ  ２５上に格納することができる。ユーザは、キーボード４０およびポインティングデバイス４２などの入力デバイスを介して、コマンドおよび情報をコンピュータ２０に入力することができる。他の入力デバイス（図示されず）は、マイク、ジョイスティック、ゲームパッド、衛星用アンテナ、またはスキャナなどを含むことができる。上記および他の入力デバイスは、システムバスに結合されるシリアルポートインタフェース４６を介して、しばしば処理ユニット２１に接続されるが、パラレルポート、ゲームポート、またはユニバーサルシリアルバス（ＵＳＢ）などの他のインタフェースによって接続することもできる。ディスプレイ４７または他のタイプの表示装置も、ビデオアダプタ４８などのインタフェースを介して、システムバス２３に接続することができる。ディスプレイ４７に加えて、コンピュータは、スピーカおよびプリンタなどの他の周辺出力デバイス（図示されず）も一般に含む。図１のシステムは、ホストアダプタ５５、小型コンピュータシステムインタフェース（ＳＣＳＩ）バス５６、およびＳＣＳＩバス５６に接続される外部記憶デバイス６２も含む。
【０１１０】
コンピュータ２０は、リモートコンピュータ４９など、１つまたは複数のリモートコンピュータへの論理接続を使用して、ネットワーク環境において動作することができる。リモートコンピュータ４９は、別のコンピュータ、サーバ、ルータ、ネットワークＰＣ、ピアデバイスまたは他の共通ネットワークノード、仮想マシンとすることができ、図１にはメモリ記憶デバイス５０しか示されていないが、コンピュータ２０に関連して上述した要素の多くまたはすべてを一般に含むことができる。図１に示された論理接続は、ローカルエリアネットワーク（ＬＡＮ）５１およびワイドエリアネットワーク（ＷＡＮ）５２を含むことができる。このようなネットワーク環境は、オフィス、企業規模のコンピュータネットワーク、イントラネット、およびインターネットにおいて一般的である。
【０１１１】
ＬＡＮネットワーク環境において使用される場合、コンピュータ２０は、ネットワークインタフェースまたはアダプタ５３を介してＬＡＮ  ５１に接続することができる。ＷＡＮネットワーク環境において使用される場合、コンピュータ２０は、インターネットなどのワイドエリアネットワーク５２上で通信を確立するためのモデム５４または他の手段を一般に含むことができる。モデム５４は、内蔵または外付けとすることができ、シリアルポートインタフェース４６を介してシステムバス２３に接続することができる。ネットワーク環境では、コンピュータ２０に関連して示されたプログラムモジュールまたはそれらの一部は、リモートメモリ記憶デバイス内に格納することができる。示されるネットワーク接続は例であり、コンピュータ間の通信リンクを確立する他の手段が使用できることが理解されよう。さらに、本開示の主題についての多くの実施形態は、コンピュータシステムに非常によく適合すると想定されるが、本文書において、本開示をこのような実施形態に限定することは意図していない。
【０１１２】
上述の詳細な説明は、例および／または動作図によって、システムおよび／またはプロセスの様々な実施形態について説明した。このようなブロック図および／または例が、１つまたは複数の機能および／または動作を含む場合、このようなブロック図または例の中の各機能および／または動作は、幅広いハードウェア、ソフトウェア、ファームウェア、または実質的にそれらの任意の組み合わせによって、個別におよび／または一括して実装できることが当業者には理解されよう。
【０１１３】
本明細書で説明された主題についての特定の態様および実施形態が示され、説明されたが、本明細書の教示に基づいて、変更および修正を施すことができ、したがって、本明細書で説明された主題の真の主旨および範囲内にあるかのように、添付の特許請求の範囲は、このような変更および修正のすべてを包含することが当業者には明らかであろう。
【図１】
0005442755.tif 000002
【図１ａ】
0005442755.tif 000003
【図２】
0005442755.tif 000004
【図３】
0005442755.tif 000005
【図４】
0005442755.tif 000006
【図５】
0005442755.tif 000007
【図６】
0005442755.tif 000008
【図７】
0005442755.tif 000009
【図８】
0005442755.tif 000010
【図９】
0005442755.tif 000011
【図１０】
0005442755.tif 000012
【図１１】
0005442755.tif 000013
【図１２】
0005442755.tif 000014
【図１３】
0005442755.tif 000015
【図１４】
0005442755.tif 000016
【図１５】
0005442755.tif 000017
【図１６】
0005442755.tif 000018
【図１７】
0005442755.tif 000019