説明

保護領域境界を越えるオブジェクトの起動のための方法、システム、及び装置

【解決手段】リモートシステム呼び出しを起動し、保護メモリシステムにおけるプロセス間通信を容易にする方法、装置、システム、及びコンピュータプログラム製品は、システム呼び出しによるオブジェクトのリモート呼び出しをサポートするカーネルを使用する。このシステム呼び出しは、オブジェクト識別子と、入力及び出力バッファへのポインタのセットを含み得る。カーネルは、分離されたサーバプロセス領域内で特定のオブジェクトを検索し、オブジェクトを起動するサーバ領域内のサーバスレッドを呼び起こす。与えられたメモリポインタを用いて、カーネルは中間バッファへのデータコピーを必要とすることなく単一のステップで、保護領域を越えて、入力及び出力データをコピー出来る。これにより、従来の保護メモリシステムで求められていた複数回のデータコピーステップのオーバーヘッドを無くすことが出来る。

【発明の詳細な説明】
【米国特許法第119条の優先権の主張】
【0001】
この特許出願は、2006年11月29日に出願され、本願の譲受人に譲受され、そして参照により本願に明示的に組み込まれる、“METHODS, SYSTEMS, AND APPARATUS FOR OBJECT INVOCATION ACROSS PROTECTION DOMAIN BOUNDARIES”と表題された米国仮出願番号60/867,787に基づく優先権を主張する。
【技術分野】
【0002】
述べられた側面は、データ処理方法に関し、より具体的には、異なる保護領域に分離されたコンピュータシステムにおける保護領域境界を越えて、効率的にオブジェクトを起動し、またデータをコピーする方法に関する。
【背景技術】
【0003】
保護されたモードのオペレーティングシステムを実装するコンピュータシステムは、物理メモリを、特定のプロセッサによってアクセス可能な、分離された仮想アドレス空間または領域、すなわち保護領域に分割する。あるメモリは、コンピュータシステムのカーネルに割り当てられ、これによってのみアクセス可能とされ得る一方(カーネル空間またはカーネル領域と呼ばれる)、他のメモリは、アプリケーションによってアクセス可能とされる(ユーザ空間またはユーザ領域と呼ばれる)。複数のプロセスが同時に動作する際、各プロセスは、その自身の仮想メモリ空間またはメモリ領域に割り当てられ、明示的に与えられない限り、他のプロセスのメモリ領域にはアクセス出来ない。このメモリ領域の保護は、プロセスがお互いにまたはシステムの動作に干渉する機会を低減することで、システムの信頼性を向上させる。
【0004】
多くの動作において、ある保護領域におけるユーザプロセスは、別の保護領域にある(例えば記録され、または実行されている)オブジェクトまたは機能を呼び出す、またはアクセスする必要がある場合がある。このようなシチュエーションにおいてシステムは、各保護領域を越えた通信を可能にする必要がある。このようなプロセス間の通信を提供するための多くの方法には、“パイプ”、カーネルサービス、メッセージパッシング、仮想メモリ再配置、及び共有メモリが含まれる。しかしながら、そのような従来からある方法は、望ましくない効率低下を呈する。
【0005】
例えば、保護領域システムは、まず、あるユーザの保護メモリ領域からカーネル領域にデータをコピーし、次に同じデータをカーネル領域から別のユーザの保護領域のメモリ空間にコピーすることによって、プロセス間の通信を提供するパイプを実装し得る。入力及び出力データが通信されることが必要なリモートオブジェクト呼び出しの場合には、このプロセスは、出力データが保護領域を越えて、リモートオブジェクト呼び出しを主導したプロセスに返される際に、繰り返される。よって、パイプを使用したプロセス間通信は、各方向において2回の別個のコピー動作が伴い、非効率である。
【0006】
共有メモリもまた、プロセス間通信において使用され得る。しかし、共有メモリの実装には、2つの保護領域が、非一般的(non-generic)なデータ共有スキームに一致することが求められる。言うまでもなく、起動しているプロセスは、受信したプロセスがデータを受信する方法を予測する必要があるため、非一般的なデータ共有スキームの一致は、容易には得られない。
【発明の概要】
【0007】
種々の側面が、効率的にリモートプロセス呼び出しを起動し、保護メモリアーキテクチャシステムにおけるプロセス間通信を容易にする方法を提供する。一側面では、システム呼び出しによるオブジェクトのリモート起動をサポートするカーネルが提供される。そのようなシステム呼び出しは、オブジェクト識別子と、入力及び出力バッファへのメモリポインタのセットを含み得る。このシステム呼び出しを用いてカーネルは、サーバプロセス領域内で特定のオブジェクトを検索し、サーバ領域内のサーバスレッドを呼び起こしてオブジェクトを起動することが出来る。与えられたメモリポインタを使用してカーネルは、入力データをサーバプロセスにコピー出来、そして出力データをサーバプロセスからクライアントプロセスにコピー出来る。
【0008】
別の側面では、サーバスレッドにおいて、入力データを要求出来るよう、また完了した要求に応答出来るように、1つまたはそれ以上の更なるシステム呼び出しが実施され得る。一実施例では、このシステム呼び出しは、起動されたサーバプロセスに、入力データを特定のアドレスにコピーさせ、または出力バッファを特定のデータでフィル(fill)させる。一側面では、カーネルは、アーギュメントをコピー出来、リモートオブジェクトの起動のコンテキスト内の要求を有効に出来、そしてクライアントプロセスによって与えられた入力及び出力の記述を使用することが出来る。一実施例では、起動されたオブジェクトは、一実施例では、起動されたオブジェクトは、クライアントの入力バッファから(他の何らかのクライアントメモリからでは無い)読み出すことが出来、クライアントの出力バッファに(他の何らかのクライアントメモリへでは無い)書き込むことが出来る。
【0009】
更に別の側面では、起動されたオブジェクトは、カーネル領域またはサーバプロセス領域内に存在し得る。別の側面では、カーネルへのシステム呼び出し内のアーギュメントは、他のオブジェクトを起動する能力(例えば、機能など)を有するオブジェクトを参照するオブジェクトリファレンスを含み得る。別の側面ではカーネルは、起動の開始の間、制限された量の入力データをコピーすることができ、また進行する呼び出しの終了の間、制限された量の出力データを、コピーし得る。更に別の側面では、アーギュメントは、各起動されたスレッドに関連付けられた共有メモリバッファ内に置かれることが出来、起動されたオブジェクトの保護領域によってデータは読み出し可能及び書き込み可能となる。
【0010】
開示された側面は、例示であって且つ開示された側面を限定するものでは無く、同様の符号が要素を示す、添付された図面と共に、以下で説明されるだろう。
【図面の簡単な説明】
【0011】
【図1】図1は、一側面に従った、異なる保護領域に分割されたコンピュータシステムのプログラム状態の概略図である。
【図2】図2は、一実施例に従った、図1に例示された側面におけるプロセス間通信の起動フロー図である。
【図3】図3は、一側面に従った、図1に例示された側面を実施する方法例のプロセスフロー図である。
【図4】図4は、別の側面に従った、異なる保護領域に分割されたコンピュータシステムのプログラム状態の概略図である。
【図5A】図5Aは、一側面に従った、図4に例示された側面を実施する方法例のプロセスフロー図である。
【図5B】図5Bは、一側面に従った、図4に例示された側面を実施する方法例のプロセスフロー図である。
【図6A】図6Aは、別の側面に従った、起動されているリモートオブジェクトがカーネル内にある、コンピュータシステムのプログラム状態の概略図である。
【図6B】図6Bは、別の側面に従った、起動されているリモートオブジェクトがカーネル内にある、コンピュータシステムのプログラム状態の概略図である。
【図7】図7は、一側面に従った、図6A及び図6Bに例示された側面におけるプロセス間通信の起動フロー図である。
【図8】図8は、別の側面に従った、図6A及び図6Bに例示された側面を実施する方法例のプロセスフロー図である。
【図9】図9は、一側面に従った、データブロックシステム内にあるオブジェクトに直接アクセスする権限を与えられた、リモートオブジェクトのリモート起動の期間における、システムのプログラム状態の概略図である。
【図10】図10は、他に取り得る側面における、プロセス間通信の起動フロー図である。
【図11】図11は、一側面に従った、図10に例示された側面を実施する方法例のプロセスフロー図である。
【図12】図12は、別の側面に従った、クライアントプロセスとサーバプロセスがメモリ領域を共有するオブジェクトの、クライアントプロセスによるリモート起動の期間における、システムのプログラム状態の概略図である。
【図13】図13は、一側面に従った、図12に例示された側面を実施する方法例のプロセスフロー図である。
【図14】図14は、一側面に従った、図12に例示された側面を実施する、別の取り得る方法のプロセスフロー図である。
【図15】図15は、種々の側面の実施に適切なシステムのシステムブロック図である。
【図16】図16は、種々の側面の携帯端末実装の要素ブロック図である。
【発明を実施するための形態】
【0012】
このシステム、デバイス、装置、方法、コンピュータプログラム製品、及び機器読み取り可能な媒体が、述べられた側面が示される添付図面を参照して、以下で詳細に説明されるだろう。このシステム、デバイス、装置、方法、及び機器読み取り可能な媒体は、しかしながら、多くの様々な形態で実施されることが出来、本明細書で説明される側面に限定されるものとして解釈されるべきではなく、むしろこの側面は、主題となる開示は十分に且つ完結するように提供され、そして本発明の範囲を当業者に表すだろう。同じ符号は、全体において同じ要素を指す。
【0013】
上記に加えて、用語「典型的」は、本明細書では例(example)、事例(instance)、または例証(illustration)であることを意味するために使用される。「典型的」として本明細書で説明されるあらゆる側面または図案は、他の側面または図案に対して好ましくまた有利であるものとして解釈される必要は無い。むしろ、典型的なる用語の使用は、具体的な方法における考え方を提示することを意図している。
【0014】
本明細書において使用される用語「カーネル」は、当業者によって理解されるように、メモリ保護プロセッサアーキテクチャにおける信頼されたプロセス(trusted process)を指す。コンピュータ科学において、カーネルは一般的に、ソフトウェアプロセスとハードウェア要素との間の通信を含む、システムリソースの管理に関与するコンピュータオペレーティングシステムの中心となる要素である。よって、コンピュータ科学技術の当業者によって理解されるように、カーネルは、オペレーティングシステムまたはマイクロカーネルアーキテクチャにおける1つまたはそれ以上のマイクロカーネルであり得る。
【0015】
説明の簡略化のため、本明細書における「クライアントプロセス」、「ユーザプロセス」及び「サーバプロセス」への言及は、保護領域システム内の分離されたプロセス及びメモリ領域を示すために使用される。より具体的には、「クライアントプロセス」及び「ユーザプロセス」への言及は、機能の呼び出し、またはリモートオブジェクト、動作、または方法の読み出しのソースを特定することを意図している一方、用語「サーバプロセス」は、クライアントプロセスに直接アクセス出来ない方法、動作、または起動されたオブジェクトを主導するメモリ領域または分離されたプロセスを特定することを意図している。そのような分離されたプロセス及び領域は、同じコンピュータ(例えばプロセス及びメモリ)内部に含まれ得る。従って、「クライアント」及び「サーバ」への言及は、特許請求の範囲をある特定のクライアント−サーバアーキテクチャに限定し、または分離されたプロセッサまたはネットワークプロセッサを指すように理解されるべきでは無い。
【0016】
本明細書において、プロセス、及びカーネルの、「システム呼び出しの実行」、及びお互いにメッセージを「送信すること」及び「通信すること」に対する言及がなされている。そのような言及は、システム内部における分離されたプロセス間の動作を調整するための、コンピュータ技術において知られた全ての方法を包含することを意図している。通常の当業者に理解されるように、そのような方法は、メモリにフラグをセットすることや、特定の値をメモリ(例えばプロセッサスタック)に保持させること、ステートマシンの状態の変化を示すこと、プロセスの割り込みを送信またはセットすること、保護領域を越えてシンボルを送信すること、等を含む。説明の簡単化のため、「送信する(sending)」及び「受信する(receiving)」プロセスが同じ物理的なプロセッサ及びメモリ空間内部で実行されているとしても、システム呼び出しの実行は、要求と情報が保護領域間で渡されていることを反映するために、メッセージを「送信する(sending)」または「通信する(communicating)」と呼ばれ得る。よって、メッセージを「通信する(communicating)」または「送信する(sending)する」ことについての言及は、説明または特許請求の範囲を、特定のタイプの通信またはメッセージプロトコルに限定されるものとして理解されるべきでは無く、またシステム呼び出しの「実行(execution)」以上に異なるタイプのプロセス間通信を必要とするものに限定されるもとして理解されるべきでも無い。
【0017】
本明細書において、用語「バッファ」は、大きいランダムアクセスメモリ内部におけるメモリ空間のような、特定のデータを保持可能なメモリ位置を指す。本明細書において、用語「保護領域(protection domain)」及び「領域(domain)」は、特定のプロセスに割り当てられたメモリアドレス空間を指し、大きいランダムアクセスメモリ内部におけるメモリ空間であり得る。バッファ、保護領域、及び領域への言及は、分離されたメモリデバイスが要求されることを意味することを意図しているものではないが、種々のメモリ位置は、分離されたランダムアクセスメモリ及びシステム内部のディスクドライブ内にあっても良い。
【0018】
一側面において、カーネルは、呼び出しているプロセスの外にあるオブジェクトの同期起動のためのシステム呼び出しを与えることによって、オブジェクトのリモート起動をサポートするメモリ保護アーキテクチャを有するシステムに与えられる。このシステム呼び出しは引数として、起動されているオブジェクトについての識別子、起動されたオブジェクトに利用可能とされるデータを含む入力バッファへのポインタのセット、及び起動されたオブジェクトがデータを保存し得る出力バッファへのポインタのセット、を受け取り、または含む。典型的なシステム呼び出しは、SysCall(INVOKE, nObjID, input buffer, output buffer)のように出現し得る。システム呼び出しを用いることでカーネルは、特定のオブジェクトを分離されたサーバ領域で検索することが出来、サーバ領域内のサーバスレッド(server thread)を呼び起こして(awaken)オブジェクトを起動できる。
【0019】
全体の概観として、1つまたはそれ以上の説明された側面は、メモリ保護システムアーキテクチャにおいて、効率的な、プロセス間の同期通信とリモートオブジェクト呼び出しの抽出を可能とする、カーネルの動作を提供する。1つまたはそれ以上の側面によれば、この方法は、カーネル内部、または厳密にはメモリ保護を実行しないが、それをシミュレートする他のシステムにおいて、実施され得る。種々の側面は、保護されたメモリのアーキテクチャを特徴づけるコンピュータベースのシステムにおいて実装され得るが、とりわけ、消費家電のような、制限されたプロセッサ能力を有するシステムに適用出来る。注目すべき側面は、保護されたメモリのアーキテクチャにおける1つまたはそれ以上の側面の方法を実行するオペレーティングシステムを実装したメモリとプロセッサを有する携帯端末(例えば携帯電話)である。
【0020】
図1は、一側面に従った、異なる保護領域に分割されたコンピュータシステムのプログラム状態100の概略図である。システムは、カーネル保護領域を有するカーネル106と、それぞれがメモリ保護領域を有するクライアント及びサーバプロセス102、104を含む。図2は、クライアント及びサーバプロセス102、104とカーネル106との間の通信を例示する起動フロー図200である。この形態を実施する方法の動作ステップの例は、図3に示されるプロセスフロー図に例示されている。
【0021】
図1、2及び3を一緒に参照して、クライアントプロセス102は、カーネル106に対してシステム呼び出し116を実行する(ステップ302)ことにより、サーバプロセス104内にあるリモートオブジェクトB108上で動作する機能を起動する。システム呼び出し116のアーギュメント(argument)として、クライアントプロセス102はアーギュメントとしての、オブジェクトB108のローカルオブジェクト識別子と、起動されたオブジェクトによって要求される入力データを含むクライアントプロセスのメモリ空間におけるバッファアドレスへのメモリポインタとを含む。システム呼び出し116はまた、起動されたオブジェクトから渡される出力データがコピーされるクライアントプロセスのメモリ空間における、バッファアドレスへのメモリポインタを含み得る。図1に例示された典型的な側面において、クライアントプロセス102は、カーネル106に対して、サーバプロセス104内のオブジェクトB108(バッファ110、112に保持された2つの入力を要求する機能)の起動を要求するシステム呼び出し116を発行する。もちろん、種々の側面において、システム呼び出し116に含まれるアドレスポインタに関連付けられた、任意の数のバッファが使用し得る。
【0022】
システム呼び出し116の実行について、カーネル106はまず、オブジェクトを起動しているプロセス(例えば、システム呼び出しの実行)が、このオブジェクトを起動する許可を有していることを確認する(ステップ304)。もし、クライアントプロセスがオブジェクトの起動許可を有していれば、カーネル106は、オブジェクトB108がカーネル領域にあるか、またはユーザ領域にあるかを確認する(ステップ306)。カーネルは、オブジェクトと種々の保護領域との間の関係のトラックを保持しているので、カーネル106はオブジェクト108を探すことが出来る。カーネル106は、例えば、各クライアント/サーバプロセスについて、識別子(例えばテーブルのインデックス)と共にオブジェクトと、このオブジェクトのインターフェースへのポインタとを特定するテーブルを保持することを含む、多くの方法のうちのいずれかによって、オブジェクトの位置のトラックを保持出来る。別の例としては、カーネル106は、オブジェクトの識別子を、プロセッサ領域と、オブジェクトのインターフェースへのポインタにマップする、システム内のオブジェクトのグローバルテーブルを保持し得る。別の例としては、カーネル106は、ユーザプロセスをオブジェクトに関連付ける(例えばマップする)ためのハッシュ(hashing)を保持しても良い。当業者によって理解されるように、オブジェクトとプロセスをマップする機能は、保護されたメモリのアーキテクチャにおけるカーネルの一般的な特性である。例えば、Unix(登録商標)のカーネルは、プロセスによりホールドされたオープンソケット(open socket)のトラックを保持することが出来る。
【0023】
もしカーネル106が、オブジェクトB108はカーネル106内部に無いと判断した場合、カーネル106は、オブジェクトB108を主導する(hosting)サーバプロセス104を検索する(ステップ308)。当業者によって理解されるように、カーネル106は、一つの動作により記憶場所と、呼び出されたオブジェクトのサーバプロセスを判断できるので(例えば上記のようにグローバルテーブル内でオブジェクトを検索することにより)、ステップ306と308は組み合わせ得る。
【0024】
カーネル106がオブジェクトB108の記憶場所を判断すると、カーネルは、サーバプロセス104に対して、クライアントプロセス102によるオブジェクトのリモート起動を通知するメッセージ128を送信する(ステップ310)。この通信は、システム呼び出しにおいてクライアントプロセス102によって与えられるオブジェクトIDを含むことが出来る。一側面では、サーバプロセス104は、オブジェクトIDを受信するための、カーネル106に知られた、所定のバッファの記憶領域を有し得る。一側面では、カーネル106は、オブジェクトB108を起動するように動作するサーバプロセス104内部のサーバスレッド(server thread、図1では独立しては図示されていない)を呼び起こす(awaken)(ステップ312)。当業者によって理解されるように、サーバスレッドはよく知られたあらゆる適切な方法によって呼び起こされることが出来る。一側面において、カーネル106は、オブジェクトIDをサーバプロセス104に供給する(ステップ316)。
【0025】
サーバプロセス104はその後、例えばゲットバッファ(Get Buffer)130動作を実行することにより、カーネル106からの入力データを要求し得る(ステップ318)。このGet Buffer130動作は、クライアントのプロセスの起動要求に関連付けられた入力データを要求し、この入力データがコピーされるサーバプロセス領域内の入力バッファ118、120のポインタを与える。Get Buffer130動作130に入力バッファ118、120へのポインタを含むことで、サーバプロセス104は、このデータが要求された時点における送信先の場所を、カーネル106に通知する。これによりサーバプロセス104は、受信したアーギュメントの入力のためにメモリを用意しておく必要が無いため(サイズ(オブジェクトの入力データ要求は様々である)及びタイミングの観点から開発者には予測が困難である)、システムのフレキシビリティが向上される。
【0026】
ある実装例では、以下で詳しく説明されるように、サーバプロセス104は、入力データの受信のために、カーネル106に知られた所定のバッファの記憶領域を有し得る(アーギュメントにおいて、“ランディングパッド(landing pad)”として知られることもある)。この実装はカーネル106に対して、オブジェクトの呼び出し及び必要なアーギュメントの受け渡しを、単一のステップで可能とする。それによって、Get Bufferの実行ステップの必要性が取り除かれる。この代替案は、図3における破線矢印Aによって示されている。
【0027】
サーバプロセス104から入力データ要求130を受信すると、カーネル106は、クライアントプロセスバッファ110、112にあるデータを、サーバプロセスのバッファ118、120にコピーすることが出来る(ステップ320)。このようにすることでカーネルは、それぞれ破線122、124によって図1に示されるように、クライアントプロセスバッファ110、112からサーバプロセスバッファ118、124にそれぞれ相当するように、単一のステップで、データを直接コピーする。カーネル106は、クライアントプロセス及びサーバプロセスのメモリ空間への読み出し及び書き込みアクセスを有しているので、カーネル106は、クライアントプロセス102からサーバプロセス104に、データを直接コピー出来る。この限定されない読み出し及び書き込みアクセスは、カーネル106の能力である。そのようなものとして、カーネル106はシステム呼び出し116においてカーネル106に渡されたクライアントバッファのポインタを使用することが出来、これにより入力データをクライアントプロセス102の入力バッファ110、112から直接得ることが出来る。同様にカーネル106は、Get Buffer130のメッセージに与えられたメモリの位置(またはある側面では、予め定義されたメモリ位置)へのポインタを用いて、入力データをサーバプロセス104の入力バッファ118、120に直接書き込むことが出来る。この、クライアントメモリ領域のバッファ110、112からサーバメモリ領域のバッファ118、120への入力データの直接のコピーは、破線122、124により示されたように、直接コピー動作のように、クライアント及びサーバプロセッサ102、104には見える。
【0028】
サーバプロセス104は、クライアントプロセスのオブジェクトB108の起動に応答している真っ只中であるため、サーバプロセス104が、クライアントプロセスバッファ110、112内に含まれる入力データ1A、1BについてのGet Buffer動作130を実行可能であることは、着目すべきことである。この起動は、サーバプロセス104に対して入力データの使用可能性(availability)を通知し、よってGet Buffer130動作の発行を指示する(ステップ318)。このGet Buffer130動作は、カーネル106によって実行されることが出来る。なぜなら、この起動された動作の期間中には、クライアントプロセス102のバッファ110、112内に含まれるデータの読み出し許可が、クライアントプロセス102によって発行されているからである。以下でより詳細に説明される1つまたはそれ以上の側面では、サーバプロセス104はまた、オブジェクトの起動の一部として、入力データのバッファ110、112への一時的な読み出しアクセスを許可され得る。これは、このサービス呼び出しの期間中に、メモリへの一時的なアクセス権をサービスプロセス104に提供するサービス呼び出し116の実行に用いられるAPIによって実装され得る。1つまたはそれ以上の側面において、この読み出し許可は、限られた時間、特にクライアントプロセスのオブジェクトB108の起動の期間中に、発行される。
【0029】
クライアントプロセスの入力バッファ110、112内に含まれるデータが、サーバプロセスの入力バッファ118、120にコピーされると、カーネル106は、メッセージ132によってサーバプロセス104に、実行の制御を返す(ステップ322)。この時点でサーバプロセス104は、カーネル106からデータを要求するための別のGet Buffer130の実行などにより、更なる入力データを要求することがあり、よって図3の破線矢印Bで示されるように、ステップ318が繰り返される。サーバプロセス104は、多くの量の入力データをコピーするために、複数回のGet Buffer130要求を実行出来る。各Get Buffer130要求は、例えば、サーバプロセス104内のテーブルに投入(populate)されるように、異なるバッファの記憶領域へのポインタを特定し得る。またサーバプロセス104は、特定されたオブジェクトB108上で呼び出された機能を実行しつつ、複数回のGet Buffer130要求を実行し得る。カーネル106は、ステップ320、332を参照して上記説明したような各Get Buffer130要求に応答する。この機能は、カーネル106またはクライアントプロセス102のソフトウェアに改良を必要とすることなく、クライアントプロセス102からサーバプロセス104へのデータの転送を最適化するアプリケーション開発者にフレキシビリティを提供する。
【0030】
全ての入力データがサーバプロセスの入力バッファ118、120にコピーされると、サーバプロセス104は、オブジェクトB108上の呼び出し動作を開始出来る(ステップ324)。サーバプロセス104が、特定されたオブジェクト108上の読み出された機能を実行した際、サーバプロセス104は、カーネル106に対して、例えばプットバッファ(Put Buffer)要求134を実行する等により、コピーされる出力データを通知する(ステップ326)。Put Buffer134メッセージは、サーバプロセスの出力バッファ122内に含まれる出力データをクライアントプロセス領域にコピーするため、カーネル106に実行を渡す。Put Buffer134メッセージは、サーバプロセス104の出力バッファ122へのポインタを含む。最初のシステム呼び出し116内に含まれるポインタから、カーネル106はクライアントプロセスの出力バッファ114のメモリの記憶場所を知る。通知されたので、カーネル106は、サーバプロセスの出力バッファ122内にあるデータをクライアントプロセスの出力バッファ114に直接コピー出来る(ステップ328)。この、サーバのメモリ領域の出力バッファ122からの出力データの、サーバのメモリ領域の出力バッファ114への直接のコピーは、クライアント及びサーバプロセス102、104には、図1における破線126によって示されるように、直接のコピー動作として見える。ある実装では、サーバプロセスは、カーネル106に知られた、予め定義されたメモリの記憶位置に出力データを置き得るので、よってPut Buffer動作の必要性が取り除かれる。
【0031】
カーネル106が出力データをクライアントプロセスの出力バッファ114にコピーすると、カーネル106は、メッセージ136によって、サーバプロセス104に実行の制御を返す(ステップ330)。Get Buffer130動作と同様に、サーバプロセス104は、複数回のPut Buffer134メッセージを実行し得る(破線矢印Dで示される)。すなわち、ステップ326が繰り返される。これにより、前述のように、カーネル106にはステップ328、330を繰り返すよう指示される。各Put Buffer134要求は、例えばサーバプロセス104内部のテーブルを読み出す等、例えば異なる出力バッファの記憶領域へのポインタを特定し得る。これによりサーバプロセス104は、データブロックメモリの読み出し動作において起こり得ることのように、多くの量のデータブロックのクライアントプロセス102への送信が可能となる。この機能は、カーネル106またはクライアントプロセス102のソフトウェアの改良や、出力データブロックのサイズを予め知っておくこと、または可能な出力データブロックのサイズについての任意の制限を要求することなく、サーバプロセス102からサーバプロセス104への出力データの転送を最適化するアプリケーション開発者にフレキシビリティを提供する。
【0032】
オブジェクトB108を起動するシステム呼び出しが完了すると、サーバプロセス104は、メッセージ138によってカーネル106に実行を返す(ステップ332)。アクティブな別のプロセスまたはデバイスインジケータ(例えばディスプレイまたはLED)へのリモート呼び出しのように、あるオブジェクト108はデータを出力しないかもしれないので、サーバプロセス104は、図3の破線矢印Cで示されるように、データの出力(ステップ326〜330)を飛び越えて、単純にカーネル106に実行の制御を返す(メッセージ138及びステップ332)。実行を返すことは、カーネル106に対して、実行の制御140をクライアントサーバ102に返すよう指示する(ステップ334)。この時点で、リモートオブジェクト起動は完了する。
【0033】
当業者に理解されるように、カーネルはシステムの全てのオブジェクト及びリソースに対するオープンアクセス権利(open access right)を有しているため、上記説明した、単一のステップのプロセス間データコピーが可能とされる。クライアントプロセス102及びサーバプロセス104は、それらの各々のメモリアドレス空間に関連づけられたオブジェクト及びリソースにのみアクセスできる。これに対してカーネル106は、クライアントプロセスのメモリアドレス空間のデータの読み出し及び書き込みの権利を有するので、カーネル106は、クライアントプロセスの入力バッファ110、112内のデータを得ることができる。同様に、カーネル106は、サーバプロセスのメモリアドレス空間にデータの読み出し及び書き込みの権利を有するので、カーネル106は、サーバプロセス入力バッファ118、120内にデータを直接書き込むことができる。従って、図1〜3に示された側面は、別に求められない限り、2つのデータコピー動作(例えば、カーネルバッファへの入力データのコピーと、カーネルバッファへの出力データのコピー)を、実質的に解消できる。これにより、特に大きなデータ量の移動を含むリモート動作につき、システムオーバヘッドを削減できる。
【0034】
前記の側面において、カーネル106は、コピーされるデータを一時的に保持するためのカーネルバッファ空間を割り当てる必要なく、カーネル106はデータをあるプロセス領域から別のプロセス領域にコピーできることもまた、当業者に理解されるだろう。言い換えれば、本側面では、カーネルは、クライアントプロセスバッファ空間からカーネル空間へのデータのコピー、及びその後の、カーネルバッファ空間からサーバプロセスのバッファ空間へのデータのコピーの、必要が無い。これにより、カーネルのメモリ割り当てを最小限にしつつ、カーネルのアーキテクチャを簡略化でき、これにより、オーディオ及びビデオのプレゼンテーション、並びにアプリケーションのコピーにおいて生じるような、大きなデータ量の転送を含む動作のサポートにつき、とりわけ有利である。よって、複数のGet Buffer130及び/またはPut Buffer134動作を実行するサーバプロセス104により、システムは(もしそうなら)制限された割り当てカーネルメモリにおいて、小さい入力及び出力バッファを用いて、保護領域間における制限されない量のデータを渡すことができる。
【0035】
上記の側面は、呼び出しのアーギュメントに組み込まれたアドレッシングにより、任意の転送元及び転送先アドレッシングされた保護領域間の、1回のデータコピーを提供する。よって、クライアントプロセス102の観点から(及びクライアントプロセスの開発者の観点から)、システムによって禁止されていない限り、保護領域を越えた(across)データコピーを含むリモートオブジェクトの実装が、クライアントまたはオブジェクトソフトウェアを書き換えることなく、またはこれらを考慮することなく、1つの表示呼び出し(indication call)と任意の入力/出力バッファと共に、効率的に実行される。
【0036】
さらに、種々の側面に従ったカーネル106は、リモートオブジェクトの同期起動をサポートする。これによりクライアントプロセス102は、カーネル106のサーバプロセス104との干渉(逆もまた同様)の詳細を認識または考慮する必要なく、カーネル106を介したオブジェクトへの同期呼び出しが可能となる。よって、オブジェクトを起動するために、クライアントプロセッサ102は、起動されるオブジェクトの特定さえすればよく、ある側面では、オブジェクトの起動動作の期間においてクライアントプロセス102のメモリ空間へのデータの読み出し及び書き込みの許可を発行する。
【0037】
先に述べたように、あるオブジェクト及びある側面については、サービス呼び出し116は、サーバプロセス104のスレッドを活性化し得る。一実装においては、スレッドは、オブジェクトB108の起動を待ち受けるサーバプロセス104内に存在し得る。オブジェクトB108が起動されると、対応するスレッドが呼び起こされる。別の側面では、カーネル106はスレッドの移行(migration)をサポートできる。スレッドの移行とは、クライアントプロセス領域からのサービス呼び出しを、サーバプロセスにおけるスレッド実行と同期させる一メカニズムを差す。スレッドの移行において、スタックがサーバプロセス104に割り当てられ、あたかもスレッドが保護領域を切り替えたかのように、実行の制御がクライアントからサーバに切り替わる。スレッドの移行の実行は、クライアントプロセス102のスレッドが起動の期間について保護領域を変化させたかのように、サーバプロセス104において主導されることができる。
【0038】
図4、5A、及び5Bは、システム呼び出しに関連付けられた詳細がクライアントプロキシ146の使用により隠されることが可能な側面を例示する。同様に、システム呼び出しに応答してサーバプロセス104に関連付けられたプロセス間データ交換の詳細は、サーバプロキシ146の使用により、サーバプロセス104から隠されることが可能である。リモートオブジェクトの起動と、保護領域間のデータの受け渡しのプロセスは、図1〜3を参照して先に説明された側面に2つの要素を加えたものと同様である。まず、システム呼び出し116の実行、入力データの入力データバッファへの書き込み(posting)、及びカーネル106からの出力データの受信ステップが、クライアントプロセス102についてのプロキシとして機能する中間ソフトウェア(intermediate software)によって行われる。次に、カーネル106からのオブジェクト呼び出しの受信、Get Buffer130及びPut Buffer134動作の生成、及び入力及び出力データを扱いのステップが、サーバプロセス104についてのプロキシとして機能する中間ソフトウェアによって実行されることができる。リモートオブジェクトを起動するアプリケーションは、カーネルによってどのようにプロセスが実行されるかについて関心をはらうことなく、一般的なフォーマットで、出力データを受信し、アーギュメントを与えることしか必要としないため、クライアントプロキシ146及びサーバプロキシ148の使用により、クライアント及びサーバのアプリケーションソフトウェアの開発を更に簡略化出来る。
【0039】
図4に示された典型的な側面においては、システム呼び出しは、サーバプロセス104領域内のシステムメモリに保持されたデータブロック150を読み出すための、クライアントプロセス102により起動された読み出し方法142である。図4及び5Aを共に参照して、クライアントプロセス102は、要求されるデータブロックと動作を特定することにより、データブロック150についての読み出し方法142を、クライアントプロキシ146に呼び出す(ステップ402)。クライアントプロキシ146のコードは、クライアントプロセス102領域内にあり、よってクライアントプロセスメモリ(例えばバッファ)空間に十分にアクセスできる。クライアントプロキシ146のコードは、リモート起動の名前とリモート起動のアーギュメントを、カーネル404に送るシステム呼び出し116内に配列させる(ステップ404)。この側面によれば、クライアントプロセス102は、あたかもデータブロック150がシステムメモリのクライアントプロセス102の領域内にあるかのように、データブロック150についての読み出し方法142を呼び出すことが出来る。
【0040】
動作中において、クライアントプロセス102は、この読み出し方法呼び出し142をクライアントプロキシ146に生成することで、読み出し方法142に必要なアーギュメントを渡す(ステップ402)。クライアントプロキシ146は、アーギュメントをシステム呼び出し116内にパック(pack)し、カーネル106に実行の制御を渡すシステム呼び出し116を実行する(ステップ404)。典型的な側面において、クライアントプロキシ146によって生成されたシステム呼び出し116は、アーギュメントとして入力及び出力データへのポインタとオブジェクトの識別子を含む、INVOKEシステム呼び出しである。例えば、この呼び出しは、SysCall (INVOKE, nObjID, inputs pointer, outputs pointer)であり得る。入力データは更に、データブロックオブジェクトのサイズを含み得る。理解されるように、クライアントプロセス102によって呼び出される読み出し方法は、クライアントプロキシ146によって生成されたINVOKEシステム呼び出しに直接対応する。
【0041】
残りの処理は、図1〜3を参照して上記説明したのと同様の方法により実行される。従って、図3の上記説明が、図5Aにおいて示された同じ参照符号が付されたステップにつき、ここに組み込まれる。起動された動作の終わりにあたりカーネル106は、実行の制御をクライアントプロキシ142に返す(ステップ434)。
【0042】
図4及び5Bに示された別の側面においては、サーバプロセス104領域内のサーバプロキシ148は、カーネル106とサーバプロセス104との間の通信を管理する。本側面においては、カーネル106は、起動された動作につき、サーバプロセス104によって求められたデータを集めることを仲立ちするサーバプロキシ148と通信する。この起動されたオブジェクトは、例えば、サーバプロキシ148へのIRemoteCallインターフェースポインタを渡す等により、データを要求し得る。当業者によって理解されるように、サーバプロキシ148は、要求メッセージ152にパックされたリモート起動呼び出しに直接対応する機能呼び出しを実施出来る。
【0043】
図5Bに示された大半のステップは、図1〜3及び5Aを参照して上記説明したのと同様の方法により進行する。従って、図3及び5Aについて先述した説明が、図5Bにおいて示された同じ参照符号のステップで、ここに組み込まれる。カーネル106は、オブジェクトが起動されていることを、サーバプロキシ148に、オブジェクトIDをそれに供給しつつ、通知する(ステップ410)。サーバプロキシは、図1〜3を参照して先に詳細に説明したように、カーネル106が入力データをクライアントプロセスバッファ110、112からサーバプロセスバッファ118、120にコピーすること(ステップ320)に応答して、カーネル106へのGet Buffer130呼び出し等により、入力データを要求し得る(ステップ418)。別の方法として、サーバプロキシ148は、クライアントプロセス102の入力データバッファから、カーネル106によってコピーされた入力データを受信しても良い。コピー動作が完了した際、カーネル106は、サーバプロキシ148に実行の制御を返す(ステップ422)。サーバプロキシ148が全ての要求された入力データを受信した際、サーバプロキシ148は、起動されているリモートオブジェクトを読み出す(ステップ423)。サーバプロセス104はその後、クライアントプロセス102によって起動された起動動作(図4において読み出し方法142として示される)を実行する。残りの処理は、カーネル106との通信がサーバプロキシによって管理される点(ステップ430、432)を除いては、図3を参照して上記説明したのと同じだけ進行する。
【0044】
典型的な一側面においては、読み出されるデータブロック150は、サーバプロセス104内部の一時的な出力バッファ154にコピーされ得る。データブロック150がサーバプロセス104の出力バッファ154にコピーされると、データは、図1〜3を参照して上記説明した単一のステップのプロセス間コピー方法を用いて、図4の破線矢印によって示されるように、カーネル106によってクライアントプロセス102内の適切な出力バッファ(例えば図1のバッファ114)にコピーされる。
【0045】
図4に示され上記説明されたサーバプロセス104内部の一時的なデータのコピーステップは、強制的では無い。別の側面においては、バッファ154は、データブロック150自身内部で定義されることが可能である。別の実装では、カーネル106はクライアント及びサーバプロセス領域の両方へのアクセス権利を有するので、データブロック150から直接にクライアントプロセス102内のバッファへの、データの単一のステップのプロセス間コピーを、単純に実行できる。よって、アプリケーションの開発を簡単化するためのクライアント及びサーバプロキシ146、148の実装には、種々の形態によって可能とされるプロセス間通信へのオーバーヘッドを追加する必要がない。カーネル106の、単一のステップのデータのプロセス間コピーを実行するこの機能は、サーバプロセス104からカーネル106への、及びカーネル106の中からクライアントプロセスへの、データのコピーに関連するオーバーヘッドを、実質的に除去する。先に議論したように、単一のステップのデータのプロセス間コピーを可能とすることは、保護領域を越えて大きなデータ量をコピーする必要がある際に、特に有効である。機能の大きなクラス(large class)については、マイクロカーネルアーキテクチャに関連付けられたデータの移動のオーバーヘッドは、プロセス間コピーはコピーをオーバーラップさせることが出来、これがリモート機能において隠されることが出来るので、実質的にゼロに削減出来る。例えば、ファイルシステムからの読み出しの際には、プロセス間コピーは一度のコピーの要求で、メモリをファイルシステムキャッシュからクライアントバッファに直接移動出来る。「読み出し」機能においてコピー動作が隠されるように、一度のコピーは、起動がプロセス境界を越える必要がない場合であっても、求められるだろう。
【0046】
図6A〜8に示される別の側面においては、クライアントプロセス102によって起動されたリモートオブジェクトC156は、カーネル106自身の中にある。本方法におけるカーネルベースのプロセスの実装は、クライアントプロセス102またはクライアントプロキシ146によって主導されるシステム呼び出し116を、起動されるリモートオブジェクトの場所にかかわらず、構造的及び機能的に同じにすることが出来る。図6A及び6Bは、本側面において含まれるメモリ領域、バッファ、及びプロセスの相互関係を例示する。図7は、クライアントプロセス102とカーネル106との間の通信を例示する起動フローダイアグラムである。本側面のプロセス500の動作ステップの例が、図8のプロセスフロー図に例示されている。
【0047】
図6A〜8を共に参照して、クライアントプロセス102は、カーネル106内にあるリモートオブジェクトC108を起動するために、カーネル106と共にシステム呼び出し116を実行出来る(ステップ502〜504)。図4及び5Aを参照して上記詳細に説明したように、ある側面では、クライアントプロセス102は、クライアントプロキシ146に機能呼び出しのアーギュメントを渡して、クライアントプロキシ146に機能呼び出しを送ることにより(ステップ502)、これを実行し得る。クライアントプロキシ146はその後、必要なアーギュメントを配列し、リモート機能起動と、関連するアーギュメント及びオブジェクトC156のローカルオブジェクト識別子を含む、システム呼び出し116を生成・実行する(ステップ504)。例えば、オブジェクトC156のローカルオブジェクト識別子に加えて、クライアントプロキシ146は、オブジェクトC156に利用可能とされる入力データIP 1Aを含むクライアントプロセス102の入力バッファ110へのポインタ、及びオブジェクトC156からのデータがコピーされる出力バッファ114へのポインタを渡すことが出来る。
【0048】
クライアントプロキシ146からシステム呼び出し116を受信した後、カーネル106は、クライアントがオブジェクトを起動するための必要な許可を有することを確認することにより起動を有効にし、オブジェクトC156がカーネル106内にあるのかユーザプロセス内にあるのかを判断する(ステップ506)。オブジェクトC156がカーネル106内にあるとカーネル106が判断すると、カーネル106は、システム呼び出し116の実行の制御を、カーネルプロキシ158に渡し得る(ステップ508)。(もしオブジェクトがサーバプロセス領域にあるとカーネル106が判断すれば、カーネル106は図1〜5Bを参照して上記説明したのと同じ方法によって処理を進めるだろうことに注意すべきである。)一例の実施形態では、カーネル106は、IRemoteCallインターフェースポインタをカーネルプロキシ158に渡し得る(ステップ508)。当業者によれば、カーネルプロキシ148によって実装されたこのような機能呼び出しは、システム呼び出し116のリモート機能起動に直接に対応することが理解されるだろう。カーネルプロキシ158の使用により、カーネルの動作を考慮する必要なく、カーネルプロキシ158との間で通信するようにオブジェクトをプログラム出来るので、カーネル領域内の実装についてのオブジェクトの開発を簡略化出来る。しかしながら、カーネルプロキシ158の使用は必須では無く、代わりの実施形態では、カーネル106は起動されたオブジェクトC156を直接実行し得る。
【0049】
カーネル106は、カーネルプロセス102のメモリ空間内のデータの読み出し及び書き込みの権限を有するので、カーネル106は、入力データIP 1Aをカーネル入力バッファ160に直接コピーする(ステップ510)ために、システム呼び出し116に与えられたポインタを使うことが出来る。カーネルプロキシ158は入力データを受信し、その後カーネル106内において起動されているオブジェクトC156を呼び出す(ステップ512)。カーネル106は、起動されたオブジェクト(すなわち、機能またはスレッド)を実行する(ステップ512)。出力データOP K1は、(もし出力データが生成されれば)カーネル出力バッファ162に一時的に保持され得る。カーネル106は、その後、このデータを、クライアントサーバ102内の適切な出力バッファに、カーネル106によってコピーする(ステップ514)。別の実施形態では、カーネルはクライアントプロセス102のメモリ空間への書き込みの権利を有しているので、カーネル106は、起動されたオブジェクトによって生成されたデータを、クライアントプロセス102の出力バッファ114に直接書き込むことが出来る。カーネル106またはカーネルプロキシ158はその後、クライアントプロセス102に実行の制御140を返す(ステップ516)。
【0050】
本側面の変形例では、図6Bに示されるように、カーネル106は、クライアント領域のバッファ110から入力データを読み出し、このデータを、カーネルバッファにコピーすることなく、起動されたオブジェクトに直接データを与え得る。この側面は、カーネルバッファを必要としない点を除いて、図6A、7、及び8を参照して上記説明したのと同様の方法で機能する。カーネル106は、クライアントプロセス102のメモリ空間に対して、読み出しアクセス及び書き込みアクセス権の両方を有しているので、カーネル106は、クライアントプロセスの入力バッファ110へのポインタを取得でき、入力データIP 1Aに直接アクセス出来る。典型的な一実施において、カーネル106は、“Acquire In Ptr”及び“Acquire Out Ptr”動作をそれぞれ用いて、クライアントプロセスのバッファ110、114へのポインタを得ることが出来る。本方法において、カーネル106は、クライアントプロセス102からカーネル106へ、及びカーネル106の中からクライアントプロセス102へ戻すコピーデータに関連する何らの追加のコピー動作も実行する必要は無い。
【0051】
別の実装では、図9に示されるように、クライアントプロセス102は、ファイルシステムのメモリ領域172内にある第2のオブジェクト174を起動出来るサーバプロセス104領域内のリモートオブジェクト170を起動出来る。この実装では、起動されたリモートオブジェクトD170は、ファイルシステム領域172内にあるデータブロック174のような、別のオブジェクトへのアクセス権限を発行される。よってシステム呼び出しは、アーギュメントとバッファポインタを与えることに加えて、オブジェクトを起動する能力(機能)を与える。
【0052】
図9を参照して、クライアントプロセス102は、図3及び5Aを参照して先に述べたのと同様の方法で、オブジェクトD170のリモート起動を要求するカーネル106に、システム呼び出し116を送る。オブジェクトD170についてのオブジェクト識別子に加えて、システム呼び出し116は、ファイルシステムメモリ領域172内にあるオブジェクトE174へのオブジェクトリファレンス(object reference)を含む。本実装では、オブジェクトリファレンスは、リモートオブジェクトD170に、別のオブジェクトE174を直接起動する権限を与える。この権限の付与は、各オブジェクトにアクセス可能なプロセスと同様に、全てのオブジェクトの場所のトラックを保持することが可能なカーネルによって記録される。別のオブジェクトを起動するための権限はまた、出力システム呼び出しにおける出力パラメータとしても含まれることが出来る。よって、システム呼び出しは、オブジェクトに別のオブジェクトを起動する権限を与える入力パラメータを含むことが出来、及び/またはシステム呼び出しは、別のオブジェクトを起動する権限をクライアントプロセスに返す出力パラメータを含み得る。
【0053】
本側面の典型的な実装は、信頼されたマルチメディアプロセス(trusted multimedia process)にあるマルチメディアプレイヤーオブジェクトD170である。保護されたメモリアーキテクチャでは、クライアントプロセス102及びマルチメディアプロセス(サーバプロセス104)は、互いのメモリ空間にアクセスできない。本側面を実装することにより、クライアントプロセス102は、再生または停止機能を呼び出すことで、マルチメディアプレイヤーオブジェクト170を制御出来る。マルチメディアプレイヤーオブジェクト170に対してメディア(例えば音楽またはビデオ)の再生を開始させるには、クライアントプロセス102は、マルチメディアプレイヤーオブジェクト170が直接起動及びアクセス(176)出来るファイルシステムメモリ領域172にあるマルチメディアデータブロック174を参照して、マルチメディアプレイヤーを与える。一側面においては、マルチメディアプレイヤーオブジェクト170は、クライアントプロセス102によって発行されたシステム呼び出し116を通じてマルチメディアプレイヤーオブジェクト170に送られるデータブロックリファレンスにより、ファイルシステムメモリ領域172内部のオブジェクトE174にアクセスし、起動する権限を与えられる。
【0054】
別の側面が、比較的大きな入力データブロックが起動されたリモートオブジェクトに効率的に与えられることが出来る図10及び図11に例示されている。この実装は、大きい入力データブロック上で動くリモートオブジェクトの効率的な起動を提供出来る。図10は、本側面のプロセス600の起動フロー図であり、図11はこのプロセス600のプロセスフロー図である。ステップの幾つかは図3を参照して上記説明したものと同様であるので、これらの説明は、図11において同じ参照符号のステップについてここに組み込まれる。
【0055】
図10及び11を共に参照して、クライアントプロセス102は、カーネル106へのシステム呼び出し116を実行する(ステップ302)。このシステム呼び出し116は、リモートオブジェクトのオブジェクト識別子、入力データが存在するクライアントプロセス102のメモリ内の領域へのポインタ、及びサーバプロセス104によって出力されたデータがコピーされるクライアントプロセス102のメモリ内の領域へのポインタを、カーネル106に与える。これに応答して、カーネル106はシステム呼び出しを有効にし(例えば、クライアントプロセスが、オブジェクトの起動を許可されていることを確認する)、起動されているオブジェクトを主導(host)するサーバプロセス104を探す(ステップ306)。
【0056】
サーバプロセス104を呼び起こす(awake)する前に、カーネル106は、所定の量のデータをクライアントプロセス102のメモリ空間から、サーバプロセス104のメモリ空間内の予め指定されたメモリ領域にコピーする(ステップ620)。一側面では、カーネル106とサーバプロセス104とは、カーネル106によってクライアントサーバ102から直接コピーされるデータを受信するために、サーバプロセス104のメモリ空間の領域を指定するためにネゴシエイト(negotiate)することが出来る。一実装では、初めにサーバプロセス104にコピーされる所定の量のデータに含まれない残りのデータを要求するために、サーバプロセス104がカーネル106をいずれは呼び出すだろうという仮定の下、データはコピーされる。入力データについてのそのような追加の要求は、図3(ステップ318〜324)を参照して先に説明したような、複数のGet Buffer130動作を発行するサーバプロセス(またはサーバプロキシ148)によって実行され得る。
【0057】
入力データブロックがサーバプロセス104のメモリ空間にコピーされると、カーネル106は、メッセージ128を送ることにより、起動されたサーバスレッドを呼び起こし(awaken)し、クライアントサーバに、クライアントプロセス102によって送られた要求メッセージを通知する(ステップ622)。この時点において、サーバプロセス104は、(もしプロキシが実装されていれば)入力データを得るためにサーバプロキシ148を呼び出し得る。サーバプロセス104のメモリに予めロードされた入力データにより、サーバプロセス104またはサーバプロキシ148は、カーネル106に対してGet Input要求を実行する必要なく、入力データを得ることが出来る。代わりに、サーバプロセス104またはサーバプロキシ148は、サーババッファ内のデータにアクセスする(ステップ624)。この側面は、小さいバッファを含む実装及びアプリケーションに特に適用される。大きいバッファが使用される例では、サーバプロセス104またはサーバプロキシ148は、サーバプロセス104のメモリ上でGet Buffer164動作を発行し得る。よって、この側面は、実質的にカーネルからの入力データの要求の必要性を無くすることが出来、これにより、カーネル106への求められるシステム呼び出し回数を削減出来る。
【0058】
サーバプロセス104が起動されたスレッドを完了すると(ステップ324)、サーバプロキシ148は、カーネル106に、サーバプロセス104のバッファ内に含まれるデータの、クライアントプロセス102の出力バッファへのコピーを要求する、Put Buffer要求134を実行する(ステップ326)。カーネル106がサーバプロセス102のバッファからクライアントプロセス104の出力バッファにデータを直接コピーすると(ステップ328)、カーネルは、メッセージ136によりサーバプロセス104に実行の制御を返す(ステップ330)。起動された動作の完了と共に、サーバプロセス104は、カーネル106に実行138の制御を返し(ステップ332)、カーネル106に実行の制御をクライアントプロセス102に返す140よう指示する(ステップ334)。
【0059】
図12及び13は、共有メモリを使用することにより、カーネル106によるデータのコピーの必要性を無くす、別の側面を例示する。ステップのいくつかは、図3を参照して先に説明したものと同様であるので、これらの説明は、図13において同じ参照符号のステップについてここに組み込まれる。
【0060】
図12及び13を参照して、クライアントプロセス102の入力データIP 1Aは、クライアントプロセス102及びサーバプロセス104の両方によってアクセス可能な共有メモリ空間180内の入力バッファ182内にある。クライアントプロセス102は、入力バッファ182内に入力データを持ち続けても良いし、またはリモートオブジェクトの起動の直前に、データを入力バッファ182にコピーすることも出来る。動作中において、クライアントプロセス102は、システム呼び出し116を実行することにより、サーバプロセス104内にあるリモートオブジェクトB108を起動する(ステップ302)。バッファ182、184へのポインタと同様にオブジェクトB108の識別子は、システム呼び出し116内に含まれる。カーネル106は、システム呼び出しを有効化し(ステップ304)、オブジェクトがどこに位置するかを判断し(ステップ306、308)、その後、サーバプロセス104に起動要求を通知する(ステップ310)。一側面においては、カーネルは、起動されたサーバスレッドを呼び起こすことが出来(ステップ312)、このサーバスレッドは、入力データを求める要求を、カーネル106に送ることが出来る(ステップ702)。例えばサーバプロセス104は、データバッファへのポインタを獲るために、“Acquire In Ptr”及び“Acquire Out Ptr”動作を実行し得る。これに応答してカーネル106は、サーバスレッドに、入力及び出力バッファ182、184に対するポインタを与える(ステップ704)。あるいは、カーネル106はサーバプロセス104に、指示することなく、入力及び出力バッファ182、187へのポインタを与えることが出来る(ステップ704)。サーバプロセス104は共有メモリ180へのアクセス権を有し、ひいてはそこに入力及び出力バッファ182、184があるので、サーバプロセス104は、バッファ182内の入力データIP 1Aに直接アクセスすることが出来る(ステップ706)。これにより、クライアントプロセス102からサーバプロセス104へデータをコピーするカーネル106のオーバーヘッドを無くすことが出来る。この時点において、サーバプロセス104は、起動されたプロセスを行う(ステップ324)。完了すると、サーバプロセス104は、出力データを、共有メモリ180内の出力バッファに直接書き込む(ステップ708)。この時点で、サーバプロセス104は、機能の完了を示すカーネル106に実行の制御を返し(ステップ332)、カーネル106に実行の制御をクライアントプロセス102に返すよう指示する(ステップ334)。
【0061】
当業者によれば、入力及び出力バッファ182、184へのポインタは、図11を参照して先に説明したのと同様の方法で、プロセスを呼び起こす(awake)前にサーバプロセス104供給されることが出来、これによりサーバプロセス104がカーネル106に送る必要のある要求の数を削減出来ることが理解されるだろう。
【0062】
本側面の任意の変形例では、クライアントプロセス102は、起動されている各スレッドについてのクライアントメモリの共有可能なメモリ領域を確立するために、カーネル106と協調(coordinate)出来る。例えば、クライアントプロセスのシステム呼び出し116に含まれるアーギュメントは、起動されたスレッドにアクセス可能とされるクライアントメモリの領域内にある入力及び出力バッファを指定(例えば、これらへのポインタを含むことが)出来る。本側面においては、カーネル106は、サーバプロセス104に見えるクライアントプロセス102のメモリの、指示された入力及び出力バッファ領域を作るよう、メモリ管理ユニット(MMU)に命令出来る(ステップ710)。例えば、共有されるデータは、MMUが特定のページへのアクセス権をサーバプロセス104に発行出来るよう、クライアントプロセス102の特定のページ内にあり得る。一般的に、このアクセスは、システム呼び出しの期間においてのみ許可されるだろう。これは、サーバプロセス104からのシステム呼び出しのリターンの受信時に、クライアントプロセス102のメモリへのサーバプロセス104のアクセス権を削除するようMMUに要求するカーネル106によって実行され得る。
【0063】
本側面の別の変形例では、図14に示すように、クライアントプロセス102とサーバプロセス104がメモリの同じ領域へのアクセス権を持たない際に、カーネル106は、起動の間、サーバプロセス104に利用可能なクライアントバッファを作るよう、MMUに指示する。起動の開始(initiation)においてカーネル106は、サーバプロセス104によって読み取り可能な1つまたはそれ以上の入力バッファを作るために、サーバプロセス104の仮想アドレス空間を改良することが出来る。同様に、カーネル106は、サーバプロセス104によって書き込み可能な1つまたはそれ以上の出力バッファを作るために、サーバプロセス104の仮想アドレス空間を改良することが出来る。これは、MMUに対して、サーバプロセスの仮想アドレスを、入力または出力バッファがある物理メモリアドレスにマップ(map)することを要求する。カーネル106はその後、サーバプロセス104に、オブジェクトの起動の要求を通知する(ステップ812)。もし、カーネルの通知に入力データの位置が含まれていなければ、サーバプロセス104は、カーネル106からデータを要求することも出来る(ステップ814)。これに応答してカーネル106は、サーバプロセス104に、入力データの位置を与える(ステップ816)。この時点においてサーバプロセスは、新たにマップされた仮想メモリアドレスから、入力データに直接アクセスすることが出来(ステップ818)、またオブジェクト上の起動された動作を実行し(ステップ820)、新たな共有メモリ空間に、結果得られる出力を記録する(ステップ822)。動作を完了するため、サーバプロセス104は、カーネル106に対して、出力データの共有メモリ内における位置を通知し(ステップ824)、これによりカーネル106は、クライアントプロセスに対して出力データの位置を通知出来る(ステップ826)。クライアントプロセス102に実行の制御を返す前に、カーネル106は、サーバプロセス104に利用可能なバッファの作成を導入する仮想メモリのマッピングを削除するだろう。
【0064】
この実装により、入力及び出力データがプロセスによって直接アクセスされることが出来、これによりカーネル106において、保護境界を越えてデータをコピーすることの必要性を取り除くことが出来る。この側面には、多くの利点がある。第1の利点は、クライアントプロセス102によって実行される前記コピーステップにより、他のあらゆるコピーを必要とすることなく、クライアントプロセス(例えば読み出しているプロセス)とサーバプロセス(例えば読み出されたプロセス)との間で、入力及び出力データを移動(move)することが出来る点である。第2の利点は、サーバプロセスは、入力のサイズ及び/または位置(location)を予測する必要がなく、またはクライアントプロセスに返された後に出力データのコピーを保持する必要が無いことである。代わりに、サーバプロセス104は、単純に、入力データを直接読み出し、クライアントプロセス領域内のバッファにデータを出力する。第3の利点は、サーバプロセス104は、全ての入力または出力アーギュメントを同時にメモリに保持するための十分なメモリを有する必要が無いことである。
【0065】
前述の側面のイベントを実装するために使用されるハードウェアは、命令のセットを実行するように構成されたメモリ要素とプロセシング要素であり得る。ここで、命令のセットは、上記イベントに対応する方法ステップを実行するためのものである。あるいは、いくつかのイベントは、ある機能に特定される回路によって実行されても良い。図15は、上記側面を実装するシステムの、一般的な要素を例示する。そのようなシステムは、ランダムアクセスメモリ2に結合され、メモリ管理ユニット(MMU)3を含むプロセッサ1を含む。このシステムはまた、カーネルソフトウェア命令を記録するために使用され得る読み出し専用メモリを含み得る。動作時においてクライアントプロセス102、サーバプロセス104、及びカーネル106は、ランダムアクセスメモリ2にアクセスしているプロセッサ上で走る、別個のソフトウェア命令スレッドとして存在する。
【0066】
携帯端末における種々の側面の具体的な実装が、図16に示されている。先に言及したように、種々の側面は、その制限されたプロセッサ及びメモリの能力から、携帯端末において、特に有益である。携帯電話、マルチメディア・インターネット対応の携帯電話、携帯情報端末(PDA)、電子音楽データブロック(例えばMP3)プレーヤ、及び/または無線電子メール受信機のいずれかであり得る携帯端末10。そのような携帯端末10は、ディスプレイ13及びメモリ12に結合されたプロセッサ11を含み得る。携帯端末10はまた、例えば携帯電話データ受信機、有線(例えばFireWire(登録商標))データリンク、Bluetooth(登録商標)無線データリンク、及び赤外データリンク(図示せず)のような、多くのデータの入力/出力インターフェースを含み得る。例えば、携帯端末10は、無線ネットワーク送信機/受信機ノード(図示せず)からの電磁信号を受信するアンテナ14、及びアンテナ14に接続され、無線信号を受信し、この信号をプロセッサ11に伝えられるデジタルデータに変換する無線送受信機15を含み得る。同様に、Bluetoothまたは同様のローカル無線データリンクは、受信した無線信号を、プロセッサ11に伝えられるデジタルデータに変換するWiFi(登録商標)、Bluetooth(登録商標)、WLAN、WiMax(登録商標)などの送受信機18に接続されたアンテナ14(または別個には示されていない別のアンテナ)を含み得る。データはまた、FireWire、USB、シリアル(例えばRS−232C)、またはイーサネット(登録商標)データリンクのような、有線データリンクの手段によって、携帯端末10から、及び携帯端末10へ送信され得る。例えば、データは、コネクタ19から受信されたデータを、プロセッサ11に伝えられるデジタルデータに変換するFireWireモデム回路20に結合されたFireWireデータコネクタ19を経由して、送信され得る。本技術において良く知られたように、他の有線データリンクは、特定のデータリンクに適切なように、同様の回路を含むだろう。携帯端末10内部のあらゆるデータ入力及び出力デバイスは、データ通信機能を実現するために、サーバプロセスとして、クライアントプロセス102によってアクセスされ得る。
【0067】
種々の側面は、述べられた方法の1つまたはそれ以上を実装するように構成されたソフトウェア命令を実行するプロセッサ11によって、実装され得る。そのようなソフトウェア命令は、デバイスのオペレーティングシステム、オペレーティングシステムによって実行されるAPI列、または実施形態の方法を実行するコンパイルされたソフトウェアとして、メモリ12に記録され得る。更に、ソフトウェア命令は、USB接続可能な外部メモリ(例えばフラッシュドライブ)、読み出し専用メモリ4、ハードディスクメモリデバイス、フロッピー(登録商標)ディスク、及びコンパクトディスクのような外部メモリチップまたはシステム内部のメモリチップ2、12のような、ランダムアクセスメモリ2、12及びモジュールを含む、実体のあるプロセッサ読み取り可能メモリのあらゆる形で記録され得る。
【0068】
当業者は、本明細書に開示された実施形態に関連して説明された例示的な種々の論理ブロック、モジュール、回路、及びアルゴリズムステップは、電子的なハードウェア、コンピュータソフトウェア、またはこれらの組み合わせとして実装され得ることを、理解するだろう。ハードウェアとソフトウェアが同義的であることを明確に示すために、種々の例示的な要素、ブロック、モジュール、回路、及びステップが、全般的にそれらの機能性の観点から説明されてきた。そのような機能性がハードウェアで実装されるかソフトウェアで実装されるかは、個々のアプリケーション及び全体のシステムに課せられた設計の制約に依存する。当業者は、上記の機能性を、各個別のアプリケーションにつき種々の方法で実装し得る。しかし、そのような実装の決定は、この発明の範囲からの逸脱を生じさせるものとして解釈されるべきでは無い。
【0069】
本明細書に開示された側面に関連して述べられた方法またはアルゴリズムのステップは、ハードウェア、プロセッサによって実行されるソフトウェアモジュール、またはこれら2つを組み合わせたものによって、直接的に具体化され得る。ソフトウェアモジュールは、RAMメモリ、フラッシュメモリ、ROMメモリ、EPROMメモリ、EEPROMメモリ、レジスタ、ハードディスク、リムーバブルディスク、CD−ROM、または本分野で既知の記録媒体のあらゆる形態内に存在し得る。典型的な記録媒体は、プロセッサがこの記録媒体から情報を読み出し、そして情報を書き込めるように、プロセッサに結合される。代わりに、記録媒体は、プロセッサに一体化されても良い。プロセッサと記録媒体は、特定用途向け集積回路(ASIC)内に存在し得る。ASICは、ユーザ端末内に存在し得る。あるいは、プロセッサと記録媒体は、ディスクリート要素としてユーザ端末内に存在し得る。更に、ある側面では、方法またはアルゴリズムのステップ及び/または動作は、機器読み取り可能な媒体及び/またはコンピュータ読み取り可能な媒体上のコード及び/または命令のセットまたは1つまたはあらゆる組み合わせとして存在することが出来、これらはコンピュータプログラム製品に組み込まれ得る。
【0070】
種々の側面が、従来技術に対する多くの利点を奏する。この実装は、従前のシステムにおける更なるオーバーヘッド、複雑化、及び制限を招くことなく、単一のコピーによって、呼び出している(例えばクライアント)プロセスと、読み出された(例えばサーバ)プロセスとの間で、入力及び出力データが移動されることを可能とする。例えば、本実装例では、サーバプロセスは、データ入力のサイズ及び/または位置を予測する必要がない。更にサーバプロセスは、クライアントプロセスに返された後に出力データのコピーを保持する必要が無い。また、サーバプロセスは、全ての入力または出力アーギュメントを同時にメモリに保持するための十分なメモリを有する必要が無い。大きなクラス(class)の機能については、種々の側面は、プロセス間コピーはリモート機能における潜在的なコピーをオーバーラップさせることが出来るので、マイクロカーネルアーキテクチャのデータ移動オーバーヘッドをゼロに削減する。例えばデータブロックからの読み出しの際には、クライアントプロセスへのコピーは、ファイルシステムキャッシュからクライアントバッファにメモリを移動出来る。このコピーは、リモート「読み出し」機能よって隠されるので、呼び出し側が同じプロセス内にある際でも求められるだろう。
【0071】
種々の側面/実装についての上記説明は、当業者に対して、本開示の作成または使用を可能とするために与えられる。これらの側面/実装の種々の変形が、当業者には用意に明らかであろう。そして本明細書で定義された原理は、本開示の思想または範囲から逸脱しない限りで、他の側面/実装に適用され得る。よって、本開示は、本明細書に示された側面/実装に限定されることを意図したものでは無く、むしろ、特許請求の範囲は、本明細書に開示された原理及び新規な特徴に一致する最も広い範囲に合致されるべきである。

