JP3881704B2 - クライアント側スタブインタプリタ - Google Patents
クライアント側スタブインタプリタ Download PDFInfo
- Publication number
- JP3881704B2 JP3881704B2 JP24243694A JP24243694A JP3881704B2 JP 3881704 B2 JP3881704 B2 JP 3881704B2 JP 24243694 A JP24243694 A JP 24243694A JP 24243694 A JP24243694 A JP 24243694A JP 3881704 B2 JP3881704 B2 JP 3881704B2
- Authority
- JP
- Japan
- Prior art keywords
- stub
- code
- client
- interpreter
- subcontract
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Lifetime
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
- G06F9/548—Object oriented; Remote method invocation [RMI]
Description
【産業上の利用分野】
本発明は分散形計算システム、クライアントサーバ計算及びオブジェクト指向プログラミングの分野に関する。特定すれば、本発明は、クライアント側スタブにより要求されるメモリスペースを最小限に抑えるように設計され且つクライアント側スタブジェネレータ及びクライアント側スタブインタプリタと呼ばれる論理モジュールを具備する方法及び装置である。
【0002】
【従来の技術】
オペレーティングシステムの開発と保守における重大な問題は、オペレーティングシステムにインプリメンテーションの詳細をロードダウンせずにクライアントやプログラマに最大限の融通性を与えるような方法で新たなインタフェースとインプリメンテーション技法の導入を可能にするということである。さらに、マイクロカーネルアーキテクチャを有するオブジェクト指向オペレーティングシステムを開発する場合には、この問題は一層深刻になる。マイクロカーネルは、典型的には、クライアントに、たとえば、ファイルシステムなどのクライアントレベルの複雑なサブシステムを実現させる。それにもかかわらず、クライアント間通信又はコンピュータ間通信などの基本システムプロセスは非常に複雑であるので、クライアントとオブジェクトインプリメンタはそれらのプロセスに関わるべきではない。すなわち、それらの本来は「システム」型であるプロセスは標準モジュールによってより効率良く実行されるのであるが、基本オペレーティングシステムがそれらのプロセスによって制約されることを要求しないような方法で処理されるべきである。
【0003】
システムの異なるコンポーネントの間のインタフェースを定義するためにオブジェクトメタファを使用するシステムについてこの基本的な問題を解決する方法の一部として、スタブや、他の同様の種類の中間論理モジュールが使用されてきた。そのようなスタブは、呼出しのパラメータとして別のオブジェクトを送信していることもある遠隔コンピュータの間でのオブジェクト呼出しの通信を処理するための標準モジュールとして記述される。それらのスタブ及び他の類似するモジュールと、その相互関係については、以下に、スタブジェネレータとスタブインタプリタを含む本発明の詳細な説明の文脈の中でさらに詳細に説明する。
【0004】
オブジェクト指向システムでは、オブジェクトは、データと、そのデータを操作するために呼出すことができる動作とから成るコンポーネントである。動作はオブジェクトにおいて、オブジェクトへ呼出しを送信することによって呼出される。各オブジェクトはオブジェクト型を有する。オブジェクト型はその型のオブジェクトで実行できる動作を定義する。オブジェクト動作はオブジェクト自体とは無関係に実現される。加えて、1つのオブジェクト型は他のオブジェクト型に関して定義され且つ実現されるオブジェクト動作を継承していることもある。オブジェクト指向デザインとプログラミング技法の詳細については、Bertrand Meyerの「Object−oriented Software Construction」(Prentice−Hall,1988年)を参照。
【0005】
クライアント−サーバ計算においては、典型的には、コンピュータを接続するネットワークを介して互いに通信できる1組のコンピュータがある。それらのコンピュータの一部は、他のコンピュータにサービス又は機能性を提供する働きをする。そのようなサービス又は機能の提供者は「サーバ」として知られており、そのようなサービス又は機能性を消費する側を「クライアント」と呼ぶ。クライアント−サーバモデルは、同じコンピュータでランしている別個のプログラムが何らかの保護メカニズムを介して互いに通信しており且つ機能性の提供者並びに消費者として活動しているようなケースにも一般化される。
【0006】
クライアント−サーバモデルに基づくオブジェクト指向分散形システムには、オブジェクト指向インタフェースをクライアントに提供するサーバが存在する。それらのサーバはデータと、関連ソフトウェアとから構成されるオブジェクトを支援する。クライアントはそれらのオブジェクトに対するアクセスを獲得し且つそれらのオブジェクトに対して呼出しを実行する。それらの呼出しはクライアントからサーバへ伝送される。サーバでは、それらの呼出しをオブジェクトと関連するソフトウェアを介して実行する。次に、それらの呼出しの結果をクライアントに伝送して戻す。
【0007】
さらに最近のシステムにおいては、アプリケーションソフトウェアはネットワークと直接には通信しない。その代わりに、アプリケーションソフトウェアは「スタブ」(図1の14)と通信する。スタブは、クライアントとサーバとの間にネットワークが存在しているか否かにかかわらず、一貫したインタフェースを形成する。システムにより支援される個別のインタフェースごとに、別々のスタブが存在する。スタブコードは、アプリケーションレベルソフトウェアが見る特定言語レベルインタフェースと、ネットワークソフトウェアが提供する標準低レベル通信インタフェースとの間で変換を実行する必要がある。たとえば、スタブは遠隔呼出しに対する引数を取上げ、それらの引数をネットワークソフトウェアがネットワークを介して伝送するのに適するメッセージに導入する必要がある。そのようなスタブの利用法は、Donald E.Merusiの著書「Software Implementation Technique」の349〜368ページのRemote Procedure Calls(「RPC」)についての章(Digital Press,1992年,ISBN1−55558−090−4)の中に記載されている。
【0008】
そのようなオブジェクト指向分散形システムで生成されるクライアント側スタブの数の関係上、それらの数多くのクライアント側スタブに関連するコードが占めるテキストメモリスペースを縮小するためのメカニズムが必要であることが明らかになっている。
【0009】
【発明が解決しようとする課題】
従って、本発明は、分散形システムで最も重要であるオブジェクト呼出し及び引数渡しの基本メカニズムの制御を実行するためのスタブの設計を保持しつつ、クライアント側スタブが要求するメモリスペースを最小限に抑えるように設計されており且つアプリケーションプログラマに特定のオブジェクトのために使用されている特定スタブを知らせないようにしても差しつかえないようにする、クライアント側スタブジェネレータ、圧縮クライアント側スタブ実行コードのデータベース及びクライアント側スタブインタプリタと呼ばれる論理モジュールを具備する装置及び方法を提供することを課題内とする。
【0010】
【課題を解決するための手段】
本発明は、クライアントアプリケーションによるオブジェクトの呼出しを実行し且つクライアントアプリケーションと、オブジェクトインプリメンテーションとの間で引数を渡すメカニズムを形成し、クライアントアプリケーション又はオペレーティングシステムはそれらのメカニズムがどのように動作するかの詳細を知ることなく、クライアント側スタブ用として要求されるメモリスペースを縮小するような手際よく、簡潔な方法を提供する。さらに、それらのメカニズムは、クライアントアプリケーションが1つのコンピュータノードにあり、オブジェクトインプリメンテーションは別のコンピュータノードにあるような分散形コンピュータ環境でも同様の容易さと効率をもって機能する。
【0011】
コンピュータシステム中のクライアントにより呼出される特定のスタブ動作を、複数の異なるスタブ方法に共通するコードとして識別され、そのスタブ動作を実行するために要求されるコードの第1の部分をコンピュータメモリの第1の領域からアクセスし、且つ呼出される特定のスタブ動作について独自のものであるコードの第2の部分をコンピュータメモリの第2の部分からアクセスすることによって実行する方法及び装置を説明する。複数のスタブ方法に共通するコードは一度しか記憶されないので、これにより、要求されるコンピュータメモリを縮小できる。
【0012】
さらに、スタブ動作を実行するために生成されるコードを複数のスタブ方法に共通するコードの第1の部分と、各スタブ動作について独自のものであるコードの第2の部分とに分割すると共に、様々な方法、テキスト及びパラメータのバイトコード表現を使用して、このコードの第2の部分を圧縮形式でコンピュータメモリに記憶するプロセスを提供する方法及び装置を示す。複数のスタブ方法に共通するコードの部分はスタブインタプリタと呼ばれるメカニズムの中に含まれており、このスタブインタプリタは、クライアントによりスタブ動作が呼出されるたびに、共通コードのこの部分を供給する。スタブインタプリタは、スタブ方法が呼出されるたびに、そのスタブ方法を完了するために要求されるスタブコードの独自の部分を獲得するために、メモリをアクセスする。
【0013】
このメモリスペースを縮小するために使用されるメカニズムは、コンピュータメモリに記憶される圧縮クライアント側スタブ記述ファイルから成るデータベースを生成するスタブジェネレータ(「CONTOCC」と呼ばれる)と、それらのクライアント側スタブ記述ファイルをいかにして読取るべきかについての知識をもつスタブインタプリタとを具備する。CONTOCCはインタフェース定義言語(「IDL」)ファイルを読取り、対応するC++ファイルを生成する。CONTOCCはIDLデータを読取り、圧縮解除C++スタブファイルか、バイト符号化形態に含まれている特定のスタブ方法について独自のものであるデータのみを含む特殊圧縮クライアント側スタブインタプリタファイルのいずれかを生成する能力を有する。
【0014】
スタブインタプリタ論理モジュールはターゲットオブジェクトと、呼出された特定のスタブ方法に関連する引数と、コンピュータメモリに記憶されている圧縮クライアント側スタブ記述ファイルのデータベースの中のスタブコードの圧縮バイトコード表現に対するポインタとを受信し、必要に応じてオブジェクト呼出し、戻りメッセージのマーシャル化又はアンマーシャル化を実行するように進行する。
本発明のシステムの目的、特徴及び利点は以下の説明から明白になるであろう。
【0015】
〔表記法及び用語〕
以下の詳細な説明はコンピュータ又は複数のコンピュータから成るネットワークで実行されるプログラム手続きによって提示される。そのような手続きによる手続きや表現は、当業者がその作業の内容を他の当業者に最も有効に伝達するために使用する手段である。
【0016】
ここでは、また、一般的にも、手続きはある所望の結果に至るステップの首尾一貫したシーケンスである。それらのステップは物理的量の物理的操作を要求するステップである。通常、それらの量は記憶、転送、組合せ、比較及びその他の操作が可能である電気信号又は磁気信号の形態をとる。時によっては、主として一般に使用されている用語であるという理由により、それらの信号をビット、値、要素、信号、文字、項、数などと呼ぶと好都合であることがわかる。しかしながら、それらの用語及びそれに類する用語は、全て、適切な物理的量と関連させるべきものであり、単にそれらの量に便宜上付されたラベルであるにすぎないということに注意すべきである。
【0017】
さらに、実行される操作を、一般にはオペレータが実行する知的動作と関連する加算又は比較などの用語で呼ぶことが多い。ここで説明する、本発明の一部を成す動作のいずれをとっても、オペレータのそのような能力は不要であるか、又は多くの場合に望ましくない。動作は機械動作である。本発明の動作を実行するのに有用な機械には、汎用デジタルコンピュータ又はそれに類する装置がある。
【0018】
本発明は、それらの動作を実行するための装置にも関する。この装置は要求される目的に合わせて特別に構成されても良く、あるいは、汎用コンピュータに記憶させたコンピュータプログラムによってコンピュータを選択的に起動又は再構成しても良い。ここで提示する手続きは、本来、特定のコンピュータ又は他の特定の装置に関連するものではない。様々な汎用機械をここで示す教示に従って書込んだプログラムと共に使用しても良く、あるいは、要求される方法ステップを実行するためには、より特殊化した装置を構成するほうが好都合であると判明するかもしれない。それらの様々な機械について要求される構造は以下の説明から明白になるであろう。
【0019】
【実施例】
以下の開示は、オブジェクト指向、クライアントサーバ、分散形計算演算から成る計算環境におけるスタブ演算を実行するコンピュータコードが占める総メモリスペースを縮小する独特の革新的な方法及び装置を説明する。
【0020】
そこで図2を参照すると、本発明が示されている。本発明は、入力としてインタフェース定義言語(「IDL」)コード150を受信し、必要に応じてクライアント側スタブ用の圧縮コード及びテーブルから成るデータベース156を生成するか、又は必要に応じて正規のC++スタブコード154を生成するクライアント側スタブジェネレータ(「CONTOCC」)152と、マーシャル化、アンマーシャル化及びオブジェクト呼出しといったクライアント側スタブ機能を実行できるランタイムクライアント側スタブインタプリタ158とを含む。呼出されつつある方法に対するターゲットオブジェクトと引数168を渡し且つコンピュータメモリ170に記憶されている正規スタブコードを介してその方法を実行する正規スタブ方法呼出し162が指示されている。また、スタブインタプリタ158と共に使用される型のスタブ方法呼出し164も示されており、これも呼出されつつある方法に対するターゲットオブジェクトと引数を渡すのであるが、それに加えて、コンピュータメモリ172の圧縮スタブコード166に対するポインタを渡し、それにより、スタブインタプリタ158はその方法呼出しを実行することができる。以下、本発明の好ましい実施例を実現する動作環境を簡単に説明した後に、本発明のそれらのコンポーネントについてさらに詳細に説明する。
【0021】
以下の説明中、本発明を完全に理解させるために、説明の便宜上、特定のデータや構成を挙げる。ここで説明する好ましい実施例は、方法テーブルと、サブコントラクトメカニズムと、「サブコントラクトの」局所専用状態を表わすデータ構造とを含む「spring object」 と呼ばれる新しい型のオブジェクトを含む計算環境において実現され、ここに挙げたものは全てSun Microsystems,Inc.(「Sun」)のSPRING Object Oriented Operating System(「SPRING」)の制御の下に動作している。クライアント側スタブインタプリタとその基礎を成すプロセスをここで説明する特定の詳細がなくとも実施しうると共に、様々なコンピュータシステムや、密結合プロセッサの様々な構成、形態又はモデル、あるいは、疎結合多重プロセッサシステムの様々な構成において実現しうることは当業者には認められるであろう。
【0022】
SPRINGオブジェクトは、状態を含み、その状態を操作するための1組の方法を提供する抽象である。オブジェクトとその方法の記述は、インタフェース定義言語(「IDL」)で指定されるインタフェースである。インタフェースはインプリメンタ(サーバ)と、オブジェクトのクライアントとの間の強く型付けされたコントラクトである。
【0023】
SPRINGドメインは、スレッド群を伴なうアドレススペースである。1つのドメインが与えられたとき、そのドメインはいくつかのオブジェクトのサーバとして活動し、別のオブジェクトのクライアントとして活動することもある。インプリメンタとクライアントは同一のドメインにあっても良く、異なるドメインにあっても良い。
【0024】
SPRINGはオブジェクト指向であるので、インタフェース継承の概念を支援する。SPRINGは単一インタフェース継承と、多重インタフェース継承双方の概念を支援する。「foo」型のオブジェクトを受入れるインタフェースは、[foo」のサブクラスの事例をも受入れる。たとえば、address_spaceオブジェクトはmemory_objectを取出し、それをアドレススペースにマッピングする方法を有する。同じ方法は、memory_objectインタフェースから継承するオブジェクトである限り、fileオブジェクトや frame_bufferオブジェクトをも受入れる。
【0025】
SPRINGカーネルは基本クロスドメイン呼出し及びスレッド、低レベル機械依存処理、並びにメモリマッピング及び物理メモリ管理のための基本仮想メモリ支援を支援する。SPRINGカーネルは他のSPRINGカーネルに関する知識をもたず、遠隔呼出しは全てネットワークプロクシサーバによって処理される。加えて、仮想メモリシステムは外部ページャに依存して、記憶とネットワークのコヒーレンシーを処理する。
【0026】
各々のオブジェクトと関連してサブコントラクトメカニズムがある。各サブコントラクトはクライアント側部分と、関連するサーバ側部分とを有する。各オブジェクト型は関連するサブコントラクトを有する。サブコントラクトのクライアント側部分は新たなspringオブジェクトを生成し、springオブジェクトを削除し、関連オブジェクトに関する情報を通信バッファにマーシャル化し、関連オブジェクトを表わす通信バッファ中のデータをアンマーシャル化し、オブジェクトを1つの記憶場所から別の記憶場所へ伝送すること又はオブジェクトのコピーを1つの記憶場所から別の記憶場所に伝送することを含めて、通信バッファを関連するサーバ側サブコントラクトへ伝送する能力を有する。サブコントラクトメカニズムのサーバ側部分はspringオブジェクトを生成し、入力呼出し及び関連通信バッファを処理するための支援を実行し、オブジェクトを無効にするための支援を実行する能力を有する。
【0027】
spring オブジェクトモデル
SPRINGは他の分散形オブジェクト指向システムとはわずかに異なる方式でオブジェクトを見ているので、スタブインタプリタ、スタブ及びサブコントラクトの詳細を論ずるのに先立って、このことを明確にしておく必要がある。
【0028】
大半の分散形システムは、オブジェクトがサーバ機械に常駐し、クライアント機械はサーバにあるオブジェクトを指示する「オブジェクトハンドル」を所有するようなモデルを提示する(図10aを参照)。そのため、クライアントはオブジェクトではなく、オブジェクトハンドルを渡してゆく。
【0029】
SPRINGは、オブジェクトハンドルではなく、オブジェクトに対して直接にクライアントが動作しているようなモデルを提供する(図10bを参照)。それらのオブジェクトのいくつかはいずれかの遠隔場所でその関心状態を全て保持することもあるので、それらのオブジェクトの局所状態は単にこの遠隔状態に対するハンドルから構成されるのみである。1つのオブジェクトは一度に1つの場所で存在することしかできないので、オブジェクトを誰か別の人へ伝送する場合には、伝送者自身はそのオブジェクトに関わるのを止める。ところが、伝送する前にオブジェクトをコピーすることも可能であり、これは同一の遠隔場所を指示する2つの別個のオブジェクトが存在するように実現されるであろう。
【0030】
このように、多くのシステムでは、何らかの遠隔オブジェクトを参照するオブジェクトハンドルを有するいくつかのクライアントについて述べることになるであろうが、SPRINGにおいては、いくつかのクライアントが同じ遠隔場所を参照するオブジェクトを有するということになるであろう。
【0031】
多くのサーバ利用オブジェクトに対して、この相違は主に用語の違いである。しかしながら、SPRINGはサーバをベースとしないオブジェクト、すなわち、オブジェクトの状態がクライアントとサーバとの間で分割されているような状況をも支援する。このような場合、クライアントを単にポインタを所有するのではなく、真のオブジェクトを所有するものとみなすことがはるかに好都合である。
【0032】
インタフェース定義言語
SPRINGの単一化原理は、重要な全てのインタフェースが標準インタフェース定義言語で定義されるということである。この言語はオブジェクト指向であり、多重継承の支援を含む。これは真にインタフェースの特性に関するものであって、インプリメンテーション情報を提供しない。
インタフェース定義言語から、特定言語向けスタブを生成することが可能である。それらのスタブは、SPRINGインタフェースに対する特定言語向けマッピングを実行する。たとえば、主なインプリメンテーション言語であるC++では、C++オブジェクトによってspringオブジェクトを表現する。スタブオブジェクトについての方法を呼出すと、現在アドレススペースの中で局所呼出しを実行するか、又はその呼出しを異なる機械にあっても良い別のアドレススペースへ送り出す。
【0033】
スタブ及びサブコントラクトメカニズム
次に図4を参照して説明すると、本発明の環境においては、機械10のクライアントアプリケーション12は適切なクライアント側スタブ14に対して呼出しを発行し、そのクライアント側スタブは「サブコントラクト」30のクライアント側部分を呼出し、そのサブコントラクトは、一般には別の機械18にある相手方のネットワークソフトウェア20と通信するネットワークソフトウェア16に作用する。サーバ側ネットワークソフトウェア20は入力メッセージをサブコントラクトのサーバ側部分へ転送し、そこで、サブコントラクトはそのデータをサーバ側スタブ22に供給し、サーバ側スタブは典型的にはオブジェクトインプリメンテーションであるサーバアプリケーション24にデータを渡す。指示した通り、サブコントラクトはスタブとネットワークソフトウェアとの間にはめ込まれている。スタブはサブコントラクトを使用して遠隔呼出しを実行し、次に、同様にしてサブコントラクトはネットワークソフトウェアを使用して、実際の呼出しを実行する。異なるサブコントラクトは標準通信ソフトウェアの上に異なる種類の遠隔通信プロトコル(複製用、キャッシング用など)を実現する。
【0034】
単一のコンピュータの中で、異なるアプリケーションがサブコントラクトを使用して通信することもある。そこで図5を参照すると、クライアントアプリケーション12はアプリケーションスペース38の中にあり、適切なクライアント側スタブ14に対して呼出しを発行し、そこで、スタブは適切なサブコントラクト30を呼出す。サブコントラクト30はその通信をオペレーティングシステム36へ転送し、オペレーティングシステムはその通信をサーバ側サブコントラクト32へ中継し、そこで、サーバ側サブコントラクトはデータをサーバ側スタブ22に与え、スタブはデータをサーバアプリケーション24に渡す。この場合、オペレーティングシステム36が提供するプロセス間通信プリミティブはネットワーキングソフトウェアが提供する機械間通信メカニズムと置換えられる(図4の16及び20)。
【0035】
単一のアドレススペースでランする単一のアプリケーションの中であっても、クライアント側とサーバ側のスタブとサブコントラクトがアプリケーションの異なるコンポーネントの間で通信するために使用されることもある。
【0036】
次に、図3を参照して、オブジェクト指向という面から物を見てみると、クライアントアプリケーション1は「スタブオブジェクト」2によって動作する。それらのスタブオブジェクト2は、各々、1つのサブコントラクトオブジェクト3を含み、このサブコントラクトオブジェクトの内部状態4(その「表現」として知られている)は基礎にある実状態5に対する何らかの形態のポイント6を含んでいても良い。実状態5は同じアドレススペースにあっても良く、同じ機械の別のアドレススペース又は全く別の機械にあっても良い。典型的には、基礎状態自体がサーバアプリケーションのアドレススペースではオブジェクト5として表現される。
【0037】
クライアントはspringオブジェクトを3つのものから構成されるものと理解する。その3つとはオブジェクトの型定義により示唆される動作ごとに1つのエントリを含む方法テーブルと、次の章で説明する基本サブコントラクト動作を指定するサブコントラクト記述と、オブジェクトの表現と呼ばれる何らかの局所専用状態である。
【0038】
クライアントは、C++オブジェクトと見えるものについて方法を呼出すことによってオブジェクトと対話する。このオブジェクトに関わるコードは実際には自動的に生成されており、方法呼出しをオブジェクトの正規の方法テーブル又はそのサブコントラクト動作ベクトルに対する呼出しに変換する。それらの方法がいかにして効果をあげるかはクライアントにはわからないが、適切なスタブ方法に対する呼出しを含む。その動作については以下に説明する。
【0039】
オブジェクトが遠隔サーバにより実現される場合、サブコントラクトはその遠隔サーバと通信する機械を実現し、一方、方法テーブルは、引数をバッファへマーシャル化し、遠隔呼出しを実行するためにサブコントラクトを呼出し、次に応答バッファからの何らかの結果をアンマーシャル化することを唯一必要とするスタブ方法に対するポインタから構成されるというのが典型的な構成である。SPRINGはインタフェース定義言語から適切なスタブを生成するめに自動スタブジェネレータ(「CONTOCC」)を構成する。本発明の開示の対称となるのはこの自動スタブジェネレータと、クライアント側スタブインタプリタプロセスである。本発明の役割を適正に説明するためには、クライアント側スタブとサーバ側スタブがシステムによりどのように使用されるかをさらに説明することが必要である。
【0040】
遠隔サーバにおいては、通常、入力呼出しと関連するサブコントラクト作業を実行するための何らかのサブコントラクトコードと、動作ごとの引数と、サーバアプリケーションへの呼出しとをアンマーシャル化する何らかのサーバ側スタブコードとが存在する。このサーバ側スタブコードCONTOCCによって自動的に生成される。しかしながら、後述するように、好ましい実施例のスタブインタプリタはクライアント側スタブのみを目指しているのであるが、同じ原理をサーバ側スタブと共に使用できることは当業者には認められるであろう。
【0041】
オブジェクトが完全に局所的に実現される場合には、スタブ方法の使用を回避し、方法テーブル中に直接に導入できるインプリメンテーション方法を提供することが可能である。SPRINGは、この場合、方法テーブルを生成するための支援を実行する。
【0042】
基本サブコントラクトメカニズム
クライアント側サブコントラクト動作は次の通りである。
・ copy
・ consume
・ unmarshal
・ marshal
・ marshal_copy
・ invoke
・ invoke_preamble
・ narrow
・ object_type_id
・ object_manager_id
・ is_null
【0043】
これらのサブコントラクト動作とその詳細な説明は、本明細書にも参考として取入れてあるGraham Hamilton,Michael L.Powell,James G.Mitchell及びJonathan J.Gibbsons出願による名称「A Method and Apparatus for Subcontracts in Distributed Processing Systems」の同時係属出願第07/995,863号の中に記載されている。サブコントラクトの使用例と、クライアント側スタブ及びサーバ側スタブとサブコントラクトメカニズムとの対話について、ここで簡単に説明する。
【0044】
スタブ及びサブコントラクト利用の例
本発明を詳細に説明する前に、遠隔オブジェクトを呼出すときに実行されるスタブとサブコントラクトの動作のシーケンスを考えることが有用である。尚、これは単なる1例であり、ここで定義され且つ先に指示した同時係属引例の中に定義されているようなサブコントラクトをここで説明するよりはるかに新奇な動作を実行するように構成できることは当業者には認められるであろう。図6から図9についての以下の説明を参照のこと。
【0045】
方法Fredを支援し且つサブコントラクトSAを使用するオブジェクトAがあると仮定する。
復帰型fruitbatは何らかのサブコントラクトSFを使用することがわかっている。
【0046】
たとえば、サブコントラクトSXを使用するwombat型のオブジェクトXがあり、Xを引数として渡しつつAのfred方法を呼出すものとする(ステップ50):
1.まず、「fred」に関わるクライアント側スタブ方法を入力する(ステップ52,54)。
2.クライアント側スタブコードはAのinvoke_preamble動作を呼出す(ステップ56)。
3.SAinvoke_preambleコードは必要な初期設定と復帰を実行する(ステップ58)。
【0047】
4.次に、クライアント側スタブコードは、Xの marshal_copy動作を呼出すことにより、引数オブジェクトXをコピー引数としてマーシャル化しようとする。図6では、これは次のように進行してゆく。クライアント側スタブfredは、マーシャル化すべき引数が存在するか否かを知るために試験を実行する(ステップ60)。その返答はイエスであるので、次に、スタブfredはいずれかがオブジェクトであるか否かを知るために引数を試験する(ステップ62)。オブジェクトXを発見し、XはサブコントラクトSXを有することがわかると、スタブfredはオブジェクトXをマーシャル化するためにサブコントラクトSXを呼出す。
【0048】
5.SXmarshal_copy コードは、引数バッファに導入すべきXのコピーを記述する情報を配列し且つスタブfredに戻る(ステップ64)。
6.ここで、クライアント側スタブコードは全ての引数をマーシャル化し終わっており、呼出しを実際に実行可能な状態になる。そこで、Aのinvoke動作を呼出す(ステップ70)。
【0049】
7.SAinvoke方法は、fred方法についての呼出しがオブジェクトAに関するサーバ状態で起こるという要求をもって、引数バッファをターゲットサーバへ伝送するために必要な作業を実行し、次に、サーバから戻る結果バッファを待機する(ステップ72)。
【0050】
8.次に、図7を参照すると、ターゲットサーバにより呼出しを受信し、サーバ側サブコントラクトSSAにデータを供給し、サブコントラクトSSAはバッファをサーバ側スタブS2に供給する(ステップ74,76)。スタブS2はアンマーシャル化すべき引数が存在するか否かを知るために検査し(ステップ78)、次に、引数のいずれかがオブジェクトであるか否かを知るために検査する(ステップ80)。アンマーシャル化すべきオブジェクトXが存在することが発見されると、サーバ側スタブS2はSSAサブコントラクトのアンマーシャル化動作を呼出す(ステップ82)。サブコントラクトSSAはオブジェクトXのサブコントラクトidを検査して、それが関連するサブコントラクトSXを有することを発見する(ステップ84)。次に、サブコントラクトSSAはサブコントラクトSXの対してアンマーシャル化動作を呼出し(ステップ84)、サブコントラクトSXはオブジェクトXをアンマーシャル化して、それをサブコントラクトSSAに戻し、そこで、サブコントラクトSSAはそれをスタブS2に戻す(ステップ86)。サーバ側スタブは受信した全ての引数のアンマーシャル化を完了しており、その呼出しと引数をターゲットオブジェクトインプリメンテーションに渡し(ステップ92)、応答を待機する(ステップ94)。オブジェクトインプリメンタは呼出しを処理し、サブコントラクトSF及びサーバ側サブコントラクトSSFをもつオブジェクトfruitbat−1を生成し、サブコントラクトSSFにサブコントラクトSFに関わるサーバ側サブコントラクトとして活動するように命令する(ステップ96)。サブコントラクトSSFはF1を識別するために内部状態を生成し(ステップ96)、この状態を指示するオブジェクトF1を戻す(ステップ98)。次に、オブジェクトインプリメンタはクライアントに戻すためにオブジェクトF1をサーバ側スタブS2に戻す(ステップ100)。そこで図8を参照すると、スタブS2はここでオブジェクトfruitbatをマーシャル化するために、引数マーシャル化ルーチンを再び経過しなければならない(ステップ104,106,108,110及び112)。そこで、サブコントラクトSSF(ステップ112)はマーシャル化引数をスタブS2に戻し、スタブS2はマーシャル化データをサーバ側サブコントラクトSSAに供給して、クライアント側サブコントラクトSAへ伝送させる(ステップ116,114)。
【0051】
9.この時点で、クライアント側スタブコードはSAinvoke方法から結果バッファを受信し(ステップ130)、その結果のアンマーシャル化を開始することを望む。この場合、結果はサブコントラクトSFを有するfruitbat型のオブジェクトにはわかっているので、クライアント側スタブfred(SA)はSFサブコントラクトのアンマーシャル化動作を呼出して、fruitbat型に関わる正規方法テーブルを渡す。呼出しステップはブロック142,134,136,138に示されており、先に引用した同時係属出願の中のコンパチブルオブジェクトの説明中にさらに詳細に記載されている。
【0052】
10.SFサブコントラクトアンマーシャル化コードは、結果バッファからのオブジェクトをアンマーシャル化しようとする。コードは結果バッファからの情報を独自のサブコントラクト方法テーブル及び渡された正規方法テーブルと組合せて新たなSPRINGオブジェクトF2を形成し、そのオブジェクトF2をクライアント側スタブに渡して戻す(ステップ140)。
【0053】
11.クライアント側スタブfredはそのタスクを完了し、結果オブジェクトをアプリケーションレベルに戻すことができる(ステップ148)。
【0054】
このプロセスはAのfred方法に関わるクライアント側スタブコードによって駆動されていたが、ターゲットオブジェクト、引数オブジェクト及び結果オブジェクトとに関わるサブコントラクトをも含んでいた。
【0055】
クライアント側スタブジェネレータとスタブインタプリタ
スタブ及びサブコントラクトの利用法についてのこの例示説明の中で指示した通り、クライアント側スタブはクライアントに対する一次インタフェースである。オブジェクト指向、分散形システムで生成されるクライアントスタブの数の関係上、それらのクライアント側スタブのコードが占めるテキストメモリスペースを縮小する方法を考えることが適切になった。再び図2を参照すると、このメモリスペースを縮小するために使用されるメカニズムはスタブジェネレータ(「CONTOCC」と呼ばれる)152と、クライアント側スタブ記述ファイルのデータベース(圧縮スタブコード)156と、それらのクライアント側スタブ記述ファイルをいかにして読取るべきかに関する知識をもつスタブインタプリタ158とを含む。CONTOCC152はインタフェース定義言語(「IDL」)ファイル150を読取り、対応するC++ファイルを生成する。CONTOCC152はIDLデータ150を読取り且つ正規のC++スタブファイル又は以下にさらに詳細に説明する特殊クライアント側スタブインタプリタファイル158のいずれかを生成する能力を有する。
【0056】
クライアント側スタブ
クライアント側スタブはCONTOCCにより生成されて、IDLオブジェクトについての動作の実行という結果をもたらすクライアントが呼出しできるC++方法を提供する。スタブは多重継承を処理するメカニズムと、SPRINGオブジェクト呼出しを実行するメカニズムとから構成されている。
【0057】
SPRINGオブジェクト呼出しは、呼出しに対する引数をトランスポートと呼ばれる線形データ構造へとマーシャル化し、呼出しに対する識別オブジェクトについての方法を呼出し、且つ呼出しの結果をアンマーシャル化する(例外が発生すれば、その例外を処理する)ことによって実行される。Springのサブコントラクトメカニズムであるため、クライアント側スタブはパラメータオブジェクトをマーシャル化又はアンマーシャル化することの詳細に対して管理する必要がなく、実際の呼出しについても管理する必要がない。クライアント側スタブは、引数と結果が適切な順序でマーシャル化、アンマーシャル化されるように保証すると共に、動作呼出しを実行するために識別オブジェクトのサブコントラクトを呼出す必要がある。
【0058】
は、param 型の1つの引数(arg)と、long型の1つの引数(input)を取出し、1つのlong引数(output)を発生し、例外(that)を生じない限り、res 型の結果(unnamed)を戻す1つの方法(thod)を有する。尚、例外(that) の場合には、例外の1パラメータとしてlong(reason)を渡す。上記のインタフェースについてクライアント側スタブの一部として下記のコードを(常に、さらには、オプションとして)発生するために使用されるCONTOCCトランスレータは:
【0059】
【数1】
【0060】
このコードに関して実現すべき重要な事項は、そのような全てのクライアント側スタブ方法においてコードの大半が同一であること、及び変更可能な部分を適切、簡潔に記述できることである。それらの観察によって、クライアント側スタブのインタプリタという概念が生まれた。
【0061】
クライアント側スタブ方法の可変部分は先に肉太の字体で示されている。パラメータの型とモードはスタブ方法ごとに変化するが、識別オブジェクトは常に「any_obj* 」型であって、常に第1のパラメータである。異なるスタブ方法によって発生する例外は異なる場合もある。異なるパラメータは異なる方式でマーシャル化されなければならないが、ライブラリ型についてのマーシャル化方法は良く知られており、オブジェクトと構成型(array,struct など)のマーシャル化はその型についてのマーシャル化方法を呼出すことにより実行される。呼出しは、サブコントラクト方法を呼出すことによって実行される。この場合、スタブ方法間の唯一の変数は呼出し中の動作の識別である。アンマーシャル化はマーシャル化と全く同様に変化し、ライブラリ型についてはこれも同じように良く知られており、どのオブジェクト又は構成型もアンマーシャル化方法を呼出すことによりアンマーシャル化される。発生する必要のある例外はいずれもinvoke呼出しからの復帰コードとして符号化され、例外に対するパラメータのアンマーシャル化と例外の発生は1つの方法の中にカプセル化される。(しかしながら、例外に対するパラメータのアンマーシャル化と例外の発生は先にはインラインで生成されていたが、好ましい実施例ではそれを別個の方法にすることにより、C++符号化スタブにあってもスペースを節約する可能性があることに注意する。)
【0062】
クライアント側スタブのインタプリタ
C++符号化スタブで観察された限定された可変性があれば、C++符号化スタブの固定部分を本体とし且つ可変部分を記述するテーブルを参照し、その記述が与えられると、それに従って活動するインタプリタが設けられる。スペースの節約はテーブル駆動スタブインタプリタを使用することの第1の目的であったので、テーブルはできる限り実用的に形成されている。
【0063】
スタブの記述は数種類の情報、すなわち、引数の型及びモードと、パラメータに関わるマーシャル方法及びアンマーシャル方法並びにそれらの方法を必要とする結果と、実行すべき動作の識別と、例外識別子から例外のパラメータをアンマーシャル化し且つその例外を発生させる方法へのマッピングとから構成されている。加えて、以下に詳細に説明するように、必要とされるデータは他にも様々ある。一連のスタブの記述はかなりの量の共通情報を含むので、1つのモジュール(動作の集合体である一連のインタフェース)に関わる記述は1つのテーブルにまとめられる。
【0064】
好ましい実施例には、現時点で、スタブインタプリタが認識するcopy,share,consume,produce(「out」としても使用される),borrow,in,in_out 及びreturnという9つのパラメータパスモードがある。スタブインタプリタが認識するパラメータ型はbool,octet,char,short,long,long long,unsigned short,unsigned long,unsigned long long,float,double,string,struct(unions 及びbuiltins にも使用される),array,object及びvoid(void returnsにのみ使用される)の16種類である。モードと型はそれぞれ4ビットに符号化でき、その組合せは都合良く1つのバイトにはめ込まれる。方法に対する各パラメータ(及びreturn型)は少なくとも1つのバイトとして符号化される。1つの動作の全てのパラメータに関わるパラメータ記述子は次々に記憶される。動作ごとのパラメータ記述子は0x00を含む1つのバイトによって終了し、(必要に応じて)アドレス指定を容易にするために、次の4バイト境界に至る0xffを含むバイトを埋込まれている。(現時点で好ましい実施例は方法のパラメータ記述を終了させるためにこの空バイトを使用するが、このバイトと、3バイトまでの埋込みとを節約できるような別の実施例も可能である。このテーブルにおける方法のデータの終わりを識別するこの代替方法は、スタブインタプリタがモード「return」をもつバイトを見出すのは記述の終わりであるという知識をもっているために可能なのである。)最後に、動作識別子は、動作のパラメータを記述するバイトの前に、4バイト符号なし整数として記憶される。クライアント側スタブ記述のレイアウトの1例を図11に示す。
【0065】
ライブラリ型はスタブインタプリタで適切な時点で周知のコードによりマーシャル化、アンマーシャル化される。オブジェクトパラメータは、適切なサブコントラクトマーシャル化方法(記述子中のモードに応じてmarshal_copy 又はmarshal_consume)を呼出すことによりマーシャル化される。オブジェクトをアンマーシャル化する必要がある場合、そのアンマーシャル化方法のアドレスを記述の中のいずれかの箇所に記憶させ、そのアドレスの索引を(mode,type)対の後に記憶させる。構成型のパラメータに関わるマーシャル化方法及びアンマーシャル化方法を見出すときにも同じ方法を採用する。パラメータについてマーシャル化とアンマーシャル化の双方の方法が必要とされる(たとえば、borrowパラメータである)場合、マーシャル化方法を所定の索引に記憶させ、アンマーシャル化方法はそれに続き、所定の索引+1でアクセスされることになる。
【0066】
それらの索引(及び記述子中の他の何らかの索引)は(記述子が通常は小さいために)通常は小さいので、それらの索引について次のような符号化を使用する。すなわち、索引は7ビットにはめ込まれるのであれば、最上位ビットをクリアして、索引を1つのバイトの中に記憶する。また、索引が7ビットにはめ込まれないのであれば、最上位ビットをセットして、索引の上位の7ビットを第1のバイトに記憶し、それに続く索引の7ビットチャンクを連続するバイトに記憶する。その場合、各バイトの最上位ビットは、数を完了するために下位の7ビットチャンクが必要とされることを指示している。
【0067】
struct,union又はbuiltinのパラメータが呼出しによって発生されるか又は戻される場合には、スタブインタプリタは、アンマーシャル化方法を呼出す前に、その型に関わるイニシャライザを呼出す必要がある。その場合、イニシャライザ方法のアドレスを記述中の、アンマーシャル化方法の後に記憶する。consume を渡されるstruct,union 及びbuiltin パラメータについて、スタブインタプリタはマーシャル化の後にパラメータをクリーンアップするための方法をも呼出さなければならない。そのパラメータに関わるデストロイヤのアドレスを記述中の、マーシャル方法の後に記憶する。struct,union又はbuiltinパラメータの記述における方法の実際の順序は、marshal_consume,アンマーシャル化(おそらくはmarshal_consume+1でアクセスされる)、デストロイヤ(marshal_consume+2でアクセスされる)、イニシャライザ(un_marshal +2でアクセスされる)となる。
【0068】
好ましい実施例では、マーシャル化方法、アンマーシャル化方法、イニシャライザ方法又はデストロイヤ方法を呼出すためにスタブインタプリタが使用する方法アドレスについて検査を実行しない。スタブジェネレータは正しい方法を期待されたスロットに挿入し且つ正確に索引を充填しているものと仮定する。事実、スタブインタプリタは構成型のパラメータについてはmarshal_consume方法と、marshal_copy 方法とを区別しない。テーブル中の適切な方法の索引がスタブインタプリタに与えられると仮定する。
【0069】
1つのモジュールによって発生する可能性のある全ての例外は、例外に対する引数をいずれもアンマーシャル化し且つその例外を発生させる方法のアドレスへの例外識別子から1つのマップに統合される。例外が発生したことをスタブインタプリタが検出すると、スタブインタプリタは例外識別子を求めてテーブルを探索し、例外を発生させるために対応する方法を呼出す。スタブインタプリタ自体から任意の例外を発生させるための方法は編成するのが困難であるので、スタブインタプリタ自体に例外を発生させる代わりに、方法呼出しを使用した。
【0070】
再び図11を参照すると、短縮をはかるため、モジュールを記述する様々なバイトとテーブルを連続して記憶してあるので、記述に対する1つの索引で、特定の動作呼出しについて必要とされる全ての情報を十分に発見できる。まず、テーブル中のエントリの数を接頭部として、アンマーシャル化などの方法200のテーブルを記憶する。次に、同様にエントリの数を接頭部とする例外のテーブル202が続く。次に、実際の方法記述子自体204があり、各記述子は動作識別子である索引206から構成されており、これは動作記述から記述の前のテーブルに至るために使用される。その後に、動作のパラメータを記述するバイトと索引208が続く。それらのバイトはファンクションの復帰型の記述210を含む。必要に応じて、それらの記述子に4バイトの複数を充填させるために、各動作バイト群の後に空パディングが続く。各ファンクション記述は少なくともファンクションコード204と、(方法のテーブルをアクセスするために)記述の始めに戻るまでの距離206と、ファンクションの復帰型に関わる記述子210とを含む。未構成復帰値として3つまでの未構成引数をもつファンクションに対して、最小ファンクション記述子は12バイトである。型がアンマーシャル化等の方法に対し索引を必要としないのであれば、索引を省略する。上記の例のIDLインタフェースの記述は次の通りである:
【0071】
【0072】
好ましい実施例のインプリメンテーションの詳細
スタブインタプリタは主として簡明なC++コードである。この章では、好ましい実施例で使用される詳細を説明する。
CONTOCCがインタプリタを使用してクライアント側スタブを使用することを伝えられると、CONTOCCは依然として呼出すべきクライアントに関わる方法を生成するが、その方法は単にスタブインタプリタを呼出すだけである。その方法の目的は、たとえば、クライアントに呼出しのための適正なC++方法宣言を与えることにより、クライアントをインタプリタの存在から隔離することである。
【0073】
多様復帰型
スタブインタプリタは、それが様々なC++符号化スタブであるかのように、様々な型の結果を戻すことができなければならない。通常のC++コードは戻すと宣言されている型しか戻せない。好ましい実施例では、本発明が一部を成しているSPRINGオペレーティングシステムは、SPARC(登録商標)アーキテクチャベースシステムでランするように設計されている。SPARCはSPARC Internationalの登録商標であり、Sun Microsystems,Inc.が開発したRISCコンピュータに基づく「Scalable Performance ARChitecture」の頭文字である。SPARCアーキテクチャでは、様々な異なる型の結果を戻すための規約はそれらの結果を様々な異なる場所(たとえば、大半の結果に対するレジスタ、他の結果に対する事前割当てメモリなど)に導入することを要求する。(付録D「Software Considerations」,The SPARC Architecture Manual第8版,Prentice Hall,1992年刊,ISBNO−13−825001−4参照。)多様復帰を実行するために、スタブインタプリタは少数のアセンブラ方法に依存する。それらの方法は様々な種類の復帰結果をパラメータとして取上げ、それらを従来通りの復帰結果用の場所に導入する。それらの方法は実際にはインライン化されているが、レジスタウインドウ又はスタックフレームを割当てないので、インタプリタ自体のレジスタとスタックフレームをアクセスすることができる。
【0074】
多様バリアディック,パラメータ型
スタブインタプリタはC++符号化スタブに渡されるであろうパラメータと同じパラメータをアクセスしなければならない。インタプリタは、クライアント側スタブに渡されるパラメータの数又は型をあらかじめ知ることはできない。加えて、インタプリタは呼出し中の方法に関わる動作記述の中の適切なエントリに対するポインタを獲得しなければならない。好ましい実施例では、それらの問題は、共に、クライアントが呼出すC++方法からスタブインタプリタへの1種のテール呼出しによって解決される。
【0075】
上記の例のインタフェースのクライアントは、次のように定義される方法を呼出すであろう。
【0076】
復帰ステートメントの目的は、できる限り少ないコードを生成しつつ、この方法に対するパラメータをコードの第1行を通して生き状態に保持することである。復帰ステートメントには決して到達しない。(すなわち、全てのことは計画に従って進行する。その行に達してしまうと、システムはパニックを起こす。)コードの第1行はスタブインタプリタ自体へ制御を移行し、呼出すべき動作に関わる記述のアドレスをそれに渡す。
【0077】
スタブインタプリタに制御が移行されると、クライアント側スタブに対する引数(識別オブジェクトなどを含む)は、初めのいくつかのイン・レジスタ内又は通常のSPARC呼出し規約における呼出し側のフレーム内にある(先に挙げたSPARCアーキテクチャマニュアルの付録Dを参照)。動作に関わる記述のアドレスは第1のアウト・レジスタにある。尚、この好ましい実施例においては、クライアント側スタブに対する引数の1つのレジスタウインドウから次のレジスタウインドウへのコピーを回避している。イン・レジスタから引数を失わないようにするために、スタブインタプリタは新たなレジスタ/メモリフレームを割当てない。その代わりに、インタプリタの局所変数に対する要求に応じてクライアント側スタブのメモリフレームを拡張する。(レジスタフレームを押さないメモリフレームの拡張は、C++コンパイラにスタブインタプリタのアセンブラコードを生成させ且つインタプリタ方法に関わるセーブ命令を加算命令に変更することによって実行される。)アウト・レジスタから動作記述のアドレスを失わないようにするために、スタブインタプリタが実行する第1の事柄はそのアドレスを局所レジスタ変数にコピーすることである。このように、スタブインタプリタでは通常のレジスタの引数をもってランしており、1回の飛越し、1回の加算及び1回のレジスタコピーの中で動作記述のアドレスを渡している。スタブインタプリタはクライアント側スタブのレジスタフレームでランしているので、多様復帰値を戻す方法はスタブインタプリタから直接にクライアントコードに戻す(すなわち、クライアント側スタブでパニックを起こすことはない)。
【0078】
好ましい実施例では、スタブインタプリタは、記述データベース中のバイトコードからどのような型であるかを見出すときに、クライアント側スタブに対する引数をアクセスしなければならない。クライアント側スタブに対する引数をもってインタプリタが実行する第1の事柄は、引数をイン・レジスタからクライアントの(呼出し側)のフレームで引数用として割当てれられているスペースにコピーすることであるので、引数をメモリで渡された引数と共に順次アドレス指定することができる。インタプリタは様々なC++要素を渡すための標準規約(たとえば、structs は参照により渡されるなど)と、様々なIDLパラメータパスモードに関わる規約(たとえば、borrowパラメータは参照により渡されるなど)とを処理するように設計されている。そのようにして、インタプリタは、バイトコード記述を処理するときに、クライアント側スタブに対する引数を適切にアクセスできるのである。
【0079】
インタプリタ自体はバイトコード記述にわたる本質的には2つのループである。第1のループは、何らかの引数のマーシャル化を要求するか否かを知るために、各バイトコードを検査する。次に、識別オブジェクトについて指示された動作を呼出し、復帰コードを検査する。その動作が成功したならば、バイトコード記述にわたる第2のループは、いずれかの結果がアンマーシャル化を必要とするか否かを判定する。この第2のループが動作のreturn型を記述するバイトコードを検査するとき、インタプリタからクライアントに戻すために適切な多様復帰方法を呼出す。動作呼出しが失敗であった場合には、復帰コードを使用して、適切な例外に対するパラメータをアンマーシャル化し且つその例外を発生させる方法へマッピングする。
【0080】
サーバ側スタブに関わるインタプリタの構成に伴なう概念上の問題はない。ところが、いくつかの理由によって、好ましい実施例ではこれを実行しなかった。
【0081】
ドメインは多数のサービスの1クライアントであっても良いが、典型的にはごく少数のサービスに対するサーバである。そのため、ドメインはクライアント側スタブを数多く必要とするであろうが、サーバ側スタブについては若干のスタブを必要とするだけであろう。従って、クライアント側スタブが占めるスペースを縮小する場合と比べて、サーバ側スタブが占めるスペースの縮小のもたらす利点は相対的に少ないであろう。
【0082】
SPARCにおける通常の呼出し規約を越えるC++コンパイラの規約の知識を余りに多くもつ必要なく、クライアント側スタブの呼出し環境を理解することは可能であった。これに対し、サーバ側スタブは、典型的にはC++vtables を介して、サーバ方法のインプリメンテーションを呼出さなければならない。vtableディスパッチはC++コンパイラのライターの思いつきの影響のみを受けるので、特定のC++インプリメンテーションに結合することが望ましいとは思わなかった。
【図面の簡単な説明】
【図1】 従来の技術におけるクライアントアプリケーション及びサーバアプリケーションと、スタブ及びネットワークソフトウェアとの関係を示す図。
【図2】 スタブジェネレータ/インタプリタの主要なシステムコンポーネントを示す図。
【図3】 スタブオブジェクトと、サブコントラクトオブジェクトと、サーバアプリケーションオブジェクトとの関係を示す図。
【図4】 サブコントラクトを使用する遠隔オブジェクト呼出しを示す図。
【図5】 サブコントラクトを使用する単一の機械におけるオブジェクト呼出しを示す図。
【図6】 本発明によるサブコントラクトの方法の使用例を示すフローチャート。
【図7】 本発明によるサブコントラクトの方法の使用例を示すフローチャート。
【図8】 本発明によるサブコントラクトの方法の使用例を示すフローチャート。
【図9】 本発明によるサブコントラクトの方法の使用例を示すフローチャート。
【図10】 SPRINGによるオブジェクトの見方と、従来の技術によるオブジェクトの見方とを対比して示す図。
【図11】 クライアント側スタブ記述のレイアウト例を示す図。
【符号の説明】
10…機械A、12…クライアントアプリケーション、14…クライアント側スタブ、16,20…ネットワークソフトウェア、18…機械B、22…サーバ側スタブ、24…サーバアプリケーション、30…クライアント側サブコントラクト、32…サーバ側サブコントラクト、36…オペレーティングシステム、150…インタフェース定義言語、152…クライアント側スタブジェネレータ、154…C++スタブコード、156…データベース、158…クライアント側スタブインタプリタ、166…限定スタブコード、168…引数、170、172…コンピュータメモリ。
Claims (8)
- 共通部分と独自部分を含むコードによって定められたスタブ動作を複数有しており、前記共通部分は各スタブ動作を実行するために必要なコードを有し、前記独自部分は前記複数のスタブ動作のそれぞれの動作を定めるコードを有しており、前記共通部分を格納する第1領域と前記複数の独自部分を格納する第2領域とを有するメモリを備えたコンピュータシステムにおいて、複数のスタブ動作の内、クライアントにより呼出された特定のスタブ動作を実行する方法において、
スタブ動作を実行するために生成されたコードを受けたスタブジェネレータが、前記独自コード部分を取り出して前記コンピュータメモリの第2の領域に格納する過程と、
前記特定のスタブ動作を実行させるために、前記第2の領域に格納された前記独自コード部分を指すポインタを含む要求を前記クライアントがスタブインタプリタに発行する過程と、
前記スタブインタプリタが、前記特定のスタブ動作を実行するために、前記第1の領域に格納されたスタブ動作に関する共通コード部分と、前記発行された要求のポインタに基づいて前記コンピュータメモリの第2の領域に格納された前記特定のスタブ動作に関する独自コード部分とを呼び出す過程と、
から成り、
それにより、クライアント側スタブに要求されるコンピュータメモリスペースの量を減少させる方法。 - コンピュータシステム内でクライアントにより呼出された特定のスタブ動作を実行する方法において、
スタブ動作を実行するために生成されたコードを受け取ったスタブジェネレータが、当該コードを、複数のスタブ動作に共通するコードであって各スタブ動作を実行するのに必要なコードの第1の部分と、前記複数のスタブ動作のそれぞれの動作内容を定めるコードであって各スタブ動作に独自のものであるコードの第2の部分とに分割し、且つ前記コードの第2の部分をコンピュータメモリに記憶する過程と、
前記コードの第1の部分のコピーを包含するスタブインタプリタによって実行される過程であって、
前記スタブインタプリタは、前記コンピュータメモリから呼び出すべきスタブ動作に関するポインタを含んだクライアントからのスタブ動作の呼び出しを受けるものであり、その呼び出しを受けるたびに、
(1)前記コードの第1の部分を供給する過程と、
(2)前記スタブ動作に関するポインタに基づいて、前記コードの第2の部分をアクセスして取得する過程と、
(3)前記第1、第2の部分のコードを実行して、スタブ動作を実行するためのサブコントラクトを呼び出す過程と
を実行する過程と
から成る方法。 - クライアント側スタブに要求される前記コンピュータメモリスペースをさらに縮小するために、前記スタブジェネレータが前記コードの第2の部分を圧縮する過程を含む請求項2記載の方法。
- 各々がクライアント側スタブを呼出しうるクライアントアプリケーションを実行可能な複数のデータ処理システムで使用するために、クライアント側スタブに対するクライアント動作呼出しを実行する方法において、
スタブジェネレータによって、スタブ動作を実行するために生成されたコードを、複数のスタブ動作に共通するコードであって各スタブ動作を実行するのに必要なコードの第1の部分と、特定のスタブ動作の動作内容を定めるコードであって当該特定のスタブ動作に独自のものであるコードの第2の部分とに分割し、かつ前記コードの第2の部分を圧縮して圧縮スタブコードを生成してメモリに記憶する過程と、
前記コードの第1の部分のコピーを包含するスタブインタプリタによって実行される過程であって、
前記スタブインタプリタは、前記メモリから呼び出すべきスタブ動作に関するポインタを含んだクライアントからのスタブ動作の呼び出しを受けるものであり、このクライアントからのスタブ動作の呼び出しを受けるたびに、
(1)前記コードの第1の部分を供給する過程と、
(2)前記コードの第2の部分を前記ポインタに基づきアクセスして取得し、前記供給された前記第1の部分のコードと当該第2の部分のコードとに基づき、前記呼び出すべきスタブ動作を実行する過程とから成り、
それにより、クライアント側スタブの記憶装置に要求されるメモリスペースを縮小する方法。 - クライアント側スタブ動作を実行するシステムにおいて、
前記クライアント側スタブ動作を実行するために生成されたコードを複数のスタブ動作に共通するコードの第1の部分と、前記複数のスタブ動作の中の特定の1つのスタブ動作に独自のものであるコードの第2の部分とに分割する手段と、
前記共通するコードの第1部分を保持するとともに、クライアントからのスタブ動作要求を受けるスタブインタプリタと、
前記複数のクライアント側スタブ動作に独自のものであるコードの第2の部分を保持するよう構成された記憶手段と、
を備え、
前記スタブインタプリタは、前記記憶手段の前記コードの第2の部分を指すポインタを、前記クライアントからの特定のスタブ動作要求により受け取り、前記記憶手段から該ポインタに基づき当該特定スタブに関する独自のコードを取り出し前記コードの第1部分と合わせて実行させてスタブ動作を実行するためのサブコントラクトを呼び出し、
それにより、クライアント側スタブ動作に関わるコードを記憶するために使用されるメモリスペースを縮小するシステム。 - 前記分割する手段は、前記コードの第2の部分を圧縮して生成した圧縮スタブコードを前記記憶手段に送ることを特徴とする請求項5記載のシステム。
- コンピュータでクライアントにより呼出される特定のスタブ動作を実行するシステムであって、各々が複数のスタブ動作に共通するコードの第1の部分と、前記特定のスタブ動作のそれぞれに独自のものであるコードの第2の部分とを含んでいるクライアント側スタブについて要求されるコンピュータメモリスペースを最小限に抑えるシステムにおいて、
前記クライアント側スタブ動作を実行するために生成されたコードを複数のスタブ動作に共通するコードの第1の部分と、前記複数のスタブ動作の中の特定の1つのスタブ動作に独自のものであるコードの第2の部分とに分割し、該分割したコードの第2の部分をコンピュータメモリに記憶する手段と、
前記特定のスタブ動作を実行させるために、当該特定のスタブ動作に関するコードの第2の部分を指すポインタをともなって当該特定のスタブ動作を呼び出す要求をスタブインタプリタに発行する、前記クライアントに設けられた手段と、
を備え、
前記スタブインタプリタは、前記コードの第1の部分のコピーを包含し、前記特定のスタブ動作を呼び出す要求を受け取るたびに、前記コードの第1の部分を供給するとともに、前記ポインタに基づき前記特定のスタブ動作に関する第2のコード部分を前記記憶する手段から呼び出して、さらに前記第1、第2のコード部分を実行してスタブ動作を実行するためのサブコントラクトを呼び出し、
それにより、クライアント側スタブ用として要求される前記コンピュータメモリスペースを縮小するシステム。 - 前記記憶する手段は、前記分割されたコードの第2の部分を圧縮した圧縮スタブコードを記憶する請求項7記載のシステム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11975393A | 1993-09-10 | 1993-09-10 | |
US119,753 | 1993-09-10 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH0793264A JPH0793264A (ja) | 1995-04-07 |
JP3881704B2 true JP3881704B2 (ja) | 2007-02-14 |
Family
ID=22386167
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP24243694A Expired - Lifetime JP3881704B2 (ja) | 1993-09-10 | 1994-09-12 | クライアント側スタブインタプリタ |
Country Status (3)
Country | Link |
---|---|
EP (1) | EP0643349B1 (ja) |
JP (1) | JP3881704B2 (ja) |
DE (1) | DE69426143T2 (ja) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5737607A (en) * | 1995-09-28 | 1998-04-07 | Sun Microsystems, Inc. | Method and apparatus for allowing generic stubs to marshal and unmarshal data in object reference specific data formats |
US6032199A (en) * | 1996-06-26 | 2000-02-29 | Sun Microsystems, Inc. | Transport independent invocation and servant interfaces that permit both typecode interpreted and compiled marshaling |
US6336148B1 (en) * | 1996-09-25 | 2002-01-01 | Sun Microsystems, Inc. | Automatic checking of public contracts and private constraints on distributed objects |
US5999988A (en) * | 1997-03-31 | 1999-12-07 | Sun Microsystems, Inc. | Method and apparatus for generating and employing a run-time generated stub to reference an object in object oriented systems |
US6516354B2 (en) | 1997-12-18 | 2003-02-04 | Sun Microsystems, Inc. | Method and apparatus for efficient representation of variable length identifiers in a distributed object system |
US6405264B1 (en) | 1997-12-18 | 2002-06-11 | Sun Microsystems, Inc. | Marshaling and unmarshaling framework for supporting filters in a distributed object system |
US6381734B1 (en) * | 1998-06-03 | 2002-04-30 | Microsoft Corporation | Method, software and apparatus for referencing a method in object-based programming |
GB2341953B (en) * | 1998-09-28 | 2003-02-12 | Ibm | Data processing apparatus supporting communication between a first program and a second program via a generic interface |
US8001535B2 (en) | 2006-10-02 | 2011-08-16 | International Business Machines Corporation | Computer system and method of adapting a computer system to support a register window architecture |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH03266064A (ja) * | 1990-03-16 | 1991-11-27 | Hitachi Ltd | プログラム構成方法およびそのための装置 |
DE69228621T2 (de) * | 1991-02-25 | 1999-07-22 | Hewlett Packard Co | Objektorientiertes verteiltes Rechnersystem |
JP3006187B2 (ja) * | 1991-08-08 | 2000-02-07 | 株式会社日立製作所 | 分散処理システム |
US5526491A (en) * | 1992-09-22 | 1996-06-11 | International Business Machines Corporation | System and method for calling selected service procedure remotely by utilizing conditional construct switch statement to determine the selected service procedure in common stub procedure |
JPH06332830A (ja) * | 1993-05-21 | 1994-12-02 | Matsushita Electric Ind Co Ltd | アプリケーション管理装置および遠隔手続呼び出しシス テム |
-
1994
- 1994-08-05 DE DE1994626143 patent/DE69426143T2/de not_active Expired - Fee Related
- 1994-08-05 EP EP19940305845 patent/EP0643349B1/en not_active Expired - Lifetime
- 1994-09-12 JP JP24243694A patent/JP3881704B2/ja not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
EP0643349B1 (en) | 2000-10-18 |
DE69426143D1 (de) | 2000-11-23 |
JPH0793264A (ja) | 1995-04-07 |
DE69426143T2 (de) | 2001-06-13 |
EP0643349A1 (en) | 1995-03-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6446137B1 (en) | Remote procedure call system and method for RPC mechanism independent client and server interfaces interoperable with any of a plurality of remote procedure call backends | |
Conchon et al. | Jocaml: Mobile agents for objective-caml | |
Van Nieuwpoort et al. | Ibis: a flexible and efficient Java‐based Grid programming environment | |
USRE43375E1 (en) | System and method for communications in a distributed computing environment | |
Dumant et al. | Jonathan: an open distributed processing environment in Java | |
US6951021B1 (en) | System and method for server-side communication support in a distributed computing environment | |
US6993774B1 (en) | System and method for remote enabling classes without interfaces | |
US6633923B1 (en) | Method and system for dynamic configuration of interceptors in a client-server environment | |
US6629128B1 (en) | System and method for distributed processing in a computer network | |
US6931455B1 (en) | System and method for communications between a CORBA object request broker and a non-CORBA object request broker | |
US7444619B2 (en) | Inter-process communication using different programming languages | |
EP0766172B1 (en) | A method and apparatus for allowing generic stubs to marshal and unmarshal data in object reference specific data formats | |
US6157961A (en) | Client-side stub interpreter | |
US8010968B2 (en) | Method and system for dynamic configuration of interceptors in a client-server environment | |
US6272557B1 (en) | Framework for marshaling and unmarshaling argument object references | |
US5787251A (en) | Method and apparatus for subcontracts in distributed processing systems | |
US6032199A (en) | Transport independent invocation and servant interfaces that permit both typecode interpreted and compiled marshaling | |
US6622175B1 (en) | System and method for communications in a distributed processing environment | |
Van Nieuwpoort et al. | Ibis: an efficient Java-based grid programming environment | |
Nelson | An Implementation of UNIX™ on an object-oriented operating system | |
US6516354B2 (en) | Method and apparatus for efficient representation of variable length identifiers in a distributed object system | |
US6751798B1 (en) | Method and apparatus for performing distributed object calls using proxies and memory allocation | |
JP3881704B2 (ja) | クライアント側スタブインタプリタ | |
Hailpern et al. | Dynamic reconfiguration in an object-based programming language with distributed shared data | |
Kessler | A client-side stub interpreter |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050208 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20050509 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20050512 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050808 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060322 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20060622 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20060704 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060922 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20061017 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20061113 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20091117 Year of fee payment: 3 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20101117 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111117 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20111117 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121117 Year of fee payment: 6 |
|
S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313111 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121117 Year of fee payment: 6 |
|
R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20121117 Year of fee payment: 6 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20131117 Year of fee payment: 7 |
|
EXPY | Cancellation because of completion of term |