(57)【特許請求の範囲】
【請求項１】
カーネルを有するメモリ保護アーキテクチャにおけるデータのプロセス間通信を実行する方法であって、
クライアントプロセスによって実行され、且つサーバプロセス内のオブジェクトの起動を要求すると共に、入力データを含む入力バッファと、出力データがコピーされる出力バッファのメモリ位置を特定するシステム呼び出しに応答して、カーネルプロセスを実行するプロセッサが、前記入力バッファを読み出す権利及び前記出力バッファに書き込む権利を前記サーバプロセスに与えるよう、メモリ管理ユニットに対して指示することと、
前記カーネルプロセスを実行するプロセッサが、前記起動の要求を、前記サーバプロセスに通知することと、
前記カーネルプロセスを実行するプロセッサが、前記サーバプロセスに、前記特定されたメモリ位置を知らせることと、
前記カーネルプロセスを実行するプロセッサが、前記オブジェクトが起動されたことの通知を前記サーバプロセスから受信することと、
前記カーネルプロセスを実行するプロセッサが、前記特定されたメモリ位置へのデータの読み出し及び書き込みの、前記サーバプロセスの権利を無効にするよう、前記メモリ管理ユニットに指示することと、
前記カーネルプロセスを実行するプロセッサが、前記クライアントプロセスに実行の制御を返すことと
を備える方法。
【請求項２】
メモリ保護アーキテクチャと共に動作するコンピュータシステムであって、前記コンピュータシステムは、
メモリと、
前記メモリに結合され、カーネルプロセス、クライアントプロセス、及びサーバプロセスを含むプロセッサ実行可能な命令を実行するプロセッサと
を備え、前記クライアントプロセスは、第１メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記サーバプロセスは、第２メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記カーネルプロセスは、前記第１、第２メモリ領域及びカーネル領域へのメモリ読み出し書き込みアクセス権を有し、
前記プロセッサには、
前記クライアントプロセスによって実行され、且つ前記サーバプロセス内のオブジェクトの起動を要求すると共に、入力データを含む入力バッファと、出力データがコピーされる出力バッファのメモリ位置を特定するシステム呼び出しに応答して、前記カーネルプロセスにおいて、前記入力バッファを読み出す権利及び前記出力バッファに書き込む権利を前記サーバプロセスに与えるよう、メモリ管理ユニットに対して指示することと、
前記起動の要求を、前記サーバプロセスに通知することと、
前記サーバプロセスに、前記特定されたメモリ位置を知らせることと、
前記カーネルプロセスにおいて、前記オブジェクトが起動されたことの通知を前記サーバプロセスから受信することと、
前記特定されたメモリ位置へのデータの読み出し及び書き込みの、前記サーバプロセスの権利を無効にするよう、前記メモリ管理ユニットに指示することと、
前記クライアントプロセスに実行の制御を返すことと
を備えたステップを実行するソフトウェア命令が組み込まれたコンピュータシステム。
【請求項３】
メモリ保護アーキテクチャと共に動作する携帯端末であって、前記携帯端末は、
メモリと、
前記メモリに結合され、カーネルプロセス、クライアントプロセス、及びサーバプロセスを含むプロセッサ実行可能な命令を実行するプロセッサと
を備え、前記クライアントプロセスは、第１メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記サーバプロセスは、第２メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記カーネルプロセスは、前記第１、第２メモリ領域及びカーネル領域へのメモリ読み出し書き込みアクセス権を有し、
前記プロセッサには、
前記クライアントプロセスによって実行され、且つ前記サーバプロセス内のオブジェクトの起動を要求すると共に、入力データを含む入力バッファと、出力データがコピーされる出力バッファのメモリ位置を特定するシステム呼び出しに応答して、前記カーネルプロセスにおいて、前記入力バッファを読み出す権利及び前記出力バッファに書き込む権利を前記サーバプロセスに与えるよう、メモリ管理ユニットに対して指示することと、
前記起動の要求を、前記サーバプロセスに通知することと、
前記サーバプロセスに、前記特定されたメモリ位置を知らせることと、
前記カーネルプロセスにおいて、前記オブジェクトが起動されたことの通知を前記サーバプロセスから受信することと、
前記特定されたメモリ位置へのデータの読み出し及び書き込みの、前記サーバプロセスの権利を無効にするよう、前記メモリ管理ユニットに指示することと、
前記クライアントプロセスに実行の制御を返すことと
を備えたステップを実行するソフトウェア命令が組み込まれている携帯端末。
【請求項４】
プロセッサに実行可能な命令が記録されている、プロセッサ読み取り可能な実体的なメモリであって、前記命令は、メモリに結合されたプロセッサに対して、
クライアントプロセスによって実行され、且つサーバプロセス内のオブジェクトの起動を要求すると共に、入力データを含む入力バッファと、出力データがコピーされる出力バッファのメモリ位置を特定するシステム呼び出しに応答して、カーネルプロセスにおいて、前記入力バッファを読み出す権利及び前記出力バッファに書き込む権利を前記サーバプロセスに与えるよう、メモリ管理ユニットに対して指示することと、
前記起動の要求を、前記サーバプロセスに通知することと、
前記サーバプロセスに、前記特定されたメモリ位置を知らせることと、
前記カーネルプロセスにおいて、前記オブジェクトが起動されたことの通知を前記サーバプロセスから受信することと、
前記特定されたメモリ位置へのデータの読み出し及び書き込みの、前記サーバプロセスの権利を無効にするよう、前記メモリ管理ユニットに指示することと、
前記クライアントプロセスに実行の制御を返すことと
を備えたステップを実行させるように構成されている、プロセッサ読み取り可能な実体的なメモリ。
【請求項５】
システムの主たる動作を制御するカーネル手段と、
第１メモリ領域内のクライアントプロセスと、
第２メモリ領域内のサーバプロセスと、
前記クライアントプロセスによって実行され、且つ前記サーバプロセス内のオブジェクトの起動を要求すると共に、入力データを含む入力バッファと、出力データがコピーされる出力バッファのメモリ位置を特定するシステム呼び出しに応答して、前記カーネル手段において、前記入力バッファを読み出す権利及び前記出力バッファに書き込む権利を前記サーバプロセスに与えるよう、メモリ管理ユニットに対して指示する手段と、
前記起動の要求を、前記サーバプロセスに通知する手段と、
前記サーバプロセスに、前記特定されたメモリ位置を知らせる手段と、
前記カーネル手段において、前記オブジェクトが起動されたことの通知を前記サーバプロセスから受信する手段と、
前記特定されたメモリ位置へのデータの読み出し及び書き込みの、前記サーバプロセスの権利を無効にするよう、前記メモリ管理ユニットに指示する手段と、
前記クライアントプロセスに実行の制御を返す手段と
を備えるシステム。
【請求項６】
コンピュータ読み取り可能な記録媒体であって、
コンピュータに対して、クライアントプロセスによって実行され、且つサーバプロセス内のオブジェクトの起動を要求すると共に、入力データを含む入力バッファと、出力データがコピーされる出力バッファのメモリ位置を特定するシステム呼び出しに応答して、カーネルにおいて、前記入力バッファを読み出す権利及び前記出力バッファに書き込む権利を前記サーバプロセスに与えるよう、メモリ管理ユニットに指示させる、少なくとも一つの命令と、
コンピュータに対して、前記起動の要求を、前記サーバプロセスに通知させる、少なくとも一つの命令と、
コンピュータに対して、前記サーバプロセスに前記特定されたメモリ位置を通知させる、少なくとも一つの命令と、
コンピュータに対して、前記カーネルにおいて、前記オブジェクトが起動されたことの通知を前記サーバプロセスから受信させる、少なくとも一つの命令と、
コンピュータに対して、前記特定されたメモリ位置へのデータの読み出し及び書き込みの、前記サーバプロセスの権利を無効にするよう、前記メモリ管理ユニットに指示させる、少なくとも一つの命令と、
コンピュータに対して、前記クライアントプロセスに実行の制御を返させる、少なくとも一つの命令と
を備えたコンピュータ読み取り可能な記録媒体。
【請求項７】
カーネルインターフェースを備え、
前記カーネルプロセスは、前記カーネルインターフェースと通信し、
前記カーネルプロセスは、間に介在するコピー動作を行うことなく、第１保護領域と第２保護領域との間でデータを直接コピーするように動作可能である、請求項２のコンピュータシステム。
【発明の詳細な説明】
【米国特許法第１１９条の優先権の主張】
【０００１】
この特許出願は、２００６年１１月２９日に出願され、本願の譲受人に譲受され、そして参照により本願に明示的に組み込まれる、“METHODS, SYSTEMS, AND APPARATUS FOR OBJECT INVOCATION ACROSS PROTECTION DOMAIN BOUNDARIES”と表題された米国仮出願番号６０／８６７，７８７に基づく優先権を主張する。
【技術分野】
【０００２】
述べられた側面は、データ処理方法に関し、より具体的には、異なる保護領域に分離されたコンピュータシステムにおける保護領域境界を越えて、効率的にオブジェクトを起動し、またデータをコピーする方法に関する。
【背景技術】
【０００３】
保護されたモードのオペレーティングシステムを実装するコンピュータシステムは、物理メモリを、特定のプロセッサによってアクセス可能な、分離された仮想アドレス空間または領域、すなわち保護領域に分割する。あるメモリは、コンピュータシステムのカーネルに割り当てられ、これによってのみアクセス可能とされ得る一方（カーネル空間またはカーネル領域と呼ばれる）、他のメモリは、アプリケーションによってアクセス可能とされる（ユーザ空間またはユーザ領域と呼ばれる）。複数のプロセスが同時に動作する際、各プロセスは、その自身の仮想メモリ空間またはメモリ領域に割り当てられ、明示的に与えられない限り、他のプロセスのメモリ領域にはアクセス出来ない。このメモリ領域の保護は、プロセスがお互いにまたはシステムの動作に干渉する機会を低減することで、システムの信頼性を向上させる。
【０００４】
多くの動作において、ある保護領域におけるユーザプロセスは、別の保護領域にある（例えば記録され、または実行されている）オブジェクトまたは機能を呼び出す、またはアクセスする必要がある場合がある。このようなシチュエーションにおいてシステムは、各保護領域を越えた通信を可能にする必要がある。このようなプロセス間の通信を提供するための多くの方法には、“パイプ”、カーネルサービス、メッセージパッシング、仮想メモリ再配置、及び共有メモリが含まれる。しかしながら、そのような従来からある方法は、望ましくない効率低下を呈する。
【０００５】
例えば、保護領域システムは、まず、あるユーザの保護メモリ領域からカーネル領域にデータをコピーし、次に同じデータをカーネル領域から別のユーザの保護領域のメモリ空間にコピーすることによって、プロセス間の通信を提供するパイプを実装し得る。入力及び出力データが通信されることが必要なリモートオブジェクト呼び出しの場合には、このプロセスは、出力データが保護領域を越えて、リモートオブジェクト呼び出しを主導したプロセスに返される際に、繰り返される。よって、パイプを使用したプロセス間通信は、各方向において２回の別個のコピー動作が伴い、非効率である。
【０００６】
共有メモリもまた、プロセス間通信において使用され得る。しかし、共有メモリの実装には、２つの保護領域が、非一般的（non-generic）なデータ共有スキームに一致することが求められる。言うまでもなく、起動しているプロセスは、受信したプロセスがデータを受信する方法を予測する必要があるため、非一般的なデータ共有スキームの一致は、容易には得られない。
【発明の概要】
【０００７】
種々の側面が、効率的にリモートプロセス呼び出しを起動し、保護メモリアーキテクチャシステムにおけるプロセス間通信を容易にする方法を提供する。一側面では、システム呼び出しによるオブジェクトのリモート起動をサポートするカーネルが提供される。そのようなシステム呼び出しは、オブジェクト識別子と、入力及び出力バッファへのメモリポインタのセットを含み得る。このシステム呼び出しを用いてカーネルは、サーバプロセス領域内で特定のオブジェクトを検索し、サーバ領域内のサーバスレッドを呼び起こしてオブジェクトを起動することが出来る。与えられたメモリポインタを使用してカーネルは、入力データをサーバプロセスにコピー出来、そして出力データをサーバプロセスからクライアントプロセスにコピー出来る。
【０００８】
別の側面では、サーバスレッドにおいて、入力データを要求出来るよう、また完了した要求に応答出来るように、１つまたはそれ以上の更なるシステム呼び出しが実施され得る。一実施例では、このシステム呼び出しは、起動されたサーバプロセスに、入力データを特定のアドレスにコピーさせ、または出力バッファを特定のデータでフィル（fill）させる。一側面では、カーネルは、アーギュメントをコピー出来、リモートオブジェクトの起動のコンテキスト内の要求を有効に出来、そしてクライアントプロセスによって与えられた入力及び出力の記述を使用することが出来る。一実施例では、起動されたオブジェクトは、一実施例では、起動されたオブジェクトは、クライアントの入力バッファから（他の何らかのクライアントメモリからでは無い）読み出すことが出来、クライアントの出力バッファに（他の何らかのクライアントメモリへでは無い）書き込むことが出来る。
【０００９】
更に別の側面では、起動されたオブジェクトは、カーネル領域またはサーバプロセス領域内に存在し得る。別の側面では、カーネルへのシステム呼び出し内のアーギュメントは、他のオブジェクトを起動する能力（例えば、機能など）を有するオブジェクトを参照するオブジェクトリファレンスを含み得る。別の側面ではカーネルは、起動の開始の間、制限された量の入力データをコピーすることができ、また進行する呼び出しの終了の間、制限された量の出力データを、コピーし得る。更に別の側面では、アーギュメントは、各起動されたスレッドに関連付けられた共有メモリバッファ内に置かれることが出来、起動されたオブジェクトの保護領域によってデータは読み出し可能及び書き込み可能となる。
【００１０】
開示された側面は、例示であって且つ開示された側面を限定するものでは無く、同様の符号が要素を示す、添付された図面と共に、以下で説明されるだろう。
【図面の簡単な説明】
【００１１】
【図１】図１は、一側面に従った、異なる保護領域に分割されたコンピュータシステムのプログラム状態の概略図である。
【図２】図２は、一実施例に従った、図１に例示された側面におけるプロセス間通信の起動フロー図である。
【図３】図３は、一側面に従った、図１に例示された側面を実施する方法例のプロセスフロー図である。
【図４】図４は、別の側面に従った、異なる保護領域に分割されたコンピュータシステムのプログラム状態の概略図である。
【図５Ａ】図５Ａは、一側面に従った、図４に例示された側面を実施する方法例のプロセスフロー図である。
【図５Ｂ】図５Ｂは、一側面に従った、図４に例示された側面を実施する方法例のプロセスフロー図である。
【図６Ａ】図６Ａは、別の側面に従った、起動されているリモートオブジェクトがカーネル内にある、コンピュータシステムのプログラム状態の概略図である。
【図６Ｂ】図６Ｂは、別の側面に従った、起動されているリモートオブジェクトがカーネル内にある、コンピュータシステムのプログラム状態の概略図である。
【図７】図７は、一側面に従った、図６Ａ及び図６Ｂに例示された側面におけるプロセス間通信の起動フロー図である。
【図８】図８は、別の側面に従った、図６Ａ及び図６Ｂに例示された側面を実施する方法例のプロセスフロー図である。
【図９】図９は、一側面に従った、データブロックシステム内にあるオブジェクトに直接アクセスする権限を与えられた、リモートオブジェクトのリモート起動の期間における、システムのプログラム状態の概略図である。
【図１０】図１０は、他に取り得る側面における、プロセス間通信の起動フロー図である。
【図１１】図１１は、一側面に従った、図１０に例示された側面を実施する方法例のプロセスフロー図である。
【図１２】図１２は、別の側面に従った、クライアントプロセスとサーバプロセスがメモリ領域を共有するオブジェクトの、クライアントプロセスによるリモート起動の期間における、システムのプログラム状態の概略図である。
【図１３】図１３は、一側面に従った、図１２に例示された側面を実施する方法例のプロセスフロー図である。
【図１４】図１４は、一側面に従った、図１２に例示された側面を実施する、別の取り得る方法のプロセスフロー図である。
【図１５】図１５は、種々の側面の実施に適切なシステムのシステムブロック図である。
【図１６】図１６は、種々の側面の携帯端末実装の要素ブロック図である。
【発明を実施するための形態】
【００１２】
このシステム、デバイス、装置、方法、コンピュータプログラム製品、及び機器読み取り可能な媒体が、述べられた側面が示される添付図面を参照して、以下で詳細に説明されるだろう。このシステム、デバイス、装置、方法、及び機器読み取り可能な媒体は、しかしながら、多くの様々な形態で実施されることが出来、本明細書で説明される側面に限定されるものとして解釈されるべきではなく、むしろこの側面は、主題となる開示は十分に且つ完結するように提供され、そして本発明の範囲を当業者に表すだろう。同じ符号は、全体において同じ要素を指す。
【００１３】
上記に加えて、用語「典型的」は、本明細書では例（example）、事例（instance）、または例証（illustration）であることを意味するために使用される。「典型的」として本明細書で説明されるあらゆる側面または図案は、他の側面または図案に対して好ましくまた有利であるものとして解釈される必要は無い。むしろ、典型的なる用語の使用は、具体的な方法における考え方を提示することを意図している。
【００１４】
本明細書において使用される用語「カーネル」は、当業者によって理解されるように、メモリ保護プロセッサアーキテクチャにおける信頼されたプロセス（trusted process）を指す。コンピュータ科学において、カーネルは一般的に、ソフトウェアプロセスとハードウェア要素との間の通信を含む、システムリソースの管理に関与するコンピュータオペレーティングシステムの中心となる要素である。よって、コンピュータ科学技術の当業者によって理解されるように、カーネルは、オペレーティングシステムまたはマイクロカーネルアーキテクチャにおける１つまたはそれ以上のマイクロカーネルであり得る。
【００１５】
説明の簡略化のため、本明細書における「クライアントプロセス」、「ユーザプロセス」及び「サーバプロセス」への言及は、保護領域システム内の分離されたプロセス及びメモリ領域を示すために使用される。より具体的には、「クライアントプロセス」及び「ユーザプロセス」への言及は、機能の呼び出し、またはリモートオブジェクト、動作、または方法の読み出しのソースを特定することを意図している一方、用語「サーバプロセス」は、クライアントプロセスに直接アクセス出来ない方法、動作、または起動されたオブジェクトを主導するメモリ領域または分離されたプロセスを特定することを意図している。そのような分離されたプロセス及び領域は、同じコンピュータ（例えばプロセス及びメモリ）内部に含まれ得る。従って、「クライアント」及び「サーバ」への言及は、特許請求の範囲をある特定のクライアント−サーバアーキテクチャに限定し、または分離されたプロセッサまたはネットワークプロセッサを指すように理解されるべきでは無い。
【００１６】
本明細書において、プロセス、及びカーネルの、「システム呼び出しの実行」、及びお互いにメッセージを「送信すること」及び「通信すること」に対する言及がなされている。そのような言及は、システム内部における分離されたプロセス間の動作を調整するための、コンピュータ技術において知られた全ての方法を包含することを意図している。通常の当業者に理解されるように、そのような方法は、メモリにフラグをセットすることや、特定の値をメモリ（例えばプロセッサスタック）に保持させること、ステートマシンの状態の変化を示すこと、プロセスの割り込みを送信またはセットすること、保護領域を越えてシンボルを送信すること、等を含む。説明の簡単化のため、「送信する（sending）」及び「受信する（receiving）」プロセスが同じ物理的なプロセッサ及びメモリ空間内部で実行されているとしても、システム呼び出しの実行は、要求と情報が保護領域間で渡されていることを反映するために、メッセージを「送信する（sending）」または「通信する（communicating）」と呼ばれ得る。よって、メッセージを「通信する（communicating）」または「送信する（sending）する」ことについての言及は、説明または特許請求の範囲を、特定のタイプの通信またはメッセージプロトコルに限定されるものとして理解されるべきでは無く、またシステム呼び出しの「実行（execution）」以上に異なるタイプのプロセス間通信を必要とするものに限定されるもとして理解されるべきでも無い。
【００１７】
本明細書において、用語「バッファ」は、大きいランダムアクセスメモリ内部におけるメモリ空間のような、特定のデータを保持可能なメモリ位置を指す。本明細書において、用語「保護領域（protection domain）」及び「領域（domain）」は、特定のプロセスに割り当てられたメモリアドレス空間を指し、大きいランダムアクセスメモリ内部におけるメモリ空間であり得る。バッファ、保護領域、及び領域への言及は、分離されたメモリデバイスが要求されることを意味することを意図しているものではないが、種々のメモリ位置は、分離されたランダムアクセスメモリ及びシステム内部のディスクドライブ内にあっても良い。
【００１８】
一側面において、カーネルは、呼び出しているプロセスの外にあるオブジェクトの同期起動のためのシステム呼び出しを与えることによって、オブジェクトのリモート起動をサポートするメモリ保護アーキテクチャを有するシステムに与えられる。このシステム呼び出しは引数として、起動されているオブジェクトについての識別子、起動されたオブジェクトに利用可能とされるデータを含む入力バッファへのポインタのセット、及び起動されたオブジェクトがデータを保存し得る出力バッファへのポインタのセット、を受け取り、または含む。典型的なシステム呼び出しは、SysCall(INVOKE, nObjID, input buffer, output buffer)のように出現し得る。システム呼び出しを用いることでカーネルは、特定のオブジェクトを分離されたサーバ領域で検索することが出来、サーバ領域内のサーバスレッド（server thread）を呼び起こして（awaken）オブジェクトを起動できる。
【００１９】
全体の概観として、１つまたはそれ以上の説明された側面は、メモリ保護システムアーキテクチャにおいて、効率的な、プロセス間の同期通信とリモートオブジェクト呼び出しの抽出を可能とする、カーネルの動作を提供する。１つまたはそれ以上の側面によれば、この方法は、カーネル内部、または厳密にはメモリ保護を実行しないが、それをシミュレートする他のシステムにおいて、実施され得る。種々の側面は、保護されたメモリのアーキテクチャを特徴づけるコンピュータベースのシステムにおいて実装され得るが、とりわけ、消費家電のような、制限されたプロセッサ能力を有するシステムに適用出来る。注目すべき側面は、保護されたメモリのアーキテクチャにおける１つまたはそれ以上の側面の方法を実行するオペレーティングシステムを実装したメモリとプロセッサを有する携帯端末（例えば携帯電話）である。
【００２０】
図１は、一側面に従った、異なる保護領域に分割されたコンピュータシステムのプログラム状態１００の概略図である。システムは、カーネル保護領域を有するカーネル１０６と、それぞれがメモリ保護領域を有するクライアント及びサーバプロセス１０２、１０４を含む。図２は、クライアント及びサーバプロセス１０２、１０４とカーネル１０６との間の通信を例示する起動フロー図２００である。この形態を実施する方法の動作ステップの例は、図３に示されるプロセスフロー図に例示されている。
【００２１】
図１、２及び３を一緒に参照して、クライアントプロセス１０２は、カーネル１０６に対してシステム呼び出し１１６を実行する（ステップ３０２）ことにより、サーバプロセス１０４内にあるリモートオブジェクトＢ１０８上で動作する機能を起動する。システム呼び出し１１６のアーギュメント（argument）として、クライアントプロセス１０２はアーギュメントとしての、オブジェクトＢ１０８のローカルオブジェクト識別子と、起動されたオブジェクトによって要求される入力データを含むクライアントプロセスのメモリ空間におけるバッファアドレスへのメモリポインタとを含む。システム呼び出し１１６はまた、起動されたオブジェクトから渡される出力データがコピーされるクライアントプロセスのメモリ空間における、バッファアドレスへのメモリポインタを含み得る。図１に例示された典型的な側面において、クライアントプロセス１０２は、カーネル１０６に対して、サーバプロセス１０４内のオブジェクトＢ１０８（バッファ１１０、１１２に保持された２つの入力を要求する機能）の起動を要求するシステム呼び出し１１６を発行する。もちろん、種々の側面において、システム呼び出し１１６に含まれるアドレスポインタに関連付けられた、任意の数のバッファが使用し得る。
【００２２】
システム呼び出し１１６の実行について、カーネル１０６はまず、オブジェクトを起動しているプロセス（例えば、システム呼び出しの実行）が、このオブジェクトを起動する許可を有していることを確認する（ステップ３０４）。もし、クライアントプロセスがオブジェクトの起動許可を有していれば、カーネル１０６は、オブジェクトＢ１０８がカーネル領域にあるか、またはユーザ領域にあるかを確認する（ステップ３０６）。カーネルは、オブジェクトと種々の保護領域との間の関係のトラックを保持しているので、カーネル１０６はオブジェクト１０８を探すことが出来る。カーネル１０６は、例えば、各クライアント／サーバプロセスについて、識別子（例えばテーブルのインデックス）と共にオブジェクトと、このオブジェクトのインターフェースへのポインタとを特定するテーブルを保持することを含む、多くの方法のうちのいずれかによって、オブジェクトの位置のトラックを保持出来る。別の例としては、カーネル１０６は、オブジェクトの識別子を、プロセッサ領域と、オブジェクトのインターフェースへのポインタにマップする、システム内のオブジェクトのグローバルテーブルを保持し得る。別の例としては、カーネル１０６は、ユーザプロセスをオブジェクトに関連付ける（例えばマップする）ためのハッシュ（hashing）を保持しても良い。当業者によって理解されるように、オブジェクトとプロセスをマップする機能は、保護されたメモリのアーキテクチャにおけるカーネルの一般的な特性である。例えば、Unix（登録商標）のカーネルは、プロセスによりホールドされたオープンソケット（open socket）のトラックを保持することが出来る。
【００２３】
もしカーネル１０６が、オブジェクトＢ１０８はカーネル１０６内部に無いと判断した場合、カーネル１０６は、オブジェクトＢ１０８を主導する（hosting）サーバプロセス１０４を検索する（ステップ３０８）。当業者によって理解されるように、カーネル１０６は、一つの動作により記憶場所と、呼び出されたオブジェクトのサーバプロセスを判断できるので（例えば上記のようにグローバルテーブル内でオブジェクトを検索することにより）、ステップ３０６と３０８は組み合わせ得る。
【００２４】
カーネル１０６がオブジェクトＢ１０８の記憶場所を判断すると、カーネルは、サーバプロセス１０４に対して、クライアントプロセス１０２によるオブジェクトのリモート起動を通知するメッセージ１２８を送信する（ステップ３１０）。この通信は、システム呼び出しにおいてクライアントプロセス１０２によって与えられるオブジェクトＩＤを含むことが出来る。一側面では、サーバプロセス１０４は、オブジェクトＩＤを受信するための、カーネル１０６に知られた、所定のバッファの記憶領域を有し得る。一側面では、カーネル１０６は、オブジェクトＢ１０８を起動するように動作するサーバプロセス１０４内部のサーバスレッド（server thread、図１では独立しては図示されていない）を呼び起こす（awaken）（ステップ３１２）。当業者によって理解されるように、サーバスレッドはよく知られたあらゆる適切な方法によって呼び起こされることが出来る。一側面において、カーネル１０６は、オブジェクトＩＤをサーバプロセス１０４に供給する（ステップ３１６）。
【００２５】
サーバプロセス１０４はその後、例えばゲットバッファ（Get Buffer）１３０動作を実行することにより、カーネル１０６からの入力データを要求し得る（ステップ３１８）。このGet Buffer１３０動作は、クライアントのプロセスの起動要求に関連付けられた入力データを要求し、この入力データがコピーされるサーバプロセス領域内の入力バッファ１１８、１２０のポインタを与える。Get Buffer１３０動作１３０に入力バッファ１１８、１２０へのポインタを含むことで、サーバプロセス１０４は、このデータが要求された時点における送信先の場所を、カーネル１０６に通知する。これによりサーバプロセス１０４は、受信したアーギュメントの入力のためにメモリを用意しておく必要が無いため（サイズ（オブジェクトの入力データ要求は様々である）及びタイミングの観点から開発者には予測が困難である）、システムのフレキシビリティが向上される。
【００２６】
ある実装例では、以下で詳しく説明されるように、サーバプロセス１０４は、入力データの受信のために、カーネル１０６に知られた所定のバッファの記憶領域を有し得る（アーギュメントにおいて、“ランディングパッド（landing pad）”として知られることもある）。この実装はカーネル１０６に対して、オブジェクトの呼び出し及び必要なアーギュメントの受け渡しを、単一のステップで可能とする。それによって、Get Bufferの実行ステップの必要性が取り除かれる。この代替案は、図３における破線矢印Ａによって示されている。
【００２７】
サーバプロセス１０４から入力データ要求１３０を受信すると、カーネル１０６は、クライアントプロセスバッファ１１０、１１２にあるデータを、サーバプロセスのバッファ１１８、１２０にコピーすることが出来る（ステップ３２０）。このようにすることでカーネルは、それぞれ破線１２２、１２４によって図１に示されるように、クライアントプロセスバッファ１１０、１１２からサーバプロセスバッファ１１８、１２４にそれぞれ相当するように、単一のステップで、データを直接コピーする。カーネル１０６は、クライアントプロセス及びサーバプロセスのメモリ空間への読み出し及び書き込みアクセスを有しているので、カーネル１０６は、クライアントプロセス１０２からサーバプロセス１０４に、データを直接コピー出来る。この限定されない読み出し及び書き込みアクセスは、カーネル１０６の能力である。そのようなものとして、カーネル１０６はシステム呼び出し１１６においてカーネル１０６に渡されたクライアントバッファのポインタを使用することが出来、これにより入力データをクライアントプロセス１０２の入力バッファ１１０、１１２から直接得ることが出来る。同様にカーネル１０６は、Get Buffer１３０のメッセージに与えられたメモリの位置（またはある側面では、予め定義されたメモリ位置）へのポインタを用いて、入力データをサーバプロセス１０４の入力バッファ１１８、１２０に直接書き込むことが出来る。この、クライアントメモリ領域のバッファ１１０、１１２からサーバメモリ領域のバッファ１１８、１２０への入力データの直接のコピーは、破線１２２、１２４により示されたように、直接コピー動作のように、クライアント及びサーバプロセッサ１０２、１０４には見える。
【００２８】
サーバプロセス１０４は、クライアントプロセスのオブジェクトＢ１０８の起動に応答している真っ只中であるため、サーバプロセス１０４が、クライアントプロセスバッファ１１０、１１２内に含まれる入力データ１Ａ、１ＢについてのGet Buffer動作１３０を実行可能であることは、着目すべきことである。この起動は、サーバプロセス１０４に対して入力データの使用可能性（availability）を通知し、よってGet Buffer１３０動作の発行を指示する（ステップ３１８）。このGet Buffer１３０動作は、カーネル１０６によって実行されることが出来る。なぜなら、この起動された動作の期間中には、クライアントプロセス１０２のバッファ１１０、１１２内に含まれるデータの読み出し許可が、クライアントプロセス１０２によって発行されているからである。以下でより詳細に説明される１つまたはそれ以上の側面では、サーバプロセス１０４はまた、オブジェクトの起動の一部として、入力データのバッファ１１０、１１２への一時的な読み出しアクセスを許可され得る。これは、このサービス呼び出しの期間中に、メモリへの一時的なアクセス権をサービスプロセス１０４に提供するサービス呼び出し１１６の実行に用いられるＡＰＩによって実装され得る。１つまたはそれ以上の側面において、この読み出し許可は、限られた時間、特にクライアントプロセスのオブジェクトＢ１０８の起動の期間中に、発行される。
【００２９】
クライアントプロセスの入力バッファ１１０、１１２内に含まれるデータが、サーバプロセスの入力バッファ１１８、１２０にコピーされると、カーネル１０６は、メッセージ１３２によってサーバプロセス１０４に、実行の制御を返す（ステップ３２２）。この時点でサーバプロセス１０４は、カーネル１０６からデータを要求するための別のGet Buffer１３０の実行などにより、更なる入力データを要求することがあり、よって図３の破線矢印Ｂで示されるように、ステップ３１８が繰り返される。サーバプロセス１０４は、多くの量の入力データをコピーするために、複数回のGet Buffer１３０要求を実行出来る。各Get Buffer１３０要求は、例えば、サーバプロセス１０４内のテーブルに投入（populate）されるように、異なるバッファの記憶領域へのポインタを特定し得る。またサーバプロセス１０４は、特定されたオブジェクトＢ１０８上で呼び出された機能を実行しつつ、複数回のGet Buffer１３０要求を実行し得る。カーネル１０６は、ステップ３２０、３３２を参照して上記説明したような各Get Buffer１３０要求に応答する。この機能は、カーネル１０６またはクライアントプロセス１０２のソフトウェアに改良を必要とすることなく、クライアントプロセス１０２からサーバプロセス１０４へのデータの転送を最適化するアプリケーション開発者にフレキシビリティを提供する。
【００３０】
全ての入力データがサーバプロセスの入力バッファ１１８、１２０にコピーされると、サーバプロセス１０４は、オブジェクトＢ１０８上の呼び出し動作を開始出来る（ステップ３２４）。サーバプロセス１０４が、特定されたオブジェクト１０８上の読み出された機能を実行した際、サーバプロセス１０４は、カーネル１０６に対して、例えばプットバッファ（Put Buffer）要求１３４を実行する等により、コピーされる出力データを通知する（ステップ３２６）。Put Buffer１３４メッセージは、サーバプロセスの出力バッファ１２２内に含まれる出力データをクライアントプロセス領域にコピーするため、カーネル１０６に実行を渡す。Put Buffer１３４メッセージは、サーバプロセス１０４の出力バッファ１２２へのポインタを含む。最初のシステム呼び出し１１６内に含まれるポインタから、カーネル１０６はクライアントプロセスの出力バッファ１１４のメモリの記憶場所を知る。通知されたので、カーネル１０６は、サーバプロセスの出力バッファ１２２内にあるデータをクライアントプロセスの出力バッファ１１４に直接コピー出来る（ステップ３２８）。この、サーバのメモリ領域の出力バッファ１２２からの出力データの、サーバのメモリ領域の出力バッファ１１４への直接のコピーは、クライアント及びサーバプロセス１０２、１０４には、図１における破線１２６によって示されるように、直接のコピー動作として見える。ある実装では、サーバプロセスは、カーネル１０６に知られた、予め定義されたメモリの記憶位置に出力データを置き得るので、よってPut Buffer動作の必要性が取り除かれる。
【００３１】
カーネル１０６が出力データをクライアントプロセスの出力バッファ１１４にコピーすると、カーネル１０６は、メッセージ１３６によって、サーバプロセス１０４に実行の制御を返す（ステップ３３０）。Get Buffer１３０動作と同様に、サーバプロセス１０４は、複数回のPut Buffer１３４メッセージを実行し得る（破線矢印Ｄで示される）。すなわち、ステップ３２６が繰り返される。これにより、前述のように、カーネル１０６にはステップ３２８、３３０を繰り返すよう指示される。各Put Buffer１３４要求は、例えばサーバプロセス１０４内部のテーブルを読み出す等、例えば異なる出力バッファの記憶領域へのポインタを特定し得る。これによりサーバプロセス１０４は、データブロックメモリの読み出し動作において起こり得ることのように、多くの量のデータブロックのクライアントプロセス１０２への送信が可能となる。この機能は、カーネル１０６またはクライアントプロセス１０２のソフトウェアの改良や、出力データブロックのサイズを予め知っておくこと、または可能な出力データブロックのサイズについての任意の制限を要求することなく、サーバプロセス１０２からサーバプロセス１０４への出力データの転送を最適化するアプリケーション開発者にフレキシビリティを提供する。
【００３２】
オブジェクトＢ１０８を起動するシステム呼び出しが完了すると、サーバプロセス１０４は、メッセージ１３８によってカーネル１０６に実行を返す（ステップ３３２）。アクティブな別のプロセスまたはデバイスインジケータ（例えばディスプレイまたはＬＥＤ）へのリモート呼び出しのように、あるオブジェクト１０８はデータを出力しないかもしれないので、サーバプロセス１０４は、図３の破線矢印Ｃで示されるように、データの出力（ステップ３２６〜３３０）を飛び越えて、単純にカーネル１０６に実行の制御を返す（メッセージ１３８及びステップ３３２）。実行を返すことは、カーネル１０６に対して、実行の制御１４０をクライアントサーバ１０２に返すよう指示する（ステップ３３４）。この時点で、リモートオブジェクト起動は完了する。
【００３３】
当業者に理解されるように、カーネルはシステムの全てのオブジェクト及びリソースに対するオープンアクセス権利（open access right）を有しているため、上記説明した、単一のステップのプロセス間データコピーが可能とされる。クライアントプロセス１０２及びサーバプロセス１０４は、それらの各々のメモリアドレス空間に関連づけられたオブジェクト及びリソースにのみアクセスできる。これに対してカーネル１０６は、クライアントプロセスのメモリアドレス空間のデータの読み出し及び書き込みの権利を有するので、カーネル１０６は、クライアントプロセスの入力バッファ１１０、１１２内のデータを得ることができる。同様に、カーネル１０６は、サーバプロセスのメモリアドレス空間にデータの読み出し及び書き込みの権利を有するので、カーネル１０６は、サーバプロセス入力バッファ１１８、１２０内にデータを直接書き込むことができる。従って、図１〜３に示された側面は、別に求められない限り、２つのデータコピー動作（例えば、カーネルバッファへの入力データのコピーと、カーネルバッファへの出力データのコピー）を、実質的に解消できる。これにより、特に大きなデータ量の移動を含むリモート動作につき、システムオーバヘッドを削減できる。
【００３４】
前記の側面において、カーネル１０６は、コピーされるデータを一時的に保持するためのカーネルバッファ空間を割り当てる必要なく、カーネル１０６はデータをあるプロセス領域から別のプロセス領域にコピーできることもまた、当業者に理解されるだろう。言い換えれば、本側面では、カーネルは、クライアントプロセスバッファ空間からカーネル空間へのデータのコピー、及びその後の、カーネルバッファ空間からサーバプロセスのバッファ空間へのデータのコピーの、必要が無い。これにより、カーネルのメモリ割り当てを最小限にしつつ、カーネルのアーキテクチャを簡略化でき、これにより、オーディオ及びビデオのプレゼンテーション、並びにアプリケーションのコピーにおいて生じるような、大きなデータ量の転送を含む動作のサポートにつき、とりわけ有利である。よって、複数のGet Buffer１３０及び／またはPut Buffer１３４動作を実行するサーバプロセス１０４により、システムは（もしそうなら）制限された割り当てカーネルメモリにおいて、小さい入力及び出力バッファを用いて、保護領域間における制限されない量のデータを渡すことができる。
【００３５】
上記の側面は、呼び出しのアーギュメントに組み込まれたアドレッシングにより、任意の転送元及び転送先アドレッシングされた保護領域間の、１回のデータコピーを提供する。よって、クライアントプロセス１０２の観点から（及びクライアントプロセスの開発者の観点から）、システムによって禁止されていない限り、保護領域を越えた（across）データコピーを含むリモートオブジェクトの実装が、クライアントまたはオブジェクトソフトウェアを書き換えることなく、またはこれらを考慮することなく、１つの表示呼び出し（indication call）と任意の入力／出力バッファと共に、効率的に実行される。
【００３６】
さらに、種々の側面に従ったカーネル１０６は、リモートオブジェクトの同期起動をサポートする。これによりクライアントプロセス１０２は、カーネル１０６のサーバプロセス１０４との干渉（逆もまた同様）の詳細を認識または考慮する必要なく、カーネル１０６を介したオブジェクトへの同期呼び出しが可能となる。よって、オブジェクトを起動するために、クライアントプロセッサ１０２は、起動されるオブジェクトの特定さえすればよく、ある側面では、オブジェクトの起動動作の期間においてクライアントプロセス１０２のメモリ空間へのデータの読み出し及び書き込みの許可を発行する。
【００３７】
先に述べたように、あるオブジェクト及びある側面については、サービス呼び出し１１６は、サーバプロセス１０４のスレッドを活性化し得る。一実装においては、スレッドは、オブジェクトＢ１０８の起動を待ち受けるサーバプロセス１０４内に存在し得る。オブジェクトＢ１０８が起動されると、対応するスレッドが呼び起こされる。別の側面では、カーネル１０６はスレッドの移行（migration）をサポートできる。スレッドの移行とは、クライアントプロセス領域からのサービス呼び出しを、サーバプロセスにおけるスレッド実行と同期させる一メカニズムを差す。スレッドの移行において、スタックがサーバプロセス１０４に割り当てられ、あたかもスレッドが保護領域を切り替えたかのように、実行の制御がクライアントからサーバに切り替わる。スレッドの移行の実行は、クライアントプロセス１０２のスレッドが起動の期間について保護領域を変化させたかのように、サーバプロセス１０４において主導されることができる。
【００３８】
図４、５Ａ、及び５Ｂは、システム呼び出しに関連付けられた詳細がクライアントプロキシ１４６の使用により隠されることが可能な側面を例示する。同様に、システム呼び出しに応答してサーバプロセス１０４に関連付けられたプロセス間データ交換の詳細は、サーバプロキシ１４６の使用により、サーバプロセス１０４から隠されることが可能である。リモートオブジェクトの起動と、保護領域間のデータの受け渡しのプロセスは、図１〜３を参照して先に説明された側面に２つの要素を加えたものと同様である。まず、システム呼び出し１１６の実行、入力データの入力データバッファへの書き込み（posting）、及びカーネル１０６からの出力データの受信ステップが、クライアントプロセス１０２についてのプロキシとして機能する中間ソフトウェア（intermediate software）によって行われる。次に、カーネル１０６からのオブジェクト呼び出しの受信、Get Buffer１３０及びPut Buffer１３４動作の生成、及び入力及び出力データを扱いのステップが、サーバプロセス１０４についてのプロキシとして機能する中間ソフトウェアによって実行されることができる。リモートオブジェクトを起動するアプリケーションは、カーネルによってどのようにプロセスが実行されるかについて関心をはらうことなく、一般的なフォーマットで、出力データを受信し、アーギュメントを与えることしか必要としないため、クライアントプロキシ１４６及びサーバプロキシ１４８の使用により、クライアント及びサーバのアプリケーションソフトウェアの開発を更に簡略化出来る。
【００３９】
図４に示された典型的な側面においては、システム呼び出しは、サーバプロセス１０４領域内のシステムメモリに保持されたデータブロック１５０を読み出すための、クライアントプロセス１０２により起動された読み出し方法１４２である。図４及び５Ａを共に参照して、クライアントプロセス１０２は、要求されるデータブロックと動作を特定することにより、データブロック１５０についての読み出し方法１４２を、クライアントプロキシ１４６に呼び出す（ステップ４０２）。クライアントプロキシ１４６のコードは、クライアントプロセス１０２領域内にあり、よってクライアントプロセスメモリ（例えばバッファ）空間に十分にアクセスできる。クライアントプロキシ１４６のコードは、リモート起動の名前とリモート起動のアーギュメントを、カーネル４０４に送るシステム呼び出し１１６内に配列させる（ステップ４０４）。この側面によれば、クライアントプロセス１０２は、あたかもデータブロック１５０がシステムメモリのクライアントプロセス１０２の領域内にあるかのように、データブロック１５０についての読み出し方法１４２を呼び出すことが出来る。
【００４０】
動作中において、クライアントプロセス１０２は、この読み出し方法呼び出し１４２をクライアントプロキシ１４６に生成することで、読み出し方法１４２に必要なアーギュメントを渡す（ステップ４０２）。クライアントプロキシ１４６は、アーギュメントをシステム呼び出し１１６内にパック（pack）し、カーネル１０６に実行の制御を渡すシステム呼び出し１１６を実行する（ステップ４０４）。典型的な側面において、クライアントプロキシ１４６によって生成されたシステム呼び出し１１６は、アーギュメントとして入力及び出力データへのポインタとオブジェクトの識別子を含む、INVOKEシステム呼び出しである。例えば、この呼び出しは、SysCall (INVOKE, nObjID, inputs pointer, outputs pointer)であり得る。入力データは更に、データブロックオブジェクトのサイズを含み得る。理解されるように、クライアントプロセス１０２によって呼び出される読み出し方法は、クライアントプロキシ１４６によって生成されたINVOKEシステム呼び出しに直接対応する。
【００４１】
残りの処理は、図１〜３を参照して上記説明したのと同様の方法により実行される。従って、図３の上記説明が、図５Ａにおいて示された同じ参照符号が付されたステップにつき、ここに組み込まれる。起動された動作の終わりにあたりカーネル１０６は、実行の制御をクライアントプロキシ１４２に返す（ステップ４３４）。
【００４２】
図４及び５Ｂに示された別の側面においては、サーバプロセス１０４領域内のサーバプロキシ１４８は、カーネル１０６とサーバプロセス１０４との間の通信を管理する。本側面においては、カーネル１０６は、起動された動作につき、サーバプロセス１０４によって求められたデータを集めることを仲立ちするサーバプロキシ１４８と通信する。この起動されたオブジェクトは、例えば、サーバプロキシ１４８へのIRemoteCallインターフェースポインタを渡す等により、データを要求し得る。当業者によって理解されるように、サーバプロキシ１４８は、要求メッセージ１５２にパックされたリモート起動呼び出しに直接対応する機能呼び出しを実施出来る。
【００４３】
図５Ｂに示された大半のステップは、図１〜３及び５Ａを参照して上記説明したのと同様の方法により進行する。従って、図３及び５Ａについて先述した説明が、図５Ｂにおいて示された同じ参照符号のステップで、ここに組み込まれる。カーネル１０６は、オブジェクトが起動されていることを、サーバプロキシ１４８に、オブジェクトＩＤをそれに供給しつつ、通知する（ステップ４１０）。サーバプロキシは、図１〜３を参照して先に詳細に説明したように、カーネル１０６が入力データをクライアントプロセスバッファ１１０、１１２からサーバプロセスバッファ１１８、１２０にコピーすること（ステップ３２０）に応答して、カーネル１０６へのGet Buffer１３０呼び出し等により、入力データを要求し得る（ステップ４１８）。別の方法として、サーバプロキシ１４８は、クライアントプロセス１０２の入力データバッファから、カーネル１０６によってコピーされた入力データを受信しても良い。コピー動作が完了した際、カーネル１０６は、サーバプロキシ１４８に実行の制御を返す（ステップ４２２）。サーバプロキシ１４８が全ての要求された入力データを受信した際、サーバプロキシ１４８は、起動されているリモートオブジェクトを読み出す（ステップ４２３）。サーバプロセス１０４はその後、クライアントプロセス１０２によって起動された起動動作（図４において読み出し方法１４２として示される）を実行する。残りの処理は、カーネル１０６との通信がサーバプロキシによって管理される点（ステップ４３０、４３２）を除いては、図３を参照して上記説明したのと同じだけ進行する。
【００４４】
典型的な一側面においては、読み出されるデータブロック１５０は、サーバプロセス１０４内部の一時的な出力バッファ１５４にコピーされ得る。データブロック１５０がサーバプロセス１０４の出力バッファ１５４にコピーされると、データは、図１〜３を参照して上記説明した単一のステップのプロセス間コピー方法を用いて、図４の破線矢印によって示されるように、カーネル１０６によってクライアントプロセス１０２内の適切な出力バッファ（例えば図１のバッファ１１４）にコピーされる。
【００４５】
図４に示され上記説明されたサーバプロセス１０４内部の一時的なデータのコピーステップは、強制的では無い。別の側面においては、バッファ１５４は、データブロック１５０自身内部で定義されることが可能である。別の実装では、カーネル１０６はクライアント及びサーバプロセス領域の両方へのアクセス権利を有するので、データブロック１５０から直接にクライアントプロセス１０２内のバッファへの、データの単一のステップのプロセス間コピーを、単純に実行できる。よって、アプリケーションの開発を簡単化するためのクライアント及びサーバプロキシ１４６、１４８の実装には、種々の形態によって可能とされるプロセス間通信へのオーバーヘッドを追加する必要がない。カーネル１０６の、単一のステップのデータのプロセス間コピーを実行するこの機能は、サーバプロセス１０４からカーネル１０６への、及びカーネル１０６の中からクライアントプロセスへの、データのコピーに関連するオーバーヘッドを、実質的に除去する。先に議論したように、単一のステップのデータのプロセス間コピーを可能とすることは、保護領域を越えて大きなデータ量をコピーする必要がある際に、特に有効である。機能の大きなクラス（large class）については、マイクロカーネルアーキテクチャに関連付けられたデータの移動のオーバーヘッドは、プロセス間コピーはコピーをオーバーラップさせることが出来、これがリモート機能において隠されることが出来るので、実質的にゼロに削減出来る。例えば、ファイルシステムからの読み出しの際には、プロセス間コピーは一度のコピーの要求で、メモリをファイルシステムキャッシュからクライアントバッファに直接移動出来る。「読み出し」機能においてコピー動作が隠されるように、一度のコピーは、起動がプロセス境界を越える必要がない場合であっても、求められるだろう。
【００４６】
図６Ａ〜８に示される別の側面においては、クライアントプロセス１０２によって起動されたリモートオブジェクトＣ１５６は、カーネル１０６自身の中にある。本方法におけるカーネルベースのプロセスの実装は、クライアントプロセス１０２またはクライアントプロキシ１４６によって主導されるシステム呼び出し１１６を、起動されるリモートオブジェクトの場所にかかわらず、構造的及び機能的に同じにすることが出来る。図６Ａ及び６Ｂは、本側面において含まれるメモリ領域、バッファ、及びプロセスの相互関係を例示する。図７は、クライアントプロセス１０２とカーネル１０６との間の通信を例示する起動フローダイアグラムである。本側面のプロセス５００の動作ステップの例が、図８のプロセスフロー図に例示されている。
【００４７】
図６Ａ〜８を共に参照して、クライアントプロセス１０２は、カーネル１０６内にあるリモートオブジェクトＣ１０８を起動するために、カーネル１０６と共にシステム呼び出し１１６を実行出来る（ステップ５０２〜５０４）。図４及び５Ａを参照して上記詳細に説明したように、ある側面では、クライアントプロセス１０２は、クライアントプロキシ１４６に機能呼び出しのアーギュメントを渡して、クライアントプロキシ１４６に機能呼び出しを送ることにより（ステップ５０２）、これを実行し得る。クライアントプロキシ１４６はその後、必要なアーギュメントを配列し、リモート機能起動と、関連するアーギュメント及びオブジェクトＣ１５６のローカルオブジェクト識別子を含む、システム呼び出し１１６を生成・実行する（ステップ５０４）。例えば、オブジェクトＣ１５６のローカルオブジェクト識別子に加えて、クライアントプロキシ１４６は、オブジェクトＣ１５６に利用可能とされる入力データＩＰ １Ａを含むクライアントプロセス１０２の入力バッファ１１０へのポインタ、及びオブジェクトＣ１５６からのデータがコピーされる出力バッファ１１４へのポインタを渡すことが出来る。
【００４８】
クライアントプロキシ１４６からシステム呼び出し１１６を受信した後、カーネル１０６は、クライアントがオブジェクトを起動するための必要な許可を有することを確認することにより起動を有効にし、オブジェクトＣ１５６がカーネル１０６内にあるのかユーザプロセス内にあるのかを判断する（ステップ５０６）。オブジェクトＣ１５６がカーネル１０６内にあるとカーネル１０６が判断すると、カーネル１０６は、システム呼び出し１１６の実行の制御を、カーネルプロキシ１５８に渡し得る（ステップ５０８）。（もしオブジェクトがサーバプロセス領域にあるとカーネル１０６が判断すれば、カーネル１０６は図１〜５Ｂを参照して上記説明したのと同じ方法によって処理を進めるだろうことに注意すべきである。）一例の実施形態では、カーネル１０６は、IRemoteCallインターフェースポインタをカーネルプロキシ１５８に渡し得る（ステップ５０８）。当業者によれば、カーネルプロキシ１４８によって実装されたこのような機能呼び出しは、システム呼び出し１１６のリモート機能起動に直接に対応することが理解されるだろう。カーネルプロキシ１５８の使用により、カーネルの動作を考慮する必要なく、カーネルプロキシ１５８との間で通信するようにオブジェクトをプログラム出来るので、カーネル領域内の実装についてのオブジェクトの開発を簡略化出来る。しかしながら、カーネルプロキシ１５８の使用は必須では無く、代わりの実施形態では、カーネル１０６は起動されたオブジェクトＣ１５６を直接実行し得る。
【００４９】
カーネル１０６は、カーネルプロセス１０２のメモリ空間内のデータの読み出し及び書き込みの権限を有するので、カーネル１０６は、入力データＩＰ １Ａをカーネル入力バッファ１６０に直接コピーする（ステップ５１０）ために、システム呼び出し１１６に与えられたポインタを使うことが出来る。カーネルプロキシ１５８は入力データを受信し、その後カーネル１０６内において起動されているオブジェクトＣ１５６を呼び出す（ステップ５１２）。カーネル１０６は、起動されたオブジェクト（すなわち、機能またはスレッド）を実行する（ステップ５１２）。出力データＯＰ Ｋ１は、（もし出力データが生成されれば）カーネル出力バッファ１６２に一時的に保持され得る。カーネル１０６は、その後、このデータを、クライアントサーバ１０２内の適切な出力バッファに、カーネル１０６によってコピーする（ステップ５１４）。別の実施形態では、カーネルはクライアントプロセス１０２のメモリ空間への書き込みの権利を有しているので、カーネル１０６は、起動されたオブジェクトによって生成されたデータを、クライアントプロセス１０２の出力バッファ１１４に直接書き込むことが出来る。カーネル１０６またはカーネルプロキシ１５８はその後、クライアントプロセス１０２に実行の制御１４０を返す（ステップ５１６）。
【００５０】
本側面の変形例では、図６Ｂに示されるように、カーネル１０６は、クライアント領域のバッファ１１０から入力データを読み出し、このデータを、カーネルバッファにコピーすることなく、起動されたオブジェクトに直接データを与え得る。この側面は、カーネルバッファを必要としない点を除いて、図６Ａ、７、及び８を参照して上記説明したのと同様の方法で機能する。カーネル１０６は、クライアントプロセス１０２のメモリ空間に対して、読み出しアクセス及び書き込みアクセス権の両方を有しているので、カーネル１０６は、クライアントプロセスの入力バッファ１１０へのポインタを取得でき、入力データＩＰ １Ａに直接アクセス出来る。典型的な一実施において、カーネル１０６は、“Acquire In Ptr”及び“Acquire Out Ptr”動作をそれぞれ用いて、クライアントプロセスのバッファ１１０、１１４へのポインタを得ることが出来る。本方法において、カーネル１０６は、クライアントプロセス１０２からカーネル１０６へ、及びカーネル１０６の中からクライアントプロセス１０２へ戻すコピーデータに関連する何らの追加のコピー動作も実行する必要は無い。
【００５１】
別の実装では、図９に示されるように、クライアントプロセス１０２は、ファイルシステムのメモリ領域１７２内にある第２のオブジェクト１７４を起動出来るサーバプロセス１０４領域内のリモートオブジェクト１７０を起動出来る。この実装では、起動されたリモートオブジェクトＤ１７０は、ファイルシステム領域１７２内にあるデータブロック１７４のような、別のオブジェクトへのアクセス権限を発行される。よってシステム呼び出しは、アーギュメントとバッファポインタを与えることに加えて、オブジェクトを起動する能力（機能）を与える。
【００５２】
図９を参照して、クライアントプロセス１０２は、図３及び５Ａを参照して先に述べたのと同様の方法で、オブジェクトＤ１７０のリモート起動を要求するカーネル１０６に、システム呼び出し１１６を送る。オブジェクトＤ１７０についてのオブジェクト識別子に加えて、システム呼び出し１１６は、ファイルシステムメモリ領域１７２内にあるオブジェクトＥ１７４へのオブジェクトリファレンス（object reference）を含む。本実装では、オブジェクトリファレンスは、リモートオブジェクトＤ１７０に、別のオブジェクトＥ１７４を直接起動する権限を与える。この権限の付与は、各オブジェクトにアクセス可能なプロセスと同様に、全てのオブジェクトの場所のトラックを保持することが可能なカーネルによって記録される。別のオブジェクトを起動するための権限はまた、出力システム呼び出しにおける出力パラメータとしても含まれることが出来る。よって、システム呼び出しは、オブジェクトに別のオブジェクトを起動する権限を与える入力パラメータを含むことが出来、及び／またはシステム呼び出しは、別のオブジェクトを起動する権限をクライアントプロセスに返す出力パラメータを含み得る。
【００５３】
本側面の典型的な実装は、信頼されたマルチメディアプロセス（trusted multimedia process）にあるマルチメディアプレイヤーオブジェクトＤ１７０である。保護されたメモリアーキテクチャでは、クライアントプロセス１０２及びマルチメディアプロセス（サーバプロセス１０４）は、互いのメモリ空間にアクセスできない。本側面を実装することにより、クライアントプロセス１０２は、再生または停止機能を呼び出すことで、マルチメディアプレイヤーオブジェクト１７０を制御出来る。マルチメディアプレイヤーオブジェクト１７０に対してメディア（例えば音楽またはビデオ）の再生を開始させるには、クライアントプロセス１０２は、マルチメディアプレイヤーオブジェクト１７０が直接起動及びアクセス（１７６）出来るファイルシステムメモリ領域１７２にあるマルチメディアデータブロック１７４を参照して、マルチメディアプレイヤーを与える。一側面においては、マルチメディアプレイヤーオブジェクト１７０は、クライアントプロセス１０２によって発行されたシステム呼び出し１１６を通じてマルチメディアプレイヤーオブジェクト１７０に送られるデータブロックリファレンスにより、ファイルシステムメモリ領域１７２内部のオブジェクトＥ１７４にアクセスし、起動する権限を与えられる。
【００５４】
別の側面が、比較的大きな入力データブロックが起動されたリモートオブジェクトに効率的に与えられることが出来る図１０及び図１１に例示されている。この実装は、大きい入力データブロック上で動くリモートオブジェクトの効率的な起動を提供出来る。図１０は、本側面のプロセス６００の起動フロー図であり、図１１はこのプロセス６００のプロセスフロー図である。ステップの幾つかは図３を参照して上記説明したものと同様であるので、これらの説明は、図１１において同じ参照符号のステップについてここに組み込まれる。
【００５５】
図１０及び１１を共に参照して、クライアントプロセス１０２は、カーネル１０６へのシステム呼び出し１１６を実行する（ステップ３０２）。このシステム呼び出し１１６は、リモートオブジェクトのオブジェクト識別子、入力データが存在するクライアントプロセス１０２のメモリ内の領域へのポインタ、及びサーバプロセス１０４によって出力されたデータがコピーされるクライアントプロセス１０２のメモリ内の領域へのポインタを、カーネル１０６に与える。これに応答して、カーネル１０６はシステム呼び出しを有効にし（例えば、クライアントプロセスが、オブジェクトの起動を許可されていることを確認する）、起動されているオブジェクトを主導（host）するサーバプロセス１０４を探す（ステップ３０６）。
【００５６】
サーバプロセス１０４を呼び起こす（awake）する前に、カーネル１０６は、所定の量のデータをクライアントプロセス１０２のメモリ空間から、サーバプロセス１０４のメモリ空間内の予め指定されたメモリ領域にコピーする（ステップ６２０）。一側面では、カーネル１０６とサーバプロセス１０４とは、カーネル１０６によってクライアントサーバ１０２から直接コピーされるデータを受信するために、サーバプロセス１０４のメモリ空間の領域を指定するためにネゴシエイト（negotiate）することが出来る。一実装では、初めにサーバプロセス１０４にコピーされる所定の量のデータに含まれない残りのデータを要求するために、サーバプロセス１０４がカーネル１０６をいずれは呼び出すだろうという仮定の下、データはコピーされる。入力データについてのそのような追加の要求は、図３（ステップ３１８〜３２４）を参照して先に説明したような、複数のGet Buffer１３０動作を発行するサーバプロセス（またはサーバプロキシ１４８）によって実行され得る。
【００５７】
入力データブロックがサーバプロセス１０４のメモリ空間にコピーされると、カーネル１０６は、メッセージ１２８を送ることにより、起動されたサーバスレッドを呼び起こし（awaken）し、クライアントサーバに、クライアントプロセス１０２によって送られた要求メッセージを通知する（ステップ６２２）。この時点において、サーバプロセス１０４は、（もしプロキシが実装されていれば）入力データを得るためにサーバプロキシ１４８を呼び出し得る。サーバプロセス１０４のメモリに予めロードされた入力データにより、サーバプロセス１０４またはサーバプロキシ１４８は、カーネル１０６に対してGet Input要求を実行する必要なく、入力データを得ることが出来る。代わりに、サーバプロセス１０４またはサーバプロキシ１４８は、サーババッファ内のデータにアクセスする（ステップ６２４）。この側面は、小さいバッファを含む実装及びアプリケーションに特に適用される。大きいバッファが使用される例では、サーバプロセス１０４またはサーバプロキシ１４８は、サーバプロセス１０４のメモリ上でGet Buffer１６４動作を発行し得る。よって、この側面は、実質的にカーネルからの入力データの要求の必要性を無くすることが出来、これにより、カーネル１０６への求められるシステム呼び出し回数を削減出来る。
【００５８】
サーバプロセス１０４が起動されたスレッドを完了すると（ステップ３２４）、サーバプロキシ１４８は、カーネル１０６に、サーバプロセス１０４のバッファ内に含まれるデータの、クライアントプロセス１０２の出力バッファへのコピーを要求する、Put Buffer要求１３４を実行する（ステップ３２６）。カーネル１０６がサーバプロセス１０２のバッファからクライアントプロセス１０４の出力バッファにデータを直接コピーすると（ステップ３２８）、カーネルは、メッセージ１３６によりサーバプロセス１０４に実行の制御を返す（ステップ３３０）。起動された動作の完了と共に、サーバプロセス１０４は、カーネル１０６に実行１３８の制御を返し（ステップ３３２）、カーネル１０６に実行の制御をクライアントプロセス１０２に返す１４０よう指示する（ステップ３３４）。
【００５９】
図１２及び１３は、共有メモリを使用することにより、カーネル１０６によるデータのコピーの必要性を無くす、別の側面を例示する。ステップのいくつかは、図３を参照して先に説明したものと同様であるので、これらの説明は、図１３において同じ参照符号のステップについてここに組み込まれる。
【００６０】
図１２及び１３を参照して、クライアントプロセス１０２の入力データＩＰ １Ａは、クライアントプロセス１０２及びサーバプロセス１０４の両方によってアクセス可能な共有メモリ空間１８０内の入力バッファ１８２内にある。クライアントプロセス１０２は、入力バッファ１８２内に入力データを持ち続けても良いし、またはリモートオブジェクトの起動の直前に、データを入力バッファ１８２にコピーすることも出来る。動作中において、クライアントプロセス１０２は、システム呼び出し１１６を実行することにより、サーバプロセス１０４内にあるリモートオブジェクトＢ１０８を起動する（ステップ３０２）。バッファ１８２、１８４へのポインタと同様にオブジェクトＢ１０８の識別子は、システム呼び出し１１６内に含まれる。カーネル１０６は、システム呼び出しを有効化し（ステップ３０４）、オブジェクトがどこに位置するかを判断し（ステップ３０６、３０８）、その後、サーバプロセス１０４に起動要求を通知する（ステップ３１０）。一側面においては、カーネルは、起動されたサーバスレッドを呼び起こすことが出来（ステップ３１２）、このサーバスレッドは、入力データを求める要求を、カーネル１０６に送ることが出来る（ステップ７０２）。例えばサーバプロセス１０４は、データバッファへのポインタを獲るために、“Acquire In Ptr”及び“Acquire Out Ptr”動作を実行し得る。これに応答してカーネル１０６は、サーバスレッドに、入力及び出力バッファ１８２、１８４に対するポインタを与える（ステップ７０４）。あるいは、カーネル１０６はサーバプロセス１０４に、指示することなく、入力及び出力バッファ１８２、１８７へのポインタを与えることが出来る（ステップ７０４）。サーバプロセス１０４は共有メモリ１８０へのアクセス権を有し、ひいてはそこに入力及び出力バッファ１８２、１８４があるので、サーバプロセス１０４は、バッファ１８２内の入力データＩＰ １Ａに直接アクセスすることが出来る（ステップ７０６）。これにより、クライアントプロセス１０２からサーバプロセス１０４へデータをコピーするカーネル１０６のオーバーヘッドを無くすことが出来る。この時点において、サーバプロセス１０４は、起動されたプロセスを行う（ステップ３２４）。完了すると、サーバプロセス１０４は、出力データを、共有メモリ１８０内の出力バッファに直接書き込む（ステップ７０８）。この時点で、サーバプロセス１０４は、機能の完了を示すカーネル１０６に実行の制御を返し（ステップ３３２）、カーネル１０６に実行の制御をクライアントプロセス１０２に返すよう指示する（ステップ３３４）。
【００６１】
当業者によれば、入力及び出力バッファ１８２、１８４へのポインタは、図１１を参照して先に説明したのと同様の方法で、プロセスを呼び起こす（awake）前にサーバプロセス１０４供給されることが出来、これによりサーバプロセス１０４がカーネル１０６に送る必要のある要求の数を削減出来ることが理解されるだろう。
【００６２】
本側面の任意の変形例では、クライアントプロセス１０２は、起動されている各スレッドについてのクライアントメモリの共有可能なメモリ領域を確立するために、カーネル１０６と協調（coordinate）出来る。例えば、クライアントプロセスのシステム呼び出し１１６に含まれるアーギュメントは、起動されたスレッドにアクセス可能とされるクライアントメモリの領域内にある入力及び出力バッファを指定（例えば、これらへのポインタを含むことが）出来る。本側面においては、カーネル１０６は、サーバプロセス１０４に見えるクライアントプロセス１０２のメモリの、指示された入力及び出力バッファ領域を作るよう、メモリ管理ユニット（ＭＭＵ）に命令出来る（ステップ７１０）。例えば、共有されるデータは、ＭＭＵが特定のページへのアクセス権をサーバプロセス１０４に発行出来るよう、クライアントプロセス１０２の特定のページ内にあり得る。一般的に、このアクセスは、システム呼び出しの期間においてのみ許可されるだろう。これは、サーバプロセス１０４からのシステム呼び出しのリターンの受信時に、クライアントプロセス１０２のメモリへのサーバプロセス１０４のアクセス権を削除するようＭＭＵに要求するカーネル１０６によって実行され得る。
【００６３】
本側面の別の変形例では、図１４に示すように、クライアントプロセス１０２とサーバプロセス１０４がメモリの同じ領域へのアクセス権を持たない際に、カーネル１０６は、起動の間、サーバプロセス１０４に利用可能なクライアントバッファを作るよう、ＭＭＵに指示する。起動の開始（initiation）においてカーネル１０６は、サーバプロセス１０４によって読み取り可能な１つまたはそれ以上の入力バッファを作るために、サーバプロセス１０４の仮想アドレス空間を改良することが出来る。同様に、カーネル１０６は、サーバプロセス１０４によって書き込み可能な１つまたはそれ以上の出力バッファを作るために、サーバプロセス１０４の仮想アドレス空間を改良することが出来る。これは、ＭＭＵに対して、サーバプロセスの仮想アドレスを、入力または出力バッファがある物理メモリアドレスにマップ（map）することを要求する。カーネル１０６はその後、サーバプロセス１０４に、オブジェクトの起動の要求を通知する（ステップ８１２）。もし、カーネルの通知に入力データの位置が含まれていなければ、サーバプロセス１０４は、カーネル１０６からデータを要求することも出来る（ステップ８１４）。これに応答してカーネル１０６は、サーバプロセス１０４に、入力データの位置を与える（ステップ８１６）。この時点においてサーバプロセスは、新たにマップされた仮想メモリアドレスから、入力データに直接アクセスすることが出来（ステップ８１８）、またオブジェクト上の起動された動作を実行し（ステップ８２０）、新たな共有メモリ空間に、結果得られる出力を記録する（ステップ８２２）。動作を完了するため、サーバプロセス１０４は、カーネル１０６に対して、出力データの共有メモリ内における位置を通知し（ステップ８２４）、これによりカーネル１０６は、クライアントプロセスに対して出力データの位置を通知出来る（ステップ８２６）。クライアントプロセス１０２に実行の制御を返す前に、カーネル１０６は、サーバプロセス１０４に利用可能なバッファの作成を導入する仮想メモリのマッピングを削除するだろう。
【００６４】
この実装により、入力及び出力データがプロセスによって直接アクセスされることが出来、これによりカーネル１０６において、保護境界を越えてデータをコピーすることの必要性を取り除くことが出来る。この側面には、多くの利点がある。第１の利点は、クライアントプロセス１０２によって実行される前記コピーステップにより、他のあらゆるコピーを必要とすることなく、クライアントプロセス（例えば読み出しているプロセス）とサーバプロセス（例えば読み出されたプロセス）との間で、入力及び出力データを移動（move）することが出来る点である。第２の利点は、サーバプロセスは、入力のサイズ及び／または位置（location）を予測する必要がなく、またはクライアントプロセスに返された後に出力データのコピーを保持する必要が無いことである。代わりに、サーバプロセス１０４は、単純に、入力データを直接読み出し、クライアントプロセス領域内のバッファにデータを出力する。第３の利点は、サーバプロセス１０４は、全ての入力または出力アーギュメントを同時にメモリに保持するための十分なメモリを有する必要が無いことである。
【００６５】
前述の側面のイベントを実装するために使用されるハードウェアは、命令のセットを実行するように構成されたメモリ要素とプロセシング要素であり得る。ここで、命令のセットは、上記イベントに対応する方法ステップを実行するためのものである。あるいは、いくつかのイベントは、ある機能に特定される回路によって実行されても良い。図１５は、上記側面を実装するシステムの、一般的な要素を例示する。そのようなシステムは、ランダムアクセスメモリ２に結合され、メモリ管理ユニット（ＭＭＵ）３を含むプロセッサ１を含む。このシステムはまた、カーネルソフトウェア命令を記録するために使用され得る読み出し専用メモリを含み得る。動作時においてクライアントプロセス１０２、サーバプロセス１０４、及びカーネル１０６は、ランダムアクセスメモリ２にアクセスしているプロセッサ上で走る、別個のソフトウェア命令スレッドとして存在する。
【００６６】
携帯端末における種々の側面の具体的な実装が、図１６に示されている。先に言及したように、種々の側面は、その制限されたプロセッサ及びメモリの能力から、携帯端末において、特に有益である。携帯電話、マルチメディア・インターネット対応の携帯電話、携帯情報端末（ＰＤＡ）、電子音楽データブロック（例えばＭＰ３）プレーヤ、及び／または無線電子メール受信機のいずれかであり得る携帯端末１０。そのような携帯端末１０は、ディスプレイ１３及びメモリ１２に結合されたプロセッサ１１を含み得る。携帯端末１０はまた、例えば携帯電話データ受信機、有線（例えばFireWire（登録商標））データリンク、Bluetooth（登録商標）無線データリンク、及び赤外データリンク（図示せず）のような、多くのデータの入力／出力インターフェースを含み得る。例えば、携帯端末１０は、無線ネットワーク送信機／受信機ノード（図示せず）からの電磁信号を受信するアンテナ１４、及びアンテナ１４に接続され、無線信号を受信し、この信号をプロセッサ１１に伝えられるデジタルデータに変換する無線送受信機１５を含み得る。同様に、Bluetoothまたは同様のローカル無線データリンクは、受信した無線信号を、プロセッサ１１に伝えられるデジタルデータに変換するＷｉＦｉ（登録商標）、Bluetooth（登録商標）、ＷＬＡＮ、ＷｉＭａｘ（登録商標）などの送受信機１８に接続されたアンテナ１４（または別個には示されていない別のアンテナ）を含み得る。データはまた、FireWire、ＵＳＢ、シリアル（例えばＲＳ−２３２Ｃ）、またはイーサネット（登録商標）データリンクのような、有線データリンクの手段によって、携帯端末１０から、及び携帯端末１０へ送信され得る。例えば、データは、コネクタ１９から受信されたデータを、プロセッサ１１に伝えられるデジタルデータに変換するFireWireモデム回路２０に結合されたFireWireデータコネクタ１９を経由して、送信され得る。本技術において良く知られたように、他の有線データリンクは、特定のデータリンクに適切なように、同様の回路を含むだろう。携帯端末１０内部のあらゆるデータ入力及び出力デバイスは、データ通信機能を実現するために、サーバプロセスとして、クライアントプロセス１０２によってアクセスされ得る。
【００６７】
種々の側面は、述べられた方法の１つまたはそれ以上を実装するように構成されたソフトウェア命令を実行するプロセッサ１１によって、実装され得る。そのようなソフトウェア命令は、デバイスのオペレーティングシステム、オペレーティングシステムによって実行されるＡＰＩ列、または実施形態の方法を実行するコンパイルされたソフトウェアとして、メモリ１２に記録され得る。更に、ソフトウェア命令は、ＵＳＢ接続可能な外部メモリ（例えばフラッシュドライブ）、読み出し専用メモリ４、ハードディスクメモリデバイス、フロッピー（登録商標）ディスク、及びコンパクトディスクのような外部メモリチップまたはシステム内部のメモリチップ２、１２のような、ランダムアクセスメモリ２、１２及びモジュールを含む、実体のあるプロセッサ読み取り可能メモリのあらゆる形で記録され得る。
【００６８】
当業者は、本明細書に開示された実施形態に関連して説明された例示的な種々の論理ブロック、モジュール、回路、及びアルゴリズムステップは、電子的なハードウェア、コンピュータソフトウェア、またはこれらの組み合わせとして実装され得ることを、理解するだろう。ハードウェアとソフトウェアが同義的であることを明確に示すために、種々の例示的な要素、ブロック、モジュール、回路、及びステップが、全般的にそれらの機能性の観点から説明されてきた。そのような機能性がハードウェアで実装されるかソフトウェアで実装されるかは、個々のアプリケーション及び全体のシステムに課せられた設計の制約に依存する。当業者は、上記の機能性を、各個別のアプリケーションにつき種々の方法で実装し得る。しかし、そのような実装の決定は、この発明の範囲からの逸脱を生じさせるものとして解釈されるべきでは無い。
【００６９】
本明細書に開示された側面に関連して述べられた方法またはアルゴリズムのステップは、ハードウェア、プロセッサによって実行されるソフトウェアモジュール、またはこれら２つを組み合わせたものによって、直接的に具体化され得る。ソフトウェアモジュールは、ＲＡＭメモリ、フラッシュメモリ、ＲＯＭメモリ、ＥＰＲＯＭメモリ、ＥＥＰＲＯＭメモリ、レジスタ、ハードディスク、リムーバブルディスク、ＣＤ−ＲＯＭ、または本分野で既知の記録媒体のあらゆる形態内に存在し得る。典型的な記録媒体は、プロセッサがこの記録媒体から情報を読み出し、そして情報を書き込めるように、プロセッサに結合される。代わりに、記録媒体は、プロセッサに一体化されても良い。プロセッサと記録媒体は、特定用途向け集積回路（ＡＳＩＣ）内に存在し得る。ＡＳＩＣは、ユーザ端末内に存在し得る。あるいは、プロセッサと記録媒体は、ディスクリート要素としてユーザ端末内に存在し得る。更に、ある側面では、方法またはアルゴリズムのステップ及び／または動作は、機器読み取り可能な媒体及び／またはコンピュータ読み取り可能な媒体上のコード及び／または命令のセットまたは１つまたはあらゆる組み合わせとして存在することが出来、これらはコンピュータプログラム製品に組み込まれ得る。
【００７０】
種々の側面が、従来技術に対する多くの利点を奏する。この実装は、従前のシステムにおける更なるオーバーヘッド、複雑化、及び制限を招くことなく、単一のコピーによって、呼び出している（例えばクライアント）プロセスと、読み出された（例えばサーバ）プロセスとの間で、入力及び出力データが移動されることを可能とする。例えば、本実装例では、サーバプロセスは、データ入力のサイズ及び／または位置を予測する必要がない。更にサーバプロセスは、クライアントプロセスに返された後に出力データのコピーを保持する必要が無い。また、サーバプロセスは、全ての入力または出力アーギュメントを同時にメモリに保持するための十分なメモリを有する必要が無い。大きなクラス（class）の機能については、種々の側面は、プロセス間コピーはリモート機能における潜在的なコピーをオーバーラップさせることが出来るので、マイクロカーネルアーキテクチャのデータ移動オーバーヘッドをゼロに削減する。例えばデータブロックからの読み出しの際には、クライアントプロセスへのコピーは、ファイルシステムキャッシュからクライアントバッファにメモリを移動出来る。このコピーは、リモート「読み出し」機能よって隠されるので、呼び出し側が同じプロセス内にある際でも求められるだろう。
【００７１】
種々の側面／実装についての上記説明は、当業者に対して、本開示の作成または使用を可能とするために与えられる。これらの側面／実装の種々の変形が、当業者には用意に明らかであろう。そして本明細書で定義された原理は、本開示の思想または範囲から逸脱しない限りで、他の側面／実装に適用され得る。よって、本開示は、本明細書に示された側面／実装に限定されることを意図したものでは無く、むしろ、特許請求の範囲は、本明細書に開示された原理及び新規な特徴に一致する最も広い範囲に合致されるべきである。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。  
［１］カーネルを有するメモリ保護アーキテクチャにおけるデータのプロセス間通信を実行する方法であって、  
前記カーネルにおいて、第１メモリ領域内部のクライアントプロセスによる、第２メモリ領域のオブジェクトの起動を要求するシステム呼び出しであって、入力データを含む前記第１メモリ領域におけるクライアント入力バッファと、出力データがコピーされる第１メモリ領域におけるクライアント出力バッファとを特定する前記システム呼び出しを実行することと、  
前記カーネルにおいて、前記第２メモリ領域を、前記オブジェクトの位置として特定することと、  
前記第２メモリ領域のサーバプロセスに前記起動の要求を通知することと、  
前記カーネルにおいて、前記サーバプロセスによる入力データの入力要求であって、前記第２メモリ領域内の前記入力データの受信のためのサーバ入力バッファを特定する前記入力要求を実行することと、  
入力データを、前記第１メモリ領域における前記クライアント入力バッファから、前記第２メモリ領域における前記サーバ入力バッファに、直接コピーすることと、  
前記カーネルにおいて、前記第２メモリ領域から出力データをコピーするための出力要求であって、前記出力データを含むサーバ出力バッファを特定する前記出力要求を実行することと、  
前記出力データを、前記第２メモリ領域における前記サーバ出力バッファから、前記第１メモリ領域における前記クライアント入力バッファに直接コピーすることと  
を備える方法。  
［２］前記システム呼び出しは、前記第１メモリ位置内のクライアントプロキシによって生成され、前記入力要求及び前記出力要求は、前記第２メモリ位置内のサーバプロキシによって生成される［１］の方法。  
［３］前記サーバプロセスへの前記起動の要求の通知に先立って、前記入力データの少なくとも一部を前記第２メモリ領域にコピーすることを更に備える［１］の方法。  
［４］前記システム呼び出しは、前記オブジェクトに対して、別のオブジェクトを起動する権限を与える入力パラメータ、または別のオブジェクトの起動の権限をクライアントプロセスに返す出力パラメータを含む［１］の方法。  
［５］前記カーネルにおいて、入力バッファへの直接のアクセスのための読み出し可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行することと、  
前記カーネルにおいて、出力バッファへの直接のアクセスのための書き込み可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行することと  
を更に備え、前記カーネルは、前記クライアントプロセスによって特定された前記メモリへの適切な種類のアクセス権を前記サーバプロセスが有することを確認することによって、前記要求を満足させる［１］の方法。  
［６］カーネルを有するメモリ保護アーキテクチャにおけるデータのプロセス間通信を実行する方法であって、  
前記カーネルにおいて、クライアントプロセスによるシステム呼び出しであって、サーバプロセス内のオブジェクトの起動を要求し、入力データを含む入力バッファと、出力データがコピーされる出力バッファのメモリ位置を特定する前記システム呼び出しを実行することと、  
前記入力バッファを読み出す権利及び前記出力バッファに書き込む権利を前記サーバプロセスに与えるよう、メモリ管理ユニットに対して指示することと、  
前記起動の要求を、前記サーバプロセスに通知することと、  
前記サーバプロセスに、前記特定されたメモリ位置を知らせることと、  
前記カーネルにおいて、前記オブジェクトが起動されたことの通知を前記サーバプロセスから受信することと、  
前記特定されたメモリ位置へのデータの読み出し及び書き込みの、サーバプロセスの権利を無効にするよう、前記メモリ管理ユニットに指示することと、  
前記クライアントプロセスに実行の制御を返すことと  
を備える方法。  
［７］メモリ保護アーキテクチャと共に動作するコンピュータシステムであって、前記コンピュータシステムは、  
メモリと、  
前記メモリに結合され、カーネルプロセス、クライアントプロセス、及びサーバプロセスを含むプロセッサ実行可能な命令を実行するプロセッサと  
を備え、前記クライアントプロセスは、第１メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記サーバプロセスは、第２メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記カーネルプロセスは、前記第１、第２メモリ領域及びカーネル領域へのメモリ読み出し書き込みアクセス権を有し、  
前記プロセッサには、  
前記カーネルにおいて、第１メモリ領域内部のクライアントプロセスによる、前記第２メモリ領域のオブジェクトの起動を要求するシステム呼び出しであって、前記入力データを含む前記第１メモリ領域におけるクライアント入力バッファと、出力データがコピーされる第１メモリ領域におけるクライアント出力バッファとを特定する前記システム呼び出しを実行することと、  
前記カーネルにおいて、前記第２メモリ領域を、前記オブジェクトの位置として特定することと、  
前記第２メモリ領域のサーバプロセスに前記起動の要求を通知することと、  
前記カーネルにおいて、前記サーバプロセスによる入力データの入力要求であって、前記第２メモリ領域内の前記入力データの受信のためのサーバ入力バッファを特定する前記入力要求を実行することと  
入力データを、前記第１メモリ領域における前記クライアント入力バッファから、前記第２メモリ領域における前記サーバ入力バッファに直接コピーすることと、  
前記カーネルにおいて、前記第２メモリ領域から出力データをコピーするための出力要求であって、前記出力データを含むサーバ出力バッファを特定する前記出力要求を実行することと  
前記出力データを、前記第２メモリ領域における前記サーバ出力バッファから、前記第１メモリ領域における前記クライアント入力バッファに直接コピーすることとを備えたステップを実行するソフトウェア命令が組み込まれたコンピュータシステム。  
［８］前記プロセッサには、前記システム呼び出しが、前記第１メモリ位置内のクライアントプロキシによって生成され、前記入力要求及び前記出力要求は、前記第２メモリ位置内のサーバプロキシによって生成されるように、ソフトウェア命令が組み込まれる［７］のコンピュータシステム。  
［９］前記プロセッサには、前記サーバプロセスへの前記起動の要求の通知に先立って、前記入力データの少なくとも一部を前記第２メモリ領域にコピーすることを備えるステップを更に実行するソフトウェア命令が組み込まれる［７］のコンピュータシステム。  
［１０］前記プロセッサには、前記システム呼び出しが、前記オブジェクトに対して、別のオブジェクトを起動する権限を与える入力パラメータ、または別のオブジェクトの起動の権限をクライアントプロセスに返す出力パラメータを含むように、ソフトウェア命令が組み込まれる［７］のコンピュータシステム。  
［１１］前記プロセッサには、前記カーネルにおいて、入力バッファへの直接のアクセスのための読み出し可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行することと、  
前記カーネルにおいて、出力バッファへの直接のアクセスのための書き込み可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行することとを備えたステップを実行するソフトウェア命令が更に組み込まれ、  
前記カーネルは、前記クライアントプロセスによって特定された前記メモリへの適切な種類のアクセス権を前記サーバプロセスが有することを確認することによって、前記要求を満足させる［７］のコンピュータシステム。  
［１２］メモリ保護アーキテクチャと共に動作するコンピュータシステムであって、前記コンピュータシステムは、  
メモリと、  
前記メモリに結合され、カーネルプロセス、クライアントプロセス、及びサーバプロセスを含むプロセッサ実行可能な命令を実行するプロセッサと  
を備え、前記クライアントプロセスは、第１メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記サーバプロセスは、第２メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記カーネルプロセスは、前記第１、第２メモリ領域及びカーネル領域へのメモリ読み出し書き込みアクセス権を有し、  
前記プロセッサには、  
前記カーネルにおいて、クライアントプロセスによるシステム呼び出しであって、サーバプロセス内のオブジェクトの起動を要求し、入力データを含む入力バッファと、出力データがコピーされる出力バッファのメモリ位置を特定する前記システム呼び出しを実行することと、  
前記入力バッファを読み出す権利及び前記出力バッファに書き込む権利を前記サーバプロセスに与えるよう、メモリ管理ユニットに対して指示することと、  
前記起動の要求を、前記サーバプロセスに通知することと、  
前記サーバプロセスに、前記特定されたメモリ位置を知らせることと、  
前記カーネルにおいて、前記オブジェクトが起動されたことの通知を前記サーバプロセスから受信することと、  
前記特定されたメモリ位置へのデータの読み出し及び書き込みの、サーバプロセスの権利を無効にするよう、前記メモリ管理ユニットに指示することと、  
前記クライアントプロセスに実行の制御を返すこととを備えたステップを実行するソフトウェア命令が組み込まれたコンピュータシステム。  
［１３］メモリ保護アーキテクチャと共に動作する携帯端末であって、コンピュータシステムは、  
メモリと、  
前記メモリに結合され、カーネルプロセス、クライアントプロセス、及びサーバプロセスを含むプロセッサ実行可能な命令を実行するプロセッサと  
を備え、前記クライアントプロセスは、第１メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記サーバプロセスは、第２メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記カーネルプロセスは、前記第１、第２メモリ領域及びカーネル領域へのメモリ読み出し書き込みアクセス権を有し、  
前記プロセッサには、  
前記カーネルにおいて、第１メモリ領域内部のクライアントプロセスによる、前記第２メモリ領域のオブジェクトの起動を要求するシステム呼び出しであって、入力データを含む前記第１メモリ領域におけるクライアント入力バッファと、出力データがコピーされる第１メモリ領域におけるクライアント出力バッファとを特定する前記システム呼び出しを実行することと、  
前記カーネルにおいて、前記第２メモリ領域を、前記オブジェクトの位置として特定することと、  
前記第２メモリ領域のサーバプロセスに前記起動の要求を通知することと、  
前記カーネルにおいて、サーバプロセスによる入力データの入力要求であって、前記第２メモリ領域内の前記入力データの受信のためのサーバ入力バッファを特定する前記入力要求を実行することと、  
入力データを、前記第１メモリ領域における前記クライアント入力バッファから、前記第２メモリ領域における前記サーバ入力バッファに直接コピーすることと、  
前記カーネルにおいて、前記第２メモリ領域から出力データをコピーするための出力要求であって、前記出力データを含むサーバ出力バッファを特定する前記出力要求を実行することと、  
前記出力データを、前記第２メモリ領域における前記サーバ出力バッファから、前記第１メモリ領域における前記クライアント入力バッファに直接コピーすることと  
を備えたステップを実行するソフトウェア命令が組み込まれた携帯端末。  
［１４］前記プロセッサには、前記システム呼び出しが、前記第１メモリ位置内のクライアントプロキシによって生成され、前記入力要求及び前記出力要求は、前記第２メモリ位置内のサーバプロキシによって生成されるように、ソフトウェア命令が組み込まれる［１３］の携帯端末。  
［１５］前記プロセッサには、前記サーバプロセスへの前記起動の要求の通知に先立って、前記入力データの少なくとも一部を前記第２メモリ領域にコピーすることを備えるステップを更に実行するソフトウェア命令が組み込まれる［１３］の携帯端末。  
［１６］前記プロセッサには、前記システム呼び出しが、前記オブジェクトに対して、別のオブジェクトを起動する権限を与える入力パラメータ、または別のオブジェクトの起動の権限をクライアントプロセスに返す出力パラメータを含むように、ソフトウェア命令が組み込まれる［１３］の携帯端末。  
［１７］前記プロセッサには、前記カーネルにおいて、入力バッファへの直接のアクセスのための読み出し可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行することと、  
前記カーネルにおいて、出力バッファへの直接のアクセスのための書き込み可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行することとを備えたステップを実行するソフトウェア命令が組み込まれ、  
前記カーネルは、前記クライアントプロセスによって特定された前記メモリへの適切な種類のアクセス権を前記サーバプロセスが有することを確認することによって、前記要求を満足させる［１３］の携帯端末。  
［１８］メモリ保護アーキテクチャと共に動作する携帯端末であって、コンピュータシステムは、  
メモリと、  
前記メモリに結合され、カーネルプロセス、クライアントプロセス、及びサーバプロセスを含むプロセッサ実行可能な命令を実行するプロセッサと  
を備え、前記クライアントプロセスは、第１メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記サーバプロセスは、第２メモリ領域に限定されたメモリ読み出し及び書き込みアクセス権を有し、前記カーネルプロセスは、前記第１、第２メモリ領域及びカーネル領域へのメモリ読み出し書き込みアクセス権を有し、  
前記プロセッサには、  
前記カーネルにおいて、クライアントプロセスによるシステム呼び出しであって、サーバプロセス内のオブジェクトの起動を要求し、入力データを含む入力バッファと、出力データがコピーされる出力バッファのメモリ位置とを特定する前記システム呼び出しを実行することと、  
前記入力バッファを読み出す権利及び前記出力バッファに書き込む権利を前記サーバプロセスに与えるよう、メモリ管理ユニットに対して指示することと、  
前記起動の要求を、前記サーバプロセスに通知することと、  
前記サーバプロセスに、前記特定されたメモリ位置を知らせることと、  
前記カーネルにおいて、前記オブジェクトが起動されたことの通知を前記サーバプロセスから受信することと、  
前記特定されたメモリ位置へのデータの読み出し及び書き込みの、サーバプロセスの権利を無効にするよう、前記メモリ管理ユニットに指示することと、  
前記クライアントプロセスに実行の制御を返すことと  
を備えたステップを実行するソフトウェア命令が組み込まれている携帯端末。  
［１９］プロセッサに実行可能な命令が記録されている、実体的なプロセッサ読み取り可能なメモリであって、前記命令は、メモリに結合されたプロセッサに対して、  
前記カーネルにおいて、第１メモリ領域内部のクライアントプロセスによる、前記第２メモリ領域のオブジェクトの起動を要求するシステム呼び出しであって、入力データを含む前記第１メモリ領域におけるクライアント入力バッファと、出力データがコピーされる第１メモリ領域におけるクライアント出力バッファとを特定する前記システム呼び出しを実行することと、  
前記カーネルにおいて、前記第２メモリ領域を、前記オブジェクトの位置として特定することと、  
前記第２メモリ領域のサーバプロセスに前記起動の要求を通知することと、  
前記カーネルにおいて、前記サーバプロセスによる入力データの入力要求であって、前記第２メモリ領域内の前記入力データの受信のためのサーバ入力バッファを特定する前記入力要求を実行することと、  
前記第１メモリ領域における前記クライアント入力バッファから、入力データを前記第２メモリ領域における前記サーバ入力バッファに直接コピーすることと、  
前記カーネルにおいて、前記第２メモリ領域から出力データをコピーするための出力要求であって、前記出力データを含むサーバ出力バッファを特定する前記出力要求を実行することと、  
前記第２メモリ領域における前記サーバ出力バッファから、前記出力データを前記第１メモリ領域における前記クライアント入力バッファに直接コピーすることと  
を備えたステップを実行させるように構成されている、実体的なプロセッサ読み取り可能なメモリ。  
［２０］前記記録されたプロセッサに実行可能な命令は、前記システム呼び出しが、前記第１メモリ位置内のクライアントプロキシによって生成され、前記入力要求及び前記出力要求は、前記第２メモリ位置内のサーバプロキシによって生成されるように更に構成される［１９］の実体的なプロセッサ読み取り可能なメモリ。  
［２１］前記記録されたプロセッサに実行可能な命令は、前記プロセッサに対して、前記サーバプロセスへの前記起動の要求の通知に先立って、前記入力データの少なくとも一部を前記第２メモリ領域にコピーすることを更に備えるステップを実行させるように更に構成される［１９］の実体的なプロセッサ読み取り可能なメモリ。  
［２２］前記記録されたプロセッサに実行可能な命令は、前記システム呼び出しが、前記オブジェクトに対して、別のオブジェクトを起動する権限を与える入力パラメータ、または別のオブジェクトの起動の権限をクライアントプロセスに返す出力パラメータを含むように構成される［１９］の実体的なプロセッサ読み取り可能なメモリ。  
［２３］前記記録されたプロセッサに実行可能な命令は、前記プロセッサに対して、  
前記カーネルにおいて、入力バッファへの直接のアクセスのための読み出し可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行することと、  
前記カーネルにおいて、出力バッファへの直接のアクセスのための書き込み可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行することとを更に備えたステップを実行させるように構成され、  
前記カーネルは、前記クライアントプロセスによって特定された前記メモリへの適切な種類のアクセス権を前記サーバプロセスが有することを確認することによって、前記要求を満足させる［１９］の実体的なプロセッサ読み取り可能なメモリ。  
［２４］プロセッサに実行可能な命令が記録されている、実体的なプロセッサ読み取り可能なメモリであって、前記命令は、メモリに結合されたプロセッサに対して、  
前記カーネルにおいて、クライアントプロセスによるシステム呼び出しであって、サーバプロセス内のオブジェクトの起動を要求し、入力データを含む入力バッファと、出力データがコピーされる出力バッファのメモリ位置を特定する前記システム呼び出しを実行することと、  
前記入力バッファを読み出す権利及び前記出力バッファに書き込む権利を前記サーバプロセスに与えるよう、メモリ管理ユニットに対して指示することと、  
前記起動の要求を、前記サーバプロセスに通知することと、  
前記サーバプロセスに、前記特定されたメモリ位置を知らせることと、  
前記カーネルにおいて、前記オブジェクトが起動されたことの通知を前記サーバプロセスから受信することと、  
前記特定されたメモリ位置へのデータの読み出し及び書き込みの、サーバプロセスの権利を無効にするよう、前記メモリ管理ユニットに指示することと、  
前記クライアントプロセスに実行の制御を返すことと  
を備えたステップを実行させるように構成されている、実体的なプロセッサ読み取り可能なメモリ。  
［２５］システムの主たる動作を制御するカーネル手段と、  
第１メモリ領域内のクライアントプロセスと、  
第２メモリ領域内のサーバプロセスと、  
前記クライアントプロセスによるシステム呼び出しであって、前記サーバプロセス内のオブジェクトの起動を要求し、入力データを含む前記第１メモリ領域におけるクライアント入力バッファと、出力データがコピーされる第１メモリ領域におけるクライアント出力バッファとを特定する前記システム呼び出しを実行する手段と、  
前記カーネルにおいて、前記第２メモリ領域を、前記オブジェクトの位置として特定する手段と、  
前記第２メモリ領域のサーバプロセスに前記起動の要求を通知する手段と、  
前記カーネルにおいて、前記サーバプロセスによる入力データの入力要求であって、前記第２メモリ領域内の前記入力データの受信のためのサーバ入力バッファを特定する前記入力要求を実行する手段と、  
入力データを、前記第１メモリ領域における前記クライアント入力バッファから、前記第２メモリ領域における前記サーバ入力バッファに直接コピーする手段と、  
前記第２メモリ領域から出力データをコピーするための出力要求であって、前記出力データを含むサーバ出力バッファを特定する前記出力要求を受信する手段と、  
前記出力データを、前記第２メモリ領域における前記サーバ出力バッファから、前記第１メモリ領域における前記クライアント入力バッファに直接コピーする手段と  
を備えるシステム。  
［２６］前記システム呼び出しは、前記第１メモリ位置内のクライアントプロキシによって生成され、前記入力要求及び前記出力要求は、前記第２メモリ位置内のサーバプロキシによって生成される［２５］のシステム。  
［２７］前記サーバプロセスへの前記起動の要求の通知に先立って、前記入力データの少なくとも一部を前記第２メモリ領域にコピーすることを更に備える［２５］のシステム。  
［２８］前記システム呼び出しは、前記オブジェクトに対して、別のオブジェクトを起動する権限を与える入力パラメータ、または別のオブジェクトの起動の権限をクライアントプロセスに返す出力パラメータを含む［２５］のシステム。  
［２９］前記カーネルにおいて、入力バッファへの直接のアクセスのための読み出し可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行する手段と、  
前記カーネルにおいて、出力バッファへの直接のアクセスのための書き込み可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行する手段とを更に備え、  
前記カーネルは、前記クライアントプロセスによって特定された前記メモリへの適切な種類のアクセス権を前記サーバプロセスが有することを確認することによって、前記要求を満足させる［２５］のシステム。  
［３０］システムの主たる動作を制御するカーネル手段と、  
第１メモリ領域内のクライアントプロセスと、  
第２メモリ領域内のサーバプロセスと、  
前記カーネルにおいて、クライアントプロセスによるシステム呼び出しであって、サーバプロセス内のオブジェクトの起動を要求し、入力データを含む入力バッファと、出力データがコピーされる出力バッファのメモリ位置を特定する前記システム呼び出しを実行する手段と、  
前記入力バッファを読み出す権利及び前記出力バッファに書き込む権利を前記サーバプロセスに与えるよう、メモリ管理ユニットに対して指示する手段と、  
前記起動の要求を、前記サーバプロセスに通知する手段と、  
前記サーバプロセスに、前記特定されたメモリ位置を知らせる手段と、  
前記カーネルにおいて、前記オブジェクトが起動されたことの通知を前記サーバプロセスから受信する手段と、  
前記特定されたメモリ位置へのデータの読み出し及び書き込みの、サーバプロセスの権利を無効にするよう、前記メモリ管理ユニットに指示する手段と、  
前記クライアントプロセスに実行の制御を返す手段と  
を備えるシステム。  
［３１］コンピュータ読み取り可能な媒体を備えたコンピュータプログラム製品であって、前記コンピュータ読み取り可能な媒体は、  
コンピュータに対して、前記カーネルにおいて、第１メモリ領域内部のクライアントプロセスによる、前記第２メモリ領域のオブジェクトの起動を要求するシステム呼び出しであって、入力データを含む前記第１メモリ領域におけるクライアント入力バッファと、出力データがコピーされる第１メモリ領域におけるクライアント出力バッファとを特定する前記システム呼び出しを実行させる、少なくとも一つの命令と、  
コンピュータに対して、前記カーネルにおいて、前記第２メモリ領域を前記オブジェクトの位置として特定させる、少なくとも一つの命令と、  
コンピュータに対して、前記第２メモリ領域のサーバプロセスに前記起動の要求を通知させる、少なくとも一つの命令と、  
コンピュータに対して、前記カーネルにおいて、前記サーバプロセスによる入力データの入力要求であって、前記第２メモリ領域内の前記入力データの受信のためのサーバ入力バッファを特定する前記入力要求を実行させる、少なくとも一つの命令と、  
コンピュータに対して、前記第１メモリ領域における前記クライアント入力バッファから、入力データを前記第２メモリ領域における前記サーバ入力バッファに直接コピーさせる、少なくとも一つの命令と、  
コンピュータに対して、前記カーネルにおいて、前記第２メモリ領域から出力データをコピーするための出力要求であって、前記出力データを含むサーバ出力バッファを特定する前記出力要求を実行させる、少なくとも一つの命令と、  
コンピュータに対して、前記第２メモリ領域における前記サーバ出力バッファから、前記出力データを前記第１メモリ領域における前記クライアント入力バッファに直接コピーさせる、少なくとも一つの命令と  
を備えたコンピュータプログラム製品。  
［３２］前記コンピュータ読み取り可能な媒体は、  
コンピュータに対して、前記第１メモリ位置内のクライアントプロキシにおいて、前記システム呼び出しを生成させる、少なくとも一つの命令と、  
コンピュータに対して、前記第２メモリ位置内のサーバプロキシにおいて、前記入力要求及び前記出力要求を生成させる、少なくとも一つの命令とを更に備える［３１］のコンピュータプログラム製品。  
［３３］前記コンピュータ読み取り可能な媒体は、  
コンピュータに対して、前記サーバプロセスへの前記起動の要求の通知に先立って、前記入力データの少なくとも一部を前記第２メモリ領域にコピーさせる、少なくとも一つの命令を更に備える［３１］のコンピュータプログラム製品。  
［３４］前記コンピュータ読み取り可能な媒体は、  
コンピュータに対して、前記オブジェクトに別のオブジェクトを起動する権限を与える入力パラメータ、または別のオブジェクトの起動の権限をクライアントプロセスに返す出力パラメータを含む前記システム呼び出しを生成させる、少なくとも一つの命令を更に備える［３１］のコンピュータプログラム製品。  
［３５］前記コンピュータ読み取り可能な媒体は、  
コンピュータに対して、前記カーネルにおいて、入力バッファへの直接のアクセスのための読み出し可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行させる、少なくとも一つの命令と、  
コンピュータに対して、前記カーネルにおいて、出力バッファへの直接のアクセスのための書き込み可能なメモリアドレスを、前記サーバプロセスに供給するための要求を実行させる、少なくとも一つの命令と、  
を備え、前記カーネルは、前記クライアントプロセスによって特定された前記メモリへの適切な種類のアクセス権を前記サーバプロセスが有することを確認することによって、前記要求を満足させる［３１］のコンピュータプログラム製品。  
［３６］コンピュータ読み取り可能な媒体を備えたコンピュータプログラム製品であって、前記コンピュータ読み取り可能な媒体は、  
コンピュータに対して、前記カーネルにおいて、クライアントプロセスによるシステム呼び出しであって、サーバプロセス内のオブジェクトの起動を要求し、入力データを含む入力バッファと、出力データがコピーされる出力バッファのメモリ位置を特定する前記システム呼び出しを実行させる、少なくとも一つの命令と、  
コンピュータに対して、前記入力バッファを読み出す権利及び前記出力バッファに書き込む権利を前記サーバプロセスに与えるよう、メモリ管理ユニットに指示させる、少なくとも一つの命令と、  
コンピュータに対して、前記起動の要求を、前記サーバプロセスに通知させる、少なくとも一つの命令と、  
コンピュータに対して、前記サーバプロセスに前記特定されたメモリ位置を通知させる、少なくとも一つの命令と、  
コンピュータに対して、前記カーネルにおいて、前記オブジェクトが起動されたことの通知を前記サーバプロセスから受信させる、少なくとも一つの命令と、  
コンピュータに対して、前記特定されたメモリ位置へのデータの読み出し及び書き込みの、サーバプロセスの権利を無効にするよう、前記メモリ管理ユニットに指示させる、少なくとも一つの命令と、  
コンピュータに対して、前記クライアントプロセスに実行の制御を返させる、少なくとも一つの命令と  
を備えたコンピュータプログラム製品。  
［３７］カーネルインターフェースと、  
前記カーネルインターフェースと通信するカーネルプロセスと  
を備え、前記カーネルプロセスは、間に介在するコピー動作を行うことなく、第１保護領域と第２保護領域との間でデータを直接コピーするように動作可能である、コンピュータシステム。
【図１】
0005518946.tif 000002
【図２】
0005518946.tif 000003
【図３】
0005518946.tif 000004
【図４】
0005518946.tif 000005
【図５Ａ】
0005518946.tif 000006
【図５Ｂ】
0005518946.tif 000007
【図６Ａ】
0005518946.tif 000008
【図６Ｂ】
0005518946.tif 000009
【図７】
0005518946.tif 000010
【図８】
0005518946.tif 000011
【図９】
0005518946.tif 000012
【図１０】
0005518946.tif 000013
【図１１】
0005518946.tif 000014
【図１２】
0005518946.tif 000015
【図１３】
0005518946.tif 000016
【図１４】
0005518946.tif 000017
【図１５】
0005518946.tif 000018
【図１６】
0005518946.tif 000019