(57)【特許請求の範囲】
【請求項１】
クライアントコンピューティングデバイスからプログラムコードの実行をオフロードするサーバであって、
（ｉ）前記クライアントコンピューティングデバイスから、前記プログラムコードと共に、前記クライアントコンピューティングデバイスによる実行が必要であるシステムコールを定義する実行ポリシーを受信し、
（ｉｉ）前記クライアントコンピューティングデバイスから受信した前記実行ポリシーを実行ポリシーデータベースに格納し、
（ｉｉｉ）前記クライアントコンピューティングデバイスから受信した前記プログラムコードを実行するコード実行モジュールと、
（ｉ）前記プログラムコードの実行をモニタリングして、実行すべき前記プログラムコードの命令がシステムコールを必要するか否かを判断し、
（ｉｉ）前記命令がシステムコールの実行を必要とするという判断に応じて、前記命令が前記クライアントコンピューティングデバイスによる実行を必要とするか否かを、前記命令またはシステムコールを前記実行ポリシーデータベースと比較することにより判断し、
（ｉｉｉ）前記命令が前記クライアントコンピューティングデバイスによる実行が必要であるという判断に応じて、実行のために前記クライアントコンピューティングデバイスに前記命令を送信し、
（ｉｖ）前記クライアントコンピューティングデバイスによる前記システムコールの実行を必要とする前記命令の実行に応じて、前記クライアントコンピューティングデバイスから応答を受信するシステムコール管理モジュールと
を備え、
前記クライアントコンピューティングデバイスから前記応答を受信することは、前記システムコールを実行した前記クライアントコンピューティングデバイスにおけるメモリ割り当てに基づくメモリマッピングデータを前記クライアントコンピューティングデバイスから受信することを含み、
前記メモリマッピングデータは、前記サーバのメモリアドレスと前記クライアントコンピューティングデバイスのメモリアドレスとの間のマッピングに基づいている
サーバ。
【請求項２】
前記システムコール管理モジュールはさらに、前記命令は前記クライアントコンピューティングデバイスによる実行を必要としないという判断に応じて、システムコールを必要とすると判断された前記命令が前記サーバによる実行を必要とするか否かを判断し、
前記コード実行モジュールはさらに、前記命令は前記サーバによる実行を必要とするという判断に応じて、前記システムコールを必要とすると判断された前記命令を実行する
請求項１に記載のサーバ。
【請求項３】
前記システムコール管理モジュールはさらに、前記命令は前記クライアントコンピューティングデバイスによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された前記命令が、前記サーバによる実行を必要とするか否かを判断し、
前記コード実行モジュールはさらに、前記命令が前記サーバによる実行を必要とするという判断に応じて、前記システムコールを必要とすると判断された前記命令を実行する
請求項１に記載のサーバ。
【請求項４】
前記プログラムコードをロードすることは、前記サーバの複数のメモリアドレスと前記クライアントコンピューティングデバイスの複数のメモリアドレスとの間で複数のアドレスを変換するアドレス／メモリトランスレーションテーブルを初期化することを含む
請求項１から３のいずれか一項に記載のサーバ。
【請求項５】
前記システムコールの実行を必要とする前記命令を実行することは、前記システムコールに対応付けられたアドレスを、前記サーバのメモリアドレスと、前記クライアントコンピューティングデバイスのメモリアドレスとの間で変換することを含む
請求項１から３のいずれか一項に記載のサーバ。
【請求項６】
前記システムコールの実行を必要とする前記命令を実行することは、前記システムコールを必要とする前記命令の前記実行に基づきトランスレーションテーブルを更新することを含む
請求項１から３のいずれか一項に記載のサーバ。
【請求項７】
前記コード実行モジュールはさらに、実行すべき前記命令はシステムコールを必要としないという判断に応じて、前記命令を実行する
請求項１から３のいずれか一項に記載のサーバ。
【請求項８】
プログラムコードの実行をクライアントコンピューティングデバイスからサーバへとオフロードする方法であって、
前記クライアントコンピューティングデバイスから、前記プログラムコードと共に、前記クライアントコンピューティングデバイスによる実行が必要であるシステムコールを定義する実行ポリシーを、前記サーバによって受信する段階と、
前記クライアントコンピューティングデバイスから受信した前記実行ポリシーを実行ポリシーデータベースに、前記サーバによって格納する段階と、
実行のために前記クライアントコンピューティングデバイスから受信した前記プログラムコードを、前記サーバによってロードする段階と、
実行すべき前記プログラムコードの命令がシステムコールを必要とするか否かを、前記サーバによって判断する段階と、
前記命令がシステムコールの実行を必要とするという判断に応じて、前記命令が前記クライアントコンピューティングデバイスによる実行を必要とするか否かを、前記命令またはシステムコールを前記実行ポリシーデータベースと比較することにより、前記サーバによって判断する段階と、
前記命令が前記クライアントコンピューティングデバイスによる実行が必要であるという判断に応じて、前記命令を実行のために前記クライアントコンピューティングデバイスに、前記サーバから送信する段階と、
前記クライアントコンピューティングデバイスによる前記システムコールの実行を必要とする前記命令の実行に応じて、前記クライアントコンピューティングデバイスから応答を前記サーバによって受信する段階と
を備え、
前記クライアントコンピューティングデバイスから前記応答を前記サーバによって受信する段階は、前記システムコールを実行した前記クライアントコンピューティングデバイスにおけるメモリ割り当てに基づくメモリマッピングデータを前記クライアントコンピューティングデバイスから受信する段階を有し、
前記メモリマッピングデータは、前記サーバのメモリアドレスと前記クライアントコンピューティングデバイスのメモリアドレスとの間のマッピングに基づいている
方法。
【請求項９】
前記命令が前記クライアントコンピューティングデバイスによる実行を必要としないと判断されたことに応じて、システムコールを必要とすると判断された前記命令が前記サーバによる実行を必要とするか否かを前記サーバによって判断する段階と、
前記命令が前記サーバによる実行を必要とするという判断に応じて、前記システムコールを必要とすると判断された前記命令を前記サーバによって実行する段階と
をさらに備える請求項８に記載の方法。
【請求項１０】
前記命令が前記クライアントコンピューティングデバイスによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された前記命令が前記サーバによる実行を必要とするか否かを前記サーバによって判断する段階と、
前記命令が前記サーバによる実行を必要とするという判断に応じて、前記システムコールを必要とすると判断された前記命令を前記サーバによって実行する段階と
をさらに備える請求項８に記載の方法。
【請求項１１】
前記プログラムコードをロードする段階は、前記サーバの複数のメモリアドレスと前記クライアントコンピューティングデバイスの複数のメモリアドレスとの間で複数のアドレスを変換するアドレス／メモリトランスレーションテーブルを初期化する段階を有する
請求項８から１０のいずれか一項に記載の方法。
【請求項１２】
前記システムコールの実行を必要とする前記命令の実行は、前記システムコールに対応付けられているアドレスを、前記サーバのメモリアドレスと、前記クライアントコンピューティングデバイスのメモリアドレスとの間で変換することを含む
請求項８から１０のいずれか一項に記載の方法。
【請求項１３】
前記システムコールの実行を必要とする前記命令の実行は、前記システムコールを必要とする前記命令の前記実行に基づいてトランスレーションテーブルを更新することを含む
請求項８から１０のいずれか一項に記載の方法。
【請求項１４】
実行されることに応じて、コンピューティングデバイスが請求項８から１３のいずれか一項に記載の方法を実行するプログラム。
【請求項１５】
プログラムコードの実行をサーバにオフロードするクライアントコンピューティングデバイスであって、
（ｉ）オフロード実行のために前記サーバに前記プログラムコードと共に前記クライアントコンピューティングデバイスによる実行を必要とするシステムコールを定義している実行ポリシーを送信し、
（ｉｉ）前記サーバによる前記プログラムコードの実行中、前記クライアントコンピューティングデバイスによる実行を必要とするシステムコールを含むと前記サーバが判断した前記プログラムコードの命令を受信するコード管理モジュールと、
前記システムコールを含むと判断された前記命令を実行するシステムコール実行モジュールと、
前記サーバに、前記クライアントコンピューティングデバイスによる前記システムコールの前記実行に基づき、応答を送信する通信モジュールと
を備え、
前記応答を前記サーバに送信することは、前記システムコールを実行した前記クライアントコンピューティングデバイスにおけるメモリ割り当てに基づくメモリマッピングデータを前記サーバに送信することを含み、
前記メモリマッピングデータは、前記サーバのメモリアドレスと前記クライアントコンピューティングデバイスのメモリアドレスとの間のマッピングに基づいている
クライアントコンピューティングデバイス。
【請求項１６】
前記システムコール実行モジュールはさらに、
（ｉ）受信した、システムコールを必要とすると判断された前記命令がアドレス／メモリ変換を必要とするか否かを判断し、（ｉｉ）前記システムコールがアドレス／メモリ変換を必要とするという判断に応じて、前記システムコールのアドレスを、前記サーバのメモリアドレスと前記クライアントコンピューティングデバイスのメモリアドレスとの間で変換する
請求項１５に記載のクライアントコンピューティングデバイス。
【請求項１７】
前記システムコール実行モジュールは、
（ｉ）前記システムコールがアドレス／メモリ変換を必要とするという判断に応じて、前記クライアントコンピューティングデバイスのローカルコンテキストにおいてメモリ割り当てを行い、
（ｉｉ）前記メモリ割り当てに基づきトランスレーションテーブルを更新する
請求項１６に記載のクライアントコンピューティングデバイス。
【請求項１８】
プログラムコードの実行をクライアントコンピューティングデバイスからサーバにオフロードする方法であって、
前記クライアントコンピューティングデバイスから、オフロード実行のために前記サーバに前記プログラムコードと共に前記クライアントコンピューティングデバイスによる実行を必要とするシステムコールを定義している実行ポリシーを送信する段階と、
前記サーバによる前記プログラムコードの実行中に、前記クライアントコンピューティングデバイスによる実行を必要とするシステムコールを含むと前記サーバが判断した前記プログラムコードの命令を、前記クライアントコンピューティングデバイスによって受信する段階と、
前記システムコールを含むと判断された前記命令を前記クライアントコンピューティングデバイスによって実行する段階と、
前記クライアントコンピューティングデバイスから前記サーバへと、前記クライアントコンピューティングデバイスによる前記システムコールの前記実行に基づいて応答を送信する段階と
を備え、
前記サーバに前記応答を送信する段階は、前記システムコールを実行した前記クライアントコンピューティングデバイスにおけるメモリ割り当てに基づくメモリマッピングデータを前記サーバに送信する段階を有し、
前記メモリマッピングデータは、前記サーバのメモリアドレスと前記クライアントコンピューティングデバイスのメモリアドレスとの間のマッピングに基づいている
方法。
【請求項１９】
受信した、システムコールを必要とすると判断された前記命令がアドレス／メモリ変換を必要とするか否かを前記クライアントコンピューティングデバイスによって判断する段階と、
前記システムコールがアドレス／メモリ変換を必要とするという判断に応じて、前記サーバのメモリアドレスと前記クライアントコンピューティングデバイスのメモリアドレスとの間において、前記システムコールのアドレスを前記クライアントコンピューティングデバイスによって変換する段階と
をさらに備える請求項１８に記載の方法。
【請求項２０】
前記システムコールがアドレス／メモリ変換を必要とするという判断に応じて、前記クライアントコンピューティングデバイスのローカルコンテキストにおいて前記クライアントコンピューティングデバイスによってメモリ割り当てを行う段階と、
前記メモリ割り当てに基づいてトランスレーションテーブルを、前記クライアントコンピューティングデバイスによって更新する段階と
をさらに備える請求項１９に記載の方法。
【請求項２１】
実行されることに応じて、コンピューティングデバイスが請求項１８から２０のいずれか一項に記載の方法を実行するプログラム。
【請求項２２】
請求項１４または２１に記載のプログラムを格納するコンピュータ可読記憶媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
常に進化し続けているコンピューティングエコシステム、特に、利用が増加しているモバイルコンピューティングデバイスにおいて、消費電力、セキュリティ、パフォーマンス、機能およびサイズは重要なパラメータである。例えば、モバイルコンピューティングデバイスは、消費電力およびデバイス／コンポーネントのサイズを最小限に抑える一方、パフォーマンス、セキュリティおよび機能を最大限に高めるよう設計されていることが多い。クラウドコンピューティング等の共有コンピューティングメカニズムの誕生と共に、ローカルコンピューティングデバイス（例えば、モバイルコンピューティングデバイス）からリモートコンピューティングデバイス（例えば、クラウドコンピューティング環境のサーバ）へと実行をオフロードすることが可能となっている。通常、このような実行オフロードでは、ローカルコンピューティングデバイスからリモートコンピューティングデバイスへと全ての環境コンテキストを転送し、および／または、リモートに実行されるアプリケーションへと修正を転送する。
【０００２】
コンピューティングデバイスは、アプリケーションの実行中、複数の実行モードを利用するのが一般的である。例えば、特定のコンピューティングデバイスには、プログラムの通常実行のための非特権モード、および、オペレーティングシステムカーネルが実行される特権モードがあるとしてよい。実行中のプログラムは、システムリソースにアクセスするため、または、ハードウェア関連のサービスを実行（例えば、ハードディスクデータにアクセス）するために、オペレーティングシステムに対応するサービスを実行させるよう要求することを目的としてシステムコールを利用する。
【図面の簡単な説明】
【０００３】
本明細書で説明する概念は、限定を目的としたものではなく一例として添付図面に図示する。図示は簡略化および明瞭化されており、図中に図示している構成要素は必ずしも実寸に即したものではない。適切であると考えられる場合には、複数の図面にわたって参照符号を繰り返し用いて、対応する構成要素または同様の構成要素を指定する。
【図１】プログラムコードの実行をクライアントコンピューティングデバイスからサーバへとオフロードするためのシステムの少なくとも１つの実施形態を示す簡略化されたブロック図である。
【図２】図１のシステムの環境の少なくとも１つの実施形態を示す簡略化されたブロック図である。
【図３】プログラムコードのオフロード実行に関する、図１のサーバによって実行される方法の少なくとも１つの実施形態を示す簡略化されたフローチャートである。
【図４】図１のクライアントコンピューティングデバイスによってプログラムコードの実行をオフロードするための方法の少なくとも１つの実施形態を示す簡略化されたフローチャートである。
【発明を実施するための形態】
【０００４】
本開示の概念はさまざまな点で変形および変更し得るものであるが、本開示の具体的な実施形態は図面において一例として図示しており本明細書において詳細に説明する。しかし、本開示の概念を開示した具体的な形態に限定する意図はなく、それとは逆に、本開示および添付した請求項に一致する全ての変形例、均等例、および変更例を含むことを意図すると理解されたい。
【０００５】
本明細書において「一実施形態」、「実施形態」、「実施形態例」等と言及する場合、説明している実施形態は特定の特徴、構造または特性を含み得るが、全ての実施形態が必ずしもその特定の特徴、構造または特性を含むものではないことを意味する。さらに、そのような表現は、同じ実施形態を必ずしも意味するものではない。さらに、特定の特徴、構造または特性を一の実施形態に関連付けて説明する場合、明確にそう記載されていようといまいと、このような特徴、構造または特性を複数の他の実施形態と関連付けて実施することは当業者の知るところであると考えられる。また、「Ａ、ＢおよびＣのうち少なくとも１つ」という表現においてリストに含まれる項目は、（Ａ）、（Ｂ）、（Ｃ）、（ＡおよびＢ）、（ＢおよびＣ）または（Ａ、ＢおよびＣ）を意味し得ると考えられたい。同様に、「Ａ、ＢまたはＣのうち少なくとも１つ」という表現においてリストに含まれる項目は、（Ａ）、（Ｂ）、（Ｃ）、（ＡおよびＢ）、（ＢおよびＣ）または（Ａ、ＢおよびＣ）を意味し得る。
【０００６】
開示された実施形態は、一部のケースにおいて、ハードウェア、ファームウェア、ソフトウェアまたはこれらの任意の組み合わせで実施されるとしてよい。開示された実施形態はさらに、１または複数の一時的または非一時的機械可読（例えば、コンピュータ可読）記憶媒体で担持または格納する命令として実施されるとしてよい。当該命令は、１または複数のプロセッサによって読み出されて実行されるとしてよい。機械可読記憶媒体は、任意のストレージデバイス、メカニズム、または、機械による読み出しが可能な形式で情報を格納または送信するための他の物理的構造（例えば、揮発性または不揮発性のメモリ、メディアディスク、または、その他のメディアデバイス）として具現化されるとしてよい。
【０００７】
図面では、一部の構造上または方法上の特徴を具体的な配置および／または順序で図示する場合がある。しかし、そのような具体的な配置および／または順序は要件ではないと考えられたい。逆に、一部の実施形態では、そのような特徴は、一例として挙げた図面に図示したものとは別の方法および／または順序で配置されるとしてよい。さらに、特定の図面に所与の構造上または方法上の特徴を含むからといって、そのような特徴が全ての実施形態で必要となることを意味するわけではなく、一部の実施形態においては、含まれない場合もあり、または、他の特徴と組み合わせられる場合もあるとしてよい。
【０００８】
ここで図１を参照すると、プログラムコードの実行をオフロードするためのシステム１００は、クライアントコンピューティングデバイス１０２、ネットワーク１０４およびサーバ１０６を備える。利用について、より詳細に後述するが、クライアントコンピューティングデバイス１０２は、プログラムコードのオフロード実行のために、サーバ１０６にプログラムコード（例えば、アプリケーション）を送信するよう構成されている。サーバ１０６は、クライアントコンピューティングデバイス１０２が実行するべきシステムコールを必要とするプログラムコード命令を発見すると、当該命令を実行のためにクライアントコンピューティングデバイス１０２に送信する。場合によっては、クライアントコンピューティングデバイス１０２およびサーバ１０６の両方がシステムコール命令を実行するとしてよい。
【０００９】
クライアントコンピューティングデバイス１０２は、プログラムコードを実行し、ネットワーク１０４を介してサーバ１０６と通信し、本明細書で説明する機能を実行することが可能な任意の種類のコンピューティングデバイスとして具現化されるとしてよい。例えば、クライアントコンピューティングデバイス１０２は、携帯電話、スマートフォン、タブレットコンピュータ、ネットブック、ノートブック、ウルトラブック（商標）、ラップトップコンピュータ、携帯情報端末（ＰＤＡ）、モバイルインターネットデバイス、デスクトップコンピュータ、ハイブリッドデバイスおよび／または任意のその他のコンピューティング／通信デバイスとして具現化されるとしてよい。図１に図示しているように、一例となるクライアントコンピューティングデバイス１０２は、プロセッサ１１０、入出力（Ｉ／Ｏ）サブシステム１１２、メモリ１１４、データストレージ１１６、通信回路１１８および１または複数の周辺機器１２０を有する。言うまでもなく、他の実施形態において、クライアントコンピューティングデバイス１０２は、通常のコンピューティングデバイスに通常含まれるコンポーネント（例えば、さまざまな入出力デバイス）等の他のコンポーネントを含むとしてもよいし、またはコンポーネントが追加されるとしてもよい。また、一部の実施形態において、例示したコンポーネントのうち１または複数は、他のコンポーネントに組み込まれるとしてもよいし、または、他のコンポーネントの一部を成すとしてもよい。例えば、メモリ１１４またはその一部は、一部の実施形態において、プロセッサ１１０に組み込まれるとしてよい。
【００１０】
プロセッサ１１０は、本明細書に説明する機能を実行することが可能な任意の種類のプロセッサとして具現化されるとしてよい。例えば、プロセッサは、１または複数の単一コアプロセッサまたはマルチコアプロセッサ、デジタルシグナルプロセッサ、マイクロコントローラまたはその他のプロセッサ、あるいは、処理／制御回路として具現化されるとしてよい。同様に、メモリ１１４は、本明細書で説明する機能を実行可能な任意の種類の揮発性または不揮発性のメモリ、または、データストレージとして具現化されるとしてよい。動作については、メモリ１１４は、クライアントコンピューティングデバイス１０２の動作時に利用されるさまざまなデータおよびソフトウェア、例えば、オペレーティングシステム、アプリケーション、プログラム、ライブラリおよびドライバを格納しているとしてよい。メモリ１１４は、Ｉ／Ｏサブシステム１１２を介してプロセッサ１１０に通信可能に結合されている、Ｉ／Ｏサブシステム１１２は、プロセッサ１１０、メモリ１１４およびクライアントコンピューティングデバイス１０２の他のコンポーネントとの間での入出力処理を円滑化するための回路および／またはコンポーネントとして具現化されるとしてよい。例えば、Ｉ／Ｏサブシステム１１２は、メモリコントローラハブ、入出力制御ハブ、ファームウェアデバイス、通信リンク（つまり、ポイントツーポイントリンク、バスリンク、ワイヤ、ケーブル、光ガイド、プリント配線基板の配線等）および／または入出力処理を円滑化するための他のコンポーネントおよびサブシステムとして具現化されるとしてもよいし、これらを含むとしてもよい。一部の実施形態において、Ｉ／Ｏサブシステム１１２は、システムオンチップ（ＳｏＣ）の一部を成すとしてよく、プロセッサ１１０、メモリ１１４およびクライアントコンピューティングデバイス１０２の他のコンポーネントと共に、一の集積回路チップに組み込まれるとしてよい。
【００１１】
データストレージ１１６は、データを短期または長期にわたって格納するよう構成された任意の種類の一または複数のデバイスとして具現化されるとしてよい。例えば、メモリデバイスおよびメモリ回路、メモリカード、ハードディスクドライブ、ソリッドステートドライブ、または、その他のデータストレージデバイス等であってよい。図１に示すように、データストレージ１１６は、トランスレーションテーブル１２２を含む。トランスレーションテーブル１２２は、クライアントコンピューティングデバイス１０２のローカルメモリアドレスと、サーバ１０６との間の対応関係をマッピングする。これについては、より詳細に後述する。トランスレーションテーブル１２２は、任意の適切なデータ構造（例えば、データベース）としてデータストレージ１１６に格納されるとしてよい。
【００１２】
通信回路１１８は、ネットワーク１０４を介したクライアントコンピューティングデバイス１０２と他のリモートデバイス（例えば、サーバ１０６）との間の通信を可能とすることが可能な任意の通信回路、デバイスまたはこれらの集合体として具現化されるとしてよい。このため、通信回路１１８は、任意の適切な通信技術（例えば、無線通信または有線通信）および対応するプロトコル（例えば、イーサネット（登録商標）、Ｂｌｕｅｔｏｏｔｈ（登録商標）、Ｗｉ−Ｆｉ（登録商標）、ＷｉＭＡＸ（登録商標）等）を利用して、例えば、ネットワークの種類に応じて上記のような通信を実現するとしてよい。当該ネットワークは、クライアントコンピューティングデバイス１０２とリモートデバイスとの間の通信を円滑化することが可能な任意の種類の通信ネットワークとして具現化されるとしてよい。クライアントコンピューティングデバイス１０２の周辺機器１２０としては、任意の数の周辺機器またはインターフェース機器が追加されるとしてよい。周辺機器１２０に含まれる特定のデバイスは、例えば、クライアントコンピューティングデバイス１０２の種類および／またはその利用意図に応じて変わるとしてよい。
【００１３】
ネットワーク１０４は、クライアントコンピューティングデバイス１０２とサーバ１０６との間の通信を円滑化することが可能な任意の種類の通信ネットワークとして具現化されるとしてよい。このため、ネットワーク１０４は、１または複数のネットワーク、ルータ、スイッチ、コンピュータ、および／または、その他の中継デバイスを含むとしてよい。例えば、ネットワーク１０４は、１または複数のローカルエリアネットワークまたはワイドエリアネットワーク、公共利用可能なグローバルネットワーク（例えば、インターネット）、セルラーネットワーク、電話ネットワーク、アドホックネットワークまたはこれらの任意の組み合わせとして具現化されるとしてもよいし、または、これらを含むとしてもよい。
【００１４】
サーバ１０６は、本明細書で説明する機能を実行可能な任意の種類のコンピューティングデバイスとして具現化されるとしてよい。例えば、一部の実施形態において、サーバ１０６は、上述したクライアントコンピューティングデバイス１０２と同様であってよい。つまり、サーバ１０６は、企業レベルでのサーバコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、携帯電話、スマートフォン、携帯情報端末（ＰＤＡ）、モバイルインターネットデバイス、ネットブック、ノートブック、ウルトラブック（商標）、ハイブリッドデバイスおよび／または任意のその他のコンピューティング／通信デバイスとして具現化されるとしてよい。さらに、サーバ１０６は、上述したクライアントコンピューティングデバイス１０２のコンポーネントと同様のコンポーネントを含むとしてよい。例えば、図１の実施形態例に図示しているように、サーバ１０６は、プロセッサ１５０、Ｉ／Ｏサブシステム１５２、メモリ１５４、データストレージ１５６（例えば、トランスレーションテーブル１６２を格納するためのもの）、通信回路１５８および、１または複数の周辺機器１６０を有する。クライアントコンピューティングデバイス１０２が有するこれらのコンポーネントに関する説明は、サーバ１０６の対応するコンポーネントの説明としても等しく当てはまり、説明を分かり易くするべくここでは省略する。また、サーバ１０６は、コンピューティングデバイスまたはサーバに通常含まれる他のコンポーネント、サブコンポーネントおよびデバイスを含み得ると考えられたい。これらは、クライアントコンピューティングデバイス１０２に関連して上記で説明しておらず、説明を分かり易くするべくここでも説明を省略する。トランスレーションテーブル１６２は、上述したトランスレーションテーブル１２２と略同様であるとしてよく、サーバ１０６のローカルメモリアドレスとクライアントコンピューティングデバイス１０２との間の対応関係をマッピングしているとしてよい。図１に図示されているトランスレーションテーブルは１２２、１６２の２つであるが、一部の実施形態では、一のトランスレーションテーブル１２２，１６２をクライアントコンピューティングデバイス１０２またはサーバ１０６の一方にのみ格納する（つまり、両方には格納しない）。
【００１５】
ここで図２を参照すると、利用について、システム１００のクライアントコンピューティングデバイス１０２は、環境２００を構築し、システム１００のサーバ１０６はプログラムコードのオフロード実行のための環境２５０を構築する。後述するように、サーバ１０６はクライアントコンピューティングデバイス１０２から受信するプログラムコードを実行する。プログラムコードの命令がクライアントコンピューティングデバイス１０２によるシステムコールの実行（例えば、ファイルへのアクセス）を必要とする場合、サーバ１０６は実行のために当該命令をクライアントコンピューティングデバイス１０２に送信する。
【００１６】
一例となるクライアントコンピューティングデバイス１０２の環境２００は、コード管理モジュール２０４、システムコール実行モジュール２０６および通信モジュール２０８を含む。さらに、実施形態例におけるサーバ１０６の環境２５０は、コード実行モジュール２５２、システムコール管理モジュール２５４および通信モジュール２５６を含む。コード管理モジュール２０４、システムコール実行モジュール２０６、通信モジュール２０８、コード実行モジュール２５２、システムコール管理モジュール２５４および通信モジュール２５６のそれぞれは、ハードウェア、ソフトウェア、ファームウェアまたはこれらの組み合わせとして具現化されるとしてよい。また、一部の実施形態において、例示しているモジュールのうちの１つは、別のモジュールの一部を成すとしてよい（例えば、コード実行モジュール２５２はシステムコール管理モジュール２５４の一部を成すとしてよい）。
【００１７】
クライアントコンピューティングデバイス１０２のコード管理モジュール２０４は、ネットワーク１０４を介して実行のために（例えば、通信モジュール２０８を介して）サーバ１０６にプログラムコードを送信する。プログラムコードは、例えば、アプリケーション２０２を実行するための１または複数のバイナリアプリケーションファイルまたは他のプログラムコードとして具現化されるとしてよい。後述するように、当該実施形態例では、プログラムコードは、当該コードを修正することなく実行させるべく、サーバ１０６に送信される。サーバ１０６は、当該プログラムコードを受信することに応じて、送信されたプログラムコードを実行するよう構成されている。サーバ１０６がプログラムコードの命令がクライアントコンピューティングデバイス１０２による実行を必要とするシステムコールを含むと判断すると、サーバ１０６は実行のために当該命令をクライアントコンピューティングデバイス１０２に送信する。したがって、クライアントコンピューティングデバイス１０２のコード管理モジュール２０４がこのような命令を（例えば、通信モジュール２０８で）受信する。
【００１８】
システムコール実行モジュール２０６は、サーバ１０６から受信した命令を実行する。つまり、システムコール実行モジュール２０６は、オフロードされたプログラムコードのうち、サーバ１０６がクライアントコンピューティングデバイス１０２による実行が必要なシステムコールを含むと判断した命令を実行する。システムコール実行モジュール２０６は（つまり、通信モジュール２０８と協働して）、システムコールの実行に基づき、応答（例えば、システムコールの結果および／またはメモリマッピングデータ）をサーバ１０６に送信する。また、より詳細に後述するが、システムコール実行モジュール２０６は、システムコールのアドレスを、サーバ１０６のメモリアドレスとクライアントコンピューティングデバイス１０２のメモリアドレスとの間で変換し、クライアントコンピューティングデバイス１０２のローカルコンテキストにおいてメモリを割り当て（例えば、メモリ１１４またはデータストレージ１１６内）、および／または、（例えば、メモリ割り当てに基づいて）トランスレーションテーブル１２２を更新するとしてよい。
【００１９】
通信モジュール２０８は、ネットワーク１０４を介してクライアントコンピューティングデバイス１０２とリモートデバイス（例えば、サーバ１０６）との間の通信を処理する。上述したように、コード管理モジュール２０４およびシステムコール実行モジュール２０６は、システムコールを含む命令に関して、通信モジュール２０８を介してサーバ１０６と通信する。
【００２０】
図２に示すように、サーバ１０６は、コード実行モジュール２５２、システムコール管理モジュール２５４および通信モジュール２５６を有する。コード実行モジュール２５２は、実行のためにクライアントコンピューティングデバイス１０２から受信したプログラムコードをロードして実行する。さらに、一部の実施形態において、コード実行モジュール２５２は、サーバ１０６のメモリアドレスとクライアントコンピューティングデバイス１０２のメモリアドレスとの間でアドレス変換を行うトランスレーションテーブル１６２を（例えば、プログラムコードのロード中に）初期化する。実行したプログラムコードの特定の命令によって決まるが、コード実行モジュール２５２および／またはシステムコール管理モジュール２５４は、システムコールに対応付けられているアドレスを変換するか、および／または、命令（例えば、システムコールを必要とする命令）の実行に応じてトランスレーションテーブル１６２を更新するとしてよい。
【００２１】
システムコール管理モジュール２５４は、プログラムコード（つまり、クライアントコンピューティングデバイス１０２から受信しコード実行モジュール２５２が実行するプログラムコード）の実行をモニタリングし、実行すべき当該プログラムコードの命令がシステムコールを必要とするか否かを判断する。一部の実施形態において、システムコール管理モジュール２５４は、システムコールを開始するプログラムコードを「トラップ」またはインターセプトする。システムコールが特定されクライアントコンピューティングデバイス１０２による実行が必要と判断されると、システムコール管理モジュール２５４は、当該命令および、必要であれば、 関連するコンテンツ／データを、実行のためにクライアントコンピューティングデバイス１０２に（例えば、通信モジュール２５６を介して）送信する。この後、システムコール管理モジュール２５４は、クライアントコンピューティングデバイス１０２によるシステムコールの実行を必要とする命令の実行に応じて、クライアントコンピューティングデバイス１０２から応答を受信する。
【００２２】
特定のシステムコール、システムコールの種類、または、クライアントコンピューティングデバイス１０２および／またはサーバ１０６による実行が必要となる命令は、特定の実施形態および／またはオフロードされたプログラムコードによって異なり得ると理解されたい。クライアントコンピューティングデバイス１０２による実行が必要であるシステムコールは、例えば、読み出し、書き込み、開く、閉じる、メモリ割り当て、および、他のシステムコールを含むとしてよい。図２に図示しているように、実行ポリシーデータベース２５８は、サーバ１０６に（つまり、適切なデータ構造として）格納されているか、または、サーバ１０６から別の方法でアクセス可能（例えば、リモートデバイスに格納されておりネットワーク１０４を介してアクセス可能）であるとしてよい。当該実施形態例によると、実行ポリシーデータベース２５８は、クライアントコンピューティングデバイス１０２によって処理すべきシステムコール、サーバ１０６によって処理すべきシステムコール、および／または、クライアントコンピューティングデバイス１０２およびサーバ１０６の両方によって処理すべきシステムコールを特定する。一部の実施形態において、実行ポリシーデータベース２５８は、クライアントコンピューティングデバイス１０２から受信されるとしてもよいし、または、クライアントコンピューティングデバイス１０２によって更新されるとしてもよい。例えば、実行ポリシーデータベース２５８に格納すべき実行ポリシーは、プログラムコードと共に、クライアントコンピューティングデバイス１０２からサーバ１０６へと送信されるとしてよい。この実行ポリシーは、例えば、プログラムコードの設計者によって開発または定義されるとしてよい。これに加えて、または、これに代えて、実行ポリシーは、（例えば、一般的なシステムコールに基づいて）サーバ１０６が決定するとしてもよいし、または、サーバ１０６が推定するとしてもよい。いずれにしても、システムコール管理モジュール２５４は、特定されたシステムコール（または、システムコールを必要とする命令）を実行ポリシーデータベース２５８と比較して、各システムコールをどのように処理するか判断する。つまり、実行ポリシーデータベース２５８は、システムコールのリストを含み、各システムコールがどのようにローカル（該当する場合）およびリモートに（該当する場合）処理されるべきかを特定する。
【００２３】
サーバ１０６の通信モジュール２５６は、クライアントコンピューティングデバイス１０２の通信モジュール２０８と同様であってよい。つまり、通信モジュール２５６は、ネットワーク１０４を介したサーバ１０６とリモートデバイス（例えば、クライアントコンピューティングデバイス１０２）との間の通信を処理する。上述したように、コード実行モジュール２５２およびシステムコール管理モジュール２５４は、システムコールを含む命令に関して、通信モジュール２５６を介してクライアントコンピューティングデバイス１０２と通信する。一部の実施形態において、通信モジュール２５６および通信モジュール２０８は、システムコールに関するデータおよび命令を送信するべくサーバ１０６とクライアントコンピューティングデバイス１０２との間にセキュアな通信リンクを構築する。
【００２４】
ここで図３を参照すると、利用について、システム１００のサーバ１０６は、プログラムコードの実行をクライアントコンピューティングデバイス１０２からサーバ１０６へとオフロードする方法３００を実行するとしてよい。例示している方法３００は、図３に示すブロック３０２から開始される。ブロック３０２では、サーバ１０６が実行をオフロードするか否かを判断する。一部の実施形態において、サーバ１０６は、クライアントコンピューティングデバイス１０２から実行のためにプログラムコードを受信することに応じて、実行をオフロードすると判断すると考えられたい。このため、ブロック３０４においては、サーバ１０６はクライアントコンピューティングデバイス１０２からプログラムコードを受信する。上述したように、プログラムコードは、１または複数の修正されていないバイナリアプリケーションファイルとして具現化されるとしてよい。言い換えると、クライアントコンピューティングデバイス１０２は、クライアントコンピューティングデバイス１０２が修正なしで実行するアプリケーションファイルを、サーバ１０６によるリモート実行のためにサーバ１０６に送信するとしてよい。さらに、上述したように、一部の実施形態において、サーバ１０６は、ブロック３０４において、プログラムコードと共に、クライアントコンピューティングデバイス１０２による実行が必要であるシステムコールを定義する実行ポリシーを受信するとしてよい。このような実施形態において、サーバ１０６は、任意の受信した実行ポリシーを実行ポリシーデータベース２５８に格納する。
【００２５】
ブロック３０６において、サーバ１０６は、クライアントコンピューティングデバイス１０２から受信したプログラムコードをロードして実行する。この際、サーバ１０６は、ブロック３０８において、クライアントコンピューティングデバイス１０２のローカルメモリアドレスとサーバ１０６との間のマッピング／対応関係に関する情報を格納するための１または複数のトランスレーションテーブルを初期化するとしてよい。ブロック３１０において、サーバ１０６は、次に実行すべき命令がシステムコールを必要としているか否かを判断する。上述したように、一部の実施形態において、サーバ１０６は、プログラムコードの実行をモニタリングして、システムコールが発生すればプログラムコードを「トラップ」するか、または、インターセプトを実行する。そして、サーバ１０６の実行ポリシーデータベース２５８はトラップすべき命令またはシステムコールのリストを含むとしてよい。
【００２６】
サーバ１０６は、命令がシステムコールを必要としないと判断すると、ブロック３１２において命令を実行する。言い換えると、サーバ１０６は、システムコールに当たるまで、クライアントコンピューティングデバイス１０２から受信するプログラムコードの命令を実行し続ける。命令がシステムコールである場合、ブロック３１４において、サーバ１０６は当該システムコールがクライアントコンピューティングデバイス１０２による実行を必要とするか否かを判断する。上記で言及したように、この判断を下すために、サーバ１０６は当該命令またはシステムコールをサーバ１０６の実行ポリシーデータベース２５８と比較するとしてよい。実行ポリシーデータベース２５８は、例えば、特定の種類のシステムコールまたは命令がクライアントコンピューティングデバイス１０２および／またはサーバ１０６による実行を必要とするか否かを示すとしてよい。システムコールがクライアントコンピューティングデバイス１０２による実行を必要とする場合、サーバ１０６は、ブロック３１６において、システムコールを必要とする命令をクライアントコンピューティングデバイス１０２に送信する。さらに、ブロック３１８において、サーバ１０６は、システムコールの１または複数のパラメータ（例えば、メモリ１５４に格納されておりポインタによって特定されるファイル名）に対応付けられているデータ、および／または、システムコールおよび／または関連するシステムコール（例えば、後続のシステムコール）の実行に関するメモリ１５４の他のデータ／コンテンツを送信するとしてよい。例えば、一実施形態において、システムコールは、ファイル名を保持するメモリ位置へのポインタおよびモードという２つのパラメータを持つ「ｏｐｅｎ（）」システムコールであってよい。本明細書で説明するように、サーバ１０６およびクライアントコンピューティングデバイス１０２のそれぞれは、ファイル名にメモリを割り当て、トランスレーションテーブル１２２、１６２においてポインタマッピングを構築する。さらに、ある時点において（例えば、システムコールを含む命令の送信と同時）、サーバ１０６は、ファイル名データをクライアントコンピューティングデバイス１０２に送信する。クライアントコンピューティングデバイス１０２は、当該データを、適切なメモリ位置に（つまり、トランスレーションテーブル１２２、１６２に格納されているマッピングに基づいて）格納する。こうすることによって、クライアントコンピューティングデバイス１０２は、システムコールおよび／または後続の関連するシステムコール（例えば、同一ファイルにアクセスするためのシステムコール）に関連する適切なファイルにアクセスすることが可能となる。
【００２７】
この後、ブロック３２０において、サーバ１０６は、送信したシステムコールのクライアントコンピューティングデバイス１０２による実行に基づき、クライアントコンピューティングデバイス１０２から応答を受信するとしてよい。当該応答の内容は、実施形態によって異なるとしてよく、例えば、システムコールの実行に関するステータス情報、システムコールに基づきクライアントコンピューティングデバイス１０２のカーネルが返すデータ、クライアントコンピューティングデバイス１０２におけるメモリ割り当てに基づくメモリマッピングデータおよび／またはサーバ１０６のメモリアドレスとクライアントコンピューティングデバイス１０２との間のマッピング、および／または、命令またはシステムコールに関連するその他の情報を含むとしてよい。一部の実施形態において、クライアントコンピューティングデバイス１０２は、サーバ１０６に応答を提供することなくシステムコールを実行するとしてよい。
【００２８】
サーバ１０６が、ブロック３１４においてシステムコールがクライアントコンピューティングデバイス１０２による実行を必要としないと判断する場合、または、ブロック３２０においてクライアントコンピューティングデバイス１０２から応答を受信した後、方法３００はブロック３２２に進む。ブロック３２２において、サーバ１０６は、システムコールがサーバ１０６による実行を必要としているか否かを判断する。この判断のタイミングは実施形態ごとに異なると考えられたい。例えば、一部の実施形態において、サーバ１０６は、システムコールがクライアントコンピューティングデバイス１０２による実行を必要とするか否かの判断（例えば、システムコールまたはシステムコールの種類を実行ポリシーデータベース２５８と比較することによって行う）と同時に、システムコールがサーバ１０６による実行を必要とするか否かを判断するとしてよい。
【００２９】
システムコールがサーバ１０６による実行を必要としない場合、方法３００はブロック３１０に戻る。ブロック３１０において、サーバ１０６は次の命令がシステムコールを必要とするか否かを判断する。つまり、サーバ１０６は、別のシステムコールに当たるまで、プログラムコードを実行する。しかし、システムコールがサーバ１０６による実行を必要とする場合、ブロック３２４において、サーバ１０６はシステムコールを実行する。この際、サーバ１０６は、ブロック３２６において、システムコールのアドレスを変換するとしてよい。例えば、上述したように、システムコールは、クライアントコンピューティングデバイス１０２およびサーバ１０６の両方による実行が必要になるとしてもよい。したがって、サーバ１０６は、システムコールのアドレス、または、システムコールに関連するアドレス（例えば、メモリ割り当てに関連するもの）を、サーバ１０６のメモリアドレスとクライアントコンピューティングデバイス１０２のメモリアドレスとの間で変換するとしてよい。これに加えて、または、これに代えて、サーバ１０６はブロック３２８においてトランスレーションテーブル１６２を更新するとしてもよい。例えば、サーバ１０６は、サーバ１０６によるシステムコールの実行に関して発生したメモリまたはアドレスの修正（例えば、メモリ割り当て）に基づいてトランスレーションテーブル１６２を更新するとしてよい。システムコールがサーバ１０６による実行を必要としない場合、または、サーバ１０６によるシステムコールの実行に応じて、方法３００はブロック３１０に戻る。ブロック３１０において、サーバ１０６は次の命令がシステムコールを必要とするか否かを判断する。一部の実施形態において、ブロック３０２−３２８のうち１または複数は並列に実行されるとしてもよく（例えば、ブロック３１４−３２０をブロック３２２―３２８と並列に実行するとしてよい）、または、図３に図示した順序とは別の順序で実行するとしてもよいと考えられたい。
【００３０】
ここで図４を参照すると、利用について、システム１００のクライアントコンピューティングデバイス１０２は、クライアントコンピューティングデバイス１０２からサーバ１０６へとプログラムコードの実行をオフロードする方法４００を実行するとしてよい。例示した方法４００は、図４のブロック４０２で開始される。ブロック４０２において、クライアントコンピューティングデバイス１０２は実行をオフロードするか否かを判断する。オフロードする場合、クライアントコンピューティングデバイス１０２は、ブロック４０４において、実行のためにプログラムコードをサーバ１０６へと送信する。上述したように、例示した実施形態において、プログラムコードの実行をサーバ１０６にオフロードする上で、プログラムコードを修正すること、または、クライアントコンピューティングデバイス１０２のコンテキストを送信することは不要である。また、上述したように、クライアントコンピューティングデバイス１０２はさらに、ブロック４０４において、プログラムコードと共に、クライアントコンピューティングデバイス１０２による実行を必要とするシステムコールを定義している実行ポリシーを送信するとしてもよい。
【００３１】
図４において二重波線記号で示す期間が経過した後、クライアントコンピューティングデバイス１０２は、ブロック４０６において、システムコールをサーバ１０６から受信したか否かを判断する。上述したように、クライアントコンピューティングデバイス１０２がプログラムコードを実行のためにサーバ１０６に送信した後、サーバ１０６はプログラムコードをロードして実行する。サーバ１０６は、クライアントコンピューティングデバイス１０２によって実行されるべきシステムコールを必要とする命令をトラップするか、または、その他の方法で特定すると、当該命令および／またはシステムコールを実行のためにクライアントコンピューティングデバイス１０２に送信する。
【００３２】
このため、クライアントコンピューティングデバイス１０２は、サーバ１０６から実行のためにシステムコールを受信すると、ブロック４０８において、システムコールがアドレス／メモリ変換を必要とするか否かを判断する。一部の実施形態において、クライアントコンピューティングデバイス１０２は、受信した特定のシステムコールに基づいて（例えば、サーバ１０６の実行ポリシーデータベース２５８と同様のデータベースとシステムコールとを比較することによって）このような判断を下すとしてよい。他の実施形態では、サーバ１０６は、クライアントコンピューティングデバイス１０２がプログラムコード命令またはシステムコールをどのように処理、実行または取り扱うべきかを示す補助的な命令を送信するとしてもよい。
【００３３】
クライアントコンピューティングデバイス１０２は、システムコールがアドレス／メモリ変換を必要とすると判断する場合、ブロック４１０において、システムコールのアドレスを変換するとしてよい。例えば、上述したように、クライアントコンピューティングデバイス１０２は、システムコールのアドレス（または、システムコールに関連するアドレス）を、サーバ１０６のメモリアドレスとクライアントコンピューティングデバイス１０２のメモリアドレスとの間で変換するとしてよい。ブロック４１２において、クライアントコンピューティングデバイス１０２は、クライアントコンピューティングデバイス１０２のローカルコンテキストにおいてメモリを割り当てるとしてよい。クライアントコンピューティングデバイス１０２は、ブロック４１４において、（例えば、メモリ割り当てに基づき）トランスレーションテーブル１２２を更新するとしてよい。例えば、サーバ１０６は、（例えば、ファイルを書き込むために）メモリの割り当てを必要とするシステムコールを発見するとしてよい。サーバ１０６は当該システムコールを実行するが、さらに、クライアントコンピューティングデバイス１０２にクライアントコンピューティングデバイス１０２における実行（つまり、メモリ割り当て）のために当該システムコールを送信する。サーバ１０６およびクライアントコンピューティングデバイス１０２の両方は、対応するローカルコンテキストにおいてメモリを割り当てるとしてもよい。プログラムコードはサーバ１０６で実行されるので、プログラムコードはサーバ１０６で割り当てられるメモリを利用する。しかし、書き込み処理はクライアントコンピューティングデバイス１０２にファイルを書き込むことに関する。このため、クライアントコンピューティングデバイス１０２およびサーバ１０６は、クライアントコンピューティングデバイス１０２とサーバ１０６との間でアドレス変換を行うために、トランスレーションテーブル１２２、１６２の一方または両方を利用する。また、トランスレーションテーブル１２２、１６２は関連するアドレス修正に基づいて更新される。
【００３４】
ブロック４１６において、クライアントコンピューティングデバイス１０２は、サーバ１０６から受信したシステムコールを実行する。ブロック４１０−４１４で行われる変換、割り当ておよび／または更新は、一部の実施形態において、システムコールの実行の一部として実施され得ると考えられたい。ブロック４１８において、クライアントコンピューティングデバイス１０２は、システムコールの実行に基づいてシステムコール応答をサーバ１０６に送信する。上述したように、応答の内容は、特定の実施形態に応じて変わるとしてよく、クライアントコンピューティングデバイス１０２によるシステムコールの実行に関連するさまざまな情報を含むとしてよい。応答をサーバ１０６に送信することに応じて、方法４００はブロック４０６に戻り、ブロック４０６において、クライアントコンピューティングデバイス１０２はシステムコールがサーバ１０６から受信されたか否かを判断する。つまり、クライアントコンピューティングデバイス１０２は、サーバ１０６が、クライアントコンピューティングデバイス１０２による実行を必要とするシステムコールを送信するまで待機する。
【００３５】
＜例＞
本明細書で開示した技術の例を以下に記載する。当該技術の実施形態は、以下に記載する例のうち１または複数、および、それらの組み合わせを含むとしてよい。
【００３６】
例１は、クライアントコンピューティングデバイスからプログラムコードの実行をオフロードするサーバを含む。当該サーバは、クライアントコンピューティングデバイスから受信したプログラムコードを実行するコード実行モジュールと、システムコール管理モジュールとを備える。システムコール管理モジュールは、（ｉ）プログラムコードの実行をモニタリングして、実行すべきプログラムコードの命令がシステムコールを必要するか否かを判断し、（ｉｉ）命令がシステムコールの実行を必要とするという判断に応じて実行のためにクライアントコンピューティングデバイスに命令を送信し、（ｉｉｉ）クライアントコンピューティングデバイスによるシステムコールの実行を必要とする命令の実行に応じてクライアントコンピューティングデバイスから応答を受信する。
【００３７】
例２は、例１の主題を含み、システムコール管理モジュールはさらに、システムコールを必要とすると判断された命令がクライアントコンピューティングデバイスによる実行を必要とするか否かを判断し、クライアントコンピューティングデバイスに命令を送信することは、命令がクライアントコンピューティングデバイスによる実行を必要とするという判断に応じて実行のためにクライアントコンピューティングデバイスに命令を送信することを含む。
【００３８】
例３は、例１または２の主題を含み、システムコール管理モジュールはさらに、命令はクライアントコンピューティングデバイスによる実行を必要としないという判断に応じて、システムコールを必要とすると判断された命令がサーバによる実行を必要とするか否かを判断し、コード実行モジュールはさらに、命令はサーバによる実行を必要とするという判断に応じてシステムコールを必要とすると判断された命令を実行する。
【００３９】
例４は、例１から３のいずれかの主題を含み、システムコール管理モジュールはさらに、命令はクライアントコンピューティングデバイスによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令がサーバによる実行を必要とするか否かを判断し、コード実行モジュールはさらに、命令がサーバによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令を実行する。
【００４０】
例５は、例１から４のいずれかの主題を含み、プログラムコードをロードすることは、サーバのメモリアドレスとクライアントコンピューティングデバイスのメモリアドレスとの間でアドレスを変換するアドレス／メモリトランスレーションテーブルを初期化することを含む。
【００４１】
例６は、例１から５のいずれかの主題を含み、システムコールの実行を必要とする命令を実行することは、システムコールに対応付けられたアドレスを、サーバのメモリアドレスと、クライアントコンピューティングデバイスのメモリアドレスとの間で変換することを含む。
【００４２】
例７は、例１から６のいずれかの主題を含み、システムコールの実行を必要とする命令を実行することは、システムコールを必要とする命令の実行に基づきトランスレーションテーブルを更新することを含む。
【００４３】
例８は、例１から７のいずれかの主題を含み、コード実行モジュールはさらに、実行すべき命令はシステムコールを必要としないという判断に応じて、命令を実行する。
【００４４】
例９は、例１から８のいずれかの主題を含み、通信モジュールが、クライアントコンピューティングデバイスから、サーバによって実行されるべきプログラムコードを受信することをさらに含む。
【００４５】
例１０は、プログラムコードの実行をクライアントコンピューティングデバイスからサーバへとオフロードする方法を含む。当該方法は、実行のためにクライアントコンピューティングデバイスから受信したプログラムコードを、サーバによってロードする段階と、実行すべきプログラムコードの命令がシステムコールを必要とするか否かを、サーバによって判断する段階と、命令がシステムコールの実行を必要とするという判断に応じて、命令を実行のためにクライアントコンピューティングデバイスに、サーバから送信する段階と、クライアントコンピューティングデバイスによるシステムコールの実行を必要とする命令の実行に応じて、クライアントコンピューティングデバイスから応答を、サーバによって受信する段階とを備える。
【００４６】
例１１は、例１０の主題を含み、システムコールを必要とすると判断された命令がクライアントコンピューティングデバイスによる実行を必要とするか否かを、サーバによって判断する段階をさらに備える。命令をクライアントコンピューティングデバイスに送信する段階は、命令がクライアントコンピューティングデバイスによる実行を必要とするという判断に応じて、命令をクライアントコンピューティングデバイスに実行のために送信する段階を有する。
【００４７】
例１２は、例１０または１１の主題を含み、命令がクライアントコンピューティングデバイスによる実行を必要としないと判断されたことに応じて、システムコールを必要とすると判断された命令がサーバによる実行を必要とするか否かをサーバによって判断する段階と、命令がサーバによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令をサーバによって実行する段階をさらに備える。
【００４８】
例１３は、例１０から１２のいずれかの主題を含み、命令がクライアントコンピューティングデバイスによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令がサーバによる実行を必要とするか否かをサーバによって判断する段階と、命令がサーバによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令を、サーバによって実行する段階をさらに備える。
【００４９】
例１４は、例１０から１３のいずれかの主題を含み、プログラムコードをロードする段階は、サーバのメモリアドレスとクライアントコンピューティングデバイスのメモリアドレスとの間でアドレスを変換するアドレス／メモリトランスレーションテーブルを初期化する段階を有する。
【００５０】
例１５は、例１０から１４のいずれかの主題を含み、システムコールの実行を必要とする命令の実行は、システムコールに対応付けられているアドレスを、サーバのメモリアドレスと、クライアントコンピューティングデバイスのメモリアドレスとの間で変換することを含む。
【００５１】
例１６は、例１０から１５のいずれかの主題を含み、システムコールの実行を必要とする命令の実行は、システムコールを必要とする命令の実行に基づいて、トランスレーションテーブルを更新することを含む。
【００５２】
例１７は、例１０から１６のいずれかの主題を含み、実行すべき命令がシステムコールを必要としないという判断に応じて、命令をサーバによって実行する段階をさらに備える。
【００５３】
例１８は、例１０から１７のいずれかの主題を含み、サーバにおいて実行されるべきプログラムコードをクライアントコンピューティングデバイスからサーバによって受信する段階をさらに備える。
【００５４】
例１９は、プロセッサと、複数の命令を格納しているメモリとを備えるコンピューティングデバイスを含む。当該複数の命令がプロセッサで実行されると、コンピューティングデバイスは例１０から１８のいずれかの方法を実行する。
【００５５】
例２０は、複数の命令が格納されている１または複数の機械可読記憶媒体を含む。当該複数の命令が実行されることに応じて、コンピューティングデバイスは例１０から１８のいずれかの方法を実行する。
【００５６】
例２１は、クライアントデバイスからプログラムコードの実行をオフロードするためのコンピューティングデバイスを含む。当該コンピューティングデバイスは、実行のためにクライアントデバイスから受信したプログラムコードをロードする手段と、実行すべきプログラムコードの命令がシステムコールを必要とするか否かを判断する手段と、命令がシステムコールの実行を必要とするという判断に応じて、命令を実行のためにクライアントデバイスに送信する手段と、クライアントコンピューティングデバイスによるシステムコールの実行を必要とする命令の実行に応じて、クライアントデバイスから応答を受信する手段を備える。
【００５７】
例２２は、例２１の主題を含み、システムコールを必要とすると判断された命令がクライアントデバイスによる実行を必要とするか否かを判断する手段をさらに備える。命令をクライアントデバイスに送信する手段は、命令がクライアントデバイスによる実行を必要とするという判断に応じて、命令をクライアントデバイスに実行のために送信する手段を有する。
【００５８】
例２３は、例２１および２２のいずれかの主題を含み、命令がクライアントデバイスによる実行を必要としないと判断されたことに応じて、システムコールを必要とすると判断された命令がサーバによる実行を必要とするか否かを判断する手段と、命令がサーバによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令を実行する手段をさらに備える。
【００５９】
例２４は、例２１から２３のいずれかの主題を含み、命令がクライアントデバイスによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令がサーバによる実行を必要とするか否かを判断する手段と、命令がサーバによる実行を必要とするという判断に応じて、システムコールを必要とすると判断された命令を実行する手段をさらに備える。
【００６０】
例２５は、例２１から２４のいずれかの主題を含み、プログラムコードをロードする手段は、サーバのメモリアドレスとクライアントデバイスのメモリアドレスとの間でアドレスを変換するアドレス／メモリトランスレーションテーブルを初期化する手段を有する。
【００６１】
例２６は、例２１から２５のいずれかの主題を含み、システムコールの実行を必要とする命令の実行のための手段は、システムコールに対応付けられているアドレスを、サーバのメモリアドレスと、クライアントデバイスのメモリアドレスとの間で変換する手段を含む。
【００６２】
例２７は、例２１から２６のいずれかの主題を含み、システムコールの実行を必要とする命令の実行のための手段は、システムコールを必要とする命令の実行に基づいて、トランスレーションテーブルを更新する手段を含む。
【００６３】
例２８は、例２１から２７のいずれかの主題を含み、実行すべき命令がシステムコールを必要としないという判断に応じて、命令を実行する手段をさらに備える。
【００６４】
例２９は、例２１から２８のいずれかの主題を含み、サーバにおいて実行されるべきプログラムコードをクライアントデバイスから受信する手段をさらに備える。
【００６５】
例３０は、プログラムコードの実行をサーバにオフロードするクライアントコンピューティングデバイスを含む。当該クライアントコンピューティングデバイスは、（ｉ）オフロード実行のためにサーバにプログラムコードを送信し、（ｉｉ）サーバによるプログラムコードの実行中に、システムコールを含むとサーバが判断したプログラムコードの命令を受信するコード管理モジュールと、システムコールを含むと判断された命令を実行するシステムコール実行モジュールとを備える。通信モジュールはさらに、クライアントコンピューティングデバイスによるシステムコールの実行に基づき、応答をサーバに送信する。
【００６６】
例３１は、例３０の主題を含み、システムコール実行モジュールはさらに、（ｉ）受信した、システムコールを必要とすると判断された命令がアドレス／メモリ変換を必要とするか否かを判断し、（ｉｉ）システムコールがアドレス／メモリ変換を必要とするという判断に応じて、システムコールのアドレスを、サーバのメモリアドレスとクライアントコンピューティングデバイスのメモリアドレスとの間で変換する。
【００６７】
例３２は、例３０または３１の主題を含み、システムコール実行モジュールは、（ｉ）システムコールがアドレス／メモリ変換を必要とするという判断に応じて、クライアントコンピューティングデバイスのローカルコンテキストにおいてメモリを割り当て、（ｉｉ）メモリ割り当てに基づきトランスレーションテーブルを更新する。
【００６８】
例３３は、例３０から３２のいずれかの主題を含み、応答をサーバに送信することは、メモリマッピングデータをサーバに送信することを含む。メモリマッピングデータは、サーバのメモリアドレスとクライアントコンピューティングデバイスのメモリアドレスとの間のマッピングに基づいている。
【００６９】
例３４は、プログラムコードの実行をクライアントコンピューティングデバイスからサーバにオフロードする方法を含む。当該方法は、クライアントコンピューティングデバイスから、オフロード実行のためにサーバにプログラムコードを送信する段階と、サーバによるプログラムコードの実行中に、システムコールを必要とするとサーバが判断したプログラムコードの命令を、クライアントコンピューティングデバイスによって受信する段階と、システムコールを必要とすると判断された命令をクライアントコンピューティングデバイスによって実行する段階と、クライアントコンピューティングデバイスからサーバへと、クライアントコンピューティングデバイスによるシステムコールの実行に基づいて応答を送信する段階とを備える。
【００７０】
例３５は、例３４の主題を含み、受信した、システムコールを必要とすると判断された命令がアドレス／メモリ変換を必要とするか否かを、クライアントコンピューティングデバイスによって判断する段階と、システムコールがアドレス／メモリ変換を必要とするという判断に応じて、サーバのメモリアドレスとクライアントコンピューティングデバイスのメモリアドレスとの間において、システムコールのアドレスを、クライアントコンピューティングデバイスによって変換する段階とをさらに備える。
【００７１】
例３６は、例３４または３５の主題を含み、システムコールがアドレス／メモリ変換を必要とするという判断に応じて、クライアントコンピューティングデバイスのローカルコンテキストにおいてメモリを、クライアントコンピューティングデバイスによって割り当てる段階と、メモリ割り当てに基づいてトランスレーションテーブルを、クライアントコンピューティングデバイスによって更新する段階とをさらに備える。
【００７２】
例３７は、例３４から３６のいずれかの主題を含み、サーバに応答を送信する段階は、メモリマッピングデータをサーバに送信する段階を有する。メモリマッピングデータは、サーバのメモリアドレスとクライアントコンピューティングデバイスのメモリアドレスとの間のマッピングに基づいている。
【００７３】
例３８は、プロセッサと、複数の命令を格納しているメモリとを備えるコンピューティングデバイスを含む。当該複数の命令がプロセッサによって実行されると、コンピューティングデバイスは例３４から３７のいずれかの方法を実行する。
【００７４】
例３９は、複数の命令を格納している１または複数の機械可読記憶媒体を含む。当該複数の命令が実行されることに応じて、コンピューティングデバイスは、例３４から３７のいずれかの方法を実行する。
【００７５】
例４０は、プログラムコードの実行をサーバにオフロードするコンピューティングデバイスを含む。当該コンピューティングデバイスは、オフロード実行のためにサーバにプログラムコードを送信する手段と、サーバによるプログラムコードの実行中に、システムコールを必要とするとサーバが判断したプログラムコードの命令を受信する手段と、システムコールを必要とすると判断された命令を実行する手段と、サーバへと、コンピューティングデバイスによるシステムコールの実行に基づいて応答を送信する手段を備える。
【００７６】
例４１は、例４０の主題を含み、受信した、システムコールを必要とすると判断された命令がアドレス／メモリ変換を必要とするか否かを判断する手段と、システムコールがアドレス／メモリ変換を必要とするという判断に応じて、サーバのメモリアドレスとコンピューティングデバイスのメモリアドレスとの間において、システムコールのアドレスを変換する手段とをさらに備える。
【００７７】
例４２は、例４０または４１の主題を含み、システムコールがアドレス／メモリ変換を必要とするという判断に応じて、コンピューティングデバイスのローカルコンテキストにおいてメモリを割り当てる手段と、メモリ割り当てに基づいてトランスレーションテーブルを更新する手段とをさらに備える。
【００７８】
例４３は、例４０から４２のいずれかの主題を含み、サーバに応答を送信する手段は、メモリマッピングデータをサーバに送信する手段を有する。メモリマッピングデータは、サーバのメモリアドレスとコンピューティングデバイスのメモリアドレスとの間のマッピングに基づいている。
【図１】
0006404347.tif 000002
【図２】
0006404347.tif 000003
【図３】
0006404347.tif 000004
【図４】
0006404347.tif 000005