(58)【調査した分野】(Int.Cl.,DB名)
前記システムコール管理モジュールはさらに、前記命令は前記クライアントコンピューティングデバイスによる実行を必要としないという判断に応じて、システムコールを必要とすると判断された前記命令が前記サーバによる実行を必要とするか否かを判断し、
前記コード実行モジュールはさらに、前記命令は前記サーバによる実行を必要とするという判断に応じて、前記システムコールを必要とすると判断された前記命令を実行する
請求項1に記載のサーバ。
前記システムコール管理モジュールはさらに、前記命令は前記クライアントコンピューティングデバイスによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された前記命令が、前記サーバによる実行を必要とするか否かを判断し、
前記コード実行モジュールはさらに、前記命令が前記サーバによる実行を必要とするという判断に応じて、前記システムコールを必要とすると判断された前記命令を実行する
請求項1に記載のサーバ。
前記プログラムコードをロードすることは、前記サーバの複数のメモリアドレスと前記クライアントコンピューティングデバイスの複数のメモリアドレスとの間で複数のアドレスを変換するアドレス/メモリトランスレーションテーブルを初期化することを含む
請求項1から3のいずれか一項に記載のサーバ。
前記システムコールの実行を必要とする前記命令を実行することは、前記システムコールに対応付けられたアドレスを、前記サーバのメモリアドレスと、前記クライアントコンピューティングデバイスのメモリアドレスとの間で変換することを含む
請求項1から3のいずれか一項に記載のサーバ。
前記システムコールの実行を必要とする前記命令を実行することは、前記システムコールを必要とする前記命令の前記実行に基づきトランスレーションテーブルを更新することを含む
請求項1から3のいずれか一項に記載のサーバ。
前記命令が前記クライアントコンピューティングデバイスによる実行を必要としないと判断されたことに応じて、システムコールを必要とすると判断された前記命令が前記サーバによる実行を必要とするか否かを前記サーバによって判断する段階と、
前記命令が前記サーバによる実行を必要とするという判断に応じて、前記システムコールを必要とすると判断された前記命令を前記サーバによって実行する段階と
をさらに備える請求項8に記載の方法。
前記命令が前記クライアントコンピューティングデバイスによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された前記命令が前記サーバによる実行を必要とするか否かを前記サーバによって判断する段階と、
前記命令が前記サーバによる実行を必要とするという判断に応じて、前記システムコールを必要とすると判断された前記命令を前記サーバによって実行する段階と
をさらに備える請求項8に記載の方法。
前記プログラムコードをロードする段階は、前記サーバの複数のメモリアドレスと前記クライアントコンピューティングデバイスの複数のメモリアドレスとの間で複数のアドレスを変換するアドレス/メモリトランスレーションテーブルを初期化する段階を有する
請求項8から10のいずれか一項に記載の方法。
前記システムコールの実行を必要とする前記命令の実行は、前記システムコールに対応付けられているアドレスを、前記サーバのメモリアドレスと、前記クライアントコンピューティングデバイスのメモリアドレスとの間で変換することを含む
請求項8から10のいずれか一項に記載の方法。
前記システムコールの実行を必要とする前記命令の実行は、前記システムコールを必要とする前記命令の前記実行に基づいてトランスレーションテーブルを更新することを含む
請求項8から10のいずれか一項に記載の方法。
受信した、システムコールを必要とすると判断された前記命令がアドレス/メモリ変換を必要とするか否かを前記クライアントコンピューティングデバイスによって判断する段階と、
前記システムコールがアドレス/メモリ変換を必要とするという判断に応じて、前記サーバのメモリアドレスと前記クライアントコンピューティングデバイスのメモリアドレスとの間において、前記システムコールのアドレスを前記クライアントコンピューティングデバイスによって変換する段階と
をさらに備える請求項18に記載の方法。
前記システムコールがアドレス/メモリ変換を必要とするという判断に応じて、前記クライアントコンピューティングデバイスのローカルコンテキストにおいて前記クライアントコンピューティングデバイスによってメモリ割り当てを行う段階と、
前記メモリ割り当てに基づいてトランスレーションテーブルを、前記クライアントコンピューティングデバイスによって更新する段階と
をさらに備える請求項19に記載の方法。
【発明を実施するための形態】
【0004】
本開示の概念はさまざまな点で変形および変更し得るものであるが、本開示の具体的な実施形態は図面において一例として図示しており本明細書において詳細に説明する。しかし、本開示の概念を開示した具体的な形態に限定する意図はなく、それとは逆に、本開示および添付した請求項に一致する全ての変形例、均等例、および変更例を含むことを意図すると理解されたい。
【0005】
本明細書において「一実施形態」、「実施形態」、「実施形態例」等と言及する場合、説明している実施形態は特定の特徴、構造または特性を含み得るが、全ての実施形態が必ずしもその特定の特徴、構造または特性を含むものではないことを意味する。さらに、そのような表現は、同じ実施形態を必ずしも意味するものではない。さらに、特定の特徴、構造または特性を一の実施形態に関連付けて説明する場合、明確にそう記載されていようといまいと、このような特徴、構造または特性を複数の他の実施形態と関連付けて実施することは当業者の知るところであると考えられる。また、「A、BおよびCのうち少なくとも1つ」という表現においてリストに含まれる項目は、(A)、(B)、(C)、(AおよびB)、(BおよびC)または(A、BおよびC)を意味し得ると考えられたい。同様に、「A、BまたはCのうち少なくとも1つ」という表現においてリストに含まれる項目は、(A)、(B)、(C)、(AおよびB)、(BおよびC)または(A、BおよびC)を意味し得る。
【0006】
開示された実施形態は、一部のケースにおいて、ハードウェア、ファームウェア、ソフトウェアまたはこれらの任意の組み合わせで実施されるとしてよい。開示された実施形態はさらに、1または複数の一時的または非一時的機械可読(例えば、コンピュータ可読)記憶媒体で担持または格納する命令として実施されるとしてよい。当該命令は、1または複数のプロセッサによって読み出されて実行されるとしてよい。機械可読記憶媒体は、任意のストレージデバイス、メカニズム、または、機械による読み出しが可能な形式で情報を格納または送信するための他の物理的構造(例えば、揮発性または不揮発性のメモリ、メディアディスク、または、その他のメディアデバイス)として具現化されるとしてよい。
【0007】
図面では、一部の構造上または方法上の特徴を具体的な配置および/または順序で図示する場合がある。しかし、そのような具体的な配置および/または順序は要件ではないと考えられたい。逆に、一部の実施形態では、そのような特徴は、一例として挙げた図面に図示したものとは別の方法および/または順序で配置されるとしてよい。さらに、特定の図面に所与の構造上または方法上の特徴を含むからといって、そのような特徴が全ての実施形態で必要となることを意味するわけではなく、一部の実施形態においては、含まれない場合もあり、または、他の特徴と組み合わせられる場合もあるとしてよい。
【0008】
ここで
図1を参照すると、プログラムコードの実行をオフロードするためのシステム100は、クライアントコンピューティングデバイス102、ネットワーク104およびサーバ106を備える。利用について、より詳細に後述するが、クライアントコンピューティングデバイス102は、プログラムコードのオフロード実行のために、サーバ106にプログラムコード(例えば、アプリケーション)を送信するよう構成されている。サーバ106は、クライアントコンピューティングデバイス102が実行するべきシステムコールを必要とするプログラムコード命令を発見すると、当該命令を実行のためにクライアントコンピューティングデバイス102に送信する。場合によっては、クライアントコンピューティングデバイス102およびサーバ106の両方がシステムコール命令を実行するとしてよい。
【0009】
クライアントコンピューティングデバイス102は、プログラムコードを実行し、ネットワーク104を介してサーバ106と通信し、本明細書で説明する機能を実行することが可能な任意の種類のコンピューティングデバイスとして具現化されるとしてよい。例えば、クライアントコンピューティングデバイス102は、携帯電話、スマートフォン、タブレットコンピュータ、ネットブック、ノートブック、ウルトラブック(商標)、ラップトップコンピュータ、携帯情報端末(PDA)、モバイルインターネットデバイス、デスクトップコンピュータ、ハイブリッドデバイスおよび/または任意のその他のコンピューティング/通信デバイスとして具現化されるとしてよい。
図1に図示しているように、一例となるクライアントコンピューティングデバイス102は、プロセッサ110、入出力(I/O)サブシステム112、メモリ114、データストレージ116、通信回路118および1または複数の周辺機器120を有する。言うまでもなく、他の実施形態において、クライアントコンピューティングデバイス102は、通常のコンピューティングデバイスに通常含まれるコンポーネント(例えば、さまざまな入出力デバイス)等の他のコンポーネントを含むとしてもよいし、またはコンポーネントが追加されるとしてもよい。また、一部の実施形態において、例示したコンポーネントのうち1または複数は、他のコンポーネントに組み込まれるとしてもよいし、または、他のコンポーネントの一部を成すとしてもよい。例えば、メモリ114またはその一部は、一部の実施形態において、プロセッサ110に組み込まれるとしてよい。
【0010】
プロセッサ110は、本明細書に説明する機能を実行することが可能な任意の種類のプロセッサとして具現化されるとしてよい。例えば、プロセッサは、1または複数の単一コアプロセッサまたはマルチコアプロセッサ、デジタルシグナルプロセッサ、マイクロコントローラまたはその他のプロセッサ、あるいは、処理/制御回路として具現化されるとしてよい。同様に、メモリ114は、本明細書で説明する機能を実行可能な任意の種類の揮発性または不揮発性のメモリ、または、データストレージとして具現化されるとしてよい。動作については、メモリ114は、クライアントコンピューティングデバイス102の動作時に利用されるさまざまなデータおよびソフトウェア、例えば、オペレーティングシステム、アプリケーション、プログラム、ライブラリおよびドライバを格納しているとしてよい。メモリ114は、I/Oサブシステム112を介してプロセッサ110に通信可能に結合されている、I/Oサブシステム112は、プロセッサ110、メモリ114およびクライアントコンピューティングデバイス102の他のコンポーネントとの間での入出力処理を円滑化するための回路および/またはコンポーネントとして具現化されるとしてよい。例えば、I/Oサブシステム112は、メモリコントローラハブ、入出力制御ハブ、ファームウェアデバイス、通信リンク(つまり、ポイントツーポイントリンク、バスリンク、ワイヤ、ケーブル、光ガイド、プリント配線基板の配線等)および/または入出力処理を円滑化するための他のコンポーネントおよびサブシステムとして具現化されるとしてもよいし、これらを含むとしてもよい。一部の実施形態において、I/Oサブシステム112は、システムオンチップ(SoC)の一部を成すとしてよく、プロセッサ110、メモリ114およびクライアントコンピューティングデバイス102の他のコンポーネントと共に、一の集積回路チップに組み込まれるとしてよい。
【0011】
データストレージ116は、データを短期または長期にわたって格納するよう構成された任意の種類の一または複数のデバイスとして具現化されるとしてよい。例えば、メモリデバイスおよびメモリ回路、メモリカード、ハードディスクドライブ、ソリッドステートドライブ、または、その他のデータストレージデバイス等であってよい。
図1に示すように、データストレージ116は、トランスレーションテーブル122を含む。トランスレーションテーブル122は、クライアントコンピューティングデバイス102のローカルメモリアドレスと、サーバ106との間の対応関係をマッピングする。これについては、より詳細に後述する。トランスレーションテーブル122は、任意の適切なデータ構造(例えば、データベース)としてデータストレージ116に格納されるとしてよい。
【0012】
通信回路118は、ネットワーク104を介したクライアントコンピューティングデバイス102と他のリモートデバイス(例えば、サーバ106)との間の通信を可能とすることが可能な任意の通信回路、デバイスまたはこれらの集合体として具現化されるとしてよい。このため、通信回路118は、任意の適切な通信技術(例えば、無線通信または有線通信)および対応するプロトコル(例えば、イーサネット(登録商標)、Bluetooth(登録商標)、Wi−Fi(登録商標)、WiMAX(登録商標)等)を利用して、例えば、ネットワークの種類に応じて上記のような通信を実現するとしてよい。当該ネットワークは、クライアントコンピューティングデバイス102とリモートデバイスとの間の通信を円滑化することが可能な任意の種類の通信ネットワークとして具現化されるとしてよい。クライアントコンピューティングデバイス102の周辺機器120としては、任意の数の周辺機器またはインターフェース機器が追加されるとしてよい。周辺機器120に含まれる特定のデバイスは、例えば、クライアントコンピューティングデバイス102の種類および/またはその利用意図に応じて変わるとしてよい。
【0013】
ネットワーク104は、クライアントコンピューティングデバイス102とサーバ106との間の通信を円滑化することが可能な任意の種類の通信ネットワークとして具現化されるとしてよい。このため、ネットワーク104は、1または複数のネットワーク、ルータ、スイッチ、コンピュータ、および/または、その他の中継デバイスを含むとしてよい。例えば、ネットワーク104は、1または複数のローカルエリアネットワークまたはワイドエリアネットワーク、公共利用可能なグローバルネットワーク(例えば、インターネット)、セルラーネットワーク、電話ネットワーク、アドホックネットワークまたはこれらの任意の組み合わせとして具現化されるとしてもよいし、または、これらを含むとしてもよい。
【0014】
サーバ106は、本明細書で説明する機能を実行可能な任意の種類のコンピューティングデバイスとして具現化されるとしてよい。例えば、一部の実施形態において、サーバ106は、上述したクライアントコンピューティングデバイス102と同様であってよい。つまり、サーバ106は、企業レベルでのサーバコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、携帯電話、スマートフォン、携帯情報端末(PDA)、モバイルインターネットデバイス、ネットブック、ノートブック、ウルトラブック(商標)、ハイブリッドデバイスおよび/または任意のその他のコンピューティング/通信デバイスとして具現化されるとしてよい。さらに、サーバ106は、上述したクライアントコンピューティングデバイス102のコンポーネントと同様のコンポーネントを含むとしてよい。例えば、
図1の実施形態例に図示しているように、サーバ106は、プロセッサ150、I/Oサブシステム152、メモリ154、データストレージ156(例えば、トランスレーションテーブル162を格納するためのもの)、通信回路158および、1または複数の周辺機器160を有する。クライアントコンピューティングデバイス102が有するこれらのコンポーネントに関する説明は、サーバ106の対応するコンポーネントの説明としても等しく当てはまり、説明を分かり易くするべくここでは省略する。また、サーバ106は、コンピューティングデバイスまたはサーバに通常含まれる他のコンポーネント、サブコンポーネントおよびデバイスを含み得ると考えられたい。これらは、クライアントコンピューティングデバイス102に関連して上記で説明しておらず、説明を分かり易くするべくここでも説明を省略する。トランスレーションテーブル162は、上述したトランスレーションテーブル122と略同様であるとしてよく、サーバ106のローカルメモリアドレスとクライアントコンピューティングデバイス102との間の対応関係をマッピングしているとしてよい。
図1に図示されているトランスレーションテーブルは122、162の2つであるが、一部の実施形態では、一のトランスレーションテーブル122,162をクライアントコンピューティングデバイス102またはサーバ106の一方にのみ格納する(つまり、両方には格納しない)。
【0015】
ここで
図2を参照すると、利用について、システム100のクライアントコンピューティングデバイス102は、環境200を構築し、システム100のサーバ106はプログラムコードのオフロード実行のための環境250を構築する。後述するように、サーバ106はクライアントコンピューティングデバイス102から受信するプログラムコードを実行する。プログラムコードの命令がクライアントコンピューティングデバイス102によるシステムコールの実行(例えば、ファイルへのアクセス)を必要とする場合、サーバ106は実行のために当該命令をクライアントコンピューティングデバイス102に送信する。
【0016】
一例となるクライアントコンピューティングデバイス102の環境200は、コード管理モジュール204、システムコール実行モジュール206および通信モジュール208を含む。さらに、実施形態例におけるサーバ106の環境250は、コード実行モジュール252、システムコール管理モジュール254および通信モジュール256を含む。コード管理モジュール204、システムコール実行モジュール206、通信モジュール208、コード実行モジュール252、システムコール管理モジュール254および通信モジュール256のそれぞれは、ハードウェア、ソフトウェア、ファームウェアまたはこれらの組み合わせとして具現化されるとしてよい。また、一部の実施形態において、例示しているモジュールのうちの1つは、別のモジュールの一部を成すとしてよい(例えば、コード実行モジュール252はシステムコール管理モジュール254の一部を成すとしてよい)。
【0017】
クライアントコンピューティングデバイス102のコード管理モジュール204は、ネットワーク104を介して実行のために(例えば、通信モジュール208を介して)サーバ106にプログラムコードを送信する。プログラムコードは、例えば、アプリケーション202を実行するための1または複数のバイナリアプリケーションファイルまたは他のプログラムコードとして具現化されるとしてよい。後述するように、当該実施形態例では、プログラムコードは、当該コードを修正することなく実行させるべく、サーバ106に送信される。サーバ106は、当該プログラムコードを受信することに応じて、送信されたプログラムコードを実行するよう構成されている。サーバ106がプログラムコードの命令がクライアントコンピューティングデバイス102による実行を必要とするシステムコールを含むと判断すると、サーバ106は実行のために当該命令をクライアントコンピューティングデバイス102に送信する。したがって、クライアントコンピューティングデバイス102のコード管理モジュール204がこのような命令を(例えば、通信モジュール208で)受信する。
【0018】
システムコール実行モジュール206は、サーバ106から受信した命令を実行する。つまり、システムコール実行モジュール206は、オフロードされたプログラムコードのうち、サーバ106がクライアントコンピューティングデバイス102による実行が必要なシステムコールを含むと判断した命令を実行する。システムコール実行モジュール206は(つまり、通信モジュール208と協働して)、システムコールの実行に基づき、応答(例えば、システムコールの結果および/またはメモリマッピングデータ)をサーバ106に送信する。また、より詳細に後述するが、システムコール実行モジュール206は、システムコールのアドレスを、サーバ106のメモリアドレスとクライアントコンピューティングデバイス102のメモリアドレスとの間で変換し、クライアントコンピューティングデバイス102のローカルコンテキストにおいてメモリを割り当て(例えば、メモリ114またはデータストレージ116内)、および/または、(例えば、メモリ割り当てに基づいて)トランスレーションテーブル122を更新するとしてよい。
【0019】
通信モジュール208は、ネットワーク104を介してクライアントコンピューティングデバイス102とリモートデバイス(例えば、サーバ106)との間の通信を処理する。上述したように、コード管理モジュール204およびシステムコール実行モジュール206は、システムコールを含む命令に関して、通信モジュール208を介してサーバ106と通信する。
【0020】
図2に示すように、サーバ106は、コード実行モジュール252、システムコール管理モジュール254および通信モジュール256を有する。コード実行モジュール252は、実行のためにクライアントコンピューティングデバイス102から受信したプログラムコードをロードして実行する。さらに、一部の実施形態において、コード実行モジュール252は、サーバ106のメモリアドレスとクライアントコンピューティングデバイス102のメモリアドレスとの間でアドレス変換を行うトランスレーションテーブル162を(例えば、プログラムコードのロード中に)初期化する。実行したプログラムコードの特定の命令によって決まるが、コード実行モジュール252および/またはシステムコール管理モジュール254は、システムコールに対応付けられているアドレスを変換するか、および/または、命令(例えば、システムコールを必要とする命令)の実行に応じてトランスレーションテーブル162を更新するとしてよい。
【0021】
システムコール管理モジュール254は、プログラムコード(つまり、クライアントコンピューティングデバイス102から受信しコード実行モジュール252が実行するプログラムコード)の実行をモニタリングし、実行すべき当該プログラムコードの命令がシステムコールを必要とするか否かを判断する。一部の実施形態において、システムコール管理モジュール254は、システムコールを開始するプログラムコードを「トラップ」またはインターセプトする。システムコールが特定されクライアントコンピューティングデバイス102による実行が必要と判断されると、システムコール管理モジュール254は、当該命令および、必要であれば、 関連するコンテンツ/データを、実行のためにクライアントコンピューティングデバイス102に(例えば、通信モジュール256を介して)送信する。この後、システムコール管理モジュール254は、クライアントコンピューティングデバイス102によるシステムコールの実行を必要とする命令の実行に応じて、クライアントコンピューティングデバイス102から応答を受信する。
【0022】
特定のシステムコール、システムコールの種類、または、クライアントコンピューティングデバイス102および/またはサーバ106による実行が必要となる命令は、特定の実施形態および/またはオフロードされたプログラムコードによって異なり得ると理解されたい。クライアントコンピューティングデバイス102による実行が必要であるシステムコールは、例えば、読み出し、書き込み、開く、閉じる、メモリ割り当て、および、他のシステムコールを含むとしてよい。
図2に図示しているように、実行ポリシーデータベース258は、サーバ106に(つまり、適切なデータ構造として)格納されているか、または、サーバ106から別の方法でアクセス可能(例えば、リモートデバイスに格納されておりネットワーク104を介してアクセス可能)であるとしてよい。当該実施形態例によると、実行ポリシーデータベース258は、クライアントコンピューティングデバイス102によって処理すべきシステムコール、サーバ106によって処理すべきシステムコール、および/または、クライアントコンピューティングデバイス102およびサーバ106の両方によって処理すべきシステムコールを特定する。一部の実施形態において、実行ポリシーデータベース258は、クライアントコンピューティングデバイス102から受信されるとしてもよいし、または、クライアントコンピューティングデバイス102によって更新されるとしてもよい。例えば、実行ポリシーデータベース258に格納すべき実行ポリシーは、プログラムコードと共に、クライアントコンピューティングデバイス102からサーバ106へと送信されるとしてよい。この実行ポリシーは、例えば、プログラムコードの設計者によって開発または定義されるとしてよい。これに加えて、または、これに代えて、実行ポリシーは、(例えば、一般的なシステムコールに基づいて)サーバ106が決定するとしてもよいし、または、サーバ106が推定するとしてもよい。いずれにしても、システムコール管理モジュール254は、特定されたシステムコール(または、システムコールを必要とする命令)を実行ポリシーデータベース258と比較して、各システムコールをどのように処理するか判断する。つまり、実行ポリシーデータベース258は、システムコールのリストを含み、各システムコールがどのようにローカル(該当する場合)およびリモートに(該当する場合)処理されるべきかを特定する。
【0023】
サーバ106の通信モジュール256は、クライアントコンピューティングデバイス102の通信モジュール208と同様であってよい。つまり、通信モジュール256は、ネットワーク104を介したサーバ106とリモートデバイス(例えば、クライアントコンピューティングデバイス102)との間の通信を処理する。上述したように、コード実行モジュール252およびシステムコール管理モジュール254は、システムコールを含む命令に関して、通信モジュール256を介してクライアントコンピューティングデバイス102と通信する。一部の実施形態において、通信モジュール256および通信モジュール208は、システムコールに関するデータおよび命令を送信するべくサーバ106とクライアントコンピューティングデバイス102との間にセキュアな通信リンクを構築する。
【0024】
ここで
図3を参照すると、利用について、システム100のサーバ106は、プログラムコードの実行をクライアントコンピューティングデバイス102からサーバ106へとオフロードする方法300を実行するとしてよい。例示している方法300は、
図3に示すブロック302から開始される。ブロック302では、サーバ106が実行をオフロードするか否かを判断する。一部の実施形態において、サーバ106は、クライアントコンピューティングデバイス102から実行のためにプログラムコードを受信することに応じて、実行をオフロードすると判断すると考えられたい。このため、ブロック304においては、サーバ106はクライアントコンピューティングデバイス102からプログラムコードを受信する。上述したように、プログラムコードは、1または複数の修正されていないバイナリアプリケーションファイルとして具現化されるとしてよい。言い換えると、クライアントコンピューティングデバイス102は、クライアントコンピューティングデバイス102が修正なしで実行するアプリケーションファイルを、サーバ106によるリモート実行のためにサーバ106に送信するとしてよい。さらに、上述したように、一部の実施形態において、サーバ106は、ブロック304において、プログラムコードと共に、クライアントコンピューティングデバイス102による実行が必要であるシステムコールを定義する実行ポリシーを受信するとしてよい。このような実施形態において、サーバ106は、任意の受信した実行ポリシーを実行ポリシーデータベース258に格納する。
【0025】
ブロック306において、サーバ106は、クライアントコンピューティングデバイス102から受信したプログラムコードをロードして実行する。この際、サーバ106は、ブロック308において、クライアントコンピューティングデバイス102のローカルメモリアドレスとサーバ106との間のマッピング/対応関係に関する情報を格納するための1または複数のトランスレーションテーブルを初期化するとしてよい。ブロック310において、サーバ106は、次に実行すべき命令がシステムコールを必要としているか否かを判断する。上述したように、一部の実施形態において、サーバ106は、プログラムコードの実行をモニタリングして、システムコールが発生すればプログラムコードを「トラップ」するか、または、インターセプトを実行する。そして、サーバ106の実行ポリシーデータベース258はトラップすべき命令またはシステムコールのリストを含むとしてよい。
【0026】
サーバ106は、命令がシステムコールを必要としないと判断すると、ブロック312において命令を実行する。言い換えると、サーバ106は、システムコールに当たるまで、クライアントコンピューティングデバイス102から受信するプログラムコードの命令を実行し続ける。命令がシステムコールである場合、ブロック314において、サーバ106は当該システムコールがクライアントコンピューティングデバイス102による実行を必要とするか否かを判断する。上記で言及したように、この判断を下すために、サーバ106は当該命令またはシステムコールをサーバ106の実行ポリシーデータベース258と比較するとしてよい。実行ポリシーデータベース258は、例えば、特定の種類のシステムコールまたは命令がクライアントコンピューティングデバイス102および/またはサーバ106による実行を必要とするか否かを示すとしてよい。システムコールがクライアントコンピューティングデバイス102による実行を必要とする場合、サーバ106は、ブロック316において、システムコールを必要とする命令をクライアントコンピューティングデバイス102に送信する。さらに、ブロック318において、サーバ106は、システムコールの1または複数のパラメータ(例えば、メモリ154に格納されておりポインタによって特定されるファイル名)に対応付けられているデータ、および/または、システムコールおよび/または関連するシステムコール(例えば、後続のシステムコール)の実行に関するメモリ154の他のデータ/コンテンツを送信するとしてよい。例えば、一実施形態において、システムコールは、ファイル名を保持するメモリ位置へのポインタおよびモードという2つのパラメータを持つ「open()」システムコールであってよい。本明細書で説明するように、サーバ106およびクライアントコンピューティングデバイス102のそれぞれは、ファイル名にメモリを割り当て、トランスレーションテーブル122、162においてポインタマッピングを構築する。さらに、ある時点において(例えば、システムコールを含む命令の送信と同時)、サーバ106は、ファイル名データをクライアントコンピューティングデバイス102に送信する。クライアントコンピューティングデバイス102は、当該データを、適切なメモリ位置に(つまり、トランスレーションテーブル122、162に格納されているマッピングに基づいて)格納する。こうすることによって、クライアントコンピューティングデバイス102は、システムコールおよび/または後続の関連するシステムコール(例えば、同一ファイルにアクセスするためのシステムコール)に関連する適切なファイルにアクセスすることが可能となる。
【0027】
この後、ブロック320において、サーバ106は、送信したシステムコールのクライアントコンピューティングデバイス102による実行に基づき、クライアントコンピューティングデバイス102から応答を受信するとしてよい。当該応答の内容は、実施形態によって異なるとしてよく、例えば、システムコールの実行に関するステータス情報、システムコールに基づきクライアントコンピューティングデバイス102のカーネルが返すデータ、クライアントコンピューティングデバイス102におけるメモリ割り当てに基づくメモリマッピングデータおよび/またはサーバ106のメモリアドレスとクライアントコンピューティングデバイス102との間のマッピング、および/または、命令またはシステムコールに関連するその他の情報を含むとしてよい。一部の実施形態において、クライアントコンピューティングデバイス102は、サーバ106に応答を提供することなくシステムコールを実行するとしてよい。
【0028】
サーバ106が、ブロック314においてシステムコールがクライアントコンピューティングデバイス102による実行を必要としないと判断する場合、または、ブロック320においてクライアントコンピューティングデバイス102から応答を受信した後、方法300はブロック322に進む。ブロック322において、サーバ106は、システムコールがサーバ106による実行を必要としているか否かを判断する。この判断のタイミングは実施形態ごとに異なると考えられたい。例えば、一部の実施形態において、サーバ106は、システムコールがクライアントコンピューティングデバイス102による実行を必要とするか否かの判断(例えば、システムコールまたはシステムコールの種類を実行ポリシーデータベース258と比較することによって行う)と同時に、システムコールがサーバ106による実行を必要とするか否かを判断するとしてよい。
【0029】
システムコールがサーバ106による実行を必要としない場合、方法300はブロック310に戻る。ブロック310において、サーバ106は次の命令がシステムコールを必要とするか否かを判断する。つまり、サーバ106は、別のシステムコールに当たるまで、プログラムコードを実行する。しかし、システムコールがサーバ106による実行を必要とする場合、ブロック324において、サーバ106はシステムコールを実行する。この際、サーバ106は、ブロック326において、システムコールのアドレスを変換するとしてよい。例えば、上述したように、システムコールは、クライアントコンピューティングデバイス102およびサーバ106の両方による実行が必要になるとしてもよい。したがって、サーバ106は、システムコールのアドレス、または、システムコールに関連するアドレス(例えば、メモリ割り当てに関連するもの)を、サーバ106のメモリアドレスとクライアントコンピューティングデバイス102のメモリアドレスとの間で変換するとしてよい。これに加えて、または、これに代えて、サーバ106はブロック328においてトランスレーションテーブル162を更新するとしてもよい。例えば、サーバ106は、サーバ106によるシステムコールの実行に関して発生したメモリまたはアドレスの修正(例えば、メモリ割り当て)に基づいてトランスレーションテーブル162を更新するとしてよい。システムコールがサーバ106による実行を必要としない場合、または、サーバ106によるシステムコールの実行に応じて、方法300はブロック310に戻る。ブロック310において、サーバ106は次の命令がシステムコールを必要とするか否かを判断する。一部の実施形態において、ブロック302−328のうち1または複数は並列に実行されるとしてもよく(例えば、ブロック314−320をブロック322―328と並列に実行するとしてよい)、または、
図3に図示した順序とは別の順序で実行するとしてもよいと考えられたい。
【0030】
ここで
図4を参照すると、利用について、システム100のクライアントコンピューティングデバイス102は、クライアントコンピューティングデバイス102からサーバ106へとプログラムコードの実行をオフロードする方法400を実行するとしてよい。例示した方法400は、
図4のブロック402で開始される。ブロック402において、クライアントコンピューティングデバイス102は実行をオフロードするか否かを判断する。オフロードする場合、クライアントコンピューティングデバイス102は、ブロック404において、実行のためにプログラムコードをサーバ106へと送信する。上述したように、例示した実施形態において、プログラムコードの実行をサーバ106にオフロードする上で、プログラムコードを修正すること、または、クライアントコンピューティングデバイス102のコンテキストを送信することは不要である。また、上述したように、クライアントコンピューティングデバイス102はさらに、ブロック404において、プログラムコードと共に、クライアントコンピューティングデバイス102による実行を必要とするシステムコールを定義している実行ポリシーを送信するとしてもよい。
【0031】
図4において二重波線記号で示す期間が経過した後、クライアントコンピューティングデバイス102は、ブロック406において、システムコールをサーバ106から受信したか否かを判断する。上述したように、クライアントコンピューティングデバイス102がプログラムコードを実行のためにサーバ106に送信した後、サーバ106はプログラムコードをロードして実行する。サーバ106は、クライアントコンピューティングデバイス102によって実行されるべきシステムコールを必要とする命令をトラップするか、または、その他の方法で特定すると、当該命令および/またはシステムコールを実行のためにクライアントコンピューティングデバイス102に送信する。
【0032】
このため、クライアントコンピューティングデバイス102は、サーバ106から実行のためにシステムコールを受信すると、ブロック408において、システムコールがアドレス/メモリ変換を必要とするか否かを判断する。一部の実施形態において、クライアントコンピューティングデバイス102は、受信した特定のシステムコールに基づいて(例えば、サーバ106の実行ポリシーデータベース258と同様のデータベースとシステムコールとを比較することによって)このような判断を下すとしてよい。他の実施形態では、サーバ106は、クライアントコンピューティングデバイス102がプログラムコード命令またはシステムコールをどのように処理、実行または取り扱うべきかを示す補助的な命令を送信するとしてもよい。
【0033】
クライアントコンピューティングデバイス102は、システムコールがアドレス/メモリ変換を必要とすると判断する場合、ブロック410において、システムコールのアドレスを変換するとしてよい。例えば、上述したように、クライアントコンピューティングデバイス102は、システムコールのアドレス(または、システムコールに関連するアドレス)を、サーバ106のメモリアドレスとクライアントコンピューティングデバイス102のメモリアドレスとの間で変換するとしてよい。ブロック412において、クライアントコンピューティングデバイス102は、クライアントコンピューティングデバイス102のローカルコンテキストにおいてメモリを割り当てるとしてよい。クライアントコンピューティングデバイス102は、ブロック414において、(例えば、メモリ割り当てに基づき)トランスレーションテーブル122を更新するとしてよい。例えば、サーバ106は、(例えば、ファイルを書き込むために)メモリの割り当てを必要とするシステムコールを発見するとしてよい。サーバ106は当該システムコールを実行するが、さらに、クライアントコンピューティングデバイス102にクライアントコンピューティングデバイス102における実行(つまり、メモリ割り当て)のために当該システムコールを送信する。サーバ106およびクライアントコンピューティングデバイス102の両方は、対応するローカルコンテキストにおいてメモリを割り当てるとしてもよい。プログラムコードはサーバ106で実行されるので、プログラムコードはサーバ106で割り当てられるメモリを利用する。しかし、書き込み処理はクライアントコンピューティングデバイス102にファイルを書き込むことに関する。このため、クライアントコンピューティングデバイス102およびサーバ106は、クライアントコンピューティングデバイス102とサーバ106との間でアドレス変換を行うために、トランスレーションテーブル122、162の一方または両方を利用する。また、トランスレーションテーブル122、162は関連するアドレス修正に基づいて更新される。
【0034】
ブロック416において、クライアントコンピューティングデバイス102は、サーバ106から受信したシステムコールを実行する。ブロック410−414で行われる変換、割り当ておよび/または更新は、一部の実施形態において、システムコールの実行の一部として実施され得ると考えられたい。ブロック418において、クライアントコンピューティングデバイス102は、システムコールの実行に基づいてシステムコール応答をサーバ106に送信する。上述したように、応答の内容は、特定の実施形態に応じて変わるとしてよく、クライアントコンピューティングデバイス102によるシステムコールの実行に関連するさまざまな情報を含むとしてよい。応答をサーバ106に送信することに応じて、方法400はブロック406に戻り、ブロック406において、クライアントコンピューティングデバイス102はシステムコールがサーバ106から受信されたか否かを判断する。つまり、クライアントコンピューティングデバイス102は、サーバ106が、クライアントコンピューティングデバイス102による実行を必要とするシステムコールを送信するまで待機する。
【0035】
<例>
本明細書で開示した技術の例を以下に記載する。当該技術の実施形態は、以下に記載する例のうち1または複数、および、それらの組み合わせを含むとしてよい。
【0036】
例1は、クライアントコンピューティングデバイスからプログラムコードの実行をオフロードするサーバを含む。当該サーバは、クライアントコンピューティングデバイスから受信したプログラムコードを実行するコード実行モジュールと、システムコール管理モジュールとを備える。システムコール管理モジュールは、(i)プログラムコードの実行をモニタリングして、実行すべきプログラムコードの命令がシステムコールを必要するか否かを判断し、(ii)命令がシステムコールの実行を必要とするという判断に応じて実行のためにクライアントコンピューティングデバイスに命令を送信し、(iii)クライアントコンピューティングデバイスによるシステムコールの実行を必要とする命令の実行に応じてクライアントコンピューティングデバイスから応答を受信する。
【0037】
例2は、例1の主題を含み、システムコール管理モジュールはさらに、システムコールを必要とすると判断された命令がクライアントコンピューティングデバイスによる実行を必要とするか否かを判断し、クライアントコンピューティングデバイスに命令を送信することは、命令がクライアントコンピューティングデバイスによる実行を必要とするという判断に応じて実行のためにクライアントコンピューティングデバイスに命令を送信することを含む。
【0038】
例3は、例1または2の主題を含み、システムコール管理モジュールはさらに、命令はクライアントコンピューティングデバイスによる実行を必要としないという判断に応じて、システムコールを必要とすると判断された命令がサーバによる実行を必要とするか否かを判断し、コード実行モジュールはさらに、命令はサーバによる実行を必要とするという判断に応じてシステムコールを必要とすると判断された命令を実行する。
【0039】
例4は、例1から3のいずれかの主題を含み、システムコール管理モジュールはさらに、命令はクライアントコンピューティングデバイスによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令がサーバによる実行を必要とするか否かを判断し、コード実行モジュールはさらに、命令がサーバによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令を実行する。
【0040】
例5は、例1から4のいずれかの主題を含み、プログラムコードをロードすることは、サーバのメモリアドレスとクライアントコンピューティングデバイスのメモリアドレスとの間でアドレスを変換するアドレス/メモリトランスレーションテーブルを初期化することを含む。
【0041】
例6は、例1から5のいずれかの主題を含み、システムコールの実行を必要とする命令を実行することは、システムコールに対応付けられたアドレスを、サーバのメモリアドレスと、クライアントコンピューティングデバイスのメモリアドレスとの間で変換することを含む。
【0042】
例7は、例1から6のいずれかの主題を含み、システムコールの実行を必要とする命令を実行することは、システムコールを必要とする命令の実行に基づきトランスレーションテーブルを更新することを含む。
【0043】
例8は、例1から7のいずれかの主題を含み、コード実行モジュールはさらに、実行すべき命令はシステムコールを必要としないという判断に応じて、命令を実行する。
【0044】
例9は、例1から8のいずれかの主題を含み、通信モジュールが、クライアントコンピューティングデバイスから、サーバによって実行されるべきプログラムコードを受信することをさらに含む。
【0045】
例10は、プログラムコードの実行をクライアントコンピューティングデバイスからサーバへとオフロードする方法を含む。当該方法は、実行のためにクライアントコンピューティングデバイスから受信したプログラムコードを、サーバによってロードする段階と、実行すべきプログラムコードの命令がシステムコールを必要とするか否かを、サーバによって判断する段階と、命令がシステムコールの実行を必要とするという判断に応じて、命令を実行のためにクライアントコンピューティングデバイスに、サーバから送信する段階と、クライアントコンピューティングデバイスによるシステムコールの実行を必要とする命令の実行に応じて、クライアントコンピューティングデバイスから応答を、サーバによって受信する段階とを備える。
【0046】
例11は、例10の主題を含み、システムコールを必要とすると判断された命令がクライアントコンピューティングデバイスによる実行を必要とするか否かを、サーバによって判断する段階をさらに備える。命令をクライアントコンピューティングデバイスに送信する段階は、命令がクライアントコンピューティングデバイスによる実行を必要とするという判断に応じて、命令をクライアントコンピューティングデバイスに実行のために送信する段階を有する。
【0047】
例12は、例10または11の主題を含み、命令がクライアントコンピューティングデバイスによる実行を必要としないと判断されたことに応じて、システムコールを必要とすると判断された命令がサーバによる実行を必要とするか否かをサーバによって判断する段階と、命令がサーバによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令をサーバによって実行する段階をさらに備える。
【0048】
例13は、例10から12のいずれかの主題を含み、命令がクライアントコンピューティングデバイスによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令がサーバによる実行を必要とするか否かをサーバによって判断する段階と、命令がサーバによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令を、サーバによって実行する段階をさらに備える。
【0049】
例14は、例10から13のいずれかの主題を含み、プログラムコードをロードする段階は、サーバのメモリアドレスとクライアントコンピューティングデバイスのメモリアドレスとの間でアドレスを変換するアドレス/メモリトランスレーションテーブルを初期化する段階を有する。
【0050】
例15は、例10から14のいずれかの主題を含み、システムコールの実行を必要とする命令の実行は、システムコールに対応付けられているアドレスを、サーバのメモリアドレスと、クライアントコンピューティングデバイスのメモリアドレスとの間で変換することを含む。
【0051】
例16は、例10から15のいずれかの主題を含み、システムコールの実行を必要とする命令の実行は、システムコールを必要とする命令の実行に基づいて、トランスレーションテーブルを更新することを含む。
【0052】
例17は、例10から16のいずれかの主題を含み、実行すべき命令がシステムコールを必要としないという判断に応じて、命令をサーバによって実行する段階をさらに備える。
【0053】
例18は、例10から17のいずれかの主題を含み、サーバにおいて実行されるべきプログラムコードをクライアントコンピューティングデバイスからサーバによって受信する段階をさらに備える。
【0054】
例19は、プロセッサと、複数の命令を格納しているメモリとを備えるコンピューティングデバイスを含む。当該複数の命令がプロセッサで実行されると、コンピューティングデバイスは例10から18のいずれかの方法を実行する。
【0055】
例20は、複数の命令が格納されている1または複数の機械可読記憶媒体を含む。当該複数の命令が実行されることに応じて、コンピューティングデバイスは例10から18のいずれかの方法を実行する。
【0056】
例21は、クライアントデバイスからプログラムコードの実行をオフロードするためのコンピューティングデバイスを含む。当該コンピューティングデバイスは、実行のためにクライアントデバイスから受信したプログラムコードをロードする手段と、実行すべきプログラムコードの命令がシステムコールを必要とするか否かを判断する手段と、命令がシステムコールの実行を必要とするという判断に応じて、命令を実行のためにクライアントデバイスに送信する手段と、クライアントコンピューティングデバイスによるシステムコールの実行を必要とする命令の実行に応じて、クライアントデバイスから応答を受信する手段を備える。
【0057】
例22は、例21の主題を含み、システムコールを必要とすると判断された命令がクライアントデバイスによる実行を必要とするか否かを判断する手段をさらに備える。命令をクライアントデバイスに送信する手段は、命令がクライアントデバイスによる実行を必要とするという判断に応じて、命令をクライアントデバイスに実行のために送信する手段を有する。
【0058】
例23は、例21および22のいずれかの主題を含み、命令がクライアントデバイスによる実行を必要としないと判断されたことに応じて、システムコールを必要とすると判断された命令がサーバによる実行を必要とするか否かを判断する手段と、命令がサーバによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令を実行する手段をさらに備える。
【0059】
例24は、例21から23のいずれかの主題を含み、命令がクライアントデバイスによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令がサーバによる実行を必要とするか否かを判断する手段と、命令がサーバによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令を実行する手段をさらに備える。
【0060】
例25は、例21から24のいずれかの主題を含み、プログラムコードをロードする手段は、サーバのメモリアドレスとクライアントデバイスのメモリアドレスとの間でアドレスを変換するアドレス/メモリトランスレーションテーブルを初期化する手段を有する。
【0061】
例26は、例21から25のいずれかの主題を含み、システムコールの実行を必要とする命令の実行のための手段は、システムコールに対応付けられているアドレスを、サーバのメモリアドレスと、クライアントデバイスのメモリアドレスとの間で変換する手段を含む。
【0062】
例27は、例21から26のいずれかの主題を含み、システムコールの実行を必要とする命令の実行のための手段は、システムコールを必要とする命令の実行に基づいて、トランスレーションテーブルを更新する手段を含む。
【0063】
例28は、例21から27のいずれかの主題を含み、実行すべき命令がシステムコールを必要としないという判断に応じて、命令を実行する手段をさらに備える。
【0064】
例29は、例21から28のいずれかの主題を含み、サーバにおいて実行されるべきプログラムコードをクライアントデバイスから受信する手段をさらに備える。
【0065】
例30は、プログラムコードの実行をサーバにオフロードするクライアントコンピューティングデバイスを含む。当該クライアントコンピューティングデバイスは、(i)オフロード実行のためにサーバにプログラムコードを送信し、(ii)サーバによるプログラムコードの実行中に、システムコールを含むとサーバが判断したプログラムコードの命令を受信するコード管理モジュールと、システムコールを含むと判断された命令を実行するシステムコール実行モジュールとを備える。通信モジュールはさらに、クライアントコンピューティングデバイスによるシステムコールの実行に基づき、応答をサーバに送信する。
【0066】
例31は、例30の主題を含み、システムコール実行モジュールはさらに、(i)受信した、システムコールを必要とすると判断された命令がアドレス/メモリ変換を必要とするか否かを判断し、(ii)システムコールがアドレス/メモリ変換を必要とするという判断に応じて、システムコールのアドレスを、サーバのメモリアドレスとクライアントコンピューティングデバイスのメモリアドレスとの間で変換する。
【0067】
例32は、例30または31の主題を含み、システムコール実行モジュールは、(i)システムコールがアドレス/メモリ変換を必要とするという判断に応じて、クライアントコンピューティングデバイスのローカルコンテキストにおいてメモリを割り当て、(ii)メモリ割り当てに基づきトランスレーションテーブルを更新する。
【0068】
例33は、例30から32のいずれかの主題を含み、応答をサーバに送信することは、メモリマッピングデータをサーバに送信することを含む。メモリマッピングデータは、サーバのメモリアドレスとクライアントコンピューティングデバイスのメモリアドレスとの間のマッピングに基づいている。
【0069】
例34は、プログラムコードの実行をクライアントコンピューティングデバイスからサーバにオフロードする方法を含む。当該方法は、クライアントコンピューティングデバイスから、オフロード実行のためにサーバにプログラムコードを送信する段階と、サーバによるプログラムコードの実行中に、システムコールを必要とするとサーバが判断したプログラムコードの命令を、クライアントコンピューティングデバイスによって受信する段階と、システムコールを必要とすると判断された命令をクライアントコンピューティングデバイスによって実行する段階と、クライアントコンピューティングデバイスからサーバへと、クライアントコンピューティングデバイスによるシステムコールの実行に基づいて応答を送信する段階とを備える。
【0070】
例35は、例34の主題を含み、受信した、システムコールを必要とすると判断された命令がアドレス/メモリ変換を必要とするか否かを、クライアントコンピューティングデバイスによって判断する段階と、システムコールがアドレス/メモリ変換を必要とするという判断に応じて、サーバのメモリアドレスとクライアントコンピューティングデバイスのメモリアドレスとの間において、システムコールのアドレスを、クライアントコンピューティングデバイスによって変換する段階とをさらに備える。
【0071】
例36は、例34または35の主題を含み、システムコールがアドレス/メモリ変換を必要とするという判断に応じて、クライアントコンピューティングデバイスのローカルコンテキストにおいてメモリを、クライアントコンピューティングデバイスによって割り当てる段階と、メモリ割り当てに基づいてトランスレーションテーブルを、クライアントコンピューティングデバイスによって更新する段階とをさらに備える。
【0072】
例37は、例34から36のいずれかの主題を含み、サーバに応答を送信する段階は、メモリマッピングデータをサーバに送信する段階を有する。メモリマッピングデータは、サーバのメモリアドレスとクライアントコンピューティングデバイスのメモリアドレスとの間のマッピングに基づいている。
【0073】
例38は、プロセッサと、複数の命令を格納しているメモリとを備えるコンピューティングデバイスを含む。当該複数の命令がプロセッサによって実行されると、コンピューティングデバイスは例34から37のいずれかの方法を実行する。
【0074】
例39は、複数の命令を格納している1または複数の機械可読記憶媒体を含む。当該複数の命令が実行されることに応じて、コンピューティングデバイスは、例34から37のいずれかの方法を実行する。
【0075】
例40は、プログラムコードの実行をサーバにオフロードするコンピューティングデバイスを含む。当該コンピューティングデバイスは、オフロード実行のためにサーバにプログラムコードを送信する手段と、サーバによるプログラムコードの実行中に、システムコールを必要とするとサーバが判断したプログラムコードの命令を受信する手段と、システムコールを必要とすると判断された命令を実行する手段と、サーバへと、コンピューティングデバイスによるシステムコールの実行に基づいて応答を送信する手段を備える。
【0076】
例41は、例40の主題を含み、受信した、システムコールを必要とすると判断された命令がアドレス/メモリ変換を必要とするか否かを判断する手段と、システムコールがアドレス/メモリ変換を必要とするという判断に応じて、サーバのメモリアドレスとコンピューティングデバイスのメモリアドレスとの間において、システムコールのアドレスを変換する手段とをさらに備える。
【0077】
例42は、例40または41の主題を含み、システムコールがアドレス/メモリ変換を必要とするという判断に応じて、コンピューティングデバイスのローカルコンテキストにおいてメモリを割り当てる手段と、メモリ割り当てに基づいてトランスレーションテーブルを更新する手段とをさらに備える。
【0078】
例43は、例40から42のいずれかの主題を含み、サーバに応答を送信する手段は、メモリマッピングデータをサーバに送信する手段を有する。メモリマッピングデータは、サーバのメモリアドレスとコンピューティングデバイスのメモリアドレスとの間のマッピングに基づいている。