【特許請求の範囲】
【請求項1】
カーネルを有するメモリ保護アーキテクチャにおけるデータのプロセス間通信を実行する方法であって、
前記カーネルにおいて、第1メモリ領域内部のクライアントプロセスによる、第2メモリ領域のオブジェクトの起動を要求するシステム呼び出しであって、入力データを含む前記第1メモリ領域におけるクライアント入力バッファと、出力データがコピーされる第1メモリ領域におけるクライアント出力バッファとを特定する前記システム呼び出しを実行することと、
前記カーネルにおいて、前記第2メモリ領域を、前記オブジェクトの位置として特定することと、
前記第2メモリ領域のサーバプロセスに前記起動の要求を通知することと、
前記カーネルにおいて、前記サーバプロセスによる入力データの入力要求であって、前記第2メモリ領域内の前記入力データの受信のためのサーバ入力バッファを特定する前記入力要求を実行することと、
入力データを、前記第1メモリ領域における前記クライアント入力バッファから、前記第2メモリ領域における前記サーバ入力バッファに、直接コピーすることと、
前記カーネルにおいて、前記第2メモリ領域から出力データをコピーするための出力要求であって、前記出力データを含むサーバ出力バッファを特定する前記出力要求を実行することと、
前記出力データを、前記第2メモリ領域における前記サーバ出力バッファから、前記第1メモリ領域における前記クライアント入力バッファに直接コピーすることと
を備える方法。
【請求項2】
前記システム呼び出しは、前記第1メモリ位置内のクライアントプロキシによって生成され、前記入力要求及び前記出力要求は、前記第2メモリ位置内のサーバプロキシによって生成される、請求項1の方法。
【請求項3】
前記サーバプロセスへの前記起動の要求の通知に先立って、前記入力データの少なくとも一部を前記第2メモリ領域にコピーすることを更に備える、請求項1の方法。
【請求項4】
前記システム呼び出しは、前記オブジェクトに対して、別のオブジェクトを起動する権限を与える入力パラメータ、または別のオブジェクトの起動の権限をクライアントプロセスに返す出力パラメータを含む、請求項1の方法。
【請求項5】
前記カーネルにおいて、入力バッファへの直接のアクセスのための読み出し可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行することと、
前記カーネルにおいて、出力バッファへの直接のアクセスのための書き込み可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行することと
を更に備え、前記カーネルは、前記クライアントプロセスによって特定された前記メモリへの適切な種類のアクセス権を前記サーバプロセスが有することを確認することによって、前記要求を満足させる、請求項1の方法。
【請求項6】
カーネルを有するメモリ保護アーキテクチャにおけるデータのプロセス間通信を実行する方法であって、
前記カーネルにおいて、クライアントプロセスによるシステム呼び出しであって、サーバプロセス内のオブジェクトの起動を要求し、入力データを含む入力バッファと、出力データがコピーされる出力バッファのメモリ位置を特定する前記システム呼び出しを実行することと、
前記入力バッファを読み出す権利及び前記出力バッファに書き込む権利を前記サーバプロセスに与えるよう、メモリ管理ユニットに対して指示することと、
前記起動の要求を、前記サーバプロセスに通知することと、
前記サーバプロセスに、前記特定されたメモリ位置を知らせることと、
前記カーネルにおいて、前記オブジェクトが起動されたことの通知を前記サーバプロセスから受信することと、
前記特定されたメモリ位置へのデータの読み出し及び書き込みの、サーバプロセスの権利を無効にするよう、前記メモリ管理ユニットに指示することと、
前記クライアントプロセスに実行の制御を返すことと
を備える方法。
【請求項7】
メモリ保護アーキテクチャと共に動作するコンピュータシステムであって、前記コンピュータシステムは、
メモリと、
前記メモリに結合され、カーネルプロセス、クライアントプロセス、及びサーバプロセスを含むプロセッサ実行可能な命令を実行するプロセッサと
を備え、前記クライアントプロセスは、第1メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記サーバプロセスは、第2メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記カーネルプロセスは、前記第1、第2メモリ領域及びカーネル領域へのメモリ読み出し書き込みアクセス権を有し、
前記プロセッサには、
前記カーネルにおいて、第1メモリ領域内部のクライアントプロセスによる、前記第2メモリ領域のオブジェクトの起動を要求するシステム呼び出しであって、前記入力データを含む前記第1メモリ領域におけるクライアント入力バッファと、出力データがコピーされる第1メモリ領域におけるクライアント出力バッファとを特定する前記システム呼び出しを実行することと、
前記カーネルにおいて、前記第2メモリ領域を、前記オブジェクトの位置として特定することと、
前記第2メモリ領域のサーバプロセスに前記起動の要求を通知することと、
前記カーネルにおいて、前記サーバプロセスによる入力データの入力要求であって、前記第2メモリ領域内の前記入力データの受信のためのサーバ入力バッファを特定する前記入力要求を実行することと
入力データを、前記第1メモリ領域における前記クライアント入力バッファから、前記第2メモリ領域における前記サーバ入力バッファに直接コピーすることと、
前記カーネルにおいて、前記第2メモリ領域から出力データをコピーするための出力要求であって、前記出力データを含むサーバ出力バッファを特定する前記出力要求を実行することと
前記出力データを、前記第2メモリ領域における前記サーバ出力バッファから、前記第1メモリ領域における前記クライアント入力バッファに直接コピーすることと
を備えたステップを実行するソフトウェア命令が組み込まれたコンピュータシステム。
【請求項8】
前記プロセッサには、前記システム呼び出しが、前記第1メモリ位置内のクライアントプロキシによって生成され、前記入力要求及び前記出力要求は、前記第2メモリ位置内のサーバプロキシによって生成されるように、ソフトウェア命令が組み込まれる、請求項7のコンピュータシステム。
【請求項9】
前記プロセッサには、前記サーバプロセスへの前記起動の要求の通知に先立って、前記入力データの少なくとも一部を前記第2メモリ領域にコピーすることを備えるステップを更に実行するソフトウェア命令が組み込まれる、請求項7のコンピュータシステム。
【請求項10】
前記プロセッサには、前記システム呼び出しが、前記オブジェクトに対して、別のオブジェクトを起動する権限を与える入力パラメータ、または別のオブジェクトの起動の権限をクライアントプロセスに返す出力パラメータを含むように、ソフトウェア命令が組み込まれる、請求項7のコンピュータシステム。
【請求項11】
前記プロセッサには、前記カーネルにおいて、入力バッファへの直接のアクセスのための読み出し可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行することと、
前記カーネルにおいて、出力バッファへの直接のアクセスのための書き込み可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行することと
を備えたステップを実行するソフトウェア命令が更に組み込まれ、
前記カーネルは、前記クライアントプロセスによって特定された前記メモリへの適切な種類のアクセス権を前記サーバプロセスが有することを確認することによって、前記要求を満足させる、請求項7のコンピュータシステム。
【請求項12】
メモリ保護アーキテクチャと共に動作するコンピュータシステムであって、前記コンピュータシステムは、
メモリと、
前記メモリに結合され、カーネルプロセス、クライアントプロセス、及びサーバプロセスを含むプロセッサ実行可能な命令を実行するプロセッサと
を備え、前記クライアントプロセスは、第1メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記サーバプロセスは、第2メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記カーネルプロセスは、前記第1、第2メモリ領域及びカーネル領域へのメモリ読み出し書き込みアクセス権を有し、
前記プロセッサには、
前記カーネルにおいて、クライアントプロセスによるシステム呼び出しであって、サーバプロセス内のオブジェクトの起動を要求し、入力データを含む入力バッファと、出力データがコピーされる出力バッファのメモリ位置を特定する前記システム呼び出しを実行することと、
前記入力バッファを読み出す権利及び前記出力バッファに書き込む権利を前記サーバプロセスに与えるよう、メモリ管理ユニットに対して指示することと、
前記起動の要求を、前記サーバプロセスに通知することと、
前記サーバプロセスに、前記特定されたメモリ位置を知らせることと、
前記カーネルにおいて、前記オブジェクトが起動されたことの通知を前記サーバプロセスから受信することと、
前記特定されたメモリ位置へのデータの読み出し及び書き込みの、サーバプロセスの権利を無効にするよう、前記メモリ管理ユニットに指示することと、
前記クライアントプロセスに実行の制御を返すことと
を備えたステップを実行するソフトウェア命令が組み込まれたコンピュータシステム。
【請求項13】
メモリ保護アーキテクチャと共に動作する携帯端末であって、コンピュータシステムは、
メモリと、
前記メモリに結合され、カーネルプロセス、クライアントプロセス、及びサーバプロセスを含むプロセッサ実行可能な命令を実行するプロセッサと
を備え、前記クライアントプロセスは、第1メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記サーバプロセスは、第2メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記カーネルプロセスは、前記第1、第2メモリ領域及びカーネル領域へのメモリ読み出し書き込みアクセス権を有し、
前記プロセッサには、
前記カーネルにおいて、第1メモリ領域内部のクライアントプロセスによる、前記第2メモリ領域のオブジェクトの起動を要求するシステム呼び出しであって、入力データを含む前記第1メモリ領域におけるクライアント入力バッファと、出力データがコピーされる第1メモリ領域におけるクライアント出力バッファとを特定する前記システム呼び出しを実行することと、
前記カーネルにおいて、前記第2メモリ領域を、前記オブジェクトの位置として特定することと、
前記第2メモリ領域のサーバプロセスに前記起動の要求を通知することと、
前記カーネルにおいて、サーバプロセスによる入力データの入力要求であって、前記第2メモリ領域内の前記入力データの受信のためのサーバ入力バッファを特定する前記入力要求を実行することと、
入力データを、前記第1メモリ領域における前記クライアント入力バッファから、前記第2メモリ領域における前記サーバ入力バッファに直接コピーすることと、
前記カーネルにおいて、前記第2メモリ領域から出力データをコピーするための出力要求であって、前記出力データを含むサーバ出力バッファを特定する前記出力要求を実行することと、
前記出力データを、前記第2メモリ領域における前記サーバ出力バッファから、前記第1メモリ領域における前記クライアント入力バッファに直接コピーすることと
を備えたステップを実行するソフトウェア命令が組み込まれた携帯端末。
【請求項14】
前記プロセッサには、前記システム呼び出しが、前記第1メモリ位置内のクライアントプロキシによって生成され、前記入力要求及び前記出力要求は、前記第2メモリ位置内のサーバプロキシによって生成されるように、ソフトウェア命令が組み込まれる、請求項13記載の携帯端末。
【請求項15】
前記プロセッサには、前記サーバプロセスへの前記起動の要求の通知に先立って、前記入力データの少なくとも一部を前記第2メモリ領域にコピーすることを備えるステップを更に実行するソフトウェア命令が組み込まれる、請求項13の携帯端末。
【請求項16】
前記プロセッサには、前記システム呼び出しが、前記オブジェクトに対して、別のオブジェクトを起動する権限を与える入力パラメータ、または別のオブジェクトの起動の権限をクライアントプロセスに返す出力パラメータを含むように、ソフトウェア命令が組み込まれる、請求項13の携帯端末。
【請求項17】
前記プロセッサには、前記カーネルにおいて、入力バッファへの直接のアクセスのための読み出し可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行することと、
前記カーネルにおいて、出力バッファへの直接のアクセスのための書き込み可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行することと
を備えたステップを実行するソフトウェア命令が組み込まれ、
前記カーネルは、前記クライアントプロセスによって特定された前記メモリへの適切な種類のアクセス権を前記サーバプロセスが有することを確認することによって、前記要求を満足させる、請求項13の携帯端末。
【請求項18】
メモリ保護アーキテクチャと共に動作する携帯端末であって、コンピュータシステムは、
メモリと、
前記メモリに結合され、カーネルプロセス、クライアントプロセス、及びサーバプロセスを含むプロセッサ実行可能な命令を実行するプロセッサと
を備え、前記クライアントプロセスは、第1メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記サーバプロセスは、第2メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記カーネルプロセスは、前記第1、第2メモリ領域及びカーネル領域へのメモリ読み出し書き込みアクセス権を有し、
前記プロセッサには、
前記カーネルにおいて、クライアントプロセスによるシステム呼び出しであって、サーバプロセス内のオブジェクトの起動を要求し、入力データを含む入力バッファと、出力データがコピーされる出力バッファのメモリ位置とを特定する前記システム呼び出しを実行することと、
前記入力バッファを読み出す権利及び前記出力バッファに書き込む権利を前記サーバプロセスに与えるよう、メモリ管理ユニットに対して指示することと、
前記起動の要求を、前記サーバプロセスに通知することと、
前記サーバプロセスに、前記特定されたメモリ位置を知らせることと、
前記カーネルにおいて、前記オブジェクトが起動されたことの通知を前記サーバプロセスから受信することと、
前記特定されたメモリ位置へのデータの読み出し及び書き込みの、サーバプロセスの権利を無効にするよう、前記メモリ管理ユニットに指示することと、
前記クライアントプロセスに実行の制御を返すことと
を備えたステップを実行するソフトウェア命令が組み込まれている携帯端末。
【請求項19】
プロセッサに実行可能な命令が記録されている、実体的なプロセッサ読み取り可能なメモリであって、前記命令は、メモリに結合されたプロセッサに対して、
前記カーネルにおいて、第1メモリ領域内部のクライアントプロセスによる、前記第2メモリ領域のオブジェクトの起動を要求するシステム呼び出しであって、入力データを含む前記第1メモリ領域におけるクライアント入力バッファと、出力データがコピーされる第1メモリ領域におけるクライアント出力バッファとを特定する前記システム呼び出しを実行することと、
前記カーネルにおいて、前記第2メモリ領域を、前記オブジェクトの位置として特定することと、
前記第2メモリ領域のサーバプロセスに前記起動の要求を通知することと、
前記カーネルにおいて、前記サーバプロセスによる入力データの入力要求であって、前記第2メモリ領域内の前記入力データの受信のためのサーバ入力バッファを特定する前記入力要求を実行することと、
前記第1メモリ領域における前記クライアント入力バッファから、入力データを前記第2メモリ領域における前記サーバ入力バッファに直接コピーすることと、
前記カーネルにおいて、前記第2メモリ領域から出力データをコピーするための出力要求であって、前記出力データを含むサーバ出力バッファを特定する前記出力要求を実行することと、
前記第2メモリ領域における前記サーバ出力バッファから、前記出力データを前記第1メモリ領域における前記クライアント入力バッファに直接コピーすることと
を備えたステップを実行させるように構成されている、実体的なプロセッサ読み取り可能なメモリ。
【請求項20】
前記記録されたプロセッサに実行可能な命令は、前記システム呼び出しが、前記第1メモリ位置内のクライアントプロキシによって生成され、前記入力要求及び前記出力要求は、前記第2メモリ位置内のサーバプロキシによって生成されるように更に構成される、請求項19の実体的なプロセッサ読み取り可能なメモリ。
【請求項21】
前記記録されたプロセッサに実行可能な命令は、前記プロセッサに対して、前記サーバプロセスへの前記起動の要求の通知に先立って、前記入力データの少なくとも一部を前記第2メモリ領域にコピーすることを更に備えるステップを実行させるように更に構成される、請求項19の実体的なプロセッサ読み取り可能なメモリ。
【請求項22】
前記記録されたプロセッサに実行可能な命令は、前記システム呼び出しが、前記オブジェクトに対して、別のオブジェクトを起動する権限を与える入力パラメータ、または別のオブジェクトの起動の権限をクライアントプロセスに返す出力パラメータを含むように構成される、請求項19の実体的なプロセッサ読み取り可能なメモリ。
【請求項23】
前記記録されたプロセッサに実行可能な命令は、前記プロセッサに対して、
前記カーネルにおいて、入力バッファへの直接のアクセスのための読み出し可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行することと、
前記カーネルにおいて、出力バッファへの直接のアクセスのための書き込み可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行することと
を更に備えたステップを実行させるように構成され、
前記カーネルは、前記クライアントプロセスによって特定された前記メモリへの適切な種類のアクセス権を前記サーバプロセスが有することを確認することによって、前記要求を満足させる、請求項19の実体的なプロセッサ読み取り可能なメモリ。
【請求項24】
プロセッサに実行可能な命令が記録されている、実体的なプロセッサ読み取り可能なメモリであって、前記命令は、メモリに結合されたプロセッサに対して、
前記カーネルにおいて、クライアントプロセスによるシステム呼び出しであって、サーバプロセス内のオブジェクトの起動を要求し、入力データを含む入力バッファと、出力データがコピーされる出力バッファのメモリ位置を特定する前記システム呼び出しを実行することと、
前記入力バッファを読み出す権利及び前記出力バッファに書き込む権利を前記サーバプロセスに与えるよう、メモリ管理ユニットに対して指示することと、
前記起動の要求を、前記サーバプロセスに通知することと、
前記サーバプロセスに、前記特定されたメモリ位置を知らせることと、
前記カーネルにおいて、前記オブジェクトが起動されたことの通知を前記サーバプロセスから受信することと、
前記特定されたメモリ位置へのデータの読み出し及び書き込みの、サーバプロセスの権利を無効にするよう、前記メモリ管理ユニットに指示することと、
前記クライアントプロセスに実行の制御を返すことと
を備えたステップを実行させるように構成されている、実体的なプロセッサ読み取り可能なメモリ。
【請求項25】
システムの主たる動作を制御するカーネル手段と、
第1メモリ領域内のクライアントプロセスと、
第2メモリ領域内のサーバプロセスと、
前記クライアントプロセスによるシステム呼び出しであって、前記サーバプロセス内のオブジェクトの起動を要求し、入力データを含む前記第1メモリ領域におけるクライアント入力バッファと、出力データがコピーされる第1メモリ領域におけるクライアント出力バッファとを特定する前記システム呼び出しを実行する手段と、
前記カーネルにおいて、前記第2メモリ領域を、前記オブジェクトの位置として特定する手段と、
前記第2メモリ領域のサーバプロセスに前記起動の要求を通知する手段と、
前記カーネルにおいて、前記サーバプロセスによる入力データの入力要求であって、前記第2メモリ領域内の前記入力データの受信のためのサーバ入力バッファを特定する前記入力要求を実行する手段と、
入力データを、前記第1メモリ領域における前記クライアント入力バッファから、前記第2メモリ領域における前記サーバ入力バッファに直接コピーする手段と、
前記第2メモリ領域から出力データをコピーするための出力要求であって、前記出力データを含むサーバ出力バッファを特定する前記出力要求を受信する手段と、
前記出力データを、前記第2メモリ領域における前記サーバ出力バッファから、前記第1メモリ領域における前記クライアント入力バッファに直接コピーする手段と
を備えるシステム。
【請求項26】
前記システム呼び出しは、前記第1メモリ位置内のクライアントプロキシによって生成され、前記入力要求及び前記出力要求は、前記第2メモリ位置内のサーバプロキシによって生成される、請求項25のシステム。
【請求項27】
前記サーバプロセスへの前記起動の要求の通知に先立って、前記入力データの少なくとも一部を前記第2メモリ領域にコピーすることを更に備える、請求項25のシステム。
【請求項28】
前記システム呼び出しは、前記オブジェクトに対して、別のオブジェクトを起動する権限を与える入力パラメータ、または別のオブジェクトの起動の権限をクライアントプロセスに返す出力パラメータを含む、請求項25のシステム。
【請求項29】
前記カーネルにおいて、入力バッファへの直接のアクセスのための読み出し可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行する手段と、
前記カーネルにおいて、出力バッファへの直接のアクセスのための書き込み可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行する手段と
を更に備え、
前記カーネルは、前記クライアントプロセスによって特定された前記メモリへの適切な種類のアクセス権を前記サーバプロセスが有することを確認することによって、前記要求を満足させる、請求項25のシステム。
【請求項30】
システムの主たる動作を制御するカーネル手段と、
第1メモリ領域内のクライアントプロセスと、
第2メモリ領域内のサーバプロセスと、
前記カーネルにおいて、クライアントプロセスによるシステム呼び出しであって、サーバプロセス内のオブジェクトの起動を要求し、入力データを含む入力バッファと、出力データがコピーされる出力バッファのメモリ位置を特定する前記システム呼び出しを実行する手段と、
前記入力バッファを読み出す権利及び前記出力バッファに書き込む権利を前記サーバプロセスに与えるよう、メモリ管理ユニットに対して指示する手段と、
前記起動の要求を、前記サーバプロセスに通知する手段と、
前記サーバプロセスに、前記特定されたメモリ位置を知らせる手段と、
前記カーネルにおいて、前記オブジェクトが起動されたことの通知を前記サーバプロセスから受信する手段と、
前記特定されたメモリ位置へのデータの読み出し及び書き込みの、サーバプロセスの権利を無効にするよう、前記メモリ管理ユニットに指示する手段と、
前記クライアントプロセスに実行の制御を返す手段と
を備えるシステム。
【請求項31】
コンピュータ読み取り可能な媒体を備えたコンピュータプログラム製品であって、前記コンピュータ読み取り可能な媒体は、
コンピュータに対して、前記カーネルにおいて、第1メモリ領域内部のクライアントプロセスによる、前記第2メモリ領域のオブジェクトの起動を要求するシステム呼び出しであって、入力データを含む前記第1メモリ領域におけるクライアント入力バッファと、出力データがコピーされる第1メモリ領域におけるクライアント出力バッファとを特定する前記システム呼び出しを実行させる、少なくとも一つの命令と、
コンピュータに対して、前記カーネルにおいて、前記第2メモリ領域を前記オブジェクトの位置として特定させる、少なくとも一つの命令と、
コンピュータに対して、前記第2メモリ領域のサーバプロセスに前記起動の要求を通知させる、少なくとも一つの命令と、
コンピュータに対して、前記カーネルにおいて、前記サーバプロセスによる入力データの入力要求であって、前記第2メモリ領域内の前記入力データの受信のためのサーバ入力バッファを特定する前記入力要求を実行させる、少なくとも一つの命令と、
コンピュータに対して、前記第1メモリ領域における前記クライアント入力バッファから、入力データを前記第2メモリ領域における前記サーバ入力バッファに直接コピーさせる、少なくとも一つの命令と、
コンピュータに対して、前記カーネルにおいて、前記第2メモリ領域から出力データをコピーするための出力要求であって、前記出力データを含むサーバ出力バッファを特定する前記出力要求を実行させる、少なくとも一つの命令と、
コンピュータに対して、前記第2メモリ領域における前記サーバ出力バッファから、前記出力データを前記第1メモリ領域における前記クライアント入力バッファに直接コピーさせる、少なくとも一つの命令と
を備えたコンピュータプログラム製品。
【請求項32】
前記コンピュータ読み取り可能な媒体は、
コンピュータに対して、前記第1メモリ位置内のクライアントプロキシにおいて、前記システム呼び出しを生成させる、少なくとも一つの命令と、
コンピュータに対して、前記第2メモリ位置内のサーバプロキシにおいて、前記入力要求及び前記出力要求を生成させる、少なくとも一つの命令と
を更に備える、請求項31のコンピュータプログラム製品。
【請求項33】
前記コンピュータ読み取り可能な媒体は、
コンピュータに対して、前記サーバプロセスへの前記起動の要求の通知に先立って、前記入力データの少なくとも一部を前記第2メモリ領域にコピーさせる、少なくとも一つの命令を更に備える、請求項31のコンピュータプログラム製品。
【請求項34】
前記コンピュータ読み取り可能な媒体は、
コンピュータに対して、前記オブジェクトに別のオブジェクトを起動する権限を与える入力パラメータ、または別のオブジェクトの起動の権限をクライアントプロセスに返す出力パラメータを含む前記システム呼び出しを生成させる、少なくとも一つの命令を更に備える、請求項31のコンピュータプログラム製品。
【請求項35】
前記コンピュータ読み取り可能な媒体は、
コンピュータに対して、前記カーネルにおいて、入力バッファへの直接のアクセスのための読み出し可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行させる、少なくとも一つの命令と、
コンピュータに対して、前記カーネルにおいて、出力バッファへの直接のアクセスのための書き込み可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行させる、少なくとも一つの命令と、
を備え、前記カーネルは、前記クライアントプロセスによって特定された前記メモリへの適切な種類のアクセス権を前記サーバプロセスが有することを確認することによって、前記要求を満足させる、請求項31のコンピュータプログラム製品。
【請求項36】
コンピュータ読み取り可能な媒体を備えたコンピュータプログラム製品であって、前記コンピュータ読み取り可能な媒体は、
コンピュータに対して、前記カーネルにおいて、クライアントプロセスによるシステム呼び出しであって、サーバプロセス内のオブジェクトの起動を要求し、入力データを含む入力バッファと、出力データがコピーされる出力バッファのメモリ位置を特定する前記システム呼び出しを実行させる、少なくとも一つの命令と、
コンピュータに対して、前記入力バッファを読み出す権利及び前記出力バッファに書き込む権利を前記サーバプロセスに与えるよう、メモリ管理ユニットに指示させる、少なくとも一つの命令と、
コンピュータに対して、前記起動の要求を、前記サーバプロセスに通知させる、少なくとも一つの命令と、
コンピュータに対して、前記サーバプロセスに前記特定されたメモリ位置を通知させる、少なくとも一つの命令と、
コンピュータに対して、前記カーネルにおいて、前記オブジェクトが起動されたことの通知を前記サーバプロセスから受信させる、少なくとも一つの命令と、
コンピュータに対して、前記特定されたメモリ位置へのデータの読み出し及び書き込みの、サーバプロセスの権利を無効にするよう、前記メモリ管理ユニットに指示させる、少なくとも一つの命令と、
コンピュータに対して、前記クライアントプロセスに実行の制御を返させる、少なくとも一つの命令と
を備えたコンピュータプログラム製品。
【請求項37】
カーネルインターフェースと、
前記カーネルインターフェースと通信するカーネルプロセスと
を備え、前記カーネルプロセスは、間に介在するコピー動作を行うことなく、第1保護領域と第2保護領域との間でデータを直接コピーするように動作可能である、コンピュータシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5A】
image rotate

【図5B】
image rotate

【図6A】
image rotate

【図6B】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate


【公表番号】特表2010−511255(P2010−511255A)
【公表日】平成22年4月8日(2010.4.8)
【国際特許分類】
【出願番号】特願2009−539474(P2009−539474)
【出願日】平成19年11月29日(2007.11.29)
【国際出願番号】PCT/US2007/085878
【国際公開番号】WO2008/067435
【国際公開日】平成20年6月5日(2008.6.5)
【出願人】(595020643)クゥアルコム・インコーポレイテッド (7,166)
【氏名又は名称原語表記】QUALCOMM INCORPORATED
【Fターム(参考)】