JPH0793264A - クライアント側スタブインタプリタ - Google Patents
クライアント側スタブインタプリタInfo
- Publication number
- JPH0793264A JPH0793264A JP6242436A JP24243694A JPH0793264A JP H0793264 A JPH0793264 A JP H0793264A JP 6242436 A JP6242436 A JP 6242436A JP 24243694 A JP24243694 A JP 24243694A JP H0793264 A JPH0793264 A JP H0793264A
- Authority
- JP
- Japan
- Prior art keywords
- stub
- client
- code
- computer
- interpreter
- 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.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; 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 OR CALCULATING; 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]
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
Abstract
求するメモリスペースを最小にする。 【構成】 本発明は、クライアントアプリケーションに
よるオブジェクトの呼出しを実行し且つクライアントア
プリケーションと、オブジェクトインプリメンテーショ
ンとの間で引数を渡すメカニズムを形成し、クライアン
トアプリケーション又はオペレーティングシステムはそ
れらのメカニズムがどのように動作するかの詳細を知る
ことなく、クライアント側スタブ用として要求されるメ
モリスペースを縮小するような手際よく、簡潔な方法を
提供する。
Description
ライアントサーバ計算及びオブジェクト指向プログラミ
ングの分野に関する。特定すれば、本発明は、クライア
ント側スタブにより要求されるメモリスペースを最小限
に抑えるように設計され且つクライアント側スタブジェ
ネレータ及びクライアント側スタブインタプリタと呼ば
れる論理モジュールを具備する方法及び装置である。
における重大な問題は、オペレーティングシステムにイ
ンプリメンテーションの詳細をロードダウンせずにクラ
イアントやプログラマに最大限の融通性を与えるような
方法で新たなインタフェースとインプリメンテーション
技法の導入を可能にするということである。さらに、マ
イクロカーネルアーキテクチャを有するオブジェクト指
向オペレーティングシステムを開発する場合には、この
問題は一層深刻になる。マイクロカーネルは、典型的に
は、クライアントに、たとえば、ファイルシステムなど
のクライアントレベルの複雑なサブシステムを実現させ
る。それにもかかわらず、クライアント間通信又はコン
ピュータ間通信などの基本システムプロセスは非常に複
雑であるので、クライアントとオブジェクトインプリメ
ンタはそれらのプロセスに関わるべきではない。すなわ
ち、それらの本来は「システム」型であるプロセスは標
準モジュールによってより効率良く実行されるのである
が、基本オペレーティングシステムがそれらのプロセス
によって制約されることを要求しないような方法で処理
されるべきである。
ンタフェースを定義するためにオブジェクトメタファを
使用するシステムについてこの基本的な問題を解決する
方法の一部として、スタブや、他の同様の種類の中間論
理モジュールが使用されてきた。そのようなスタブは、
呼出しのパラメータとして別のオブジェクトを送信して
いることもある遠隔コンピュータの間でのオブジェクト
呼出しの通信を処理するための標準モジュールとして記
述される。それらのスタブ及び他の類似するモジュール
と、その相互関係については、以下に、スタブジェネレ
ータとスタブインタプリタを含む本発明の詳細な説明の
文脈の中でさらに詳細に説明する。
クトは、データと、そのデータを操作するために呼出す
ことができる動作とから成るコンポーネントである。動
作はオブジェクトにおいて、オブジェクトへ呼出しを送
信することによって呼出される。各オブジェクトはオブ
ジェクト型を有する。オブジェクト型はその型のオブジ
ェクトで実行できる動作を定義する。オブジェクト動作
はオブジェクト自体とは無関係に実現される。加えて、
1つのオブジェクト型は他のオブジェクト型に関して定
義され且つ実現されるオブジェクト動作を継承している
こともある。オブジェクト指向デザインとプログラミン
グ技法の詳細については、Bertrand Meye
rの「Object−oriented Softwa
re Construction」(Prentice
−Hall,1988年)を参照。
型的には、コンピュータを接続するネットワークを介し
て互いに通信できる1組のコンピュータがある。それら
のコンピュータの一部は、他のコンピュータにサービス
又は機能性を提供する働きをする。そのようなサービス
又は機能の提供者は「サーバ」として知られており、そ
のようなサービス又は機能性を消費する側を「クライア
ント」と呼ぶ。クライアント−サーバモデルは、同じコ
ンピュータでランしている別個のプログラムが何らかの
保護メカニズムを介して互いに通信しており且つ機能性
の提供者並びに消費者として活動しているようなケース
にも一般化される。
ジェクト指向分散形システムには、オブジェクト指向イ
ンタフェースをクライアントに提供するサーバが存在す
る。それらのサーバはデータと、関連ソフトウェアとか
ら構成されるオブジェクトを支援する。クライアントは
それらのオブジェクトに対するアクセスを獲得し且つそ
れらのオブジェクトに対して呼出しを実行する。それら
の呼出しはクライアントからサーバへ伝送される。サー
バでは、それらの呼出しをオブジェクトと関連するソフ
トウェアを介して実行する。次に、それらの呼出しの結
果をクライアントに伝送して戻す。
ケーションソフトウェアはネットワークと直接には通信
しない。その代わりに、アプリケーションソフトウェア
は「スタブ」(図1の14)と通信する。スタブは、ク
ライアントとサーバとの間にネットワークが存在してい
るか否かにかかわらず、一貫したインタフェースを形成
する。システムにより支援される個別のインタフェース
ごとに、別々のスタブが存在する。スタブコードは、ア
プリケーションレベルソフトウェアが見る特定言語レベ
ルインタフェースと、ネットワークソフトウェアが提供
する標準低レベル通信インタフェースとの間で変換を実
行する必要がある。たとえば、スタブは遠隔呼出しに対
する引数を取上げ、それらの引数をネットワークソフト
ウェアがネットワークを介して伝送するのに適するメッ
セージに導入する必要がある。そのようなスタブの利用
法は、Donald E.Merusiの著書「Sof
tware Implementation Tech
nique」の349〜368ページのRemote
Procedure Calls(「RPC」)につい
ての章(Digital Press,1992年,I
SBN1−55558−090−4)の中に記載されて
いる。
ムで生成されるクライアント側スタブの数の関係上、そ
れらの数多くのクライアント側スタブに関連するコード
が占めるテキストメモリスペースを縮小するためのメカ
ニズムが必要であることが明らかになっている。
散形システムで最も重要であるオブジェクト呼出し及び
引数渡しの基本メカニズムの制御を実行するためのスタ
ブの設計を保持しつつ、クライアント側スタブが要求す
るメモリスペースを最小限に抑えるように設計されてお
り且つアプリケーションプログラマに特定のオブジェク
トのために使用されている特定スタブを知らせないよう
にしても差しつかえないようにする、クライアント側ス
タブジェネレータ、圧縮クライアント側スタブ実行コー
ドのデータベース及びクライアント側スタブインタプリ
タと呼ばれる論理モジュールを具備する装置及び方法を
提供することを課題内とする。
アプリケーションによるオブジェクトの呼出しを実行し
且つクライアントアプリケーションと、オブジェクトイ
ンプリメンテーションとの間で引数を渡すメカニズムを
形成し、クライアントアプリケーション又はオペレーテ
ィングシステムはそれらのメカニズムがどのように動作
するかの詳細を知ることなく、クライアント側スタブ用
として要求されるメモリスペースを縮小するような手際
よく、簡潔な方法を提供する。さらに、それらのメカニ
ズムは、クライアントアプリケーションが1つのコンピ
ュータノードにあり、オブジェクトインプリメンテーシ
ョンは別のコンピュータノードにあるような分散形コン
ピュータ環境でも同様の容易さと効率をもって機能す
る。
より呼出される特定のスタブ動作を、複数の異なるスタ
ブ方法に共通するコードとして識別され、そのスタブ動
作を実行するために要求されるコードの第1の部分をコ
ンピュータメモリの第1の領域からアクセスし、且つ呼
出される特定のスタブ動作について独自のものであるコ
ードの第2の部分をコンピュータメモリの第2の部分か
らアクセスすることによって実行する方法及び装置を説
明する。複数のスタブ方法に共通するコードは一度しか
記憶されないので、これにより、要求されるコンピュー
タメモリを縮小できる。
されるコードを複数のスタブ方法に共通するコードの第
1の部分と、各スタブ動作について独自のものであるコ
ードの第2の部分とに分割すると共に、様々な方法、テ
キスト及びパラメータのバイトコード表現を使用して、
このコードの第2の部分を圧縮形式でコンピュータメモ
リに記憶するプロセスを提供する方法及び装置を示す。
複数のスタブ方法に共通するコードの部分はスタブイン
タプリタと呼ばれるメカニズムの中に含まれており、こ
のスタブインタプリタは、クライアントによりスタブ動
作が呼出されるたびに、共通コードのこの部分を供給す
る。スタブインタプリタは、スタブ方法が呼出されるた
びに、そのスタブ方法を完了するために要求されるスタ
ブコードの独自の部分を獲得するために、メモリをアク
セスする。
されるメカニズムは、コンピュータメモリに記憶される
圧縮クライアント側スタブ記述ファイルから成るデータ
ベースを生成するスタブジェネレータ(「CONTOC
C」と呼ばれる)と、それらのクライアント側スタブ記
述ファイルをいかにして読取るべきかについての知識を
もつスタブインタプリタとを具備する。CONTOCC
はインタフェース定義言語(「IDL」)ファイルを読
取り、対応するC++ファイルを生成する。CONTO
CCはIDLデータを読取り、圧縮解除C++スタブフ
ァイルか、バイト符号化形態に含まれている特定のスタ
ブ方法について独自のものであるデータのみを含む特殊
圧縮クライアント側スタブインタプリタファイルのいず
れかを生成する能力を有する。
ゲットオブジェクトと、呼出された特定のスタブ方法に
関連する引数と、コンピュータメモリに記憶されている
圧縮クライアント側スタブ記述ファイルのデータベース
の中のスタブコードの圧縮バイトコード表現に対するポ
インタとを受信し、必要に応じてオブジェクト呼出し、
戻りメッセージのマーシャル化又はアンマーシャル化を
実行するように進行する。本発明のシステムの目的、特
徴及び利点は以下の説明から明白になるであろう。
ンピュータ又は複数のコンピュータから成るネットワー
クで実行されるプログラム手続きによって提示される。
そのような手続きによる手続きや表現は、当業者がその
作業の内容を他の当業者に最も有効に伝達するために使
用する手段である。
る所望の結果に至るステップの首尾一貫したシーケンス
である。それらのステップは物理的量の物理的操作を要
求するステップである。通常、それらの量は記憶、転
送、組合せ、比較及びその他の操作が可能である電気信
号又は磁気信号の形態をとる。時によっては、主として
一般に使用されている用語であるという理由により、そ
れらの信号をビット、値、要素、信号、文字、項、数な
どと呼ぶと好都合であることがわかる。しかしながら、
それらの用語及びそれに類する用語は、全て、適切な物
理的量と関連させるべきものであり、単にそれらの量に
便宜上付されたラベルであるにすぎないということに注
意すべきである。
レータが実行する知的動作と関連する加算又は比較など
の用語で呼ぶことが多い。ここで説明する、本発明の一
部を成す動作のいずれをとっても、オペレータのそのよ
うな能力は不要であるか、又は多くの場合に望ましくな
い。動作は機械動作である。本発明の動作を実行するの
に有用な機械には、汎用デジタルコンピュータ又はそれ
に類する装置がある。
装置にも関する。この装置は要求される目的に合わせて
特別に構成されても良く、あるいは、汎用コンピュータ
に記憶させたコンピュータプログラムによってコンピュ
ータを選択的に起動又は再構成しても良い。ここで提示
する手続きは、本来、特定のコンピュータ又は他の特定
の装置に関連するものではない。様々な汎用機械をここ
で示す教示に従って書込んだプログラムと共に使用して
も良く、あるいは、要求される方法ステップを実行する
ためには、より特殊化した装置を構成するほうが好都合
であると判明するかもしれない。それらの様々な機械に
ついて要求される構造は以下の説明から明白になるであ
ろう。
ントサーバ、分散形計算演算から成る計算環境における
スタブ演算を実行するコンピュータコードが占める総メ
モリスペースを縮小する独特の革新的な方法及び装置を
説明する。
ている。本発明は、入力としてインタフェース定義言語
(「IDL」)コード150を受信し、必要に応じてク
ライアント側スタブ用の圧縮コード及びテーブルから成
るデータベース156を生成するか、又は必要に応じて
正規のC++スタブコード154を生成するクライアン
ト側スタブジェネレータ(「CONTOCC」)152
と、マーシャル化、アンマーシャル化及びオブジェクト
呼出しといったクライアント側スタブ機能を実行できる
ランタイムクライアント側スタブインタプリタ158と
を含む。呼出されつつある方法に対するターゲットオブ
ジェクトと引数168を渡し且つコンピュータメモリ1
70に記憶されている正規スタブコードを介してその方
法を実行する正規スタブ方法呼出し162が指示されて
いる。また、スタブインタプリタ158と共に使用され
る型のスタブ方法呼出し164も示されており、これも
呼出されつつある方法に対するターゲットオブジェクト
と引数を渡すのであるが、それに加えて、コンピュータ
メモリ172の圧縮スタブコード166に対するポイン
タを渡し、それにより、スタブインタプリタ158はそ
の方法呼出しを実行することができる。以下、本発明の
好ましい実施例を実現する動作環境を簡単に説明した後
に、本発明のそれらのコンポーネントについてさらに詳
細に説明する。
ために、説明の便宜上、特定のデータや構成を挙げる。
ここで説明する好ましい実施例は、方法テーブルと、サ
ブコントラクトメカニズムと、「サブコントラクトの」
局所専用状態を表わすデータ構造とを含む「spring obj
ect」 と呼ばれる新しい型のオブジェクトを含む計算環
境において実現され、ここに挙げたものは全てSun
Microsystems,Inc.(「Sun」)の
SPRING Object Oriented Op
erating System(「SPRING」)の
制御の下に動作している。クライアント側スタブインタ
プリタとその基礎を成すプロセスをここで説明する特定
の詳細がなくとも実施しうると共に、様々なコンピュー
タシステムや、密結合プロセッサの様々な構成、形態又
はモデル、あるいは、疎結合多重プロセッサシステムの
様々な構成において実現しうることは当業者には認めら
れるであろう。
み、その状態を操作するための1組の方法を提供する抽
象である。オブジェクトとその方法の記述は、インタフ
ェース定義言語(「IDL」)で指定されるインタフェ
ースである。インタフェースはインプリメンタ(サー
バ)と、オブジェクトのクライアントとの間の強く型付
けされたコントラクトである。
なうアドレススペースである。1つのドメインが与えら
れたとき、そのドメインはいくつかのオブジェクトのサ
ーバとして活動し、別のオブジェクトのクライアントと
して活動することもある。インプリメンタとクライアン
トは同一のドメインにあっても良く、異なるドメインに
あっても良い。
で、インタフェース継承の概念を支援する。SPRIN
Gは単一インタフェース継承と、多重インタフェース継
承双方の概念を支援する。「foo」型のオブジェクト
を受入れるインタフェースは、[foo」のサブクラス
の事例をも受入れる。たとえば、address_spaceオブジ
ェクトはmemory_objectを取出し、それをアドレススペ
ースにマッピングする方法を有する。同じ方法は、memo
ry_objectインタフェースから継承するオブジェクトで
ある限り、fileオブジェクトや frame_bufferオブジェ
クトをも受入れる。
ン呼出し及びスレッド、低レベル機械依存処理、並びに
メモリマッピング及び物理メモリ管理のための基本仮想
メモリ支援を支援する。SPRINGカーネルは他のS
PRINGカーネルに関する知識をもたず、遠隔呼出し
は全てネットワークプロクシサーバによって処理され
る。加えて、仮想メモリシステムは外部ページャに依存
して、記憶とネットワークのコヒーレンシーを処理す
る。
ラクトメカニズムがある。各サブコントラクトはクライ
アント側部分と、関連するサーバ側部分とを有する。各
オブジェクト型は関連するサブコントラクトを有する。
サブコントラクトのクライアント側部分は新たなspring
オブジェクトを生成し、springオブジェクトを削除し、
関連オブジェクトに関する情報を通信バッファにマーシ
ャル化し、関連オブジェクトを表わす通信バッファ中の
データをアンマーシャル化し、オブジェクトを1つの記
憶場所から別の記憶場所へ伝送すること又はオブジェク
トのコピーを1つの記憶場所から別の記憶場所に伝送す
ることを含めて、通信バッファを関連するサーバ側サブ
コントラクトへ伝送する能力を有する。サブコントラク
トメカニズムのサーバ側部分はspringオブジェクトを生
成し、入力呼出し及び関連通信バッファを処理するため
の支援を実行し、オブジェクトを無効にするための支援
を実行する能力を有する。
はわずかに異なる方式でオブジェクトを見ているので、
スタブインタプリタ、スタブ及びサブコントラクトの詳
細を論ずるのに先立って、このことを明確にしておく必
要がある。
サーバ機械に常駐し、クライアント機械はサーバにある
オブジェクトを指示する「オブジェクトハンドル」を所
有するようなモデルを提示する(図10aを参照)。そ
のため、クライアントはオブジェクトではなく、オブジ
ェクトハンドルを渡してゆく。
はなく、オブジェクトに対して直接にクライアントが動
作しているようなモデルを提供する(図10bを参
照)。それらのオブジェクトのいくつかはいずれかの遠
隔場所でその関心状態を全て保持することもあるので、
それらのオブジェクトの局所状態は単にこの遠隔状態に
対するハンドルから構成されるのみである。1つのオブ
ジェクトは一度に1つの場所で存在することしかできな
いので、オブジェクトを誰か別の人へ伝送する場合に
は、伝送者自身はそのオブジェクトに関わるのを止め
る。ところが、伝送する前にオブジェクトをコピーする
ことも可能であり、これは同一の遠隔場所を指示する2
つの別個のオブジェクトが存在するように実現されるで
あろう。
の遠隔オブジェクトを参照するオブジェクトハンドルを
有するいくつかのクライアントについて述べることにな
るであろうが、SPRINGにおいては、いくつかのク
ライアントが同じ遠隔場所を参照するオブジェクトを有
するということになるであろう。
この相違は主に用語の違いである。しかしながら、SP
RINGはサーバをベースとしないオブジェクト、すな
わち、オブジェクトの状態がクライアントとサーバとの
間で分割されているような状況をも支援する。このよう
な場合、クライアントを単にポインタを所有するのでは
なく、真のオブジェクトを所有するものとみなすことが
はるかに好都合である。
ースが標準インタフェース定義言語で定義されるという
ことである。この言語はオブジェクト指向であり、多重
継承の支援を含む。これは真にインタフェースの特性に
関するものであって、インプリメンテーション情報を提
供しない。インタフェース定義言語から、特定言語向け
スタブを生成することが可能である。それらのスタブ
は、SPRINGインタフェースに対する特定言語向け
マッピングを実行する。たとえば、主なインプリメンテ
ーション言語であるC++では、C++オブジェクトに
よってspringオブジェクトを表現する。スタブオブジェ
クトについての方法を呼出すと、現在アドレススペース
の中で局所呼出しを実行するか、又はその呼出しを異な
る機械にあっても良い別のアドレススペースへ送り出
す。
は、機械10のクライアントアプリケーション12は適
切なクライアント側スタブ14に対して呼出しを発行
し、そのクライアント側スタブは「サブコントラクト」
30のクライアント側部分を呼出し、そのサブコントラ
クトは、一般には別の機械18にある相手方のネットワ
ークソフトウェア20と通信するネットワークソフトウ
ェア16に作用する。サーバ側ネットワークソフトウェ
ア20は入力メッセージをサブコントラクトのサーバ側
部分へ転送し、そこで、サブコントラクトはそのデータ
をサーバ側スタブ22に供給し、サーバ側スタブは典型
的にはオブジェクトインプリメンテーションであるサー
バアプリケーション24にデータを渡す。指示した通
り、サブコントラクトはスタブとネットワークソフトウ
ェアとの間にはめ込まれている。スタブはサブコントラ
クトを使用して遠隔呼出しを実行し、次に、同様にして
サブコントラクトはネットワークソフトウェアを使用し
て、実際の呼出しを実行する。異なるサブコントラクト
は標準通信ソフトウェアの上に異なる種類の遠隔通信プ
ロトコル(複製用、キャッシング用など)を実現する。
ケーションがサブコントラクトを使用して通信すること
もある。そこで図5を参照すると、クライアントアプリ
ケーション12はアプリケーションスペース38の中に
あり、適切なクライアント側スタブ14に対して呼出し
を発行し、そこで、スタブは適切なサブコントラクト3
0を呼出す。サブコントラクト30はその通信をオペレ
ーティングシステム36へ転送し、オペレーティングシ
ステムはその通信をサーバ側サブコントラクト32へ中
継し、そこで、サーバ側サブコントラクトはデータをサ
ーバ側スタブ22に与え、スタブはデータをサーバアプ
リケーション24に渡す。この場合、オペレーティング
システム36が提供するプロセス間通信プリミティブは
ネットワーキングソフトウェアが提供する機械間通信メ
カニズムと置換えられる(図4の16及び20)。
アプリケーションの中であっても、クライアント側とサ
ーバ側のスタブとサブコントラクトがアプリケーション
の異なるコンポーネントの間で通信するために使用され
ることもある。
という面から物を見てみると、クライアントアプリケー
ション1は「スタブオブジェクト」2によって動作す
る。それらのスタブオブジェクト2は、各々、1つのサ
ブコントラクトオブジェクト3を含み、このサブコント
ラクトオブジェクトの内部状態4(その「表現」として
知られている)は基礎にある実状態5に対する何らかの
形態のポイント6を含んでいても良い。実状態5は同じ
アドレススペースにあっても良く、同じ機械の別のアド
レススペース又は全く別の機械にあっても良い。典型的
には、基礎状態自体がサーバアプリケーションのアドレ
ススペースではオブジェクト5として表現される。
のものから構成されるものと理解する。その3つとはオ
ブジェクトの型定義により示唆される動作ごとに1つの
エントリを含む方法テーブルと、次の章で説明する基本
サブコントラクト動作を指定するサブコントラクト記述
と、オブジェクトの表現と呼ばれる何らかの局所専用状
態である。
えるものについて方法を呼出すことによってオブジェク
トと対話する。このオブジェクトに関わるコードは実際
には自動的に生成されており、方法呼出しをオブジェク
トの正規の方法テーブル又はそのサブコントラクト動作
ベクトルに対する呼出しに変換する。それらの方法がい
かにして効果をあげるかはクライアントにはわからない
が、適切なスタブ方法に対する呼出しを含む。その動作
については以下に説明する。
る場合、サブコントラクトはその遠隔サーバと通信する
機械を実現し、一方、方法テーブルは、引数をバッファ
へマーシャル化し、遠隔呼出しを実行するためにサブコ
ントラクトを呼出し、次に応答バッファからの何らかの
結果をアンマーシャル化することを唯一必要とするスタ
ブ方法に対するポインタから構成されるというのが典型
的な構成である。SPRINGはインタフェース定義言
語から適切なスタブを生成するめに自動スタブジェネレ
ータ(「CONTOCC」)を構成する。本発明の開示
の対称となるのはこの自動スタブジェネレータと、クラ
イアント側スタブインタプリタプロセスである。本発明
の役割を適正に説明するためには、クライアント側スタ
ブとサーバ側スタブがシステムによりどのように使用さ
れるかをさらに説明することが必要である。
と関連するサブコントラクト作業を実行するための何ら
かのサブコントラクトコードと、動作ごとの引数と、サ
ーバアプリケーションへの呼出しとをアンマーシャル化
する何らかのサーバ側スタブコードとが存在する。この
サーバ側スタブコードCONTOCCによって自動的に
生成される。しかしながら、後述するように、好ましい
実施例のスタブインタプリタはクライアント側スタブの
みを目指しているのであるが、同じ原理をサーバ側スタ
ブと共に使用できることは当業者には認められるであろ
う。
場合には、スタブ方法の使用を回避し、方法テーブル中
に直接に導入できるインプリメンテーション方法を提供
することが可能である。SPRINGは、この場合、方
法テーブルを生成するための支援を実行する。
る。 ・ copy ・ consume ・ unmarshal ・ marshal ・ marshal_copy ・ invoke ・ invoke_preamble ・ narrow ・ object_type_id ・ object_manager_id ・ is_null
な説明は、本明細書にも参考として取入れてあるGra
ham Hamilton,Michael L.Po
well,James G.Mitchell及びJo
nathan J.Gibbsons出願による名称
「A Method and Apparatus f
or Subcontracts in Distri
buted Processing Systems」
の同時係属出願第07/995,863号の中に記載さ
れている。サブコントラクトの使用例と、クライアント
側スタブ及びサーバ側スタブとサブコントラクトメカニ
ズムとの対話について、ここで簡単に説明する。
すときに実行されるスタブとサブコントラクトの動作の
シーケンスを考えることが有用である。尚、これは単な
る1例であり、ここで定義され且つ先に指示した同時係
属引例の中に定義されているようなサブコントラクトを
ここで説明するよりはるかに新奇な動作を実行するよう
に構成できることは当業者には認められるであろう。図
6から図9についての以下の説明を参照のこと。
Aを使用するオブジェクトAがあると仮定する。 復帰型fruitbatは何らかのサブコントラクトSFを使用
することがわかっている。
るwombat型のオブジェクトXがあり、Xを引数として渡
しつつAのfred方法を呼出すものとする(ステップ5
0): 1.まず、「fred」に関わるクライアント側スタブ方法
を入力する(ステップ52,54)。 2.クライアント側スタブコードはAのinvoke_preamb
le動作を呼出す(ステップ56)。 3.SAinvoke_preambleコードは必要な初期設定と復
帰を実行する(ステップ58)。
は、Xの marshal_copy動作を呼出すことにより、引数
オブジェクトXをコピー引数としてマーシャル化しよう
とする。図6では、これは次のように進行してゆく。ク
ライアント側スタブfredは、マーシャル化すべき引数が
存在するか否かを知るために試験を実行する(ステップ
60)。その返答はイエスであるので、次に、スタブfr
edはいずれかがオブジェクトであるか否かを知るために
引数を試験する(ステップ62)。オブジェクトXを発
見し、XはサブコントラクトSXを有することがわかる
と、スタブfredはオブジェクトXをマーシャル化するた
めにサブコントラクトSXを呼出す。
ッファに導入すべきXのコピーを記述する情報を配列し
且つスタブfredに戻る(ステップ64)。 6.ここで、クライアント側スタブコードは全ての引数
をマーシャル化し終わっており、呼出しを実際に実行可
能な状態になる。そこで、Aのinvoke動作を呼出す(ス
テップ70)。
の呼出しがオブジェクトAに関するサーバ状態で起こる
という要求をもって、引数バッファをターゲットサーバ
へ伝送するために必要な作業を実行し、次に、サーバか
ら戻る結果バッファを待機する(ステップ72)。
サーバにより呼出しを受信し、サーバ側サブコントラク
トSSAにデータを供給し、サブコントラクトSSAは
バッファをサーバ側スタブS2に供給する(ステップ7
4,76)。スタブS2はアンマーシャル化すべき引数
が存在するか否かを知るために検査し(ステップ7
8)、次に、引数のいずれかがオブジェクトであるか否
かを知るために検査する(ステップ80)。アンマーシ
ャル化すべきオブジェクトXが存在することが発見され
ると、サーバ側スタブS2はSSAサブコントラクトの
アンマーシャル化動作を呼出す(ステップ82)。サブ
コントラクトSSAはオブジェクトXのサブコントラク
トidを検査して、それが関連するサブコントラクトS
Xを有することを発見する(ステップ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)。
ードはSAinvoke方法から結果バッファを受信し(ステ
ップ130)、その結果のアンマーシャル化を開始する
ことを望む。この場合、結果はサブコントラクトSFを
有するfruitbat型のオブジェクトにはわかっているの
で、クライアント側スタブfred(SA)はSFサブコン
トラクトのアンマーシャル化動作を呼出して、fruitbat
型に関わる正規方法テーブルを渡す。呼出しステップは
ブロック142,134,136,138に示されてお
り、先に引用した同時係属出願の中のコンパチブルオブ
ジェクトの説明中にさらに詳細に記載されている。
ル化コードは、結果バッファからのオブジェクトをアン
マーシャル化しようとする。コードは結果バッファから
の情報を独自のサブコントラクト方法テーブル及び渡さ
れた正規方法テーブルと組合せて新たなSPRINGオ
ブジェクトF2を形成し、そのオブジェクトF2をクラ
イアント側スタブに渡して戻す(ステップ140)。
スクを完了し、結果オブジェクトをアプリケーションレ
ベルに戻すことができる(ステップ148)。
イアント側スタブコードによって駆動されていたが、タ
ーゲットオブジェクト、引数オブジェクト及び結果オブ
ジェクトとに関わるサブコントラクトをも含んでいた。
ブインタプリタ スタブ及びサブコントラクトの利用法についてのこの例
示説明の中で指示した通り、クライアント側スタブはク
ライアントに対する一次インタフェースである。オブジ
ェクト指向、分散形システムで生成されるクライアント
スタブの数の関係上、それらのクライアント側スタブの
コードが占めるテキストメモリスペースを縮小する方法
を考えることが適切になった。再び図2を参照すると、
このメモリスペースを縮小するために使用されるメカニ
ズムはスタブジェネレータ(「CONTOCC」と呼ば
れる)152と、クライアント側スタブ記述ファイルの
データベース(圧縮スタブコード)156と、それらの
クライアント側スタブ記述ファイルをいかにして読取る
べきかに関する知識をもつスタブインタプリタ158と
を含む。CONTOCC152はインタフェース定義言
語(「IDL」)ファイル150を読取り、対応するC
++ファイルを生成する。CONTOCC152はID
Lデータ150を読取り且つ正規のC++スタブファイ
ル又は以下にさらに詳細に説明する特殊クライアント側
スタブインタプリタファイル158のいずれかを生成す
る能力を有する。
て、IDLオブジェクトについての動作の実行という結
果をもたらすクライアントが呼出しできるC++方法を
提供する。スタブは多重継承を処理するメカニズムと、
SPRINGオブジェクト呼出しを実行するメカニズム
とから構成されている。
しに対する引数をトランスポートと呼ばれる線形データ
構造へとマーシャル化し、呼出しに対する識別オブジェ
クトについての方法を呼出し、且つ呼出しの結果をアン
マーシャル化する(例外が発生すれば、その例外を処理
する)ことによって実行される。Springのサブコ
ントラクトメカニズムであるため、クライアント側スタ
ブはパラメータオブジェクトをマーシャル化又はアンマ
ーシャル化することの詳細に対して管理する必要がな
く、実際の呼出しについても管理する必要がない。クラ
イアント側スタブは、引数と結果が適切な順序でマーシ
ャル化、アンマーシャル化されるように保証すると共
に、動作呼出しを実行するために識別オブジェクトのサ
ブコントラクトを呼出す必要がある。
引数(input)を取出し、1つのlong引数(output)を
発生し、例外(that)を生じない限り、res 型の結果
(unnamed)を戻す1つの方法(thod)を有する。尚、
例外(that) の場合には、例外の1パラメータとしてl
ong(reason)を渡す。上記のインタフェースについて
クライアント側スタブの一部として下記のコードを(常
に、さらには、オプションとして)発生するために使用
されるCONTOCCトランスレータは:
は、そのような全てのクライアント側スタブ方法におい
てコードの大半が同一であること、及び変更可能な部分
を適切、簡潔に記述できることである。それらの観察に
よって、クライアント側スタブのインタプリタという概
念が生まれた。
に肉太の字体で示されている。パラメータの型とモード
はスタブ方法ごとに変化するが、識別オブジェクトは常
に「any_obj* 」型であって、常に第1のパラメータで
ある。異なるスタブ方法によって発生する例外は異なる
場合もある。異なるパラメータは異なる方式でマーシャ
ル化されなければならないが、ライブラリ型についての
マーシャル化方法は良く知られており、オブジェクトと
構成型(array,struct など)のマーシャル化はその型
についてのマーシャル化方法を呼出すことにより実行さ
れる。呼出しは、サブコントラクト方法を呼出すことに
よって実行される。この場合、スタブ方法間の唯一の変
数は呼出し中の動作の識別である。アンマーシャル化は
マーシャル化と全く同様に変化し、ライブラリ型につい
てはこれも同じように良く知られており、どのオブジェ
クト又は構成型もアンマーシャル化方法を呼出すことに
よりアンマーシャル化される。発生する必要のある例外
はいずれもinvoke呼出しからの復帰コードとして符号化
され、例外に対するパラメータのアンマーシャル化と例
外の発生は1つの方法の中にカプセル化される。(しか
しながら、例外に対するパラメータのアンマーシャル化
と例外の発生は先にはインラインで生成されていたが、
好ましい実施例ではそれを別個の方法にすることによ
り、C++符号化スタブにあってもスペースを節約する
可能性があることに注意する。)
れば、C++符号化スタブの固定部分を本体とし且つ可
変部分を記述するテーブルを参照し、その記述が与えら
れると、それに従って活動するインタプリタが設けられ
る。スペースの節約はテーブル駆動スタブインタプリタ
を使用することの第1の目的であったので、テーブルは
できる限り実用的に形成されている。
引数の型及びモードと、パラメータに関わるマーシャル
方法及びアンマーシャル方法並びにそれらの方法を必要
とする結果と、実行すべき動作の識別と、例外識別子か
ら例外のパラメータをアンマーシャル化し且つその例外
を発生させる方法へのマッピングとから構成されてい
る。加えて、以下に詳細に説明するように、必要とされ
るデータは他にも様々ある。一連のスタブの記述はかな
りの量の共通情報を含むので、1つのモジュール(動作
の集合体である一連のインタフェース)に関わる記述は
1つのテーブルにまとめられる。
ンタプリタが認識するcopy,share,consume,produce
(「out」としても使用される),borrow,in,in_out
及びreturnという9つのパラメータパスモードがあ
る。スタブインタプリタが認識するパラメータ型はboo
l,octet,char,short,long,long long,unsigned s
hort,unsigned long,unsigned long long,float,do
uble,string,struct(unions 及びbuiltins にも使用
される),array,object及びvoid(void returnsにの
み使用される)の16種類である。モードと型はそれぞ
れ4ビットに符号化でき、その組合せは都合良く1つの
バイトにはめ込まれる。方法に対する各パラメータ(及
びreturn型)は少なくとも1つのバイトとして符号化さ
れる。1つの動作の全てのパラメータに関わるパラメー
タ記述子は次々に記憶される。動作ごとのパラメータ記
述子は0x00を含む1つのバイトによって終了し、(必要
に応じて)アドレス指定を容易にするために、次の4バ
イト境界に至る0xffを含むバイトを埋込まれている。
(現時点で好ましい実施例は方法のパラメータ記述を終
了させるためにこの空バイトを使用するが、このバイト
と、3バイトまでの埋込みとを節約できるような別の実
施例も可能である。このテーブルにおける方法のデータ
の終わりを識別するこの代替方法は、スタブインタプリ
タがモード「return」をもつバイトを見出すのは記述の
終わりであるという知識をもっているために可能なので
ある。)最後に、動作識別子は、動作のパラメータを記
述するバイトの前に、4バイト符号なし整数として記憶
される。クライアント側スタブ記述のレイアウトの1例
を図11に示す。
な時点で周知のコードによりマーシャル化、アンマーシ
ャル化される。オブジェクトパラメータは、適切なサブ
コントラクトマーシャル化方法(記述子中のモードに応
じてmarshal_copy 又はmarshal_consume)を呼出すこ
とによりマーシャル化される。オブジェクトをアンマー
シャル化する必要がある場合、そのアンマーシャル化方
法のアドレスを記述の中のいずれかの箇所に記憶させ、
そのアドレスの索引を(mode,type)対の後に記憶させ
る。構成型のパラメータに関わるマーシャル化方法及び
アンマーシャル化方法を見出すときにも同じ方法を採用
する。パラメータについてマーシャル化とアンマーシャ
ル化の双方の方法が必要とされる(たとえば、borrowパ
ラメータである)場合、マーシャル化方法を所定の索引
に記憶させ、アンマーシャル化方法はそれに続き、所定
の索引+1でアクセスされることになる。
の索引)は(記述子が通常は小さいために)通常は小さ
いので、それらの索引について次のような符号化を使用
する。すなわち、索引は7ビットにはめ込まれるのであ
れば、最上位ビットをクリアして、索引を1つのバイト
の中に記憶する。また、索引が7ビットにはめ込まれな
いのであれば、最上位ビットをセットして、索引の上位
の7ビットを第1のバイトに記憶し、それに続く索引の
7ビットチャンクを連続するバイトに記憶する。その場
合、各バイトの最上位ビットは、数を完了するために下
位の7ビットチャンクが必要とされることを指示してい
る。
呼出しによって発生されるか又は戻される場合には、ス
タブインタプリタは、アンマーシャル化方法を呼出す前
に、その型に関わるイニシャライザを呼出す必要があ
る。その場合、イニシャライザ方法のアドレスを記述中
の、アンマーシャル化方法の後に記憶する。consume を
渡されるstruct,union 及びbuiltin パラメータについ
て、スタブインタプリタはマーシャル化の後にパラメー
タをクリーンアップするための方法をも呼出さなければ
ならない。そのパラメータに関わるデストロイヤのアド
レスを記述中の、マーシャル方法の後に記憶する。stru
ct,union又はbuiltinパラメータの記述における方法の
実際の順序は、marshal_consume,アンマーシャル化
(おそらくはmarshal_consume+1でアクセスされ
る)、デストロイヤ(marshal_consume+2でアクセス
される)、イニシャライザ(un_marshal +2でアクセ
スされる)となる。
アンマーシャル化方法、イニシャライザ方法又はデスト
ロイヤ方法を呼出すためにスタブインタプリタが使用す
る方法アドレスについて検査を実行しない。スタブジェ
ネレータは正しい方法を期待されたスロットに挿入し且
つ正確に索引を充填しているものと仮定する。事実、ス
タブインタプリタは構成型のパラメータについてはmars
hal_consume方法と、marshal_copy 方法とを区別しな
い。テーブル中の適切な方法の索引がスタブインタプリ
タに与えられると仮定する。
のある全ての例外は、例外に対する引数をいずれもアン
マーシャル化し且つその例外を発生させる方法のアドレ
スへの例外識別子から1つのマップに統合される。例外
が発生したことをスタブインタプリタが検出すると、ス
タブインタプリタは例外識別子を求めてテーブルを探索
し、例外を発生させるために対応する方法を呼出す。ス
タブインタプリタ自体から任意の例外を発生させるため
の方法は編成するのが困難であるので、スタブインタプ
リタ自体に例外を発生させる代わりに、方法呼出しを使
用した。
め、モジュールを記述する様々なバイトとテーブルを連
続して記憶してあるので、記述に対する1つの索引で、
特定の動作呼出しについて必要とされる全ての情報を十
分に発見できる。まず、テーブル中のエントリの数を接
頭部として、アンマーシャル化などの方法200のテー
ブルを記憶する。次に、同様にエントリの数を接頭部と
する例外のテーブル202が続く。次に、実際の方法記
述子自体204があり、各記述子は動作識別子である索
引206から構成されており、これは動作記述から記述
の前のテーブルに至るために使用される。その後に、動
作のパラメータを記述するバイトと索引208が続く。
それらのバイトはファンクションの復帰型の記述210
を含む。必要に応じて、それらの記述子に4バイトの複
数を充填させるために、各動作バイト群の後に空パディ
ングが続く。各ファンクション記述は少なくともファン
クションコード204と、(方法のテーブルをアクセス
するために)記述の始めに戻るまでの距離206と、フ
ァンクションの復帰型に関わる記述子210とを含む。
未構成復帰値として3つまでの未構成引数をもつファン
クションに対して、最小ファンクション記述子は12バ
イトである。型がアンマーシャル化等の方法に対し索引
を必要としないのであれば、索引を省略する。上記の例
のIDLインタフェースの記述は次の通りである:
る。この章では、好ましい実施例で使用される詳細を説
明する。CONTOCCがインタプリタを使用してクラ
イアント側スタブを使用することを伝えられると、CO
NTOCCは依然として呼出すべきクライアントに関わ
る方法を生成するが、その方法は単にスタブインタプリ
タを呼出すだけである。その方法の目的は、たとえば、
クライアントに呼出しのための適正なC++方法宣言を
与えることにより、クライアントをインタプリタの存在
から隔離することである。
ブであるかのように、様々な型の結果を戻すことができ
なければならない。通常のC++コードは戻すと宣言さ
れている型しか戻せない。好ましい実施例では、本発明
が一部を成しているSPRINGオペレーティングシス
テムは、SPARC(登録商標)アーキテクチャベース
システムでランするように設計されている。SPARC
はSPARC Internationalの登録商標
であり、Sun Microsystems,Inc.
が開発したRISCコンピュータに基づく「Scala
ble Performance ARChitect
ure」の頭文字である。SPARCアーキテクチャで
は、様々な異なる型の結果を戻すための規約はそれらの
結果を様々な異なる場所(たとえば、大半の結果に対す
るレジスタ、他の結果に対する事前割当てメモリなど)
に導入することを要求する。(付録D「Softwar
e Considerations」,The SPA
RC Architecture Manual第8
版,Prentice Hall,1992年刊,IS
BNO−13−825001−4参照。)多様復帰を実
行するために、スタブインタプリタは少数のアセンブラ
方法に依存する。それらの方法は様々な種類の復帰結果
をパラメータとして取上げ、それらを従来通りの復帰結
果用の場所に導入する。それらの方法は実際にはインラ
イン化されているが、レジスタウインドウ又はスタック
フレームを割当てないので、インタプリタ自体のレジス
タとスタックフレームをアクセスすることができる。
あろうパラメータと同じパラメータをアクセスしなけれ
ばならない。インタプリタは、クライアント側スタブに
渡されるパラメータの数又は型をあらかじめ知ることは
できない。加えて、インタプリタは呼出し中の方法に関
わる動作記述の中の適切なエントリに対するポインタを
獲得しなければならない。好ましい実施例では、それら
の問題は、共に、クライアントが呼出すC++方法から
スタブインタプリタへの1種のテール呼出しによって解
決される。
は、次のように定義される方法を呼出すであろう。 res_fp face_methods::thod(any_obj*obj,param_fp arg_arg,int arg_input ) raises that,contract_fault { stub_code::processor(&example_stub_descriptors[5]); return *(res_fp*)stub_code::panic(obj,&arg_arg,&arg_input); }
少ないコードを生成しつつ、この方法に対するパラメー
タをコードの第1行を通して生き状態に保持することで
ある。復帰ステートメントには決して到達しない。(す
なわち、全てのことは計画に従って進行する。その行に
達してしまうと、システムはパニックを起こす。)コー
ドの第1行はスタブインタプリタ自体へ制御を移行し、
呼出すべき動作に関わる記述のアドレスをそれに渡す。
と、クライアント側スタブに対する引数(識別オブジェ
クトなどを含む)は、初めのいくつかのイン・レジスタ
内又は通常のSPARC呼出し規約における呼出し側の
フレーム内にある(先に挙げたSPARCアーキテクチ
ャマニュアルの付録Dを参照)。動作に関わる記述のア
ドレスは第1のアウト・レジスタにある。尚、この好ま
しい実施例においては、クライアント側スタブに対する
引数の1つのレジスタウインドウから次のレジスタウイ
ンドウへのコピーを回避している。イン・レジスタから
引数を失わないようにするために、スタブインタプリタ
は新たなレジスタ/メモリフレームを割当てない。その
代わりに、インタプリタの局所変数に対する要求に応じ
てクライアント側スタブのメモリフレームを拡張する。
(レジスタフレームを押さないメモリフレームの拡張
は、C++コンパイラにスタブインタプリタのアセンブ
ラコードを生成させ且つインタプリタ方法に関わるセー
ブ命令を加算命令に変更することによって実行され
る。)アウト・レジスタから動作記述のアドレスを失わ
ないようにするために、スタブインタプリタが実行する
第1の事柄はそのアドレスを局所レジスタ変数にコピー
することである。このように、スタブインタプリタでは
通常のレジスタの引数をもってランしており、1回の飛
越し、1回の加算及び1回のレジスタコピーの中で動作
記述のアドレスを渡している。スタブインタプリタはク
ライアント側スタブのレジスタフレームでランしている
ので、多様復帰値を戻す方法はスタブインタプリタから
直接にクライアントコードに戻す(すなわち、クライア
ント側スタブでパニックを起こすことはない)。
は、記述データベース中のバイトコードからどのような
型であるかを見出すときに、クライアント側スタブに対
する引数をアクセスしなければならない。クライアント
側スタブに対する引数をもってインタプリタが実行する
第1の事柄は、引数をイン・レジスタからクライアント
の(呼出し側)のフレームで引数用として割当てれられ
ているスペースにコピーすることであるので、引数をメ
モリで渡された引数と共に順次アドレス指定することが
できる。インタプリタは様々なC++要素を渡すための
標準規約(たとえば、structs は参照により渡されるな
ど)と、様々なIDLパラメータパスモードに関わる規
約(たとえば、borrowパラメータは参照により渡される
など)とを処理するように設計されている。そのように
して、インタプリタは、バイトコード記述を処理すると
きに、クライアント側スタブに対する引数を適切にアク
セスできるのである。
たる本質的には2つのループである。第1のループは、
何らかの引数のマーシャル化を要求するか否かを知るた
めに、各バイトコードを検査する。次に、識別オブジェ
クトについて指示された動作を呼出し、復帰コードを検
査する。その動作が成功したならば、バイトコード記述
にわたる第2のループは、いずれかの結果がアンマーシ
ャル化を必要とするか否かを判定する。この第2のルー
プが動作のreturn型を記述するバイトコードを検査する
とき、インタプリタからクライアントに戻すために適切
な多様復帰方法を呼出す。動作呼出しが失敗であった場
合には、復帰コードを使用して、適切な例外に対するパ
ラメータをアンマーシャル化し且つその例外を発生させ
る方法へマッピングする。
成に伴なう概念上の問題はない。ところが、いくつかの
理由によって、好ましい実施例ではこれを実行しなかっ
た。
トであっても良いが、典型的にはごく少数のサービスに
対するサーバである。そのため、ドメインはクライアン
ト側スタブを数多く必要とするであろうが、サーバ側ス
タブについては若干のスタブを必要とするだけであろ
う。従って、クライアント側スタブが占めるスペースを
縮小する場合と比べて、サーバ側スタブが占めるスペー
スの縮小のもたらす利点は相対的に少ないであろう。
えるC++コンパイラの規約の知識を余りに多くもつ必
要なく、クライアント側スタブの呼出し環境を理解する
ことは可能であった。これに対し、サーバ側スタブは、
典型的にはC++vtables を介して、サーバ方法のイン
プリメンテーションを呼出さなければならない。vtable
ディスパッチはC++コンパイラのライターの思いつき
の影響のみを受けるので、特定のC++インプリメンテ
ーションに結合することが望ましいとは思わなかった。
ション及びサーバアプリケーションと、スタブ及びネッ
トワークソフトウェアとの関係を示す図。
システムコンポーネントを示す図。
ブジェクトと、サーバアプリケーションオブジェクトと
の関係を示す図。
ト呼出しを示す図。
けるオブジェクト呼出しを示す図。
例を示すフローチャート。
例を示すフローチャート。
例を示すフローチャート。
例を示すフローチャート。
と、従来の技術によるオブジェクトの見方とを対比して
示す図。
を示す図。
14…クライアント側スタブ、16,20…ネットワー
クソフトウェア、18…機械B、22…サーバ側スタ
ブ、24…サーバアプリケーション、30…クライアン
ト側サブコントラクト、32…サーバ側サブコントラク
ト、36…オペレーティングシステム、150…インタ
フェース定義言語、152…クライアント側スタブジェ
ネレータ、154…C++スタブコード、156…デー
タベース、158…クライアント側スタブインタプリ
タ、166…限定スタブコード、168…引数、17
0、172…コンピュータメモリ。
Claims (10)
- 【請求項1】 コンピュータシステム内でクライアント
により呼出された特定のスタブ動作を実行する方法にお
いて,コンピュータメモリの第1の領域から、前記スタ
ブ動作を実行するために要求されるコード中で複数のス
タブ動作に共通するものとして識別される第1の部分を
アクセスする過程と,コンピュータメモリの第2の領域
から、前記スタブ動作を実行するために要求されるコー
ド中で前記特定のスタブ動作に独自のものとして識別さ
れる第2の部分をアクセスする過程とから成り,それに
より、クライアント側スタブに要求されるコンピュータ
メモリスペースの量を減少させる方法。 - 【請求項2】 コンピュータシステム内でクライアント
により呼出された特定のスタブ動作を実行する方法にお
いて,スタブ動作を実行するために生成されるコードを
複数のスタブ動作に共通するコードの第1の部分と、前
記スタブ動作の中の特定の1つの動作に独自のものであ
るコードの第2の部分とに分割し、且つ前記コードの第
2の部分をコンピュータメモリに記憶する過程と,スタ
ブインタプリタを使用して前記コードの第1の部分のコ
ピーを包含し、前記スタブインタプリタは、クライアン
トによりスタブ動作が呼出されるたびに前記コードの第
1の部分を供給する過程と,クライアントにより特定の
スタブ動作が呼出されるたびに、要求に応じて前記スタ
ブインタプリタにより前記コードの第2の部分をアクセ
スする過程とから成る方法。 - 【請求項3】 クライアント側スタブに要求される前記
コンピュータメモリスペースをさらに縮小するために、
前記スタブ動作の前記コードの可変部分の符号化表現を
生成することにより前記コードの第2の部分を圧縮する
追加の過程を含む請求項2記載の方法。 - 【請求項4】 各々がクライアント側スタブを呼出しう
るクライアントアプリケーションを実行できるような複
数の会話形ワークステーションを有するデータ処理シス
テムで使用するために、クライアント側スタブに対する
クライアント動作呼出しを実行する方法において,スタ
ブ動作を実行するために生成されるコードを複数のスタ
ブ動作に共通するコードの第1の部分と、特定のスタブ
動作に独自のものであるコードの第2の部分とに分割す
る過程と,スタブインタプリタを使用して前記コードの
第1の部分のコピーを包含し、前記スタブインタプリタ
は、クライアントによりスタブ動作が呼出されるたびに
前記コードの第1の部分を供給する過程と,クライアン
ト側スタブに要求される前記コンピュータメモリスペー
スをさらに縮小するために、前記コードの第2の部分の
符号化表現を生成することにより前記コードの第2の部
分を圧縮する過程と,クライアントによりスタブ動作が
呼出されるたびに、要求に応じて前記スタブインタプリ
タにより前記コードの第2の部分をアクセスする過程と
から成り,それにより、クライアント側スタブの記憶装
置に要求されるメモリスペースを縮小する方法。 - 【請求項5】 特定のクライアント側スタブ動作を呼出
すことによりクライアント動作を実行する追加の過程
と,前記符号化表現を使用することにより前記クライア
ント動作を実行するために前記スタブインタプリタを呼
出す追加の過程とを含む請求項4記載の方法。 - 【請求項6】 クライアント側スタブ動作を実行するシ
ステムにおいて,特定のクライアント側スタブ動作に独
自のものであるデータの第2の部分を包含するように生
成されるクライアント側スタブ動作のデータベースと,
前記クライアント側スタブ動作のデータベースを受信し
且つ記憶するコンピュータと,前記コンピュータの中に
あり、前記クライアント側スタブ動作のデータベース
と、複数のスタブ動作に共通するデータの第1の部分を
包含しているスタブインタプリタとによってクライアン
ト側スタブ動作に対するクライアント呼出しを実行する
プロセッサとを具備し,それにより、クライアント側ス
タブ動作に関わるデータを記憶するために使用されるコ
ンピュータメモリスペースを縮小するシステム。 - 【請求項7】 前記コンピュータに結合し、前記データ
の第2の部分を前記データの符号化表現に変換して、ク
ライアント側スタブ動作に関わるデータを記憶するため
に使用される前記コンピュータメモリスペースをさらに
縮小するスタブジェネレータをさらに具備する請求項6
記載のシステム。 - 【請求項8】 コンピュータでクライアントにより呼出
される特定のスタブ動作を実行するシステムであって、
各々が複数のスタブ動作に共通するコードの第1の部分
と、前記特定のスタブ動作のそれぞれに独自のものであ
るコードの第2の部分とを含んでいるクライアント側ス
タブについて要求されるコンピュータメモリスペースを
最小限に抑えるシステムにおいて,前記コードの第1の
部分のコピーを包含し、前記特定のスタブ動作がクライ
アントにより呼出されるたびに、前記コードの第1の部
分を供給するスタブインタプリタと;前記特定のスタブ
動作がクライアントにより呼出されるたびに必要に応じ
て前記スタブインタプリタによってアクセスされる前記
コードの第2の部分をコンピュータメモリに記憶するコ
ンピュータとを具備し,それにより、クライアント側ス
タブ用として要求される前記コンピュータメモリスペー
スを縮小するシステム。 - 【請求項9】 前記コンピュータに結合し、前記コード
の第2の部分の符号化表現を生成することにより前記コ
ードの第2の部分を圧縮して、クライアント側スタブ用
として要求される前記コンピュータメモリスペースをさ
らに縮小するスタブジェネレータをさらに具備する請求
項8記載のシステム。 - 【請求項10】 クライアントアプリケーションと、オ
ブジェクトと、オブジェクト型定義と、オブジェクトイ
ンプリメンテーションと、サーバとが存在するオブジェ
クト指向システムで、クライアント動作によりオブジェ
クトに対して呼出される特定の動作を処理するために使
用するためのコンピュータプログラムが記録されている
コンピュータ読取り可能媒体を有するコンピュータプロ
グラム製品において,オブジェクトに対して呼出される
前記特定の動作を実行するために要求され、符号化され
てコンピュータメモリに記憶された前記特定の動作に関
連する特定のクライアント側スタブ方法に対し独自のも
のとして識別されるコードの第2の部分を表わす符号化
データのデータベースと;前記スタブ方法を実行するた
めに要求され、複数の異なるクライアント側スタブ方法
に共通するものとして識別されるコードの第1の部分を
アクセスすると共に、前記クライアント動作によって呼
出される特定のスタブ方法を実行するためにコンピュー
タメモリから前記コードの第2の部分をアクセスし、前
記特定のクライアント動作要求によって呼出されるクラ
イアント側スタブ方法を実行するプログラムコードとを
具備し,それにより、クライアント側スタブ動作を記憶
するために要求されるコンピュータメモリを最小限に抑
えるコンピュータプログラム製品。
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 true JPH0793264A (ja) | 1995-04-07 |
| JP3881704B2 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) |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2010506250A (ja) * | 2006-10-02 | 2010-02-25 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンピュータシステムおよびレジスタウインドウアーキテクチャをサポートするようにコンピュータシステムを適合させる方法 |
Families Citing this family (8)
| 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 |
Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH0546569A (ja) * | 1991-08-08 | 1993-02-26 | Hitachi Ltd | 分散処理システム |
| JPH05181814A (ja) * | 1991-02-25 | 1993-07-23 | Hewlett Packard Co <Hp> | オブジェクト指向コンピューティング・システム |
| JPH06195290A (ja) * | 1992-09-22 | 1994-07-15 | Internatl Business Mach Corp <Ibm> | 遠隔ノードからの処理手順呼出し方法及びシステム |
| JPH06332830A (ja) * | 1993-05-21 | 1994-12-02 | Matsushita Electric Ind Co Ltd | アプリケーション管理装置および遠隔手続呼び出しシス テム |
Family Cites Families (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH03266064A (ja) * | 1990-03-16 | 1991-11-27 | Hitachi 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
Patent Citations (4)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH05181814A (ja) * | 1991-02-25 | 1993-07-23 | Hewlett Packard Co <Hp> | オブジェクト指向コンピューティング・システム |
| JPH0546569A (ja) * | 1991-08-08 | 1993-02-26 | Hitachi Ltd | 分散処理システム |
| JPH06195290A (ja) * | 1992-09-22 | 1994-07-15 | Internatl Business Mach Corp <Ibm> | 遠隔ノードからの処理手順呼出し方法及びシステム |
| JPH06332830A (ja) * | 1993-05-21 | 1994-12-02 | Matsushita Electric Ind Co Ltd | アプリケーション管理装置および遠隔手続呼び出しシス テム |
Non-Patent Citations (1)
| Title |
|---|
| 木村岳史,上野哲: "着々進む基盤整備RPCによる連携を起点にオブジェクト指向へとジャンプ", 日経コンピュータ, vol. 第270号, CSND199800473003, 16 December 1991 (1991-12-16), pages 81 - 93, ISSN: 0000722150 * |
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP2010506250A (ja) * | 2006-10-02 | 2010-02-25 | インターナショナル・ビジネス・マシーンズ・コーポレーション | コンピュータシステムおよびレジスタウインドウアーキテクチャをサポートするようにコンピュータシステムを適合させる方法 |
Also Published As
| Publication number | Publication date |
|---|---|
| DE69426143D1 (de) | 2000-11-23 |
| DE69426143T2 (de) | 2001-06-13 |
| JP3881704B2 (ja) | 2007-02-14 |
| EP0643349A1 (en) | 1995-03-15 |
| EP0643349B1 (en) | 2000-10-18 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5787251A (en) | Method and apparatus for subcontracts in distributed processing systems | |
| USRE43375E1 (en) | System and method for communications in a distributed computing environment | |
| EP0766172B1 (en) | A method and apparatus for allowing generic stubs to marshal and unmarshal data in object reference specific data formats | |
| US6993774B1 (en) | System and method for remote enabling classes without interfaces | |
| US6951021B1 (en) | System and method for server-side communication support in a distributed computing environment | |
| US6931455B1 (en) | System and method for communications between a CORBA object request broker and a non-CORBA object request broker | |
| US6629128B1 (en) | System and method for distributed processing in a computer network | |
| US5566302A (en) | Method for executing operation call from client application using shared memory region and establishing shared memory region when the shared memory region does not exist | |
| US6622175B1 (en) | System and method for communications in a distributed processing environment | |
| US6157961A (en) | Client-side stub interpreter | |
| US6044409A (en) | Framework for marshaling and unmarshaling argument object references | |
| US6032199A (en) | Transport independent invocation and servant interfaces that permit both typecode interpreted and compiled marshaling | |
| JP3546394B2 (ja) | ネットワークを介してリモート・プロシージャ・コール及びレスポンスを転送するための方法及びシステム | |
| US6263485B1 (en) | Method and apparatus for describing an interface definition language-defined interface, operation, and data type | |
| US20010047385A1 (en) | Passthru to shared service funtionality | |
| JPH11353199A (ja) | 遠隔プロシ―ジャ・コ―ル・システムおよび方法 | |
| Wollrath et al. | Java-centric distributed computing | |
| 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 | |
| US7533388B1 (en) | Method and apparatus for dynamic Stubs and Ties in RMI-IIOP | |
| US6308225B1 (en) | Method for performing distributed object calls | |
| JPH0793264A (ja) | クライアント側スタブインタプリタ | |
| US6219835B1 (en) | Multi-language DCE remote procedure call | |
| US20020178141A1 (en) | Method and apparatus for remote inter-language method calling | |
| 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 | Request for written amendment filed |
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 | Request for written amendment filed |
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 |