JPH08115223A - コンピュータで実施する方法及びデータ処理システム - Google Patents
コンピュータで実施する方法及びデータ処理システムInfo
- Publication number
- JPH08115223A JPH08115223A JP7212988A JP21298895A JPH08115223A JP H08115223 A JPH08115223 A JP H08115223A JP 7212988 A JP7212988 A JP 7212988A JP 21298895 A JP21298895 A JP 21298895A JP H08115223 A JPH08115223 A JP H08115223A
- Authority
- JP
- Japan
- Prior art keywords
- subcontract
- shared memory
- call
- server
- client
- 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.)
- Withdrawn
Links
- 238000000034 method Methods 0.000 title claims abstract description 173
- 238000012545 processing Methods 0.000 title claims description 25
- 239000000872 buffer Substances 0.000 claims description 58
- 230000009471 action Effects 0.000 claims description 39
- 230000008569 process Effects 0.000 claims description 32
- JLQUFIHWVLZVTJ-UHFFFAOYSA-N carbosulfan Chemical compound CCCCN(CCCC)SN(C)C(=O)OC1=CC=CC2=C1OC(C)(C)C2 JLQUFIHWVLZVTJ-UHFFFAOYSA-N 0.000 claims description 19
- 230000006399 behavior Effects 0.000 claims description 5
- 230000003542 behavioural effect Effects 0.000 claims 2
- 230000007246 mechanism Effects 0.000 abstract description 48
- 238000004891 communication Methods 0.000 description 44
- 241000289674 Vombatidae Species 0.000 description 38
- 239000011800 void material Substances 0.000 description 19
- 230000006870 function Effects 0.000 description 9
- 230000004044 response Effects 0.000 description 9
- 230000010076 replication Effects 0.000 description 8
- 230000003068 static effect Effects 0.000 description 6
- 239000013598 vector Substances 0.000 description 6
- 238000013507 mapping Methods 0.000 description 5
- 238000003619 Marshal aromatic alkylation reaction Methods 0.000 description 4
- 230000005540 biological transmission Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 238000011084 recovery Methods 0.000 description 4
- 230000008859 change Effects 0.000 description 3
- 238000012546 transfer Methods 0.000 description 3
- 241000156978 Erebia Species 0.000 description 2
- VYPSYNLAJGMNEJ-UHFFFAOYSA-N Silicium dioxide Chemical compound O=[Si]=O VYPSYNLAJGMNEJ-UHFFFAOYSA-N 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 230000033001 locomotion Effects 0.000 description 2
- 238000000926 separation method Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 101100234002 Drosophila melanogaster Shal gene Proteins 0.000 description 1
- 241000254158 Lampyridae Species 0.000 description 1
- 235000015076 Shorea robusta Nutrition 0.000 description 1
- 244000166071 Shorea robusta Species 0.000 description 1
- 230000001427 coherent effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 150000002500 ions Chemical class 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 239000000126 substance Substances 0.000 description 1
- 230000033772 system development Effects 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
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
- G06F9/548—Object oriented; Remote method invocation [RMI]
-
- 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
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)
- Multi Processors (AREA)
Abstract
(57)【要約】
【課題】 本発明は、クライアント・アプリケーション
によってオブジェクトを呼び出す機構と、クライアント
・アプリケーションとその他の処理系の間で引数を渡す
ための機構を、クライアント・アプリケーションにも、
オペレーティング・システムにも、これらの機構がどの
ように動作するかの詳細が分からないように提供する優
れた簡単な方法を提供することである。 【解決手段】 クライアントとサーバが、カーネルの介
入も、交換される引数のタイプまたは複雑さに関する制
限もなしに、ある種の環境で引数および結果を渡すため
にメモリ領域を共用できるようにする共用メモリ・サブ
コントラクトに関する。
によってオブジェクトを呼び出す機構と、クライアント
・アプリケーションとその他の処理系の間で引数を渡す
ための機構を、クライアント・アプリケーションにも、
オペレーティング・システムにも、これらの機構がどの
ように動作するかの詳細が分からないように提供する優
れた簡単な方法を提供することである。 【解決手段】 クライアントとサーバが、カーネルの介
入も、交換される引数のタイプまたは複雑さに関する制
限もなしに、ある種の環境で引数および結果を渡すため
にメモリ領域を共用できるようにする共用メモリ・サブ
コントラクトに関する。
Description
【0001】関連出願 本出願は、本出願の1人の発明者によって1992年1
2月21日に出願され、米国特許出願番号第07/99
5863号を有する、「A METHOD AND A
PPARATUS FOR SUBCONTRACTS
IN DISTRIBUTED PROCESSIN
G SYSTEMS」と題する関連米国特許出願の一部
継続である。
2月21日に出願され、米国特許出願番号第07/99
5863号を有する、「A METHOD AND A
PPARATUS FOR SUBCONTRACTS
IN DISTRIBUTED PROCESSIN
G SYSTEMS」と題する関連米国特許出願の一部
継続である。
【0002】
【発明の属する技術分野】本発明は、分散計算システ
ム、クライアント・サーバ計算、およびオブジェクト指
向プログラミングの分野に関する。詳細には、本発明
は、オブジェクトを使用するクライアント間通信を処理
するために、オペレーティング・システム・カーネルと
は独立のプログラム機構を提供する方法および装置であ
る。この一部継続出願は具体的には、共用メモリを効率
的にかつ安全に使用できるよう共用メモリ領域を使用す
ることによって定義域間で引数を渡す特定のタイプの機
構に関する。
ム、クライアント・サーバ計算、およびオブジェクト指
向プログラミングの分野に関する。詳細には、本発明
は、オブジェクトを使用するクライアント間通信を処理
するために、オペレーティング・システム・カーネルと
は独立のプログラム機構を提供する方法および装置であ
る。この一部継続出願は具体的には、共用メモリを効率
的にかつ安全に使用できるよう共用メモリ領域を使用す
ることによって定義域間で引数を渡す特定のタイプの機
構に関する。
【0003】
【従来の技術】オペレーティング・システムの開発およ
び保守の主要な問題は、オペレーティング・システムを
処理系の詳細にダウンロードせずにクライアントおよび
プログラマに最大の柔軟性を与えられるように新しいイ
ンタフェースおよび処理系技法を導入できるようにする
ことである。さらに、この問題は、マイクロ・カーネル
・アーキテクチャを有するオブジェクト指向オペレーテ
ィング・システムを開発する際にさらに著しくなる。マ
イクロ・カーネルによって、クライアントは通常、たと
えばファイル・システムなど複雑なサブシステムをクラ
イアント・レベルで実施することができる。それにもか
かわらず、クライアント間通信およびコンピュータ間通
信など基本的なシステム・プロセスは非常に複雑なの
で、クライアントおよびオブジェクト・インプリメンタ
はこのようなプロセスに関与すべきではない。すなわ
ち、このような基本的に「システム」タイプのプロセス
は、標準モジュールによってより効率的に実行される
が、基本オペレーティング・システムがこのようなプロ
セスによって制限されることを必要としないように処理
すべきである。
び保守の主要な問題は、オペレーティング・システムを
処理系の詳細にダウンロードせずにクライアントおよび
プログラマに最大の柔軟性を与えられるように新しいイ
ンタフェースおよび処理系技法を導入できるようにする
ことである。さらに、この問題は、マイクロ・カーネル
・アーキテクチャを有するオブジェクト指向オペレーテ
ィング・システムを開発する際にさらに著しくなる。マ
イクロ・カーネルによって、クライアントは通常、たと
えばファイル・システムなど複雑なサブシステムをクラ
イアント・レベルで実施することができる。それにもか
かわらず、クライアント間通信およびコンピュータ間通
信など基本的なシステム・プロセスは非常に複雑なの
で、クライアントおよびオブジェクト・インプリメンタ
はこのようなプロセスに関与すべきではない。すなわ
ち、このような基本的に「システム」タイプのプロセス
は、標準モジュールによってより効率的に実行される
が、基本オペレーティング・システムがこのようなプロ
セスによって制限されることを必要としないように処理
すべきである。
【0004】本開示は、オブジェクト・メタファを使用
してシステムの異なる構成要素間のインタフェースを定
義するシステムに関するこの基本的な問題の解決策につ
いて説明するものである。呼出しのパラメータとして他
のオブジェクトを送信するリモート・コンピュータ間の
オブジェクト呼出しの通信を処理できるようにする優れ
た解決策について説明する。
してシステムの異なる構成要素間のインタフェースを定
義するシステムに関するこの基本的な問題の解決策につ
いて説明するものである。呼出しのパラメータとして他
のオブジェクトを送信するリモート・コンピュータ間の
オブジェクト呼出しの通信を処理できるようにする優れ
た解決策について説明する。
【0005】オブジェクト指向システムで、オブジェク
トとは、データと、データを処理するために呼び出すこ
とができる動作とを備える構成要素である。動作は、オ
ブジェクトに呼出しを送信することによってオブジェク
ト上で呼び出される。各オブジェクトはオブジェクト・
タイプを有する。オブジェクト・タイプは、そのタイプ
のオブジェクトに対して実行できる動作を定義する。オ
ブジェクト動作は、オブジェクト自体とは独立に実施さ
れる。また、1つのオブジェクト・タイプは、他のオブ
ジェクト・タイプに関して定義され実施されるオブジェ
クト動作を継承することができる。オブジェクト指向デ
ザイン・プログラミング技法の詳細に関しては、Ber
trand Meyer著「Object−orien
tedSoftware Construction」
(Prentice−Hall、1988年)を参照さ
れたい。
トとは、データと、データを処理するために呼び出すこ
とができる動作とを備える構成要素である。動作は、オ
ブジェクトに呼出しを送信することによってオブジェク
ト上で呼び出される。各オブジェクトはオブジェクト・
タイプを有する。オブジェクト・タイプは、そのタイプ
のオブジェクトに対して実行できる動作を定義する。オ
ブジェクト動作は、オブジェクト自体とは独立に実施さ
れる。また、1つのオブジェクト・タイプは、他のオブ
ジェクト・タイプに関して定義され実施されるオブジェ
クト動作を継承することができる。オブジェクト指向デ
ザイン・プログラミング技法の詳細に関しては、Ber
trand Meyer著「Object−orien
tedSoftware Construction」
(Prentice−Hall、1988年)を参照さ
れたい。
【0006】クライアント・サーバ計算では、通常、コ
ンピュータ自体を接続するネットワークを介して相互に
通信できる1組のコンピュータがある。これらのコンピ
ュータのうちのいくつかは、他のコンピュータへのサー
ビスまたは機能の提供者として働く。そのようなサービ
スまたは機能の提供者を「サーバ」と呼び、そのような
サービスまたは機能の消費者を「クライアント」と呼
ぶ。クライアント・サーバ・モデルは、同じコンピュー
タ上で動作する異なるプログラムが、何らかの保護機構
を介して相互に通信し、機能の提供者および消費者とし
て働くケースとしても一般化されている。
ンピュータ自体を接続するネットワークを介して相互に
通信できる1組のコンピュータがある。これらのコンピ
ュータのうちのいくつかは、他のコンピュータへのサー
ビスまたは機能の提供者として働く。そのようなサービ
スまたは機能の提供者を「サーバ」と呼び、そのような
サービスまたは機能の消費者を「クライアント」と呼
ぶ。クライアント・サーバ・モデルは、同じコンピュー
タ上で動作する異なるプログラムが、何らかの保護機構
を介して相互に通信し、機能の提供者および消費者とし
て働くケースとしても一般化されている。
【0007】クライアント・サーバ・モデルに基づくオ
ブジェクト指向分散システムでは、オブジェクト指向イ
ンタフェースをクライアントに提供するサーバが存在す
る。このようなサーバは、データから成るオブジェクト
と、関連するソフトウェアをサポートする。クライアン
トは、このようなオブジェクトにアクセスしてその呼出
しを実行することができる。この呼出しは、クライアン
トからサーバへ送信される。サーバでは、この呼出し
が、オブジェクトに関連するソフトウェアを介して実行
される。次いで、この呼出しの結果がクライアントに送
り返される。
ブジェクト指向分散システムでは、オブジェクト指向イ
ンタフェースをクライアントに提供するサーバが存在す
る。このようなサーバは、データから成るオブジェクト
と、関連するソフトウェアをサポートする。クライアン
トは、このようなオブジェクトにアクセスしてその呼出
しを実行することができる。この呼出しは、クライアン
トからサーバへ送信される。サーバでは、この呼出し
が、オブジェクトに関連するソフトウェアを介して実行
される。次いで、この呼出しの結果がクライアントに送
り返される。
【0008】オブジェクト・メタファは、オブジェクト
のインタフェースとその処理系を分離し、分散システム
では異なる計算機上に存在することができる単一のイン
タフェースの複数の処理系を可能にするので、有用な技
法である。しかし、既存のオブジェクト指向システムで
は、基本システムは、オブジェクト「呼出し」が何を意
味するか、「オブジェクトを引数として渡す」ことが何
を意味するかなど、基本的なオブジェクト特性を定義す
る。
のインタフェースとその処理系を分離し、分散システム
では異なる計算機上に存在することができる単一のイン
タフェースの複数の処理系を可能にするので、有用な技
法である。しかし、既存のオブジェクト指向システムで
は、基本システムは、オブジェクト「呼出し」が何を意
味するか、「オブジェクトを引数として渡す」ことが何
を意味するかなど、基本的なオブジェクト特性を定義す
る。
【0009】残念なことに、基本特性が何であるかを基
本システムに定義させることによって、基本システム
が、ユーザがオブジェクトに有させたいすべての基本特
性をサポートすることが必要になる。たとえば、信頼性
を増大させるためにオブジェクトの複製をサポートした
いと仮定する。複製されたオブジェクトと対話するため
の余分の作業をクライアント・アプリケーション・コー
ドに実行させるのは望ましくない。したがって、システ
ムによって複製をサポートすることが好ましい。しか
し、複製を実施するには多数の方法がある。問題は、こ
れらの方法のうちのいくつかを基本システムに組み込
み、他の方法を拒否することである。アプリケーション
開発者が、複製したオブジェクトを自分のアプリケーシ
ョン内で管理するより効率的な方法を発見した場合、ア
プリケーション開発者が複製したオブジェクトを基本機
構を変更する必要なく管理できることが望ましい。さら
に、基本システムを使用して、複製、パシスタンス(pe
rsistence)、クラッシュ回復、キャッシングなど特定の
特性用の何らかの標準基本機構をサポートすることがで
きるが、このことには2つの問題があるように思われ
る。第1に、高価な特性を必要としないオブジェクトの
場合でも、簡単なオブジェクト呼出しが高価なものにな
る。第2に、第三者が、その特定のニーズに特有の新し
い特性を追加することが難しくなる。
本システムに定義させることによって、基本システム
が、ユーザがオブジェクトに有させたいすべての基本特
性をサポートすることが必要になる。たとえば、信頼性
を増大させるためにオブジェクトの複製をサポートした
いと仮定する。複製されたオブジェクトと対話するため
の余分の作業をクライアント・アプリケーション・コー
ドに実行させるのは望ましくない。したがって、システ
ムによって複製をサポートすることが好ましい。しか
し、複製を実施するには多数の方法がある。問題は、こ
れらの方法のうちのいくつかを基本システムに組み込
み、他の方法を拒否することである。アプリケーション
開発者が、複製したオブジェクトを自分のアプリケーシ
ョン内で管理するより効率的な方法を発見した場合、ア
プリケーション開発者が複製したオブジェクトを基本機
構を変更する必要なく管理できることが望ましい。さら
に、基本システムを使用して、複製、パシスタンス(pe
rsistence)、クラッシュ回復、キャッシングなど特定の
特性用の何らかの標準基本機構をサポートすることがで
きるが、このことには2つの問題があるように思われ
る。第1に、高価な特性を必要としないオブジェクトの
場合でも、簡単なオブジェクト呼出しが高価なものにな
る。第2に、第三者が、その特定のニーズに特有の新し
い特性を追加することが難しくなる。
【0010】したがって、オブジェクト・インタフェー
スおよびオブジェクト処理系から分離された何らかの方
式で実施される、分散システムで最も重要なオブジェク
ト呼出しおよび引数引渡しの基本機構を制御する方法が
必要である。
スおよびオブジェクト処理系から分離された何らかの方
式で実施される、分散システムで最も重要なオブジェク
ト呼出しおよび引数引渡しの基本機構を制御する方法が
必要である。
【0011】リモート動作用の言語レベル・ベニヤ(ve
neer)を与える技法(たとえば、「リモート・プロシー
ジャ・コール」)が何年も前から使用されている。通
常、このような技法は、リモート・インタフェースがあ
る種の言語で定義された形をとる。その場合、このイン
タフェースから一対のスタブが生成される。クライアン
ト・スタブは、ある計算機で動作し、リモート・インタ
フェースから導かれる言語レベル・インタフェースを提
供する。サーバ・スタブは、他の何らかの計算機で動作
し、リモート・インタフェースから導かれる言語レベル
・インタフェースを呼び出す。次に、図1を参照する。
ある計算機10上のクライアント・アプリケーション1
2は、リモート動作を実行するために、クライアント・
スタブ14を呼び出す。クライアント・スタブ14は、
呼出しに関連する引数を、ネットワーク・バッファにマ
ーシャルして、リモート・計算機18上のサーバ・スタ
ブ22に送信する。サーバ・スタブは、ネットワーク・
バッファから引数をマーシャル解除して、サーバ・アプ
リケーション24を呼び出す。同様に、サーバ・アプリ
ケーション24が応答を返すときは、結果がサーバ・ス
タブ22によってマーシャルされ、クライアント・スタ
ブ14に返される。クライアント・スタブ14は、結果
をマーシャル解除してクライアント・アプリケーション
12に返す。引数および結果の送信とリモート・オブジ
ェクト呼出しの機構全体がスタブで実行される。クライ
アント・アプリケーションとサーバ・アプリケーション
は共に、従来型の言語レベル・インタフェースを使用す
るに過ぎない。
neer)を与える技法(たとえば、「リモート・プロシー
ジャ・コール」)が何年も前から使用されている。通
常、このような技法は、リモート・インタフェースがあ
る種の言語で定義された形をとる。その場合、このイン
タフェースから一対のスタブが生成される。クライアン
ト・スタブは、ある計算機で動作し、リモート・インタ
フェースから導かれる言語レベル・インタフェースを提
供する。サーバ・スタブは、他の何らかの計算機で動作
し、リモート・インタフェースから導かれる言語レベル
・インタフェースを呼び出す。次に、図1を参照する。
ある計算機10上のクライアント・アプリケーション1
2は、リモート動作を実行するために、クライアント・
スタブ14を呼び出す。クライアント・スタブ14は、
呼出しに関連する引数を、ネットワーク・バッファにマ
ーシャルして、リモート・計算機18上のサーバ・スタ
ブ22に送信する。サーバ・スタブは、ネットワーク・
バッファから引数をマーシャル解除して、サーバ・アプ
リケーション24を呼び出す。同様に、サーバ・アプリ
ケーション24が応答を返すときは、結果がサーバ・ス
タブ22によってマーシャルされ、クライアント・スタ
ブ14に返される。クライアント・スタブ14は、結果
をマーシャル解除してクライアント・アプリケーション
12に返す。引数および結果の送信とリモート・オブジ
ェクト呼出しの機構全体がスタブで実行される。クライ
アント・アプリケーションとサーバ・アプリケーション
は共に、従来型の言語レベル・インタフェースを使用す
るに過ぎない。
【0012】引数または結果が整数や文字列など簡単な
値であるとき、マーシャルおよびマーシャル解除の作業
はかなり簡単である。スタブは通常、引数のリテラル値
をネットワーク・バッファに入れるに過ぎない。しか
し、抽象データ・タイプまたは抽象オブジェクトをサポ
ートする言語では、マーシャルははるかに複雑なものと
なる。1つの解決策は、スタブがオブジェクトの内部デ
ータ構造をマーシャルし、次いでこのデータを新しいオ
ブジェクトとしてマーシャル解除することである。この
ことには、いくつかの重大な欠点がある。第1に、これ
はオブジェクト指向プログラミングの「抽象化」原則の
違反である。というのは、スタブはオブジェクトの内部
構造に関して知ることができないからである。第2に、
オブジェクトのサーバ処理系とクライアント処理系はそ
のデータ構造用に同じ内部レイアウトを使用する必要が
ある。第3に、実際にはオブジェクトのすべての内部状
態を他の計算機へ送信する必要があるわけではないの
で、大量の不要なデータをマーシャルすることが必要に
なることがある。代替解決策は、オブジェクトをマーシ
ャルするときに、オブジェクトの内部状態を送信しない
ことである。その代わりに、オブジェクト用の識別トー
クンを生成し、このトークンを送信する。たとえば、E
denシステムでは、オブジェクトに名前が割り当てら
れ、オブジェクトがマーシャルされるとき、その実際の
表現ではなくその名前がマーシャルされる。その後、リ
モート計算機は、このオブジェクト上で動作したいと
き、名前を使用して、オブジェクトの最初の位置を見つ
けて呼出しをその位置へ送信しなければならない。この
機構は、ファイルやデータベースなど複雑なオブジェク
トに適しているが、デカルト座標対を表すオブジェクト
など簡単な抽象化には不適当であることが多い。後者の
場合、オブジェクトの実際の状態をマーシャルした方が
よい。最後に、ある種のオブジェクト指向プログラミン
グ・システムは、オブジェクト処理系が、その引数をど
のようにマーシャルしマーシャル解除するかを制御でき
るようにする手段を提供する。たとえば、Argusシ
ステムでは、オブジェクト処理系はその内部表現と特定
の具体的な外部表現のマップを行う機能を提供すること
ができる。Argusスタブは、特定の内部表現ではな
く外部表現が送信されるように、オブジェクトをマーシ
ャルしマーシャル解除する際に適当なマッピング関数を
呼び出す。これらの異なる解決策はすべて、すべてのオ
ブジェクト用の単一の標準マーシャル方式を課し、ある
いは個別のオブジェクト・インプリメンタがマーシャル
の詳細に責任を負うことを必要とするものである。
値であるとき、マーシャルおよびマーシャル解除の作業
はかなり簡単である。スタブは通常、引数のリテラル値
をネットワーク・バッファに入れるに過ぎない。しか
し、抽象データ・タイプまたは抽象オブジェクトをサポ
ートする言語では、マーシャルははるかに複雑なものと
なる。1つの解決策は、スタブがオブジェクトの内部デ
ータ構造をマーシャルし、次いでこのデータを新しいオ
ブジェクトとしてマーシャル解除することである。この
ことには、いくつかの重大な欠点がある。第1に、これ
はオブジェクト指向プログラミングの「抽象化」原則の
違反である。というのは、スタブはオブジェクトの内部
構造に関して知ることができないからである。第2に、
オブジェクトのサーバ処理系とクライアント処理系はそ
のデータ構造用に同じ内部レイアウトを使用する必要が
ある。第3に、実際にはオブジェクトのすべての内部状
態を他の計算機へ送信する必要があるわけではないの
で、大量の不要なデータをマーシャルすることが必要に
なることがある。代替解決策は、オブジェクトをマーシ
ャルするときに、オブジェクトの内部状態を送信しない
ことである。その代わりに、オブジェクト用の識別トー
クンを生成し、このトークンを送信する。たとえば、E
denシステムでは、オブジェクトに名前が割り当てら
れ、オブジェクトがマーシャルされるとき、その実際の
表現ではなくその名前がマーシャルされる。その後、リ
モート計算機は、このオブジェクト上で動作したいと
き、名前を使用して、オブジェクトの最初の位置を見つ
けて呼出しをその位置へ送信しなければならない。この
機構は、ファイルやデータベースなど複雑なオブジェク
トに適しているが、デカルト座標対を表すオブジェクト
など簡単な抽象化には不適当であることが多い。後者の
場合、オブジェクトの実際の状態をマーシャルした方が
よい。最後に、ある種のオブジェクト指向プログラミン
グ・システムは、オブジェクト処理系が、その引数をど
のようにマーシャルしマーシャル解除するかを制御でき
るようにする手段を提供する。たとえば、Argusシ
ステムでは、オブジェクト処理系はその内部表現と特定
の具体的な外部表現のマップを行う機能を提供すること
ができる。Argusスタブは、特定の内部表現ではな
く外部表現が送信されるように、オブジェクトをマーシ
ャルしマーシャル解除する際に適当なマッピング関数を
呼び出す。これらの異なる解決策はすべて、すべてのオ
ブジェクト用の単一の標準マーシャル方式を課し、ある
いは個別のオブジェクト・インプリメンタがマーシャル
の詳細に責任を負うことを必要とするものである。
【0013】オブジェクト指向言語内では、反射技法に
よって、オブジェクト・インプリメンタは、いくつかの
基本オブジェクト機構を制御することができる。[「R
eflective Facilities in S
malltalk−80」(Brian Foote
& Ralph E.Johnson 1989、OO
PSLA ’89 Proceedings、327な
いし335ページ)を参照されたい]。極めて簡単に言
うと、反射システムとは、それ自体の態様を表す構造を
組み込んだシステムであり、反射計算とは、システム自
体に関するシステムの計算である。
よって、オブジェクト・インプリメンタは、いくつかの
基本オブジェクト機構を制御することができる。[「R
eflective Facilities in S
malltalk−80」(Brian Foote
& Ralph E.Johnson 1989、OO
PSLA ’89 Proceedings、327な
いし335ページ)を参照されたい]。極めて簡単に言
うと、反射システムとは、それ自体の態様を表す構造を
組み込んだシステムであり、反射計算とは、システム自
体に関するシステムの計算である。
【0014】たとえば、3−KRS言語では、オブジェ
クトはそれ自体に関連するメタ・オブジェクトを有する
ことができる。メタ・オブジェクトは、オブジェクトが
どのように情報を継承するか、オブジェクトをどのよう
にプリントするか、メッセージの引渡し(すなわちオブ
ジェクト呼出し)をどのように実施するかなどを指定す
る方法を提供する。しかし、3−KRSは引数引渡しに
対する制御は提供しない。
クトはそれ自体に関連するメタ・オブジェクトを有する
ことができる。メタ・オブジェクトは、オブジェクトが
どのように情報を継承するか、オブジェクトをどのよう
にプリントするか、メッセージの引渡し(すなわちオブ
ジェクト呼出し)をどのように実施するかなどを指定す
る方法を提供する。しかし、3−KRSは引数引渡しに
対する制御は提供しない。
【0015】Smalltalk80で反射オブジェク
ト呼出しを行うことによって、呼出し時に自動的にロッ
クされるオブジェクトと、最初に読み取られたときしか
値の計算を行わないオブジェクトを実施することが可能
になった。
ト呼出しを行うことによって、呼出し時に自動的にロッ
クされるオブジェクトと、最初に読み取られたときしか
値の計算を行わないオブジェクトを実施することが可能
になった。
【0016】しかし、反射は単一のアドレス空間内で使
用されたが、具体的に分散計算の問題にそれを適用しよ
うとする試みはなされなかった。
用されたが、具体的に分散計算の問題にそれを適用しよ
うとする試みはなされなかった。
【0017】
【発明が解決しようとする課題】したがって、本発明
は、サブコントラクトと呼ばれる論理モジュールを備
え、オブジェクト・インプリメンタが容易に、既存のサ
ブコントラクトを選択して使用できるようになり、アプ
リケーション・プログラマが、特定のオブジェクトに使
用されている特定のサブコントラクトに気付かないよう
に、分散システムで最も重要なオブジェクト呼出しおよ
び引数引渡しの基本機構を制御するように設計された装
置および方法を提供するものである。
は、サブコントラクトと呼ばれる論理モジュールを備
え、オブジェクト・インプリメンタが容易に、既存のサ
ブコントラクトを選択して使用できるようになり、アプ
リケーション・プログラマが、特定のオブジェクトに使
用されている特定のサブコントラクトに気付かないよう
に、分散システムで最も重要なオブジェクト呼出しおよ
び引数引渡しの基本機構を制御するように設計された装
置および方法を提供するものである。
【0018】具体的には、本出願は、共用メモリ領域に
よって安全にかつ効率的に引数を渡す共用メモリ・サブ
コントラクト機構を提供するものである。この共用メモ
リ・サブコントラクト機構は、クライアントとサーバが
同じ計算機上、または同じマルチプロセッサ装置上、あ
るいは場合によってはいくつかのローカル・エリア・ネ
ットワーク(LAN)中にある場合など、クライアント
およびサーバが動作している特定のハードウェア構成で
許容されるときに特に適切である、共用メモリ領域によ
って安全にかつ効率的に引数を渡す共用メモリ・サブコ
ントラクト機構を提供するものである。従来技術は、D
igital Equipment Corporat
ion SRC Fireflyマルチプロセッサ・ワ
ークステーションのTAOSオペレーティング・システ
ムに一体化された「ライトウェイト・リモート・プロシ
ージャ・コール(「LRPC」)通信機構について説明
している「Lightweight Remote P
rocedure Call」(Brian N.Be
rshad、Thomas E.Anderson、E
dward D.Lazowska、およびHenry
M.Levy著、Department of Co
mputer Science,University
of Washington、ワシントン州シアト
ル、Association for Computi
ng Machinery発行、1989年(文書#A
CM089791−338−3/89/0012/01
02 102ないし113ページ)と題する論文を参照
されたい)。しかし、このLRPC機構は、特にカーネ
ル制御機構に関するものであり、小さく簡単な引数しか
渡さず、カーネルがクライアントとサーバを結合させ、
その後カーネルを使用して、共用メモリ領域(A−スタ
ックと呼ばれる)を割り振り、オブジェクト呼出し時に
A−スタックの有効性を検査する必要がある、同一計算
機通信のケースに対処するものであった。本発明は、共
用メモリ・プロセスでカーネルを使用せず、カーネル・
メモリを必要とせず、少数のドア識別子およびチャネル
識別子しか必要としない。渡される引数は、「小さく簡
単な引数だけ」に制限されず、共用メモリ・プロセスを
変更または修正する場合も、あるいは異なる共用メモリ
・プロセスを追加する場合も、カーネルを修正する必要
はない。
よって安全にかつ効率的に引数を渡す共用メモリ・サブ
コントラクト機構を提供するものである。この共用メモ
リ・サブコントラクト機構は、クライアントとサーバが
同じ計算機上、または同じマルチプロセッサ装置上、あ
るいは場合によってはいくつかのローカル・エリア・ネ
ットワーク(LAN)中にある場合など、クライアント
およびサーバが動作している特定のハードウェア構成で
許容されるときに特に適切である、共用メモリ領域によ
って安全にかつ効率的に引数を渡す共用メモリ・サブコ
ントラクト機構を提供するものである。従来技術は、D
igital Equipment Corporat
ion SRC Fireflyマルチプロセッサ・ワ
ークステーションのTAOSオペレーティング・システ
ムに一体化された「ライトウェイト・リモート・プロシ
ージャ・コール(「LRPC」)通信機構について説明
している「Lightweight Remote P
rocedure Call」(Brian N.Be
rshad、Thomas E.Anderson、E
dward D.Lazowska、およびHenry
M.Levy著、Department of Co
mputer Science,University
of Washington、ワシントン州シアト
ル、Association for Computi
ng Machinery発行、1989年(文書#A
CM089791−338−3/89/0012/01
02 102ないし113ページ)と題する論文を参照
されたい)。しかし、このLRPC機構は、特にカーネ
ル制御機構に関するものであり、小さく簡単な引数しか
渡さず、カーネルがクライアントとサーバを結合させ、
その後カーネルを使用して、共用メモリ領域(A−スタ
ックと呼ばれる)を割り振り、オブジェクト呼出し時に
A−スタックの有効性を検査する必要がある、同一計算
機通信のケースに対処するものであった。本発明は、共
用メモリ・プロセスでカーネルを使用せず、カーネル・
メモリを必要とせず、少数のドア識別子およびチャネル
識別子しか必要としない。渡される引数は、「小さく簡
単な引数だけ」に制限されず、共用メモリ・プロセスを
変更または修正する場合も、あるいは異なる共用メモリ
・プロセスを追加する場合も、カーネルを修正する必要
はない。
【0019】
【課題を解決するための手段】本発明は、クライアント
・アプリケーションによってオブジェクトを呼び出すた
めの機構と、クライアント・アプリケーションとオブジ
ェクト処理系の間で引数を渡すための機構を、クライア
ント・アプリケーションにも、オペレーティング・シス
テムにも、これらの機構がどのように動作するかの詳細
が分からないように提供する優れた簡単な方法を提供す
るものである。さらに、これらの機構は、クライアント
・アプリケーションがあるコンピュータ上にあり、オブ
ジェクト処理系が別のコンピュータ上にある分散コンピ
ュータ環境で同様に容易にかつ効率的に機能する。
・アプリケーションによってオブジェクトを呼び出すた
めの機構と、クライアント・アプリケーションとオブジ
ェクト処理系の間で引数を渡すための機構を、クライア
ント・アプリケーションにも、オペレーティング・シス
テムにも、これらの機構がどのように動作するかの詳細
が分からないように提供する優れた簡単な方法を提供す
るものである。さらに、これらの機構は、クライアント
・アプリケーションがあるコンピュータ上にあり、オブ
ジェクト処理系が別のコンピュータ上にある分散コンピ
ュータ環境で同様に容易にかつ効率的に機能する。
【0020】本発明は、メソッド・テーブルと、サブコ
ントラクト機構と、サブコントラクトのローカル・プラ
イベート状態を表すデータ構造とを含む「スプリング・
オブジェクト」と呼ばれる新しいタイプのオブジェクト
を含む。
ントラクト機構と、サブコントラクトのローカル・プラ
イベート状態を表すデータ構造とを含む「スプリング・
オブジェクト」と呼ばれる新しいタイプのオブジェクト
を含む。
【0021】サブコントラクト機構は、本発明の中心で
あり、各サブコントラクトは、クライアント側部分と関
連するサーバ側部分とを含む。各オブジェクト・タイプ
は、関連するサブコントラクトを有する。サブコントラ
クトのクライアント側部分は、新しいスプリング・オブ
ジェクトを生成し、スプリング・オブジェクトを削除
し、クライアントに関連するオブジェクトに関する情報
を通信バッファにマーシャルし、クライアントに関連す
るオブジェクトを表す通信バッファ中のデータをマーシ
ャル解除し、クライアントに関連するサーバ側サブコン
トラクトへ通信バッファを送信する能力を有する。通信
バッファの送信には、ある位置から他の位置へのオブジ
ェクトの送信、またはある位置から他の位置へのオブジ
ェクトのコピーの送信が含まれる。サブコントラクト機
構のサーバ側部分は、スプリング・オブジェクトを作成
し、着呼および関連する通信バッファを処理するための
サポートを提供し、オブジェクトを取り消すためのサポ
ートを提供する能力を含む。
あり、各サブコントラクトは、クライアント側部分と関
連するサーバ側部分とを含む。各オブジェクト・タイプ
は、関連するサブコントラクトを有する。サブコントラ
クトのクライアント側部分は、新しいスプリング・オブ
ジェクトを生成し、スプリング・オブジェクトを削除
し、クライアントに関連するオブジェクトに関する情報
を通信バッファにマーシャルし、クライアントに関連す
るオブジェクトを表す通信バッファ中のデータをマーシ
ャル解除し、クライアントに関連するサーバ側サブコン
トラクトへ通信バッファを送信する能力を有する。通信
バッファの送信には、ある位置から他の位置へのオブジ
ェクトの送信、またはある位置から他の位置へのオブジ
ェクトのコピーの送信が含まれる。サブコントラクト機
構のサーバ側部分は、スプリング・オブジェクトを作成
し、着呼および関連する通信バッファを処理するための
サポートを提供し、オブジェクトを取り消すためのサポ
ートを提供する能力を含む。
【0022】本発明は、クライアント・アプリケーショ
ンがオブジェクト処理系とは異なるコンピュータ上にあ
る分散計算システムで、サブコントラクトを使用して、
引数自体がオブジェクトでもよい引数の引渡しを含めオ
ブジェクト呼出しを処理する方法を含む。
ンがオブジェクト処理系とは異なるコンピュータ上にあ
る分散計算システムで、サブコントラクトを使用して、
引数自体がオブジェクトでもよい引数の引渡しを含めオ
ブジェクト呼出しを処理する方法を含む。
【0023】提供される1つのサブコントラクト機構
は、本明細書で定義したすべてのサブコントラクトの場
合と同様に、オペレーティング・システム・カーネルの
外側で実行され、クライアントとサーバの間で共用すべ
きメモリ空間を見つけるための複数のデータ構造を有
し、アドレスされた共用メモリが呼び出し中のサーバに
よって許可されていることを確実に識別するインデック
スをこれらのデータ構造のうちの1つに有する共用メモ
リ・サブコントラクトである。
は、本明細書で定義したすべてのサブコントラクトの場
合と同様に、オペレーティング・システム・カーネルの
外側で実行され、クライアントとサーバの間で共用すべ
きメモリ空間を見つけるための複数のデータ構造を有
し、アドレスされた共用メモリが呼び出し中のサーバに
よって許可されていることを確実に識別するインデック
スをこれらのデータ構造のうちの1つに有する共用メモ
リ・サブコントラクトである。
【0024】本出願では、サーバが最初、共用メモリ領
域をセットアップし、その後、共用メモリ領域を使用し
たいクライアントを認めるかどうかと、ユーザ定義域で
実行され、オペレーティング・システム・カーネルでは
実行されないのはどのメソッドかを試験して判定するこ
とができるように、非カーネル・プロセスによってクラ
イアントとサーバの間の共用メモリ領域を使用する方法
も請求する。共用メモリ領域を以前には存在しなかった
場所でセットアップするプロセスも請求する。
域をセットアップし、その後、共用メモリ領域を使用し
たいクライアントを認めるかどうかと、ユーザ定義域で
実行され、オペレーティング・システム・カーネルでは
実行されないのはどのメソッドかを試験して判定するこ
とができるように、非カーネル・プロセスによってクラ
イアントとサーバの間の共用メモリ領域を使用する方法
も請求する。共用メモリ領域を以前には存在しなかった
場所でセットアップするプロセスも請求する。
【0025】以下の詳細な説明は、コンピュータまたは
コンピュータ・ネットワーク上で実行されるプログラム
・プロシージャで表して提示することができる。このよ
うなプロシージャによる記述および表現は、当業者が自
分の研究の内容を他の当業者に最も効率的に伝えるため
に使用する手段である。
コンピュータ・ネットワーク上で実行されるプログラム
・プロシージャで表して提示することができる。このよ
うなプロシージャによる記述および表現は、当業者が自
分の研究の内容を他の当業者に最も効率的に伝えるため
に使用する手段である。
【0026】プロシージャとは、本明細書では、および
一般に、所望の結果に至るステップの首尾一貫したシー
ケンスである。このようなステップは、物理量の物理的
操作を必要とするものである。必ずしもそうであるとは
言えないが、この量は通常、記憶し、転送し、組み合わ
せ、その他の方法で操作することができる電気信号また
は磁気信号の形をとる。主として、一般的に使用される
ために、これらの信号をビット、値、要素、記号、文
字、項、数などと呼んだ方が好都合なことがある。しか
し、これらのおよび類似の語がすべて、適当な物理量に
関連付けるべきものであり、かつこのような量に適用さ
れる好都合なラベルに過ぎないことに留意されたい。
一般に、所望の結果に至るステップの首尾一貫したシー
ケンスである。このようなステップは、物理量の物理的
操作を必要とするものである。必ずしもそうであるとは
言えないが、この量は通常、記憶し、転送し、組み合わ
せ、その他の方法で操作することができる電気信号また
は磁気信号の形をとる。主として、一般的に使用される
ために、これらの信号をビット、値、要素、記号、文
字、項、数などと呼んだ方が好都合なことがある。しか
し、これらのおよび類似の語がすべて、適当な物理量に
関連付けるべきものであり、かつこのような量に適用さ
れる好都合なラベルに過ぎないことに留意されたい。
【0027】さらに、実行される操作は、加算や比較な
ど、人間のオペレータによって実行される知的動作に一
般に関連する語で呼ばれることが多い。本発明の一部を
形成する、本明細書で説明する動作では、人間のオペレ
ータのそのような機能は、必要ではなく、あるいは大部
分のケースでは望ましくもない。すなわち、本明細書で
説明する動作は計算機動作である。本発明の動作を実行
するのに有用な計算機には、汎用ディジタル・コンピュ
ータまたは類似の装置が含まれる。
ど、人間のオペレータによって実行される知的動作に一
般に関連する語で呼ばれることが多い。本発明の一部を
形成する、本明細書で説明する動作では、人間のオペレ
ータのそのような機能は、必要ではなく、あるいは大部
分のケースでは望ましくもない。すなわち、本明細書で
説明する動作は計算機動作である。本発明の動作を実行
するのに有用な計算機には、汎用ディジタル・コンピュ
ータまたは類似の装置が含まれる。
【0028】本発明は、このような動作を実行する装置
にも関する。この装置は、必要な目的のために特定的に
構成することも、あるいはコンピュータに記憶されたコ
ンピュータ・プログラムによって選択的に活動化され、
あるいは再構成される汎用コンピュータを備えることも
できる。本明細書で提示するプロシージャは、基本的
に、特定のコンピュータまたはその他の装置に関係する
ものではない。本明細書中の教示に従って作成されたプ
ログラムと共に様々な汎用計算機を使用することがで
き、あるいは必要なメソッド・ステップを実行するため
により専門的な装置を構成した方が好都合であることも
ある。このような様々な計算機に必要な構造は、与えら
れた説明から明らかになろう。
にも関する。この装置は、必要な目的のために特定的に
構成することも、あるいはコンピュータに記憶されたコ
ンピュータ・プログラムによって選択的に活動化され、
あるいは再構成される汎用コンピュータを備えることも
できる。本明細書で提示するプロシージャは、基本的
に、特定のコンピュータまたはその他の装置に関係する
ものではない。本明細書中の教示に従って作成されたプ
ログラムと共に様々な汎用計算機を使用することがで
き、あるいは必要なメソッド・ステップを実行するため
により専門的な装置を構成した方が好都合であることも
ある。このような様々な計算機に必要な構造は、与えら
れた説明から明らかになろう。
【0029】
【発明の実施の形態】以下の開示は、オブジェクト指向
システムの設計者が、後で変更するのが困難なメソッド
にオブジェクト指向システムをロックしないように、引
数がオブジェクトでよい分散システムでオブジェクト呼
出し方式および引数引渡し方式を実施しようとする際に
出会う問題の解決策について説明するものである。本発
明は、メソッド・テーブルと、サブコントラクト機構
と、サブコントラクトのローカル・プライベート状態を
表すデータ構造とを含む「スプリング・オブジェクト」
と呼ばれる新しいタイプのオブジェクトを含む。各オブ
ジェクトに関連するサブコントラクトに関する方法およ
び装置を開示する。各サブコントラクトは、クライアン
ト側部分と関連するサーバ側部分とを含む。各オブジェ
クト・タイプは、関連するサブコントラクトを有する。
サブコントラクトのクライアント側部分は、新しいスプ
リング・オブジェクトを生成し、スプリング・オブジェ
クトを削除し、クライアントに関連するオブジェクトに
関する情報を通信バッファにマーシャルし、クライアン
トに関連するオブジェクトを表す通信バッファ中のデー
タをマーシャル解除し、クライアントに関連するサーバ
側サブコントラクトへ通信バッファを送信する能力を有
する。通信バッファの送信には、ある位置から他の位置
へのオブジェクトの送信、またはある位置から他の位置
へのオブジェクトのコピーの送信が含まれる。サブコン
トラクト機構のサーバ側部分は、スプリング・オブジェ
クトを作成し、着呼および関連する通信バッファを処理
するためのサポートを提供し、オブジェクトを取り消す
ためのサポートを提供する能力を含む。
システムの設計者が、後で変更するのが困難なメソッド
にオブジェクト指向システムをロックしないように、引
数がオブジェクトでよい分散システムでオブジェクト呼
出し方式および引数引渡し方式を実施しようとする際に
出会う問題の解決策について説明するものである。本発
明は、メソッド・テーブルと、サブコントラクト機構
と、サブコントラクトのローカル・プライベート状態を
表すデータ構造とを含む「スプリング・オブジェクト」
と呼ばれる新しいタイプのオブジェクトを含む。各オブ
ジェクトに関連するサブコントラクトに関する方法およ
び装置を開示する。各サブコントラクトは、クライアン
ト側部分と関連するサーバ側部分とを含む。各オブジェ
クト・タイプは、関連するサブコントラクトを有する。
サブコントラクトのクライアント側部分は、新しいスプ
リング・オブジェクトを生成し、スプリング・オブジェ
クトを削除し、クライアントに関連するオブジェクトに
関する情報を通信バッファにマーシャルし、クライアン
トに関連するオブジェクトを表す通信バッファ中のデー
タをマーシャル解除し、クライアントに関連するサーバ
側サブコントラクトへ通信バッファを送信する能力を有
する。通信バッファの送信には、ある位置から他の位置
へのオブジェクトの送信、またはある位置から他の位置
へのオブジェクトのコピーの送信が含まれる。サブコン
トラクト機構のサーバ側部分は、スプリング・オブジェ
クトを作成し、着呼および関連する通信バッファを処理
するためのサポートを提供し、オブジェクトを取り消す
ためのサポートを提供する能力を含む。
【0030】以下の説明では、説明の都合上、本発明を
完全に理解してもらうために特定のデータおよび関係に
ついて述べる。本明細書で説明する好ましい実施の態様
は、サン・マイクロシステムズ社(Sun Micro
systems,Inc.、Sun Microsys
temsはサン・マイクロシステムズ社の登録商標であ
る)のSPRINGオブジェクト指向オペレーティング
・システム(SPRING Object−Orien
ted Operating System)の一部と
して実施される。しかし、当業者には、本発明が、特定
の詳細なしで実施でき、様々なコンピュータ・システム
や、様々な構成またはモデルの密結合プロセッサあるい
は様々な構成の粗結合マルチプロセッサ・システムで実
施できることが明らかであろう。
完全に理解してもらうために特定のデータおよび関係に
ついて述べる。本明細書で説明する好ましい実施の態様
は、サン・マイクロシステムズ社(Sun Micro
systems,Inc.、Sun Microsys
temsはサン・マイクロシステムズ社の登録商標であ
る)のSPRINGオブジェクト指向オペレーティング
・システム(SPRING Object−Orien
ted Operating System)の一部と
して実施される。しかし、当業者には、本発明が、特定
の詳細なしで実施でき、様々なコンピュータ・システム
や、様々な構成またはモデルの密結合プロセッサあるい
は様々な構成の粗結合マルチプロセッサ・システムで実
施できることが明らかであろう。
【0031】SPRINGオブジェクトとは、状態を含
む抽象化であり、その状態を操作する1組のメソッドを
与える。オブジェクトおよびそのメソッドの記述は、イ
ンタフェース定義言語で指定されたインタフェースであ
る。インタフェースは、オブジェクトのインプリメンタ
(サーバ)とクライアントの間の強力なタイプのコント
ラクトである。
む抽象化であり、その状態を操作する1組のメソッドを
与える。オブジェクトおよびそのメソッドの記述は、イ
ンタフェース定義言語で指定されたインタフェースであ
る。インタフェースは、オブジェクトのインプリメンタ
(サーバ)とクライアントの間の強力なタイプのコント
ラクトである。
【0032】SPRING定義域とは、スレッドの集合
を有するアドレス空間である。所与の定義域は、ある種
のオブジェクトのサーバおよび他のオブジェクトのクラ
イアントとして働くことができる。インプリメンタとク
ライアントは、同じ定義域に存在することも、あるいは
異なる定義域に存在することもできる。
を有するアドレス空間である。所与の定義域は、ある種
のオブジェクトのサーバおよび他のオブジェクトのクラ
イアントとして働くことができる。インプリメンタとク
ライアントは、同じ定義域に存在することも、あるいは
異なる定義域に存在することもできる。
【0033】SPRINGは、オブジェクト指向のもの
なので、インタフェース継承の概念をサポートする。ス
プリングは、単一インタフェース継承の概念と複数イン
タフェース継承の概念を共にサポートする。タイプ「f
oo」のオブジェクトを受け入れるインタフェースは、
「foo」のサブクラスのインスタンスも受け入れる。
たとえば、address_spaceオブジェクト
は、memory_objectを取り出してアドレス
空間にマップするメソッドを有する。同じメソッドは、
fileオブジェクトおよびframe_buffer
オブジェクトがmemory_objectインタフェ
ースから継承する限りそれらのオブジェクトも受け入れ
る。
なので、インタフェース継承の概念をサポートする。ス
プリングは、単一インタフェース継承の概念と複数イン
タフェース継承の概念を共にサポートする。タイプ「f
oo」のオブジェクトを受け入れるインタフェースは、
「foo」のサブクラスのインスタンスも受け入れる。
たとえば、address_spaceオブジェクト
は、memory_objectを取り出してアドレス
空間にマップするメソッドを有する。同じメソッドは、
fileオブジェクトおよびframe_buffer
オブジェクトがmemory_objectインタフェ
ースから継承する限りそれらのオブジェクトも受け入れ
る。
【0034】SPRINGカーネルは、基本定義域間呼
出しおよびスレッドと、低レベル計算機依存処理をサポ
ートすると共に、メモリ・マッピングおよび物理メモリ
管理のための基本仮想メモリ・サポートを提供する。S
PRINGカーネルは、他のSPRINGカーネルのこ
とは知らず、すべてのリモート呼出しはネットワーク・
プロキシ・サーバによって処理される。仮想メモリ・シ
ステムは、記憶およびネットワーク・コヒーレンシを処
理するために外部ページャにも依存する。
出しおよびスレッドと、低レベル計算機依存処理をサポ
ートすると共に、メモリ・マッピングおよび物理メモリ
管理のための基本仮想メモリ・サポートを提供する。S
PRINGカーネルは、他のSPRINGカーネルのこ
とは知らず、すべてのリモート呼出しはネットワーク・
プロキシ・サーバによって処理される。仮想メモリ・シ
ステムは、記憶およびネットワーク・コヒーレンシを処
理するために外部ページャにも依存する。
【0035】図2を参照すると、典型的なSPRING
ノードは、カーネル50だけでなくいくつかのサーバも
実行する。このようなサーバには、定義域マネージャ5
2、仮想メモリ・マネージャ(「VMM」)54、名前
サーバ56、CFSファイル・サーバ58、ローカル・
ファイル・サーバ60、動的にリンクされたライブラリ
を管理しキャッシュする責任を負うリンカ定義域62、
リモート呼出しを処理するネットワーク・プロキシ6
4、基本端末処理を行い、フレーム・バッファおよびマ
ウス・サポートを提供するttyサーバ66が含まれ
る。存在してよい他の主要なSPRINGシステム構成
要素は、UNIXプロセス・サーバ68、サブコントラ
クト・レジストリ69、任意の数のSPRINGアプリ
ケーション70である。
ノードは、カーネル50だけでなくいくつかのサーバも
実行する。このようなサーバには、定義域マネージャ5
2、仮想メモリ・マネージャ(「VMM」)54、名前
サーバ56、CFSファイル・サーバ58、ローカル・
ファイル・サーバ60、動的にリンクされたライブラリ
を管理しキャッシュする責任を負うリンカ定義域62、
リモート呼出しを処理するネットワーク・プロキシ6
4、基本端末処理を行い、フレーム・バッファおよびマ
ウス・サポートを提供するttyサーバ66が含まれ
る。存在してよい他の主要なSPRINGシステム構成
要素は、UNIXプロセス・サーバ68、サブコントラ
クト・レジストリ69、任意の数のSPRINGアプリ
ケーション70である。
【0036】SPRINGとは、実験的分散環境であ
る。SPRINGは現在、分散オペレーティング・シス
テムと、分散アプリケーション用のサポート・フレーム
ワークとを含む。SPRINGは、既存のオペレーティ
ング・システムのいくつかの問題、具体的には時間の経
過と共にシステムを進化させ拡張する問題の解決策を開
発するものである。
る。SPRINGは現在、分散オペレーティング・シス
テムと、分散アプリケーション用のサポート・フレーム
ワークとを含む。SPRINGは、既存のオペレーティ
ング・システムのいくつかの問題、具体的には時間の経
過と共にシステムを進化させ拡張する問題の解決策を開
発するものである。
【0037】SPRINGは、単に処理系を提供するの
でなくインタフェースを提供することに焦点を当ててい
る。SPRINGでは、所与のインタフェースの著しく
異なる処理系を単一のシステム内に共存させることがで
きる。オブジェクト・メタファを使用して、インタフェ
ースと処理系のこの分離を表すと好都合であることが分
かっている。
でなくインタフェースを提供することに焦点を当ててい
る。SPRINGでは、所与のインタフェースの著しく
異なる処理系を単一のシステム内に共存させることがで
きる。オブジェクト・メタファを使用して、インタフェ
ースと処理系のこの分離を表すと好都合であることが分
かっている。
【0038】SPRINGは、アプリケーション作成者
が基本機構を変更せずに新しい基本的な特性をシステム
に追加することを容易にすることを目的としている。た
とえば、現行のシステムは、アトミック・トランザクシ
ョンをサポートしていない。このような新しい特性をシ
ステムに徐々に追加することは可能なはずである。
が基本機構を変更せずに新しい基本的な特性をシステム
に追加することを容易にすることを目的としている。た
とえば、現行のシステムは、アトミック・トランザクシ
ョンをサポートしていない。このような新しい特性をシ
ステムに徐々に追加することは可能なはずである。
【0039】インタフェース定義言語 SPRINGの基本原則は、すべての主要なインタフェ
ースが標準インタフェース定義言語で定義されることで
ある。この言語は、オブジェクト指向であり、複数継承
のサポートを含む。この言語は、インタフェースの特性
のみに関与し、処理系の情報は提供しない。
ースが標準インタフェース定義言語で定義されることで
ある。この言語は、オブジェクト指向であり、複数継承
のサポートを含む。この言語は、インタフェースの特性
のみに関与し、処理系の情報は提供しない。
【0040】インタフェース定義言語から言語固有スタ
ブを生成することが可能である。このスタブは、SPR
INGインタフェースとの言語固有マッピングを行う。
たとえば、主要な処理系言語のC++では、スプリング
・オブジェクトはC++オブジェクトによって表され
る。スタブ・オブジェクト上のメソッドは、呼び出され
ると、現アドレス空間内でローカル呼出しを実行し、あ
るいは異なる計算機上にある他のアドレス空間へ呼出し
を転送する。
ブを生成することが可能である。このスタブは、SPR
INGインタフェースとの言語固有マッピングを行う。
たとえば、主要な処理系言語のC++では、スプリング
・オブジェクトはC++オブジェクトによって表され
る。スタブ・オブジェクト上のメソッドは、呼び出され
ると、現アドレス空間内でローカル呼出しを実行し、あ
るいは異なる計算機上にある他のアドレス空間へ呼出し
を転送する。
【0041】SPRINGは、インタフェースの処理系
からの分離を極めて重視する。クライアントは、それが
ローカル・オブジェクトとして認識するものを処理する
ことに制限され、システムは、このうようなオブジェク
トがどのように実施されるかに関して制限を課さない。
たとえば、オブジェクトの基本状態は、クライアントと
同じアドレス空間にあることも、他のアドレス空間にあ
ることも、クライアントとサーバの間で共用されるメモ
リにあることも、これらの状態のうちのいくつかの状態
の間で動的に移行することもある。
からの分離を極めて重視する。クライアントは、それが
ローカル・オブジェクトとして認識するものを処理する
ことに制限され、システムは、このうようなオブジェク
トがどのように実施されるかに関して制限を課さない。
たとえば、オブジェクトの基本状態は、クライアントと
同じアドレス空間にあることも、他のアドレス空間にあ
ることも、クライアントとサーバの間で共用されるメモ
リにあることも、これらの状態のうちのいくつかの状態
の間で動的に移行することもある。
【0042】スプリング・オブジェクト・モデル SPRINGは、他の分散オブジェクト指向システムと
はわずかに異なる方法でオブジェクトを見る。サブコン
トラクトの詳細を論じる前にこのことを明確にしておく
必要がある。
はわずかに異なる方法でオブジェクトを見る。サブコン
トラクトの詳細を論じる前にこのことを明確にしておく
必要がある。
【0043】大部分の分散システムは、オブジェクトが
サーバ計算機に存在し、クライアント計算機が、サーバ
にあるオブジェクトを指すオブジェクト・ハンドルを有
する、モデルを提供する(図10a参照)。したがっ
て、クライアントは、オブジェクトではなくオブジェク
ト・ハンドルを渡す。
サーバ計算機に存在し、クライアント計算機が、サーバ
にあるオブジェクトを指すオブジェクト・ハンドルを有
する、モデルを提供する(図10a参照)。したがっ
て、クライアントは、オブジェクトではなくオブジェク
ト・ハンドルを渡す。
【0044】SPRINGは、クライアントがオブジェ
クト・ハンドルではなく直接オブジェクトを処理するモ
デルを提供する(図10b参照)。このようなオブジェ
クトのうちのいくつかは、それらに関連するすべての状
態をあるリモート位置に維持し、そのため、それらのロ
ーカル状態はこのリモート位置へのハンドルから成るに
過ぎない。オブジェクトは一度に1つの場所にしか存在
できず、したがって、オブジェクトを誰かに送信する場
合は、オブジェクト自体を有することを終了する。しか
し、オブジェクトは送信する前にコピーすることがで
き、これは、2つの異なるオブジェクトが同じリモート
状態を指すように実施することができる。
クト・ハンドルではなく直接オブジェクトを処理するモ
デルを提供する(図10b参照)。このようなオブジェ
クトのうちのいくつかは、それらに関連するすべての状
態をあるリモート位置に維持し、そのため、それらのロ
ーカル状態はこのリモート位置へのハンドルから成るに
過ぎない。オブジェクトは一度に1つの場所にしか存在
できず、したがって、オブジェクトを誰かに送信する場
合は、オブジェクト自体を有することを終了する。しか
し、オブジェクトは送信する前にコピーすることがで
き、これは、2つの異なるオブジェクトが同じリモート
状態を指すように実施することができる。
【0045】したがって、Edenなどのシステムで
は、いくつかのクライアントが、あるリモート・オブジ
ェクトを参照するオブジェクト・ハンドルを有するが、
SPRINGでは、いくつかのクライアントが、同じリ
モート状態を参照するオブジェクトを有する。
は、いくつかのクライアントが、あるリモート・オブジ
ェクトを参照するオブジェクト・ハンドルを有するが、
SPRINGでは、いくつかのクライアントが、同じリ
モート状態を参照するオブジェクトを有する。
【0046】大部分のサーバ・ベースのオブジェクトで
は、この違いは主として1つの用語である。しかし、S
PRINGは、サーバ・ベースではなく、あるいはオブ
ジェクトの状態がクライアントとサーバの間で分割され
るオブジェクトもサポートする。このような場合、クラ
イアントを、単にポインタを処理するものではなく、真
のオブジェクトを処理するものとみなした方がずっと好
都合である。
は、この違いは主として1つの用語である。しかし、S
PRINGは、サーバ・ベースではなく、あるいはオブ
ジェクトの状態がクライアントとサーバの間で分割され
るオブジェクトもサポートする。このような場合、クラ
イアントを、単にポインタを処理するものではなく、真
のオブジェクトを処理するものとみなした方がずっと好
都合である。
【0047】現在の所、SPRINGオペレーティング
・システムは、基本オブジェクト指向プロセス間通信お
よびメモリ管理を行う最小カーネルに基づくものであ
る。名前付け、ページング、ファイル・システムなどの
機能はすべて、基本カーネル上のユーザ・モード・サー
ビスとして提供される。システムは基本的に分散型であ
り、主要な機能のネットワーク性能を高めるためにいく
つかのキャッシング技法が使用される。システムは、m
ake、vi、csh、Xウィンドウ・システムなど標
準ユーティリティをサポートするのに十分なUNIXエ
ミュレーションもサポートする。
・システムは、基本オブジェクト指向プロセス間通信お
よびメモリ管理を行う最小カーネルに基づくものであ
る。名前付け、ページング、ファイル・システムなどの
機能はすべて、基本カーネル上のユーザ・モード・サー
ビスとして提供される。システムは基本的に分散型であ
り、主要な機能のネットワーク性能を高めるためにいく
つかのキャッシング技法が使用される。システムは、m
ake、vi、csh、Xウィンドウ・システムなど標
準ユーティリティをサポートするのに十分なUNIXエ
ミュレーションもサポートする。
【0048】SPRINGの目標は、高度の多様性をサ
ポートすることである。個別のサブシステムが、一般規
則および規定を無視できるサブシステム自体の作業実施
方法を開発できることが重要であると考えられる。
ポートすることである。個別のサブシステムが、一般規
則および規定を無視できるサブシステム自体の作業実施
方法を開発できることが重要であると考えられる。
【0049】サブコントラクト機構 より近代的なシステムでは、アプリケーション・ソフト
ウェアが直接ネットワーク・ソフトウェアと対話するこ
とはない。その代わり、アプリケーション・ソフトウェ
アは、「スタブ」(図1中の14)と対話する。ネット
ワークを介してサポートされる異なる各インタフェース
ごとに異なるスタブがある。スタブ・コードは、アプリ
ケーション・レベル・ソフトウェアから見える特定言語
レベル・インタフェースと、ネットワーク・ソフトウェ
アによって提供される低レベル通信インタフェースとの
間の変換を行う責任を負う。たとえば、スタブは、リモ
ート呼出しの引数を取り出し、ネットワーク・ソフトウ
ェアがネットワークを介して送信するのに適したメッセ
ージに入れることに責任を負う。
ウェアが直接ネットワーク・ソフトウェアと対話するこ
とはない。その代わり、アプリケーション・ソフトウェ
アは、「スタブ」(図1中の14)と対話する。ネット
ワークを介してサポートされる異なる各インタフェース
ごとに異なるスタブがある。スタブ・コードは、アプリ
ケーション・レベル・ソフトウェアから見える特定言語
レベル・インタフェースと、ネットワーク・ソフトウェ
アによって提供される低レベル通信インタフェースとの
間の変換を行う責任を負う。たとえば、スタブは、リモ
ート呼出しの引数を取り出し、ネットワーク・ソフトウ
ェアがネットワークを介して送信するのに適したメッセ
ージに入れることに責任を負う。
【0050】次に図4を参照すると、本発明の環境で
は、計算機10上のクライアント・アプリケーション1
2が適当なクライアント側スタブ14へ呼出しを発行
し、スタブ14が「サブコントラクト」30のクライア
ント側部分を呼び出す。サブコントラクトは、ネットワ
ーク・ソフトウェア16と対話し、ネットワーク・ソフ
トウェア16は、一般に他の計算機18にある、ソフト
ウェア16と対のネットワーク・ソフトウェア20と通
信する。このサーバ側ネットワーク・ソフトウェア20
は、サブコントラクト32のサーバ側部分へ着信メッセ
ージを転送し、サブコントラクト32はサーバ・アプリ
ケーション24へそのデータを転送する。図のように、
サブコントラクトは、スタブとネットワーク・ソフトウ
ェアの間に位置する。スタブは、サブコントラクトを使
用して、リモート呼出しを実行し、次いで同様に、ネッ
トワーク・ソフトウェアを使用して、実際の呼出しを実
行する。異なるサブコントラクトは、標準通信ソフトウ
ェア上で異なる種類のリモート通信プロトコル(複製
用、キャッシング用など)を実施する。
は、計算機10上のクライアント・アプリケーション1
2が適当なクライアント側スタブ14へ呼出しを発行
し、スタブ14が「サブコントラクト」30のクライア
ント側部分を呼び出す。サブコントラクトは、ネットワ
ーク・ソフトウェア16と対話し、ネットワーク・ソフ
トウェア16は、一般に他の計算機18にある、ソフト
ウェア16と対のネットワーク・ソフトウェア20と通
信する。このサーバ側ネットワーク・ソフトウェア20
は、サブコントラクト32のサーバ側部分へ着信メッセ
ージを転送し、サブコントラクト32はサーバ・アプリ
ケーション24へそのデータを転送する。図のように、
サブコントラクトは、スタブとネットワーク・ソフトウ
ェアの間に位置する。スタブは、サブコントラクトを使
用して、リモート呼出しを実行し、次いで同様に、ネッ
トワーク・ソフトウェアを使用して、実際の呼出しを実
行する。異なるサブコントラクトは、標準通信ソフトウ
ェア上で異なる種類のリモート通信プロトコル(複製
用、キャッシング用など)を実施する。
【0051】単一のコンピュータ内で、異なるアプリケ
ーションがサブコントラクトを使用して通信することも
できる。次に図5を参照すると、クライアント・アプリ
ケーション12は、アプリケーション空間38にあり、
適当なクライアント側スタブ14上で呼出しを発行す
る。クライアント側スタブ14は適当なサブコントラク
ト30を呼び出す。サブコントラクト30は、その通信
をオペレーティング・システム36へ転送し、オペレー
ティング・システム36はサーバ側サブコントラクト3
2へ通信を中継する。サーバ側サブコントラクト32は
そのサーバ側スタブ22にデータを与え、サーバ側スタ
ブ22はサーバ・アプリケーション24にデータを渡
す。この場合、オペレーティング・システム36によっ
て提供されるプロセス間通信プリミティブが、ネットワ
ーキング・ソフトウェアによって提供される計算機間通
信機構(図4中の16および20)に取って代わってい
る。
ーションがサブコントラクトを使用して通信することも
できる。次に図5を参照すると、クライアント・アプリ
ケーション12は、アプリケーション空間38にあり、
適当なクライアント側スタブ14上で呼出しを発行す
る。クライアント側スタブ14は適当なサブコントラク
ト30を呼び出す。サブコントラクト30は、その通信
をオペレーティング・システム36へ転送し、オペレー
ティング・システム36はサーバ側サブコントラクト3
2へ通信を中継する。サーバ側サブコントラクト32は
そのサーバ側スタブ22にデータを与え、サーバ側スタ
ブ22はサーバ・アプリケーション24にデータを渡
す。この場合、オペレーティング・システム36によっ
て提供されるプロセス間通信プリミティブが、ネットワ
ーキング・ソフトウェアによって提供される計算機間通
信機構(図4中の16および20)に取って代わってい
る。
【0052】単一のアドレス空間で動作する単一のアプ
リケーション内でも、アプリケーションの異なる構成要
素間でサブコントラクトを使用して通信することができ
る。
リケーション内でも、アプリケーションの異なる構成要
素間でサブコントラクトを使用して通信することができ
る。
【0053】次に図3を参照し、オブジェクト指向の観
点から検討すると、クライアント・アプリケーション1
は「スタブ・オブジェクト」2を介して動作する。この
ようなスタブ・オブジェクト2はそれぞれ、サブコント
ラクト・オブジェクト3を含む。サブコントラクト・オ
ブジェクト3の内部状態4(サブコントラクト・オブジ
ェクトの「表現」と呼ばれる)は、同じアドレス空間に
存在することも、同じ計算機上の他のアドレス空間に存
在することも、あるいは全体的に他の計算機上に存在す
ることもできる実際の基本状態5を指す何らかの形のポ
インタ6を含む。基本状態は通常、サーバ・アプリケー
ションのアドレス空間中のオブジェクト5として表され
る。
点から検討すると、クライアント・アプリケーション1
は「スタブ・オブジェクト」2を介して動作する。この
ようなスタブ・オブジェクト2はそれぞれ、サブコント
ラクト・オブジェクト3を含む。サブコントラクト・オ
ブジェクト3の内部状態4(サブコントラクト・オブジ
ェクトの「表現」と呼ばれる)は、同じアドレス空間に
存在することも、同じ計算機上の他のアドレス空間に存
在することも、あるいは全体的に他の計算機上に存在す
ることもできる実際の基本状態5を指す何らかの形のポ
インタ6を含む。基本状態は通常、サーバ・アプリケー
ションのアドレス空間中のオブジェクト5として表され
る。
【0054】サブコントラクトの適用 スプリング・オブジェクトは、オブジェクトのタイプ定
義によって暗黙指定される各動作ごとの項目を含むメソ
ッド・テーブルと、次節で説明する基本サブコントラク
ト動作を指定するサブコントラクト記述と、オブジェク
トの表現と呼ばれるあるローカル・プライベート状態の
3つから成るものとしてクライアントによって認識され
る。
義によって暗黙指定される各動作ごとの項目を含むメソ
ッド・テーブルと、次節で説明する基本サブコントラク
ト動作を指定するサブコントラクト記述と、オブジェク
トの表現と呼ばれるあるローカル・プライベート状態の
3つから成るものとしてクライアントによって認識され
る。
【0055】クライアントは、C++オブジェクト上で
メソッドを呼び出すことによってオブジェクトと相互作
用する。このオブジェクト用のコードは実際は自動的に
生成されており、そのコードは、オブジェクトの正規メ
ソッド・テーブルまたはオブジェクトのサブコントラク
ト動作ベクトル上での呼出しへメソッド呼出しを変換す
る。このようなメソッドがどのようにその効果を達成す
るかは、クライアントからは見えない。
メソッドを呼び出すことによってオブジェクトと相互作
用する。このオブジェクト用のコードは実際は自動的に
生成されており、そのコードは、オブジェクトの正規メ
ソッド・テーブルまたはオブジェクトのサブコントラク
ト動作ベクトル上での呼出しへメソッド呼出しを変換す
る。このようなメソッドがどのようにその効果を達成す
るかは、クライアントからは見えない。
【0056】オブジェクトがリモート・サーバによって
実施される場合、典型的な構成は、サブコントラクト
が、リモート・サーバと通信する機構を実施するもので
あり、メソッド・テーブルは、バッファに引数をマーシ
ャルし、リモート呼出しを実行するサブコントラクトを
呼出し、次いで応答バッファから結果をマーシャル解除
することのみを実行するスタブ・メソッドを指すポイン
タから成る。SPRINGは、インタフェース定義言語
から適当なスタブを生成する自動スタブ・ジェネレータ
を提供する。
実施される場合、典型的な構成は、サブコントラクト
が、リモート・サーバと通信する機構を実施するもので
あり、メソッド・テーブルは、バッファに引数をマーシ
ャルし、リモート呼出しを実行するサブコントラクトを
呼出し、次いで応答バッファから結果をマーシャル解除
することのみを実行するスタブ・メソッドを指すポイン
タから成る。SPRINGは、インタフェース定義言語
から適当なスタブを生成する自動スタブ・ジェネレータ
を提供する。
【0057】リモート・サーバには通常、着呼に関連す
るサブコントラクト作業を実行する何らかのサブコント
ラクト・コードと、各動作ごとの引数をマーシャル解除
しサーバ・アプリケーションを呼び出す何らかのサーバ
側スタブ・コードがある(このサーバ・スタブ・コード
も自動的に生成される)。
るサブコントラクト作業を実行する何らかのサブコント
ラクト・コードと、各動作ごとの引数をマーシャル解除
しサーバ・アプリケーションを呼び出す何らかのサーバ
側スタブ・コードがある(このサーバ・スタブ・コード
も自動的に生成される)。
【0058】オブジェクトが全体的にローカルに実施さ
れる場合、スタブ・メソッドを不要にして、メソッド・
テーブルに直接入れることができる処理系メソッドを提
供することができる。SPRINGは、この場合にメソ
ッド・テーブルを生成するためのサポートを提供する。
れる場合、スタブ・メソッドを不要にして、メソッド・
テーブルに直接入れることができる処理系メソッドを提
供することができる。SPRINGは、この場合にメソ
ッド・テーブルを生成するためのサポートを提供する。
【0059】基本サブコントラクト機構 クライアント側サブコントラクト動作は以下のとおりで
ある。 ・copy ・consume ・unmarshal ・marshal ・marshal_copy ・invoke ・invoke_preamble ・narrow ・object_type_id ・object_manager_id ・is_null
ある。 ・copy ・consume ・unmarshal ・marshal ・marshal_copy ・invoke ・invoke_preamble ・narrow ・object_type_id ・object_manager_id ・is_null
【0060】サブコントラクト動作を例示するために、
singletonと呼ばれるサブコントラクトを一例
として使用するものとする。このサブコントラクトは、
ドアと呼ばれるSPRINGカーネル通信機構上に構成
される。ドアは、通信エンドポイントであり、スレッド
は、通信エンドポイントに対してアドレス空間間呼出し
を実行することができる。ドアを作成する定義域は、ド
ア識別子を受信する。定義域はドア識別子を他の定義域
に渡すことができ、したがって、他の定義域は、関連す
るドアに呼出しを発行することができる。カーネルは、
ドアおよびドア識別子の構成、破壊、コピー、送信を含
め、ドアおよびドア識別子に対するすべての動作を管理
する。
singletonと呼ばれるサブコントラクトを一例
として使用するものとする。このサブコントラクトは、
ドアと呼ばれるSPRINGカーネル通信機構上に構成
される。ドアは、通信エンドポイントであり、スレッド
は、通信エンドポイントに対してアドレス空間間呼出し
を実行することができる。ドアを作成する定義域は、ド
ア識別子を受信する。定義域はドア識別子を他の定義域
に渡すことができ、したがって、他の定義域は、関連す
るドアに呼出しを発行することができる。カーネルは、
ドアおよびドア識別子の構成、破壊、コピー、送信を含
め、ドアおよびドア識別子に対するすべての動作を管理
する。
【0061】singletonでは、サーバ定義域
は、オブジェクトに関連する基本状態を維持し、着呼を
受け入れるドアを作成する。クライアント定義域は、サ
ーバ定義域を呼び出すために使用するドア識別子を所有
するに過ぎない。
は、オブジェクトに関連する基本状態を維持し、着呼を
受け入れるドアを作成する。クライアント定義域は、サ
ーバ定義域を呼び出すために使用するドア識別子を所有
するに過ぎない。
【0062】したがって、singletonサブコン
トラクト上に構成されるSPRINGオブジェクトは、
全体的にスタブ・メソッドから成るメソッド・テーブル
と、singletonサブコントラクト記述子と、カ
ーネルドア識別子から成る表現とから成る。
トラクト上に構成されるSPRINGオブジェクトは、
全体的にスタブ・メソッドから成るメソッド・テーブル
と、singletonサブコントラクト記述子と、カ
ーネルドア識別子から成る表現とから成る。
【0063】Copyサブコントラクトcopy動作
は、既存のスプリング・オブジェクトに密接に関係する
新しいスプリング・オブジェクトを生成するために使用
される。コピーとオリジナルの正確な関係は、完全にサ
ブコントラクトの動作に依存する。サブコントラクト・
コードがそれ自体のコピーを実行するもできるが、オブ
ジェクトの処理系コードを含めることを選択することも
できる。
は、既存のスプリング・オブジェクトに密接に関係する
新しいスプリング・オブジェクトを生成するために使用
される。コピーとオリジナルの正確な関係は、完全にサ
ブコントラクトの動作に依存する。サブコントラクト・
コードがそれ自体のコピーを実行するもできるが、オブ
ジェクトの処理系コードを含めることを選択することも
できる。
【0064】singletonは、現ドア識別子のコ
ピーを作成するようカーネルに要求し、次いで、表現が
この新しいドア識別子であり、かつ現オブジェクトと同
じサブコントラクトおよびメソッド・テーブルを参照す
る、新しいオブジェクトを作成することによって、コピ
ーを実施する。したがって、コピー後、それぞれ、同じ
基本サーバ状態を参照する2つの異なるスプリング・オ
ブジェクトがある(この場合、コピーの意味は、ポイン
タをコピーするという意味である)。
ピーを作成するようカーネルに要求し、次いで、表現が
この新しいドア識別子であり、かつ現オブジェクトと同
じサブコントラクトおよびメソッド・テーブルを参照す
る、新しいオブジェクトを作成することによって、コピ
ーを実施する。したがって、コピー後、それぞれ、同じ
基本サーバ状態を参照する2つの異なるスプリング・オ
ブジェクトがある(この場合、コピーの意味は、ポイン
タをコピーするという意味である)。
【0065】サーバレス・オブジェクトでは、コピーを
実施する際、オブジェクトの状態全体をコピーする必要
があり、そのため、新しいオブジェクトは、最初のオブ
ジェクトとはまったく異なるものとなる。
実施する際、オブジェクトの状態全体をコピーする必要
があり、そのため、新しいオブジェクトは、最初のオブ
ジェクトとはまったく異なるものとなる。
【0066】Consume サブコントラクトconsume動作は、スプリング・
オブジェクトを削除するために使用される。
オブジェクトを削除するために使用される。
【0067】singletonは、現オブジェクトに
関連するドア識別子を削除することによってconsu
meを実施する。これによってオブジェクトのサーバ状
態が直接影響を受けることはなく、同じサーバ状態を参
照する他のスプリング状態がある場合、その状態がこの
動作の影響を受けることはない。
関連するドア識別子を削除することによってconsu
meを実施する。これによってオブジェクトのサーバ状
態が直接影響を受けることはなく、同じサーバ状態を参
照する他のスプリング状態がある場合、その状態がこの
動作の影響を受けることはない。
【0068】実際は、ドアを参照するすべてのドア識別
子が削除されているとき、サーバがそのサーバ状態を解
除できるようにカーネルが任意選択でサーバに通知する
ことに留意されたい。
子が削除されているとき、サーバがそのサーバ状態を解
除できるようにカーネルが任意選択でサーバに通知する
ことに留意されたい。
【0069】Marshal サブコントラクトmarshal動作は、オブジェクト
を他の計算機へ送信するときに使用される。
を他の計算機へ送信するときに使用される。
【0070】この動作は、現オブジェクトを取り出し、
通信バッファに十分な情報を置き、それによって、この
バッファの他の定義域からほぼ同じオブジェクトをマー
シャル解除できるようにする。
通信バッファに十分な情報を置き、それによって、この
バッファの他の定義域からほぼ同じオブジェクトをマー
シャル解除できるようにする。
【0071】所望の意味がオブジェクトを送信すること
なので、オブジェクトを送信した後に、もはやそのオブ
ジェクトをアドレス空間に有すべきでないことは明らか
である。したがって、マーシャルの暗黙的な副作用は、
オブジェクトに関連するすべてのローカル状態を削除す
ることである。
なので、オブジェクトを送信した後に、もはやそのオブ
ジェクトをアドレス空間に有すべきでないことは明らか
である。したがって、マーシャルの暗黙的な副作用は、
オブジェクトに関連するすべてのローカル状態を削除す
ることである。
【0072】singletonは、そのドア識別子を
マーシャル・バッファ中に置くことによってマーシャル
を実施する。カーネルの定義域間呼出し機構は、通信バ
ッファを他の定義域へ送信する際にドア識別子をその定
義域から暗黙的に削除する。
マーシャル・バッファ中に置くことによってマーシャル
を実施する。カーネルの定義域間呼出し機構は、通信バ
ッファを他の定義域へ送信する際にドア識別子をその定
義域から暗黙的に削除する。
【0073】Marshal copy インタフェース定義言語は、パラメータ引渡しモードc
opyをサポートする。このモードは、引数オブジェク
トのコピーが送信されるが、現定義域が最初のオブジェ
クトを保持することを暗黙指定する。
opyをサポートする。このモードは、引数オブジェク
トのコピーが送信されるが、現定義域が最初のオブジェ
クトを保持することを暗黙指定する。
【0074】このモードは最初、まずサブコントラクト
・コピー動作を呼び出し、次いでサブコントラクト・マ
ーシャル動作を呼び出すことによって実施された。しか
し、この場合、ただちに削除されるスプリング・オブジ
ェクトを作成する冗長な作業が行われることが多かっ
た。この作業は、大量の状態を有するサーバレス・オブ
ジェクトでは特に費用がかかった。
・コピー動作を呼び出し、次いでサブコントラクト・マ
ーシャル動作を呼び出すことによって実施された。しか
し、この場合、ただちに削除されるスプリング・オブジ
ェクトを作成する冗長な作業が行われることが多かっ
た。この作業は、大量の状態を有するサーバレス・オブ
ジェクトでは特に費用がかかった。
【0075】したがって、marshal_copy動
作が導入された。この動作は、コピーとその後に続くマ
ーシャルの効果をもたらすことと定義されているが、い
くつかの中間ステップを省略して最適化することが可能
である。
作が導入された。この動作は、コピーとその後に続くマ
ーシャルの効果をもたらすことと定義されているが、い
くつかの中間ステップを省略して最適化することが可能
である。
【0076】singletonの場合、現ドア識別子
をコピーし、新しいドア識別子を通信バッファに入れる
だけである。
をコピーし、新しいドア識別子を通信バッファに入れる
だけである。
【0077】サーバレス・オブジェクトの場合、mar
shal_copyでは、オブジェクトのデータ構造を
マーシャル・バッファにコピーすることが必要になるこ
とがある。
shal_copyでは、オブジェクトのデータ構造を
マーシャル・バッファにコピーすることが必要になるこ
とがある。
【0078】Unmarshal unmarshal(マーシャル解除)動作は、他の定
義域からオブジェクトを受信するときに使用される。こ
の動作のジョブは、メソッド・テーブルとサブコントラ
クト・ベクトルと表現とから成る完全なスプリング・オ
ブジェクトを作成することである。
義域からオブジェクトを受信するときに使用される。こ
の動作のジョブは、メソッド・テーブルとサブコントラ
クト・ベクトルと表現とから成る完全なスプリング・オ
ブジェクトを作成することである。
【0079】あるソフトウェア(通常スタブ・メソッ
ド)が通信バッファからオブジェクトを読み取ることを
決定したとき、そのソフトウェアは、予想されるオブジ
ェクト・タイプに基づいて最初のサブコントラクトと最
初のメソッド・テーブルを共に選択しなければならな
い。ソフトウェアは次いで、最初のサブコントラクトを
呼び出し、そのサブコントラクトに最初のメソッド・テ
ーブルを渡す。
ド)が通信バッファからオブジェクトを読み取ることを
決定したとき、そのソフトウェアは、予想されるオブジ
ェクト・タイプに基づいて最初のサブコントラクトと最
初のメソッド・テーブルを共に選択しなければならな
い。ソフトウェアは次いで、最初のサブコントラクトを
呼び出し、そのサブコントラクトに最初のメソッド・テ
ーブルを渡す。
【0080】サブコントラクトは次いで、通信バッファ
中の情報に基づいてオブジェクトの作成を試みなければ
ならない。この場合、通常、表現を作成できるように通
信バッファから十分な情報を読み取る必要がある。
中の情報に基づいてオブジェクトの作成を試みなければ
ならない。この場合、通常、表現を作成できるように通
信バッファから十分な情報を読み取る必要がある。
【0081】singletonの場合、この動作では
通常、ドア識別子をバッファから読み取り、このドア識
別子を保持する表現を作成する必要がある。
通常、ドア識別子をバッファから読み取り、このドア識
別子を保持する表現を作成する必要がある。
【0082】最後に、マーシャル解除は、サブコントラ
クト・ポインタとメソッド・テーブル・ポインタと表現
を組み合わせて、新しいスプリング・オブジェクトを作
成する。
クト・ポインタとメソッド・テーブル・ポインタと表現
を組み合わせて、新しいスプリング・オブジェクトを作
成する。
【0083】Invoke invoke動作は、引数バッファを宛先へ送信して結
果バッファを受信するために使用される。
果バッファを受信するために使用される。
【0084】singletonの場合、この動作で
は、ターゲットドア識別子への定義域間呼出しを実行す
るうえでカーネルへのトラップしか使用しない。
は、ターゲットドア識別子への定義域間呼出しを実行す
るうえでカーネルへのトラップしか使用しない。
【0085】複製をサポートするサブコントラクトの場
合、この動作では、1組の可能なサーバのうちの1つ
(または複数)へ引数バッファを送信することが必要に
なることがある。
合、この動作では、1組の可能なサーバのうちの1つ
(または複数)へ引数バッファを送信することが必要に
なることがある。
【0086】Invoke_preamble サブコントラクト呼出し動作が呼び出されるのは、すべ
ての引数マーシャルが実行された後だけである。実際に
は、オブジェクトのサブコントラクトが、何らかのプリ
アンブル情報を通信バッファに書き込み、あるいは将来
のマーシャルに影響を及ぼすようにフラグをセットする
ことができるように、前記サブコントラクトをプロセス
の初期に使用したいケースがあることが分かった。
ての引数マーシャルが実行された後だけである。実際に
は、オブジェクトのサブコントラクトが、何らかのプリ
アンブル情報を通信バッファに書き込み、あるいは将来
のマーシャルに影響を及ぼすようにフラグをセットする
ことができるように、前記サブコントラクトをプロセス
の初期に使用したいケースがあることが分かった。
【0087】サブコントラクトが必要な状態をセットア
ップできるように、SPRINGは新しいサブコントラ
クト動作invoke_preambleを有する。こ
のサブコントラクト動作は、引数マーシャルが行われる
前に呼び出される。
ップできるように、SPRINGは新しいサブコントラ
クト動作invoke_preambleを有する。こ
のサブコントラクト動作は、引数マーシャルが行われる
前に呼び出される。
【0088】たとえば、ある種の状況では、サブコント
ラクトは共用メモリ領域を使用してサーバと通信するこ
とができる。この場合、invoke_preambl
eを呼び出すと、サブコントラクトは、すべてのマーシ
ャルが完了した後に引数が共用メモリ領域にコピーされ
るのでなく、その領域に直接引数がマーシャルされるよ
うに共用メモリ領域内を指すように通信バッファを調整
することができる。
ラクトは共用メモリ領域を使用してサーバと通信するこ
とができる。この場合、invoke_preambl
eを呼び出すと、サブコントラクトは、すべてのマーシ
ャルが完了した後に引数が共用メモリ領域にコピーされ
るのでなく、その領域に直接引数がマーシャルされるよ
うに共用メモリ領域内を指すように通信バッファを調整
することができる。
【0089】Object_type_id スプリングは、限られた量の実行時入力をサポートす
る。これは、オブジェクト・ブラウジングなどの動作
時、あるいは静的タイプ検査に依存できないある種の動
作のタイプ・セーフティ(すなわちネーミング)を検証
するために使用される。
る。これは、オブジェクト・ブラウジングなどの動作
時、あるいは静的タイプ検査に依存できないある種の動
作のタイプ・セーフティ(すなわちネーミング)を検証
するために使用される。
【0090】object_type_id動作は、現
オブジェクトに関する真のtype_idを返す。
オブジェクトに関する真のtype_idを返す。
【0091】ある種のサブコントラクトは、サーバを呼
び出してtype_idを得ることによってこの動作を
実施する。他のサブコントラクトは、オブジェクトのt
ype_idをその表現の一部として維持することによ
ってこの動作を実施する。この場合、type_id
は、オブジェクトのマーシャルされた形の一部として送
信される必要がある。
び出してtype_idを得ることによってこの動作を
実施する。他のサブコントラクトは、オブジェクトのt
ype_idをその表現の一部として維持することによ
ってこの動作を実施する。この場合、type_id
は、オブジェクトのマーシャルされた形の一部として送
信される必要がある。
【0092】Narrow サブコントラクトnarrow動作は、基本タイプから
派生タイプへのオブジェクトに対するタイプ検査による
タイプnarrowingをサポートするために使用さ
れる。この動作は、オブジェクトのtype_idを使
用して、narrowが有効であることを検証し、そう
でない場合は例外を発生させる。
派生タイプへのオブジェクトに対するタイプ検査による
タイプnarrowingをサポートするために使用さ
れる。この動作は、オブジェクトのtype_idを使
用して、narrowが有効であることを検証し、そう
でない場合は例外を発生させる。
【0093】Object_manager_id このサブコントラクト動作は、スプリング・ネーミング
・アーキテクチャをサポートする。この動作は、オブジ
ェクトの基本サーバの名前を得る信頼できる方法を提供
する。この動作は通常、基本サーバを呼び出して名前を
得ることによって実施される。
・アーキテクチャをサポートする。この動作は、オブジ
ェクトの基本サーバの名前を得る信頼できる方法を提供
する。この動作は通常、基本サーバを呼び出して名前を
得ることによって実施される。
【0094】Is_null スプリングは、ヌル・オブジェクトの概念をサポートす
る。このオブジェクトは、プログラムおよびデータ構造
の初期設定時に使用できるプレースホルダ・オブジェク
トを提供する。規則上、ヌル・オブジェクトはすべての
メソッドおよび大部分のサブコントラクト動作上で例外
を発生させる。
る。このオブジェクトは、プログラムおよびデータ構造
の初期設定時に使用できるプレースホルダ・オブジェク
トを提供する。規則上、ヌル・オブジェクトはすべての
メソッドおよび大部分のサブコントラクト動作上で例外
を発生させる。
【0095】SPRINGは、特殊なヌル・サブコント
ラクトをヌル・オブジェクトに提供することによってこ
のオブジェクトをサポートする。ヌル・サブコントラク
トのis_null動作は真を返し、通常のサブコント
ラクトは偽を返す。
ラクトをヌル・オブジェクトに提供することによってこ
のオブジェクトをサポートする。ヌル・サブコントラク
トのis_null動作は真を返し、通常のサブコント
ラクトは偽を返す。
【0096】ヌル・サブコントラクトでは通常、ヌル・
サブコントラクトのオブジェクトをマーシャルすること
ができるが、他の大部分のサブコントラクト動作に対し
て例外を発生させる。
サブコントラクトのオブジェクトをマーシャルすること
ができるが、他の大部分のサブコントラクト動作に対し
て例外を発生させる。
【0097】サブコントラクト使用法の一例 リモート・オブジェクトを呼び出すときに実行されるサ
ブコントラクト動作のシーケンスを検討すると有用であ
る。これが一例に過ぎず、当業者には、本発明で定義し
たサブコントラクトが、本明細書に記載したこととはか
なり異なることを実行するように構成できることが認識
されよう。以下の議論では図6ないし図9を参照された
い。
ブコントラクト動作のシーケンスを検討すると有用であ
る。これが一例に過ぎず、当業者には、本発明で定義し
たサブコントラクトが、本明細書に記載したこととはか
なり異なることを実行するように構成できることが認識
されよう。以下の議論では図6ないし図9を参照された
い。
【0098】メソッドFredをサポートし、サブコン
トラクトSAを使用する、オブジェクトAを有すると仮
定する。 fred: proc(copy x: wombat)returns fruitbat
トラクトSAを使用する、オブジェクトAを有すると仮
定する。 fred: proc(copy x: wombat)returns fruitbat
【0099】リターン・タイプfruitbatは、あ
る種のサブコントラクトSFを使用することが分かって
いる。
る種のサブコントラクトSFを使用することが分かって
いる。
【0100】たとえば、サブコントラクトSXを使用す
るタイプwombatのオブジェクトXを有しており、
Aのfredメソッドを呼び出し、Xを引数として渡す
(50)。
るタイプwombatのオブジェクトXを有しており、
Aのfredメソッドを呼び出し、Xを引数として渡す
(50)。
【0101】1.まず、「fred」のスタブ・メソッ
ドに入る(52、54)。
ドに入る(52、54)。
【0102】2.スタブ・コードが、Aのinvoke
_preamble動作を呼び出す(56)。
_preamble動作を呼び出す(56)。
【0103】3.SA invoke_preambl
eコードが必要な初期設定を実行してリターンする(5
8)。
eコードが必要な初期設定を実行してリターンする(5
8)。
【0104】4.スタブ・コードは次いで、Xのmar
shal_copy動作を呼び出すことによって、引数
オブジェクトXをコピー引数としてマーシャルしようと
する。図6で、これは以下のように進行する。スタブf
redが、マーシャルすべき引数があるかどうかを調べ
る試験を行う(60)。答えがyesなので、スタブf
redは、引数を試験して引数のうちにオブジェクトが
あるかどうかを調べる(62)。スタブfredは、オ
ブジェクトXを見つけて、XがサブコントラクトSXを
有することを知り、サブコントラクトSXを呼び出して
オブジェクトXをマーシャルする(64)。
shal_copy動作を呼び出すことによって、引数
オブジェクトXをコピー引数としてマーシャルしようと
する。図6で、これは以下のように進行する。スタブf
redが、マーシャルすべき引数があるかどうかを調べ
る試験を行う(60)。答えがyesなので、スタブf
redは、引数を試験して引数のうちにオブジェクトが
あるかどうかを調べる(62)。スタブfredは、オ
ブジェクトXを見つけて、XがサブコントラクトSXを
有することを知り、サブコントラクトSXを呼び出して
オブジェクトXをマーシャルする(64)。
【0105】5.SX marshal_copyコー
ドは、Xのコピーを表す情報が引数バッファ中に置かれ
るようにして、スタブfredにリターンする(6
4)。
ドは、Xのコピーを表す情報が引数バッファ中に置かれ
るようにして、スタブfredにリターンする(6
4)。
【0106】6.この場合、スタブ・コードはすべての
引数をマーシャルしており、実際に呼出しを実行する準
備ができている。したがって、スタブ・コードはAの呼
出し動作を呼び出す(70)。
引数をマーシャルしており、実際に呼出しを実行する準
備ができている。したがって、スタブ・コードはAの呼
出し動作を呼び出す(70)。
【0107】7.SA呼出しメソッドは、Fredメソ
ッドに対する呼出しをオブジェクトAのサーバ状態上で
行うことを求める要求によって、引数バッファをターゲ
ット・サーバへ送信するのに必要な作業を実行し、次い
で結果バッファがサーバから戻るのを待つ(72)。
ッドに対する呼出しをオブジェクトAのサーバ状態上で
行うことを求める要求によって、引数バッファをターゲ
ット・サーバへ送信するのに必要な作業を実行し、次い
で結果バッファがサーバから戻るのを待つ(72)。
【0108】8.次に図7を参照すると、呼出しがター
ゲット・サーバによって受信され、データがサーバ側サ
ブコントラクトSSAに転送され、サーバ側サブコント
ラクトSSAはサーバ側スタブS2へバッファを転送す
る(74、76)。スタブS2は、マーシャル解除すべ
き引数があるかどうかを調べる検査を行い(78)、次
いでどの引数がオブジェクトであるかを調べる検査を行
う(80)。スタブS2は、マーシャル解除すべきオブ
ジェクトXがあることを知ると、SSAサブコントラク
トのマーシャル解除動作を呼び出す(82)。サブコン
トラクトSSAは、オブジェクトXのサブコントラクト
idを検査して、オブジェクトXにサブコントラクトS
Xが関連付けられていることを知る(84)。サブコン
トラクトSSAは次いで、サブコントラクトSX上でマ
ーシャル解除動作を呼び出す(84)。サブコントラク
トSXは、オブジェクトXをマーシャル解除してサブコ
ントラクトSSAに返し、サブコントラクトSSAはオ
ブジェクトXをスタブS2に返す(86)。スタブS2
は、受信したすべての引数のマーシャル解除を完了し
て、ターゲット・オブジェクト処理系に呼出しおよび引
数を渡し(92)、応答を待つ(94)。オブジェクト
・インプリメンタは、呼出しを処理して、サブコントラ
クトSFとサーバ側サブコントラクトSSFとを有する
オブジェクトfruitbat−1を作成し、サブコン
トラクトSF用のサーバ側サブコントラクトとして働く
ようサブコントラクトSSFに命令する(96)。サブ
コントラクトSSFは、fruitbat−1を識別す
る内部状態を作成し、この状態を指すオブジェクトfr
uitbatを返す(98)。オブジェクト・インプリ
メンタは次に、オブジェクトfruitbatを、クラ
イアントに返すためにサーバ側スタブS2に返す(10
0)。次に図8を参照すると、スタブS2は次に、引数
マーシャル・ルーチンを再び実行してオブジェクトfr
uitbatをマーシャルし(104、106、10
8、110、112)、マーシャル済み引数をスタブS
2に返さなければならない。スタブS2は、マーシャル
済みデータを、クライアント側サブコントラクトSAへ
再送信する(116)ためにサーバ側サブコントラクト
SSAへ転送する(114)。
ゲット・サーバによって受信され、データがサーバ側サ
ブコントラクトSSAに転送され、サーバ側サブコント
ラクトSSAはサーバ側スタブS2へバッファを転送す
る(74、76)。スタブS2は、マーシャル解除すべ
き引数があるかどうかを調べる検査を行い(78)、次
いでどの引数がオブジェクトであるかを調べる検査を行
う(80)。スタブS2は、マーシャル解除すべきオブ
ジェクトXがあることを知ると、SSAサブコントラク
トのマーシャル解除動作を呼び出す(82)。サブコン
トラクトSSAは、オブジェクトXのサブコントラクト
idを検査して、オブジェクトXにサブコントラクトS
Xが関連付けられていることを知る(84)。サブコン
トラクトSSAは次いで、サブコントラクトSX上でマ
ーシャル解除動作を呼び出す(84)。サブコントラク
トSXは、オブジェクトXをマーシャル解除してサブコ
ントラクトSSAに返し、サブコントラクトSSAはオ
ブジェクトXをスタブS2に返す(86)。スタブS2
は、受信したすべての引数のマーシャル解除を完了し
て、ターゲット・オブジェクト処理系に呼出しおよび引
数を渡し(92)、応答を待つ(94)。オブジェクト
・インプリメンタは、呼出しを処理して、サブコントラ
クトSFとサーバ側サブコントラクトSSFとを有する
オブジェクトfruitbat−1を作成し、サブコン
トラクトSF用のサーバ側サブコントラクトとして働く
ようサブコントラクトSSFに命令する(96)。サブ
コントラクトSSFは、fruitbat−1を識別す
る内部状態を作成し、この状態を指すオブジェクトfr
uitbatを返す(98)。オブジェクト・インプリ
メンタは次に、オブジェクトfruitbatを、クラ
イアントに返すためにサーバ側スタブS2に返す(10
0)。次に図8を参照すると、スタブS2は次に、引数
マーシャル・ルーチンを再び実行してオブジェクトfr
uitbatをマーシャルし(104、106、10
8、110、112)、マーシャル済み引数をスタブS
2に返さなければならない。スタブS2は、マーシャル
済みデータを、クライアント側サブコントラクトSAへ
再送信する(116)ためにサーバ側サブコントラクト
SSAへ転送する(114)。
【0109】9.スタブ・コードは次に、SA呼出しメ
ソッドから結果バッファを受信し(130)、結果のマ
ーシャル解除を開始する。この場合、結果は、サブコン
トラクトSFを有するタイプfruitbatのオブジ
ェクトであることが分かり、したがってスタブfred
(SA)は、SFサブコントラクトのマーシャル解除動
作を呼び出し、タイプfruitbat用の正規メソッ
ド・テーブルを渡す。呼出しステップ全体を、論理ブロ
ック142、134、136、138に示し、互換性の
あるオブジェクトに関する以下の議論でさらに詳しく説
明する。
ソッドから結果バッファを受信し(130)、結果のマ
ーシャル解除を開始する。この場合、結果は、サブコン
トラクトSFを有するタイプfruitbatのオブジ
ェクトであることが分かり、したがってスタブfred
(SA)は、SFサブコントラクトのマーシャル解除動
作を呼び出し、タイプfruitbat用の正規メソッ
ド・テーブルを渡す。呼出しステップ全体を、論理ブロ
ック142、134、136、138に示し、互換性の
あるオブジェクトに関する以下の議論でさらに詳しく説
明する。
【0110】10.SFマーシャル解除コードは次に、
結果バッファからオブジェクトをマーシャル解除しよう
とする。SFマーシャル解除コードは、それ自体のサブ
コントラクト・メソッド・テーブル、および渡された正
規メソッド・テーブルと、結果バッファから得た情報を
組み合わせて、新しいスプリング・オブジェクトを形成
する。SFマーシャル解除コードは、新しいスプリング
・オブジェクトを再びスタブに渡す(140)。
結果バッファからオブジェクトをマーシャル解除しよう
とする。SFマーシャル解除コードは、それ自体のサブ
コントラクト・メソッド・テーブル、および渡された正
規メソッド・テーブルと、結果バッファから得た情報を
組み合わせて、新しいスプリング・オブジェクトを形成
する。SFマーシャル解除コードは、新しいスプリング
・オブジェクトを再びスタブに渡す(140)。
【0111】11.fredスタブはそのタスクを完了
しており、結果オブジェクトをアプリケーション・レベ
ルに返すことができる(148)。
しており、結果オブジェクトをアプリケーション・レベ
ルに返すことができる(148)。
【0112】プロセスは、Aのfredメソッド用のス
タブ・コードによって駆動されたが、ターゲット・オブ
ジェクト、引数オブジェクト、および結果オブジェクト
用のサブコントラクトも使用した。
タブ・コードによって駆動されたが、ターゲット・オブ
ジェクト、引数オブジェクト、および結果オブジェクト
用のサブコントラクトも使用した。
【0113】互換性のあるサブコントラクト 異なるオブジェクトが異なるサブコントラクトを有する
ことが望ましいことは明らかである。具体的には、同じ
タイプを有するものとしてクライアント・アプリケーシ
ョンによって認識される2つのオブジェクトは、実際に
は異なるサブコントラクトを有することができる。たと
えば、「ファイル」タイプのあるインスタンスは標準
「singleton」サブコントラクトを使用するこ
とができ、「ファイル」の他のインスタンスは、これよ
りも興味深い「キャッシュ可能な」サブコントラクトを
使用することができる。
ことが望ましいことは明らかである。具体的には、同じ
タイプを有するものとしてクライアント・アプリケーシ
ョンによって認識される2つのオブジェクトは、実際に
は異なるサブコントラクトを有することができる。たと
えば、「ファイル」タイプのあるインスタンスは標準
「singleton」サブコントラクトを使用するこ
とができ、「ファイル」の他のインスタンスは、これよ
りも興味深い「キャッシュ可能な」サブコントラクトを
使用することができる。
【0114】各タイプごとに、標準サブコントラクト
を、そのタイプと対話するときに使用できるように指定
することができる。異なるサブコントラクトが実際に必
要なとき、SPRINGがどのように動作するかについ
て説明する。
を、そのタイプと対話するときに使用できるように指定
することができる。異なるサブコントラクトが実際に必
要なとき、SPRINGがどのように動作するかについ
て説明する。
【0115】たとえば、標準タイプfileは、sin
gletonと呼ばれる簡単なサブコントラクトを使用
するように指定される。タイプcachable_fi
leはfileのサブタイプであるが、その代わり、c
achingサブコントラクトを使用する。タイプca
chable_fileのオブジェクトが、タイプfi
leのオブジェクトが存在することが予想される位置に
送信されたときどうなるかを考える。受信側が、キャッ
ング・オブジェクトをsingletonの場合と同様
にマーシャル解除しようとした場合、失敗することは明
らかである。
gletonと呼ばれる簡単なサブコントラクトを使用
するように指定される。タイプcachable_fi
leはfileのサブタイプであるが、その代わり、c
achingサブコントラクトを使用する。タイプca
chable_fileのオブジェクトが、タイプfi
leのオブジェクトが存在することが予想される位置に
送信されたときどうなるかを考える。受信側が、キャッ
ング・オブジェクトをsingletonの場合と同様
にマーシャル解除しようとした場合、失敗することは明
らかである。
【0116】この問題は、互換性のあるサブコントラク
トの概念を導入することによって解決される。サブコン
トラクトAは、サブコントラクトBに関するマーシャル
解除コードが、サブコントラクトAのオブジェクトの受
信を正しく処理できる場合、サブコントラクトBと互換
性があると言われる。
トの概念を導入することによって解決される。サブコン
トラクトAは、サブコントラクトBに関するマーシャル
解除コードが、サブコントラクトAのオブジェクトの受
信を正しく処理できる場合、サブコントラクトBと互換
性があると言われる。
【0117】互換性のあるサブコントラクトを実施する
ために使用される通常の機構は、ある形のサブコントラ
クト識別子を各オブジェクトのマーシャルされた形の一
部として含めることである。
ために使用される通常の機構は、ある形のサブコントラ
クト識別子を各オブジェクトのマーシャルされた形の一
部として含めることである。
【0118】したがって、典型的なサブコントラクト・
マーシャル解除動作は、通信バッファ中の予想されるサ
ブコントラクト識別子を見ることによって開始する。現
サブコントラクトの予想される識別子が通信バッファに
含まれている場合、サブコントラクトは、正規マーシャ
ル解除を実行する。しかし、他の何らかの値を見つけた
場合、レジストリを呼び出してそのサブコントラクト用
の正しいコードを見つけ、次いでそのサブコントラクト
を呼び出してマーシャル解除を実行する。
マーシャル解除動作は、通信バッファ中の予想されるサ
ブコントラクト識別子を見ることによって開始する。現
サブコントラクトの予想される識別子が通信バッファに
含まれている場合、サブコントラクトは、正規マーシャ
ル解除を実行する。しかし、他の何らかの値を見つけた
場合、レジストリを呼び出してそのサブコントラクト用
の正しいコードを見つけ、次いでそのサブコントラクト
を呼び出してマーシャル解除を実行する。
【0119】現在、すべてのサブコントラクトは相互に
互換性を有し、単一の方式を使用してサブコントラクト
自体を識別している。しかし、相互識別のために異なる
方式を使用し、かつ標準セットと互換性のない、他の数
組のサブコントラクトを追加することが可能である。
互換性を有し、単一の方式を使用してサブコントラクト
自体を識別している。しかし、相互識別のために異なる
方式を使用し、かつ標準セットと互換性のない、他の数
組のサブコントラクトを追加することが可能である。
【0120】新しいサブコントラクトの発見 プログラムは通常、1組の標準サブコントラクトを提供
する1組のライブラリにリンクされる。しかし、プログ
ラムは実行時に、その標準ライブラリにないサブコント
ラクトを使用するオブジェクトに出会うことがある。
する1組のライブラリにリンクされる。しかし、プログ
ラムは実行時に、その標準ライブラリにないサブコント
ラクトを使用するオブジェクトに出会うことがある。
【0121】サブコントラクト識別子からライブラリ名
へのマップを行う機構が提供され、新しいサブコントラ
クトを得るためのライブラリの動的リンクがサポートさ
れる。
へのマップを行う機構が提供され、新しいサブコントラ
クトを得るためのライブラリの動的リンクがサポートさ
れる。
【0122】たとえば、定義域は、singleton
サブコントラクトを使用してタイプfileのオブジェ
クトを受信することを予想しているが、ここでは、その
代わりにrepliconサブコントラクトを使用して
タイプreplicated_fileのオブジェクト
を定義域へ送信する。singletonマーシャル解
除動作は、異なるサブコントラクトが使用されているこ
とを発見し、定義域のサブコントラクト・レジストリを
呼び出して正しいサブコントラクト・コードを見つけ
る。レジストリは、現在適切なサブコントラクトがロー
ドされていないことを発見するが、次いでネットワーク
・サービスを使用してサブコントラクト識別子をライブ
ラリ名としてマップし(たとえば、replicon.
so)、次いでそのライブラリに動的にリンクしてサブ
コントラクトを得ようとする。
サブコントラクトを使用してタイプfileのオブジェ
クトを受信することを予想しているが、ここでは、その
代わりにrepliconサブコントラクトを使用して
タイプreplicated_fileのオブジェクト
を定義域へ送信する。singletonマーシャル解
除動作は、異なるサブコントラクトが使用されているこ
とを発見し、定義域のサブコントラクト・レジストリを
呼び出して正しいサブコントラクト・コードを見つけ
る。レジストリは、現在適切なサブコントラクトがロー
ドされていないことを発見するが、次いでネットワーク
・サービスを使用してサブコントラクト識別子をライブ
ラリ名としてマップし(たとえば、replicon.
so)、次いでそのライブラリに動的にリンクしてサブ
コントラクトを得ようとする。
【0123】したがって、プログラムが、複製オブジェ
クトの概念を有さず、最初に、複製オブジェクトを理解
するライブラリにリンクされなかった場合でも、複製フ
ァイル・オブジェクトと対話する妥当なコードを動的に
得ることができた。
クトの概念を有さず、最初に、複製オブジェクトを理解
するライブラリにリンクされなかった場合でも、複製フ
ァイル・オブジェクトと対話する妥当なコードを動的に
得ることができた。
【0124】この機構は、実行時に、古いプログラムが
適当なサブコントラクト・ライブラリを利用できるよう
にしさえすれば、新しいサブコントラクトを追加し、そ
れを使用して、古いアプリケーションも標準ライブラリ
も変更せずに古いアプリケーションと対話することが可
能であることを意味する。この動的リンク方式は、欠点
が多い。
適当なサブコントラクト・ライブラリを利用できるよう
にしさえすれば、新しいサブコントラクトを追加し、そ
れを使用して、古いアプリケーションも標準ライブラリ
も変更せずに古いアプリケーションと対話することが可
能であることを意味する。この動的リンク方式は、欠点
が多い。
【0125】多くの定義域、具体的にはシステム・サー
バは、場合によっては悪意のあるクライアントによって
指定された何らかのランダム動的ライブラリ・コードを
単純に実行することを好まない。したがって、機密保護
のために、動的リンカは、指定されたディレクトリ探索
経路上にあるライブラリしかロードしない。したがっ
て、通常、システム管理者が介入して、大部分の定義域
の探索経路上にある新しいサブコントラクト・ライブラ
リを標準ディレクトリにインストールする必要がある。
バは、場合によっては悪意のあるクライアントによって
指定された何らかのランダム動的ライブラリ・コードを
単純に実行することを好まない。したがって、機密保護
のために、動的リンカは、指定されたディレクトリ探索
経路上にあるライブラリしかロードしない。したがっ
て、通常、システム管理者が介入して、大部分の定義域
の探索経路上にある新しいサブコントラクト・ライブラ
リを標準ディレクトリにインストールする必要がある。
【0126】サーバ側 多くのサブコントラクトは、クライアント・サーバ計算
をサポートする。サブコントラクトのクライアント側の
ビューについて説明したが、サーバ・ベースのオブジェ
クトでは、サーバ側にもある量の機構がある。
をサポートする。サブコントラクトのクライアント側の
ビューについて説明したが、サーバ・ベースのオブジェ
クトでは、サーバ側にもある量の機構がある。
【0127】クライアント側では、アプリケーション・
プログラマがサブコントラクト処理系を利用することは
できない。しかし、サーバ側では、サーバ処理系を特定
のサブコントラクトにより密に結合することができる。
たとえば、複製サブコントラクトでは、複製をサポート
するためにサーバ・アプリケーションとの特殊なインタ
フェースが必要になることがある。
プログラマがサブコントラクト処理系を利用することは
できない。しかし、サーバ側では、サーバ処理系を特定
のサブコントラクトにより密に結合することができる。
たとえば、複製サブコントラクトでは、複製をサポート
するためにサーバ・アプリケーションとの特殊なインタ
フェースが必要になることがある。
【0128】したがって、サーバ側インタフェースは、
サブコントラクト間でかなり異なるものになることがあ
る。しかし、言語レベル・オブジェクトからスプリング
・オブジェクトを作成することのサポートと、着呼を処
理することのサポートと、オブジェクトを拒否すること
のサポートの3つの要素が、通常存在する。「言語レベ
ル」オブジェクトとは、状態と1組のメソッドしか含ま
ないオブジェクトである。
サブコントラクト間でかなり異なるものになることがあ
る。しかし、言語レベル・オブジェクトからスプリング
・オブジェクトを作成することのサポートと、着呼を処
理することのサポートと、オブジェクトを拒否すること
のサポートの3つの要素が、通常存在する。「言語レベ
ル」オブジェクトとは、状態と1組のメソッドしか含ま
ないオブジェクトである。
【0129】スプリング・オブジェクトの作成 サブコントラクトは、言語レベル・オブジェクトからス
プリング・オブジェクトを作成する方法を提供しなけれ
ばならない。これは2つの形をとることができる。
プリング・オブジェクトを作成する方法を提供しなけれ
ばならない。これは2つの形をとることができる。
【0130】最も簡単な形は、サブコントラクトが通常
のクライアント側スプリング・オブジェクトを作成する
ことである。これは、サブコントラクトがある種の通信
エンドポイント(たとえばnucleusドア)を作成
し、かつそのエンドポイントが表現によって使用される
クライアント側スプリング・オブジェクトを作成しなけ
ればならないことを意味する。
のクライアント側スプリング・オブジェクトを作成する
ことである。これは、サブコントラクトがある種の通信
エンドポイント(たとえばnucleusドア)を作成
し、かつそのエンドポイントが表現によって使用される
クライアント側スプリング・オブジェクトを作成しなけ
ればならないことを意味する。
【0131】しかし、ある種のサブコントラクトは、そ
のサーバと同じアドレス空間に存在するスプリング・オ
ブジェクトのための特殊なサポートを提供する。たとえ
ば、singletonサブコントラクトは、単一のア
ドレス空間内で使用できる最適化された呼出し機構を提
供する。そのようなサブコントラクトを使用してスプリ
ング・オブジェクトが作成されると、そのスプリング・
オブジェクトは通常、特殊なサーバ側動作ベクトルを使
用してオブジェクトを作成し、定義域間通信に必要な資
源を作成する経費を支払うことを不要にする。オブジェ
クトが実際に、他の定義域への送信のためにマーシャル
されるとき、サブコントラクトは最終的に、このような
資源を作成する。
のサーバと同じアドレス空間に存在するスプリング・オ
ブジェクトのための特殊なサポートを提供する。たとえ
ば、singletonサブコントラクトは、単一のア
ドレス空間内で使用できる最適化された呼出し機構を提
供する。そのようなサブコントラクトを使用してスプリ
ング・オブジェクトが作成されると、そのスプリング・
オブジェクトは通常、特殊なサーバ側動作ベクトルを使
用してオブジェクトを作成し、定義域間通信に必要な資
源を作成する経費を支払うことを不要にする。オブジェ
クトが実際に、他の定義域への送信のためにマーシャル
されるとき、サブコントラクトは最終的に、このような
資源を作成する。
【0132】したがって、singletonサブコン
トラクトは最初、サーバ状態を指すローカルC++ポイ
ンタのみを使用してスプリング・オブジェクトを作成す
る。singletonが、nucleusドアを作成
して対応するドアidをマーシャルする経費を支払うの
は、このオブジェクトが外部送信のためにマーシャルさ
れたときだけである。
トラクトは最初、サーバ状態を指すローカルC++ポイ
ンタのみを使用してスプリング・オブジェクトを作成す
る。singletonが、nucleusドアを作成
して対応するドアidをマーシャルする経費を支払うの
は、このオブジェクトが外部送信のためにマーシャルさ
れたときだけである。
【0133】着呼の処理 サブコントラクトは、直接サーバ側スタブへ着呼を転送
する通信エンドポイントを作成することがある。しか
し、より一般的には、サブコントラクトは、着呼が、ま
ずサブコントラクトに到着し、次いでサブコントラクト
自体が呼出しをスタブ・レベルへ転送するようにする。
する通信エンドポイントを作成することがある。しか
し、より一般的には、サブコントラクトは、着呼が、ま
ずサブコントラクトに到着し、次いでサブコントラクト
自体が呼出しをスタブ・レベルへ転送するようにする。
【0134】このため、サーバ側サブコントラクトは、
呼出しおよび応答に関する情報をピギーバックすること
によって、対応するクライアント側コードとの対話を維
持することができる。たとえば、複製をサポートするサ
ブコントラクトは、応答に関する情報をピギーバックし
て、1組の複製サーバの変更、またはクライアントにど
のサーバを使用してほしいかをクライアントに通知する
ことができる。
呼出しおよび応答に関する情報をピギーバックすること
によって、対応するクライアント側コードとの対話を維
持することができる。たとえば、複製をサポートするサ
ブコントラクトは、応答に関する情報をピギーバックし
て、1組の複製サーバの変更、またはクライアントにど
のサーバを使用してほしいかをクライアントに通知する
ことができる。
【0135】オブジェクトの取消し 現在、ある状態を指すオブジェクトを有するクライアン
トが存在する場合でも、サーバがその状態の一部を破棄
することを決定することがある。このことは、すべての
クライアントが同意するのを待たずに資源を再利用する
オペレーティング・システム・サービスでは特に重要で
ある。
トが存在する場合でも、サーバがその状態の一部を破棄
することを決定することがある。このことは、すべての
クライアントが同意するのを待たずに資源を再利用する
オペレーティング・システム・サービスでは特に重要で
ある。
【0136】したがって、典型的なサーバ側サブコント
ラクトは、サーバ・アプリケーションが未処理のオブジ
ェクトを取り消す方法を提供する。たとえば、sing
letonの場合、これは、基本nucleusドアを
取り消し、それによって実際上、次の着信カーネル呼出
しを妨げることによって実施される。
ラクトは、サーバ・アプリケーションが未処理のオブジ
ェクトを取り消す方法を提供する。たとえば、sing
letonの場合、これは、基本nucleusドアを
取り消し、それによって実際上、次の着信カーネル呼出
しを妨げることによって実施される。
【0137】共用メモリ・サブコントラクト 共用メモリ領域によって引数を安全にかつ効率的に渡す
特殊な種類のサブコントラクトを利用することができ
る。このサブコントラクトは、クライアントとサーバが
同じ計算機上、または同じマイクロプロセッサ装置上、
または場合によってはある種のローカル・エリア・ネッ
トワーク(LAN)中にある場合など、クライアントと
サーバが動作する特定のハードウェア構成で許容される
ときに特に適切である。このような状況では、通信バッ
ファの通常のマーシャルおよび送信のある程度のオーバ
ヘッドが、不要になり、したがって引数引渡しに共用メ
モリを使用することによって防止される。共用メモリ・
プロセスでの機密保護の維持に関係する追加オーバヘッ
ドが必要になるが、この状況では最小限のものとみなさ
れる。共用メモリ・サブコントラクトは、copy、c
onsume、narrow、object_type
_id、object_manager_id、is_
null、およびinvoke_preambleの通
常のサブコントラクト・メソッドを上述の一般的な方法
で処理する。marshalメソッドおよびunmar
shalメソッドは、ランダム・スタブによって呼び出
されると、上述のように動作する。invokeメソッ
ドは、実際には、以下でさらに詳しく説明するように、
channelオブジェクト上で必要なメソッドを呼び
出してインデックスを渡すという点で異なる。共用メモ
リ・サブコントラクトは、create_channe
lメソッドおよびget_indexメソッドの2つの
追加メソッドも含む。これらのメソッドについては、共
に、以下でさらに詳しく説明する。
特殊な種類のサブコントラクトを利用することができ
る。このサブコントラクトは、クライアントとサーバが
同じ計算機上、または同じマイクロプロセッサ装置上、
または場合によってはある種のローカル・エリア・ネッ
トワーク(LAN)中にある場合など、クライアントと
サーバが動作する特定のハードウェア構成で許容される
ときに特に適切である。このような状況では、通信バッ
ファの通常のマーシャルおよび送信のある程度のオーバ
ヘッドが、不要になり、したがって引数引渡しに共用メ
モリを使用することによって防止される。共用メモリ・
プロセスでの機密保護の維持に関係する追加オーバヘッ
ドが必要になるが、この状況では最小限のものとみなさ
れる。共用メモリ・サブコントラクトは、copy、c
onsume、narrow、object_type
_id、object_manager_id、is_
null、およびinvoke_preambleの通
常のサブコントラクト・メソッドを上述の一般的な方法
で処理する。marshalメソッドおよびunmar
shalメソッドは、ランダム・スタブによって呼び出
されると、上述のように動作する。invokeメソッ
ドは、実際には、以下でさらに詳しく説明するように、
channelオブジェクト上で必要なメソッドを呼び
出してインデックスを渡すという点で異なる。共用メモ
リ・サブコントラクトは、create_channe
lメソッドおよびget_indexメソッドの2つの
追加メソッドも含む。これらのメソッドについては、共
に、以下でさらに詳しく説明する。
【0138】次に図11を参照すると、共用メモリ・サ
ブコントラクト200のクライアント側に含まれるデー
タ構造の例が示されている。このデータ構造でのデータ
の使用法について、以下でさらに詳しく説明する。第1
のデータ構造202は、フィールド1 206、フィー
ルド2 208、及びフィールド3 210の3つのフ
ィールドを備えている。フィールド1は、クライアント
によって呼び出される最初のオブジェクトにその最初の
オブジェクトが共用メモリ・サブコントラクトを使用す
るハンドル(ポインタ)を含めるために使用される。フ
ィールド2はフィールド1が指すオブジェクトに関係す
るインデックスを含めるために使用される。フィールド
3は第2のデータ構造204を指すポインタを含めるた
めに使用される。第2のデータ構造は204は、クライ
アントとサーバ上の1つまたは複数のオブジェクト処理
系との間の通信に使用されるサーバ上のチャネル・オブ
ジェクトを指すハンドルを含むフィールドa 212と
呼ばれるフィールドを含む(図17および以下の説明を
参照されたい)。第2のデータ構造204は、(クライ
アント・アドレス空間にもサーバ・アドレス空間にもマ
ップされた)メモリ・オブジェクトを指すハンドルと、
マップ済み領域のサイズと、マップ済み領域のメモリの
サブブロックを割り振り、割り振り解除するために使用
される割振りマップとを含むフィールドb 214と呼
ばれるフィールドも含む。データをマーシャルする際、
割振りマップが参照されてマーシャル・バッファが割り
振られ、データをマーシャル解除した後、マーシャル・
バッファを割り振り解除するように割振りマップが更新
される。当業者には、これらのフィールドを任意の方法
で使用してこのようなデータを含めることができ、割振
りマップが、ビット・マップ、ファースト・フィット方
式、バディ・システム、類似のマッピング方法など、メ
モリ・マップの合理的な実施態様でよいことが認識され
よう。第2のデータ構造204のフィールドc216
は、サーバ定義域idを含む。
ブコントラクト200のクライアント側に含まれるデー
タ構造の例が示されている。このデータ構造でのデータ
の使用法について、以下でさらに詳しく説明する。第1
のデータ構造202は、フィールド1 206、フィー
ルド2 208、及びフィールド3 210の3つのフ
ィールドを備えている。フィールド1は、クライアント
によって呼び出される最初のオブジェクトにその最初の
オブジェクトが共用メモリ・サブコントラクトを使用す
るハンドル(ポインタ)を含めるために使用される。フ
ィールド2はフィールド1が指すオブジェクトに関係す
るインデックスを含めるために使用される。フィールド
3は第2のデータ構造204を指すポインタを含めるた
めに使用される。第2のデータ構造は204は、クライ
アントとサーバ上の1つまたは複数のオブジェクト処理
系との間の通信に使用されるサーバ上のチャネル・オブ
ジェクトを指すハンドルを含むフィールドa 212と
呼ばれるフィールドを含む(図17および以下の説明を
参照されたい)。第2のデータ構造204は、(クライ
アント・アドレス空間にもサーバ・アドレス空間にもマ
ップされた)メモリ・オブジェクトを指すハンドルと、
マップ済み領域のサイズと、マップ済み領域のメモリの
サブブロックを割り振り、割り振り解除するために使用
される割振りマップとを含むフィールドb 214と呼
ばれるフィールドも含む。データをマーシャルする際、
割振りマップが参照されてマーシャル・バッファが割り
振られ、データをマーシャル解除した後、マーシャル・
バッファを割り振り解除するように割振りマップが更新
される。当業者には、これらのフィールドを任意の方法
で使用してこのようなデータを含めることができ、割振
りマップが、ビット・マップ、ファースト・フィット方
式、バディ・システム、類似のマッピング方法など、メ
モリ・マップの合理的な実施態様でよいことが認識され
よう。第2のデータ構造204のフィールドc216
は、サーバ定義域idを含む。
【0139】次に図12ないし図16を参照して、共用
メモリ・サブコントラクトの動作について説明する。図
12で、クライアントは、共用メモリ・サブコントラク
トを有する最初のオブジェクトJ上でメソッドAを呼び
出す(252)。クライアント呼出しは、クライアント
・スタブ254に渡され(254)、クライアント・ス
タブは共用メモリ・サブコントラクトを呼び出す。共用
メモリ・サブコントラクトは、その第1のデータ構造
(図11中の202)中のフィールド2および3(図1
1中の208および210)を検査して、それらのフィ
ールドが空であるかどうかを調べる(256)。これら
のフィールドが空である場合(260)、これがこの最
初のオブジェクトに対する最初の呼出しであり、共用メ
モリ空間を確立しなければならないことが分かる。この
場合、制御は、以下で説明する図15ないし図16に示
す「初期設定」プロセスにシフトする。第1のデータ構
造(図11中の202)中のフィールド2および3(図
11中の208および210)が空でない場合(25
8)、このオブジェクトが以前に呼び出されたことがあ
り、共用メモリがすでにセットアップされており、(図
13ないし図14に示すように)通常のマーシャルを実
行できることが分かる。
メモリ・サブコントラクトの動作について説明する。図
12で、クライアントは、共用メモリ・サブコントラク
トを有する最初のオブジェクトJ上でメソッドAを呼び
出す(252)。クライアント呼出しは、クライアント
・スタブ254に渡され(254)、クライアント・ス
タブは共用メモリ・サブコントラクトを呼び出す。共用
メモリ・サブコントラクトは、その第1のデータ構造
(図11中の202)中のフィールド2および3(図1
1中の208および210)を検査して、それらのフィ
ールドが空であるかどうかを調べる(256)。これら
のフィールドが空である場合(260)、これがこの最
初のオブジェクトに対する最初の呼出しであり、共用メ
モリ空間を確立しなければならないことが分かる。この
場合、制御は、以下で説明する図15ないし図16に示
す「初期設定」プロセスにシフトする。第1のデータ構
造(図11中の202)中のフィールド2および3(図
11中の208および210)が空でない場合(25
8)、このオブジェクトが以前に呼び出されたことがあ
り、共用メモリがすでにセットアップされており、(図
13ないし図14に示すように)通常のマーシャルを実
行できることが分かる。
【0140】第1のデータ構造(図11中の202)中
のフィールド2および3(図11中の208および21
0)が空であることが分かると、制御は、図15に示し
た「初期設定」開始プロセスにシフトする(264)。
共用メモリ・サブコントラクトは、最初に呼び出された
オブジェクトJのサーバ定義域idをnucleusか
ら取り出す(312)。共用メモリ・サブコントラクト
は次いで、それが有することができる1つまたは複数の
第2のデータ構造(図11中の204)のフィールド3
(図11中の216)中のサーバ定義域idを検査する
ことによって、識別されたサーバ定義域へのチャネルが
存在するかどうかを判定する(314)。チャネルが存
在しない場合(318)、チャネルを確立しなければな
らない。そうするために、共用メモリサブコントラクト
は、仮想メモリ・システムから新しいメモリ・オブジェ
クトを得て、クライアント・アドレス空間にマップする
(320)。共用メモリ・サブコントラクトは次いで、
最初のオブジェクトJ上でcreate_channe
lメソッドを呼び出す。サブコントラクトの第1のデー
タ構造のフィールド1(図11中のフィールド206)
にあるオブジェクトJのハンドルが使用され、メモリ・
オブジェクトが、最初のオブジェクトJの処理系を含む
引数としてサーバに渡される。共用メモリ・サブコント
ラクトのサーバ側は、サーバのアドレス空間にメモリ・
オブジェクトをマップし、新しいチャネル・オブジェク
トを作成し、このチャネル・オブジェクトを呼出し側へ
返す(322)。この場合の呼出し側は、共用メモリ・
サブコントラクトのクライアント側であった。サブコン
トラクトのサーバ側からのこのリターンが受信される
と、コントラクトのクライアント側は、チャネル・オブ
ジェクトのハンドルをフィールドa 212に入れ、メ
モリ・オブジェクトを指すハンドル(現在、クライアン
ト・アドレス空間にもサーバ・アドレス空間にもマップ
されている)、マップ済み領域のサイズ、および割振り
マップをフィールドb 214に置き、サーバ定義域の
定義域idをフィールドc 216に置いて、第2のタ
イプのデータ構造(図11中の204)を作成する。サ
ブコントラクトのクライアント側は次いで、サブコント
ラクトの第1のタイプのデータ構造202のフィールド
3 210にこの第2のタイプのデータ構造を指すポイ
ンタを入れる(図15中のステップ326)。共用メモ
リ・サブコントラクトのクライアント側は次いで、チャ
ネル・オブジェクト上でget_indexメソッドを
呼び出し、第1のデータ構造202のフィールド1 2
06の最初のオブジェクトJのハンドルを引数として渡
す(図15のステップ328)。共用メモリ・サブコン
トラクトのサーバ側は、最初のオブジェクトJ(引数と
して渡されたオブジェクト)の状態をインデックスに関
連付け、このインデックスを返す(330)。サブコン
トラクトのクライアント側は、サブコントラクトの第1
のデータ構造202のフィールド2208にこのインデ
ックスを入れる(図16中のステップ334)。このイ
ンデックスを使用してチャネル・オブジェクトに対して
行われた呼出しは、サーバによって最初のオブジェクト
Jの適当な状態に方向付けられる。インデックスについ
ては、図17に関して以下でさらに詳しく説明する。
のフィールド2および3(図11中の208および21
0)が空であることが分かると、制御は、図15に示し
た「初期設定」開始プロセスにシフトする(264)。
共用メモリ・サブコントラクトは、最初に呼び出された
オブジェクトJのサーバ定義域idをnucleusか
ら取り出す(312)。共用メモリ・サブコントラクト
は次いで、それが有することができる1つまたは複数の
第2のデータ構造(図11中の204)のフィールド3
(図11中の216)中のサーバ定義域idを検査する
ことによって、識別されたサーバ定義域へのチャネルが
存在するかどうかを判定する(314)。チャネルが存
在しない場合(318)、チャネルを確立しなければな
らない。そうするために、共用メモリサブコントラクト
は、仮想メモリ・システムから新しいメモリ・オブジェ
クトを得て、クライアント・アドレス空間にマップする
(320)。共用メモリ・サブコントラクトは次いで、
最初のオブジェクトJ上でcreate_channe
lメソッドを呼び出す。サブコントラクトの第1のデー
タ構造のフィールド1(図11中のフィールド206)
にあるオブジェクトJのハンドルが使用され、メモリ・
オブジェクトが、最初のオブジェクトJの処理系を含む
引数としてサーバに渡される。共用メモリ・サブコント
ラクトのサーバ側は、サーバのアドレス空間にメモリ・
オブジェクトをマップし、新しいチャネル・オブジェク
トを作成し、このチャネル・オブジェクトを呼出し側へ
返す(322)。この場合の呼出し側は、共用メモリ・
サブコントラクトのクライアント側であった。サブコン
トラクトのサーバ側からのこのリターンが受信される
と、コントラクトのクライアント側は、チャネル・オブ
ジェクトのハンドルをフィールドa 212に入れ、メ
モリ・オブジェクトを指すハンドル(現在、クライアン
ト・アドレス空間にもサーバ・アドレス空間にもマップ
されている)、マップ済み領域のサイズ、および割振り
マップをフィールドb 214に置き、サーバ定義域の
定義域idをフィールドc 216に置いて、第2のタ
イプのデータ構造(図11中の204)を作成する。サ
ブコントラクトのクライアント側は次いで、サブコント
ラクトの第1のタイプのデータ構造202のフィールド
3 210にこの第2のタイプのデータ構造を指すポイ
ンタを入れる(図15中のステップ326)。共用メモ
リ・サブコントラクトのクライアント側は次いで、チャ
ネル・オブジェクト上でget_indexメソッドを
呼び出し、第1のデータ構造202のフィールド1 2
06の最初のオブジェクトJのハンドルを引数として渡
す(図15のステップ328)。共用メモリ・サブコン
トラクトのサーバ側は、最初のオブジェクトJ(引数と
して渡されたオブジェクト)の状態をインデックスに関
連付け、このインデックスを返す(330)。サブコン
トラクトのクライアント側は、サブコントラクトの第1
のデータ構造202のフィールド2208にこのインデ
ックスを入れる(図16中のステップ334)。このイ
ンデックスを使用してチャネル・オブジェクトに対して
行われた呼出しは、サーバによって最初のオブジェクト
Jの適当な状態に方向付けられる。インデックスについ
ては、図17に関して以下でさらに詳しく説明する。
【0141】図15ないし図16に示したこの初期設定
プロセス310では、サーバ定義域(316)へのチャ
ネルがすでに存在していることがステップ314で判定
された場合、ステップ320ないし324がスキップさ
れ、既存のチャネルを指すポインタが、呼出し側オブジ
ェクトの共用メモリサブコントラクトの第1のデータ構
造(図11中の202)のフィールド3 210に入れ
られる。その後、上述のように、図15中のステップ3
28で初期設定プロセスが継続する。
プロセス310では、サーバ定義域(316)へのチャ
ネルがすでに存在していることがステップ314で判定
された場合、ステップ320ないし324がスキップさ
れ、既存のチャネルを指すポインタが、呼出し側オブジ
ェクトの共用メモリサブコントラクトの第1のデータ構
造(図11中の202)のフィールド3 210に入れ
られる。その後、上述のように、図15中のステップ3
28で初期設定プロセスが継続する。
【0142】最初の呼出しを実行するプロセス(オブジ
ェクトJ上のメソッドA)(図12中の252)におい
て、「初期設定」プロセスについては前述のとおりであ
り、次に、最初の呼出しの処理が、図13ないし図14
に示したように継続する。共用メモリ・サブコントラク
トは、第2のデータ構造(図11中の204)中の情報
を使用して、確立された共用メモリ領域の内部にメソッ
ドA用の呼出し引数をマーシャルし(274)、共用メ
モリ領域中のどこから引数バッファが開始するかを示す
オフセット値を記録する。共用メモリ・サブコントラク
トは、(図11に示した第2のデータ構造204のフィ
ールドa 212から得た)チャネル・オブジェクト上
で、呼び出すべきメソッドA 276を呼び出し、(第
1のデータ構造202のフィールド2 208から得
た)インデックスおよびオフセット値を引数として渡
す。共用メモリ・サブコントラクト278のサーバ側
で、サーバは、受信されたインデックスおよびオフセッ
トが有効であるかどうかを判定する。有効でない場合
(280)、サーバは、図14中の292でエラー・コ
ードを返し、サブコントラクトのクライアント側は、呼
出しが失敗したと判定し(296)、バッファを解放し
て例外を発生させ(300)、クライアントにリターン
する(302)。
ェクトJ上のメソッドA)(図12中の252)におい
て、「初期設定」プロセスについては前述のとおりであ
り、次に、最初の呼出しの処理が、図13ないし図14
に示したように継続する。共用メモリ・サブコントラク
トは、第2のデータ構造(図11中の204)中の情報
を使用して、確立された共用メモリ領域の内部にメソッ
ドA用の呼出し引数をマーシャルし(274)、共用メ
モリ領域中のどこから引数バッファが開始するかを示す
オフセット値を記録する。共用メモリ・サブコントラク
トは、(図11に示した第2のデータ構造204のフィ
ールドa 212から得た)チャネル・オブジェクト上
で、呼び出すべきメソッドA 276を呼び出し、(第
1のデータ構造202のフィールド2 208から得
た)インデックスおよびオフセット値を引数として渡
す。共用メモリ・サブコントラクト278のサーバ側
で、サーバは、受信されたインデックスおよびオフセッ
トが有効であるかどうかを判定する。有効でない場合
(280)、サーバは、図14中の292でエラー・コ
ードを返し、サブコントラクトのクライアント側は、呼
出しが失敗したと判定し(296)、バッファを解放し
て例外を発生させ(300)、クライアントにリターン
する(302)。
【0143】図13中のステップ278で、インデック
スおよびオフセットが有効である(284)とサーバが
判定した場合、サーバは286で、インデックスを使用
して最初のオブジェクトJの処理系および共用メモリ領
域を見つけ、オフセットを使用して共用メモリ領域中の
マーシャルされたバッファを見つける。サーバは次い
で、最初のオブジェクトJ288上でメソッドAを呼び
出し、オブジェクト処理系の結果を共用メモリ領域28
8の同じバッファにマーシャルし、クライアント側サブ
コントラクト290にリターンする。呼出しが成功した
場合(298)、サブコントラクトのクライアント側
は、結果をマーシャル解除し、呼出し側クライアントへ
リターンできるようにクライアント・スタブに結果を渡
し、次の呼出しで再使用すべきバッファを開放する(3
02)。制御はクライアントに返される(304)。
スおよびオフセットが有効である(284)とサーバが
判定した場合、サーバは286で、インデックスを使用
して最初のオブジェクトJの処理系および共用メモリ領
域を見つけ、オフセットを使用して共用メモリ領域中の
マーシャルされたバッファを見つける。サーバは次い
で、最初のオブジェクトJ288上でメソッドAを呼び
出し、オブジェクト処理系の結果を共用メモリ領域28
8の同じバッファにマーシャルし、クライアント側サブ
コントラクト290にリターンする。呼出しが成功した
場合(298)、サブコントラクトのクライアント側
は、結果をマーシャル解除し、呼出し側クライアントへ
リターンできるようにクライアント・スタブに結果を渡
し、次の呼出しで再使用すべきバッファを開放する(3
02)。制御はクライアントに返される(304)。
【0144】チャネル・オブジェクトと最初のオブジェ
クトの関係のサーバ側処理系350をさらに示すため
に、次に図17を参照する。チャネル・オブジェクト処
理系状態352は、それぞれ、関係する最初のオブジェ
クトi360の処理系を指すインデックスi358およ
びポインタを含む、1つまたは複数の最初のオブジェク
ト・レコード356、364、372に連係リスト35
4によって接続される。たとえば、レコード356は、
関係する最初のオブジェクトi360の処理系を指すイ
ンデックスi358およびポインタを含む。当業者に
は、たとえばハッシュ・テーブルを使用することなど、
連係リスト以外のレコードのデータ構造の実施態様とし
て様々なデータ構造が可能であることが認識されよう。
クトの関係のサーバ側処理系350をさらに示すため
に、次に図17を参照する。チャネル・オブジェクト処
理系状態352は、それぞれ、関係する最初のオブジェ
クトi360の処理系を指すインデックスi358およ
びポインタを含む、1つまたは複数の最初のオブジェク
ト・レコード356、364、372に連係リスト35
4によって接続される。たとえば、レコード356は、
関係する最初のオブジェクトi360の処理系を指すイ
ンデックスi358およびポインタを含む。当業者に
は、たとえばハッシュ・テーブルを使用することなど、
連係リスト以外のレコードのデータ構造の実施態様とし
て様々なデータ構造が可能であることが認識されよう。
【0145】インデックス自体について、さらに説明す
る。好ましい実施の態様では、インデックスおよびチャ
ネル・オブジェクトが与えられた場合、クライアントか
ら呼出しを行った最初のオブジェクトのハンドルを算出
できるように、インデックスは、クライアントから呼出
しを行った最初のオブジェクトのハンドルおよびチャネ
ル・オブジェクトの関数として共用メモリ・サブコント
ラクトのサーバ側によって作成される。サーバは最初、
安全なチャネル・オブジェクトからこのインデックスを
算出する。したがって、インデックスは固有にかつ安全
に、特定の最初のオブジェクトを識別する。したがっ
て、共用メモリ・サブコントラクトのサーバ側が、イン
デックスおよびチャネル・オブジェクトを引数として含
む呼出しを受信したとき、このサーバは、クライアント
の呼出しを行った最初のオブジェクトのハンドルを逆算
し、このインデックスが、サーバが最初に導いたインデ
ックスであることを検証する。したがって、未知のオブ
ジェクトまたはクライアント側サブコントラクトが、他
の何らかの定義域から得たインデックスまたはチャネル
・オブジェクトでメソッドを呼び出そうとした場合、サ
ーバは、最初のオブジェクトの正しいハンドルを導くこ
とができず、エラー・インディケータを返す。
る。好ましい実施の態様では、インデックスおよびチャ
ネル・オブジェクトが与えられた場合、クライアントか
ら呼出しを行った最初のオブジェクトのハンドルを算出
できるように、インデックスは、クライアントから呼出
しを行った最初のオブジェクトのハンドルおよびチャネ
ル・オブジェクトの関数として共用メモリ・サブコント
ラクトのサーバ側によって作成される。サーバは最初、
安全なチャネル・オブジェクトからこのインデックスを
算出する。したがって、インデックスは固有にかつ安全
に、特定の最初のオブジェクトを識別する。したがっ
て、共用メモリ・サブコントラクトのサーバ側が、イン
デックスおよびチャネル・オブジェクトを引数として含
む呼出しを受信したとき、このサーバは、クライアント
の呼出しを行った最初のオブジェクトのハンドルを逆算
し、このインデックスが、サーバが最初に導いたインデ
ックスであることを検証する。したがって、未知のオブ
ジェクトまたはクライアント側サブコントラクトが、他
の何らかの定義域から得たインデックスまたはチャネル
・オブジェクトでメソッドを呼び出そうとした場合、サ
ーバは、最初のオブジェクトの正しいハンドルを導くこ
とができず、エラー・インディケータを返す。
【0146】好ましい実施の態様では、「組合せ」サブ
コントラクトによって、共用メモリ・サブコントラクト
の属性とSingletonサブコントラクトの属性を
組み合わせて、所与の最初のオブジェクトからの最初の
呼出し時に、組合せサブコントラクトが、サブコントラ
クトのサーバ側が分散システムまたはネットワーク・シ
ステム中のリモート・サーバ上にあるかどうかを判定
し、そうである場合、Singletonサブコントラ
クト・メソッドを使用し、サーバ側が同じ計算機上また
は適当に隣接するプロセッサ上にある場合は、共用メモ
リ・サブコントラクト・メソッドを使用することを提案
する。当業者には、これらのサブコントラクト機構の他
の様々な組合せが可能であることが認識されよう。
コントラクトによって、共用メモリ・サブコントラクト
の属性とSingletonサブコントラクトの属性を
組み合わせて、所与の最初のオブジェクトからの最初の
呼出し時に、組合せサブコントラクトが、サブコントラ
クトのサーバ側が分散システムまたはネットワーク・シ
ステム中のリモート・サーバ上にあるかどうかを判定
し、そうである場合、Singletonサブコントラ
クト・メソッドを使用し、サーバ側が同じ計算機上また
は適当に隣接するプロセッサ上にある場合は、共用メモ
リ・サブコントラクト・メソッドを使用することを提案
する。当業者には、これらのサブコントラクト機構の他
の様々な組合せが可能であることが認識されよう。
【0147】サブコントラクトの例 以下に、いくつかの例示的なサブコントラクトの概要を
示す。当業者には、本発明を実施するうえでこれらのタ
イプのうちの特定の1つのタイプが必要とされるわけで
はなく、他の多数のタイプのサブコントラクトが構想で
きることを理解されたい。要するに、これらのサブコン
トラクトの主要な特徴の簡単な概要を提示し、エラー条
件および特殊ケースの説明を省略する。
示す。当業者には、本発明を実施するうえでこれらのタ
イプのうちの特定の1つのタイプが必要とされるわけで
はなく、他の多数のタイプのサブコントラクトが構想で
きることを理解されたい。要するに、これらのサブコン
トラクトの主要な特徴の簡単な概要を提示し、エラー条
件および特殊ケースの説明を省略する。
【0148】すべての場合に、クライアント・アプリケ
ーション・コードが、オブジェクトを引数として渡す簡
単なスプリング・オブジェクト呼出ししか実行しないこ
とに留意されたい。サブコントラクトでは、説明したす
べての機構が隠される。
ーション・コードが、オブジェクトを引数として渡す簡
単なスプリング・オブジェクト呼出ししか実行しないこ
とに留意されたい。サブコントラクトでは、説明したす
べての機構が隠される。
【0149】クラスタ・サブコントラクト singletonサブコントラクトは、個別のスプリ
ング・オブジェクトとしてさらすことができるサーバ状
態の各部分ごとに異なるカーネル・ドアを使用する。カ
ーネルがドア識別子に対してcapability l
ike気密保護モデルを課すので、これは、異なる方法
で保護されるシステム資源へのアクセスを与えるために
使用されるオブジェクトに対して適切な処理系である。
ング・オブジェクトとしてさらすことができるサーバ状
態の各部分ごとに異なるカーネル・ドアを使用する。カ
ーネルがドア識別子に対してcapability l
ike気密保護モデルを課すので、これは、異なる方法
で保護されるシステム資源へのアクセスを与えるために
使用されるオブジェクトに対して適切な処理系である。
【0150】しかし、いくつかのサーバは、多数のオブ
ジェクトをエクスポートし、クライアントは、あるオブ
ジェクトへのアクセスを与えられた場合、すべてのオブ
ジェクトへのアクセスも得ることができる。この場合、
クライアントは、単一のドアを介して1組のオブジェク
トにアクセスできるようにシステム・オーバヘッドを低
減させることができる。
ジェクトをエクスポートし、クライアントは、あるオブ
ジェクトへのアクセスを与えられた場合、すべてのオブ
ジェクトへのアクセスも得ることができる。この場合、
クライアントは、単一のドアを介して1組のオブジェク
トにアクセスできるようにシステム・オーバヘッドを低
減させることができる。
【0151】クラスタ・サブコントラクトは、この概念
をサポートする。各クラスタ・オブジェクトは、ドア・
オブジェクトと整数タグの組合せによって表される。ク
ラスタinvoke_preamble動作とクラスタ
呼出し動作は協働して、ドア上で定義域間呼出しを実行
する際にサーバにタグを渡す。同様に、マーシャル・メ
ソッドおよびマーシャル解除メソッドは、ドア識別子と
整数タグを共に送受信する。
をサポートする。各クラスタ・オブジェクトは、ドア・
オブジェクトと整数タグの組合せによって表される。ク
ラスタinvoke_preamble動作とクラスタ
呼出し動作は協働して、ドア上で定義域間呼出しを実行
する際にサーバにタグを渡す。同様に、マーシャル・メ
ソッドおよびマーシャル解除メソッドは、ドア識別子と
整数タグを共に送受信する。
【0152】キャッシング・サブコントラクト サーバがそのクライアントとは異なる計算機上にあると
き、クライアント計算機上でキャッシングを実行すると
有用であることが多い。したがって、キャッシュ可能な
オブジェクトを計算機間で送信するとき、受信側マシン
が、受信したオブジェクトをローカル・キャッシュ・マ
ネージャに登録し、そのキャッシュを介してオブジェク
トにアクセスすることが望ましい。
き、クライアント計算機上でキャッシングを実行すると
有用であることが多い。したがって、キャッシュ可能な
オブジェクトを計算機間で送信するとき、受信側マシン
が、受信したオブジェクトをローカル・キャッシュ・マ
ネージャに登録し、そのキャッシュを介してオブジェク
トにアクセスすることが望ましい。
【0153】キャッシング・サブコントラクトは、この
機能を提供する。キャッシング・オブジェクトの表現
は、サーバを指すドア識別子DI1と、ローカル・キャ
ッシュを指すドア識別子DI2とを含む。
機能を提供する。キャッシング・オブジェクトの表現
は、サーバを指すドア識別子DI1と、ローカル・キャ
ッシュを指すドア識別子DI2とを含む。
【0154】キャッシング・オブジェクトを計算機間で
送信するとき、DI1ドア識別子のみを送信する。キャ
ッシング・マーシャル解除コードは、ローカル・キャッ
シュ・マネージャにDI1ドア識別子を提供し、新しい
DI2を受信する。このサブコントラクトは、呼出し動
作を実行するときは常に、DI2ドア識別子を使用す
る。したがって、キャッシュ可能なオブジェクトに対す
るすべての呼出しは、ローカル計算機上のキャッシュ・
マネージャに方向付けられる。この種のコントラクトの
使用法は、本出願と同じ日に出願され、引用によって本
明細書に合体された、関連出願第 号「A Meth
od and Apparatus for a Ca
ching File Server」に詳しく記載さ
れている。
送信するとき、DI1ドア識別子のみを送信する。キャ
ッシング・マーシャル解除コードは、ローカル・キャッ
シュ・マネージャにDI1ドア識別子を提供し、新しい
DI2を受信する。このサブコントラクトは、呼出し動
作を実行するときは常に、DI2ドア識別子を使用す
る。したがって、キャッシュ可能なオブジェクトに対す
るすべての呼出しは、ローカル計算機上のキャッシュ・
マネージャに方向付けられる。この種のコントラクトの
使用法は、本出願と同じ日に出願され、引用によって本
明細書に合体された、関連出願第 号「A Meth
od and Apparatus for a Ca
ching File Server」に詳しく記載さ
れている。
【0155】回復可能なサブコントラクト ある種のサーバは、安定な記憶域にサーバ自体の状態を
維持する。クライアントは、そのようなサーバに状態が
維持されたオブジェクトを有する場合、オブジェクトが
サーバ・クラッシュから自動的に回復できるようにする
ことを望む。サーバがクラッシュすると通常のスプリン
グドア識別子は無効になり、したがってクライアントが
サーバに再接続できるようにする何らかの新しい機構を
追加する必要がある。通常のドア識別子はcapabi
lity like特性を有するので、サーバ状態の所
与の部分を使用する資格があることをサーバに通知する
何らかの方法を有することも望ましい。
維持する。クライアントは、そのようなサーバに状態が
維持されたオブジェクトを有する場合、オブジェクトが
サーバ・クラッシュから自動的に回復できるようにする
ことを望む。サーバがクラッシュすると通常のスプリン
グドア識別子は無効になり、したがってクライアントが
サーバに再接続できるようにする何らかの新しい機構を
追加する必要がある。通常のドア識別子はcapabi
lity like特性を有するので、サーバ状態の所
与の部分を使用する資格があることをサーバに通知する
何らかの方法を有することも望ましい。
【0156】回復可能なサブコントラクトは、通常のド
ア識別子と、回復マネージャの名前と、暗号で署名され
た証明書とから成る表現を使用する。サーバは、回復可
能なオブジェクトを渡すとき、このオブジェクトが資格
を有するアクセスを記述する証明書を作成し、従来型の
暗号署名を使用してこの証明書に署名する。
ア識別子と、回復マネージャの名前と、暗号で署名され
た証明書とから成る表現を使用する。サーバは、回復可
能なオブジェクトを渡すとき、このオブジェクトが資格
を有するアクセスを記述する証明書を作成し、従来型の
暗号署名を使用してこの証明書に署名する。
【0157】通常、回復可能な呼出しコードは、簡単な
ドア呼出しをドア識別子上で実行するに過ぎない。しか
し、これが失敗した場合、このサブコントラクトはその
代わりに、回復マネージャを呼び出し、サブコントラク
ト自体の証明書を提示して、サーバが回復したときに通
知することを要求する。サーバは、リブートすると、回
復マネージャと連絡を取り、証明書を使用してアクセス
を有効化し、クライアントが動作を再開できるように新
しいドア識別子をクライアントに与える。
ドア呼出しをドア識別子上で実行するに過ぎない。しか
し、これが失敗した場合、このサブコントラクトはその
代わりに、回復マネージャを呼び出し、サブコントラク
ト自体の証明書を提示して、サーバが回復したときに通
知することを要求する。サーバは、リブートすると、回
復マネージャと連絡を取り、証明書を使用してアクセス
を有効化し、クライアントが動作を再開できるように新
しいドア識別子をクライアントに与える。
【0158】repliconサブコントラクト repliconサブコントラクトは、複製されたサー
ビスを扱う極めて簡単なサブコントラクトである。
ビスを扱う極めて簡単なサブコントラクトである。
【0159】repliconオブジェクトの状態は、
ドア識別子のベクトルから成る。repliconオブ
ジェクトは、呼出しを実行する際、1つの呼出しが成功
するまで、各ドア識別子上で順に定義域呼出しを発行し
ようとする。
ドア識別子のベクトルから成る。repliconオブ
ジェクトは、呼出しを実行する際、1つの呼出しが成功
するまで、各ドア識別子上で順に定義域呼出しを発行し
ようとする。
【0160】repliconサブコントラクトに容易
に追加できる多数の追加機能がある。たとえば、ドア識
別子のベクトルだけでなく、現サーバ構成の構成タグを
追跡することもできる。サーバ呼出しが実行されるとき
はいつでも、この構成タグを送信することができる。サ
ーバは、(サーバがリブートしたため、あるいはロード
の平衡のために)構成を変更したい場合、ドア識別子の
新しいベクトルおよび構成idを結果バッファ上にピギ
ーバックすることができる。
に追加できる多数の追加機能がある。たとえば、ドア識
別子のベクトルだけでなく、現サーバ構成の構成タグを
追跡することもできる。サーバ呼出しが実行されるとき
はいつでも、この構成タグを送信することができる。サ
ーバは、(サーバがリブートしたため、あるいはロード
の平衡のために)構成を変更したい場合、ドア識別子の
新しいベクトルおよび構成idを結果バッファ上にピギ
ーバックすることができる。
【0161】サブコントラクトの反射 サブコントラクトが有効である1つの理由は、サブコン
トラクトでは、オブジェクトを実施する動作がオブジェ
クト機構を実施する動作から分離されることである。サ
ブコントラクト・インプリメンタは、あらゆるオブジェ
クト・インプリメンタがオブジェクト処理系機構の詳細
を知ることを必要とせずに一連の異なるオブジェクト方
式のうちの1つを選択できるようにする1組の有用なサ
ブコントラクトを提供する。
トラクトでは、オブジェクトを実施する動作がオブジェ
クト機構を実施する動作から分離されることである。サ
ブコントラクト・インプリメンタは、あらゆるオブジェ
クト・インプリメンタがオブジェクト処理系機構の詳細
を知ることを必要とせずに一連の異なるオブジェクト方
式のうちの1つを選択できるようにする1組の有用なサ
ブコントラクトを提供する。
【0162】サブコントラクトが提供する1組の動作
は、分散環境内の制御を得るための適切なキーのような
ものである。設計上、リモート・オブジェクトに対して
とられるすべてのキー処置は、オブジェクトのサブコン
トラクトを何らかの方法で使用する。
は、分散環境内の制御を得るための適切なキーのような
ものである。設計上、リモート・オブジェクトに対して
とられるすべてのキー処置は、オブジェクトのサブコン
トラクトを何らかの方法で使用する。
【0163】実際、サブコントラクトは、基本システム
によって提供しなければならない機能を低減させること
に成功した。基本システム中の新しい機構の必要なし
で、いくつかの新しく興味深いサブコントラクトを実施
した。
によって提供しなければならない機能を低減させること
に成功した。基本システム中の新しい機構の必要なし
で、いくつかの新しく興味深いサブコントラクトを実施
した。
【0164】互換性のあるサブコントラクト機構とサブ
コントラクトの動的リンクとは、既存のオペレーティン
グ・システムを変更せずに、新しいサブコントラクトを
導入して古いSPRINGシステム上で利用できること
を意味する。
コントラクトの動的リンクとは、既存のオペレーティン
グ・システムを変更せずに、新しいサブコントラクトを
導入して古いSPRINGシステム上で利用できること
を意味する。
【0165】
【実施例】好ましい実施例では、当業者は、以下のイン
タフェース定義コード・リストを参照することによっ
て、本明細書で説明したサブコントラクト機構をよりよ
く理解することができる。 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− //説明を明確にするために、以下のコード化例では、エラー処理コードを省略 してある。実際は、説明した多数のメソッドは、エラー条件があるかどうかを検 査する追加コードを有し、エラーに出会った場合は適当な例外を発生させる。 typedef int bool; //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− //communication_endpointクラスは、リモート計算機 との間でメッセージを送受信するために使用できる通信エンドポイントを記述す る。ここでは、以下の例を示すために部分的な記述のみを提示する。 class communication_endpoint{ //様々なプライベート・データ・フィールド public: //既存の通信エンドポイントをコピーするコンストラクタ communication_endpoint(communicatio n_endpoint*old_endpoint); //メッセージをターゲットへ送信して応答メッセージを得るメソッド class message*send_message_and_get_ reply(message*m); //他の様々なメソッド }: //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− //「メッセージ」クラスは、メッセージ・バッファを記述し、メッセージ・バ ッファとの間でメッセージの読取りおよび書込みを行うメソッドを提供する。こ こでは、以下のサブコントラクト例を示すのに十分な部分的な記述のみを提示す る。 class message{ //様々なプライベート・データ・フィールド public: int get_int(); //整数を読み取る。 void put_int(int x);//整数を書き込む。 int peek_int();//次の整数を見る。 //communication_endpointをメッセージから読み取 る。 communication_endpoint*get_communic ation_endpoint(); //communication_endpointをメッセージに書き込む 。 void put_communication_endpoint(com munication_endpoint*x); //他の様々なメソッド }: //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− //クラス「サブコントラクト」は、各サブコントラクトがサポートしなければ ならないメソッドを定義するC++仮想基本クラスである。 class subcontract{ public: virtual void invoke_preamble(messag e*m,int method_number)=0; virtual message*invoke(message*m, i nt method_number)=0; virtual void consume()=0; virtual subcontract*copy()=0; virtual void marshal_consume(messag e*m)=0; virtual void marshal_copy(message*m )=0; }: //このtypedefは、標準マーシャル解除静的メソッドのタイプを記述す るものである。 typedef subcontract*(*subcontract_un marshal_method)(message*); //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− //subcontract_registryは、現プログラムに知られてい るすべてのサブコントラクトを追跡する。 //「register_subcontract」メソッドは、新しいサブコ ントラクトをレジストリに追加するために使用することができる。 //「マーシャル解除」メソッドは、誰かが未知のサブコントラクトをメッセー ジからマーシャル解除したいときに使用することができる。 class subcontract_registry{ public: static void register_subcontract(in tsubcontract_id,subcontract_un marshal_method m); static subcontract*unmarshal(messag e*m); }; //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− //クラスsimple_subcontractは、簡単なサブコントラクト 例である。simple_subcontractは、「サブコントラクト」ク ラスによって定義されたインタフェースから継承し、「サブコントラクト」に指 定された様々な仮想メソッド定義を満たすメソッド定義を提供する。simpl e_subcontractは、サブコントラクト・オブジェクトをメッセージ から読み取るために使用できる「マーシャル解除」メソッドも提供する。 class simple_subcontract:public subc ontract{ //C++プライベート・データは、リモート・オブジェクトの「表現」と呼 ばれるものを構成する。 //このサブコントラクトは、単一のcommunication_endp ointしか使用しない。 //他のサブコントラクトは複数のエンドポイントを使用することができる。 communication_endpoint*port; public: const int subcontract_id= 0x55550004; void invoke_preamble(message*m, int method_number); message*invoke(message*m,int method_number); void consume(); subcontract*copy(); void marshal_consume(message*m); void marshal_copy(message*m); static subcontract*unmarshal(messag e*m); }; //プログラム始動の一部として、simple_subcontractをs ubcontract_registryに登録するグローバル・イニシャライ ザを定義する。 static int register_simple_subcontract() { subcontract_registry::register_subc ontract( simple_subcontract::subcontract_ id, &simple_subcontract::unmarshal); return(1); } int force_simple_subcontract_registr ation=register_simple_subco ntract(); //simple_subcontractによるinvoke_preamb leメソッドの使用は非常に限られたものであり、このメソッドではメソッド番 号がメッセージ中に置かれるに過ぎない。 void simple_subcontract::invoke_preamble( message*m,int method_number) { m−>put_int(method_number); } //simple_subcontractは、低レベル・コードを呼び出し、 実際にメッセージを送信して応答を得ることによって、呼出しを実施する。 message* simple_subcontract::invoke(message* m,int method_number) { //これは、最も簡単な種類の呼出しである。他の種類のサブコントラクトは 、複数の通信エンドポイントなどを呼び出す必要があることがある。 message*reply; reply=port−>send_message_and_get_re ply(m); return(reply); } //simple_subcontract consumeメソッドは、現サ ブコントラクトに関連するすべての状態を検出する。 void simple_subcontract::consume() { delete port; delete this; } //simple_subcontract copyメソッドは、現サブコン トラクト・オブジェクトのコピーである新しいサブコントラクト・オブジェクト を作成する。 subcontract* simple_subcontract::copy() { simple_subcontract*result=new simpl e_subcontract(); //通信エンドポイントのコピーを作成する。 result−>port=new communication_endp oint(port); return(result); } //simple_subcontract marshal_consume メソッドは、サブコントラクト・オブジェクトをマーシャルし、次いで削除する 。 void simple_subcontract::marshal_consume( message*m) { //まずサブコントラクト識別子をマーシャルする。 m−>put_int(subcontract_id); //次に自分のcommunication_endpointをマーシャル する。 m−>put_communication_endpoint(port) ; //次に自分自身を削除する。 consume(); } //simple_subcontract marshal_copyメソッ ドは、「copy」の効果と「marshal_consume」の効果を組み 合わせる。これは容易である。「copy」オブジェクトを作成して削除するこ とを不要にすることができ、その代わりに単に現オブジェクトの状態をマーシャ ルすることができる。 void simple_subcontract::marshal_copy(mes sage*m) { //まず自分のサブコントラクト識別子をマーシャルする。 m−>put_int(subcontract_id) //次に自分のcommunication_endpointをマーシャル する。 m−>put_communication_endpoint(port) ; } //「simple_subcontract::unmarshal」静的メ ソッドは、メッセージ中の次のものが実際に、「simple_subcont ract」を使用するオブジェクトであるかどうかを調べる検査を行う。 //そうである場合、このメソッドは新しいsimple_subcontra ctを作成し、必要な情報をメッセージから読みとってsimple_subc ontractを初期設定する。 //メッセージ中の次のものがsimple_subcontractオブジェ クトでない場合、subcontract_registryを呼び出し、それ が実際にはどのサブコントラクトであるかを調べてマーシャル解除を完了する。 subcontract* simple_subcontract::unmarshal(messag e*m) { //メッセージ中の次の値を見る。 int next_value=m−>peek_int(); if(next_value==subcontract_id){ //このメッセージは、simple_subcontractオブジェク トを含んでおり、したがってそれを読み取る。 int discard_value=m−>get_int(); simple_subcontract*result=new simp le_subcontract(); result−>port=m−>get_communication_ endpoint(); return(result); }else{ return(subcontract_registry::unmar shal(m)); } } //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− void subcontract_registry::register_subco ntract(int subcontract_id, subcontract_unmarshal_metho d m) { //このコードは、所与のサブコントラクトidおよびマーシャル解除メソッ ドを、知られているサブコントラクトのテーブルに追加する。 //... } subcontract* subcontract_registry::unmarshal(mess age*m) { int subcontract_id=m−>peek_int(); //このコードは、サブコントラクトのテーブルで新しいsubcontrac t_idを探そうとする。 subcontract_unmarshal_method*sum=tab le_lookup(subcontract_id); if(sum==0){ //所与のsubcontract_idが分からない。 //適当な動的ライブラリを見つけてそれをアドレス空間に追加してみる。一 例として、サブコントラクトIDからサブコントラクト・ライブラリへの非常 に簡単なマッピングを使用する。 char library_name[100]; sprintf(library_name,”/usr/lib/subc ontract/%d.so”,subcontract _id); load_dynamic_library(library_name); //動的ライブラリをロードする動作によって、ライブラリの初期設定関数が 呼び出され、それによって初期設定関数は、それがサポートするサブコントラ クト上でsubcontract_registry::register_ subcontractを呼び出す。 //したがって、サブコントラクトidが分かったかどうかをもう一度調べる 。 sum=table_lookup(subcontract_id); if(sum==0){ //失敗した。 //ここで例外を発生させるべきである。 }else{ //次に、サブコントラクトidが分かり、次いで、マーシャル解除を行う ことができる。 } } //所与のサブコントラクト・メソッドを使用してオブジェクトをマーシャル 解除する。このメソッドはたとえば、simple_subcontract ::unmarshalメソッドでよい。あるいは、他のサブコントラクト用 の類似のマーシャル解除メソッドでもよい。 subcontract*result=(*sum)(m); return(result); } //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− //次に、simple_subcontractを使用するオブジェクトの簡 単な例を与える。 //クラス「wombat」は、インタフェース定義言語では、「give_b irth」と「meet」の2つのメソッドを有するものとして定義されている 。「give_birth」は新しいwombatを作成する。「meet」は 他のwombatを引数として取り出す。 // // interface wombat{ // wombat give_birth(); // void meet(copy wombat w,copy int age); // }; // //また、wombatの省略時サブコントラクトがsimple_subco ntractであることをスタブ・ジェネレータに指定する。 // //このインタフェース定義は、以下のクラス「wombat」および「rem ote_wombat」用のC++クライアント・スタブに変換される。 class wombat{ //これは、「wombat」インタフェース用の仮想基本クラスである。w ombatのリモート処理系にもwombatのローカル処理系にも適した様 々な種類の具体的なwombatクラスをこのインタフェースから導くことが できる。現議論では、以下の「remote_wombat」のみについて考 える。 public: virtualwombat*give_birth()=0; virtual void meet(wombat*w,int age) =0; //wombatsのマーシャルおよびマーシャル解除のサポート virtual void consume()=0; virtual wombat*copy()=0; virtual void marshal_consume(messag e*m)=0; virtual void marshal_copy(message*m )=0; }; class remote_wombat:public wombat{ //remote_wombatクラスはサブコントラクトに基づくものであ る。 //クラス・メソッドのすべての作業は、サブコントラクトscによって提供 されるサポート上に作成される。 private: subcontract*sc; remote_wombat(subcontract*scl); public: wombat*give_birth(); void meet(wombat*w,int age); //wombatsのマーシャルおよびマーシャル解除のサポート static wombat*unmarshal(message*m); void consume(); wombat*copy(); void marshal_consume(message*m); void marshal_copy(message*m); }; remote_wombat::remote_wombat(subcont ract*scl) { sc=scl; } wombat* remote_wombat::unmarshal(message*m) { //省略時サブコントラクトはsimple_subcontractである が、simple_subcontract::unmarshal動作は、 他の種類のサブコントラクト・オブジェクトを返すことを選択することができ る。 subcontract*sc=simple_subcontract:: unmarshal(m); return(new remote_wombat(sc)); } void remote_wombat::consume() { sc−>consume(); } wombat* remote_wombat::copy() { subcontract*sc2=sc−.copy(); return(new remote_wombat(sc2)); } void remote_wombat::marshal_consume(messa ge*m) { sc−>marshal_consume(m); } void remote_wombat::marshal_copy(message* m) { sc−>marshal_copy(m); } wombat* remote_wombat::give_birth() { //実際の「remote_wombat」サーバを呼び出して新しいrem ote_wombatを作成する。「give_birth」メソッド用のメ ソッド識別子として「7」を割り振った。 //発呼用のメッセージを作成する。 message*m=new message(); //サブコントラクトにプリアンブルをセットアップさせる。 sc−>invoke_preamble(m,7); //マーシャルすべき引数はない。 //リモート・サーバを呼び出すようサブコントラクトに命令する。 //応答データを含む新しいメッセージが返される。 m=sc−>invoke(m,7); //結果をマーシャル解除する。これはリモート呼出しであり、したがってr emote_wombat unmarshalメソッドを使用する。 wombat*result=remote_wombat::unmars hal(m); //終了である。応答メッセージを削除してリターンする。 delete m; return(result); } void remote_wombat::meet(wombat*w,int age ) { //実際の「remote_wombat」サーバを呼び出して「meet」 メソッドを実施する。「meet」メソッド用のメソッド識別子として「8」 を割り振った。 //発呼用のメッセージを作成する。 message*m=new message(); //サブコントラクトにプリアンブルをセットアップさせる。 sc−invoke_preamble(m,8); //引数wombat”w”のコピーをマーシャルする。 w−>marshal_copy(m); //age引数をマーシャルする。 m−>put_int(age); //リモート・サーバを呼び出すようサブコントラクトに命令する。 //応答データを含む新しいメッセージが返される。 m=sc−>invoke(m,8); //結果はない。 //終了である。応答メッセージを削除してリターンする。 delete m; } //したがって、C++wombatオブジェクトを得たクライアントはオブジ ェクトに対する動作を実行することができ、サブコントラクトがwombatご とに異なるものであっても、正しいスタブおよびサブコントラクトが呼び出され る。 main() { //プログラムは次に、名前サーバなどあるソースから最初のwombatを 得る。 wombat*mother=name_service_lookup<w ombat>(”susie”); //次にwombat動作を実行することができる。 wombat*child=mother−>give_birth(); mother−>meet(child,0); } 特定のオペレーティング・システム環境での好ましい実
施例に関して本発明を説明したが、当業者には、添付の
特許請求の範囲の趣旨および範囲内で、他の異なるオペ
レーティング・システムで、修正を加えたうえで本発明
を実施できることが認識されよう。
タフェース定義コード・リストを参照することによっ
て、本明細書で説明したサブコントラクト機構をよりよ
く理解することができる。 //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− //説明を明確にするために、以下のコード化例では、エラー処理コードを省略 してある。実際は、説明した多数のメソッドは、エラー条件があるかどうかを検 査する追加コードを有し、エラーに出会った場合は適当な例外を発生させる。 typedef int bool; //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− //communication_endpointクラスは、リモート計算機 との間でメッセージを送受信するために使用できる通信エンドポイントを記述す る。ここでは、以下の例を示すために部分的な記述のみを提示する。 class communication_endpoint{ //様々なプライベート・データ・フィールド public: //既存の通信エンドポイントをコピーするコンストラクタ communication_endpoint(communicatio n_endpoint*old_endpoint); //メッセージをターゲットへ送信して応答メッセージを得るメソッド class message*send_message_and_get_ reply(message*m); //他の様々なメソッド }: //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− //「メッセージ」クラスは、メッセージ・バッファを記述し、メッセージ・バ ッファとの間でメッセージの読取りおよび書込みを行うメソッドを提供する。こ こでは、以下のサブコントラクト例を示すのに十分な部分的な記述のみを提示す る。 class message{ //様々なプライベート・データ・フィールド public: int get_int(); //整数を読み取る。 void put_int(int x);//整数を書き込む。 int peek_int();//次の整数を見る。 //communication_endpointをメッセージから読み取 る。 communication_endpoint*get_communic ation_endpoint(); //communication_endpointをメッセージに書き込む 。 void put_communication_endpoint(com munication_endpoint*x); //他の様々なメソッド }: //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− //クラス「サブコントラクト」は、各サブコントラクトがサポートしなければ ならないメソッドを定義するC++仮想基本クラスである。 class subcontract{ public: virtual void invoke_preamble(messag e*m,int method_number)=0; virtual message*invoke(message*m, i nt method_number)=0; virtual void consume()=0; virtual subcontract*copy()=0; virtual void marshal_consume(messag e*m)=0; virtual void marshal_copy(message*m )=0; }: //このtypedefは、標準マーシャル解除静的メソッドのタイプを記述す るものである。 typedef subcontract*(*subcontract_un marshal_method)(message*); //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− //subcontract_registryは、現プログラムに知られてい るすべてのサブコントラクトを追跡する。 //「register_subcontract」メソッドは、新しいサブコ ントラクトをレジストリに追加するために使用することができる。 //「マーシャル解除」メソッドは、誰かが未知のサブコントラクトをメッセー ジからマーシャル解除したいときに使用することができる。 class subcontract_registry{ public: static void register_subcontract(in tsubcontract_id,subcontract_un marshal_method m); static subcontract*unmarshal(messag e*m); }; //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− //クラスsimple_subcontractは、簡単なサブコントラクト 例である。simple_subcontractは、「サブコントラクト」ク ラスによって定義されたインタフェースから継承し、「サブコントラクト」に指 定された様々な仮想メソッド定義を満たすメソッド定義を提供する。simpl e_subcontractは、サブコントラクト・オブジェクトをメッセージ から読み取るために使用できる「マーシャル解除」メソッドも提供する。 class simple_subcontract:public subc ontract{ //C++プライベート・データは、リモート・オブジェクトの「表現」と呼 ばれるものを構成する。 //このサブコントラクトは、単一のcommunication_endp ointしか使用しない。 //他のサブコントラクトは複数のエンドポイントを使用することができる。 communication_endpoint*port; public: const int subcontract_id= 0x55550004; void invoke_preamble(message*m, int method_number); message*invoke(message*m,int method_number); void consume(); subcontract*copy(); void marshal_consume(message*m); void marshal_copy(message*m); static subcontract*unmarshal(messag e*m); }; //プログラム始動の一部として、simple_subcontractをs ubcontract_registryに登録するグローバル・イニシャライ ザを定義する。 static int register_simple_subcontract() { subcontract_registry::register_subc ontract( simple_subcontract::subcontract_ id, &simple_subcontract::unmarshal); return(1); } int force_simple_subcontract_registr ation=register_simple_subco ntract(); //simple_subcontractによるinvoke_preamb leメソッドの使用は非常に限られたものであり、このメソッドではメソッド番 号がメッセージ中に置かれるに過ぎない。 void simple_subcontract::invoke_preamble( message*m,int method_number) { m−>put_int(method_number); } //simple_subcontractは、低レベル・コードを呼び出し、 実際にメッセージを送信して応答を得ることによって、呼出しを実施する。 message* simple_subcontract::invoke(message* m,int method_number) { //これは、最も簡単な種類の呼出しである。他の種類のサブコントラクトは 、複数の通信エンドポイントなどを呼び出す必要があることがある。 message*reply; reply=port−>send_message_and_get_re ply(m); return(reply); } //simple_subcontract consumeメソッドは、現サ ブコントラクトに関連するすべての状態を検出する。 void simple_subcontract::consume() { delete port; delete this; } //simple_subcontract copyメソッドは、現サブコン トラクト・オブジェクトのコピーである新しいサブコントラクト・オブジェクト を作成する。 subcontract* simple_subcontract::copy() { simple_subcontract*result=new simpl e_subcontract(); //通信エンドポイントのコピーを作成する。 result−>port=new communication_endp oint(port); return(result); } //simple_subcontract marshal_consume メソッドは、サブコントラクト・オブジェクトをマーシャルし、次いで削除する 。 void simple_subcontract::marshal_consume( message*m) { //まずサブコントラクト識別子をマーシャルする。 m−>put_int(subcontract_id); //次に自分のcommunication_endpointをマーシャル する。 m−>put_communication_endpoint(port) ; //次に自分自身を削除する。 consume(); } //simple_subcontract marshal_copyメソッ ドは、「copy」の効果と「marshal_consume」の効果を組み 合わせる。これは容易である。「copy」オブジェクトを作成して削除するこ とを不要にすることができ、その代わりに単に現オブジェクトの状態をマーシャ ルすることができる。 void simple_subcontract::marshal_copy(mes sage*m) { //まず自分のサブコントラクト識別子をマーシャルする。 m−>put_int(subcontract_id) //次に自分のcommunication_endpointをマーシャル する。 m−>put_communication_endpoint(port) ; } //「simple_subcontract::unmarshal」静的メ ソッドは、メッセージ中の次のものが実際に、「simple_subcont ract」を使用するオブジェクトであるかどうかを調べる検査を行う。 //そうである場合、このメソッドは新しいsimple_subcontra ctを作成し、必要な情報をメッセージから読みとってsimple_subc ontractを初期設定する。 //メッセージ中の次のものがsimple_subcontractオブジェ クトでない場合、subcontract_registryを呼び出し、それ が実際にはどのサブコントラクトであるかを調べてマーシャル解除を完了する。 subcontract* simple_subcontract::unmarshal(messag e*m) { //メッセージ中の次の値を見る。 int next_value=m−>peek_int(); if(next_value==subcontract_id){ //このメッセージは、simple_subcontractオブジェク トを含んでおり、したがってそれを読み取る。 int discard_value=m−>get_int(); simple_subcontract*result=new simp le_subcontract(); result−>port=m−>get_communication_ endpoint(); return(result); }else{ return(subcontract_registry::unmar shal(m)); } } //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− void subcontract_registry::register_subco ntract(int subcontract_id, subcontract_unmarshal_metho d m) { //このコードは、所与のサブコントラクトidおよびマーシャル解除メソッ ドを、知られているサブコントラクトのテーブルに追加する。 //... } subcontract* subcontract_registry::unmarshal(mess age*m) { int subcontract_id=m−>peek_int(); //このコードは、サブコントラクトのテーブルで新しいsubcontrac t_idを探そうとする。 subcontract_unmarshal_method*sum=tab le_lookup(subcontract_id); if(sum==0){ //所与のsubcontract_idが分からない。 //適当な動的ライブラリを見つけてそれをアドレス空間に追加してみる。一 例として、サブコントラクトIDからサブコントラクト・ライブラリへの非常 に簡単なマッピングを使用する。 char library_name[100]; sprintf(library_name,”/usr/lib/subc ontract/%d.so”,subcontract _id); load_dynamic_library(library_name); //動的ライブラリをロードする動作によって、ライブラリの初期設定関数が 呼び出され、それによって初期設定関数は、それがサポートするサブコントラ クト上でsubcontract_registry::register_ subcontractを呼び出す。 //したがって、サブコントラクトidが分かったかどうかをもう一度調べる 。 sum=table_lookup(subcontract_id); if(sum==0){ //失敗した。 //ここで例外を発生させるべきである。 }else{ //次に、サブコントラクトidが分かり、次いで、マーシャル解除を行う ことができる。 } } //所与のサブコントラクト・メソッドを使用してオブジェクトをマーシャル 解除する。このメソッドはたとえば、simple_subcontract ::unmarshalメソッドでよい。あるいは、他のサブコントラクト用 の類似のマーシャル解除メソッドでもよい。 subcontract*result=(*sum)(m); return(result); } //−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−− //次に、simple_subcontractを使用するオブジェクトの簡 単な例を与える。 //クラス「wombat」は、インタフェース定義言語では、「give_b irth」と「meet」の2つのメソッドを有するものとして定義されている 。「give_birth」は新しいwombatを作成する。「meet」は 他のwombatを引数として取り出す。 // // interface wombat{ // wombat give_birth(); // void meet(copy wombat w,copy int age); // }; // //また、wombatの省略時サブコントラクトがsimple_subco ntractであることをスタブ・ジェネレータに指定する。 // //このインタフェース定義は、以下のクラス「wombat」および「rem ote_wombat」用のC++クライアント・スタブに変換される。 class wombat{ //これは、「wombat」インタフェース用の仮想基本クラスである。w ombatのリモート処理系にもwombatのローカル処理系にも適した様 々な種類の具体的なwombatクラスをこのインタフェースから導くことが できる。現議論では、以下の「remote_wombat」のみについて考 える。 public: virtualwombat*give_birth()=0; virtual void meet(wombat*w,int age) =0; //wombatsのマーシャルおよびマーシャル解除のサポート virtual void consume()=0; virtual wombat*copy()=0; virtual void marshal_consume(messag e*m)=0; virtual void marshal_copy(message*m )=0; }; class remote_wombat:public wombat{ //remote_wombatクラスはサブコントラクトに基づくものであ る。 //クラス・メソッドのすべての作業は、サブコントラクトscによって提供 されるサポート上に作成される。 private: subcontract*sc; remote_wombat(subcontract*scl); public: wombat*give_birth(); void meet(wombat*w,int age); //wombatsのマーシャルおよびマーシャル解除のサポート static wombat*unmarshal(message*m); void consume(); wombat*copy(); void marshal_consume(message*m); void marshal_copy(message*m); }; remote_wombat::remote_wombat(subcont ract*scl) { sc=scl; } wombat* remote_wombat::unmarshal(message*m) { //省略時サブコントラクトはsimple_subcontractである が、simple_subcontract::unmarshal動作は、 他の種類のサブコントラクト・オブジェクトを返すことを選択することができ る。 subcontract*sc=simple_subcontract:: unmarshal(m); return(new remote_wombat(sc)); } void remote_wombat::consume() { sc−>consume(); } wombat* remote_wombat::copy() { subcontract*sc2=sc−.copy(); return(new remote_wombat(sc2)); } void remote_wombat::marshal_consume(messa ge*m) { sc−>marshal_consume(m); } void remote_wombat::marshal_copy(message* m) { sc−>marshal_copy(m); } wombat* remote_wombat::give_birth() { //実際の「remote_wombat」サーバを呼び出して新しいrem ote_wombatを作成する。「give_birth」メソッド用のメ ソッド識別子として「7」を割り振った。 //発呼用のメッセージを作成する。 message*m=new message(); //サブコントラクトにプリアンブルをセットアップさせる。 sc−>invoke_preamble(m,7); //マーシャルすべき引数はない。 //リモート・サーバを呼び出すようサブコントラクトに命令する。 //応答データを含む新しいメッセージが返される。 m=sc−>invoke(m,7); //結果をマーシャル解除する。これはリモート呼出しであり、したがってr emote_wombat unmarshalメソッドを使用する。 wombat*result=remote_wombat::unmars hal(m); //終了である。応答メッセージを削除してリターンする。 delete m; return(result); } void remote_wombat::meet(wombat*w,int age ) { //実際の「remote_wombat」サーバを呼び出して「meet」 メソッドを実施する。「meet」メソッド用のメソッド識別子として「8」 を割り振った。 //発呼用のメッセージを作成する。 message*m=new message(); //サブコントラクトにプリアンブルをセットアップさせる。 sc−invoke_preamble(m,8); //引数wombat”w”のコピーをマーシャルする。 w−>marshal_copy(m); //age引数をマーシャルする。 m−>put_int(age); //リモート・サーバを呼び出すようサブコントラクトに命令する。 //応答データを含む新しいメッセージが返される。 m=sc−>invoke(m,8); //結果はない。 //終了である。応答メッセージを削除してリターンする。 delete m; } //したがって、C++wombatオブジェクトを得たクライアントはオブジ ェクトに対する動作を実行することができ、サブコントラクトがwombatご とに異なるものであっても、正しいスタブおよびサブコントラクトが呼び出され る。 main() { //プログラムは次に、名前サーバなどあるソースから最初のwombatを 得る。 wombat*mother=name_service_lookup<w ombat>(”susie”); //次にwombat動作を実行することができる。 wombat*child=mother−>give_birth(); mother−>meet(child,0); } 特定のオペレーティング・システム環境での好ましい実
施例に関して本発明を説明したが、当業者には、添付の
特許請求の範囲の趣旨および範囲内で、他の異なるオペ
レーティング・システムで、修正を加えたうえで本発明
を実施できることが認識されよう。
【図1】 従来技術でのクライアント・アプリケーショ
ンおよびサーバ・アプリケーションのスタブおよびネッ
トワーク・ソフトウェアとの関係を示す図である。
ンおよびサーバ・アプリケーションのスタブおよびネッ
トワーク・ソフトウェアとの関係を示す図である。
【図2】 SPRINGオペレーティング・システムの
主要なシステム構成要素を示す図である。
主要なシステム構成要素を示す図である。
【図3】 スタブ・オブジェクトとサブコントラクト・
オブジェクトとサーバ・アプリケーション・オブジェク
トの関係を示す図である。
オブジェクトとサーバ・アプリケーション・オブジェク
トの関係を示す図である。
【図4】 サブコントラクトを使用するリモート・オブ
ジェクト呼出しを示す図である。
ジェクト呼出しを示す図である。
【図5】 サブコントラクトを使用する単一の計算機上
でのオブジェクト呼出しを示す図である。
でのオブジェクト呼出しを示す図である。
【図6】 本発明のサブコントラクト方法の典型的な使
用法のフロー・チャートを示す図である。
用法のフロー・チャートを示す図である。
【図7】 本発明のサブコントラクト方法の典型的な使
用法のフロー・チャートを示す図である。
用法のフロー・チャートを示す図である。
【図8】 本発明のサブコントラクト方法の典型的な使
用法のフロー・チャートを示す図である。
用法のフロー・チャートを示す図である。
【図9】 本発明のサブコントラクト方法の典型的な使
用法のフロー・チャートを示す図である。
用法のフロー・チャートを示す図である。
【図10】 SPRINGのオブジェクトのビューと従
来技術のオブジェクトのビューである。
来技術のオブジェクトのビューである。
【図11】 共用メモリ・サブコントラクト中の典型的
なデータ構造を示す図である。
なデータ構造を示す図である。
【図12】 共用メモリ・サブコントラクト上での呼出
しを処理する典型的な方法のフロー・チャートを示す図
である。
しを処理する典型的な方法のフロー・チャートを示す図
である。
【図13】 共用メモリ・サブコントラクト上での呼出
しを処理する典型的な方法のフロー・チャートを示す図
である。
しを処理する典型的な方法のフロー・チャートを示す図
である。
【図14】 共用メモリ・サブコントラクト上での呼出
しを処理する典型的な方法のフロー・チャートを示す図
である。
しを処理する典型的な方法のフロー・チャートを示す図
である。
【図15】 共用メモリ・サブコントラクト上での呼出
しを処理する典型的な方法のフロー・チャートを示す図
である。
しを処理する典型的な方法のフロー・チャートを示す図
である。
【図16】 共用メモリ・サブコントラクト上での呼出
しを処理する典型的な方法のフロー・チャートを示す図
である。
しを処理する典型的な方法のフロー・チャートを示す図
である。
【図17】 チャネル・オブジェクトが、それを使用す
る異なるオブジェクト用の複数のデータ構造に関係す
る、共用メモリ・サブコントラクトのサーバ側の典型的
なデータ構造を示す図である。
る異なるオブジェクト用の複数のデータ構造に関係す
る、共用メモリ・サブコントラクトのサーバ側の典型的
なデータ構造を示す図である。
50 スプリング・カーネル 52 定義域マネージャ 54 仮想メモリ・マネージャ 56 名前サーバ 58 キャッシング・ファイル・サーバ 60 ローカル・ファイル・サーバ 62 リンカ 64 ネットワーク・プロキシ 66 ttyサーバ 68 UNIXプロセス・サーバ 69 サブコントラクト・レジストリ 70 スプリング・アプリケーション
───────────────────────────────────────────────────── フロントページの続き (72)発明者 グラハム・ハミルトン アメリカ合衆国 94303 カリフォルニア 州・パロ アルト・デビッド コート・ 3143 (72)発明者 パナギオティス・エス・クーギオリス アメリカ合衆国 94040 カリフォルニア 州・マウンテンビュー・デイル アヴェニ ュ・ナンバー132・1200
Claims (9)
- 【請求項1】 共用メモリ空間を使用する、コンピュー
タによって実施される方法において、 クライアント・アプリケーションによって行われ、かつ
他のオブジェクトなど複雑な引数である引数を要求する
動作呼出しを、共用メモリ・サブコントラクトを有する
最初のオブジェクト上で実行するステップと、 前記共用メモリ・サブコントラクトのクライアント側部
分によって前記動作呼出しを認識するステップと、 前記最初のオブジェクトを実行する前記共用メモリ・サ
ブコントラクトの前記クライアント側部分が使用できる
共用メモリ領域が存在しているかどうかを、非カーネル
・ルーチンによって判定するステップと、 前記共用メモリ領域が存在する場合、前記共用メモリ・
サブコントラクトの前記クライアント側部分によって、
前記確立された共用メモリ領域の内側に前記動作呼出し
の引数をマーシャルするステップと、 前記共用メモリ・サブコントラクトの前記クライアント
側部分によって既存のチャネル・オブジェクト上で前記
動作呼出しを呼び出すステップと、 前記最初のオブジェクトの前記処理系を含む前記サーバ
によって、前記呼び出された動作呼出しを受信するステ
ップとを含むことを特徴とする方法。 - 【請求項2】 前記最初のオブジェクトの前記処理系を
含む前記サーバ上に位置する前記共用メモリ・サブコン
トラクトのサーバ側部分によって、前記呼び出された動
作呼出しを受信するステップと、 前記共用メモリ・サブコントラクトの前記サーバ側部分
が、非カーネル・プロセスを使用して、前記最初のオブ
ジェクトの前記処理系を見つけ、前記共用メモリ領域中
の前記呼び出された動作呼出しの前記引数を含むバッフ
ァを見つけるステップと、 前記バッファから前記引数をマーシャル解除するステッ
プと、 前記呼び出された動作呼出しおよび前記マーシャル解除
された引数を前記最初のオブジェクトの前記処理系に渡
すステップの追加ステップとを含むことを特徴とする請
求項1に記載のコンピュータによって実施される方法。 - 【請求項3】 前記共用メモリ・サブコントラクトの前
記サーバ側部分によって、前記最初のオブジェクトの前
記処理系から前記呼び出された動作呼出しの結果を受信
するステップと、 最初に、前記呼び出された動作呼出しの引数を含んでい
た、前記共用メモリ領域中の前記バッファに前記結果を
マーシャルするステップと、 前記共用メモリ・サブコントラクトの前記サーバ側部分
が、前記共用メモリ・サブコントラクトの前記クライア
ント側部分へリターン・メッセージを送信するステップ
の追加ステップを含むことを特徴とする請求項2に記載
のコンピュータによって実施される方法。 - 【請求項4】 前記共用メモリ・サブコントラクトの前
記クライアント側部分によって前記リターン・メッセー
ジを受信するステップと、 前記共用メモリ領域中の前記バッファから前記結果をマ
ーシャル解除するステップと、 前記動作呼出しを行った前記クライアント・アプリケー
ションに前記結果を渡し、それによって、前記共用メモ
リ・サブコントラクトの前記クライアント側部分と前記
サーバ側部分が共用するメモリ領域を使用して、前記最
初のオブジェクト上の前記クライアント・アプリケーシ
ョンの動作呼出しが実行されるステップの追加ステップ
を含むことを特徴とする請求項3に記載のコンピュータ
によって実施される方法。 - 【請求項5】 前記共用メモリ領域が存在しない場合に
共用メモリ領域を確立する追加ステップを含むことを特
徴とする請求項1に記載のコンピュータによって実施さ
れる方法。 - 【請求項6】 共用メモリ空間を使用する、コンピュー
タによって実施される方法において、 他のオブジェクトなど複雑な引数である引数を要求する
動作呼出しを最初のオブジェクト上で実行するステップ
と、 前記共用メモリ・サブコントラクトのクライアント側部
分によって前記動作呼出しを認識するステップと、 前記最初のオブジェクトを実行する前記共用メモリ・サ
ブコントラクトの前記クライアント側部分が使用できる
共用メモリ領域が存在しているかどうかを、非カーネル
・ルーチンによって判定するステップと、 前記共用メモリ領域が存在する場合、前記共用メモリ・
サブコントラクトの前記クライアント側部分によって、
前記確立された共用メモリ領域の内側に前記動作呼出し
の引数をマーシャルするステップと、 前記最初のオブジェクトの処理系を含むサーバへ前記動
作呼出しを送信するステップと、 前記共用メモリ・サブコントラクトのサーバ側部分によ
って、非カーネル・プロセスを使用して前記動作呼出し
の前記引数を前記共用メモリ領域からマーシャル解除す
るステップと、 前記動作呼出しおよび前記マーシャル解除された引数を
前記最初のオブジェクトの前記処理系に渡すステップ
と、 最初に、前記動作呼出しの前記引数を含んでいた、前記
共用メモリ領域中の前記バッファに、前記最初のオブジ
ェクトの前記処理系から得た前記動作呼出しの結果をマ
ーシャルするステップと、 前記メモリ・サブコントラクトの前記サーバ側部分が、
前記マーシャルされた結果を含むリターン・メッセージ
を、前記動作呼出しを発行した前記クライアントへ送信
するステップと、 前記共用メモリ領域中の前記バッファから前記結果をマ
ーシャル解除するステップと、 前記動作呼出しを行った前記クライアント・アプリケー
ションに前記結果を渡すステップとを含み、それによっ
て、前記クライアントと前記サーバが共用するメモリ領
域を使用し、かつ非カーネル・プロセスを使用して、前
記最初のオブジェクト上の前記クライアント・アプリケ
ーションの動作呼出しが実行されることを特徴とする方
法。 - 【請求項7】 共用メモリ空間を使用する、コンピュー
タによって実施される方法において、 データ構造を備える他のオブジェクトなど複雑な引数で
ある引数を要求する、クライアント・アプリケーション
による動作呼出しを最初のオブジェクト上で実行するス
テップと、 前記動作呼出しの引数をマーシャルするために使用でき
る共用メモリ領域が存在しているかどうかを非カーネル
・ルーチンによって判定するステップと、 前記共用メモリ領域が存在する場合、前記既存の共用メ
モリ領域の内側に前記動作呼出しの前記引数をマーシャ
ルするステップと、 前記最初のオブジェクトの処理系を含むサーバへ前記動
作呼出しを送信するステップと、 前記サーバが、非カーネル・プロセスを使用して前記動
作呼出しの前記引数を前記共用メモリ領域からマーシャ
ル解除するステップと、 前記動作呼出しおよび前記マーシャル解除された引数を
前記最初のオブジェクトの前記処理系に渡すステップ
と、 最初に、前記動作呼出しの前記引数を含んでいた前記共
用メモリ領域に、前記最初のオブジェクトの前記処理系
から得た前記動作呼出しの結果をマーシャルするステッ
プと、 前記サーバが、前記マーシャルされた結果を含むリター
ン・メッセージを、前記動作呼出しを発行した前記クラ
イアントへ送信するステップと、 前記共用メモリ領域から前記結果をマーシャル解除する
ステップと、 前記動作呼出しを行った前記クライアント・アプリケー
ションに前記結果を渡すステップとを含み、それによっ
て、前記クライアントと前記サーバが共用するメモリ領
域を使用し、かつ非カーネル・プロセスを使用して、前
記最初のオブジェクト上の前記クライアント・アプリケ
ーションの動作呼出しが実行されることを特徴とする方
法。 - 【請求項8】 共用メモリ空間を使用する、コンピュー
タによって実施される方法において、 データ構造を備える他のオブジェクトなど複雑な引数で
ある引数を要求する、クライアント・アプリケーション
による動作呼出しをデータ構造を備えるターゲット・オ
ブジェクト上で実行するステップと、 前記動作呼出しの前記引数を共用メモリ領域にマーシャ
ルするステップと、 前記最初のオブジェクトの処理系を含むサーバへ前記動
作呼出しを送信するステップと、 前記サーバが、非カーネル・プロセスを使用して前記動
作呼出しの前記引数を前記共用メモリ領域からマーシャ
ル解除し、前記動作呼出しおよび前記マーシャル解除さ
れた引数を前記ターゲット・オブジェクトの前記処理系
に渡すステップと、 前記サーバが、前記ターゲット・オブジェクトの前記処
理系から得た前記動作呼出しの結果を前記共用メモリ領
域にマーシャルし、前記マーシャルされた結果を含むリ
ターン・メッセージを、前記動作呼出しを発行した前記
クライアントへ送信するステップと、 前記クライアントが、前記共用メモリ領域から前記結果
をマーシャル解除するステップと、 前記動作呼出しを行った前記クライアント・アプリケー
ションに前記結果を渡すステップとを含み、それによっ
て、前記クライアントと前記サーバが共用するメモリ領
域を使用し、かつ非カーネル・プロセスを使用して、前
記最初のオブジェクト上の前記クライアント・アプリケ
ーションの動作呼出しが実行されることを特徴とする方
法。 - 【請求項9】 データ処理システムにおいて、 相互接続された1つまたは複数の中央演算処理装置(C
PU)と、 相互接続された1つまたは複数の中央演算処理装置上で
動作するオペレーティング・システム・カーネルと、 データ構造を備える他のオブジェクトなど複雑な引数で
ある引数を要求する動作呼出しを、データ構造を備える
ターゲット・オブジェクト上で実行することができる、
前記オペレーティング・システム・カーネルの下で動作
するクライアント・アプリケーションと、 前記動作呼出しの前記引数を共用メモリ領域にマーシャ
ルすることによって前記ターゲット・オブジェクト上で
前記動作呼出しを実行することができ、前記ターゲット
・オブジェクトの処理系を含む非カーネル・サーバへ前
記動作呼出しを送信することができ、サーバが前記動作
呼出しの前記引数を前記共用メモリ領域からマーシャル
解除し、前記動作呼出しおよび前記マーシャル解除され
た引数を前記ターゲット・オブジェクトの処理系に渡す
ことができ、さらに、前記サーバが、前記ターゲット・
オブジェクトの前記処理系から受信された前記動作呼出
しの結果を前記共用メモリ領域にマーシャルし、前記マ
ーシャルされた結果を含むリターン・メッセージを、前
記動作呼出しを発行した前記クライアントへ送信するよ
うに動作する、非カーネル・クライアント側サブシステ
ムとを備え、 それによって、前記クライアント側サブシステムと前記
サーバが共用するメモリ領域を使用し、かつ非カーネル
・プロセスを使用して、前記最初のオブジェクト上の前
記クライアント・アプリケーションの動作呼出しを、デ
ータ処理システムによって実行することができることを
特徴とするデータ処理システム。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US282694 | 1994-07-29 | ||
US08/282,694 US5566302A (en) | 1992-12-21 | 1994-07-29 | 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 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH08115223A true JPH08115223A (ja) | 1996-05-07 |
Family
ID=23082710
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP7212988A Withdrawn JPH08115223A (ja) | 1994-07-29 | 1995-07-31 | コンピュータで実施する方法及びデータ処理システム |
Country Status (3)
Country | Link |
---|---|
US (1) | US5566302A (ja) |
EP (1) | EP0695992A3 (ja) |
JP (1) | JPH08115223A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000513123A (ja) * | 1996-12-20 | 2000-10-03 | インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン | 標準オブジェクトを使用して情報を取得する装置および方法 |
Families Citing this family (113)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6044205A (en) * | 1996-02-29 | 2000-03-28 | Intermind Corporation | Communications system for transferring information between memories according to processes transferred with the information |
US6157961A (en) * | 1992-12-21 | 2000-12-05 | Sun Microsystems, Inc. | Client-side stub interpreter |
EP0684553B1 (en) * | 1994-05-26 | 2004-06-16 | Sun Microsystems, Inc. | Method and apparatus for generating and using short operation identifiers in object oriented systems |
US5694546A (en) | 1994-05-31 | 1997-12-02 | Reisman; Richard R. | System for automatic unattended electronic information transport between a server and a client by a vendor provided transport software with a manifest list |
EP0702291B1 (en) * | 1994-09-19 | 2002-04-03 | Sun Microsystems, Inc. | Method and mechanism for invocation on objects with interface inheritance |
US6466992B2 (en) * | 1994-12-07 | 2002-10-15 | Next Computer, Inc. | Method for providing stand-in objects |
US6108715A (en) * | 1994-12-13 | 2000-08-22 | Microsoft Corporation | Method and system for invoking remote procedure calls |
US5793965A (en) * | 1995-03-22 | 1998-08-11 | Sun Microsystems, Inc. | Method and apparatus for determining the type of an object in a distributed object system |
US6502126B1 (en) * | 1995-04-28 | 2002-12-31 | Intel Corporation | Method and apparatus for running customized data and/or video conferencing applications employing prepackaged conference control objects utilizing a runtime synchronizer |
JPH0962558A (ja) * | 1995-08-29 | 1997-03-07 | Fuji Xerox Co Ltd | データベース管理システム及び方法 |
US5764902A (en) * | 1995-09-29 | 1998-06-09 | Intel Corporation | Conditional insert or merge in a data conference |
US5815708A (en) * | 1995-10-06 | 1998-09-29 | Sun Microsystems, Inc. | Method and apparatus for dynamically loading method call exception code in response to a software method exception generated in a client/server computer system |
US6016535A (en) * | 1995-10-11 | 2000-01-18 | Citrix Systems, Inc. | Method for dynamically and efficiently caching objects by subdividing cache memory blocks into equally-sized sub-blocks |
JP3813669B2 (ja) * | 1995-10-27 | 2006-08-23 | 松下電器産業株式会社 | 端末装置及び端末装置の能力情報通知方法 |
US6437803B1 (en) | 1998-05-29 | 2002-08-20 | Citrix Systems, Inc. | System and method for combining local and remote windows into a single desktop environment |
US6088515A (en) | 1995-11-13 | 2000-07-11 | Citrix Systems Inc | Method and apparatus for making a hypermedium interactive |
US6950991B2 (en) | 1995-11-13 | 2005-09-27 | Citrix Systems, Inc. | Interacting with software applications displayed in a web page |
US7555529B2 (en) * | 1995-11-13 | 2009-06-30 | Citrix Systems, Inc. | Interacting with software applications displayed in a web page |
US6170018B1 (en) * | 1995-11-27 | 2001-01-02 | Sun Microsystems, Inc. | Remote procedure calling using an existing descriptor mechanism |
US6625617B2 (en) | 1996-01-02 | 2003-09-23 | Timeline, Inc. | Modularized data retrieval method and apparatus with multiple source capability |
US5822580A (en) * | 1996-01-19 | 1998-10-13 | Object Technology Licensing Corp. | Object oriented programming based global registry system, method, and article of manufacture |
US5862325A (en) * | 1996-02-29 | 1999-01-19 | Intermind Corporation | Computer-based communication system and method using metadata defining a control structure |
US6260074B1 (en) * | 1996-03-30 | 2001-07-10 | Sun Microsystems, Inc. | Method and apparatus for passing generic objects in a distributed system |
US5864852A (en) * | 1996-04-26 | 1999-01-26 | Netscape Communications Corporation | Proxy server caching mechanism that provides a file directory structure and a mapping mechanism within the file directory structure |
US20030195848A1 (en) | 1996-06-05 | 2003-10-16 | David Felger | Method of billing a purchase made over a computer network |
US7555458B1 (en) | 1996-06-05 | 2009-06-30 | Fraud Control System.Com Corporation | Method of billing a purchase made over a computer network |
US8229844B2 (en) | 1996-06-05 | 2012-07-24 | Fraud Control Systems.Com Corporation | Method of billing a purchase made over a computer network |
US6044224A (en) * | 1996-06-26 | 2000-03-28 | Sun Microsystems, Inc. | Mechanism for dynamically associating a service dependent representation with objects at run time |
US5991823A (en) * | 1996-06-26 | 1999-11-23 | Sun Microsystems, Inc. | Low overhead object adaptor |
US6044409A (en) * | 1996-06-26 | 2000-03-28 | Sun Microsystems, Inc. | Framework for marshaling and unmarshaling argument object references |
US6718550B1 (en) | 1996-06-26 | 2004-04-06 | Sun Microsystems, Inc. | Method and apparatus for improving the performance of object invocation |
US5809507A (en) * | 1996-07-01 | 1998-09-15 | Sun Microsystems, Inc. | Method and apparatus for storing persistent objects on a distributed object network using a marshaling framework |
US5818448A (en) * | 1996-07-02 | 1998-10-06 | Sun Microsystems, Inc. | Apparatus and method for identifying server computer aggregation topologies |
US6119114A (en) * | 1996-09-17 | 2000-09-12 | Smadja; Frank | Method and apparatus for dynamic relevance ranking |
US6173298B1 (en) | 1996-09-17 | 2001-01-09 | Asap, Ltd. | Method and apparatus for implementing a dynamic collocation dictionary |
US5884316A (en) * | 1996-11-19 | 1999-03-16 | Microsoft Corporation | Implicit session context system with object state cache |
US6112183A (en) * | 1997-02-11 | 2000-08-29 | United Healthcare Corporation | Method and apparatus for processing health care transactions through a common interface in a distributed computing environment |
US6496865B1 (en) * | 1997-03-12 | 2002-12-17 | Novell, Inc. | System and method for providing interpreter applications access to server resources in a distributed network |
US6408342B1 (en) * | 1997-03-28 | 2002-06-18 | Keith E. Moore | Communications framework for supporting multiple simultaneous communications protocols in a distributed object environment |
JP3817823B2 (ja) * | 1997-04-10 | 2006-09-06 | ソニー株式会社 | データ通信方法 |
US6240466B1 (en) | 1997-04-21 | 2001-05-29 | International Business Machines Corporation | Object-oriented apparatus and method for determining new object location relative to an existing object |
US5943497A (en) * | 1997-04-30 | 1999-08-24 | International Business Machines Corporation | Object-oriented apparatus and method for controlling configuration of object creation |
US6018805A (en) * | 1997-12-15 | 2000-01-25 | Recipio | Transparent recovery of distributed-objects using intelligent proxies |
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 |
US6510460B1 (en) | 1997-12-18 | 2003-01-21 | Sun Microsystems, Inc. | Method and apparatus for enforcing locking invariants in multi-threaded systems |
US6249803B1 (en) | 1997-12-18 | 2001-06-19 | Sun Microsystems, Inc. | Method and apparatus for executing code during method invocation |
US6070168A (en) * | 1997-12-31 | 2000-05-30 | Nortel Networks Corporation | Platform-independent object memory manager |
US6167565A (en) * | 1998-01-08 | 2000-12-26 | Microsoft Corporation | Method and system of custom marshaling of inter-language parameters |
US6601110B2 (en) * | 1998-03-17 | 2003-07-29 | Sun Microsystems, Inc. | System and method for translating file-level operations in a non-door-based operating system to door invocations on a door server |
US6138269A (en) * | 1998-05-20 | 2000-10-24 | Sun Microsystems, Inc. | Determining the actual class of an object at run time |
US6601146B2 (en) * | 1998-06-16 | 2003-07-29 | International Business Machines Corporation | Technique for efficiently transferring moderate amounts of data across address space boundary |
US6289012B1 (en) | 1998-08-03 | 2001-09-11 | Instanton Corporation | High concurrency data download apparatus and method |
US20040154027A1 (en) * | 1998-10-14 | 2004-08-05 | Jean-Jacques Vandewalle | Method and means for managing communications between local and remote objects in an object oriented client server system in which a client application invokes a local object as a proxy for a remote object on the server |
US6928469B1 (en) | 1998-12-29 | 2005-08-09 | Citrix Systems, Inc. | Apparatus and method for determining a program neighborhood for a client node in a client-server network using markup language techniques |
US8346971B2 (en) | 1999-05-04 | 2013-01-01 | At&T Intellectual Property I, Lp | Data transfer, synchronising applications, and low latency networks |
DE19954407A1 (de) * | 1999-11-12 | 2001-05-17 | Gfs Systemtechnik Gmbh & Co Kg | Verfahren zum direkten Aufrufen einer Funktion mittels eines Softwaremoduls durch einen Prozessor mit einer Memory-Management-Unit (MMU) |
JP2001306537A (ja) * | 2000-04-18 | 2001-11-02 | Hitachi Ltd | 分散オブジェクトシステム |
US6952736B1 (en) * | 2000-04-25 | 2005-10-04 | Microsoft Corporation | Object-based locking mechanism |
US6922724B1 (en) | 2000-05-08 | 2005-07-26 | Citrix Systems, Inc. | Method and apparatus for managing server load |
US6785713B1 (en) | 2000-05-08 | 2004-08-31 | Citrix Systems, Inc. | Method and apparatus for communicating among a network of servers utilizing a transport mechanism |
US6789112B1 (en) | 2000-05-08 | 2004-09-07 | Citrix Systems, Inc. | Method and apparatus for administering a server having a subsystem in communication with an event channel |
US6785726B1 (en) | 2000-05-08 | 2004-08-31 | Citrix Systems, Inc. | Method and apparatus for delivering local and remote server events in a similar fashion |
WO2002001356A1 (en) * | 2000-06-23 | 2002-01-03 | Aladdin Knowledge Systems, Ltd. | Type conversion technique facilitating remote service invocation |
US7346842B1 (en) | 2000-11-02 | 2008-03-18 | Citrix Systems, Inc. | Methods and apparatus for incorporating a partial page on a client |
US20020105548A1 (en) | 2000-12-12 | 2002-08-08 | Richard Hayton | Methods and apparatus for creating a user interface using property paths |
US20020078251A1 (en) * | 2000-12-18 | 2002-06-20 | Philips Electronics North America Corp. | Self-determining command path architecture |
US20020129274A1 (en) * | 2001-03-08 | 2002-09-12 | International Business Machines Corporation | Inter-partition message passing method, system and program product for a security server in a partitioned processing environment |
US7089559B2 (en) * | 2001-07-31 | 2006-08-08 | International Business Machines Corporation | Method, apparatus, and program for chaining server applications |
GB2381336B (en) * | 2001-08-21 | 2005-09-28 | Silicon Infusion Ltd | Object orientated heterogeneous multi-processor platform |
US6931409B2 (en) * | 2002-01-08 | 2005-08-16 | International Business Machines Corporation | Method, apparatus, and program to efficiently serialize objects |
US8135843B2 (en) * | 2002-03-22 | 2012-03-13 | Citrix Systems, Inc. | Methods and systems for providing access to an application |
US20030212761A1 (en) * | 2002-05-10 | 2003-11-13 | Microsoft Corporation | Process kernel |
US7523169B1 (en) | 2003-02-28 | 2009-04-21 | Verizon Data Services Llc | Method and system for mapping network data for network database access |
MXPA05012665A (es) * | 2003-05-23 | 2006-02-08 | Mattel Inc | Vehiculo de juguete. |
US7472398B2 (en) * | 2003-11-17 | 2008-12-30 | Hewlett-Packard Development Company, L.P. | Method and system for hosting an application with a facade server |
US20050125486A1 (en) * | 2003-11-20 | 2005-06-09 | Microsoft Corporation | Decentralized operating system |
US7593930B2 (en) * | 2004-12-14 | 2009-09-22 | Sap Ag | Fast channel architecture |
US7580915B2 (en) | 2004-12-14 | 2009-08-25 | Sap Ag | Socket-like communication API for C |
US7600217B2 (en) | 2004-12-14 | 2009-10-06 | Sap Ag | Socket-like communication API for Java |
US7672949B2 (en) * | 2004-12-28 | 2010-03-02 | Sap Ag | Connection manager having a common dispatcher for heterogeneous software suites |
US7552153B2 (en) * | 2004-12-28 | 2009-06-23 | Sap Ag | Virtual machine monitoring using shared memory |
US7539821B2 (en) | 2004-12-28 | 2009-05-26 | Sap Ag | First in first out eviction implementation |
US20060143256A1 (en) | 2004-12-28 | 2006-06-29 | Galin Galchev | Cache region concept |
US7694065B2 (en) | 2004-12-28 | 2010-04-06 | Sap Ag | Distributed cache architecture |
US7971001B2 (en) | 2004-12-28 | 2011-06-28 | Sap Ag | Least recently used eviction implementation |
US7523196B2 (en) * | 2004-12-28 | 2009-04-21 | Sap Ag | Session monitoring using shared memory |
US7500133B2 (en) * | 2004-12-28 | 2009-03-03 | Sap Ag | Connection manager for handling message oriented protocol-based requests |
US8204931B2 (en) | 2004-12-28 | 2012-06-19 | Sap Ag | Session management within a multi-tiered enterprise network |
US7591006B2 (en) * | 2004-12-29 | 2009-09-15 | Sap Ag | Security for external system management |
KR100645537B1 (ko) * | 2005-02-07 | 2006-11-14 | 삼성전자주식회사 | 안정적인 패킷 포워딩을 위한 동적인 큐 관리방법 및 이를위한 네트워크 프로세서의 구성요소 |
US7549151B2 (en) * | 2005-02-14 | 2009-06-16 | Qnx Software Systems | Fast and memory protected asynchronous message scheme in a multi-process and multi-thread environment |
US7707131B2 (en) * | 2005-03-08 | 2010-04-27 | Microsoft Corporation | Thompson strategy based online reinforcement learning system for action selection |
US7885817B2 (en) * | 2005-03-08 | 2011-02-08 | Microsoft Corporation | Easy generation and automatic training of spoken dialog systems using text-to-speech |
US7734471B2 (en) * | 2005-03-08 | 2010-06-08 | Microsoft Corporation | Online learning for dialog systems |
US8589562B2 (en) | 2005-04-29 | 2013-11-19 | Sap Ag | Flexible failover configuration |
US7840682B2 (en) | 2005-06-03 | 2010-11-23 | QNX Software Systems, GmbH & Co. KG | Distributed kernel operating system |
US8667184B2 (en) * | 2005-06-03 | 2014-03-04 | Qnx Software Systems Limited | Distributed kernel operating system |
US7689660B2 (en) * | 2005-06-09 | 2010-03-30 | Sap Ag | Application server architecture |
US7966412B2 (en) | 2005-07-19 | 2011-06-21 | Sap Ag | System and method for a pluggable protocol handler |
US7779417B2 (en) * | 2005-10-25 | 2010-08-17 | Oracle International Corporation | Method and apparatus for making inter-process procedure calls through shared memory |
US7680096B2 (en) * | 2005-10-28 | 2010-03-16 | Qnx Software Systems Gmbh & Co. Kg | System for configuring switches in a network |
US7610468B2 (en) * | 2006-10-26 | 2009-10-27 | Hewlett-Packard Development Company, L.P. | Modified buddy system memory allocation |
KR101425621B1 (ko) * | 2008-01-15 | 2014-07-31 | 삼성전자주식회사 | 컨텐츠를 안전하게 공유하는 방법 및 시스템 |
JP5327552B2 (ja) * | 2008-07-04 | 2013-10-30 | 日本電気株式会社 | 情報処理システム、プログラム、データ中継方法 |
US20110040592A1 (en) * | 2009-08-11 | 2011-02-17 | JustAnswer Corp. | Method and apparatus for determining pricing options in a consultation system |
US9646079B2 (en) | 2012-05-04 | 2017-05-09 | Pearl.com LLC | Method and apparatus for identifiying similar questions in a consultation system |
US9904436B2 (en) | 2009-08-11 | 2018-02-27 | Pearl.com LLC | Method and apparatus for creating a personalized question feed platform |
US8589867B2 (en) | 2010-06-18 | 2013-11-19 | Microsoft Corporation | Compiler-generated invocation stubs for data parallel programming model |
US20110314256A1 (en) * | 2010-06-18 | 2011-12-22 | Microsoft Corporation | Data Parallel Programming Model |
US9501580B2 (en) | 2012-05-04 | 2016-11-22 | Pearl.com LLC | Method and apparatus for automated selection of interesting content for presentation to first time visitors of a website |
US9275038B2 (en) | 2012-05-04 | 2016-03-01 | Pearl.com LLC | Method and apparatus for identifying customer service and duplicate questions in an online consultation system |
CN112559203B (zh) * | 2020-12-10 | 2024-10-25 | 上海连尚网络科技有限公司 | 一种实现业务层与so库进行数据交换的方法与装置 |
CN116932241A (zh) * | 2022-04-08 | 2023-10-24 | 华为云计算技术有限公司 | 一种服务启动方法及相关装置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5206951A (en) * | 1987-08-21 | 1993-04-27 | Wang Laboratories, Inc. | Integration of data between typed objects by mutual, direct invocation between object managers corresponding to object types |
US5247676A (en) * | 1989-06-29 | 1993-09-21 | Digital Equipment Corporation | RPC based computer system using transparent callback and associated method |
DE69228621T2 (de) * | 1991-02-25 | 1999-07-22 | Hewlett-Packard Co., Palo Alto, Calif. | Objektorientiertes verteiltes Rechnersystem |
US5303375A (en) * | 1991-04-26 | 1994-04-12 | Hewlett-Packard Company | System and method for facilitating selection of running functional process in object-oriented environments |
US5307490A (en) * | 1992-08-28 | 1994-04-26 | Tandem Computers, Inc. | Method and system for implementing remote procedure calls in a distributed computer system |
US5329619A (en) * | 1992-10-30 | 1994-07-12 | Software Ag | Cooperative processing interface and communication broker for heterogeneous computing environments |
EP0604010B1 (en) * | 1992-12-21 | 1999-12-29 | Sun Microsystems, Inc. | Method and apparatus for subcontracts in distributed processing systems |
-
1994
- 1994-07-29 US US08/282,694 patent/US5566302A/en not_active Expired - Lifetime
-
1995
- 1995-06-26 EP EP95304483A patent/EP0695992A3/en not_active Withdrawn
- 1995-07-31 JP JP7212988A patent/JPH08115223A/ja not_active Withdrawn
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000513123A (ja) * | 1996-12-20 | 2000-10-03 | インターナシヨナル・ビジネス・マシーンズ・コーポレーシヨン | 標準オブジェクトを使用して情報を取得する装置および方法 |
Also Published As
Publication number | Publication date |
---|---|
EP0695992A3 (en) | 2000-01-05 |
US5566302A (en) | 1996-10-15 |
EP0695992A2 (en) | 1996-02-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPH08115223A (ja) | コンピュータで実施する方法及びデータ処理システム | |
US5787251A (en) | Method and apparatus for subcontracts in distributed processing systems | |
Shapiro | Structure and encapsulation in distributed systems: The proxy principle | |
US6393497B1 (en) | Downloadable smart proxies for performing processing associated with a remote procedure call in a distributed system | |
US6487607B1 (en) | Methods and apparatus for remote method invocation | |
US6976261B2 (en) | Method and apparatus for fast, local CORBA object references | |
US6134603A (en) | Method and system for deterministic hashes to identify remote methods | |
US6947965B2 (en) | System and method for communications in a distributed computing environment | |
US6959307B2 (en) | Process and system for a client object to perform a remote method invocation of a method in a server object | |
US6633923B1 (en) | Method and system for dynamic configuration of interceptors in a client-server environment | |
JP3405666B2 (ja) | アプレットを非ipネットワーク上で実行する方法及びコンピュータ・ワークステーション | |
US6983285B2 (en) | Apparatus and method for dynamically verifying information in a distributed system | |
WO2002033545A2 (en) | Pluggable instantiable distributed objects | |
US6629154B1 (en) | Method and system for deterministic hashes to identify remote methods | |
US7089263B2 (en) | Apparatus and method for dynamically verifying information in a distributed system | |
AU775624B2 (en) | Method and apparatus for dynamic command extensibility in an intelligent agent | |
Hamilton | A remote procedure call system | |
EP1058880A1 (en) | Downloadable smart proxies for performing processing associated with a remote procedure call in a distributed system | |
Parr et al. | Distributed processing involving personal computers and mainframe hosts | |
Stevenson et al. | Client-server interactions in multi-server operating systems: The Mach-US approach | |
Ongg | An architectural comparison of distributed object technologies | |
Leblanc et al. | The elmwood multiprocessor operating system | |
Herbert et al. | Mobile Java objects | |
Poo et al. | Object serialization and remote method invocation | |
Piotrowski | Cooperative remote execution in peer machine computer networks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A761 | Written withdrawal of application |
Free format text: JAPANESE INTERMEDIATE CODE: A761 Effective date: 20040901 |