JPH11249898A - データ処理方法、記録媒体及びデータ処理装置 - Google Patents
データ処理方法、記録媒体及びデータ処理装置Info
- Publication number
- JPH11249898A JPH11249898A JP10052493A JP5249398A JPH11249898A JP H11249898 A JPH11249898 A JP H11249898A JP 10052493 A JP10052493 A JP 10052493A JP 5249398 A JP5249398 A JP 5249398A JP H11249898 A JPH11249898 A JP H11249898A
- Authority
- JP
- Japan
- Prior art keywords
- server
- side object
- data area
- processing
- result
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
-
- 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/546—Message passing systems or structures, e.g. queues
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/953—Organization of data
- Y10S707/955—Object-oriented
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99941—Database schema or data structure
- Y10S707/99944—Object-oriented database structure
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10—TECHNICAL SUBJECTS COVERED BY FORMER USPC
- Y10S—TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y10S707/00—Data processing: database and file management or data structures
- Y10S707/99951—File or database maintenance
- Y10S707/99952—Coherency, e.g. same view to multiple users
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Computer And Data Communications (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
Abstract
(57)【要約】
【課題】 サーバ側オブジェクトが複数のオブジェクト
によって構成される場合で、且つ処理の要求の受け口と
出口が同じではないような場合にも、メッセージパッシ
ングを適切に行えるようにする。 【解決手段】 クライアント側オブジェクトからサーバ
側オブジェクトにメッセージを送るときに、サーバ側オ
ブジェクトによる処理の結果が格納されるデータ領域を
確保しておく。そして、サーバ側オブジェクトによって
処理を行うときに、サーバ側オブジェクトを構成するオ
ブジェクト間で、処理結果をクライアント側オブジェク
トへ返す権限の委譲を行い、上記権限を最後に委譲され
たオブジェクトによる処理の結果を上記データ領域に格
納する。そして、クライアント側オブジェクトは、上記
データ領域に格納されたデータを読み出すことにより、
サーバ側オブジェクトによる処理の結果を受け取るよう
にする。
によって構成される場合で、且つ処理の要求の受け口と
出口が同じではないような場合にも、メッセージパッシ
ングを適切に行えるようにする。 【解決手段】 クライアント側オブジェクトからサーバ
側オブジェクトにメッセージを送るときに、サーバ側オ
ブジェクトによる処理の結果が格納されるデータ領域を
確保しておく。そして、サーバ側オブジェクトによって
処理を行うときに、サーバ側オブジェクトを構成するオ
ブジェクト間で、処理結果をクライアント側オブジェク
トへ返す権限の委譲を行い、上記権限を最後に委譲され
たオブジェクトによる処理の結果を上記データ領域に格
納する。そして、クライアント側オブジェクトは、上記
データ領域に格納されたデータを読み出すことにより、
サーバ側オブジェクトによる処理の結果を受け取るよう
にする。
Description
【0001】
【発明の属する技術分野】本発明は、クライアント側オ
ブジェクトと複数のオブジェクトによって構成されるサ
ーバ側オブジェクトとの間でメッセージをやり取りする
際のデータ処理方法に関する。また、本発明は、上記デ
ータ処理方法を実現するオペレーティングシステムが記
録された記録媒体、並びに当該記録媒体を備えたデータ
処理装置に関する。
ブジェクトと複数のオブジェクトによって構成されるサ
ーバ側オブジェクトとの間でメッセージをやり取りする
際のデータ処理方法に関する。また、本発明は、上記デ
ータ処理方法を実現するオペレーティングシステムが記
録された記録媒体、並びに当該記録媒体を備えたデータ
処理装置に関する。
【0002】
【従来の技術】従来、アプリケーションプログラム等の
ソフトウェアは、関数呼び出しを用いて記述されること
が多かった。関数読み出しの基本的な動作を図9に示
す。図9では、関数を呼び出す側をクライアント、呼び
出される側をサーバとして示している。
ソフトウェアは、関数呼び出しを用いて記述されること
が多かった。関数読み出しの基本的な動作を図9に示
す。図9では、関数を呼び出す側をクライアント、呼び
出される側をサーバとして示している。
【0003】関数呼び出しでは、先ず、図9中矢印A1
に示すように、クライアントによってサーバの関数が呼
び出され、これにより、図9中実線A2に示すように、
サーバによって当該関数が実行される。このとき、クラ
イアントは、図9中点線A3に示すように、待ち状態と
なる。そして、サーバによる処理が完了したら、図9中
矢印A4に示すように、サーバからクライアントへ戻り
値が返され、これにより、図9中実線A5に示すよう
に、クライアントの処理が再開される。
に示すように、クライアントによってサーバの関数が呼
び出され、これにより、図9中実線A2に示すように、
サーバによって当該関数が実行される。このとき、クラ
イアントは、図9中点線A3に示すように、待ち状態と
なる。そして、サーバによる処理が完了したら、図9中
矢印A4に示すように、サーバからクライアントへ戻り
値が返され、これにより、図9中実線A5に示すよう
に、クライアントの処理が再開される。
【0004】ところで、近年、ソフトウェアプログラミ
ング技術の発展によって、オブジェクト指向技術に基づ
いたソフトウェアの開発が可能となっている。オブジェ
クト指向を適用したとき、アプリケーションプログラム
等のソフトウェアの機能は、オブジェクトによってモジ
ュール化される。オブジェクトは、互いに必要な情報を
メッセージとして交換しあうことで、モジュールとして
の機能を実現する。このようなメッセージの交換は、メ
ッセージパッシングと呼ばれる。
ング技術の発展によって、オブジェクト指向技術に基づ
いたソフトウェアの開発が可能となっている。オブジェ
クト指向を適用したとき、アプリケーションプログラム
等のソフトウェアの機能は、オブジェクトによってモジ
ュール化される。オブジェクトは、互いに必要な情報を
メッセージとして交換しあうことで、モジュールとして
の機能を実現する。このようなメッセージの交換は、メ
ッセージパッシングと呼ばれる。
【0005】メッセージパッシングを実現する手法とし
ては、様々な手法が提案され実現されてきており、その
一つにフューチャを使ったメッセージパッシングがあ
る。フューチャを使ったメッセージパッシングの基本的
な動作を図10に示す。
ては、様々な手法が提案され実現されてきており、その
一つにフューチャを使ったメッセージパッシングがあ
る。フューチャを使ったメッセージパッシングの基本的
な動作を図10に示す。
【0006】フューチャを使ったメッセージパッシング
では、先ず、図10中矢印B1に示すように、クライア
ント側オブジェクトからサーバ側オブジェクトに対して
何らかの処理を要求するメッセージが送られる。このと
き、サーバ側オブジェクトによる処理の結果が格納され
るデータ領域が確保される。このデータ領域は、クライ
アント側オブジェクトが将来受け取る結果が格納される
領域であり、フューチャ(future)と呼ばれる。
では、先ず、図10中矢印B1に示すように、クライア
ント側オブジェクトからサーバ側オブジェクトに対して
何らかの処理を要求するメッセージが送られる。このと
き、サーバ側オブジェクトによる処理の結果が格納され
るデータ領域が確保される。このデータ領域は、クライ
アント側オブジェクトが将来受け取る結果が格納される
領域であり、フューチャ(future)と呼ばれる。
【0007】サーバ側オブジェクトは、図10中実線B
2に示すように、クライアント側オブジェクトから送ら
れてきたメッセージの要求に応じた処理を行い、当該処
理が完了したら、図10中矢印B3に示すように、当該
処理の結果をフューチャに格納する。
2に示すように、クライアント側オブジェクトから送ら
れてきたメッセージの要求に応じた処理を行い、当該処
理が完了したら、図10中矢印B3に示すように、当該
処理の結果をフューチャに格納する。
【0008】一方、クライアント側オブジェクトは、図
10中実線B4に示すように、上記メッセージをサーバ
側オブジェクトに送った後も処理を継続して実行し、そ
の後、サーバ側オブジェクトによる処理の結果が必要に
なったときに、図10中矢印B5に示すように、フュー
チャに格納されているデータの読み出しを行う。
10中実線B4に示すように、上記メッセージをサーバ
側オブジェクトに送った後も処理を継続して実行し、そ
の後、サーバ側オブジェクトによる処理の結果が必要に
なったときに、図10中矢印B5に示すように、フュー
チャに格納されているデータの読み出しを行う。
【0009】このとき、サーバ側オブジェクトによる処
理の結果がフューチャに未だ格納されていない場合は、
図10中点線B6に示すように、クライアント側オブジ
ェクトは待ち状態となる。そして、サーバ側オブジェク
トによる処理の結果がフューチャに格納されたら、図1
0中矢印B7に示すように、サーバ側オブジェクトによ
る処理の結果がフューチャからクライアント側オブジェ
クトへ受け渡される。
理の結果がフューチャに未だ格納されていない場合は、
図10中点線B6に示すように、クライアント側オブジ
ェクトは待ち状態となる。そして、サーバ側オブジェク
トによる処理の結果がフューチャに格納されたら、図1
0中矢印B7に示すように、サーバ側オブジェクトによ
る処理の結果がフューチャからクライアント側オブジェ
クトへ受け渡される。
【0010】すなわち、クライアント側オブジェクト
は、サーバ側オブジェクトによる処理の結果がフューチ
ャに格納されている場合には、直ぐに結果を受け取る
が、サーバ側オブジェクトによる処理の結果がフューチ
ャに未だ格納されていない場合には、結果がフューチャ
に格納されるまで待ち状態となる。
は、サーバ側オブジェクトによる処理の結果がフューチ
ャに格納されている場合には、直ぐに結果を受け取る
が、サーバ側オブジェクトによる処理の結果がフューチ
ャに未だ格納されていない場合には、結果がフューチャ
に格納されるまで待ち状態となる。
【0011】
【発明が解決しようとする課題】ところで、オブジェク
ト指向のソフトウェア開発では、上述したように、アプ
リケーションプログラム等のソフトウェアの機能は、オ
ブジェクトによってモジュール化される。ここで、アプ
リケーションプログラム等のソフトウェアは、一つのオ
ブジェクトで実現されることもあるし、それらが機能毎
に更にモジュール化され、複数のオブジェクトで実現さ
れることもある。
ト指向のソフトウェア開発では、上述したように、アプ
リケーションプログラム等のソフトウェアの機能は、オ
ブジェクトによってモジュール化される。ここで、アプ
リケーションプログラム等のソフトウェアは、一つのオ
ブジェクトで実現されることもあるし、それらが機能毎
に更にモジュール化され、複数のオブジェクトで実現さ
れることもある。
【0012】そして、上述のようなメッセージパッシン
グを行うにあたって、サーバ側オブジェクトがただ一つ
のオブジェクトによって実現されていた場合には、サー
バ側オブジェクトは、クライアント側オブジェクトから
メッセージを送られたオブジェクト自体によって、クラ
イアント側オブジェクトから要求された処理を実行し、
その結果をクライアント側オブジェクトに配送する。こ
れは、処理の要求の受け口と出口が同じオブジェクトと
いう点で、図9に示した関数呼び出しの考え方と同様に
扱うことができる。また、サーバ側オブジェクトが複数
のオブジェクトによって構成されていた場合において
も、処理の要求の受け口と出口が同じであるならば、関
数呼び出しの考え方と同様に扱うことができる。
グを行うにあたって、サーバ側オブジェクトがただ一つ
のオブジェクトによって実現されていた場合には、サー
バ側オブジェクトは、クライアント側オブジェクトから
メッセージを送られたオブジェクト自体によって、クラ
イアント側オブジェクトから要求された処理を実行し、
その結果をクライアント側オブジェクトに配送する。こ
れは、処理の要求の受け口と出口が同じオブジェクトと
いう点で、図9に示した関数呼び出しの考え方と同様に
扱うことができる。また、サーバ側オブジェクトが複数
のオブジェクトによって構成されていた場合において
も、処理の要求の受け口と出口が同じであるならば、関
数呼び出しの考え方と同様に扱うことができる。
【0013】しかしながら、サーバ側オブジェクトが複
数のオブジェクトによって構成され、且つ処理の要求の
受け口と出口が同じではないような場合には、関数呼び
出しのときのような取り扱いはできない。そのため、こ
のような場合には、例えば、サーバ側オブジェクトの処
理の要求の受け口と出口が異なることをクライアント側
オブジェクトの側で考慮してやるなどの工夫が必要とな
る。しかしながら、このようなことをクライアント側オ
ブジェクトの側で考慮しなければならないということ
は、プログラミング上の大きな負担となる。
数のオブジェクトによって構成され、且つ処理の要求の
受け口と出口が同じではないような場合には、関数呼び
出しのときのような取り扱いはできない。そのため、こ
のような場合には、例えば、サーバ側オブジェクトの処
理の要求の受け口と出口が異なることをクライアント側
オブジェクトの側で考慮してやるなどの工夫が必要とな
る。しかしながら、このようなことをクライアント側オ
ブジェクトの側で考慮しなければならないということ
は、プログラミング上の大きな負担となる。
【0014】本発明は、以上のような従来の実情に鑑み
て提案されたものであり、サーバ側オブジェクトが複数
のオブジェクトによって構成され、且つ処理の要求の受
け口と出口が同じではないような場合にも、サーバ側オ
ブジェクトの処理の要求の受け口と出口が異なることを
クライアント側オブジェクトの側で考慮してやるなどの
工夫を行うことなく、クライアント側オブジェクトとサ
ーバ側オブジェクトとの間でのメッセージパッシングを
行うことが可能なデータ処理方法を提供することを目的
としている。また、本発明は、このようなデータ処理方
法を実現するオペレーティングシステムが記録された記
録媒体、並びに当該記録媒体を備えたデータ処理装置を
提供することも目的としている。
て提案されたものであり、サーバ側オブジェクトが複数
のオブジェクトによって構成され、且つ処理の要求の受
け口と出口が同じではないような場合にも、サーバ側オ
ブジェクトの処理の要求の受け口と出口が異なることを
クライアント側オブジェクトの側で考慮してやるなどの
工夫を行うことなく、クライアント側オブジェクトとサ
ーバ側オブジェクトとの間でのメッセージパッシングを
行うことが可能なデータ処理方法を提供することを目的
としている。また、本発明は、このようなデータ処理方
法を実現するオペレーティングシステムが記録された記
録媒体、並びに当該記録媒体を備えたデータ処理装置を
提供することも目的としている。
【0015】
【課題を解決するための手段】本発明に係るデータ処理
方法は、クライアント側オブジェクトから2以上のオブ
ジェクトによって構成されるサーバ側オブジェクトへメ
ッセージを送り、当該メッセージが要求する処理をサー
バ側オブジェクトによって行い、当該処理の結果をサー
バ側オブジェクトからクライアント側オブジェクトに返
す際のデータ処理方法に関する。
方法は、クライアント側オブジェクトから2以上のオブ
ジェクトによって構成されるサーバ側オブジェクトへメ
ッセージを送り、当該メッセージが要求する処理をサー
バ側オブジェクトによって行い、当該処理の結果をサー
バ側オブジェクトからクライアント側オブジェクトに返
す際のデータ処理方法に関する。
【0016】そして、本発明に係るデータ処理方法で
は、クライアント側オブジェクトからサーバ側オブジェ
クトにメッセージを送るときに、サーバ側オブジェクト
による処理の結果が格納されるデータ領域を確保してお
く。そして、上記メッセージが要求する処理をサーバ側
オブジェクトによって行うときに、サーバ側オブジェク
トを構成するオブジェクト間で、サーバ側オブジェクト
による処理の結果をクライアント側オブジェクトへ返す
権限の委譲を行い、上記権限を最後に委譲されたオブジ
ェクトによる処理の結果を上記データ領域に格納する。
そして、クライアント側オブジェクトは、上記データ領
域に格納されたデータを読み出すことにより、サーバ側
オブジェクトによる処理の結果を受け取るようにする。
は、クライアント側オブジェクトからサーバ側オブジェ
クトにメッセージを送るときに、サーバ側オブジェクト
による処理の結果が格納されるデータ領域を確保してお
く。そして、上記メッセージが要求する処理をサーバ側
オブジェクトによって行うときに、サーバ側オブジェク
トを構成するオブジェクト間で、サーバ側オブジェクト
による処理の結果をクライアント側オブジェクトへ返す
権限の委譲を行い、上記権限を最後に委譲されたオブジ
ェクトによる処理の結果を上記データ領域に格納する。
そして、クライアント側オブジェクトは、上記データ領
域に格納されたデータを読み出すことにより、サーバ側
オブジェクトによる処理の結果を受け取るようにする。
【0017】以上のようなデータ処理方法では、サーバ
側オブジェクトを構成するオブジェクト間で、サーバ側
オブジェクトによる処理の結果をクライアント側オブジ
ェクトへ返す権限の委譲を行い、上記権限を最後に委譲
されたオブジェクトによる処理の結果を上記データ領域
に格納するようにしている。したがって、サーバ側オブ
ジェクトによる処理の要求の受け口と出口が同じでなく
ても、サーバ側オブジェクトによる処理の結果を上記デ
ータ領域を介してクライアント側オブジェクトに適切に
受け渡すことができる。
側オブジェクトを構成するオブジェクト間で、サーバ側
オブジェクトによる処理の結果をクライアント側オブジ
ェクトへ返す権限の委譲を行い、上記権限を最後に委譲
されたオブジェクトによる処理の結果を上記データ領域
に格納するようにしている。したがって、サーバ側オブ
ジェクトによる処理の要求の受け口と出口が同じでなく
ても、サーバ側オブジェクトによる処理の結果を上記デ
ータ領域を介してクライアント側オブジェクトに適切に
受け渡すことができる。
【0018】また、本発明に係る記録媒体は、オブジェ
クトの記述に使用されるアプリケーションプログラムイ
ンターフェースとして、クライアント側オブジェクトか
らサーバ側オブジェクトへメッセージを送る処理を行う
ためのメッセージ送信用メソッドと、オブジェクト間で
の権限の委譲の処理を行うための権限委譲用メソッドと
を有するオペレーティングシステムが記録された記録媒
体である。
クトの記述に使用されるアプリケーションプログラムイ
ンターフェースとして、クライアント側オブジェクトか
らサーバ側オブジェクトへメッセージを送る処理を行う
ためのメッセージ送信用メソッドと、オブジェクト間で
の権限の委譲の処理を行うための権限委譲用メソッドと
を有するオペレーティングシステムが記録された記録媒
体である。
【0019】上記オペレーティングシステムは、上記メ
ッセージ送信用メソッドの実行が要求されると、クライ
アント側オブジェクトからサーバ側オブジェクトへメッ
セージを送る処理を行うとともに、サーバ側オブジェク
トによる処理の結果が格納されるデータ領域を確保する
処理を行う。また、上記オペレーティングシステムは、
上記権限委譲用メソッドの実行が要求されると、サーバ
側オブジェクトを構成するオブジェクトから、サーバ側
オブジェクトを構成する他のオブジェクトへ、サーバ側
オブジェクトによる処理の結果をクライアント側オブジ
ェクトへ返す権限を委譲する処理を行う。また、上記オ
ペレーティングシステムは、上記メッセージ送信用メソ
ッドによってサーバ側オブジェクトに送られたメッセー
ジに基づくサーバ側オブジェクトによる処理が完了した
ら、上記権限委譲用メソッドによって上記権限が最後に
委譲されたオブジェクトによる処理の結果を、上記デー
タ領域に格納する。
ッセージ送信用メソッドの実行が要求されると、クライ
アント側オブジェクトからサーバ側オブジェクトへメッ
セージを送る処理を行うとともに、サーバ側オブジェク
トによる処理の結果が格納されるデータ領域を確保する
処理を行う。また、上記オペレーティングシステムは、
上記権限委譲用メソッドの実行が要求されると、サーバ
側オブジェクトを構成するオブジェクトから、サーバ側
オブジェクトを構成する他のオブジェクトへ、サーバ側
オブジェクトによる処理の結果をクライアント側オブジ
ェクトへ返す権限を委譲する処理を行う。また、上記オ
ペレーティングシステムは、上記メッセージ送信用メソ
ッドによってサーバ側オブジェクトに送られたメッセー
ジに基づくサーバ側オブジェクトによる処理が完了した
ら、上記権限委譲用メソッドによって上記権限が最後に
委譲されたオブジェクトによる処理の結果を、上記デー
タ領域に格納する。
【0020】以上のような記録媒体に記録されたオペレ
ーティングシステムは、上記メッセージ送信用メソッド
によってサーバ側オブジェクトに送られたメッセージに
基づくサーバ側オブジェクトによる処理が完了したら、
上記権限委譲用メソッドによって上記権限が最後に委譲
されたオブジェクトによる処理の結果を、上記データ領
域に格納する。このとき、クライアント側オブジェクト
は、サーバ側オブジェクト内での上記権限の委譲に関わ
らず、上記データ領域に格納されているデータを読み出
すことで、サーバ側オブジェクトによる処理の結果を受
け取ることができる。したがって、このオペレーティン
グシステムを用いることにより、サーバ側オブジェクト
による処理の要求の受け口と出口が同じでなくても、サ
ーバ側オブジェクトによる処理の結果を上記データ領域
を介してクライアント側オブジェクトに適切に受け渡す
ことが可能となる。
ーティングシステムは、上記メッセージ送信用メソッド
によってサーバ側オブジェクトに送られたメッセージに
基づくサーバ側オブジェクトによる処理が完了したら、
上記権限委譲用メソッドによって上記権限が最後に委譲
されたオブジェクトによる処理の結果を、上記データ領
域に格納する。このとき、クライアント側オブジェクト
は、サーバ側オブジェクト内での上記権限の委譲に関わ
らず、上記データ領域に格納されているデータを読み出
すことで、サーバ側オブジェクトによる処理の結果を受
け取ることができる。したがって、このオペレーティン
グシステムを用いることにより、サーバ側オブジェクト
による処理の要求の受け口と出口が同じでなくても、サ
ーバ側オブジェクトによる処理の結果を上記データ領域
を介してクライアント側オブジェクトに適切に受け渡す
ことが可能となる。
【0021】また、本発明に係るデータ処理装置は、オ
ブジェクトの記述に使用されるアプリケーションプログ
ラムインターフェースとして、クライアント側オブジェ
クトからサーバ側オブジェクトへメッセージを送る処理
を行うためのメッセージ送信用メソッドと、オブジェク
ト間での権限の委譲の処理を行うための権限委譲用メソ
ッドとを有するオペレーティングシステムが記録された
記録媒体を備えたデータ処理装置である。
ブジェクトの記述に使用されるアプリケーションプログ
ラムインターフェースとして、クライアント側オブジェ
クトからサーバ側オブジェクトへメッセージを送る処理
を行うためのメッセージ送信用メソッドと、オブジェク
ト間での権限の委譲の処理を行うための権限委譲用メソ
ッドとを有するオペレーティングシステムが記録された
記録媒体を備えたデータ処理装置である。
【0022】上記オペレーティングシステムは、上記メ
ッセージ送信用メソッドの実行が要求されると、クライ
アント側オブジェクトからサーバ側オブジェクトへメッ
セージを送る処理を行うとともに、サーバ側オブジェク
トによる処理の結果が格納されるデータ領域を確保する
処理を行う。また、上記オペレーティングシステムは、
上記権限委譲用メソッドの実行が要求されると、サーバ
側オブジェクトを構成するオブジェクトから、サーバ側
オブジェクトを構成する他のオブジェクトへ、サーバ側
オブジェクトによる処理の結果をクライアント側オブジ
ェクトへ返す権限を委譲する処理を行う。また、上記オ
ペレーティングシステムは、上記メッセージ送信用メソ
ッドによってサーバ側オブジェクトに送られたメッセー
ジに基づくサーバ側オブジェクトによる処理が完了した
ら、上記権限委譲用メソッドによって上記権限が最後に
委譲されたオブジェクトによる処理の結果を、上記デー
タ領域に格納する。
ッセージ送信用メソッドの実行が要求されると、クライ
アント側オブジェクトからサーバ側オブジェクトへメッ
セージを送る処理を行うとともに、サーバ側オブジェク
トによる処理の結果が格納されるデータ領域を確保する
処理を行う。また、上記オペレーティングシステムは、
上記権限委譲用メソッドの実行が要求されると、サーバ
側オブジェクトを構成するオブジェクトから、サーバ側
オブジェクトを構成する他のオブジェクトへ、サーバ側
オブジェクトによる処理の結果をクライアント側オブジ
ェクトへ返す権限を委譲する処理を行う。また、上記オ
ペレーティングシステムは、上記メッセージ送信用メソ
ッドによってサーバ側オブジェクトに送られたメッセー
ジに基づくサーバ側オブジェクトによる処理が完了した
ら、上記権限委譲用メソッドによって上記権限が最後に
委譲されたオブジェクトによる処理の結果を、上記デー
タ領域に格納する。
【0023】以上のようなデータ処理装置に備えられた
記録媒体に記録されたオペレーティングシステムは、上
記メッセージ送信用メソッドによってサーバ側オブジェ
クトに送られたメッセージに基づくサーバ側オブジェク
トによる処理が完了したら、上記権限委譲用メソッドに
よって上記権限が最後に委譲されたオブジェクトによる
処理の結果を、上記データ領域に格納する。このとき、
クライアント側オブジェクトは、サーバ側オブジェクト
内での上記権限の委譲に関わらず、上記データ領域に格
納されているデータを読み出すことで、サーバ側オブジ
ェクトによる処理の結果を受け取ることができる。した
がって、このオペレーティングシステムを用いることに
より、サーバ側オブジェクトによる処理の要求の受け口
と出口が同じでなくても、サーバ側オブジェクトによる
処理の結果を上記データ領域を介してクライアント側オ
ブジェクトに適切に受け渡すことが可能となる。
記録媒体に記録されたオペレーティングシステムは、上
記メッセージ送信用メソッドによってサーバ側オブジェ
クトに送られたメッセージに基づくサーバ側オブジェク
トによる処理が完了したら、上記権限委譲用メソッドに
よって上記権限が最後に委譲されたオブジェクトによる
処理の結果を、上記データ領域に格納する。このとき、
クライアント側オブジェクトは、サーバ側オブジェクト
内での上記権限の委譲に関わらず、上記データ領域に格
納されているデータを読み出すことで、サーバ側オブジ
ェクトによる処理の結果を受け取ることができる。した
がって、このオペレーティングシステムを用いることに
より、サーバ側オブジェクトによる処理の要求の受け口
と出口が同じでなくても、サーバ側オブジェクトによる
処理の結果を上記データ領域を介してクライアント側オ
ブジェクトに適切に受け渡すことが可能となる。
【0024】なお、本明細書では、アプリケーションプ
ログラムの実行を管理するソフトウェアのことを広くオ
ペレーティングシステムと称している。すなわち、本明
細書におけるオペレーティングシステムには、ハードウ
ェアの管理までもを行う基本ソフトだけでなく、ハード
ウェアの管理を行う基本ソフト上で動作して、アプリケ
ーションプログラムの実行を管理する、いわゆるミドル
ウェア等も含まれる。更に、本明細書におけるオペレー
ティングシステムには、複数のプログラム実行環境を1
台のコンピュータ上で実現することにより、ユーザに複
数のコンピュータが稼働しているように見せた、いわゆ
る仮想計算機システムを実現するソフトウェア等も含ま
れる。
ログラムの実行を管理するソフトウェアのことを広くオ
ペレーティングシステムと称している。すなわち、本明
細書におけるオペレーティングシステムには、ハードウ
ェアの管理までもを行う基本ソフトだけでなく、ハード
ウェアの管理を行う基本ソフト上で動作して、アプリケ
ーションプログラムの実行を管理する、いわゆるミドル
ウェア等も含まれる。更に、本明細書におけるオペレー
ティングシステムには、複数のプログラム実行環境を1
台のコンピュータ上で実現することにより、ユーザに複
数のコンピュータが稼働しているように見せた、いわゆ
る仮想計算機システムを実現するソフトウェア等も含ま
れる。
【0025】
【発明の実施の形態】以下、本発明の実施の形態につい
て、図面を参照しながら詳細に説明する。
て、図面を参照しながら詳細に説明する。
【0026】1.ハードウェア環境 まず、本発明を適用したデータ処理装置の一例につい
て、図1を参照して説明する。なお、ここでは、本発明
の実施の形態の一例として、データ処理機能を備えたテ
レビ装置に本発明を適用した例を挙げるが、当然の事な
がら、本発明は、その他のデータ処理装置にも適用可能
である。すなわち、本発明は、オペレーティングシステ
ムが動作するデータ処理装置に対して広く適用可能であ
り、例えば、テレビ装置以外のオーディオ・ビジュアル
機器(いわゆるAV機器)や、各種の事務機器や、一般
のコンピュータ装置等にも適用可能である。
て、図1を参照して説明する。なお、ここでは、本発明
の実施の形態の一例として、データ処理機能を備えたテ
レビ装置に本発明を適用した例を挙げるが、当然の事な
がら、本発明は、その他のデータ処理装置にも適用可能
である。すなわち、本発明は、オペレーティングシステ
ムが動作するデータ処理装置に対して広く適用可能であ
り、例えば、テレビ装置以外のオーディオ・ビジュアル
機器(いわゆるAV機器)や、各種の事務機器や、一般
のコンピュータ装置等にも適用可能である。
【0027】本発明が適用されたデータ処理装置である
図1に示すテレビ装置は、アンテナ又はケーブル等によ
って放送局からの信号を受信し、当該信号に基づいて、
ブラウン管又は液晶パネル等からなる画像表示装置に映
像を表示すると共にスピーカから音声を出力する。
図1に示すテレビ装置は、アンテナ又はケーブル等によ
って放送局からの信号を受信し、当該信号に基づいて、
ブラウン管又は液晶パネル等からなる画像表示装置に映
像を表示すると共にスピーカから音声を出力する。
【0028】このテレビ装置は、通常のテレビ機能を備
えているだけでなく、外部からプログラムやデータを受
けとることが可能となっており、図1に示すように、バ
ス/IOブリッジ1を介してバス2に接続されたテレビ
機能部3と、バス/メモリブリッジ4を介してバス2に
接続されたプロセッサ5と、バス/メモリブリッジ4を
介してプロセッサ5に接続されたROM(Read Only Me
mory)6及びRAM(Random Access Memory)7と、バ
ス2に接続された操作パネル8、外部記憶装置9、通信
装置10及びグラフィックス装置11とを備えている。
えているだけでなく、外部からプログラムやデータを受
けとることが可能となっており、図1に示すように、バ
ス/IOブリッジ1を介してバス2に接続されたテレビ
機能部3と、バス/メモリブリッジ4を介してバス2に
接続されたプロセッサ5と、バス/メモリブリッジ4を
介してプロセッサ5に接続されたROM(Read Only Me
mory)6及びRAM(Random Access Memory)7と、バ
ス2に接続された操作パネル8、外部記憶装置9、通信
装置10及びグラフィックス装置11とを備えている。
【0029】テレビ機能部3は、アンテナ又はケーブル
等によって受信した信号に基づいて、映像や音声を再生
する機能を備えている。このテレビ機能部3は、バス/
IOブリッジ1を介してバス2に接続されており、これ
により、他の部分との信号のやり取りが可能となってい
る。
等によって受信した信号に基づいて、映像や音声を再生
する機能を備えている。このテレビ機能部3は、バス/
IOブリッジ1を介してバス2に接続されており、これ
により、他の部分との信号のやり取りが可能となってい
る。
【0030】プロセッサ5は、このテレビ装置の各部の
制御を行うための演算処理装置であり、バス/メモリブ
リッジ4を介してバス2に接続されている。また、プロ
セッサ5には、バス/メモリブリッジ4を介してROM
6及びRAM7が接続されている。
制御を行うための演算処理装置であり、バス/メモリブ
リッジ4を介してバス2に接続されている。また、プロ
セッサ5には、バス/メモリブリッジ4を介してROM
6及びRAM7が接続されている。
【0031】ROM6は、プロセッサ5による制御を行
うためのオペレーティングシステムやアプリケーション
プログラム等を記憶している。ここで、オペレーティン
グシステムは、オブジェクト指向が適用されてなるオブ
ジェクト指向型オペレーティングシステムである。
うためのオペレーティングシステムやアプリケーション
プログラム等を記憶している。ここで、オペレーティン
グシステムは、オブジェクト指向が適用されてなるオブ
ジェクト指向型オペレーティングシステムである。
【0032】RAM7は、プロセッサ5のワークエリア
として使われる。すなわち、プロセッサ5は、ROM6
に記憶されているオペレーティングシステムやアプリケ
ーションプログラム等を、RAM7をワークエリアとし
て使用して実行することにより、このテレビ装置を構成
する各部を制御する。
として使われる。すなわち、プロセッサ5は、ROM6
に記憶されているオペレーティングシステムやアプリケ
ーションプログラム等を、RAM7をワークエリアとし
て使用して実行することにより、このテレビ装置を構成
する各部を制御する。
【0033】操作パネル8は、ユーザからの操作入力を
受け付けるための入力装置であり、この操作パネル8か
ら、例えば、テレビのチャンネルやボリューム等の切り
換えを指示する信号が入力される。この操作パネル8
は、具体的には、各種信号を入力するための複数のボタ
ンを備えた入力装置や、いわゆるマウスと称されるよう
なポインティングデバイス等からなる。この操作パネル
8によって入力された信号は、バス2及びバス/メモリ
ブリッジ4を介してプロセッサ5に入力される。そし
て、プロセッサ5は、操作パネル8によって入力された
信号に基づいて、所定の演算処理を行って各部を制御す
る。
受け付けるための入力装置であり、この操作パネル8か
ら、例えば、テレビのチャンネルやボリューム等の切り
換えを指示する信号が入力される。この操作パネル8
は、具体的には、各種信号を入力するための複数のボタ
ンを備えた入力装置や、いわゆるマウスと称されるよう
なポインティングデバイス等からなる。この操作パネル
8によって入力された信号は、バス2及びバス/メモリ
ブリッジ4を介してプロセッサ5に入力される。そし
て、プロセッサ5は、操作パネル8によって入力された
信号に基づいて、所定の演算処理を行って各部を制御す
る。
【0034】外部記憶装置9は、例えばハードディスク
装置等からなり、映像や音声等のデータや、このテレビ
装置を制御するのに必要な制御データや、外部から通信
装置10を介してダウンロードされたアプリケーション
プログラム等を記録するのに使われる。
装置等からなり、映像や音声等のデータや、このテレビ
装置を制御するのに必要な制御データや、外部から通信
装置10を介してダウンロードされたアプリケーション
プログラム等を記録するのに使われる。
【0035】通信装置10は、外部との間でデータ通信
を行うための入出力部であり、例えばモデムやターミナ
ルアダプター等からなる。
を行うための入出力部であり、例えばモデムやターミナ
ルアダプター等からなる。
【0036】グラフィックス装置11は、外部記憶装置
9に記録されているデータや、通信装置10を介して外
部から受信したデータ等を加工して表示するためのもの
である。
9に記録されているデータや、通信装置10を介して外
部から受信したデータ等を加工して表示するためのもの
である。
【0037】このテレビ装置は、テレビ機能部3によっ
て提供される通常のテレビ機能を備えているだけでな
く、通信装置10を介して、外部からデータを受け取る
ことが可能となっている。すなわち、このテレビ装置で
は、例えば、外部のネットワークから通信装置10を介
して新規ソフトウェアモジュールを受け取ることによ
り、オペレーティングシステムやアプリケーションプロ
グラムのバージョンアップを行うことが可能となってい
る。
て提供される通常のテレビ機能を備えているだけでな
く、通信装置10を介して、外部からデータを受け取る
ことが可能となっている。すなわち、このテレビ装置で
は、例えば、外部のネットワークから通信装置10を介
して新規ソフトウェアモジュールを受け取ることによ
り、オペレーティングシステムやアプリケーションプロ
グラムのバージョンアップを行うことが可能となってい
る。
【0038】また、このテレビ装置では、プロセッサ5
によって、ROM6に記憶されているオペレーティング
システムを実行するとともに、当該オペレーティングシ
ステム上にて、ROM6や外部記憶装置9に記憶されて
いるアプリケーションプログラムを実行することによ
り、各部の制御を行う。すなわち、このテレビ装置は、
オペレーティングシステムが記録されたコンピュータ読
み取り可能な記録媒体として、ROM6を備えている。
によって、ROM6に記憶されているオペレーティング
システムを実行するとともに、当該オペレーティングシ
ステム上にて、ROM6や外部記憶装置9に記憶されて
いるアプリケーションプログラムを実行することによ
り、各部の制御を行う。すなわち、このテレビ装置は、
オペレーティングシステムが記録されたコンピュータ読
み取り可能な記録媒体として、ROM6を備えている。
【0039】なお、オペレーティングシステムは、RA
M7や外部記憶装置9に記録しておくようにしてもよ
い。特に、オペレーティングシステムの書き換えを行え
るようにしたい場合には、RAM7や外部記憶装置9に
記録しておくようにする。
M7や外部記憶装置9に記録しておくようにしてもよ
い。特に、オペレーティングシステムの書き換えを行え
るようにしたい場合には、RAM7や外部記憶装置9に
記録しておくようにする。
【0040】2.ソフトウェア環境 つぎに、上記テレビ装置におけるソフトウェア環境につ
いて説明する。
いて説明する。
【0041】2−1 オペレーティングシステムの概略
構成 上記テレビ装置で使用されるオペレーティングシステム
は、オブジェクト指向を採用している。換言すれば、こ
のオペレーティングシステム上で動作するアプリケーシ
ョンプログラム等のソフトウェアはオブジェクトとして
モジュール化され、オブジェクト間のやり取りはメッセ
ージパッシングによってなされる。
構成 上記テレビ装置で使用されるオペレーティングシステム
は、オブジェクト指向を採用している。換言すれば、こ
のオペレーティングシステム上で動作するアプリケーシ
ョンプログラム等のソフトウェアはオブジェクトとして
モジュール化され、オブジェクト間のやり取りはメッセ
ージパッシングによってなされる。
【0042】このオペレーティングシステムは、図2に
示すように、オペレーティングシステムとしての基本的
な機能を提供するマイクロカーネルを備えており、当該
マイクロカーネル上で複数のプログラム実行環境を同時
に提供することが可能となっている。なお、以下の説明
では、このオペレーティングシステムによって提供され
るプログラム実行環境のことをメタスペースと呼ぶ。
示すように、オペレーティングシステムとしての基本的
な機能を提供するマイクロカーネルを備えており、当該
マイクロカーネル上で複数のプログラム実行環境を同時
に提供することが可能となっている。なお、以下の説明
では、このオペレーティングシステムによって提供され
るプログラム実行環境のことをメタスペースと呼ぶ。
【0043】そして、このオペレーティングシステム
は、メタスペースとして、具体的には、複数のオブジェ
クトによって構築されるmCOOPメタスペースと、複数の
オブジェクトによって構築されるmDriveメタスペースと
を提供しており、これらのメタスペース毎に、アプリケ
ーションプログラム等を構成するオブジェクトの記述に
使用されるアプリケーションプログラムインターフェー
ス(以下、APIと称する。)を提供している。なお、
以下の説明では、メタスペースを構成するオブジェクト
のことをメタオブジェクトと称する。
は、メタスペースとして、具体的には、複数のオブジェ
クトによって構築されるmCOOPメタスペースと、複数の
オブジェクトによって構築されるmDriveメタスペースと
を提供しており、これらのメタスペース毎に、アプリケ
ーションプログラム等を構成するオブジェクトの記述に
使用されるアプリケーションプログラムインターフェー
ス(以下、APIと称する。)を提供している。なお、
以下の説明では、メタスペースを構成するオブジェクト
のことをメタオブジェクトと称する。
【0044】mCOOPメタスペースは、主にオブジェクト
指向型のアプリケーションプログラム(例えば、操作パ
ネル8を制御するためのグラフィカル・ユーザ・インタ
ーフェースを実現するアプリケーションプログラム等)
を動作させるためのメタスペースである。なお、mCOOP
メタスペースの「m」はメタスペースである旨を示して
おり、「COOP」は、Concurrent Object Oriented P
rogrammingの略である。
指向型のアプリケーションプログラム(例えば、操作パ
ネル8を制御するためのグラフィカル・ユーザ・インタ
ーフェースを実現するアプリケーションプログラム等)
を動作させるためのメタスペースである。なお、mCOOP
メタスペースの「m」はメタスペースである旨を示して
おり、「COOP」は、Concurrent Object Oriented P
rogrammingの略である。
【0045】一方、mDriveメタスペースは、主にハード
ウェアの制御を担うデバイスドライバ(例えば、グラフ
ィックス装置11を制御するためのデバイスドライバ
や、ネットワークを介してのデータのやり取りを行える
ように通信装置10等を制御するためのデバイスドライ
バ等)を動作させるためのメタスペースである。なお、
mDriveメタスペースの「m」はメタスペースである旨を
示しており、「Drive」は、デバイスドライバ(Device
Driver)を動作させるメタスペースである旨を示してい
る。
ウェアの制御を担うデバイスドライバ(例えば、グラフ
ィックス装置11を制御するためのデバイスドライバ
や、ネットワークを介してのデータのやり取りを行える
ように通信装置10等を制御するためのデバイスドライ
バ等)を動作させるためのメタスペースである。なお、
mDriveメタスペースの「m」はメタスペースである旨を
示しており、「Drive」は、デバイスドライバ(Device
Driver)を動作させるメタスペースである旨を示してい
る。
【0046】すなわち、このオペレーティングシステム
では、マイクロカーネルの上でmCOOPメタスペース及びm
Driveメタスペースが動作し、また、mCOOPメタスペース
の上で、オブジェクトとしてモジュール化されたアプリ
ケーションプログラムが動作し、また、mDriveメタスペ
ースの上で、オブジェクトとしてモジュール化されたデ
バイスドライバが動作する。
では、マイクロカーネルの上でmCOOPメタスペース及びm
Driveメタスペースが動作し、また、mCOOPメタスペース
の上で、オブジェクトとしてモジュール化されたアプリ
ケーションプログラムが動作し、また、mDriveメタスペ
ースの上で、オブジェクトとしてモジュール化されたデ
バイスドライバが動作する。
【0047】なお、このオペレーティングシステムは、
マイクロカーネル上で動作するメタスペースとして、mC
OOPメタスペースやmDriveメタスペース以外にも、例え
ば、手続き型のアプリケーションプログラム(例えば、
テレビ機能部3に動画像を表示するためのアプリケーシ
ョンプログラム等)を動作させるためのメタスペース等
も提供可能とされている。
マイクロカーネル上で動作するメタスペースとして、mC
OOPメタスペースやmDriveメタスペース以外にも、例え
ば、手続き型のアプリケーションプログラム(例えば、
テレビ機能部3に動画像を表示するためのアプリケーシ
ョンプログラム等)を動作させるためのメタスペース等
も提供可能とされている。
【0048】mCOOPメタスペースを構成するメタオブジ
ェクトには、例えば、オブジェクト「mCOOPMailer」
と、オブジェクト「mCOOPFaultHandler」とがある。オ
ブジェクト「mCOOPMailer」は、mCOOPメタスペース上で
動作するアプリケーションプログラム間でのメッセージ
パッシングを行う際に使用されるメタオブジェクトであ
り、オブジェクト「mCOOPFaultHandler」は、例外処理
を担うメタオブジェクトである。なお、mCOOPメタスペ
ースは、実際にはこれらのメタオブジェクトの他、様々
なメタオブジェクトによって構成される。
ェクトには、例えば、オブジェクト「mCOOPMailer」
と、オブジェクト「mCOOPFaultHandler」とがある。オ
ブジェクト「mCOOPMailer」は、mCOOPメタスペース上で
動作するアプリケーションプログラム間でのメッセージ
パッシングを行う際に使用されるメタオブジェクトであ
り、オブジェクト「mCOOPFaultHandler」は、例外処理
を担うメタオブジェクトである。なお、mCOOPメタスペ
ースは、実際にはこれらのメタオブジェクトの他、様々
なメタオブジェクトによって構成される。
【0049】mDriveメタスペースを構成するメタオブジ
ェクトには、例えば、オブジェクト「mDriveMailer」
と、オブジェクト「mDriveFaultHandler」とがある。オ
ブジェクト「mDriveMailer」は、mDriveメタスペース上
で動作するデバイスドライバ間でのメッセージパッシン
グを行う際に使用されるメタオブジェクトであり、オブ
ジェクト「mDriveFaultHandler」は、例外処理を担うメ
タオブジェクトである。なお、mDriveメタスペースも、
実際にはこれらのメタオブジェクトの他、様々なメタオ
ブジェクトによって構成される。
ェクトには、例えば、オブジェクト「mDriveMailer」
と、オブジェクト「mDriveFaultHandler」とがある。オ
ブジェクト「mDriveMailer」は、mDriveメタスペース上
で動作するデバイスドライバ間でのメッセージパッシン
グを行う際に使用されるメタオブジェクトであり、オブ
ジェクト「mDriveFaultHandler」は、例外処理を担うメ
タオブジェクトである。なお、mDriveメタスペースも、
実際にはこれらのメタオブジェクトの他、様々なメタオ
ブジェクトによって構成される。
【0050】そして、このオペレーティングシステム
は、フューチャを用いたメッセージパッシングの機能を
提供している。以下、この機能について詳細に説明す
る。なお、以下の説明では、フューチャを用いたメッセ
ージパッシングにおいて、他のオブジェクトに対してメ
ッセージを送って処理を要求する側のオブジェクトのこ
とをクライアント側オブジェクトと称する。また、クラ
イアント側オブジェクトからメッセージを受け取って、
当該メッセージに基づく処理を行う側のオブジェクトの
ことをサーバ側オブジェクトと称する。
は、フューチャを用いたメッセージパッシングの機能を
提供している。以下、この機能について詳細に説明す
る。なお、以下の説明では、フューチャを用いたメッセ
ージパッシングにおいて、他のオブジェクトに対してメ
ッセージを送って処理を要求する側のオブジェクトのこ
とをクライアント側オブジェクトと称する。また、クラ
イアント側オブジェクトからメッセージを受け取って、
当該メッセージに基づく処理を行う側のオブジェクトの
ことをサーバ側オブジェクトと称する。
【0051】2−2 mCOOPメタスペースのAPI 上記オペレーティングシステムは、mCOOPメタスペース
においてフューチャを用いたメッセージパッシングを行
うために、mCOOPメタスペース上で動作するオブジェク
トの記述に使用されるAPIとして、以下のメソッドを
提供している。なお、ここでは、APIをOMG ID
L(Object Management Group Interface Definition
Language)での記述方法に準じて示している。
においてフューチャを用いたメッセージパッシングを行
うために、mCOOPメタスペース上で動作するオブジェク
トの記述に使用されるAPIとして、以下のメソッドを
提供している。なお、ここでは、APIをOMG ID
L(Object Management Group Interface Definition
Language)での記述方法に準じて示している。
【0052】sError SendWithRBox(in OID destObjID,i
n Selector meth,in any msg,in size_t sizeOfMsg,out
RID rBoxID) sError Receive(in RID rBoxID,in any msg,in size_t
sizeOfMsg) sError Reply(in any resultMsg,in size_t sizeOfResu
ltMsg) sError Delegate(in OID destObjID,in Selector meth,
in any msg,in size_tsizeOfMsg) 以下、これらのメソッドについて詳細に説明する。
n Selector meth,in any msg,in size_t sizeOfMsg,out
RID rBoxID) sError Receive(in RID rBoxID,in any msg,in size_t
sizeOfMsg) sError Reply(in any resultMsg,in size_t sizeOfResu
ltMsg) sError Delegate(in OID destObjID,in Selector meth,
in any msg,in size_tsizeOfMsg) 以下、これらのメソッドについて詳細に説明する。
【0053】2−2−1 SendWithRBox() sError SendWithRBox(in OID destObjID,in Selector m
eth,in any msg,in size_t sizeOfMsg,out RID rBoxID) メソッド「SendWithRBox」は、クライアント側オブジェ
クトからサーバ側オブジェクトへメッセージを送る処理
を行うメッセージ送信用メソッドである。すなわち、こ
のメソッド「SendWithRBox」は、クライアント側オブジ
ェクトがメッセージをサーバ側オブジェクトに送信した
後、サーバ側オブジェクトでの処理の結果をクライアン
ト側オブジェクトが必要とする場合に用いられる。
eth,in any msg,in size_t sizeOfMsg,out RID rBoxID) メソッド「SendWithRBox」は、クライアント側オブジェ
クトからサーバ側オブジェクトへメッセージを送る処理
を行うメッセージ送信用メソッドである。すなわち、こ
のメソッド「SendWithRBox」は、クライアント側オブジ
ェクトがメッセージをサーバ側オブジェクトに送信した
後、サーバ側オブジェクトでの処理の結果をクライアン
ト側オブジェクトが必要とする場合に用いられる。
【0054】引数「destObjID」は、オブジェクトを特
定するためのデータ型である「OID」型の引数であり、
この引数「destObjID」には、サーバ側オブジェクトを
特定する値を設定する。
定するためのデータ型である「OID」型の引数であり、
この引数「destObjID」には、サーバ側オブジェクトを
特定する値を設定する。
【0055】引数「meth」は、メソッドを特定するため
のデータ型である「Selector」型の引数であり、この引
数「meth」には、要求する処理が記述されたサーバ側オ
ブジェクトのメソッドを特定する値を設定する。
のデータ型である「Selector」型の引数であり、この引
数「meth」には、要求する処理が記述されたサーバ側オ
ブジェクトのメソッドを特定する値を設定する。
【0056】引数「msg」は、任意のデータ型である「a
ny」型の引数であり、引数「msg」には、サーバ側オブ
ジェクトに対して受け渡すメッセージが格納されている
領域へのポインタを設定する。
ny」型の引数であり、引数「msg」には、サーバ側オブ
ジェクトに対して受け渡すメッセージが格納されている
領域へのポインタを設定する。
【0057】引数「sizeOfMsg」は、データのサイズを
特定するためのデータ型である「size_t」型の引数であ
り、この引数「sizeOfMsg」には、サーバ側オブジェク
トに対して受け渡すメッセージのサイズを示す値を設定
する。
特定するためのデータ型である「size_t」型の引数であ
り、この引数「sizeOfMsg」には、サーバ側オブジェク
トに対して受け渡すメッセージのサイズを示す値を設定
する。
【0058】このメソッド「SendWithRBox」が発行され
ると、後述するように、サーバ側オブジェクトによる処
理の結果が格納されるデータ領域「RBox」がオブジェク
ト「mCOOPMailer」によって確保される。このデータ領
域「RBox」は、クライアント側オブジェクトが将来受け
取る結果が格納される領域であり、フューチャ(futur
e)と呼ばれるものである。
ると、後述するように、サーバ側オブジェクトによる処
理の結果が格納されるデータ領域「RBox」がオブジェク
ト「mCOOPMailer」によって確保される。このデータ領
域「RBox」は、クライアント側オブジェクトが将来受け
取る結果が格納される領域であり、フューチャ(futur
e)と呼ばれるものである。
【0059】そして、このメソッド「SendWithRBox」
は、サーバ側オブジェクトにメッセージを送った後に、
データ領域「RBox」を特定するためのデータ型である
「RID」型の識別子「rBoxID」を得る。この識別子「rBo
xID」は、メソッド「SendWithRBox」が発行されたとき
にオブジェクト「mCOOPMailer」によって確保されたデ
ータ領域「RBox」を特定する識別子である。
は、サーバ側オブジェクトにメッセージを送った後に、
データ領域「RBox」を特定するためのデータ型である
「RID」型の識別子「rBoxID」を得る。この識別子「rBo
xID」は、メソッド「SendWithRBox」が発行されたとき
にオブジェクト「mCOOPMailer」によって確保されたデ
ータ領域「RBox」を特定する識別子である。
【0060】このメソッド「SendWithRBox」は、エラー
コードを示すデータ型である「sError」型の値を戻り値
として得る。すなわち、このメソッド「SendWithRBox」
が発行されたときに、当該メソッド「SendWithRBox」の
処理が正常に完了しなかった場合には、その原因を示す
エラコードが戻り値として返ってくる。なお、処理が正
常に完了した場合には、正常に処理が完了したことを示
す値が戻り値として返ってくる。
コードを示すデータ型である「sError」型の値を戻り値
として得る。すなわち、このメソッド「SendWithRBox」
が発行されたときに、当該メソッド「SendWithRBox」の
処理が正常に完了しなかった場合には、その原因を示す
エラコードが戻り値として返ってくる。なお、処理が正
常に完了した場合には、正常に処理が完了したことを示
す値が戻り値として返ってくる。
【0061】2−2−2 Receive() sError Receive(in RID rBoxID,in any msg,in size_t
sizeOfMsg) メソッド「Receive」は、データ領域「RBox」に格納さ
れているデータを読み出すデータ読み出し用メソッドで
ある。すなわち、このメソッド「Receive」は、クライ
アント側オブジェクトがメソッド「SendWithRBox」を発
行した後に、クライアント側オブジェクトがサーバ側オ
ブジェクトによる処理の結果を受け取る場合に用いられ
る。
sizeOfMsg) メソッド「Receive」は、データ領域「RBox」に格納さ
れているデータを読み出すデータ読み出し用メソッドで
ある。すなわち、このメソッド「Receive」は、クライ
アント側オブジェクトがメソッド「SendWithRBox」を発
行した後に、クライアント側オブジェクトがサーバ側オ
ブジェクトによる処理の結果を受け取る場合に用いられ
る。
【0062】引数「rBoxID」は、データ領域「RBox」を
特定するためのデータ型である「RID」型の引数であ
り、この引数「rBoxID」には、サーバ側オブジェクトに
よる処理の結果が格納されるデータ領域「RBox」を特定
する識別子を設定する。すなわち、この引数「rBoxID」
には、メソッド「SendWithRBox」を発行したときに得た
識別子「rBoxID」の値を設定する。
特定するためのデータ型である「RID」型の引数であ
り、この引数「rBoxID」には、サーバ側オブジェクトに
よる処理の結果が格納されるデータ領域「RBox」を特定
する識別子を設定する。すなわち、この引数「rBoxID」
には、メソッド「SendWithRBox」を発行したときに得た
識別子「rBoxID」の値を設定する。
【0063】引数「msg」は、任意のデータ型である「a
ny」型の引数であり、この引数「msg」には、受け取っ
たメッセージを格納する領域へのポインタを設定する。
ny」型の引数であり、この引数「msg」には、受け取っ
たメッセージを格納する領域へのポインタを設定する。
【0064】引数「sizeOfMsg」は、データのサイズを
特定するためのデータ型である「size_t」型の引数であ
り、この引数「sizeOfMsg」には、受け取ったメッセー
ジを格納する領域のサイズを示す値を設定する。
特定するためのデータ型である「size_t」型の引数であ
り、この引数「sizeOfMsg」には、受け取ったメッセー
ジを格納する領域のサイズを示す値を設定する。
【0065】このメソッド「Receive」は、エラーコー
ドを示すデータ型である「sError」型の値を戻り値とし
て得る。すなわち、このメソッド「Receive」が発行さ
れたときに、当該メソッド「Receive」の処理が正常に
完了しなかった場合には、その原因を示すエラコードが
戻り値として返ってくる。なお、処理が正常に完了した
場合には、正常に処理が完了したことを示す値が戻り値
として返ってくる。
ドを示すデータ型である「sError」型の値を戻り値とし
て得る。すなわち、このメソッド「Receive」が発行さ
れたときに、当該メソッド「Receive」の処理が正常に
完了しなかった場合には、その原因を示すエラコードが
戻り値として返ってくる。なお、処理が正常に完了した
場合には、正常に処理が完了したことを示す値が戻り値
として返ってくる。
【0066】2−2−3 Reply() sError Reply(in any resultMsg,in size_t sizeOfResu
ltMsg) メソッド「Reply」は、クライアント側オブジェクトに
よってメソッド「SendWithRBox」が発行された後に、サ
ーバ側オブジェクトがクライアント側オブジェクトへ処
理の結果を返す場合に用いられる。
ltMsg) メソッド「Reply」は、クライアント側オブジェクトに
よってメソッド「SendWithRBox」が発行された後に、サ
ーバ側オブジェクトがクライアント側オブジェクトへ処
理の結果を返す場合に用いられる。
【0067】引数「resultMsg」は、任意のデータ型で
ある「any」型の引数であり、この引数「resultMsg」に
は、クライアント側オブジェクトに受け渡すメッセージ
が格納された領域へのポインタを設定する。
ある「any」型の引数であり、この引数「resultMsg」に
は、クライアント側オブジェクトに受け渡すメッセージ
が格納された領域へのポインタを設定する。
【0068】引数「sizeOfResultMsg」は、データのサ
イズを特定するためのデータ型である「size_t」型の引
数であり、この引数「sizeOfResultMsg」には、クライ
アント側オブジェクトに受け渡すメッセージのサイズを
示す値を設定する。
イズを特定するためのデータ型である「size_t」型の引
数であり、この引数「sizeOfResultMsg」には、クライ
アント側オブジェクトに受け渡すメッセージのサイズを
示す値を設定する。
【0069】このメソッド「Reply」は、エラーコード
を示すデータ型である「sError」型の値を戻り値として
得る。すなわち、このメソッド「Reply」が発行された
ときに、当該メソッド「Reply」の処理が正常に完了し
なかった場合には、その原因を示すエラコードが戻り値
として返ってくる。なお、処理が正常に完了した場合に
は、正常に処理が完了したことを示す値が戻り値として
返ってくる。
を示すデータ型である「sError」型の値を戻り値として
得る。すなわち、このメソッド「Reply」が発行された
ときに、当該メソッド「Reply」の処理が正常に完了し
なかった場合には、その原因を示すエラコードが戻り値
として返ってくる。なお、処理が正常に完了した場合に
は、正常に処理が完了したことを示す値が戻り値として
返ってくる。
【0070】2−2−4 Delegate() sError Delegate(in OID destObjID,in Selector meth,
in any msg,in size_tsizeOfMsg) メソッド「Delegate」は、オブジェクト間での権限の委
譲の処理を行うための権限委譲用メソッドである。すな
わち、このメソッド「Delegate」は、サーバ側オブジェ
クトが複数のオブジェクトから構成される場合に、サー
バ側オブジェクトを構成するオブジェクト間で、サーバ
側オブジェクトによる処理の結果をクライアント側オブ
ジェクトへ返す権限の委譲を行う場合に用いられる。
in any msg,in size_tsizeOfMsg) メソッド「Delegate」は、オブジェクト間での権限の委
譲の処理を行うための権限委譲用メソッドである。すな
わち、このメソッド「Delegate」は、サーバ側オブジェ
クトが複数のオブジェクトから構成される場合に、サー
バ側オブジェクトを構成するオブジェクト間で、サーバ
側オブジェクトによる処理の結果をクライアント側オブ
ジェクトへ返す権限の委譲を行う場合に用いられる。
【0071】なお、以下の説明では、上記権限のことを
返答権限と称する。また、サーバ側オブジェクトを構成
するオブジェクトのうち、返答権限を委譲する側のオブ
ジェクトのことを権限委譲元オブジェクトと称し、返答
権限が委譲される側のオブジェクトのことを権限委譲先
オブジェクトと称する。
返答権限と称する。また、サーバ側オブジェクトを構成
するオブジェクトのうち、返答権限を委譲する側のオブ
ジェクトのことを権限委譲元オブジェクトと称し、返答
権限が委譲される側のオブジェクトのことを権限委譲先
オブジェクトと称する。
【0072】引数「destObjID」は、オブジェクトを特
定するためのデータ型である「OID」型の引数であり、
この引数「destObjID」には、権限委譲先オブジェクト
を特定する値を設定する。
定するためのデータ型である「OID」型の引数であり、
この引数「destObjID」には、権限委譲先オブジェクト
を特定する値を設定する。
【0073】引数「meth」は、メソッドを特定するため
のデータ型である「Selector」型の引数であり、この引
数「meth」には、要求する処理が記述された権限委譲先
オブジェクトのメソッドを特定する値を設定する。
のデータ型である「Selector」型の引数であり、この引
数「meth」には、要求する処理が記述された権限委譲先
オブジェクトのメソッドを特定する値を設定する。
【0074】引数「msg」は、任意のデータ型である「a
ny」型の引数であり、この引数「msg」には、権限委譲
先オブジェクトに対して受け渡すメッセージが格納され
ている領域へのポインタを設定する。
ny」型の引数であり、この引数「msg」には、権限委譲
先オブジェクトに対して受け渡すメッセージが格納され
ている領域へのポインタを設定する。
【0075】引数「sizeOfMsg」は、データのサイズを
特定するためのデータ型である「size_t」型の引数であ
り、この引数「sizeOfMsg」には、権限委譲先オブジェ
クトに対して受け渡すメッセージのサイズを示す値を設
定する。
特定するためのデータ型である「size_t」型の引数であ
り、この引数「sizeOfMsg」には、権限委譲先オブジェ
クトに対して受け渡すメッセージのサイズを示す値を設
定する。
【0076】このメソッド「Delegate」は、エラーコー
ドを示すデータ型である「sError」型の値を戻り値とし
て得る。すなわち、このメソッド「Delegate」が発行さ
れたときに、当該メソッド「Delegate」の処理が正常に
完了しなかった場合には、その原因を示すエラコードが
戻り値として返ってくる。なお、処理が正常に完了した
場合には、正常に処理が完了したことを示す値が戻り値
として返ってくる。
ドを示すデータ型である「sError」型の値を戻り値とし
て得る。すなわち、このメソッド「Delegate」が発行さ
れたときに、当該メソッド「Delegate」の処理が正常に
完了しなかった場合には、その原因を示すエラコードが
戻り値として返ってくる。なお、処理が正常に完了した
場合には、正常に処理が完了したことを示す値が戻り値
として返ってくる。
【0077】2−3 mDriveメタスペースのAPI 上記オペレーティングシステムは、mDriveメタスペース
においてフューチャを用いたメッセージパッシングを行
うために、mDriveメタスペース上で動作するオブジェク
トの記述に使用されるAPIとして、以下のメソッドを
提供している。なお、ここでは、APIをOMG ID
Lでの記述方法に準じて示している。
においてフューチャを用いたメッセージパッシングを行
うために、mDriveメタスペース上で動作するオブジェク
トの記述に使用されるAPIとして、以下のメソッドを
提供している。なお、ここでは、APIをOMG ID
Lでの記述方法に準じて示している。
【0078】sError SendWithContinuation(in OID des
tObjID,in Selector meth,in any msg,in size_t sizeO
fMsg,in Selector contMeth) sError Kick(in ContID contID,in any msg,in size_t
sizeOfMsg) 以下、これらのメソッドについて詳細に説明する。
tObjID,in Selector meth,in any msg,in size_t sizeO
fMsg,in Selector contMeth) sError Kick(in ContID contID,in any msg,in size_t
sizeOfMsg) 以下、これらのメソッドについて詳細に説明する。
【0079】2−3−1 SendWithContinuation() sError SendWithContinuation(in OID destObjID,in Se
lector meth,in any msg,in size_t sizeOfMsg,in Sele
ctor contMeth) メソッド「SendWithContinuation」は、クライアント側
オブジェクトからサーバ側オブジェクトへメッセージを
送る処理を行うメッセージ送信用メソッドである。この
メソッド「SendWithContinuation」は、クライアント側
オブジェクトがサーバ側オブジェクトへメッセージを送
信した後、サーバ側オブジェクトでの処理の結果を受け
て、クライアント側オブジェクトが特定のメソッド(以
下、継続メソッドと称する。)を実行する必要がある場
合に用いられる。
lector meth,in any msg,in size_t sizeOfMsg,in Sele
ctor contMeth) メソッド「SendWithContinuation」は、クライアント側
オブジェクトからサーバ側オブジェクトへメッセージを
送る処理を行うメッセージ送信用メソッドである。この
メソッド「SendWithContinuation」は、クライアント側
オブジェクトがサーバ側オブジェクトへメッセージを送
信した後、サーバ側オブジェクトでの処理の結果を受け
て、クライアント側オブジェクトが特定のメソッド(以
下、継続メソッドと称する。)を実行する必要がある場
合に用いられる。
【0080】引数「destObjID」は、オブジェクトを特
定するためのデータ型である「OID」型の引数であり、
この引数「destObjID」には、サーバ側オブジェクトを
特定する値を設定する。
定するためのデータ型である「OID」型の引数であり、
この引数「destObjID」には、サーバ側オブジェクトを
特定する値を設定する。
【0081】引数「meth」は、メソッドを特定するため
のデータ型である「Selector」型の引数であり、この引
数「meth」には、要求する処理が記述されたサーバ側オ
ブジェクトのメソッドを特定する値を設定する。
のデータ型である「Selector」型の引数であり、この引
数「meth」には、要求する処理が記述されたサーバ側オ
ブジェクトのメソッドを特定する値を設定する。
【0082】引数「msg」は、任意のデータ型である「a
ny」型の引数であり、引数「msg」には、サーバ側オブ
ジェクトに対して受け渡すメッセージが格納されている
領域へのポインタを設定する。
ny」型の引数であり、引数「msg」には、サーバ側オブ
ジェクトに対して受け渡すメッセージが格納されている
領域へのポインタを設定する。
【0083】引数「sizeOfMsg」は、データのサイズを
特定するためのデータ型である「size_t」型の引数であ
り、この引数「sizeOfMsg」には、サーバ側オブジェク
トに対して受け渡すメッセージのサイズを示す値を設定
する。
特定するためのデータ型である「size_t」型の引数であ
り、この引数「sizeOfMsg」には、サーバ側オブジェク
トに対して受け渡すメッセージのサイズを示す値を設定
する。
【0084】引数「contMeth」は、メソッドを特定する
ためのデータ型である「Selector」型の引数であり、こ
の引数「contMeth」には、継続メソッドを特定する値を
設定する。
ためのデータ型である「Selector」型の引数であり、こ
の引数「contMeth」には、継続メソッドを特定する値を
設定する。
【0085】このメソッド「SendWithContinuation」が
発行されると、後述するように、オブジェクト「mDrive
Mailer」によってデータ領域「Continuation」が確保さ
れ、当該データ領域「Continuation」に継続メソッドに
ついての情報が格納される。このデータ領域「Continua
tion」は、クライアント側オブジェクトが将来実行する
継続メソッドについての情報が格納される領域であり、
フューチャ(future)と呼ばれるものである。
発行されると、後述するように、オブジェクト「mDrive
Mailer」によってデータ領域「Continuation」が確保さ
れ、当該データ領域「Continuation」に継続メソッドに
ついての情報が格納される。このデータ領域「Continua
tion」は、クライアント側オブジェクトが将来実行する
継続メソッドについての情報が格納される領域であり、
フューチャ(future)と呼ばれるものである。
【0086】このメソッド「SendWithContinuation」
は、エラーコードを示すデータ型である「sError」型の
値を戻り値として得る。すなわち、このメソッド「Send
WithContinuation」が発行されたときに、当該メソッド
「SendWithContinuation」の処理が正常に完了しなかっ
た場合には、その原因を示すエラコードが戻り値として
返ってくる。なお、処理が正常に完了した場合には、正
常に処理が完了したことを示す値が戻り値として返って
くる。
は、エラーコードを示すデータ型である「sError」型の
値を戻り値として得る。すなわち、このメソッド「Send
WithContinuation」が発行されたときに、当該メソッド
「SendWithContinuation」の処理が正常に完了しなかっ
た場合には、その原因を示すエラコードが戻り値として
返ってくる。なお、処理が正常に完了した場合には、正
常に処理が完了したことを示す値が戻り値として返って
くる。
【0087】2−3−2 Kick() sError Kick(in ContID contID,in any msg,in size_t
sizeOfMsg) メソッド「Kick」は、クライアント側オブジェクトによ
ってメソッド「SendWithContinuation」が発行された後
に、サーバ側オブジェクトがクライアント側オブジェク
トに継続メソッドを実行させる場合に用いられる。
sizeOfMsg) メソッド「Kick」は、クライアント側オブジェクトによ
ってメソッド「SendWithContinuation」が発行された後
に、サーバ側オブジェクトがクライアント側オブジェク
トに継続メソッドを実行させる場合に用いられる。
【0088】引数「contID」は、データ領域「Continua
tion」を特定するためのデータ型である「contID」型の
引数であり、この引数「contID」には、メソッド「Send
WithContinuation」が発行されたときにオブジェクト
「mDriveMailer」によって確保されたデータ領域「Cont
inuation」を特定する識別子を設定する。
tion」を特定するためのデータ型である「contID」型の
引数であり、この引数「contID」には、メソッド「Send
WithContinuation」が発行されたときにオブジェクト
「mDriveMailer」によって確保されたデータ領域「Cont
inuation」を特定する識別子を設定する。
【0089】引数「msg」は、任意のデータ型である「a
ny」型の引数であり、この引数「msg」には、クライア
ント側オブジェクトに受け渡すメッセージが格納された
領域へのポインタを設定する。
ny」型の引数であり、この引数「msg」には、クライア
ント側オブジェクトに受け渡すメッセージが格納された
領域へのポインタを設定する。
【0090】引数「sizeOfMsg」は、データのサイズを
特定するためのデータ型である「size_t」型の引数であ
り、この引数「sizeOfMsg」には、クライアント側オブ
ジェクトに受け渡すメッセージのサイズを示す値を設定
する。
特定するためのデータ型である「size_t」型の引数であ
り、この引数「sizeOfMsg」には、クライアント側オブ
ジェクトに受け渡すメッセージのサイズを示す値を設定
する。
【0091】このメソッド「Kick」は、エラーコードを
示すデータ型である「sError」型の値を戻り値として得
る。すなわち、このメソッド「kick」が発行されたとき
に、当該メソッド「Kick」の処理が正常に完了しなかっ
た場合には、その原因を示すエラコードが戻り値として
返ってくる。なお、処理が正常に完了した場合には、正
常に処理が完了したことを示す値が戻り値として返って
くる。
示すデータ型である「sError」型の値を戻り値として得
る。すなわち、このメソッド「kick」が発行されたとき
に、当該メソッド「Kick」の処理が正常に完了しなかっ
た場合には、その原因を示すエラコードが戻り値として
返ってくる。なお、処理が正常に完了した場合には、正
常に処理が完了したことを示す値が戻り値として返って
くる。
【0092】2−4 メッセージパッシングに使用され
るデータ領域 上記オペレーティングシステムは、mCOOPメタスペース
でメッセージパッシングを行う際に、フューチャとして
データ領域「RBox」を使用するとともに、クライアント
側オブジェクトからサーバ側オブジェクトへ情報を受け
渡すためにデータ領域「DeliveryBoxA」を使用する。
るデータ領域 上記オペレーティングシステムは、mCOOPメタスペース
でメッセージパッシングを行う際に、フューチャとして
データ領域「RBox」を使用するとともに、クライアント
側オブジェクトからサーバ側オブジェクトへ情報を受け
渡すためにデータ領域「DeliveryBoxA」を使用する。
【0093】また、上記オペレーティングシステムは、
mDriveメタスペースでメッセージパッシングを行う際
に、フューチャとしてデータ領域「Continuation」を使
用するとともに、クライアント側オブジェクトからサー
バ側オブジェクトへ情報を受け渡すためにデータ領域
「DeliveryBoxB」を使用する。
mDriveメタスペースでメッセージパッシングを行う際
に、フューチャとしてデータ領域「Continuation」を使
用するとともに、クライアント側オブジェクトからサー
バ側オブジェクトへ情報を受け渡すためにデータ領域
「DeliveryBoxB」を使用する。
【0094】また、上記オペレーティングシステムは、
オブジェクトの実行状態等を管理するための情報が格納
されるデータ領域「Thread」をオブジェクト毎に確保
し、当該データ領域「Thread」にフューチャについての
情報も格納する。なお、mCOOPメタスペース及びmDrive
メタスペース上では、いわゆるシングルスレッドとして
オブジェクトが動作するようになされており、1つのオ
ブジェクトに対して1つのスレッドが対応する。そし
て、当該スレッドの情報が、オブジェクトの実行状態等
を管理するための情報として、データ領域「Thread」に
格納される。
オブジェクトの実行状態等を管理するための情報が格納
されるデータ領域「Thread」をオブジェクト毎に確保
し、当該データ領域「Thread」にフューチャについての
情報も格納する。なお、mCOOPメタスペース及びmDrive
メタスペース上では、いわゆるシングルスレッドとして
オブジェクトが動作するようになされており、1つのオ
ブジェクトに対して1つのスレッドが対応する。そし
て、当該スレッドの情報が、オブジェクトの実行状態等
を管理するための情報として、データ領域「Thread」に
格納される。
【0095】なお、これらのデータ領域「RBox」「Deli
veryBoxA」「Continuation」「DeliveryBoxB」「Threa
d」は、メッセージパッシングの機能を提供したり、オ
ブジェクトを管理したりするために、オペレーティング
システムが使用するデータ領域であり、アプリケーショ
ンプログラムやデバイスドライバ等によって直接アクセ
スされるようなことが無いように、オペレーティングシ
ステムによって管理される。
veryBoxA」「Continuation」「DeliveryBoxB」「Threa
d」は、メッセージパッシングの機能を提供したり、オ
ブジェクトを管理したりするために、オペレーティング
システムが使用するデータ領域であり、アプリケーショ
ンプログラムやデバイスドライバ等によって直接アクセ
スされるようなことが無いように、オペレーティングシ
ステムによって管理される。
【0096】以下、これらのデータ領域について詳細に
説明する。
説明する。
【0097】2−4−1 RBox データ領域「RBox」は、メソッド「SendWithRBox」が発
行されたときに、オブジェクト「mCOOPMailer」によっ
て確保される。オブジェクト「mCOOPMailer」によるデ
ータ領域「RBox」の確保は、具体的には、表1に示す属
性を持つクラス(以下、クラス「RBox」と称する。)の
インスタンスを生成することにより行われる。なお、表
1では、クラス「RBox」の属性のうち、mCOOPメタスペ
ースでのメッセージパッシングの基本形を実現するため
に必要な属性のうち、最小限のものだけを示しており、
これ以外の属性を含ませるようにしても良いことは言う
までもない。
行されたときに、オブジェクト「mCOOPMailer」によっ
て確保される。オブジェクト「mCOOPMailer」によるデ
ータ領域「RBox」の確保は、具体的には、表1に示す属
性を持つクラス(以下、クラス「RBox」と称する。)の
インスタンスを生成することにより行われる。なお、表
1では、クラス「RBox」の属性のうち、mCOOPメタスペ
ースでのメッセージパッシングの基本形を実現するため
に必要な属性のうち、最小限のものだけを示しており、
これ以外の属性を含ませるようにしても良いことは言う
までもない。
【0098】
【表1】
【0099】表1に示すように、クラス「RBox」は、オ
ブジェクト毎に設定されるデータ領域「Thread」を特定
するためのデータ型である「ThreadID」型の属性「crea
tor」を有する。
ブジェクト毎に設定されるデータ領域「Thread」を特定
するためのデータ型である「ThreadID」型の属性「crea
tor」を有する。
【0100】また、クラス「RBox」は、サーバ側オブジ
ェクトによる処理の結果のデータである結果データが格
納される領域として、論理値のためのデータ型である
「bool」型の属性「ready」と、ポインタを示すデータ
型である「void*」型の属性「resultMsg」と、データの
サイズを特定するためのデータ型である「size_t」型の
属性「sizeOfResultMsg」とを有する。
ェクトによる処理の結果のデータである結果データが格
納される領域として、論理値のためのデータ型である
「bool」型の属性「ready」と、ポインタを示すデータ
型である「void*」型の属性「resultMsg」と、データの
サイズを特定するためのデータ型である「size_t」型の
属性「sizeOfResultMsg」とを有する。
【0101】また、クラス「RBox」は、サーバ側オブジ
ェクトの状態を示す状態データが格納される領域とし
て、エラーコードを示すデータ型である「sError」型の
属性「status」を有する。
ェクトの状態を示す状態データが格納される領域とし
て、エラーコードを示すデータ型である「sError」型の
属性「status」を有する。
【0102】属性「creator」には、このデータ領域「R
Box」の生成の元となったオブジェクト(すなわちメソ
ッド「SendWithRBox」を発行したクライアント側オブジ
ェクト)に対応したデータ領域「Thread」を特定する識
別子が設定される。なお、mCOOPメタスペース上では、
上述したように、シングルスレッドとしてオブジェクト
が動作するようになされており、1つのオブジェクトに
対して1つのデータ領域「Thread」が対応する。したが
って、属性「creator」によってデータ領域「Thread」
が特定されると、これに対応しているクライアント側オ
ブジェクトが特定されることとなる。
Box」の生成の元となったオブジェクト(すなわちメソ
ッド「SendWithRBox」を発行したクライアント側オブジ
ェクト)に対応したデータ領域「Thread」を特定する識
別子が設定される。なお、mCOOPメタスペース上では、
上述したように、シングルスレッドとしてオブジェクト
が動作するようになされており、1つのオブジェクトに
対して1つのデータ領域「Thread」が対応する。したが
って、属性「creator」によってデータ領域「Thread」
が特定されると、これに対応しているクライアント側オ
ブジェクトが特定されることとなる。
【0103】属性「ready」には、サーバ側オブジェク
トによる処理の結果が返ってきているか否かを示す値が
設定される。換言すれば、属性「ready」は、サーバ側
オブジェクトからクライアント側オブジェクトへ返す結
果メッセージの準備ができているか否かを示すフラグで
ある。
トによる処理の結果が返ってきているか否かを示す値が
設定される。換言すれば、属性「ready」は、サーバ側
オブジェクトからクライアント側オブジェクトへ返す結
果メッセージの準備ができているか否かを示すフラグで
ある。
【0104】属性「resultMsg」には、サーバ側オブジ
ェクトによる処理の結果としてクライアント側オブジェ
クトに受け渡すメッセージが格納された領域へのポイン
タが設定される。
ェクトによる処理の結果としてクライアント側オブジェ
クトに受け渡すメッセージが格納された領域へのポイン
タが設定される。
【0105】属性「sizeOfResultMsg」には、サーバ側
オブジェクトによる処理の結果としてクライアント側オ
ブジェクトに受け渡すメッセージのサイズを示す値が設
定される。
オブジェクトによる処理の結果としてクライアント側オ
ブジェクトに受け渡すメッセージのサイズを示す値が設
定される。
【0106】属性「status」には、クライアント側オブ
ジェクトに知らせるべき情報として、サーバ側オブジェ
クトの状態を示すコードが設定される。すなわち、例え
ば、サーバ側オブジェクトの正常な実行を妨げる例外事
象が発生して、サーバ側オブジェクトの処理が正常に完
了しなかった場合に、後述するように、サーバ側オブジ
ェクトの処理が正常に完了しなかったことが、オブジェ
クト「mCOOPFaultHandler」からオブジェクト「mCOOPMa
iler」に通知され、オブジェクト「mCOOPMailer」によ
って、サーバ側オブジェクトの状態を示すエラーコード
が属性「status」に設定される。なお、サーバ側オブジ
ェクトによる処理が正常に行われている場合、属性「st
atus」には、サーバ側オブジェクトが正常な状態である
ことを示す値が設定される。
ジェクトに知らせるべき情報として、サーバ側オブジェ
クトの状態を示すコードが設定される。すなわち、例え
ば、サーバ側オブジェクトの正常な実行を妨げる例外事
象が発生して、サーバ側オブジェクトの処理が正常に完
了しなかった場合に、後述するように、サーバ側オブジ
ェクトの処理が正常に完了しなかったことが、オブジェ
クト「mCOOPFaultHandler」からオブジェクト「mCOOPMa
iler」に通知され、オブジェクト「mCOOPMailer」によ
って、サーバ側オブジェクトの状態を示すエラーコード
が属性「status」に設定される。なお、サーバ側オブジ
ェクトによる処理が正常に行われている場合、属性「st
atus」には、サーバ側オブジェクトが正常な状態である
ことを示す値が設定される。
【0107】なお、クライアント側オブジェクトによっ
てメソッド「Receive」が発行されると、属性「ready」
が参照され、これにより、サーバ側オブジェクトによる
処理の結果が返ってきているか否かが判断される。そし
て、サーバ側オブジェクトによる処理の結果が返ってき
ている場合には、属性「resultMsg」が参照され、これ
により、サーバ側オブジェクトによる処理の結果として
クライアント側オブジェクトに受け渡すメッセージが格
納されている領域が特定され、当該領域から属性「size
OfRresultMsg」が示すサイズ分のデータが読み出され
る。これにより、サーバ側オブジェクトによる処理の結
果としてクライアント側オブジェクトに受け渡すメッセ
ージが読み出され、当該メッセージがクライアント側オ
ブジェクトに受け渡されることとなる。
てメソッド「Receive」が発行されると、属性「ready」
が参照され、これにより、サーバ側オブジェクトによる
処理の結果が返ってきているか否かが判断される。そし
て、サーバ側オブジェクトによる処理の結果が返ってき
ている場合には、属性「resultMsg」が参照され、これ
により、サーバ側オブジェクトによる処理の結果として
クライアント側オブジェクトに受け渡すメッセージが格
納されている領域が特定され、当該領域から属性「size
OfRresultMsg」が示すサイズ分のデータが読み出され
る。これにより、サーバ側オブジェクトによる処理の結
果としてクライアント側オブジェクトに受け渡すメッセ
ージが読み出され、当該メッセージがクライアント側オ
ブジェクトに受け渡されることとなる。
【0108】2−4−2 DeliveryBoxA データ領域「DeliveryBoxA」は、メソッド「SendWithRB
ox」が発行されたときに、クライアント側オブジェクト
からサーバ側オブジェクトへ情報を受け渡すために、オ
ブジェクト「mCOOPMailer」によって確保される。オブ
ジェクト「mCOOPMailer」によるデータ領域「DeliveryB
oxA」の確保は、具体的には、表2に示す属性を持つク
ラス(以下、クラス「DeliveryBoxA」と称する。)のイ
ンスタンスを生成することにより行われる。なお、表2
では、クラス「DeliveryBoxA」の属性のうち、mCOOPメ
タスペースでのメッセージパッシングの基本形を実現す
るために必要な属性のうち、最小限のものだけを示して
おり、これ以外の属性を含ませるようにしても良いこと
は言うまでもない。
ox」が発行されたときに、クライアント側オブジェクト
からサーバ側オブジェクトへ情報を受け渡すために、オ
ブジェクト「mCOOPMailer」によって確保される。オブ
ジェクト「mCOOPMailer」によるデータ領域「DeliveryB
oxA」の確保は、具体的には、表2に示す属性を持つク
ラス(以下、クラス「DeliveryBoxA」と称する。)のイ
ンスタンスを生成することにより行われる。なお、表2
では、クラス「DeliveryBoxA」の属性のうち、mCOOPメ
タスペースでのメッセージパッシングの基本形を実現す
るために必要な属性のうち、最小限のものだけを示して
おり、これ以外の属性を含ませるようにしても良いこと
は言うまでもない。
【0109】
【表2】
【0110】表2に示すように、クラス「DeliveryBox
A」は、データ領域「RBox」を特定するためのデータ型
である「RID」型の属性「rBoxID」と、ポインタを示す
データ型である「void*」型の属性「msg」と、データの
サイズを特定するためのデータ型である「size_t」型の
属性「sizeOfMsg」とを有する。
A」は、データ領域「RBox」を特定するためのデータ型
である「RID」型の属性「rBoxID」と、ポインタを示す
データ型である「void*」型の属性「msg」と、データの
サイズを特定するためのデータ型である「size_t」型の
属性「sizeOfMsg」とを有する。
【0111】属性「rBoxID」には、このデータ領域「De
liveryBoxA」を用いて行われるメッセージパッシングに
使用されるデータ領域「RBox」を特定する識別子が設定
される。
liveryBoxA」を用いて行われるメッセージパッシングに
使用されるデータ領域「RBox」を特定する識別子が設定
される。
【0112】属性「msg」には、クライアント側オブジ
ェクトからサーバ側オブジェクトに受け渡すメッセージ
が格納された領域へのポインタが設定される。
ェクトからサーバ側オブジェクトに受け渡すメッセージ
が格納された領域へのポインタが設定される。
【0113】属性「sizeOfMsg」には、クライアント側
オブジェクトからサーバ側オブジェクトに受け渡すメッ
セージのサイズを示す値が設定される。
オブジェクトからサーバ側オブジェクトに受け渡すメッ
セージのサイズを示す値が設定される。
【0114】このようなクラス「DeliveryBoxA」のイン
スタンスを生成することにより確保されるデータ領域
「DeliveryBoxA」を用いることにより、オペレーティン
グシステムは、クライアント側オブジェクトからサーバ
側オブジェクトへメッセージを送る際に、当該メッセー
ジと共にデータ領域「RBox」についての情報をサーバ側
オブジェクトに送ることが可能となる。換言すれば、デ
ータ領域「DeliveryBoxA」を用いることに
より、オペレーティングシステムは、mCOOPメタス
ペースにおいて、メッセージとフューチャとを同時に扱
うことが可能となる。
スタンスを生成することにより確保されるデータ領域
「DeliveryBoxA」を用いることにより、オペレーティン
グシステムは、クライアント側オブジェクトからサーバ
側オブジェクトへメッセージを送る際に、当該メッセー
ジと共にデータ領域「RBox」についての情報をサーバ側
オブジェクトに送ることが可能となる。換言すれば、デ
ータ領域「DeliveryBoxA」を用いることに
より、オペレーティングシステムは、mCOOPメタス
ペースにおいて、メッセージとフューチャとを同時に扱
うことが可能となる。
【0115】2−4−3 Continuation データ領域「Continuation」は、メソッド「SendWithCo
ntinuation」が発行されたときに、継続メソッドについ
ての情報を格納するために、オブジェクト「mDriveMail
er」によって確保される。オブジェクト「mDriveMaile
r」によるデータ領域「Continuation」の確保は、具体
的には、表3に示す属性を持つクラス(以下、クラス
「Continuation」と称する。)のインスタンスを生成す
ることにより行われる。なお、表3では、クラス「Cont
inuation」の属性のうち、mDriveメタスペースでのメッ
セージパッシングの基本形を実現するために必要な属性
のうち、最小限のものだけを示しており、これ以外の属
性を含ませるようにしても良いことは言うまでもない。
ntinuation」が発行されたときに、継続メソッドについ
ての情報を格納するために、オブジェクト「mDriveMail
er」によって確保される。オブジェクト「mDriveMaile
r」によるデータ領域「Continuation」の確保は、具体
的には、表3に示す属性を持つクラス(以下、クラス
「Continuation」と称する。)のインスタンスを生成す
ることにより行われる。なお、表3では、クラス「Cont
inuation」の属性のうち、mDriveメタスペースでのメッ
セージパッシングの基本形を実現するために必要な属性
のうち、最小限のものだけを示しており、これ以外の属
性を含ませるようにしても良いことは言うまでもない。
【0116】
【表3】
【0117】表3に示すように、クラス「Continuatio
n」は、オブジェクト毎に設定されるデータ領域「Threa
d」を特定するためのデータ型である「ThreadID」型の
属性「creator」と、メソッドを特定するためのデータ
型である「Selector」型の属性「meth」とを有する。
n」は、オブジェクト毎に設定されるデータ領域「Threa
d」を特定するためのデータ型である「ThreadID」型の
属性「creator」と、メソッドを特定するためのデータ
型である「Selector」型の属性「meth」とを有する。
【0118】属性「creator」には、データ領域「Conti
nuation」の生成の元となったオブジェクト(すなわち
メソッド「SendWithContinuation」を発行したクライア
ント側オブジェクト)に対応したデータ領域「Thread」
を特定する識別子が設定される。なお、mDriveメタスペ
ース上では、上述したように、シングルスレッドとして
オブジェクトが動作するようになされており、1つのオ
ブジェクトに対して1つのデータ領域「Thread」が対応
する。したがって、属性「creator」によってデータ領
域「Thread」が特定されると、これに対応しているクラ
イアント側オブジェクトが特定されることとなる。
nuation」の生成の元となったオブジェクト(すなわち
メソッド「SendWithContinuation」を発行したクライア
ント側オブジェクト)に対応したデータ領域「Thread」
を特定する識別子が設定される。なお、mDriveメタスペ
ース上では、上述したように、シングルスレッドとして
オブジェクトが動作するようになされており、1つのオ
ブジェクトに対して1つのデータ領域「Thread」が対応
する。したがって、属性「creator」によってデータ領
域「Thread」が特定されると、これに対応しているクラ
イアント側オブジェクトが特定されることとなる。
【0119】属性「meth」には、クライアント側オブジ
ェクトの継続メソッドを特定する値が設定される。
ェクトの継続メソッドを特定する値が設定される。
【0120】なお、サーバ側オブジェクトによってメソ
ッド「Kick」が発行されると、属性「meth」が参照さ
れ、これにより、クライアント側オブジェクトの継続メ
ソッドが特定され、当該継続メソッドが起動されること
となる。
ッド「Kick」が発行されると、属性「meth」が参照さ
れ、これにより、クライアント側オブジェクトの継続メ
ソッドが特定され、当該継続メソッドが起動されること
となる。
【0121】2−4−4 DeliveryBoxB データ領域「DeliveryBoxB」は、メソッド「SendWithCo
ntinuation」が発行されたときに、クライアント側オブ
ジェクトからサーバ側オブジェクトへ情報を受け渡すた
めに、オブジェクト「mDriveMailer」によって確保され
る。オブジェクト「mDriveMailer」によるデータ領域
「DeliveryBoxB」の確保は、具体的には、表4に示す属
性を持つクラス(以下、クラス「DeliveryBoxB」と称す
る。)のインスタンスを生成することにより行われる。
なお、表4では、クラス「DeliveryBoxB」の属性のう
ち、mDriveメタスペースでのメッセージパッシングの基
本形を実現するために必要な属性のうち、最小限のもの
だけを示しており、これ以外の属性を含ませるようにし
ても良いことは言うまでもない。
ntinuation」が発行されたときに、クライアント側オブ
ジェクトからサーバ側オブジェクトへ情報を受け渡すた
めに、オブジェクト「mDriveMailer」によって確保され
る。オブジェクト「mDriveMailer」によるデータ領域
「DeliveryBoxB」の確保は、具体的には、表4に示す属
性を持つクラス(以下、クラス「DeliveryBoxB」と称す
る。)のインスタンスを生成することにより行われる。
なお、表4では、クラス「DeliveryBoxB」の属性のう
ち、mDriveメタスペースでのメッセージパッシングの基
本形を実現するために必要な属性のうち、最小限のもの
だけを示しており、これ以外の属性を含ませるようにし
ても良いことは言うまでもない。
【0122】
【表4】
【0123】表4に示すように、クラス「DeliveryBox
B」は、データ領域「Continuation」を特定するための
データ型である「ContID」型の属性「contID」と、ポイ
ンタを示すデータ型である「void*」型の属性「msg」
と、データのサイズを特定するためのデータ型である
「size_t」型の属性「sizeOfMsg」とを有する。
B」は、データ領域「Continuation」を特定するための
データ型である「ContID」型の属性「contID」と、ポイ
ンタを示すデータ型である「void*」型の属性「msg」
と、データのサイズを特定するためのデータ型である
「size_t」型の属性「sizeOfMsg」とを有する。
【0124】属性「contID」には、データ領域「Delive
ryBoxB」を用いて行われるメッセージパッシングに使用
されるデータ領域「Continuation」を特定する識別子が
設定される。
ryBoxB」を用いて行われるメッセージパッシングに使用
されるデータ領域「Continuation」を特定する識別子が
設定される。
【0125】属性「msg」には、クライアント側オブジ
ェクトからサーバ側オブジェクトに受け渡すメッセージ
が格納された領域へのポインタが設定される。
ェクトからサーバ側オブジェクトに受け渡すメッセージ
が格納された領域へのポインタが設定される。
【0126】属性「sizeOfMsg」には、クライアント側
オブジェクトからサーバ側オブジェクトに受け渡すメッ
セージのサイズを示す値が設定される。
オブジェクトからサーバ側オブジェクトに受け渡すメッ
セージのサイズを示す値が設定される。
【0127】このようなクラス「DeliveryBoxB」のイン
スタンスを生成することにより確保されるデータ領域
「DeliveryBoxB」を用いることにより、オペレーティン
グシステムは、クライアント側オブジェクトからサーバ
側オブジェクトへメッセージを送る際に、当該メッセー
ジと共にデータ領域「Continuation」についての情報を
サーバ側オブジェクトに送ることが可能となる。換言す
れば、データ領域「DeliveryBoxB」を用いることによ
り、オペレーティングシステムは、mDriveメタスペース
において、メッセージとフューチャとを同時に扱うこと
が可能となる。
スタンスを生成することにより確保されるデータ領域
「DeliveryBoxB」を用いることにより、オペレーティン
グシステムは、クライアント側オブジェクトからサーバ
側オブジェクトへメッセージを送る際に、当該メッセー
ジと共にデータ領域「Continuation」についての情報を
サーバ側オブジェクトに送ることが可能となる。換言す
れば、データ領域「DeliveryBoxB」を用いることによ
り、オペレーティングシステムは、mDriveメタスペース
において、メッセージとフューチャとを同時に扱うこと
が可能となる。
【0128】2−4−5 Thread 上述したように、mCOOPメタスペース及びmDriveメタス
ペース上では、シングルスレッドとしてオブジェクトが
動作するようになされており、1つのオブジェクトに対
して1つのスレッドが対応している。そして、各スレッ
ドの情報が、オブジェクトの実行状態等を管理するため
の情報として、データ領域「Thread」に格納される。す
なわち、オペレーティングシステムは、各オブジェクト
毎に、オブジェクトの実行状態等を管理するための情報
が格納されるデータ領域「Thread」を確保する。
ペース上では、シングルスレッドとしてオブジェクトが
動作するようになされており、1つのオブジェクトに対
して1つのスレッドが対応している。そして、各スレッ
ドの情報が、オブジェクトの実行状態等を管理するため
の情報として、データ領域「Thread」に格納される。す
なわち、オペレーティングシステムは、各オブジェクト
毎に、オブジェクトの実行状態等を管理するための情報
が格納されるデータ領域「Thread」を確保する。
【0129】このデータ領域「Thread」には、オブジェ
クトの実行状態等を管理するための情報として、例え
ば、オブジェクトが待ち状態であるか或いは実行可能状
態であるかについての情報などが格納される。また、こ
のデータ領域「Thread」には、フューチャを用いたメッ
セージパッシングを行う際に、当該フューチャについて
の情報が格納される。
クトの実行状態等を管理するための情報として、例え
ば、オブジェクトが待ち状態であるか或いは実行可能状
態であるかについての情報などが格納される。また、こ
のデータ領域「Thread」には、フューチャを用いたメッ
セージパッシングを行う際に、当該フューチャについて
の情報が格納される。
【0130】具体的には、mCOOPメタスペース上で動作
するオブジェクトの場合、フューチャを用いたメッセー
ジパッシングを行う際に、当該オブジェクトに対応した
データ領域「Thread」に、メッセージパッシングに使用
するデータ領域「RBox」を特定するための識別子「rBox
ID」が、フューチャについての情報として、オブジェク
ト「mCOOPMailer」によって格納される。
するオブジェクトの場合、フューチャを用いたメッセー
ジパッシングを行う際に、当該オブジェクトに対応した
データ領域「Thread」に、メッセージパッシングに使用
するデータ領域「RBox」を特定するための識別子「rBox
ID」が、フューチャについての情報として、オブジェク
ト「mCOOPMailer」によって格納される。
【0131】また、mDriveメタスペース上で動作するオ
ブジェクトの場合、フューチャを用いたメッセージパッ
シングを行う際に、当該オブジェクトに対応したデータ
領域「Thread」に、メッセージパッシングに使用するデ
ータ領域「Continuation」を特定するための識別子「co
ntID」が、オブジェクト「mDriveMailer」によって格納
される。
ブジェクトの場合、フューチャを用いたメッセージパッ
シングを行う際に、当該オブジェクトに対応したデータ
領域「Thread」に、メッセージパッシングに使用するデ
ータ領域「Continuation」を特定するための識別子「co
ntID」が、オブジェクト「mDriveMailer」によって格納
される。
【0132】2−5 メッセージパッシング 以下、以上のようなメソッド及びデータ領域を使用して
行われるメッセージパッシングについて、具体的なシナ
リオを例に挙げて詳細に説明する。
行われるメッセージパッシングについて、具体的なシナ
リオを例に挙げて詳細に説明する。
【0133】なお、以下の説明で参照する図3乃至図7
は、メッセージパッシング時の処理の遷移やメッセージ
のやり取り等を示した図であり、これらの図において、
点線矢印は、オペレーティングシステム内での処理の遷
移やメッセージのやり取りを示しており、実線矢印は、
アプリケーションプログラムの側から見たときの処理の
遷移やメッセージのやり取りを示している。
は、メッセージパッシング時の処理の遷移やメッセージ
のやり取り等を示した図であり、これらの図において、
点線矢印は、オペレーティングシステム内での処理の遷
移やメッセージのやり取りを示しており、実線矢印は、
アプリケーションプログラムの側から見たときの処理の
遷移やメッセージのやり取りを示している。
【0134】2−5−1 SendWithRBox()を用いたメッ
セージパッシング mCOOPメタスペースにおいて、メソッド「SendWithRBo
x」を使用したときのメッセージパッシングについて、
正常に処理が進められた場合と、例外事象が発生した場
合とについて説明する。
セージパッシング mCOOPメタスペースにおいて、メソッド「SendWithRBo
x」を使用したときのメッセージパッシングについて、
正常に処理が進められた場合と、例外事象が発生した場
合とについて説明する。
【0135】2−5−1−1 正常処理時 mCOOPメタスペースにおいて、メソッド「SendWithRBo
x」を使用したときのメッセージパッシングについて、
例外事象が発生することなく、正常に処理が進められた
場合について、図3を参照して説明する。
x」を使用したときのメッセージパッシングについて、
例外事象が発生することなく、正常に処理が進められた
場合について、図3を参照して説明する。
【0136】図3は、mCOOPメタスペースでのメッセー
ジパッシングの基本的なシナリオとして、mCOOPメタス
ペース上でアプリケーションプログラムとして動作する
オブジェクトAと、mCOOPメタスペース上でアプリケー
ションプログラムとして動作するオブジェクトBとの間
で、メソッド「SendWithRBox」を使用してメッセージパ
ッシングを行う際のシナリオを示している。すなわち、
本例では、オブジェクトAがクライアント側オブジェク
トであり、オブジェクトBがサーバ側オブジェクトであ
る。
ジパッシングの基本的なシナリオとして、mCOOPメタス
ペース上でアプリケーションプログラムとして動作する
オブジェクトAと、mCOOPメタスペース上でアプリケー
ションプログラムとして動作するオブジェクトBとの間
で、メソッド「SendWithRBox」を使用してメッセージパ
ッシングを行う際のシナリオを示している。すなわち、
本例では、オブジェクトAがクライアント側オブジェク
トであり、オブジェクトBがサーバ側オブジェクトであ
る。
【0137】ST1−1に示すように、オブジェクトA
がメソッド「SendWithRBox」を発行すると、点線矢印S
T1−2に示すように、オブジェクト「mCOOPMailer」
に処理が遷移し、ST1−3において、オブジェクト
「mCOOPMailer」によってメソッド「SendWithRBox」に
応じた処理が行われる。
がメソッド「SendWithRBox」を発行すると、点線矢印S
T1−2に示すように、オブジェクト「mCOOPMailer」
に処理が遷移し、ST1−3において、オブジェクト
「mCOOPMailer」によってメソッド「SendWithRBox」に
応じた処理が行われる。
【0138】ここで、オブジェクト「mCOOPMailer」
は、先ず、サーバ側オブジェクト(本例ではオブジェク
トB)による処理の結果が格納されるデータ領域「RBo
x」を確保して、当該データ領域「RBox」の属性「creat
or」に、オブジェクトAに対応したデータ領域「Threa
d」を特定する識別子を設定する。
は、先ず、サーバ側オブジェクト(本例ではオブジェク
トB)による処理の結果が格納されるデータ領域「RBo
x」を確保して、当該データ領域「RBox」の属性「creat
or」に、オブジェクトAに対応したデータ領域「Threa
d」を特定する識別子を設定する。
【0139】次に、オブジェクト「mCOOPMailer」は、
データ領域「DeliveryBoxA」を確保して、当該データ領
域「DeliveryBoxA」に、データ領域「RBox」を特定する
ための識別子「rBoxID」と、メソッド「SendWithRBox」
によって送られてきたメッセージとを格納する。
データ領域「DeliveryBoxA」を確保して、当該データ領
域「DeliveryBoxA」に、データ領域「RBox」を特定する
ための識別子「rBoxID」と、メソッド「SendWithRBox」
によって送られてきたメッセージとを格納する。
【0140】ここで、データ領域「DeliveryBoxA」にデ
ータ領域「RBox」を特定するための識別子「rBoxID」を
格納するということは、具体的には、データ領域「Deli
veryBoxA」の属性「rBoxID」に、データ領域「RBox」を
特定するための識別子「rBoxID」の値を設定するという
ことである。
ータ領域「RBox」を特定するための識別子「rBoxID」を
格納するということは、具体的には、データ領域「Deli
veryBoxA」の属性「rBoxID」に、データ領域「RBox」を
特定するための識別子「rBoxID」の値を設定するという
ことである。
【0141】また、データ領域「DeliveryBoxA」にメソ
ッド「SendWithRBox」によって送られてきたメッセージ
を格納するということは、具体的には、データ領域「De
liveryBoxA」の属性「msg」に、メソッド「SendWithRBo
x」の引数「msg」の値を設定するとともに、データ領域
「DeliveryBoxA」の属性「sizeOfMsg」に、メソッド「S
endWithRBox」の引数「sizeOfMsg」の値を設定するとい
うことである。
ッド「SendWithRBox」によって送られてきたメッセージ
を格納するということは、具体的には、データ領域「De
liveryBoxA」の属性「msg」に、メソッド「SendWithRBo
x」の引数「msg」の値を設定するとともに、データ領域
「DeliveryBoxA」の属性「sizeOfMsg」に、メソッド「S
endWithRBox」の引数「sizeOfMsg」の値を設定するとい
うことである。
【0142】その後、オブジェクト「mCOOPMailer」
は、データ領域「DeliveryBoxA」に格納したデータ、す
なわち、メソッド「SendWithRBox」によって送られてき
たメッセージと、確保したデータ領域「RBox」を特定す
るための識別子「rBoxID」とを、点線矢印ST1−4に
示すようにオブジェクトBに配送し、オブジェクトBの
メソッドを起動する。
は、データ領域「DeliveryBoxA」に格納したデータ、す
なわち、メソッド「SendWithRBox」によって送られてき
たメッセージと、確保したデータ領域「RBox」を特定す
るための識別子「rBoxID」とを、点線矢印ST1−4に
示すようにオブジェクトBに配送し、オブジェクトBの
メソッドを起動する。
【0143】このとき、オブジェクトBのメソッドに
は、メッセージだけが受け渡され、識別子「rBoxID」
は、オブジェクトBに対応したデータ領域「Thread」に
格納される。換言すれば、オブジェクトBに受け渡され
る識別子「rBoxID」はオペレーティングシステムの管理
下にあり、アプリケーションプログラムの側から見たと
き、オブジェクトBに配送されてきたのはメッセージだ
けである。
は、メッセージだけが受け渡され、識別子「rBoxID」
は、オブジェクトBに対応したデータ領域「Thread」に
格納される。換言すれば、オブジェクトBに受け渡され
る識別子「rBoxID」はオペレーティングシステムの管理
下にあり、アプリケーションプログラムの側から見たと
き、オブジェクトBに配送されてきたのはメッセージだ
けである。
【0144】なお、データ領域「DeliveryBoxA」に格納
されたデータをオブジェクト「mCOOPMailer」からオブ
ジェクトBに配送して、オブジェクトBのメソッドを起
動する際、オブジェクトBは、メソッド「SendWithRBo
x」の引数「destObjID」によって特定され、オブジェク
トBのメソッドは、メソッド「SendWithRBox」の引数
「meth」によって特定される。
されたデータをオブジェクト「mCOOPMailer」からオブ
ジェクトBに配送して、オブジェクトBのメソッドを起
動する際、オブジェクトBは、メソッド「SendWithRBo
x」の引数「destObjID」によって特定され、オブジェク
トBのメソッドは、メソッド「SendWithRBox」の引数
「meth」によって特定される。
【0145】これらの処理が終了すると、オブジェクト
「mCOOPMailer」は、点線矢印ST1−5に示すよう
に、確保したデータ領域「RBox」を特定するための識別
子「rBoxID」をオブジェクトAへ返すとともに、正常に
処理が完了したことを示す値をメソッド「SendWithRBo
x」に対する戻り値としてオブジェクトAへ返した上
で、オブジェクトAを引き続き実行可能状態であるよう
にする。これにより、オブジェクトAは、実行可能状態
となり、行うべき処理が残っている場合には、当該処理
を引き続き実行する。
「mCOOPMailer」は、点線矢印ST1−5に示すよう
に、確保したデータ領域「RBox」を特定するための識別
子「rBoxID」をオブジェクトAへ返すとともに、正常に
処理が完了したことを示す値をメソッド「SendWithRBo
x」に対する戻り値としてオブジェクトAへ返した上
で、オブジェクトAを引き続き実行可能状態であるよう
にする。これにより、オブジェクトAは、実行可能状態
となり、行うべき処理が残っている場合には、当該処理
を引き続き実行する。
【0146】以上の処理によって、アプリケーションプ
ログラムの側から見たときには、実線矢印ST1−6に
示すようにオブジェクトAからオブジェクトBへメッセ
ージが配送され、オブジェクトAとオブジェクトBとが
並行動作しているような状態となる。
ログラムの側から見たときには、実線矢印ST1−6に
示すようにオブジェクトAからオブジェクトBへメッセ
ージが配送され、オブジェクトAとオブジェクトBとが
並行動作しているような状態となる。
【0147】その後、ST1−7に示すように、オブジ
ェクトAがメソッド「Receive」を発行すると、点線矢
印ST1−8に示すように、オブジェクト「mCOOPMaile
r」に処理が遷移し、ST1−9において、オブジェク
ト「mCOOPMailer」によってメソッド「Receive」に応じ
た処理が行われる。具体的には、オブジェクト「mCOOPM
ailer」は、メソッド「Receive」の引数「rBoxID」によ
って特定されるデータ領域「RBox」を参照し、オブジェ
クトBによる処理の結果が当該データ領域「RBox」に格
納されているならば、その結果をオブジェクトAに受け
渡し、オブジェクトBによる処理の結果が当該データ領
域「RBox」に格納されていないならば、オブジェクトA
を実行可能状態から待ち状態にする。
ェクトAがメソッド「Receive」を発行すると、点線矢
印ST1−8に示すように、オブジェクト「mCOOPMaile
r」に処理が遷移し、ST1−9において、オブジェク
ト「mCOOPMailer」によってメソッド「Receive」に応じ
た処理が行われる。具体的には、オブジェクト「mCOOPM
ailer」は、メソッド「Receive」の引数「rBoxID」によ
って特定されるデータ領域「RBox」を参照し、オブジェ
クトBによる処理の結果が当該データ領域「RBox」に格
納されているならば、その結果をオブジェクトAに受け
渡し、オブジェクトBによる処理の結果が当該データ領
域「RBox」に格納されていないならば、オブジェクトA
を実行可能状態から待ち状態にする。
【0148】本例では、オブジェクトAがメソッド「Re
ceive」を発行した段階では、オブジェクトBがメソッ
ド「Reply」を発行していないので、オブジェクトBに
よる処理の結果は未だデータ領域「RBox」に格納されて
いない。したがって、オブジェクト「mCOOPMailer」
は、点線矢印ST1−10に示すように、オブジェクト
Bによる処理の結果が未だデータ領域「RBox」に格納さ
れていないことをオブジェクトAに知らせて、オブジェ
クトAを実行可能状態から待ち状態にする。
ceive」を発行した段階では、オブジェクトBがメソッ
ド「Reply」を発行していないので、オブジェクトBに
よる処理の結果は未だデータ領域「RBox」に格納されて
いない。したがって、オブジェクト「mCOOPMailer」
は、点線矢印ST1−10に示すように、オブジェクト
Bによる処理の結果が未だデータ領域「RBox」に格納さ
れていないことをオブジェクトAに知らせて、オブジェ
クトAを実行可能状態から待ち状態にする。
【0149】その後、ST1−11に示すように、オブ
ジェクトBがメソッド「Reply」を発行すると、点線矢
印ST1−12に示すように、オブジェクト「mCOOPMai
ler」に処理が遷移し、ST1−13において、オブジ
ェクト「mCOOPMailer」によってメソッド「Reply」に応
じた処理が行われる。具体的には、オブジェクト「mCOO
PMailer」は、オブジェクトAが既にメソッド「Receiv
e」を発行しているならば、オブジェクトBによる処理
の結果をオブジェクトAに受け渡し、オブジェクトAが
未だメソッド「Receive」を発行していないならば、オ
ブジェクトBによる処理の結果をデータ領域「RBox」に
格納する。
ジェクトBがメソッド「Reply」を発行すると、点線矢
印ST1−12に示すように、オブジェクト「mCOOPMai
ler」に処理が遷移し、ST1−13において、オブジ
ェクト「mCOOPMailer」によってメソッド「Reply」に応
じた処理が行われる。具体的には、オブジェクト「mCOO
PMailer」は、オブジェクトAが既にメソッド「Receiv
e」を発行しているならば、オブジェクトBによる処理
の結果をオブジェクトAに受け渡し、オブジェクトAが
未だメソッド「Receive」を発行していないならば、オ
ブジェクトBによる処理の結果をデータ領域「RBox」に
格納する。
【0150】本例では、オブジェクトBがメソッド「Re
ply」を発行した段階で、既にオブジェクトAがメソッ
ド「Receive」を発行している。したがって、オブジェ
クト「mCOOPMailer」は、点線矢印ST1−14に示す
ように、オブジェクトBによる処理の結果を、データ領
域「RBox」に格納することなく、オブジェクトAに直ぐ
に受け渡す。そして、オブジェクト「mCOOPMailer」
は、オブジェクトBによる処理の結果のオブジェクトA
への受け渡しの処理が正常に完了したら、点線矢印ST
1−15に示すように、当該処理が正常に完了したこと
を示す値をメソッド「Reply」に対する戻り値としてオ
ブジェクトBへ返した上で、オブジェクトBを引き続き
実行可能状態であるようにする。これにより、オブジェ
クトBは、実行可能状態となり、行うべき処理が残って
いる場合には、当該処理を引き続き実行する。
ply」を発行した段階で、既にオブジェクトAがメソッ
ド「Receive」を発行している。したがって、オブジェ
クト「mCOOPMailer」は、点線矢印ST1−14に示す
ように、オブジェクトBによる処理の結果を、データ領
域「RBox」に格納することなく、オブジェクトAに直ぐ
に受け渡す。そして、オブジェクト「mCOOPMailer」
は、オブジェクトBによる処理の結果のオブジェクトA
への受け渡しの処理が正常に完了したら、点線矢印ST
1−15に示すように、当該処理が正常に完了したこと
を示す値をメソッド「Reply」に対する戻り値としてオ
ブジェクトBへ返した上で、オブジェクトBを引き続き
実行可能状態であるようにする。これにより、オブジェ
クトBは、実行可能状態となり、行うべき処理が残って
いる場合には、当該処理を引き続き実行する。
【0151】以上の処理によって、アプリケーションプ
ログラムの側から見たときには、実線矢印ST1−16
に示すようにオブジェクトBによる処理の結果がオブジ
ェクトAへ受け渡され、再びオブジェクトAとオブジェ
クトBとが並行動作しているような状態となる。
ログラムの側から見たときには、実線矢印ST1−16
に示すようにオブジェクトBによる処理の結果がオブジ
ェクトAへ受け渡され、再びオブジェクトAとオブジェ
クトBとが並行動作しているような状態となる。
【0152】なお、図3の例では、メソッド「Reply」
が発行される前にメソッド「Receive」が発行された場
合を示したが、メソッド「Reply」が発行された後にメ
ソッド「Receive」が発行される場合もあり得る。メソ
ッド「Reply」が発行された後にメソッド「Receive」が
発行された場合には、オブジェクトAは待ち状態となる
ことなく、オブジェクトBによる処理の結果を直ぐに受
け取ることとなる。
が発行される前にメソッド「Receive」が発行された場
合を示したが、メソッド「Reply」が発行された後にメ
ソッド「Receive」が発行される場合もあり得る。メソ
ッド「Reply」が発行された後にメソッド「Receive」が
発行された場合には、オブジェクトAは待ち状態となる
ことなく、オブジェクトBによる処理の結果を直ぐに受
け取ることとなる。
【0153】すなわち、オブジェクトBがメソッド「Re
ply」を発行した後でオブジェクトAがメソッド「Recei
ve」を発行した場合、オブジェクト「mCOOPMailer」
は、オブジェクトBがメソッド「Reply」を発行した段
階では、オブジェクトBによる処理の結果をデータ領域
「RBox」に格納しておき、オブジェクトAがメソッド
「Receive」を発行した段階で直ぐに、オブジェクトB
による処理の結果をデータ領域「RBox」から読み出して
オブジェクトAに受け渡す。
ply」を発行した後でオブジェクトAがメソッド「Recei
ve」を発行した場合、オブジェクト「mCOOPMailer」
は、オブジェクトBがメソッド「Reply」を発行した段
階では、オブジェクトBによる処理の結果をデータ領域
「RBox」に格納しておき、オブジェクトAがメソッド
「Receive」を発行した段階で直ぐに、オブジェクトB
による処理の結果をデータ領域「RBox」から読み出して
オブジェクトAに受け渡す。
【0154】なお、オブジェクトBによる処理の結果を
データ領域「RBox」に格納するということは、具体的に
は、データ領域「RBox」の属性「ready」に、オブジェ
クトBによる処理の結果が返ってきていることを示す値
を設定し、且つ、データ領域「RBox」の属性「resultMs
g」に、オブジェクトBによる処理の結果としてオブジ
ェクトAに受け渡すメッセージが格納された領域へのポ
インタ、すなわちメソッド「Reply」の引数「resultMs
g」で示されるポインタを設定し、且つ、データ領域「R
Box」の属性「sizeOfResultMsg」に、オブジェクトBに
よる処理の結果としてオブジェクトAに受け渡すメッセ
ージのサイズを示す値、すなわちメソッド「Reply」の
引数「sizeOfResultMsg」が示す値を設定するというこ
とである。
データ領域「RBox」に格納するということは、具体的に
は、データ領域「RBox」の属性「ready」に、オブジェ
クトBによる処理の結果が返ってきていることを示す値
を設定し、且つ、データ領域「RBox」の属性「resultMs
g」に、オブジェクトBによる処理の結果としてオブジ
ェクトAに受け渡すメッセージが格納された領域へのポ
インタ、すなわちメソッド「Reply」の引数「resultMs
g」で示されるポインタを設定し、且つ、データ領域「R
Box」の属性「sizeOfResultMsg」に、オブジェクトBに
よる処理の結果としてオブジェクトAに受け渡すメッセ
ージのサイズを示す値、すなわちメソッド「Reply」の
引数「sizeOfResultMsg」が示す値を設定するというこ
とである。
【0155】そして、オブジェクトBによる処理の結果
をデータ領域「RBox」から読み出してオブジェクトAに
受け渡す際、オブジェクト「mCOOPMailer」は、先ず、
メソッド「Receive」の引数「rBoxID」によって特定さ
れるデータ領域「RBox」から、当該データ領域「RBox」
の属性「resultMsg」及び属性「sizeOfResultMsg」を読
み出し、属性「resultMsg」が指し示す領域から属性「s
izeOfResultMsg」が示すサイズ分のデータを読み出す。
このデータがオブジェクトBからオブジェクトAに受け
渡すメッセージとなる。そして、オブジェクト「mCOOPM
ailer」は、このように読み出したデータを、メソッド
「Receive」の引数「msg」が指し示す領域に格納する。
ここで、メソッド「Receive」の引数「msg」が指し示す
領域のサイズは、メソッド「Receive」の引数「sizeOfM
sg」によって設定されている。
をデータ領域「RBox」から読み出してオブジェクトAに
受け渡す際、オブジェクト「mCOOPMailer」は、先ず、
メソッド「Receive」の引数「rBoxID」によって特定さ
れるデータ領域「RBox」から、当該データ領域「RBox」
の属性「resultMsg」及び属性「sizeOfResultMsg」を読
み出し、属性「resultMsg」が指し示す領域から属性「s
izeOfResultMsg」が示すサイズ分のデータを読み出す。
このデータがオブジェクトBからオブジェクトAに受け
渡すメッセージとなる。そして、オブジェクト「mCOOPM
ailer」は、このように読み出したデータを、メソッド
「Receive」の引数「msg」が指し示す領域に格納する。
ここで、メソッド「Receive」の引数「msg」が指し示す
領域のサイズは、メソッド「Receive」の引数「sizeOfM
sg」によって設定されている。
【0156】以上の処理により、メソッド「Reply」が
発行された後にメソッド「Receive」が発行された場合
も、メソッド「Reply」が発行される前にメソッド「Rec
eive」が発行された場合と同様に、オブジェクトBによ
る処理の結果がオブジェクトAへ受け渡され、再びオブ
ジェクトAとオブジェクトBとが並行動作しているよう
な状態となる。
発行された後にメソッド「Receive」が発行された場合
も、メソッド「Reply」が発行される前にメソッド「Rec
eive」が発行された場合と同様に、オブジェクトBによ
る処理の結果がオブジェクトAへ受け渡され、再びオブ
ジェクトAとオブジェクトBとが並行動作しているよう
な状態となる。
【0157】2−5−1−2 例外事象発生時 mCOOPメタスペースにおいて、メソッド「SendWithRBo
x」を使用したときのメッセージパッシングについて、
サーバ側オブジェクトによる処理の最中に、サーバ側オ
ブジェクトの正常な処理の実行を妨げる例外事象が発生
した場合について、図4を参照して説明する。
x」を使用したときのメッセージパッシングについて、
サーバ側オブジェクトによる処理の最中に、サーバ側オ
ブジェクトの正常な処理の実行を妨げる例外事象が発生
した場合について、図4を参照して説明する。
【0158】図4は、mCOOPメタスペースでのメッセー
ジパッシングの基本的なシナリオとして、mCOOPメタス
ペース上でアプリケーションプログラムとして動作する
オブジェクトAと、mCOOPメタスペース上でアプリケー
ションプログラムとして動作するオブジェクトBとの間
で、メソッド「SendWithRBox」を使用してメッセージパ
ッシングを行う際のシナリオを示している。すなわち、
本例では、オブジェクトAがクライアント側オブジェク
トであり、オブジェクトBがサーバ側オブジェクトであ
る。そして、本シナリオでは、オブジェクトAによって
メソッド「Receive」が発行された後、オブジェクトB
に例外事象が発生して、オブジェクトBが動作不能とな
ったものとしている。
ジパッシングの基本的なシナリオとして、mCOOPメタス
ペース上でアプリケーションプログラムとして動作する
オブジェクトAと、mCOOPメタスペース上でアプリケー
ションプログラムとして動作するオブジェクトBとの間
で、メソッド「SendWithRBox」を使用してメッセージパ
ッシングを行う際のシナリオを示している。すなわち、
本例では、オブジェクトAがクライアント側オブジェク
トであり、オブジェクトBがサーバ側オブジェクトであ
る。そして、本シナリオでは、オブジェクトAによって
メソッド「Receive」が発行された後、オブジェクトB
に例外事象が発生して、オブジェクトBが動作不能とな
ったものとしている。
【0159】本シナリオにおいて、図4に示した各ステ
ップのうち、ST2−1,ST2−2,ST2−3,S
T2−4,ST2−5,ST2−6,ST2−7,ST
2−8,ST2−9,ST2−10までのステップは、
図3に示したステップST1−1,ST1−2,ST1
−3,ST1−4,ST1−5,ST1−6,ST1−
7,ST1−8,ST1−9,ST1−10とそれぞれ
同じであるので、説明を省略する。
ップのうち、ST2−1,ST2−2,ST2−3,S
T2−4,ST2−5,ST2−6,ST2−7,ST
2−8,ST2−9,ST2−10までのステップは、
図3に示したステップST1−1,ST1−2,ST1
−3,ST1−4,ST1−5,ST1−6,ST1−
7,ST1−8,ST1−9,ST1−10とそれぞれ
同じであるので、説明を省略する。
【0160】そして、本シナリオでは、ST2−10ま
でのステップを経て、オブジェクトAが待ち状態であ
り、オブジェクトBが処理を実行している状態となって
いるときに、オブジェクトBによる正常な処理の実行を
妨げる例外事象が発生したものとしている。
でのステップを経て、オブジェクトAが待ち状態であ
り、オブジェクトBが処理を実行している状態となって
いるときに、オブジェクトBによる正常な処理の実行を
妨げる例外事象が発生したものとしている。
【0161】ST2−11に示すように、オブジェクト
Bの正常な処理の実行を妨げる例外事象が発生すると、
点線矢印ST2−12に示すように、オブジェクト「mC
OOPFaultHandler」に処理が遷移し、ST2−13にお
いて、オブジェクト「mCOOPFaultHandler」によって、
所定の例外処理が行われる。そして、オブジェクト「mC
OOPFaultHandler」は、点線矢印ST2−14に示すよ
うに、オブジェクト「mCOOPMailer」に、オブジェクト
Bが例外事象の発生によって動作不能になったことを通
知する。
Bの正常な処理の実行を妨げる例外事象が発生すると、
点線矢印ST2−12に示すように、オブジェクト「mC
OOPFaultHandler」に処理が遷移し、ST2−13にお
いて、オブジェクト「mCOOPFaultHandler」によって、
所定の例外処理が行われる。そして、オブジェクト「mC
OOPFaultHandler」は、点線矢印ST2−14に示すよ
うに、オブジェクト「mCOOPMailer」に、オブジェクト
Bが例外事象の発生によって動作不能になったことを通
知する。
【0162】このとき、オブジェクトAはメソッド「Re
ceive」を既に発行して待ち状態となっている。そこ
で、オブジェクト「mCOOPMailer」は、点線矢印ST2
−15に示すように、オブジェクトAに対して、オブジ
ェクトBが例外事象の発生によって動作不能となったこ
とを示すエラーコードを、メソッド「Receive」に対す
る戻り値としてオブジェクトAへ返した上で、オブジェ
クトAを引き続き実行可能状態であるようにする。これ
により、オブジェクトAは、実行可能状態となり、行う
べき処理が残っている場合には、当該処理を引き続き実
行する。
ceive」を既に発行して待ち状態となっている。そこ
で、オブジェクト「mCOOPMailer」は、点線矢印ST2
−15に示すように、オブジェクトAに対して、オブジ
ェクトBが例外事象の発生によって動作不能となったこ
とを示すエラーコードを、メソッド「Receive」に対す
る戻り値としてオブジェクトAへ返した上で、オブジェ
クトAを引き続き実行可能状態であるようにする。これ
により、オブジェクトAは、実行可能状態となり、行う
べき処理が残っている場合には、当該処理を引き続き実
行する。
【0163】以上の処理により、オブジェクトAは、オ
ブジェクトBから得られると期待していた結果メッセー
ジを受け取ることはできないが、オブジェクトBが動作
不能となったことを示すエラーコードを戻り値として受
け取り、再び実行可能状態となる。このとき、オブジェ
クトAは、その状態に応じた続きの処理を行うようにす
る。
ブジェクトBから得られると期待していた結果メッセー
ジを受け取ることはできないが、オブジェクトBが動作
不能となったことを示すエラーコードを戻り値として受
け取り、再び実行可能状態となる。このとき、オブジェ
クトAは、その状態に応じた続きの処理を行うようにす
る。
【0164】ここで、その状態に応じた続きの処理とし
ては、例えば、オブジェクトBに例外事象が生じた旨を
画像表示装置に表示して、ユーザにリセットを要求する
ような処理や、或いは、例えば、オブジェクトBの代わ
りとなるオブジェクトをネットワーク等を介して外部か
らダウンロードして、再びメッセージパッシングの処理
を試みるような処理等が挙げられる。
ては、例えば、オブジェクトBに例外事象が生じた旨を
画像表示装置に表示して、ユーザにリセットを要求する
ような処理や、或いは、例えば、オブジェクトBの代わ
りとなるオブジェクトをネットワーク等を介して外部か
らダウンロードして、再びメッセージパッシングの処理
を試みるような処理等が挙げられる。
【0165】なお、図4のシナリオでは、オブジェクト
Bにおける例外事象の発生が、オブジェクトAによるメ
ソッド「Receive」の発行よりも後に発生した場合を例
に挙げたが、オブジェクトBにおける例外事象の発生
が、オブジェクトAによるメソッド「Receive」の発行
よりも前に発生するような場合も考えられる。
Bにおける例外事象の発生が、オブジェクトAによるメ
ソッド「Receive」の発行よりも後に発生した場合を例
に挙げたが、オブジェクトBにおける例外事象の発生
が、オブジェクトAによるメソッド「Receive」の発行
よりも前に発生するような場合も考えられる。
【0166】オブジェクトBにおける例外事象の発生
が、オブジェクトAによるメソッド「Receive」の発行
よりも先に発生した場合、オブジェクト「mCOOPMaile
r」は、データ領域「RBox」の属性「status」に、例外
事象の発生によりオブジェクトBが動作不能状態となっ
たことを示すエラーコードを設定する。
が、オブジェクトAによるメソッド「Receive」の発行
よりも先に発生した場合、オブジェクト「mCOOPMaile
r」は、データ領域「RBox」の属性「status」に、例外
事象の発生によりオブジェクトBが動作不能状態となっ
たことを示すエラーコードを設定する。
【0167】そして、オブジェクトAがメソッド「Rece
ive」を発行した段階で、オブジェクト「mCOOPMailer」
は、データ領域「RBox」の属性「status」に設定された
エラーコードを読み出して、当該エラーコードをメソッ
ド「Receive」に対する戻り値としてオブジェクトAへ
返した上で、オブジェクトAを引き続き実行可能状態で
あるようにする。これにより、上述のシナリオと同様
に、オブジェクトAは、実行可能状態となり、行うべき
処理が残っている場合には、当該処理を引き続き実行す
る。
ive」を発行した段階で、オブジェクト「mCOOPMailer」
は、データ領域「RBox」の属性「status」に設定された
エラーコードを読み出して、当該エラーコードをメソッ
ド「Receive」に対する戻り値としてオブジェクトAへ
返した上で、オブジェクトAを引き続き実行可能状態で
あるようにする。これにより、上述のシナリオと同様
に、オブジェクトAは、実行可能状態となり、行うべき
処理が残っている場合には、当該処理を引き続き実行す
る。
【0168】このように、データ領域「RBox」の属性
「status」に、例外事象の発生によりオブジェクトBが
動作不能状態となったことを示すエラーコードを設定し
ておくようにすることで、オブジェクトAは、メソッド
「Receive」を発行したときに、不要な待ち状態となる
ようなことなく、例外事象の発生によりオブジェクトB
が動作不能状態となったことを直ちに知ることができ
る。
「status」に、例外事象の発生によりオブジェクトBが
動作不能状態となったことを示すエラーコードを設定し
ておくようにすることで、オブジェクトAは、メソッド
「Receive」を発行したときに、不要な待ち状態となる
ようなことなく、例外事象の発生によりオブジェクトB
が動作不能状態となったことを直ちに知ることができ
る。
【0169】また、以上のシナリオでは、オブジェクト
Bに例外事象が発生した場合を例に挙げたが、これら以
外の場合であっても、何らかの原因によりオブジェクト
Aに結果メッセージが返せなくなってしまった場合に
は、データ領域「RBox」の属性「status」にエラーコー
ドを設定するようにしておく。これにより、何らかの原
因によりオブジェクトAに結果メッセージが返せなくな
ってしまったような場合に、オブジェクトAに対してエ
ラーコードを返して、オブジェクトAを待ち状態から実
行可能状態に復帰させることが可能となり、オブジェク
トAが待ち状態になってしまってシステムが停止してし
まうような状況を回避することができる。
Bに例外事象が発生した場合を例に挙げたが、これら以
外の場合であっても、何らかの原因によりオブジェクト
Aに結果メッセージが返せなくなってしまった場合に
は、データ領域「RBox」の属性「status」にエラーコー
ドを設定するようにしておく。これにより、何らかの原
因によりオブジェクトAに結果メッセージが返せなくな
ってしまったような場合に、オブジェクトAに対してエ
ラーコードを返して、オブジェクトAを待ち状態から実
行可能状態に復帰させることが可能となり、オブジェク
トAが待ち状態になってしまってシステムが停止してし
まうような状況を回避することができる。
【0170】2−5−2 Delegate()を用いたメッセー
ジパッシング mCOOPメタスペースにおいて、メソッド「Delegate」を
使用して行われる、サーバ側オブジェクトによる処理の
要求の受け口と出口が異なるような構成におけるメッセ
ージパッシングについて、図5を参照して説明する。
ジパッシング mCOOPメタスペースにおいて、メソッド「Delegate」を
使用して行われる、サーバ側オブジェクトによる処理の
要求の受け口と出口が異なるような構成におけるメッセ
ージパッシングについて、図5を参照して説明する。
【0171】図5は、mCOOPメタスペースでのメッセー
ジパッシングのシナリオとして、mCOOPメタスペース上
でアプリケーションプログラムとして動作するオブジェ
クトA、オブジェクトB及びオブジェクトCの間でのメ
ッセージパッシングであって、オブジェクトBが返答権
限をオブジェクトCに委譲した場合のシナリオを示して
いる。
ジパッシングのシナリオとして、mCOOPメタスペース上
でアプリケーションプログラムとして動作するオブジェ
クトA、オブジェクトB及びオブジェクトCの間でのメ
ッセージパッシングであって、オブジェクトBが返答権
限をオブジェクトCに委譲した場合のシナリオを示して
いる。
【0172】すなわち、本例では、オブジェクトAがク
ライアント側オブジェクトであり、オブジェクトB及び
オブジェクトCがサーバ側オブジェクトである。そし
て、オブジェクトAに処理の結果を返す権限がオブジェ
クトBからオブジェクトCに委譲される。すなわち、オ
ブジェクトBは、サーバ側オブジェクトであるとともに
権限委譲元オブジェクトでもあり、また、オブジェクト
Cは、サーバ側オブジェクトであるとともに権限委譲先
オブジェクトでもある。
ライアント側オブジェクトであり、オブジェクトB及び
オブジェクトCがサーバ側オブジェクトである。そし
て、オブジェクトAに処理の結果を返す権限がオブジェ
クトBからオブジェクトCに委譲される。すなわち、オ
ブジェクトBは、サーバ側オブジェクトであるとともに
権限委譲元オブジェクトでもあり、また、オブジェクト
Cは、サーバ側オブジェクトであるとともに権限委譲先
オブジェクトでもある。
【0173】ST3−1に示すように、オブジェクトA
がメソッド「SendWithRBox」を発行すると、点線矢印S
T3−2に示すように、オブジェクト「mCOOPMailer」
に処理が遷移し、ST3−3において、オブジェクト
「mCOOPMailer」によってメソッド「SendWithRBox」に
応じた処理が行われる。
がメソッド「SendWithRBox」を発行すると、点線矢印S
T3−2に示すように、オブジェクト「mCOOPMailer」
に処理が遷移し、ST3−3において、オブジェクト
「mCOOPMailer」によってメソッド「SendWithRBox」に
応じた処理が行われる。
【0174】ここで、オブジェクト「mCOOPMailer」
は、先ず、サーバ側オブジェクトによる処理の結果が格
納されるデータ領域「RBox」を確保して、当該データ領
域「RBox」の属性「creator」に、オブジェクトAに対
応したデータ領域「Thread」を特定する識別子を設定す
る。
は、先ず、サーバ側オブジェクトによる処理の結果が格
納されるデータ領域「RBox」を確保して、当該データ領
域「RBox」の属性「creator」に、オブジェクトAに対
応したデータ領域「Thread」を特定する識別子を設定す
る。
【0175】次に、オブジェクト「mCOOPMailer」は、
データ領域「DeliveryBoxA」を確保して、当該データ領
域「DeliveryBoxA」に、データ領域「RBox」を特定する
ための識別子「rBoxID」と、メソッド「SendWithRBox」
によって送られてきたメッセージとを格納する。
データ領域「DeliveryBoxA」を確保して、当該データ領
域「DeliveryBoxA」に、データ領域「RBox」を特定する
ための識別子「rBoxID」と、メソッド「SendWithRBox」
によって送られてきたメッセージとを格納する。
【0176】ここで、データ領域「DeliveryBoxA」にデ
ータ領域「RBox」を特定するための識別子「rBoxID」を
格納するということは、具体的には、データ領域「Deli
veryBoxA」の属性「rBoxID」に、データ領域「RBox」を
特定するための識別子「rBoxID」の値を設定するという
ことである。
ータ領域「RBox」を特定するための識別子「rBoxID」を
格納するということは、具体的には、データ領域「Deli
veryBoxA」の属性「rBoxID」に、データ領域「RBox」を
特定するための識別子「rBoxID」の値を設定するという
ことである。
【0177】また、データ領域「DeliveryBoxA」にメソ
ッド「SendWithRBox」によって送られてきたメッセージ
を格納するということは、具体的には、データ領域「De
liveryBoxA」の属性「msg」に、メソッド「SendWithRBo
x」の引数「msg」の値を設定するとともに、データ領域
「DeliveryBoxA」の属性「sizeOfMsg」に、メソッド「S
endWithRBox」の引数「sizeOfMsg」の値を設定するとい
うことである。
ッド「SendWithRBox」によって送られてきたメッセージ
を格納するということは、具体的には、データ領域「De
liveryBoxA」の属性「msg」に、メソッド「SendWithRBo
x」の引数「msg」の値を設定するとともに、データ領域
「DeliveryBoxA」の属性「sizeOfMsg」に、メソッド「S
endWithRBox」の引数「sizeOfMsg」の値を設定するとい
うことである。
【0178】その後、オブジェクト「mCOOPMailer」
は、データ領域「DeliveryBoxA」に格納したデータ、す
なわち、メソッド「SendWithRBox」によって送られてき
たメッセージと、確保したデータ領域「RBox」を特定す
るための識別子「rBoxID」とを、点線矢印ST3−4に
示すようにオブジェクトBに配送し、オブジェクトBの
メソッドを起動する。
は、データ領域「DeliveryBoxA」に格納したデータ、す
なわち、メソッド「SendWithRBox」によって送られてき
たメッセージと、確保したデータ領域「RBox」を特定す
るための識別子「rBoxID」とを、点線矢印ST3−4に
示すようにオブジェクトBに配送し、オブジェクトBの
メソッドを起動する。
【0179】このとき、オブジェクトBのメソッドに
は、メッセージだけが受け渡され、識別子「rBoxID」
は、オブジェクトBに対応したデータ領域「Thread」に
格納される。換言すれば、オブジェクトBに受け渡され
る識別子「rBoxID」はオペレーティングシステムの管理
下にあり、アプリケーションプログラムの側から見たと
き、オブジェクトBに配送されてきたのはメッセージだ
けである。
は、メッセージだけが受け渡され、識別子「rBoxID」
は、オブジェクトBに対応したデータ領域「Thread」に
格納される。換言すれば、オブジェクトBに受け渡され
る識別子「rBoxID」はオペレーティングシステムの管理
下にあり、アプリケーションプログラムの側から見たと
き、オブジェクトBに配送されてきたのはメッセージだ
けである。
【0180】なお、データ領域「DeliveryBoxA」に格納
されたデータをオブジェクト「mCOOPMailer」からオブ
ジェクトBに配送して、オブジェクトBのメソッドを起
動する際、オブジェクトBは、メソッド「SendWithRBo
x」の引数「destObjID」によって特定され、オブジェク
トBのメソッドは、メソッド「SendWithRBox」の引数
「meth」によって特定される。
されたデータをオブジェクト「mCOOPMailer」からオブ
ジェクトBに配送して、オブジェクトBのメソッドを起
動する際、オブジェクトBは、メソッド「SendWithRBo
x」の引数「destObjID」によって特定され、オブジェク
トBのメソッドは、メソッド「SendWithRBox」の引数
「meth」によって特定される。
【0181】これらの処理が終了すると、オブジェクト
「mCOOPMailer」は、点線矢印ST3−5に示すよう
に、確保したデータ領域「RBox」を特定するための識別
子「rBoxID」をオブジェクトAへ返すとともに、正常に
処理が完了したことを示す値をメソッド「SendWithRBo
x」に対する戻り値としてオブジェクトAへ返した上
で、オブジェクトAを引き続き実行可能状態であるよう
にする。これにより、オブジェクトAは、実行可能状態
となり、行うべき処理が残っている場合には、当該処理
を引き続き実行する。
「mCOOPMailer」は、点線矢印ST3−5に示すよう
に、確保したデータ領域「RBox」を特定するための識別
子「rBoxID」をオブジェクトAへ返すとともに、正常に
処理が完了したことを示す値をメソッド「SendWithRBo
x」に対する戻り値としてオブジェクトAへ返した上
で、オブジェクトAを引き続き実行可能状態であるよう
にする。これにより、オブジェクトAは、実行可能状態
となり、行うべき処理が残っている場合には、当該処理
を引き続き実行する。
【0182】以上の処理によって、アプリケーションプ
ログラムの側から見たときには、実線矢印ST3−6に
示すようにオブジェクトAからオブジェクトBへメッセ
ージが配送され、オブジェクトAとオブジェクトBとが
並行動作しているような状態となる。
ログラムの側から見たときには、実線矢印ST3−6に
示すようにオブジェクトAからオブジェクトBへメッセ
ージが配送され、オブジェクトAとオブジェクトBとが
並行動作しているような状態となる。
【0183】その後、ST3−7に示すように、オブジ
ェクトAがメソッド「Receive」を発行すると、点線矢
印ST3−8に示すように、オブジェクト「mCOOPMaile
r」に処理が遷移し、ST3−9において、オブジェク
ト「mCOOPMailer」によってメソッド「Receive」に応じ
た処理が行われる。具体的には、オブジェクト「mCOOPM
ailer」は、メソッド「Receive」の引数「rBoxID」によ
って特定されるデータ領域「RBox」を参照し、サーバ側
オブジェクトによる処理の結果が当該データ領域「RBo
x」に格納されているならば、その結果をオブジェクト
Aに受け渡し、サーバ側オブジェクトによる処理の結果
が当該データ領域「RBox」に格納されていないならば、
オブジェクトAを実行可能状態から待ち状態にする。
ェクトAがメソッド「Receive」を発行すると、点線矢
印ST3−8に示すように、オブジェクト「mCOOPMaile
r」に処理が遷移し、ST3−9において、オブジェク
ト「mCOOPMailer」によってメソッド「Receive」に応じ
た処理が行われる。具体的には、オブジェクト「mCOOPM
ailer」は、メソッド「Receive」の引数「rBoxID」によ
って特定されるデータ領域「RBox」を参照し、サーバ側
オブジェクトによる処理の結果が当該データ領域「RBo
x」に格納されているならば、その結果をオブジェクト
Aに受け渡し、サーバ側オブジェクトによる処理の結果
が当該データ領域「RBox」に格納されていないならば、
オブジェクトAを実行可能状態から待ち状態にする。
【0184】本例では、オブジェクトAがメソッド「Re
ceive」を発行した段階では、サーバ側オブジェクトが
メソッド「Reply」を発行していないので、サーバ側オ
ブジェクトによる処理の結果は未だデータ領域「RBox」
に格納されていない。したがって、オブジェクト「mCOO
PMailer」は、点線矢印ST3−10に示すように、サ
ーバ側オブジェクトによる処理の結果が未だデータ領域
「RBox」に格納されていないことをオブジェクトAに知
らせて、オブジェクトAを実行可能状態から待ち状態に
する。
ceive」を発行した段階では、サーバ側オブジェクトが
メソッド「Reply」を発行していないので、サーバ側オ
ブジェクトによる処理の結果は未だデータ領域「RBox」
に格納されていない。したがって、オブジェクト「mCOO
PMailer」は、点線矢印ST3−10に示すように、サ
ーバ側オブジェクトによる処理の結果が未だデータ領域
「RBox」に格納されていないことをオブジェクトAに知
らせて、オブジェクトAを実行可能状態から待ち状態に
する。
【0185】その後、ST3−11に示すように、オブ
ジェクトBがメソッド「Delegate」を発行すると、点線
矢印ST3−12に示すように、オブジェクト「mCOOPM
ailer」に処理が遷移し、ST3−13において、オブ
ジェクト「mCOOPMailer」によってメソッド「Delegat
e」に応じた処理が行われる。
ジェクトBがメソッド「Delegate」を発行すると、点線
矢印ST3−12に示すように、オブジェクト「mCOOPM
ailer」に処理が遷移し、ST3−13において、オブ
ジェクト「mCOOPMailer」によってメソッド「Delegat
e」に応じた処理が行われる。
【0186】具体的には、オブジェクト「mCOOPMaile
r」は、先ず、データ領域「DeliveryBoxA」を確保す
る。そして、オブジェクト「mCOOPMailer」は、オブジ
ェクトBに対応したデータ領域「Thread」に格納されて
いる識別子「rBoxID」を読み出して、当該識別子「rBox
ID」の値をデータ領域「DeliveryBoxA」の属性「rBoxI
D」に設定する。
r」は、先ず、データ領域「DeliveryBoxA」を確保す
る。そして、オブジェクト「mCOOPMailer」は、オブジ
ェクトBに対応したデータ領域「Thread」に格納されて
いる識別子「rBoxID」を読み出して、当該識別子「rBox
ID」の値をデータ領域「DeliveryBoxA」の属性「rBoxI
D」に設定する。
【0187】このとき、オブジェクトBに対応したデー
タ領域「Thread」に格納されていた識別子「rBoxID」は
消去され、これによりオブジェクトBは返答権限を失
う。すなわち、オブジェクトBは、メソッド「Delegat
e」を発行することにより返答権限を失い、当該返答権
限はオブジェクトCに委譲される。なお、オブジェクト
Bは、返答権限を失ったので、メソッド「Reply」を発
行することはできない。換言すれば、オブジェクトB
は、メソッド「Reply」の代わりにメソッド「Delegat
e」を発行したこととなる。
タ領域「Thread」に格納されていた識別子「rBoxID」は
消去され、これによりオブジェクトBは返答権限を失
う。すなわち、オブジェクトBは、メソッド「Delegat
e」を発行することにより返答権限を失い、当該返答権
限はオブジェクトCに委譲される。なお、オブジェクト
Bは、返答権限を失ったので、メソッド「Reply」を発
行することはできない。換言すれば、オブジェクトB
は、メソッド「Reply」の代わりにメソッド「Delegat
e」を発行したこととなる。
【0188】また、オブジェクト「mCOOPMailer」は、
データ領域「DeliveryBoxA」に、メソッド「Delegate」
によって送られてきたメッセージも格納する。ここで、
データ領域「DeliveryBoxA」にメソッド「Delegate」に
よって送られてきたメッセージを格納するということ
は、具体的には、データ領域「DeliveryBoxA」の属性
「msg」に、メソッド「Delegate」の引数「msg」の値を
設定するとともに、データ領域「DeliveryBoxA」の属性
「sizeOfMsg」に、メソッド「Delegate」の引数「sizeO
fMsg」の値を設定するということである。
データ領域「DeliveryBoxA」に、メソッド「Delegate」
によって送られてきたメッセージも格納する。ここで、
データ領域「DeliveryBoxA」にメソッド「Delegate」に
よって送られてきたメッセージを格納するということ
は、具体的には、データ領域「DeliveryBoxA」の属性
「msg」に、メソッド「Delegate」の引数「msg」の値を
設定するとともに、データ領域「DeliveryBoxA」の属性
「sizeOfMsg」に、メソッド「Delegate」の引数「sizeO
fMsg」の値を設定するということである。
【0189】その後、オブジェクト「mCOOPMailer」
は、データ領域「DeliveryBoxA」に格納したデータ、す
なわち、メソッド「Delegate」によって送られてきたメ
ッセージと、データ領域「RBox」を特定するための識別
子「rBoxID」とを、点線矢印ST3−14に示すように
オブジェクトCに配送し、オブジェクトCのメソッドを
起動する。
は、データ領域「DeliveryBoxA」に格納したデータ、す
なわち、メソッド「Delegate」によって送られてきたメ
ッセージと、データ領域「RBox」を特定するための識別
子「rBoxID」とを、点線矢印ST3−14に示すように
オブジェクトCに配送し、オブジェクトCのメソッドを
起動する。
【0190】このとき、オブジェクトCのメソッドに
は、メッセージだけが受け渡され、識別子「rBoxID」
は、オブジェクトCに対応したデータ領域「Thread」に
格納される。換言すれば、オブジェクトCに受け渡され
る識別子「rBoxID」はオペレーティングシステムの管理
下にあり、アプリケーションプログラムの側から見たと
き、オブジェクトBに配送されてきたのはメッセージだ
けである。
は、メッセージだけが受け渡され、識別子「rBoxID」
は、オブジェクトCに対応したデータ領域「Thread」に
格納される。換言すれば、オブジェクトCに受け渡され
る識別子「rBoxID」はオペレーティングシステムの管理
下にあり、アプリケーションプログラムの側から見たと
き、オブジェクトBに配送されてきたのはメッセージだ
けである。
【0191】なお、データ領域「DeliveryBoxA」に格納
されたデータをオブジェクト「mCOOPMailer」からオブ
ジェクトCに配送して、オブジェクトCのメソッドを起
動する際、オブジェクトCは、メソッド「Delegate」の
引数「destObjID」によって特定され、オブジェクトC
のメソッドは、メソッド「Delegate」の引数「meth」に
よって特定される。
されたデータをオブジェクト「mCOOPMailer」からオブ
ジェクトCに配送して、オブジェクトCのメソッドを起
動する際、オブジェクトCは、メソッド「Delegate」の
引数「destObjID」によって特定され、オブジェクトC
のメソッドは、メソッド「Delegate」の引数「meth」に
よって特定される。
【0192】これらの処理が終了すると、オブジェクト
「mCOOPMailer」は、点線矢印ST3−15に示すよう
に、正常に処理が完了したことを示す値をメソッド「De
legate」に対する戻り値としてオブジェクトBへ返した
上で、オブジェクトBを引き続き実行可能状態であるよ
うにする。これにより、オブジェクトBは、実行可能状
態となり、行うべき処理が残っている場合には、当該処
理を引き続き実行する。
「mCOOPMailer」は、点線矢印ST3−15に示すよう
に、正常に処理が完了したことを示す値をメソッド「De
legate」に対する戻り値としてオブジェクトBへ返した
上で、オブジェクトBを引き続き実行可能状態であるよ
うにする。これにより、オブジェクトBは、実行可能状
態となり、行うべき処理が残っている場合には、当該処
理を引き続き実行する。
【0193】以上の処理によって、アプリケーションプ
ログラムの側から見たときには、実線矢印ST3−16
に示すように返答権限がオブジェクトBからオブジェク
トCへ委譲され、オブジェクトBとオブジェクトCとが
並行動作しているような状態となる。
ログラムの側から見たときには、実線矢印ST3−16
に示すように返答権限がオブジェクトBからオブジェク
トCへ委譲され、オブジェクトBとオブジェクトCとが
並行動作しているような状態となる。
【0194】その後、ST3−17に示すように、オブ
ジェクトCがメソッド「Reply」を発行すると、点線矢
印ST3−18に示すように、オブジェクト「mCOOPMai
ler」に処理が遷移し、ST3−19において、オブジ
ェクト「mCOOPMailer」によってメソッド「Reply」に応
じた処理が行われる。具体的には、オブジェクト「mCOO
PMailer」は、オブジェクトAが既にメソッド「Receiv
e」を発行しているならば、オブジェクトCによる処理
の結果をオブジェクトAに受け渡し、オブジェクトAが
未だメソッド「Receive」を発行していないならば、オ
ブジェクトCによる処理の結果をデータ領域「RBox」に
格納する。
ジェクトCがメソッド「Reply」を発行すると、点線矢
印ST3−18に示すように、オブジェクト「mCOOPMai
ler」に処理が遷移し、ST3−19において、オブジ
ェクト「mCOOPMailer」によってメソッド「Reply」に応
じた処理が行われる。具体的には、オブジェクト「mCOO
PMailer」は、オブジェクトAが既にメソッド「Receiv
e」を発行しているならば、オブジェクトCによる処理
の結果をオブジェクトAに受け渡し、オブジェクトAが
未だメソッド「Receive」を発行していないならば、オ
ブジェクトCによる処理の結果をデータ領域「RBox」に
格納する。
【0195】本例では、オブジェクトCがメソッド「Re
ply」を発行した段階で、既にオブジェクトAがメソッ
ド「Receive」を発行している。したがって、オブジェ
クト「mCOOPMailer」は、点線矢印ST3−20に示す
ように、オブジェクトCによる処理の結果を、データ領
域「RBox」に格納することなく、オブジェクトAに直ぐ
に受け渡す。そして、オブジェクト「mCOOPMailer」
は、オブジェクトCによる処理の結果のオブジェクトA
への受け渡しの処理が正常に完了したら、点線矢印ST
3−21に示すように、当該処理が正常に完了したこと
を示す値をメソッド「Reply」に対する戻り値としてオ
ブジェクトCへ返した上で、オブジェクトCを引き続き
実行可能状態であるようにする。これにより、オブジェ
クトCは、実行可能状態となり、行うべき処理が残って
いる場合には、当該処理を引き続き実行する。
ply」を発行した段階で、既にオブジェクトAがメソッ
ド「Receive」を発行している。したがって、オブジェ
クト「mCOOPMailer」は、点線矢印ST3−20に示す
ように、オブジェクトCによる処理の結果を、データ領
域「RBox」に格納することなく、オブジェクトAに直ぐ
に受け渡す。そして、オブジェクト「mCOOPMailer」
は、オブジェクトCによる処理の結果のオブジェクトA
への受け渡しの処理が正常に完了したら、点線矢印ST
3−21に示すように、当該処理が正常に完了したこと
を示す値をメソッド「Reply」に対する戻り値としてオ
ブジェクトCへ返した上で、オブジェクトCを引き続き
実行可能状態であるようにする。これにより、オブジェ
クトCは、実行可能状態となり、行うべき処理が残って
いる場合には、当該処理を引き続き実行する。
【0196】以上の処理によって、アプリケーションプ
ログラムの側から見たときには、実線矢印ST3−22
に示すようにオブジェクトCによる処理の結果がオブジ
ェクトAへ受け渡され、オブジェクトAとオブジェクト
Cとが並行動作しているような状態となる。
ログラムの側から見たときには、実線矢印ST3−22
に示すようにオブジェクトCによる処理の結果がオブジ
ェクトAへ受け渡され、オブジェクトAとオブジェクト
Cとが並行動作しているような状態となる。
【0197】なお、図5の例では、メソッド「Reply」
が発行される前にメソッド「Receive」が発行された場
合を示したが、メソッド「Reply」が発行された後にメ
ソッド「Receive」が発行される場合もあり得る。メソ
ッド「Reply」が発行された後にメソッド「Receive」が
発行された場合には、オブジェクトAは待ち状態となる
ことなく、オブジェクトCによる処理の結果を直ぐに受
け取ることとなる。
が発行される前にメソッド「Receive」が発行された場
合を示したが、メソッド「Reply」が発行された後にメ
ソッド「Receive」が発行される場合もあり得る。メソ
ッド「Reply」が発行された後にメソッド「Receive」が
発行された場合には、オブジェクトAは待ち状態となる
ことなく、オブジェクトCによる処理の結果を直ぐに受
け取ることとなる。
【0198】すなわち、オブジェクトCがメソッド「Re
ply」を発行した後からオブジェクトAがメソッド「Rec
eive」を発行した場合、オブジェクト「mCOOPMailer」
は、オブジェクトCがメソッド「Reply」を発行した段
階では、オブジェクトCによる処理の結果をデータ領域
「RBox」に格納しておき、オブジェクトAがメソッド
「Receive」を発行した段階で直ぐに、オブジェクトC
による処理の結果をデータ領域「RBox」から読み出して
オブジェクトAに受け渡す。
ply」を発行した後からオブジェクトAがメソッド「Rec
eive」を発行した場合、オブジェクト「mCOOPMailer」
は、オブジェクトCがメソッド「Reply」を発行した段
階では、オブジェクトCによる処理の結果をデータ領域
「RBox」に格納しておき、オブジェクトAがメソッド
「Receive」を発行した段階で直ぐに、オブジェクトC
による処理の結果をデータ領域「RBox」から読み出して
オブジェクトAに受け渡す。
【0199】なお、オブジェクトCによる処理の結果を
データ領域「RBox」に格納するということは、具体的に
は、データ領域「RBox」の属性「ready」に、オブジェ
クトCによる処理の結果が返ってきていることを示す値
を設定し、且つ、データ領域「RBox」の属性「resultMs
g」に、オブジェクトCによる処理の結果としてオブジ
ェクトAに受け渡すメッセージが格納された領域へのポ
インタ、すなわちメソッド「Reply」の引数「resultMs
g」で示されるポインタを設定し、且つ、データ領域「R
Box」の属性「sizeOfResultMsg」に、オブジェクトCに
よる処理の結果としてオブジェクトAに受け渡すメッセ
ージのサイズを示す値、すなわちメソッド「Reply」の
引数「sizeOfResultMsg」が示す値を設定するというこ
とである。
データ領域「RBox」に格納するということは、具体的に
は、データ領域「RBox」の属性「ready」に、オブジェ
クトCによる処理の結果が返ってきていることを示す値
を設定し、且つ、データ領域「RBox」の属性「resultMs
g」に、オブジェクトCによる処理の結果としてオブジ
ェクトAに受け渡すメッセージが格納された領域へのポ
インタ、すなわちメソッド「Reply」の引数「resultMs
g」で示されるポインタを設定し、且つ、データ領域「R
Box」の属性「sizeOfResultMsg」に、オブジェクトCに
よる処理の結果としてオブジェクトAに受け渡すメッセ
ージのサイズを示す値、すなわちメソッド「Reply」の
引数「sizeOfResultMsg」が示す値を設定するというこ
とである。
【0200】そして、オブジェクトCによる処理の結果
をデータ領域「RBox」から読み出してオブジェクトAに
受け渡す際、オブジェクト「mCOOPMailer」は、先ず、
メソッド「Receive」の引数「rBoxID」によって特定さ
れるデータ領域「RBox」から、属性「resultMsg」及び
属性「sizeOfResultMsg」を読み出し、属性「resultMs
g」が指し示す領域から属性「sizeOfResultMsg」が示す
サイズ分のデータを読み出す。このデータがオブジェク
トCからオブジェクトAに受け渡すメッセージとなる。
そして、オブジェクト「mCOOPMailer」は、このように
読み出したデータを、メソッド「Receive」の引数「ms
g」が指し示す領域に格納する。ここで、メソッド「Rec
eive」の引数「msg」が指し示す領域のサイズは、メソ
ッド「Receive」の引数「sizeOfMsg」によって設定され
ている。
をデータ領域「RBox」から読み出してオブジェクトAに
受け渡す際、オブジェクト「mCOOPMailer」は、先ず、
メソッド「Receive」の引数「rBoxID」によって特定さ
れるデータ領域「RBox」から、属性「resultMsg」及び
属性「sizeOfResultMsg」を読み出し、属性「resultMs
g」が指し示す領域から属性「sizeOfResultMsg」が示す
サイズ分のデータを読み出す。このデータがオブジェク
トCからオブジェクトAに受け渡すメッセージとなる。
そして、オブジェクト「mCOOPMailer」は、このように
読み出したデータを、メソッド「Receive」の引数「ms
g」が指し示す領域に格納する。ここで、メソッド「Rec
eive」の引数「msg」が指し示す領域のサイズは、メソ
ッド「Receive」の引数「sizeOfMsg」によって設定され
ている。
【0201】以上の処理により、メソッド「Reply」が
発行された後にメソッド「Receive」が発行された場合
も、メソッド「Reply」が発行される前にメソッド「Rec
eive」が発行された場合と同様に、オブジェクトCによ
る処理の結果がオブジェクトAへ受け渡され、オブジェ
クトAとオブジェクトCとが並行動作しているような状
態となる。
発行された後にメソッド「Receive」が発行された場合
も、メソッド「Reply」が発行される前にメソッド「Rec
eive」が発行された場合と同様に、オブジェクトCによ
る処理の結果がオブジェクトAへ受け渡され、オブジェ
クトAとオブジェクトCとが並行動作しているような状
態となる。
【0202】以上のように、オブジェクトの記述に使用
するAPIとして、メソッド「Delegate」を導入するこ
とにより、サーバ側オブジェクトが複数のオブジェクト
から構成されている場合に、それらのオブジェクト間で
返答権限の委譲を行うことが可能となる。換言すれば、
メソッド「Delegate」を導入することにより、サーバ側
オブジェクトが複数のオブジェクトによって構成され、
且つ処理の要求の受け口と出口が同じではないような場
合であっても、メッセージパッシングを適切に行うこと
が可能となる。
するAPIとして、メソッド「Delegate」を導入するこ
とにより、サーバ側オブジェクトが複数のオブジェクト
から構成されている場合に、それらのオブジェクト間で
返答権限の委譲を行うことが可能となる。換言すれば、
メソッド「Delegate」を導入することにより、サーバ側
オブジェクトが複数のオブジェクトによって構成され、
且つ処理の要求の受け口と出口が同じではないような場
合であっても、メッセージパッシングを適切に行うこと
が可能となる。
【0203】しかも、メソッド「Delegate」を導入した
場合には、サーバ側オブジェクトを構成するオブジェク
ト間で返答権限の委譲を行う際に、アプリケーションプ
ログラムの側は、データ領域「RBox」並びに当該データ
領域「RBox」を特定する識別子「rBoxID」を意識する必
要がない。したがって、メソッド「Delegate」を導入す
ることにより、アプリケーションプログラムの開発が容
易となる。
場合には、サーバ側オブジェクトを構成するオブジェク
ト間で返答権限の委譲を行う際に、アプリケーションプ
ログラムの側は、データ領域「RBox」並びに当該データ
領域「RBox」を特定する識別子「rBoxID」を意識する必
要がない。したがって、メソッド「Delegate」を導入す
ることにより、アプリケーションプログラムの開発が容
易となる。
【0204】なお、メソッド「Delegate」によって返答
権限が委譲されたオブジェクト(上記の例ではオブジェ
クトC)が、例外事象の発生などにより動作不能状態と
なって、結果を求めることができなくなった場合には、
図4に示したシナリオと同様なシナリオにより、例外処
理が行われる。
権限が委譲されたオブジェクト(上記の例ではオブジェ
クトC)が、例外事象の発生などにより動作不能状態と
なって、結果を求めることができなくなった場合には、
図4に示したシナリオと同様なシナリオにより、例外処
理が行われる。
【0205】すなわち、図5に示した例において、メソ
ッド「Delegate」によって返答権限が委譲されたオブジ
ェクトCの実行中に、当該オブジェクトCが例外事象の
発生などにより動作不能状態となって、結果を求めるこ
とができなくなった場合には、オブジェクト「mCOOPFau
ltHandler」に処理が遷移し、オブジェクト「mCOOPFaul
tHandler」によって所定の例外処理が行われ、オブジェ
クト「mCOOPFaultHandler」からオブジェクト「mCOOPMa
iler」に、オブジェクトCが例外事象の発生によって動
作不能になったことが通知される。
ッド「Delegate」によって返答権限が委譲されたオブジ
ェクトCの実行中に、当該オブジェクトCが例外事象の
発生などにより動作不能状態となって、結果を求めるこ
とができなくなった場合には、オブジェクト「mCOOPFau
ltHandler」に処理が遷移し、オブジェクト「mCOOPFaul
tHandler」によって所定の例外処理が行われ、オブジェ
クト「mCOOPFaultHandler」からオブジェクト「mCOOPMa
iler」に、オブジェクトCが例外事象の発生によって動
作不能になったことが通知される。
【0206】このとき、オブジェクトAがメソッド「Re
ceive」を既に発行して待ち状態となっていれば、オブ
ジェクト「mCOOPMailer」は、オブジェクトAに対し
て、オブジェクトCが例外事象の発生によって動作不能
となったことを示すエラーコードを、メソッド「Receiv
e」に対する戻り値としてオブジェクトAへ返した上
で、オブジェクトAを引き続き実行可能状態であるよう
にする。これにより、オブジェクトAは、実行可能状態
となり、行うべき処理が残っている場合には、当該処理
を引き続き実行する。
ceive」を既に発行して待ち状態となっていれば、オブ
ジェクト「mCOOPMailer」は、オブジェクトAに対し
て、オブジェクトCが例外事象の発生によって動作不能
となったことを示すエラーコードを、メソッド「Receiv
e」に対する戻り値としてオブジェクトAへ返した上
で、オブジェクトAを引き続き実行可能状態であるよう
にする。これにより、オブジェクトAは、実行可能状態
となり、行うべき処理が残っている場合には、当該処理
を引き続き実行する。
【0207】また、オブジェクトAがメソッド「Receiv
e」を発行する前にオブジェクトCに例外事象が発生し
た場合には、オブジェクト「mCOOPMailer」は、データ
領域「RBox」の属性「status」に、例外事象の発生によ
りオブジェクトCが動作不能状態となったことを示すエ
ラーコードを設定する。そして、オブジェクトAがメソ
ッド「Receive」を発行した段階で、オブジェクト「mCO
OPMailer」は、データ領域「RBox」の属性「status」に
設定されたエラーコードを読み出して、当該エラーコー
ドをメソッド「Receive」に対する戻り値としてオブジ
ェクトAへ返した上で、オブジェクトAを引き続き実行
可能状態であるようにする。これにより、オブジェクト
Aは、実行可能状態となり、行うべき処理が残っている
場合には、当該処理を引き続き実行する。
e」を発行する前にオブジェクトCに例外事象が発生し
た場合には、オブジェクト「mCOOPMailer」は、データ
領域「RBox」の属性「status」に、例外事象の発生によ
りオブジェクトCが動作不能状態となったことを示すエ
ラーコードを設定する。そして、オブジェクトAがメソ
ッド「Receive」を発行した段階で、オブジェクト「mCO
OPMailer」は、データ領域「RBox」の属性「status」に
設定されたエラーコードを読み出して、当該エラーコー
ドをメソッド「Receive」に対する戻り値としてオブジ
ェクトAへ返した上で、オブジェクトAを引き続き実行
可能状態であるようにする。これにより、オブジェクト
Aは、実行可能状態となり、行うべき処理が残っている
場合には、当該処理を引き続き実行する。
【0208】以上のような処理を行うことにより、メソ
ッド「Delegate」によって返答権限が委譲されたオブジ
ェクトCが、何らかの原因によりオブジェクトAに結果
メッセージを返せなくなってしまっても、オブジェクト
Aを待ち状態から実行可能状態に復帰させることが可能
となり、オブジェクトAが待ち状態になってしまってシ
ステムが停止してしまうような状況を回避することがで
きる。
ッド「Delegate」によって返答権限が委譲されたオブジ
ェクトCが、何らかの原因によりオブジェクトAに結果
メッセージを返せなくなってしまっても、オブジェクト
Aを待ち状態から実行可能状態に復帰させることが可能
となり、オブジェクトAが待ち状態になってしまってシ
ステムが停止してしまうような状況を回避することがで
きる。
【0209】2−5−3 SendWithContinuation()を用
いたメッセージパッシング mDriveメタスペースにおいて、メソッド「SendWithCont
inuation」を使用したときのメッセージパッシングにつ
いて、図6を参照して説明する。
いたメッセージパッシング mDriveメタスペースにおいて、メソッド「SendWithCont
inuation」を使用したときのメッセージパッシングにつ
いて、図6を参照して説明する。
【0210】図6は、mDriveメタスペースでのメッセー
ジパッシングの基本的なシナリオとして、mDriveメタス
ペース上でデバイスドライバとして動作するオブジェク
トAと、mDriveメタスペース上でデバイスドライバとし
て動作するオブジェクトBとの間でメッセージパッシン
グを行う際のシナリオを示している。すなわち、本例で
は、オブジェクトAがクライアント側オブジェクトであ
り、オブジェクトBがサーバ側オブジェクトである。
ジパッシングの基本的なシナリオとして、mDriveメタス
ペース上でデバイスドライバとして動作するオブジェク
トAと、mDriveメタスペース上でデバイスドライバとし
て動作するオブジェクトBとの間でメッセージパッシン
グを行う際のシナリオを示している。すなわち、本例で
は、オブジェクトAがクライアント側オブジェクトであ
り、オブジェクトBがサーバ側オブジェクトである。
【0211】なお、図6では、メソッド「SendWithCont
inuation」を発行するオブジェクトAのメソッドのこと
を「A::A1」として示している。また、メソッド
「SendWithContinuation」によって起動されるととも
に、メソッド「Kick」を発行するオブジェクトBのメソ
ッドのことを「B::B1」として示している。また、
メソッド「Kick」によって起動されるオブジェクトAの
メソッド、すなわち継続メソッドのことを「A::A
2」として示している。
inuation」を発行するオブジェクトAのメソッドのこと
を「A::A1」として示している。また、メソッド
「SendWithContinuation」によって起動されるととも
に、メソッド「Kick」を発行するオブジェクトBのメソ
ッドのことを「B::B1」として示している。また、
メソッド「Kick」によって起動されるオブジェクトAの
メソッド、すなわち継続メソッドのことを「A::A
2」として示している。
【0212】ST4−1に示すように、オブジェクトA
がメソッド「A::A1」の中でメソッド「SendWithCo
ntinuation」を発行すると、点線矢印ST4−2に示す
ように、オブジェクト「mDriveMailer」に処理が遷移
し、ST4−3において、オブジェクト「mDriveMaile
r」によってメソッド「SendWithContinuation」に応じ
た処理が行われる。
がメソッド「A::A1」の中でメソッド「SendWithCo
ntinuation」を発行すると、点線矢印ST4−2に示す
ように、オブジェクト「mDriveMailer」に処理が遷移
し、ST4−3において、オブジェクト「mDriveMaile
r」によってメソッド「SendWithContinuation」に応じ
た処理が行われる。
【0213】ここで、オブジェクト「mDriveMailer」
は、先ず、データ領域「Continuation」を確保し、当該
データ領域「Continuation」に、継続メソッドについて
の情報を格納する。ここで、データ領域「Continuatio
n」に継続メソッドについての情報を格納するというこ
とは、具体的には、データ領域「Continuation」の属性
「creator」に、オブジェクトAに対応したデータ領域
「Thread」を特定する識別子の値を設定するとともに、
データ領域「Continuation」の属性「meth」に、メソッ
ド「SendWithContinuation」の引数「contMeth」の値を
設定するということである。
は、先ず、データ領域「Continuation」を確保し、当該
データ領域「Continuation」に、継続メソッドについて
の情報を格納する。ここで、データ領域「Continuatio
n」に継続メソッドについての情報を格納するというこ
とは、具体的には、データ領域「Continuation」の属性
「creator」に、オブジェクトAに対応したデータ領域
「Thread」を特定する識別子の値を設定するとともに、
データ領域「Continuation」の属性「meth」に、メソッ
ド「SendWithContinuation」の引数「contMeth」の値を
設定するということである。
【0214】また、オブジェクト「mDriveMailer」は、
データ領域「DeliveryBoxB」を確保し、当該データ領域
「DeliveryBoxB」に、データ領域「Continuation」を特
定するための識別子「contID」と、メソッド「SendWith
Continuation」によって送られてきたメッセージとを格
納する。ここで、データ領域「DeliveryBoxB」にデータ
領域「Continuation」を特定するための識別子「contI
D」を格納するということは、具体的には、データ領域
「DeliveryBoxB」の属性「contID」に、データ領域「Co
ntinuation」を特定するための識別子「contID」の値を
設定するということである。また、データ領域「Delive
ryBoxB」にメソッド「SendWithContinuation」によって
送られてきたメッセージを格納するということは、具体
的には、データ領域「DeliveryBoxB」の属性「msg」
に、メソッド「SendWithContinuation」の引数「msg」
の値を設定するとともに、データ領域「DeliveryBoxB」
の属性「sizeOfMsg」に、メソッド「SendWithContinuat
ion」の引数「sizeOfMsg」の値を設定するということで
ある。
データ領域「DeliveryBoxB」を確保し、当該データ領域
「DeliveryBoxB」に、データ領域「Continuation」を特
定するための識別子「contID」と、メソッド「SendWith
Continuation」によって送られてきたメッセージとを格
納する。ここで、データ領域「DeliveryBoxB」にデータ
領域「Continuation」を特定するための識別子「contI
D」を格納するということは、具体的には、データ領域
「DeliveryBoxB」の属性「contID」に、データ領域「Co
ntinuation」を特定するための識別子「contID」の値を
設定するということである。また、データ領域「Delive
ryBoxB」にメソッド「SendWithContinuation」によって
送られてきたメッセージを格納するということは、具体
的には、データ領域「DeliveryBoxB」の属性「msg」
に、メソッド「SendWithContinuation」の引数「msg」
の値を設定するとともに、データ領域「DeliveryBoxB」
の属性「sizeOfMsg」に、メソッド「SendWithContinuat
ion」の引数「sizeOfMsg」の値を設定するということで
ある。
【0215】その後、オブジェクト「mDriveMailer」
は、データ領域「DeliveryBoxB」に格納したデータ、す
なわち、メソッド「SendWithContinuation」によって送
られてきたメッセージと、データ領域「Continuation」
を特定するための識別子「contID」とを、点線矢印ST
4−4に示すようにオブジェクトBに配送し、オブジェ
クトBのメソッド「B::B1」を起動する。
は、データ領域「DeliveryBoxB」に格納したデータ、す
なわち、メソッド「SendWithContinuation」によって送
られてきたメッセージと、データ領域「Continuation」
を特定するための識別子「contID」とを、点線矢印ST
4−4に示すようにオブジェクトBに配送し、オブジェ
クトBのメソッド「B::B1」を起動する。
【0216】なお、データ領域「DeliveryBoxB」に格納
されたデータをオブジェクト「mDriveMailer」からオブ
ジェクトBに配送して、オブジェクトBのメソッド
「B::B1」を起動する際、オブジェクトBは、メソ
ッド「SendWithContinuation」の引数「destObjID」に
よって特定され、オブジェクトBのメソッド「B::B
1」は、メソッド「SendWithContinuation」の引数「me
th」によって特定される。
されたデータをオブジェクト「mDriveMailer」からオブ
ジェクトBに配送して、オブジェクトBのメソッド
「B::B1」を起動する際、オブジェクトBは、メソ
ッド「SendWithContinuation」の引数「destObjID」に
よって特定され、オブジェクトBのメソッド「B::B
1」は、メソッド「SendWithContinuation」の引数「me
th」によって特定される。
【0217】これらの処理が終了すると、オブジェクト
「mDriveMailer」は、点線矢印ST4−5に示すよう
に、正常に処理が完了したことを示す値をメソッド「Se
ndWithContinuation」に対する戻り値としてオブジェク
トAへ返した上で、オブジェクトAを引き続き実行可能
状態であるようにする。これにより、オブジェクトA
は、実行可能状態となり、行うべき処理が残っている場
合には、当該処理を引き続き実行する。
「mDriveMailer」は、点線矢印ST4−5に示すよう
に、正常に処理が完了したことを示す値をメソッド「Se
ndWithContinuation」に対する戻り値としてオブジェク
トAへ返した上で、オブジェクトAを引き続き実行可能
状態であるようにする。これにより、オブジェクトA
は、実行可能状態となり、行うべき処理が残っている場
合には、当該処理を引き続き実行する。
【0218】以上の処理によって、デバイスドライバの
側から見たときには、実線矢印ST4−6に示すように
オブジェクトAからオブジェクトBへメッセージが配送
され、オブジェクトAとオブジェクトBとが並行動作し
ているような状態となる。
側から見たときには、実線矢印ST4−6に示すように
オブジェクトAからオブジェクトBへメッセージが配送
され、オブジェクトAとオブジェクトBとが並行動作し
ているような状態となる。
【0219】その後、オブジェクトBは、メソッド
「B::B1」を実行し、オブジェクトAから要求され
ていた処理が完了したら、ST4−7に示すように、メ
ソッド「Kick」を発行する。メソッド「Kick」が発行さ
れると、点線矢印ST4−8に示すように、オブジェク
ト「mDriveMailer」に処理が遷移し、ST4−9におい
て、オブジェクト「mDriveMailer」によってメソッド
「Kick」に応じた処理が行われる。
「B::B1」を実行し、オブジェクトAから要求され
ていた処理が完了したら、ST4−7に示すように、メ
ソッド「Kick」を発行する。メソッド「Kick」が発行さ
れると、点線矢印ST4−8に示すように、オブジェク
ト「mDriveMailer」に処理が遷移し、ST4−9におい
て、オブジェクト「mDriveMailer」によってメソッド
「Kick」に応じた処理が行われる。
【0220】具体的には、オブジェクト「mDriveMaile
r」は、先ず、メソッド「Kick」の引数「contID」に基
づいてデータ領域「Continuation」を特定し、当該デー
タ領域「Continuation」に格納されている情報を読み出
す。
r」は、先ず、メソッド「Kick」の引数「contID」に基
づいてデータ領域「Continuation」を特定し、当該デー
タ領域「Continuation」に格納されている情報を読み出
す。
【0221】このとき、データ領域「Continuation」に
は、属性「creator」として、オブジェクトAに対応し
たデータ領域「Thread」を特定する識別子の値が設定さ
れている。これにより、オブジェクト「mDriveMailer」
は、メソッド「Kick」に応じて起動すべきオブジェクト
として、オブジェクトAを特定する。また、データ領域
「Continuation」には、属性「meth」として、メソッド
「SendWithContinuation」の引数「contMeth」の値、す
なわち継続メソッド「A::A2」を特定する値が設定
されている。これにより、オブジェクト「mDriveMaile
r」は、メソッド「Kick」に応じて起動すべき継続メソ
ッドとして、メソッド「A::A2」を特定する。
は、属性「creator」として、オブジェクトAに対応し
たデータ領域「Thread」を特定する識別子の値が設定さ
れている。これにより、オブジェクト「mDriveMailer」
は、メソッド「Kick」に応じて起動すべきオブジェクト
として、オブジェクトAを特定する。また、データ領域
「Continuation」には、属性「meth」として、メソッド
「SendWithContinuation」の引数「contMeth」の値、す
なわち継続メソッド「A::A2」を特定する値が設定
されている。これにより、オブジェクト「mDriveMaile
r」は、メソッド「Kick」に応じて起動すべき継続メソ
ッドとして、メソッド「A::A2」を特定する。
【0222】そして、オブジェクト「mDriveMailer」
は、点線矢印ST4−10に示すように、データ領域
「Continuation」に格納されていた情報によって特定さ
れたオブジェクトのメソッド、すなわちオブジェクトA
のメソッド「A::A2」を継続メソッドとして起動す
る。なお、継続メソッド「A::A2」を起動する際、
当該継続メソッド「A::A2」に受け渡されるメッセ
ージは、メソッド「Kick」の引数「msg」「sizeOfMsg」
によって特定される。
は、点線矢印ST4−10に示すように、データ領域
「Continuation」に格納されていた情報によって特定さ
れたオブジェクトのメソッド、すなわちオブジェクトA
のメソッド「A::A2」を継続メソッドとして起動す
る。なお、継続メソッド「A::A2」を起動する際、
当該継続メソッド「A::A2」に受け渡されるメッセ
ージは、メソッド「Kick」の引数「msg」「sizeOfMsg」
によって特定される。
【0223】そして、オブジェクト「mDriveMailer」
は、オブジェクトAの継続メソッド「A::A2」の起
動が正常に完了したら、点線矢印ST4−11に示すよ
うに、メソッド「Kick」の処理が正常に完了したことを
示す値をメソッド「Kick」に対する戻り値としてオブジ
ェクトBへ返した上で、オブジェクトBを引き続き実行
可能状態であるようにする。これにより、オブジェクト
Bは、実行可能状態となり、行うべき処理が残っている
場合には、当該処理を引き続き実行する。
は、オブジェクトAの継続メソッド「A::A2」の起
動が正常に完了したら、点線矢印ST4−11に示すよ
うに、メソッド「Kick」の処理が正常に完了したことを
示す値をメソッド「Kick」に対する戻り値としてオブジ
ェクトBへ返した上で、オブジェクトBを引き続き実行
可能状態であるようにする。これにより、オブジェクト
Bは、実行可能状態となり、行うべき処理が残っている
場合には、当該処理を引き続き実行する。
【0224】以上の処理によって、デバイスドライバの
側から見たときには、実線矢印ST4−12に示すよう
にオブジェクトBによってオブジェクトAの継続メソッ
ド「A::A2」が起動され、再びオブジェクトAとオ
ブジェクトBとが並行動作しているような状態となる。
側から見たときには、実線矢印ST4−12に示すよう
にオブジェクトBによってオブジェクトAの継続メソッ
ド「A::A2」が起動され、再びオブジェクトAとオ
ブジェクトBとが並行動作しているような状態となる。
【0225】2−5−4 異なるメタスペース間でのメ
ッセージパッシング mCOOPメタスペースとmDriveメタスペースとの間で、メ
ソッド「Delegate」を使用して行われるメッセージパッ
シングについて、図7を参照して説明する。
ッセージパッシング mCOOPメタスペースとmDriveメタスペースとの間で、メ
ソッド「Delegate」を使用して行われるメッセージパッ
シングについて、図7を参照して説明する。
【0226】図7は、異なるメタスペース間でのメッセ
ージパッシングのシナリオとして、mCOOPメタスペース
上でアプリケーションプログラムとして動作するオブジ
ェクトAと、mCOOPメタスペース上でアプリケーション
プログラムとして動作するオブジェクトBと、mDriveメ
タスペース上でデバイスドライバとして動作するオブジ
ェクトCとの間でのメッセージパッシングであって、オ
ブジェクトBが返答権限をオブジェクトCに委譲した場
合のシナリオを示している。
ージパッシングのシナリオとして、mCOOPメタスペース
上でアプリケーションプログラムとして動作するオブジ
ェクトAと、mCOOPメタスペース上でアプリケーション
プログラムとして動作するオブジェクトBと、mDriveメ
タスペース上でデバイスドライバとして動作するオブジ
ェクトCとの間でのメッセージパッシングであって、オ
ブジェクトBが返答権限をオブジェクトCに委譲した場
合のシナリオを示している。
【0227】すなわち、本例では、オブジェクトAがク
ライアント側オブジェクトであり、オブジェクトB及び
オブジェクトCがサーバ側オブジェクトである。そし
て、オブジェクトAに処理の結果を返す権限がオブジェ
クトBからオブジェクトCに委譲される。すなわち、オ
ブジェクトBは、サーバ側オブジェクトであるとともに
権限委譲元オブジェクトでもあり、また、オブジェクト
Cは、サーバ側オブジェクトであるとともに権限委譲先
オブジェクトでもある。
ライアント側オブジェクトであり、オブジェクトB及び
オブジェクトCがサーバ側オブジェクトである。そし
て、オブジェクトAに処理の結果を返す権限がオブジェ
クトBからオブジェクトCに委譲される。すなわち、オ
ブジェクトBは、サーバ側オブジェクトであるとともに
権限委譲元オブジェクトでもあり、また、オブジェクト
Cは、サーバ側オブジェクトであるとともに権限委譲先
オブジェクトでもある。
【0228】本シナリオにおいて、図7に示した各ステ
ップのうち、ST5−1,ST5−2,ST5−3,S
T5−4,ST5−5,ST5−6,ST5−7,ST
5−8,ST5−9,ST5−10までのステップは、
図5に示したステップST3−1,ST3−2,ST3
−3,ST3−4,ST3−5,ST3−6,ST3−
7,ST3−8,ST3−9,ST3−10とそれぞれ
同じであるので、説明を省略する。
ップのうち、ST5−1,ST5−2,ST5−3,S
T5−4,ST5−5,ST5−6,ST5−7,ST
5−8,ST5−9,ST5−10までのステップは、
図5に示したステップST3−1,ST3−2,ST3
−3,ST3−4,ST3−5,ST3−6,ST3−
7,ST3−8,ST3−9,ST3−10とそれぞれ
同じであるので、説明を省略する。
【0229】そして、本シナリオでは、ST5−10ま
でのステップを経て、オブジェクトAが待ち状態であ
り、オブジェクトBが処理を実行している状態となって
いるときに、オブジェクトBが、返答権限を委譲するた
めにメソッド「Delegate」を発行したものとしている。
でのステップを経て、オブジェクトAが待ち状態であ
り、オブジェクトBが処理を実行している状態となって
いるときに、オブジェクトBが、返答権限を委譲するた
めにメソッド「Delegate」を発行したものとしている。
【0230】ST5−11に示すように、オブジェクト
Bがメソッド「Delegate」を発行すると、点線矢印ST
5−12に示すように、オブジェクト「mCOOPMailer」
に処理が遷移し、ST5−13において、オブジェクト
「mCOOPMailer」によってメソッド「Delegate」に応じ
た処理が行われる。
Bがメソッド「Delegate」を発行すると、点線矢印ST
5−12に示すように、オブジェクト「mCOOPMailer」
に処理が遷移し、ST5−13において、オブジェクト
「mCOOPMailer」によってメソッド「Delegate」に応じ
た処理が行われる。
【0231】このとき、オブジェクト「mCOOPMailer」
は、権限委譲先オブジェクトがmCOOPメタスペース上で
動作するオブジェクトであるか否かを判断する。そし
て、権限委譲先オブジェクトがmCOOPメタスペース上で
動作するオブジェクトである場合には、図5に示したシ
ナリオに沿って処理が進められる。しかしながら、本例
では、権限委譲先オブジェクトが、mCOOPメタスペース
上で動作するオブジェクトではなく、mDriveメタスペー
ス上で動作するオブジェクトCであるので、点線矢印S
T5−14に示すように、オブジェクト「mCOOPMaile
r」からオブジェクト「mDriveMailer」に処理が遷移す
る。
は、権限委譲先オブジェクトがmCOOPメタスペース上で
動作するオブジェクトであるか否かを判断する。そし
て、権限委譲先オブジェクトがmCOOPメタスペース上で
動作するオブジェクトである場合には、図5に示したシ
ナリオに沿って処理が進められる。しかしながら、本例
では、権限委譲先オブジェクトが、mCOOPメタスペース
上で動作するオブジェクトではなく、mDriveメタスペー
ス上で動作するオブジェクトCであるので、点線矢印S
T5−14に示すように、オブジェクト「mCOOPMaile
r」からオブジェクト「mDriveMailer」に処理が遷移す
る。
【0232】なお、オブジェクト「mCOOPMailer」から
オブジェクト「mDriveMailer」への処理の遷移は、マイ
クロカーネルを介して行われる。具体的には、先ず、オ
ブジェクト「mCOOPMailer」は、メソッド「Delegate」
の引数「destObjID」に基づいて、権限移譲先メソッド
が動作するメタスペースがmDriveメタスペースであると
判断する。その後、オブジェクト「mCOOPMailer」は、
マイクロカーネルの機能を使って、mDriveメタスペース
上で動作するオブジェクトについてのメッセージパッシ
ングを担うメタオブジェクトであるオブジェクト「mDri
veMailer」に処理を依頼する。これにより、オブジェク
ト「mCOOPMailer」からオブジェクト「mDriveMailer」
に処理が遷移することとなる。
オブジェクト「mDriveMailer」への処理の遷移は、マイ
クロカーネルを介して行われる。具体的には、先ず、オ
ブジェクト「mCOOPMailer」は、メソッド「Delegate」
の引数「destObjID」に基づいて、権限移譲先メソッド
が動作するメタスペースがmDriveメタスペースであると
判断する。その後、オブジェクト「mCOOPMailer」は、
マイクロカーネルの機能を使って、mDriveメタスペース
上で動作するオブジェクトについてのメッセージパッシ
ングを担うメタオブジェクトであるオブジェクト「mDri
veMailer」に処理を依頼する。これにより、オブジェク
ト「mCOOPMailer」からオブジェクト「mDriveMailer」
に処理が遷移することとなる。
【0233】以上のようにして、オブジェクト「mCOOPM
ailer」からオブジェクト「mDriveMailer」へ処理が遷
移したら、ST5−15において、オブジェクト「mDri
veMailer」によってメソッド「Delegate」に応じた処理
が行われる。
ailer」からオブジェクト「mDriveMailer」へ処理が遷
移したら、ST5−15において、オブジェクト「mDri
veMailer」によってメソッド「Delegate」に応じた処理
が行われる。
【0234】具体的には、オブジェクト「mDriveMaile
r」は、先ず、データ領域「DeliveryBoxB」を確保す
る。そして、オブジェクト「mDriveMailer」は、オブジ
ェクトBに対応したデータ領域「Thread」に格納されて
いる識別子「rBoxID」を読み出して、当該識別子「rBox
ID」をデータ領域「DeliveryBoxB」の属性「contID」に
設定する。
r」は、先ず、データ領域「DeliveryBoxB」を確保す
る。そして、オブジェクト「mDriveMailer」は、オブジ
ェクトBに対応したデータ領域「Thread」に格納されて
いる識別子「rBoxID」を読み出して、当該識別子「rBox
ID」をデータ領域「DeliveryBoxB」の属性「contID」に
設定する。
【0235】このとき、オブジェクトBに対応したデー
タ領域「Thread」に格納されていた識別子「rBoxID」は
消去され、これによりオブジェクトBは返答権限を失
う。すなわち、オブジェクトBは、メソッド「Delegat
e」を発行することにより返答権限を失い、当該返答権
限はオブジェクトCに委譲される。なお、オブジェクト
Bは、返答権限を失ったので、メソッド「Reply」を発
行することはできない。換言すれば、オブジェクトB
は、メソッド「Reply」の代わりにメソッド「Delegat
e」を発行したこととなる。
タ領域「Thread」に格納されていた識別子「rBoxID」は
消去され、これによりオブジェクトBは返答権限を失
う。すなわち、オブジェクトBは、メソッド「Delegat
e」を発行することにより返答権限を失い、当該返答権
限はオブジェクトCに委譲される。なお、オブジェクト
Bは、返答権限を失ったので、メソッド「Reply」を発
行することはできない。換言すれば、オブジェクトB
は、メソッド「Reply」の代わりにメソッド「Delegat
e」を発行したこととなる。
【0236】また、オブジェクト「mDriveMailer」は、
データ領域「DeliveryBoxB」に、メソッド「Delegate」
によって送られてきたメッセージも格納する。ここで、
データ領域「DeliveryBoxB」にメソッド「Delegate」に
よって送られてきたメッセージを格納するということ
は、具体的には、データ領域「DeliveryBoxB」の属性
「msg」に、メソッド「Delegate」の引数「msg」の値を
設定するとともに、データ領域「DeliveryBoxB」の属性
「sizeOfMsg」に、メソッド「Delegate」の引数「sizeO
fMsg」の値を設定するということである。
データ領域「DeliveryBoxB」に、メソッド「Delegate」
によって送られてきたメッセージも格納する。ここで、
データ領域「DeliveryBoxB」にメソッド「Delegate」に
よって送られてきたメッセージを格納するということ
は、具体的には、データ領域「DeliveryBoxB」の属性
「msg」に、メソッド「Delegate」の引数「msg」の値を
設定するとともに、データ領域「DeliveryBoxB」の属性
「sizeOfMsg」に、メソッド「Delegate」の引数「sizeO
fMsg」の値を設定するということである。
【0237】その後、オブジェクト「mDriveMailer」
は、データ領域「DeliveryBoxB」に格納したデータ、す
なわち、メソッド「Delegate」によって送られてきたメ
ッセージと、データ領域「RBox」を特定するための識別
子「rBoxID」とを、点線矢印ST5−16に示すように
オブジェクトCに配送し、オブジェクトCのメソッドを
起動する。
は、データ領域「DeliveryBoxB」に格納したデータ、す
なわち、メソッド「Delegate」によって送られてきたメ
ッセージと、データ領域「RBox」を特定するための識別
子「rBoxID」とを、点線矢印ST5−16に示すように
オブジェクトCに配送し、オブジェクトCのメソッドを
起動する。
【0238】このとき、オブジェクトCのメソッドに
は、メッセージだけが受け渡され、識別子「rBoxID」
は、オブジェクトCに対応したデータ領域「Thread」に
格納される。換言すれば、オブジェクトCに受け渡され
る識別子「rBoxID」はオペレーティングシステムの管理
下にあり、アプリケーションプログラムの側から見たと
き、オブジェクトCに配送されてきたのはメッセージだ
けである。
は、メッセージだけが受け渡され、識別子「rBoxID」
は、オブジェクトCに対応したデータ領域「Thread」に
格納される。換言すれば、オブジェクトCに受け渡され
る識別子「rBoxID」はオペレーティングシステムの管理
下にあり、アプリケーションプログラムの側から見たと
き、オブジェクトCに配送されてきたのはメッセージだ
けである。
【0239】なお、データ領域「DeliveryBoxB」に格納
されたデータをオブジェクト「mDriveMailer」からオブ
ジェクトCに配送して、オブジェクトCのメソッドを起
動する際、オブジェクトCは、メソッド「Delegate」の
引数「destObjID」によって特定され、オブジェクトC
のメソッドは、メソッド「Delegate」の引数「meth」に
よって特定される。
されたデータをオブジェクト「mDriveMailer」からオブ
ジェクトCに配送して、オブジェクトCのメソッドを起
動する際、オブジェクトCは、メソッド「Delegate」の
引数「destObjID」によって特定され、オブジェクトC
のメソッドは、メソッド「Delegate」の引数「meth」に
よって特定される。
【0240】これらの処理が終了すると、オブジェクト
「mDriveMailer」は、点線矢印ST5−17,ST5−
18に示すように、オブジェクト「mCOOPMailer」を介
して、正常に処理が完了したことを示す値をメソッド
「Delegate」に対する戻り値としてオブジェクトBへ返
した上で、オブジェクトBを引き続き実行可能状態であ
るようにする。これにより、オブジェクトBは、実行可
能状態となり、行うべき処理が残っている場合には、当
該処理を引き続き実行する。
「mDriveMailer」は、点線矢印ST5−17,ST5−
18に示すように、オブジェクト「mCOOPMailer」を介
して、正常に処理が完了したことを示す値をメソッド
「Delegate」に対する戻り値としてオブジェクトBへ返
した上で、オブジェクトBを引き続き実行可能状態であ
るようにする。これにより、オブジェクトBは、実行可
能状態となり、行うべき処理が残っている場合には、当
該処理を引き続き実行する。
【0241】以上の処理によって、アプリケーションプ
ログラムの側から見たときには、実線矢印ST5−19
に示すように返答権限がオブジェクトBからオブジェク
トCへ委譲され、オブジェクトBとオブジェクトCとが
並行動作しているような状態となる。
ログラムの側から見たときには、実線矢印ST5−19
に示すように返答権限がオブジェクトBからオブジェク
トCへ委譲され、オブジェクトBとオブジェクトCとが
並行動作しているような状態となる。
【0242】その後、オブジェクトCは、オブジェクト
Aから要求されていた処理が完了したら、ST5−20
に示すように、メソッド「Kick」を発行する。メソッド
「Kick」が発行されると、点線矢印ST5−21に示す
ように、オブジェクト「mDriveMailer」に処理が遷移
し、ST5−22において、オブジェクト「mDriveMail
er」によってメソッド「Kick」に応じた処理が行われ
る。
Aから要求されていた処理が完了したら、ST5−20
に示すように、メソッド「Kick」を発行する。メソッド
「Kick」が発行されると、点線矢印ST5−21に示す
ように、オブジェクト「mDriveMailer」に処理が遷移
し、ST5−22において、オブジェクト「mDriveMail
er」によってメソッド「Kick」に応じた処理が行われ
る。
【0243】このとき、オブジェクト「mDriveMailer」
は、オブジェクトCに対応したデータ領域「Thread」に
格納されている情報を読み出す。そして、データ領域
「Thread」にデータ領域「Continuation」を特定する識
別子「contID」が格納されている場合には、図6に示し
たようなシナリオに沿って継続メソッドを起動する処理
が進められる。しかしながら、本例では、データ領域
「Thread」に、データ領域「Continuation」を特定する
識別子「contID」ではなく、データ領域「RBox」を特定
する識別子「rBoxID」が格納されている。
は、オブジェクトCに対応したデータ領域「Thread」に
格納されている情報を読み出す。そして、データ領域
「Thread」にデータ領域「Continuation」を特定する識
別子「contID」が格納されている場合には、図6に示し
たようなシナリオに沿って継続メソッドを起動する処理
が進められる。しかしながら、本例では、データ領域
「Thread」に、データ領域「Continuation」を特定する
識別子「contID」ではなく、データ領域「RBox」を特定
する識別子「rBoxID」が格納されている。
【0244】そして、このようにデータ領域「Thread」
にデータ領域「RBox」を特定する識別子「rBoxID」が格
納されている場合には、オブジェクト「mDriveMailer」
によって継続メソッドを起動するのではなく、点線矢印
ST5−23に示すように、オブジェクト「mDriveMail
er」からオブジェクト「mCOOPMailer」に処理が遷移す
る。
にデータ領域「RBox」を特定する識別子「rBoxID」が格
納されている場合には、オブジェクト「mDriveMailer」
によって継続メソッドを起動するのではなく、点線矢印
ST5−23に示すように、オブジェクト「mDriveMail
er」からオブジェクト「mCOOPMailer」に処理が遷移す
る。
【0245】なお、オブジェクト「mDriveMailer」から
オブジェクト「mCOOPMailer」への処理の遷移は、マイ
クロカーネルを介して行われる。
オブジェクト「mCOOPMailer」への処理の遷移は、マイ
クロカーネルを介して行われる。
【0246】具体的には、先ず、オブジェクト「mDrive
Mailer」によって、オブジェクトCに対応したデータ領
域「Thread」に格納されている識別子が、mDriveメタス
ペースで使われるデータ領域「Continuation」を特定す
る識別子「contID」であるか否かが判断される。本例で
は、オブジェクトCに対応したデータ領域「Thread」に
格納されている識別子が、データ領域「Continuation」
を特定する識別子「contID」ではないと判断される。
Mailer」によって、オブジェクトCに対応したデータ領
域「Thread」に格納されている識別子が、mDriveメタス
ペースで使われるデータ領域「Continuation」を特定す
る識別子「contID」であるか否かが判断される。本例で
は、オブジェクトCに対応したデータ領域「Thread」に
格納されている識別子が、データ領域「Continuation」
を特定する識別子「contID」ではないと判断される。
【0247】ここで、各オブジェクトに対応したデータ
領域「Thread」には、メッセージパッシングの相手先オ
ブジェクトが存在しているメタスペースを判別するため
の情報も格納されている。そこで、オブジェクトCに対
応したデータ領域「Thread」に格納されている識別子
が、データ領域「Continuation」を特定する識別子「co
ntID」ではないと判断されたならば、更にオブジェクト
Cのデータ領域「Thread」を調べ、メッセージパッシン
グの相手先オブジェクトが存在しているメタスペースを
判別する。この結果、本例の場合、メッセージパッシン
グの相手先オブジェクトが存在しているメタスペース
が、mCOOPメタスペースであると判別される。
領域「Thread」には、メッセージパッシングの相手先オ
ブジェクトが存在しているメタスペースを判別するため
の情報も格納されている。そこで、オブジェクトCに対
応したデータ領域「Thread」に格納されている識別子
が、データ領域「Continuation」を特定する識別子「co
ntID」ではないと判断されたならば、更にオブジェクト
Cのデータ領域「Thread」を調べ、メッセージパッシン
グの相手先オブジェクトが存在しているメタスペースを
判別する。この結果、本例の場合、メッセージパッシン
グの相手先オブジェクトが存在しているメタスペース
が、mCOOPメタスペースであると判別される。
【0248】そこで、オブジェクト「mDriveMailer」
は、マイクロカーネルの機能を使って、mCOOPメタスペ
ース上で動作するオブジェクトについてのメッセージパ
ッシングを担うメタオブジェクトであるオブジェクト
「mCOOPMailer」に処理を依頼する。これにより、オブ
ジェクト「mDriveMailer」からオブジェクト「mCOOPMai
ler」に処理が遷移することとなる。
は、マイクロカーネルの機能を使って、mCOOPメタスペ
ース上で動作するオブジェクトについてのメッセージパ
ッシングを担うメタオブジェクトであるオブジェクト
「mCOOPMailer」に処理を依頼する。これにより、オブ
ジェクト「mDriveMailer」からオブジェクト「mCOOPMai
ler」に処理が遷移することとなる。
【0249】以上のようにして、オブジェクト「mDrive
Mailer」からオブジェクト「mCOOPMailer」へ処理が遷
移したら、ST5−24において、オブジェクト「mCOO
PMailer」によってメソッド「Kick」に応じた処理が行
われる。
Mailer」からオブジェクト「mCOOPMailer」へ処理が遷
移したら、ST5−24において、オブジェクト「mCOO
PMailer」によってメソッド「Kick」に応じた処理が行
われる。
【0250】具体的には、オブジェクト「mCOOPMaile
r」は、オブジェクトAが既にメソッド「Receive」を発
行しているならば、オブジェクトCによる処理の結果を
オブジェクトAに受け渡し、オブジェクトAが未だメソ
ッド「Receive」を発行していないならば、オブジェク
トCによる処理の結果をデータ領域「RBox」に格納す
る。
r」は、オブジェクトAが既にメソッド「Receive」を発
行しているならば、オブジェクトCによる処理の結果を
オブジェクトAに受け渡し、オブジェクトAが未だメソ
ッド「Receive」を発行していないならば、オブジェク
トCによる処理の結果をデータ領域「RBox」に格納す
る。
【0251】本例では、オブジェクトCがメソッド「Ki
ck」を発行した段階で、既にオブジェクトAがメソッド
「Receive」を発行している。したがって、オブジェク
ト「mCOOPMailer」は、点線矢印ST5−25に示すよ
うに、オブジェクトCによる処理の結果を、データ領域
「RBox」に格納することなく、オブジェクトAに直ぐに
受け渡す。そして、オブジェクト「mCOOPMailer」は、
オブジェクトCによる処理の結果のオブジェクトAへの
受け渡しの処理が正常に完了したら、点線矢印ST5−
26,ST5−27に示すように、オブジェクト「mDri
veMailer」を介して、正常に処理が完了したことを示す
値をメソッド「Kick」に対する戻り値としてオブジェク
トCへ返した上で、オブジェクトCを引き続き実行可能
状態であるようにする。これにより、オブジェクトC
は、実行可能状態となり、行うべき処理が残っている場
合には、当該処理を引き続き実行する。
ck」を発行した段階で、既にオブジェクトAがメソッド
「Receive」を発行している。したがって、オブジェク
ト「mCOOPMailer」は、点線矢印ST5−25に示すよ
うに、オブジェクトCによる処理の結果を、データ領域
「RBox」に格納することなく、オブジェクトAに直ぐに
受け渡す。そして、オブジェクト「mCOOPMailer」は、
オブジェクトCによる処理の結果のオブジェクトAへの
受け渡しの処理が正常に完了したら、点線矢印ST5−
26,ST5−27に示すように、オブジェクト「mDri
veMailer」を介して、正常に処理が完了したことを示す
値をメソッド「Kick」に対する戻り値としてオブジェク
トCへ返した上で、オブジェクトCを引き続き実行可能
状態であるようにする。これにより、オブジェクトC
は、実行可能状態となり、行うべき処理が残っている場
合には、当該処理を引き続き実行する。
【0252】以上の処理によって、アプリケーションプ
ログラムの側から見たときには、実線矢印ST5−28
に示すようにオブジェクトCによる処理の結果がオブジ
ェクトAへ受け渡され、オブジェクトAとオブジェクト
Cとが並行動作しているような状態となる。
ログラムの側から見たときには、実線矢印ST5−28
に示すようにオブジェクトCによる処理の結果がオブジ
ェクトAへ受け渡され、オブジェクトAとオブジェクト
Cとが並行動作しているような状態となる。
【0253】なお、図7の例では、メソッド「Kick」が
発行される前にメソッド「Receive」が発行された場合
を示したが、メソッド「Kick」が発行された後にメソッ
ド「Receive」が発行される場合もあり得る。メソッド
「Kick」が発行された後にメソッド「Receive」が発行
された場合には、オブジェクトAは待ち状態となること
なく、オブジェクトCによる処理の結果を直ぐに受け取
ることとなる。
発行される前にメソッド「Receive」が発行された場合
を示したが、メソッド「Kick」が発行された後にメソッ
ド「Receive」が発行される場合もあり得る。メソッド
「Kick」が発行された後にメソッド「Receive」が発行
された場合には、オブジェクトAは待ち状態となること
なく、オブジェクトCによる処理の結果を直ぐに受け取
ることとなる。
【0254】すなわち、オブジェクトCがメソッド「Ki
ck」を発行した後からオブジェクトAがメソッド「Rece
ive」を発行した場合、オブジェクト「mCOOPMailer」
は、オブジェクトCがメソッド「Kick」を発行した段階
では、オブジェクトCによる処理の結果をデータ領域
「RBox」に格納しておき、オブジェクトAがメソッド
「Receive」を発行した段階で直ぐに、オブジェクトC
による処理の結果をデータ領域「RBox」から読み出して
オブジェクトAに受け渡す。
ck」を発行した後からオブジェクトAがメソッド「Rece
ive」を発行した場合、オブジェクト「mCOOPMailer」
は、オブジェクトCがメソッド「Kick」を発行した段階
では、オブジェクトCによる処理の結果をデータ領域
「RBox」に格納しておき、オブジェクトAがメソッド
「Receive」を発行した段階で直ぐに、オブジェクトC
による処理の結果をデータ領域「RBox」から読み出して
オブジェクトAに受け渡す。
【0255】なお、オブジェクトCによる処理の結果を
データ領域「RBox」に格納するということは、具体的に
は、データ領域「RBox」の属性「ready」に、オブジェ
クトCによる処理に結果が返ってきていることを示す値
を設定し、且つ、データ領域「RBox」の属性「resultMs
g」に、オブジェクトCによる処理の結果としてオブジ
ェクトAに受け渡すメッセージが格納された領域へのポ
インタ、すなわちメソッド「Kick」の引数「msg」で示
されるポインタを設定し、且つ、データ領域「RBox」の
属性「sizeOfResultMsg」に、オブジェクトCによる処
理の結果としてオブジェクトAに受け渡すメッセージの
サイズを示す値、すなわちメソッド「Kick」の引数「si
zeOfMsg」が示す値を設定するということである。
データ領域「RBox」に格納するということは、具体的に
は、データ領域「RBox」の属性「ready」に、オブジェ
クトCによる処理に結果が返ってきていることを示す値
を設定し、且つ、データ領域「RBox」の属性「resultMs
g」に、オブジェクトCによる処理の結果としてオブジ
ェクトAに受け渡すメッセージが格納された領域へのポ
インタ、すなわちメソッド「Kick」の引数「msg」で示
されるポインタを設定し、且つ、データ領域「RBox」の
属性「sizeOfResultMsg」に、オブジェクトCによる処
理の結果としてオブジェクトAに受け渡すメッセージの
サイズを示す値、すなわちメソッド「Kick」の引数「si
zeOfMsg」が示す値を設定するということである。
【0256】そして、オブジェクトCによる処理の結果
をデータ領域「RBox」から読み出してオブジェクトAに
受け渡す際、オブジェクト「mCOOPMailer」は、先ず、
メソッド「Receive」の引数「rBoxID」によって特定さ
れるデータ領域「RBox」から、属性「resultMsg」及び
属性「sizeOfResultMsg」を読み出し、属性「resultMs
g」が指し示す領域から属性「sizeOfResultMsg」が示す
サイズ分のデータを読み出す。このデータがオブジェク
トCからオブジェクトAに受け渡すメッセージとなる。
そして、オブジェクト「mCOOPMailer」は、このように
読み出したデータを、メソッド「Receive」の引数「ms
g」が指し示す領域に格納する。ここで、メソッド「Rec
eive」の引数「msg」が指し示す領域のサイズは、メソ
ッド「Receive」の引数「sizeOfMsg」によって設定され
ている。
をデータ領域「RBox」から読み出してオブジェクトAに
受け渡す際、オブジェクト「mCOOPMailer」は、先ず、
メソッド「Receive」の引数「rBoxID」によって特定さ
れるデータ領域「RBox」から、属性「resultMsg」及び
属性「sizeOfResultMsg」を読み出し、属性「resultMs
g」が指し示す領域から属性「sizeOfResultMsg」が示す
サイズ分のデータを読み出す。このデータがオブジェク
トCからオブジェクトAに受け渡すメッセージとなる。
そして、オブジェクト「mCOOPMailer」は、このように
読み出したデータを、メソッド「Receive」の引数「ms
g」が指し示す領域に格納する。ここで、メソッド「Rec
eive」の引数「msg」が指し示す領域のサイズは、メソ
ッド「Receive」の引数「sizeOfMsg」によって設定され
ている。
【0257】以上の処理により、メソッド「Kick」が発
行された後にメソッド「Receive」が発行された場合
も、メソッド「Kick」が発行される前にメソッド「Rece
ive」が発行された場合と同様に、オブジェクトCによ
る処理の結果がオブジェクトAへ受け渡され、オブジェ
クトAとオブジェクトCとが並行動作しているような状
態となる。
行された後にメソッド「Receive」が発行された場合
も、メソッド「Kick」が発行される前にメソッド「Rece
ive」が発行された場合と同様に、オブジェクトCによ
る処理の結果がオブジェクトAへ受け渡され、オブジェ
クトAとオブジェクトCとが並行動作しているような状
態となる。
【0258】なお、メソッド「Delegate」によって返答
権限が委譲されたオブジェクト(上記の例ではオブジェ
クトC)が、例外事象の発生などにより動作不能状態と
なって、結果を求めることができなくなった場合には、
図4に示したシナリオとほぼ同様なシナリオにより、例
外処理が行われる。
権限が委譲されたオブジェクト(上記の例ではオブジェ
クトC)が、例外事象の発生などにより動作不能状態と
なって、結果を求めることができなくなった場合には、
図4に示したシナリオとほぼ同様なシナリオにより、例
外処理が行われる。
【0259】すなわち、図7に示した例において、メソ
ッド「Delegate」によって返答権限が委譲されたオブジ
ェクトCの実行中に、当該オブジェクトCが例外事象の
発生などにより動作不能状態となって、結果を求めるこ
とができなくなった場合には、オブジェクト「mDriveFa
ultHandler」に処理が遷移し、オブジェクト「mDriveFa
ultHandler」によって所定の例外処理が行われ、オブジ
ェクト「mDriveFaultHandler」からオブジェクト「mCOO
PMailer」に、オブジェクト「mDriveMailer」を介し
て、オブジェクトCが例外事象の発生によって動作不能
になったことが通知される。
ッド「Delegate」によって返答権限が委譲されたオブジ
ェクトCの実行中に、当該オブジェクトCが例外事象の
発生などにより動作不能状態となって、結果を求めるこ
とができなくなった場合には、オブジェクト「mDriveFa
ultHandler」に処理が遷移し、オブジェクト「mDriveFa
ultHandler」によって所定の例外処理が行われ、オブジ
ェクト「mDriveFaultHandler」からオブジェクト「mCOO
PMailer」に、オブジェクト「mDriveMailer」を介し
て、オブジェクトCが例外事象の発生によって動作不能
になったことが通知される。
【0260】このとき、オブジェクトAがメソッド「Re
ceive」を既に発行して待ち状態となっていれば、オブ
ジェクト「mCOOPMailer」は、オブジェクトAに対し
て、オブジェクトCが例外事象の発生によって動作不能
となったことを示すエラーコードを、メソッド「Receiv
e」に対する戻り値としてオブジェクトAへ返した上
で、オブジェクトAを引き続き実行可能状態であるよう
にする。これにより、オブジェクトAは、実行可能状態
となり、行うべき処理が残っている場合には、当該処理
を引き続き実行する。
ceive」を既に発行して待ち状態となっていれば、オブ
ジェクト「mCOOPMailer」は、オブジェクトAに対し
て、オブジェクトCが例外事象の発生によって動作不能
となったことを示すエラーコードを、メソッド「Receiv
e」に対する戻り値としてオブジェクトAへ返した上
で、オブジェクトAを引き続き実行可能状態であるよう
にする。これにより、オブジェクトAは、実行可能状態
となり、行うべき処理が残っている場合には、当該処理
を引き続き実行する。
【0261】また、オブジェクトAがメソッド「Receiv
e」を発行するよりも先にオブジェクトCに例外事象が
発生した場合には、オブジェクト「mCOOPMailer」は、
データ領域「RBox」の属性「status」に、例外事象の発
生によりオブジェクトCが動作不能状態となったことを
示すエラーコードを設定する。そして、オブジェクトA
がメソッド「Receive」を発行した段階で、オブジェク
ト「mCOOPMailer」は、データ領域「RBox」の属性「sta
tus」に設定されたエラーコードを読み出して、当該エ
ラーコードをメソッド「Receive」に対する戻り値とし
てオブジェクトAへ返した上で、オブジェクトAを引き
続き実行可能状態であるようにする。これにより、オブ
ジェクトAは、実行可能状態となり、行うべき処理が残
っている場合には、当該処理を引き続き実行する。
e」を発行するよりも先にオブジェクトCに例外事象が
発生した場合には、オブジェクト「mCOOPMailer」は、
データ領域「RBox」の属性「status」に、例外事象の発
生によりオブジェクトCが動作不能状態となったことを
示すエラーコードを設定する。そして、オブジェクトA
がメソッド「Receive」を発行した段階で、オブジェク
ト「mCOOPMailer」は、データ領域「RBox」の属性「sta
tus」に設定されたエラーコードを読み出して、当該エ
ラーコードをメソッド「Receive」に対する戻り値とし
てオブジェクトAへ返した上で、オブジェクトAを引き
続き実行可能状態であるようにする。これにより、オブ
ジェクトAは、実行可能状態となり、行うべき処理が残
っている場合には、当該処理を引き続き実行する。
【0262】以上のような処理を行うことにより、メソ
ッド「Delegate」によって返答権限が委譲されたオブジ
ェクトCが、何らかの原因によりオブジェクトAに結果
メッセージを返せなくなってしまっても、オブジェクト
Aを待ち状態から実行可能状態に復帰させることが可能
となり、オブジェクトAが待ち状態になってしまってシ
ステムが停止してしまうような状況を回避することがで
きる。
ッド「Delegate」によって返答権限が委譲されたオブジ
ェクトCが、何らかの原因によりオブジェクトAに結果
メッセージを返せなくなってしまっても、オブジェクト
Aを待ち状態から実行可能状態に復帰させることが可能
となり、オブジェクトAが待ち状態になってしまってシ
ステムが停止してしまうような状況を回避することがで
きる。
【0263】2−6 その他の例 上記実施の形態では、サーバ側オブジェクトによる処理
の要求の受け口と出口が異なるような構成におけるメッ
セージパッシングを実現するために、サーバ側オブジェ
クト内において返答権限の委譲を行うメソッド「Delega
te」を用いた。しかし、メソッド「Delegate」のように
返答権限の委譲を行うメソッドを用いなくても、サーバ
側オブジェクトによる処理の要求の受け口と出口が異な
るような構成におけるメッセージパッシングを実現する
ことは可能である。
の要求の受け口と出口が異なるような構成におけるメッ
セージパッシングを実現するために、サーバ側オブジェ
クト内において返答権限の委譲を行うメソッド「Delega
te」を用いた。しかし、メソッド「Delegate」のように
返答権限の委譲を行うメソッドを用いなくても、サーバ
側オブジェクトによる処理の要求の受け口と出口が異な
るような構成におけるメッセージパッシングを実現する
ことは可能である。
【0264】以下、メソッド「Delegate」を用いること
なく、サーバ側オブジェクトによる処理の要求の受け口
と出口が異なるような構成におけるメッセージパッシン
グを実現する方法の一例として、どのフューチャを経由
してクライアント側オブジェクトに結果を配送すればよ
いかを識別するための識別子を設けてメッセージパッシ
ングを行う方法について説明する。
なく、サーバ側オブジェクトによる処理の要求の受け口
と出口が異なるような構成におけるメッセージパッシン
グを実現する方法の一例として、どのフューチャを経由
してクライアント側オブジェクトに結果を配送すればよ
いかを識別するための識別子を設けてメッセージパッシ
ングを行う方法について説明する。
【0265】2−6−1 mCOOPメタスペースのAPI 本例では、mCOOPメタスペース上で動作するオブジェク
トの記述に使用されるAPIとして、下記のメソッド
「Send」及びメソッド「GetReplyID」を導入するととも
に、上述したメソッド「Reply」に代えて下記のメソッ
ド「ReplyWithReplyID」を導入する。なお、ここでは、
APIをOMG IDLでの記述方法に準じて示してい
る。
トの記述に使用されるAPIとして、下記のメソッド
「Send」及びメソッド「GetReplyID」を導入するととも
に、上述したメソッド「Reply」に代えて下記のメソッ
ド「ReplyWithReplyID」を導入する。なお、ここでは、
APIをOMG IDLでの記述方法に準じて示してい
る。
【0266】sError Send(in OID destObjID,in Select
or meth,in any msg,in size_t sizeOfMsg) sError GetReplyID(out ReplyID replyID) sError ReplyWithReplyID(in ReplyID replyID,in any
resultMsg,in size_tsizeOfResultMsg) 上記メソッド「Send」,「GetReplyID」及び「ReplyWit
hReplyID」を導入することにより、メソッド「Delegat
e」を使用することなく、サーバ側オブジェクトによる
処理の要求の受け口と出口が異なるような構成における
メッセージパッシングを実現することが可能となる。
or meth,in any msg,in size_t sizeOfMsg) sError GetReplyID(out ReplyID replyID) sError ReplyWithReplyID(in ReplyID replyID,in any
resultMsg,in size_tsizeOfResultMsg) 上記メソッド「Send」,「GetReplyID」及び「ReplyWit
hReplyID」を導入することにより、メソッド「Delegat
e」を使用することなく、サーバ側オブジェクトによる
処理の要求の受け口と出口が異なるような構成における
メッセージパッシングを実現することが可能となる。
【0267】以下、これらのメソッドについて詳細に説
明する。
明する。
【0268】2−6−1−1 Send() sError Send(in OID destObjID,in Selector meth,in a
ny msg,in size_t sizeOfMsg) メソッド「Send」は、クライアント側オブジェクトから
サーバ側オブジェクトへメッセージを送る処理を行うメ
ッセージ送信用メソッドである。このメソッド「Send」
は、クライアント側オブジェクトがメッセージをサーバ
側オブジェクトに送信した後、サーバ側オブジェクトで
の処理の結果をクライアント側オブジェクトが必要とし
ない場合に用いられる。
ny msg,in size_t sizeOfMsg) メソッド「Send」は、クライアント側オブジェクトから
サーバ側オブジェクトへメッセージを送る処理を行うメ
ッセージ送信用メソッドである。このメソッド「Send」
は、クライアント側オブジェクトがメッセージをサーバ
側オブジェクトに送信した後、サーバ側オブジェクトで
の処理の結果をクライアント側オブジェクトが必要とし
ない場合に用いられる。
【0269】引数「destObjID」は、オブジェクトを特
定するためのデータ型である「OID」型の引数であり、
この引数「destObjID」には、サーバ側オブジェクトを
特定する値を設定する。
定するためのデータ型である「OID」型の引数であり、
この引数「destObjID」には、サーバ側オブジェクトを
特定する値を設定する。
【0270】引数「meth」は、メソッドを特定するため
のデータ型である「Selector」型の引数であり、この引
数「meth」には、要求する処理が記述されたサーバ側オ
ブジェクトのメソッドを特定する値を設定する。
のデータ型である「Selector」型の引数であり、この引
数「meth」には、要求する処理が記述されたサーバ側オ
ブジェクトのメソッドを特定する値を設定する。
【0271】引数「msg」は、任意のデータ型である「a
ny」型の引数であり、引数「msg」には、サーバ側オブ
ジェクトに対して受け渡すメッセージが格納されている
領域へのポインタを設定する。
ny」型の引数であり、引数「msg」には、サーバ側オブ
ジェクトに対して受け渡すメッセージが格納されている
領域へのポインタを設定する。
【0272】引数「sizeOfMsg」は、データのサイズを
特定するためのデータ型である「size_t」型の引数であ
り、この引数「sizeOfMsg」には、サーバ側オブジェク
トに対して受け渡すメッセージのサイズを示す値を設定
する。
特定するためのデータ型である「size_t」型の引数であ
り、この引数「sizeOfMsg」には、サーバ側オブジェク
トに対して受け渡すメッセージのサイズを示す値を設定
する。
【0273】このメソッド「Send」は、エラーコードを
示すデータ型である「sError」型の値を戻り値として得
る。すなわち、このメソッド「Send」が発行されたとき
に、当該メソッド「Send」の処理が正常に完了しなかっ
た場合には、その原因を示すエラコードが戻り値として
返ってくる。なお、処理が正常に完了した場合には、正
常に処理が完了したことを示す値が戻り値として返って
くる。
示すデータ型である「sError」型の値を戻り値として得
る。すなわち、このメソッド「Send」が発行されたとき
に、当該メソッド「Send」の処理が正常に完了しなかっ
た場合には、その原因を示すエラコードが戻り値として
返ってくる。なお、処理が正常に完了した場合には、正
常に処理が完了したことを示す値が戻り値として返って
くる。
【0274】2−6−1−2 GetReplyID() sError GetReplyID(out ReplyID replyID) 上述したように、メソッド「Reply」が発行された場合
は、フューチャ(すなわちデータ領域「RBox」)を経由
してクライアント側オブジェクトに結果が配送される。
メソッド「GetReplyID」は、このようなメソッド「Repl
y」の代わりに使用されるものであり、サーバ側オブジ
ェクトを構成するオブジェクトが、識別子「replyID」
を得るために使用される。ここで、識別子「replyID」
は、あとで別のオブジェクトが結果を配送するときに、
どのフューチャを経由してクライアント側オブジェクト
に結果を配送すればよいかを識別するための識別子であ
る。
は、フューチャ(すなわちデータ領域「RBox」)を経由
してクライアント側オブジェクトに結果が配送される。
メソッド「GetReplyID」は、このようなメソッド「Repl
y」の代わりに使用されるものであり、サーバ側オブジ
ェクトを構成するオブジェクトが、識別子「replyID」
を得るために使用される。ここで、識別子「replyID」
は、あとで別のオブジェクトが結果を配送するときに、
どのフューチャを経由してクライアント側オブジェクト
に結果を配送すればよいかを識別するための識別子であ
る。
【0275】すなわち、このメソッド「GetReplyID」
は、結果の配送に使用するフューチャを特定するための
データ型である「ReplyID」型の識別子「replyID」を戻
り値として得る。この識別子「replyID」は、どのフュ
ーチャを経由してクライアント側オブジェクトに結果を
配送すればよいかを識別するための識別子であり、換言
すれば、メソッド「SendWithRBox」が発行されたときに
オブジェクト「mCOOPMailer」によって確保されたフュ
ーチャを特定する識別子である。
は、結果の配送に使用するフューチャを特定するための
データ型である「ReplyID」型の識別子「replyID」を戻
り値として得る。この識別子「replyID」は、どのフュ
ーチャを経由してクライアント側オブジェクトに結果を
配送すればよいかを識別するための識別子であり、換言
すれば、メソッド「SendWithRBox」が発行されたときに
オブジェクト「mCOOPMailer」によって確保されたフュ
ーチャを特定する識別子である。
【0276】なお、この識別子「replyID」は、上述し
た識別子「rBoxID」と実質的に同じものであり、識別子
「rBoxID」と同じものとしてしまってもよい。しかしな
がら、識別子「replyID」は、識別子「rBoxID」とは使
用目的が異なるので、本例では、識別子「replyID」の
ことを、あえて識別子「rBoxID」とは異なるデータ型の
識別子として、それらの使用目的の違いを明確にしてい
る。
た識別子「rBoxID」と実質的に同じものであり、識別子
「rBoxID」と同じものとしてしまってもよい。しかしな
がら、識別子「replyID」は、識別子「rBoxID」とは使
用目的が異なるので、本例では、識別子「replyID」の
ことを、あえて識別子「rBoxID」とは異なるデータ型の
識別子として、それらの使用目的の違いを明確にしてい
る。
【0277】このメソッド「GetReplyID」は、エラーコ
ードを示すデータ型である「sError」型の値を戻
り値として得る。すなわち、このメソッド「GetRe
plyID」が発行されたときに、当該メソッド「GetR
eplyID」の処理が正常に完了しなかった場合には、その
原因を示すエラコードが戻り値として返ってくる。な
お、処理が正常に完了した場合には、正常に処理が完了
したことを示す値が戻り値として返ってくる。
ードを示すデータ型である「sError」型の値を戻
り値として得る。すなわち、このメソッド「GetRe
plyID」が発行されたときに、当該メソッド「GetR
eplyID」の処理が正常に完了しなかった場合には、その
原因を示すエラコードが戻り値として返ってくる。な
お、処理が正常に完了した場合には、正常に処理が完了
したことを示す値が戻り値として返ってくる。
【0278】2−6−1−3 ReplyWithReplyID() sError ReplyWithReplyID(in ReplyID replyID,in any
resultMsg,in size_tsizeOfResultMsg) メソッド「ReplyWithReplyID」は、クライアント側オブ
ジェクトによってメソッド「SendWithRBox」が発行され
た後に、サーバ側オブジェクトからクライアント側オブ
ジェクトへ処理の結果を返す場合に用いられる。このメ
ソッド「ReplyWithReplyID」は、サーバ側オブジェクト
を構成するオブジェクトによって、メソッド「Reply」
を発行して結果を返す代わりに用いられる。
resultMsg,in size_tsizeOfResultMsg) メソッド「ReplyWithReplyID」は、クライアント側オブ
ジェクトによってメソッド「SendWithRBox」が発行され
た後に、サーバ側オブジェクトからクライアント側オブ
ジェクトへ処理の結果を返す場合に用いられる。このメ
ソッド「ReplyWithReplyID」は、サーバ側オブジェクト
を構成するオブジェクトによって、メソッド「Reply」
を発行して結果を返す代わりに用いられる。
【0279】上述したように、メソッド「Reply」が発
行された場合は、フューチャ(すなわちデータ領域「RB
ox」)を経由してクライアント側オブジェクトに結果が
配送される。メソッド「ReplyWithReplyID」は、このよ
うなメソッド「Reply」の代わりに使用されるものであ
り、サーバ側オブジェクトを構成するオブジェクトから
クライアント側オブジェクトに、識別子「replyID」に
よって特定されるフューチャを経由して結果を配送する
ために使用される。
行された場合は、フューチャ(すなわちデータ領域「RB
ox」)を経由してクライアント側オブジェクトに結果が
配送される。メソッド「ReplyWithReplyID」は、このよ
うなメソッド「Reply」の代わりに使用されるものであ
り、サーバ側オブジェクトを構成するオブジェクトから
クライアント側オブジェクトに、識別子「replyID」に
よって特定されるフューチャを経由して結果を配送する
ために使用される。
【0280】引数「replyID」は、結果の配送に使用す
るフューチャを特定するためのデータ型である「ReplyI
D」型の引数であり、この引数「replyID」には、メソッ
ド「SendWithRBox」が発行されたときにオブジェクト
「mCOOPMailer」によって確保されたフューチャを特定
する識別子を設定する。換言すれば、この引数「replyI
D」には、メソッド「GetReplyID」を発行することによ
り得られた識別子「replyID」の値を設定する。
るフューチャを特定するためのデータ型である「ReplyI
D」型の引数であり、この引数「replyID」には、メソッ
ド「SendWithRBox」が発行されたときにオブジェクト
「mCOOPMailer」によって確保されたフューチャを特定
する識別子を設定する。換言すれば、この引数「replyI
D」には、メソッド「GetReplyID」を発行することによ
り得られた識別子「replyID」の値を設定する。
【0281】引数「resultMsg」は、任意のデータ型で
ある「any」型の引数であり、この引数「resultMsg」に
は、クライアント側オブジェクトに受け渡すメッセージ
が格納された領域へのポインタを設定する。
ある「any」型の引数であり、この引数「resultMsg」に
は、クライアント側オブジェクトに受け渡すメッセージ
が格納された領域へのポインタを設定する。
【0282】引数「sizeOfResultMsg」は、データのサ
イズを特定するためのデータ型である「size_t」型の引
数であり、この引数「sizeOfResultMsg」には、クライ
アント側オブジェクトに受け渡すメッセージのサイズを
示す値を設定する。
イズを特定するためのデータ型である「size_t」型の引
数であり、この引数「sizeOfResultMsg」には、クライ
アント側オブジェクトに受け渡すメッセージのサイズを
示す値を設定する。
【0283】このメソッド「ReplyWithReplyID」は、エ
ラーコードを示すデータ型である「sError」型の値を戻
り値として得る。すなわち、このメソッド「ReplyWithR
eplyID」が発行されたときに、当該メソッド「ReplyWit
hReplyID」の処理が正常に完了しなかった場合には、そ
の原因を示すエラコードが戻り値として返ってくる。な
お、処理が正常に完了した場合には、正常に処理が完了
したことを示す値が戻り値として返ってくる。
ラーコードを示すデータ型である「sError」型の値を戻
り値として得る。すなわち、このメソッド「ReplyWithR
eplyID」が発行されたときに、当該メソッド「ReplyWit
hReplyID」の処理が正常に完了しなかった場合には、そ
の原因を示すエラコードが戻り値として返ってくる。な
お、処理が正常に完了した場合には、正常に処理が完了
したことを示す値が戻り値として返ってくる。
【0284】このメソッド「ReplyWithReplyID」は、上
述したメソッド「Reply」に比べて、「ReplyID」型の引
数「replyID」が多くなっている。そして、この引数「r
eplyID」を用いることで、後述するように、オブジェク
ト「mCOOPMailer」は、クライアント側オブジェクトに
結果を返すのに使用するフューチャを特定すること可能
となり、その結果、サーバ側オブジェクトは、最初にク
ライアント側オブジェクトからメッセージを受け取った
オブジェクト以外のオブジェクトから、クライアント側
オブジェクトに結果を返すことが可能となる。
述したメソッド「Reply」に比べて、「ReplyID」型の引
数「replyID」が多くなっている。そして、この引数「r
eplyID」を用いることで、後述するように、オブジェク
ト「mCOOPMailer」は、クライアント側オブジェクトに
結果を返すのに使用するフューチャを特定すること可能
となり、その結果、サーバ側オブジェクトは、最初にク
ライアント側オブジェクトからメッセージを受け取った
オブジェクト以外のオブジェクトから、クライアント側
オブジェクトに結果を返すことが可能となる。
【0285】2−6−2 メッセージパッシング 以下、以上のようなメソッド「Send」,「GetReplyID」
及び「ReplyWithReplyID」を使用して行われる、サーバ
側オブジェクトによる処理の要求の受け口と出口が異な
るような構成におけるメッセージパッシングについて、
具体的なシナリオを例に挙げ、図8を参照しながら詳細
に説明する。
及び「ReplyWithReplyID」を使用して行われる、サーバ
側オブジェクトによる処理の要求の受け口と出口が異な
るような構成におけるメッセージパッシングについて、
具体的なシナリオを例に挙げ、図8を参照しながら詳細
に説明する。
【0286】なお、以下の説明で参照する図8は、図3
乃至図7と同様に、メッセージパッシング時の処理の遷
移やメッセージのやり取り等を示した図であり、図中の
点線矢印は、オペレーティングシステム内での処理の遷
移やメッセージのやり取りを示しており、図中の実線矢
印は、アプリケーションプログラムの側から見たときの
処理の遷移やメッセージのやり取りを示している。
乃至図7と同様に、メッセージパッシング時の処理の遷
移やメッセージのやり取り等を示した図であり、図中の
点線矢印は、オペレーティングシステム内での処理の遷
移やメッセージのやり取りを示しており、図中の実線矢
印は、アプリケーションプログラムの側から見たときの
処理の遷移やメッセージのやり取りを示している。
【0287】図8は、mCOOPメタスペースでのメッセー
ジパッシングのシナリオとして、mCOOPメタスペース上
でアプリケーションプログラムとして動作するオブジェ
クトA、オブジェクトB及びオブジェクトCの間でのメ
ッセージパッシングであって、オブジェクトBがオブジ
ェクトAからメッセージを受け取り、オブジェクトCが
オブジェクトAへ処理の結果を返す場合のシナリオを示
している。すなわち、本例では、オブジェクトAがクラ
イアント側オブジェクトであり、オブジェクトB及びオ
ブジェクトCがサーバ側オブジェクトである。
ジパッシングのシナリオとして、mCOOPメタスペース上
でアプリケーションプログラムとして動作するオブジェ
クトA、オブジェクトB及びオブジェクトCの間でのメ
ッセージパッシングであって、オブジェクトBがオブジ
ェクトAからメッセージを受け取り、オブジェクトCが
オブジェクトAへ処理の結果を返す場合のシナリオを示
している。すなわち、本例では、オブジェクトAがクラ
イアント側オブジェクトであり、オブジェクトB及びオ
ブジェクトCがサーバ側オブジェクトである。
【0288】ST6−1に示すように、オブジェクトA
がメソッド「SendWithRBox」を発行すると、点線矢印S
T6−2に示すように、オブジェクト「mCOOPMailer」
に処理が遷移し、ST6−3において、オブジェクト
「mCOOPMailer」によってメソッド「SendWithRBox」に
応じた処理が行われる。
がメソッド「SendWithRBox」を発行すると、点線矢印S
T6−2に示すように、オブジェクト「mCOOPMailer」
に処理が遷移し、ST6−3において、オブジェクト
「mCOOPMailer」によってメソッド「SendWithRBox」に
応じた処理が行われる。
【0289】ここで、オブジェクト「mCOOPMailer」
は、先ず、サーバ側オブジェクトによる処理の結果が格
納されるデータ領域「RBox」を確保して、当該データ領
域「RBox」の属性「creator」に、オブジェクトAに対
応したデータ領域「Thread」を特定する識別子を設定す
る。
は、先ず、サーバ側オブジェクトによる処理の結果が格
納されるデータ領域「RBox」を確保して、当該データ領
域「RBox」の属性「creator」に、オブジェクトAに対
応したデータ領域「Thread」を特定する識別子を設定す
る。
【0290】次に、オブジェクト「mCOOPMailer」は、
データ領域「DeliveryBoxA」を確保して、当該データ領
域「DeliveryBoxA」に、データ領域「RBox」を特定する
ための識別子「rBoxID」と、メソッド「SendWithRBox」
によって送られてきたメッセージとを格納する。
データ領域「DeliveryBoxA」を確保して、当該データ領
域「DeliveryBoxA」に、データ領域「RBox」を特定する
ための識別子「rBoxID」と、メソッド「SendWithRBox」
によって送られてきたメッセージとを格納する。
【0291】ここで、データ領域「DeliveryBoxA」にデ
ータ領域「RBox」を特定するための識別子「rBoxID」を
格納するということは、具体的には、データ領域「Deli
veryBoxA」の属性「rBoxID」に、データ領域「RBox」を
特定するための識別子「rBoxID」の値を設定するという
ことである。
ータ領域「RBox」を特定するための識別子「rBoxID」を
格納するということは、具体的には、データ領域「Deli
veryBoxA」の属性「rBoxID」に、データ領域「RBox」を
特定するための識別子「rBoxID」の値を設定するという
ことである。
【0292】また、データ領域「DeliveryBoxA」にメソ
ッド「SendWithRBox」によって送られてきたメッセージ
を格納するということは、具体的には、データ領域「De
liveryBoxA」の属性「msg」に、メソッド「SendWithRBo
x」の引数「msg」の値を設定するとともに、データ領域
「DeliveryBoxA」の属性「sizeOfMsg」に、メソッド「S
endWithRBox」の引数「sizeOfMsg」の値を設定するとい
うことである。
ッド「SendWithRBox」によって送られてきたメッセージ
を格納するということは、具体的には、データ領域「De
liveryBoxA」の属性「msg」に、メソッド「SendWithRBo
x」の引数「msg」の値を設定するとともに、データ領域
「DeliveryBoxA」の属性「sizeOfMsg」に、メソッド「S
endWithRBox」の引数「sizeOfMsg」の値を設定するとい
うことである。
【0293】その後、オブジェクト「mCOOPMailer」
は、データ領域「DeliveryBoxA」に格納したデータ、す
なわち、メソッド「SendWithRBox」によって送られてき
たメッセージと、確保したデータ領域「RBox」を特定す
るための識別子「rBoxID」とを、点線矢印ST6−4に
示すようにオブジェクトBに配送し、オブジェクトBの
メソッドを起動する。
は、データ領域「DeliveryBoxA」に格納したデータ、す
なわち、メソッド「SendWithRBox」によって送られてき
たメッセージと、確保したデータ領域「RBox」を特定す
るための識別子「rBoxID」とを、点線矢印ST6−4に
示すようにオブジェクトBに配送し、オブジェクトBの
メソッドを起動する。
【0294】このとき、オブジェクトBのメソッドに
は、メッセージだけが受け渡され、識別子「rBoxID」
は、オブジェクトBに対応したデータ領域「Thread」に
格納される。換言すれば、オブジェクトBに受け渡され
る識別子「rBoxID」はオペレーティングシステムの管理
下にあり、アプリケーションプログラムの側から見たと
き、オブジェクトBに配送されてきたのはメッセージだ
けである。
は、メッセージだけが受け渡され、識別子「rBoxID」
は、オブジェクトBに対応したデータ領域「Thread」に
格納される。換言すれば、オブジェクトBに受け渡され
る識別子「rBoxID」はオペレーティングシステムの管理
下にあり、アプリケーションプログラムの側から見たと
き、オブジェクトBに配送されてきたのはメッセージだ
けである。
【0295】なお、データ領域「DeliveryBoxA」に格納
されたデータをオブジェクト「mCOOPMailer」からオブ
ジェクトBに配送して、オブジェクトBのメソッドを起
動する際、オブジェクトBは、メソッド「SendWithRBo
x」の引数「destObjID」によって特定され、オブジェク
トBのメソッドは、メソッド「SendWithRBox」の引数
「meth」によって特定される。
されたデータをオブジェクト「mCOOPMailer」からオブ
ジェクトBに配送して、オブジェクトBのメソッドを起
動する際、オブジェクトBは、メソッド「SendWithRBo
x」の引数「destObjID」によって特定され、オブジェク
トBのメソッドは、メソッド「SendWithRBox」の引数
「meth」によって特定される。
【0296】これらの処理が終了すると、オブジェクト
「mCOOPMailer」は、点線矢印ST6−5に示すよう
に、確保したデータ領域「RBox」を特定するための識別
子「rBoxID」をオブジェクトAへ返すとともに、正常に
処理が完了したことを示す値をメソッド「SendWithRBo
x」に対する戻り値としてオブジェクトAへ返した上
で、オブジェクトAを引き続き実行可能状態であるよう
にする。これにより、オブジェクトAは、実行可能状態
となり、行うべき処理が残っている場合には、当該処理
を引き続き実行する。
「mCOOPMailer」は、点線矢印ST6−5に示すよう
に、確保したデータ領域「RBox」を特定するための識別
子「rBoxID」をオブジェクトAへ返すとともに、正常に
処理が完了したことを示す値をメソッド「SendWithRBo
x」に対する戻り値としてオブジェクトAへ返した上
で、オブジェクトAを引き続き実行可能状態であるよう
にする。これにより、オブジェクトAは、実行可能状態
となり、行うべき処理が残っている場合には、当該処理
を引き続き実行する。
【0297】以上の処理によって、アプリケーションプ
ログラムの側から見たときには、実線矢印ST6−6に
示すようにオブジェクトAからオブジェクトBへメッセ
ージが配送され、オブジェクトAとオブジェクトBとが
並行動作しているような状態となる。
ログラムの側から見たときには、実線矢印ST6−6に
示すようにオブジェクトAからオブジェクトBへメッセ
ージが配送され、オブジェクトAとオブジェクトBとが
並行動作しているような状態となる。
【0298】その後、ST6−8に示すように、オブジ
ェクトBがメソッド「GetReplyID」を発行すると、点線
矢印ST6−9に示すように、オブジェクト「mCOOPMai
ler」に処理が遷移し、ST6−10において、オブジ
ェクト「mCOOPMailer」によってメソッド「GetReplyI
D」に応じた処理が行われる。
ェクトBがメソッド「GetReplyID」を発行すると、点線
矢印ST6−9に示すように、オブジェクト「mCOOPMai
ler」に処理が遷移し、ST6−10において、オブジ
ェクト「mCOOPMailer」によってメソッド「GetReplyI
D」に応じた処理が行われる。
【0299】具体的には、オブジェクト「mCOOPMaile
r」は、オブジェクトBに対応したデータ領域「Threa
d」に格納されている識別子「rBoxID」を読み出して、
当該識別子「rBoxID」の値を、メソッド「GetReplyID」
に対する戻り値として返す。
r」は、オブジェクトBに対応したデータ領域「Threa
d」に格納されている識別子「rBoxID」を読み出して、
当該識別子「rBoxID」の値を、メソッド「GetReplyID」
に対する戻り値として返す。
【0300】この処理が終了すると、オブジェクト「mC
OOPMailer」は、点線矢印ST6−11に示すように、
正常に処理が完了したことを示す値をメソッド「GetRep
lyID」に対する戻り値としてオブジェクトBへ返した上
で、オブジェクトBを引き続き実行可能状態であるよう
にする。これにより、オブジェクトBは、実行可能状態
となり、行うべき処理が残っている場合には、当該処理
を引き続き実行する。
OOPMailer」は、点線矢印ST6−11に示すように、
正常に処理が完了したことを示す値をメソッド「GetRep
lyID」に対する戻り値としてオブジェクトBへ返した上
で、オブジェクトBを引き続き実行可能状態であるよう
にする。これにより、オブジェクトBは、実行可能状態
となり、行うべき処理が残っている場合には、当該処理
を引き続き実行する。
【0301】その後、ST6−12に示すように、オブ
ジェクトAがメソッド「Receive」を発行すると、点線
矢印ST6−13に示すように、オブジェクト「mCOOPM
ailer」に処理が遷移し、ST6−14において、オブ
ジェクト「mCOOPMailer」によってメソッド「Receive」
に応じた処理が行われる。
ジェクトAがメソッド「Receive」を発行すると、点線
矢印ST6−13に示すように、オブジェクト「mCOOPM
ailer」に処理が遷移し、ST6−14において、オブ
ジェクト「mCOOPMailer」によってメソッド「Receive」
に応じた処理が行われる。
【0302】具体的には、オブジェクト「mCOOPMaile
r」は、メソッド「Receive」の引数「rBoxID」によって
特定されるデータ領域「RBox」を参照し、サーバ側オブ
ジェクトによる処理の結果が当該データ領域「RBox」に
格納されているならば、その結果をオブジェクトAに受
け渡し、サーバ側オブジェクトによる処理の結果が当該
データ領域「RBox」に格納されていないならば、オブジ
ェクトAを実行可能状態から待ち状態にする。
r」は、メソッド「Receive」の引数「rBoxID」によって
特定されるデータ領域「RBox」を参照し、サーバ側オブ
ジェクトによる処理の結果が当該データ領域「RBox」に
格納されているならば、その結果をオブジェクトAに受
け渡し、サーバ側オブジェクトによる処理の結果が当該
データ領域「RBox」に格納されていないならば、オブジ
ェクトAを実行可能状態から待ち状態にする。
【0303】本例では、オブジェクトAがメソッド「Re
ceive」を発行した段階では、サーバ側オブジェクトに
よる処理の結果は未だデータ領域「RBox」に格納されて
いない。したがって、オブジェクト「mCOOPMailer」
は、点線矢印ST6−15に示すように、サーバ側オブ
ジェクトによる処理の結果が未だデータ領域「RBox」に
格納されていないことをオブジェクトAに知らせて、オ
ブジェクトAを実行可能状態から待ち状態にする。
ceive」を発行した段階では、サーバ側オブジェクトに
よる処理の結果は未だデータ領域「RBox」に格納されて
いない。したがって、オブジェクト「mCOOPMailer」
は、点線矢印ST6−15に示すように、サーバ側オブ
ジェクトによる処理の結果が未だデータ領域「RBox」に
格納されていないことをオブジェクトAに知らせて、オ
ブジェクトAを実行可能状態から待ち状態にする。
【0304】その後、ST6−16に示すように、オブ
ジェクトBがメソッド「Send」を発行すると、点線矢印
ST6−17に示すように、オブジェクト「mCOOPMaile
r」に処理が遷移し、ST6−18において、オブジェ
クト「mCOOPMailer」によってメソッド「Send」に応じ
た処理が行われる。
ジェクトBがメソッド「Send」を発行すると、点線矢印
ST6−17に示すように、オブジェクト「mCOOPMaile
r」に処理が遷移し、ST6−18において、オブジェ
クト「mCOOPMailer」によってメソッド「Send」に応じ
た処理が行われる。
【0305】具体的には、オブジェクト「mCOOPMaile
r」は、先ず、メソッド「Send」の引数「msg」が指し示
す領域から引数「sizeOfMsg」が示すサイズ分のデータ
を読み出す。このデータがオブジェクトBからオブジェ
クトCに受け渡すメッセージとなる。そして、オブジェ
クト「mCOOPMailer」は、ST6−19に示すように、
上記メッセージをオブジェクトCに配送して、オブジェ
クトCのメソッドを起動する。
r」は、先ず、メソッド「Send」の引数「msg」が指し示
す領域から引数「sizeOfMsg」が示すサイズ分のデータ
を読み出す。このデータがオブジェクトBからオブジェ
クトCに受け渡すメッセージとなる。そして、オブジェ
クト「mCOOPMailer」は、ST6−19に示すように、
上記メッセージをオブジェクトCに配送して、オブジェ
クトCのメソッドを起動する。
【0306】ここで、オブジェクトCは、メソッド「Se
nd」の引数「destObjID」によって特定され、オブジェ
クトCのメソッドは、メソッド「Send」の引数「meth」
によって特定される。また、メソッド「Send」を発行す
る際に、メソッド「Send」によってオブジェクトCに受
け渡すメッセージの中には、メソッド「GetReplyID」を
発行することにより得た識別子「replyID」についての
情報を含めておく。これにより、クライアント側オブジ
ェクトに結果を配送する際に使用するフューチャを特定
するために必要な情報が、オブジェクトBからオブジェ
クトCに受け渡されることとなる。
nd」の引数「destObjID」によって特定され、オブジェ
クトCのメソッドは、メソッド「Send」の引数「meth」
によって特定される。また、メソッド「Send」を発行す
る際に、メソッド「Send」によってオブジェクトCに受
け渡すメッセージの中には、メソッド「GetReplyID」を
発行することにより得た識別子「replyID」についての
情報を含めておく。これにより、クライアント側オブジ
ェクトに結果を配送する際に使用するフューチャを特定
するために必要な情報が、オブジェクトBからオブジェ
クトCに受け渡されることとなる。
【0307】これらの処理が終了すると、オブジェクト
「mCOOPMailer」は、点線矢印ST6−20に示すよう
に、正常に処理が完了したことを示す値をメソッド「Se
nd」に対する戻り値としてオブジェクトBへ返した上
で、オブジェクトBを引き続き実行可能状態であるよう
にする。これにより、オブジェクトBは、実行可能状態
となり、行うべき処理が残っている場合には、当該処理
を引き続き実行する。
「mCOOPMailer」は、点線矢印ST6−20に示すよう
に、正常に処理が完了したことを示す値をメソッド「Se
nd」に対する戻り値としてオブジェクトBへ返した上
で、オブジェクトBを引き続き実行可能状態であるよう
にする。これにより、オブジェクトBは、実行可能状態
となり、行うべき処理が残っている場合には、当該処理
を引き続き実行する。
【0308】以上の処理によって、アプリケーションプ
ログラムの側から見たときには、実線矢印ST6−21
に示すようにメッセージがオブジェクトBからオブジェ
クトCへ配送され、オブジェクトBとオブジェクトCと
が並行動作しているような状態となる。
ログラムの側から見たときには、実線矢印ST6−21
に示すようにメッセージがオブジェクトBからオブジェ
クトCへ配送され、オブジェクトBとオブジェクトCと
が並行動作しているような状態となる。
【0309】その後、ST6−22に示すように、オブ
ジェクトCがメソッド「ReplyWithReplyID」を発行する
と、点線矢印ST6−23に示すように、オブジェクト
「mCOOPMailer」に処理が遷移する。ここで、メソッド
「ReplyWithReplyID」の引数「replyID」には、クライ
アント側オブジェクトに結果を配送する際に使用するフ
ューチャを特定するための識別子「replyID」の値が設
定され、これにより、クライアント側オブジェクトに結
果を配送する際に使用するデータ領域「RBox」が特定さ
れる。
ジェクトCがメソッド「ReplyWithReplyID」を発行する
と、点線矢印ST6−23に示すように、オブジェクト
「mCOOPMailer」に処理が遷移する。ここで、メソッド
「ReplyWithReplyID」の引数「replyID」には、クライ
アント側オブジェクトに結果を配送する際に使用するフ
ューチャを特定するための識別子「replyID」の値が設
定され、これにより、クライアント側オブジェクトに結
果を配送する際に使用するデータ領域「RBox」が特定さ
れる。
【0310】そして、ST6−24において、オブジェ
クト「mCOOPMailer」によってメソッド「ReplyWithRepl
yID」に応じた処理が行われる。具体的には、オブジェ
クト「mCOOPMailer」は、オブジェクトAが既にメソッ
ド「Receive」を発行しているならば、オブジェクトC
による処理の結果をオブジェクトAに受け渡し、オブジ
ェクトAが未だメソッド「Receive」を発行していない
ならば、オブジェクトCによる処理の結果をデータ領域
「RBox」に格納する。
クト「mCOOPMailer」によってメソッド「ReplyWithRepl
yID」に応じた処理が行われる。具体的には、オブジェ
クト「mCOOPMailer」は、オブジェクトAが既にメソッ
ド「Receive」を発行しているならば、オブジェクトC
による処理の結果をオブジェクトAに受け渡し、オブジ
ェクトAが未だメソッド「Receive」を発行していない
ならば、オブジェクトCによる処理の結果をデータ領域
「RBox」に格納する。
【0311】本例では、オブジェクトCがメソッド「Re
plyWithReplyID」を発行した段階で、既にオブジェクト
Aがメソッド「Receive」を発行している。したがっ
て、オブジェクト「mCOOPMailer」は、点線矢印ST6
−25に示すように、オブジェクトCによる処理の結果
を、データ領域「RBox」に格納することなく、オブジェ
クトAに直ぐに受け渡す。そして、オブジェクト「mCOO
PMailer」は、オブジェクトCによる処理の結果のオブ
ジェクトAへの受け渡しの処理が正常に完了したら、点
線矢印ST6−26に示すように、当該処理が正常に完
了したことを示す値をメソッド「ReplyWithReplyID」に
対する戻り値としてオブジェクトCへ返した上で、オブ
ジェクトCを引き続き実行可能状態であるようにする。
これにより、オブジェクトCは、実行可能状態となり、
行うべき処理が残っている場合には、当該処理を引き続
き実行する。
plyWithReplyID」を発行した段階で、既にオブジェクト
Aがメソッド「Receive」を発行している。したがっ
て、オブジェクト「mCOOPMailer」は、点線矢印ST6
−25に示すように、オブジェクトCによる処理の結果
を、データ領域「RBox」に格納することなく、オブジェ
クトAに直ぐに受け渡す。そして、オブジェクト「mCOO
PMailer」は、オブジェクトCによる処理の結果のオブ
ジェクトAへの受け渡しの処理が正常に完了したら、点
線矢印ST6−26に示すように、当該処理が正常に完
了したことを示す値をメソッド「ReplyWithReplyID」に
対する戻り値としてオブジェクトCへ返した上で、オブ
ジェクトCを引き続き実行可能状態であるようにする。
これにより、オブジェクトCは、実行可能状態となり、
行うべき処理が残っている場合には、当該処理を引き続
き実行する。
【0312】以上の処理によって、アプリケーションプ
ログラムの側から見たときには、実線矢印ST6−27
に示すようにオブジェクトCによる処理の結果がオブジ
ェクトAへ受け渡され、オブジェクトAとオブジェクト
Cとが並行動作しているような状態となる。
ログラムの側から見たときには、実線矢印ST6−27
に示すようにオブジェクトCによる処理の結果がオブジ
ェクトAへ受け渡され、オブジェクトAとオブジェクト
Cとが並行動作しているような状態となる。
【0313】なお、図8の例では、メソッド「ReplyWit
hReplyID」が発行される前にメソッド「Receive」が発
行された場合を示したが、メソッド「ReplyWithReplyI
D」が発行された後にメソッド「Receive」が発行される
場合もあり得る。メソッド「ReplyWithReplyID」が発行
された後にメソッド「Receive」が発行された場合に
は、オブジェクトAは待ち状態となることなく、オブジ
ェクトCによる処理の結果を直ぐに受け取ることとな
る。
hReplyID」が発行される前にメソッド「Receive」が発
行された場合を示したが、メソッド「ReplyWithReplyI
D」が発行された後にメソッド「Receive」が発行される
場合もあり得る。メソッド「ReplyWithReplyID」が発行
された後にメソッド「Receive」が発行された場合に
は、オブジェクトAは待ち状態となることなく、オブジ
ェクトCによる処理の結果を直ぐに受け取ることとな
る。
【0314】すなわち、オブジェクトCがメソッド「Re
plyWithReplyID」を発行した後からオブジェクトAがメ
ソッド「Receive」を発行した場合、オブジェクト「mCO
OPMailer」は、オブジェクトCがメソッド「ReplyWithR
eplyID」を発行した段階では、オブジェクトCによる処
理の結果をデータ領域「RBox」に格納しておき、オブジ
ェクトAがメソッド「Receive」を発行した段階で直ぐ
に、オブジェクトCによる処理の結果をデータ領域「RB
ox」から読み出してオブジェクトAに受け渡す。
plyWithReplyID」を発行した後からオブジェクトAがメ
ソッド「Receive」を発行した場合、オブジェクト「mCO
OPMailer」は、オブジェクトCがメソッド「ReplyWithR
eplyID」を発行した段階では、オブジェクトCによる処
理の結果をデータ領域「RBox」に格納しておき、オブジ
ェクトAがメソッド「Receive」を発行した段階で直ぐ
に、オブジェクトCによる処理の結果をデータ領域「RB
ox」から読み出してオブジェクトAに受け渡す。
【0315】このとき、オブジェクトCによる処理の結
果を格納するデータ領域「RBox」は、メソッド「ReplyW
ithReplyID」の引数「replyID」によって特定される。
すなわち、上述したように、メソッド「ReplyWithReply
ID」の引数「replyID」には、クライアント側オブジェ
クトに結果を配送する際に使用するフューチャを特定す
るための識別子「replyID」の値が設定され、これによ
り、クライアント側オブジェクトに結果を配送する際に
使用するデータ領域「RBox」が特定される。
果を格納するデータ領域「RBox」は、メソッド「ReplyW
ithReplyID」の引数「replyID」によって特定される。
すなわち、上述したように、メソッド「ReplyWithReply
ID」の引数「replyID」には、クライアント側オブジェ
クトに結果を配送する際に使用するフューチャを特定す
るための識別子「replyID」の値が設定され、これによ
り、クライアント側オブジェクトに結果を配送する際に
使用するデータ領域「RBox」が特定される。
【0316】なお、オブジェクトCによる処理の結果を
データ領域「RBox」に格納するということは、具体的に
は、データ領域「RBox」の属性「ready」に、オブジェ
クトCによる処理の結果が返ってきていることを示す値
を設定し、且つ、データ領域「RBox」の属性「resultMs
g」に、オブジェクトCによる処理の結果としてオブジ
ェクトAに受け渡すメッセージが格納された領域へのポ
インタ、すなわちメソッド「ReplyWithReplyID」の引数
「resultMsg」で示されるポインタを設定し、且つ、デ
ータ領域「RBox」の属性「sizeOfResultMsg」に、オブ
ジェクトCによる処理の結果としてオブジェクトAに受
け渡すメッセージのサイズを示す値、すなわちメソッド
「ReplyWithReplyID」の引数「sizeOfResultMsg」が示
す値を設定するということである。
データ領域「RBox」に格納するということは、具体的に
は、データ領域「RBox」の属性「ready」に、オブジェ
クトCによる処理の結果が返ってきていることを示す値
を設定し、且つ、データ領域「RBox」の属性「resultMs
g」に、オブジェクトCによる処理の結果としてオブジ
ェクトAに受け渡すメッセージが格納された領域へのポ
インタ、すなわちメソッド「ReplyWithReplyID」の引数
「resultMsg」で示されるポインタを設定し、且つ、デ
ータ領域「RBox」の属性「sizeOfResultMsg」に、オブ
ジェクトCによる処理の結果としてオブジェクトAに受
け渡すメッセージのサイズを示す値、すなわちメソッド
「ReplyWithReplyID」の引数「sizeOfResultMsg」が示
す値を設定するということである。
【0317】そして、オブジェクトCによる処理の結果
をデータ領域「RBox」から読み出してオブジェクトAに
受け渡す際、オブジェクト「mCOOPMailer」は、先ず、
メソッド「Receive」の引数「rBoxID」によって特定さ
れるデータ領域「RBox」から、属性「resultMsg」及び
属性「sizeOfResultMsg」を読み出し、属性「resultMs
g」が指し示す領域から属性「sizeOfResultMsg」が示す
サイズ分のデータを読み出す。このデータがオブジェク
トCからオブジェクトAに受け渡すメッセージとなる。
そして、オブジェクト「mCOOPMailer」は、このように
読み出したデータを、メソッド「Receive」の引数「ms
g」が指し示す領域に格納する。ここで、メソッド「Rec
eive」の引数「msg」が指し示す領域のサイズは、メソ
ッド「Receive」の引数「sizeOfMsg」によって設定され
ている。
をデータ領域「RBox」から読み出してオブジェクトAに
受け渡す際、オブジェクト「mCOOPMailer」は、先ず、
メソッド「Receive」の引数「rBoxID」によって特定さ
れるデータ領域「RBox」から、属性「resultMsg」及び
属性「sizeOfResultMsg」を読み出し、属性「resultMs
g」が指し示す領域から属性「sizeOfResultMsg」が示す
サイズ分のデータを読み出す。このデータがオブジェク
トCからオブジェクトAに受け渡すメッセージとなる。
そして、オブジェクト「mCOOPMailer」は、このように
読み出したデータを、メソッド「Receive」の引数「ms
g」が指し示す領域に格納する。ここで、メソッド「Rec
eive」の引数「msg」が指し示す領域のサイズは、メソ
ッド「Receive」の引数「sizeOfMsg」によって設定され
ている。
【0318】以上の処理により、メソッド「ReplyWithR
eplyID」が発行された後にメソッド「Receive」が発行
された場合も、メソッド「ReplyWithReplyID」が発行さ
れる前にメソッド「Receive」が発行された場合と同様
に、オブジェクトCによる処理の結果がオブジェクトA
へ受け渡され、オブジェクトAとオブジェクトCとが並
行動作しているような状態となる。
eplyID」が発行された後にメソッド「Receive」が発行
された場合も、メソッド「ReplyWithReplyID」が発行さ
れる前にメソッド「Receive」が発行された場合と同様
に、オブジェクトCによる処理の結果がオブジェクトA
へ受け渡され、オブジェクトAとオブジェクトCとが並
行動作しているような状態となる。
【0319】以上のように、オブジェクトの記述に使用
するAPIとして、メソッド「Send」,「GetReplyID」
及び「ReplyWithReplyID」を導入することにより、サー
バ側オブジェクトが複数のオブジェクトによって構成さ
れ、且つ処理の要求の受け口と出口が同じではないよう
な場合であっても、メッセージパッシングを行うことが
可能となる。
するAPIとして、メソッド「Send」,「GetReplyID」
及び「ReplyWithReplyID」を導入することにより、サー
バ側オブジェクトが複数のオブジェクトによって構成さ
れ、且つ処理の要求の受け口と出口が同じではないよう
な場合であっても、メッセージパッシングを行うことが
可能となる。
【0320】2−6−3 Delegate()を使ったメッセー
ジパッシングとの比較 上述のようにメソッド「Send」,「GetReplyID」及び
「ReplyWithReplyID」を導入することにより、サーバ側
オブジェクトが複数のオブジェクトによって構成され、
且つ処理の要求の受け口と出口が同じではないような場
合であっても、メッセージパッシングを行うことが可能
となる。しかしながら、この方法は、オペレーティング
システム上でアプリケーションプログラムを動作させる
ための仕組みとしては問題がある。
ジパッシングとの比較 上述のようにメソッド「Send」,「GetReplyID」及び
「ReplyWithReplyID」を導入することにより、サーバ側
オブジェクトが複数のオブジェクトによって構成され、
且つ処理の要求の受け口と出口が同じではないような場
合であっても、メッセージパッシングを行うことが可能
となる。しかしながら、この方法は、オペレーティング
システム上でアプリケーションプログラムを動作させる
ための仕組みとしては問題がある。
【0321】メソッド「GetReplyID」やメソッド「Repl
yWithReplyID」が導入される前は、メッセージを送信し
たクライアント側オブジェクトとフューチャとの関係
や、フューチャとメッセージが配送されたサーバ側オブ
ジェクトとの関係は、常にオペレーティングシステムに
よって把握されていた。
yWithReplyID」が導入される前は、メッセージを送信し
たクライアント側オブジェクトとフューチャとの関係
や、フューチャとメッセージが配送されたサーバ側オブ
ジェクトとの関係は、常にオペレーティングシステムに
よって把握されていた。
【0322】しかし、メソッド「GetReplyID」やメソッ
ド「ReplyWithReplyID」を導入すると、オペレーティン
グシステムが知ることなく、アプリケーションプログラ
ムを構成するオブジェクト間でのメッセージの受け渡し
により、フューチャについての情報をオブジェクト間で
やり取りするようなことが可能となる。すなわち、メソ
ッド「GetReplyID」を発行して識別子「replyID」を得
た後は、フューチャについての情報(すなわち識別子
「replyID」)をメッセージとしてやり取りすることが
可能となるため、オペレーティングシステムが知ること
なく、フューチャについての情報をアプリケーションプ
ログラムを構成するオブジェクト間でやり取りするよう
なことが可能となる。
ド「ReplyWithReplyID」を導入すると、オペレーティン
グシステムが知ることなく、アプリケーションプログラ
ムを構成するオブジェクト間でのメッセージの受け渡し
により、フューチャについての情報をオブジェクト間で
やり取りするようなことが可能となる。すなわち、メソ
ッド「GetReplyID」を発行して識別子「replyID」を得
た後は、フューチャについての情報(すなわち識別子
「replyID」)をメッセージとしてやり取りすることが
可能となるため、オペレーティングシステムが知ること
なく、フューチャについての情報をアプリケーションプ
ログラムを構成するオブジェクト間でやり取りするよう
なことが可能となる。
【0323】このように、オペレーティングシステムが
知らないところで、フューチャについての情報をアプリ
ケーションプログラムを構成するオブジェクト間でやり
取りできるようになると、クライアント側オブジェクト
とフューチャとの関係や、フューチャとサーバ側オブジ
ェクトとの関係を、オペレーティングシステムが把握で
きなくなってしまう。
知らないところで、フューチャについての情報をアプリ
ケーションプログラムを構成するオブジェクト間でやり
取りできるようになると、クライアント側オブジェクト
とフューチャとの関係や、フューチャとサーバ側オブジ
ェクトとの関係を、オペレーティングシステムが把握で
きなくなってしまう。
【0324】そして、クライアント側オブジェクトとフ
ューチャとの関係や、フューチャとサーバ側オブジェク
トとの関係を、オペレーティングシステムが把握してい
ない状態でメッセージパッシングが行われると、例え
ば、例外事象が生じたときにシステムを復帰できないよ
うな場合が起こりうる。
ューチャとの関係や、フューチャとサーバ側オブジェク
トとの関係を、オペレーティングシステムが把握してい
ない状態でメッセージパッシングが行われると、例え
ば、例外事象が生じたときにシステムを復帰できないよ
うな場合が起こりうる。
【0325】例えば、サーバ側オブジェクトによる処理
の結果がフューチャを介して送られてくるのを待って、
クライアント側オブジェクトが待ち状態になっていると
きに、オブジェクト「mCOOPMailer」に例外事象が発生
して、サーバ側オブジェクトによる処理の結果をクライ
アント側オブジェクトに返せなくなったとする。
の結果がフューチャを介して送られてくるのを待って、
クライアント側オブジェクトが待ち状態になっていると
きに、オブジェクト「mCOOPMailer」に例外事象が発生
して、サーバ側オブジェクトによる処理の結果をクライ
アント側オブジェクトに返せなくなったとする。
【0326】このような状態のときに、オペレーティン
グシステムが、それらのオブジェクト間の関係を把握し
ていないと、オブジェクト「mCOOPMailer」に例外事象
が生じたことを、待ち状態になっているクライアント側
オブジェクトに通知することができず、クライアント側
オブジェクトは待ち状態のままとなってしまう。
グシステムが、それらのオブジェクト間の関係を把握し
ていないと、オブジェクト「mCOOPMailer」に例外事象
が生じたことを、待ち状態になっているクライアント側
オブジェクトに通知することができず、クライアント側
オブジェクトは待ち状態のままとなってしまう。
【0327】このように、待ち状態となっているオブジ
ェクトを復帰させることができなくなると、ユーザにと
ってはシステムが原因不明で停止してしまったような状
態となる。オペレーティングシステムには、当該オペレ
ーティングシステム上で動作するソフトウェアが安定に
動作し続ける仕組みを提供することが望まれ、ユーザに
とってシステムが原因不明で停止してしまったような状
態となることは非常に問題である。
ェクトを復帰させることができなくなると、ユーザにと
ってはシステムが原因不明で停止してしまったような状
態となる。オペレーティングシステムには、当該オペレ
ーティングシステム上で動作するソフトウェアが安定に
動作し続ける仕組みを提供することが望まれ、ユーザに
とってシステムが原因不明で停止してしまったような状
態となることは非常に問題である。
【0328】そして、上記問題の原因は、サーバ側オブ
ジェクトによる処理の要求の受け口と出口が同じでない
ような場合に、クライアント側オブジェクトとフューチ
ャとの関係や、フューチャとサーバ側オブジェクトとの
関係を、オペレーティングシステムが把握できなくなる
ことにある。したがって、上記問題を解消するには、ク
ライアント側オブジェクトとフューチャとの関係や、フ
ューチャとサーバ側オブジェクトとの関係を、常にオペ
レーティングシステムが把握できるようにすればよい。
ジェクトによる処理の要求の受け口と出口が同じでない
ような場合に、クライアント側オブジェクトとフューチ
ャとの関係や、フューチャとサーバ側オブジェクトとの
関係を、オペレーティングシステムが把握できなくなる
ことにある。したがって、上記問題を解消するには、ク
ライアント側オブジェクトとフューチャとの関係や、フ
ューチャとサーバ側オブジェクトとの関係を、常にオペ
レーティングシステムが把握できるようにすればよい。
【0329】具体的には、APIとして、メソッド「Ge
tReplyID」やメソッド「ReplyWithReplyID」のように、
フューチャについての情報を直接取り扱うAPIを提供
するのではなく、結果の配送の権限を他のオブジェクト
に委譲するメソッド「Delegate」を提供するようにすれ
ばよい。
tReplyID」やメソッド「ReplyWithReplyID」のように、
フューチャについての情報を直接取り扱うAPIを提供
するのではなく、結果の配送の権限を他のオブジェクト
に委譲するメソッド「Delegate」を提供するようにすれ
ばよい。
【0330】メソッド「GetReplyID」やメソッド「Repl
yWithReplyID」ではなく、メソッド「Delegate」を用い
ることにより、サーバ側オブジェクトが複数のオブジェ
クトによって構成され、且つ処理の要求の受け口と出口
が同じではないような場合であっても、クライアント側
オブジェクトとフューチャとの関係や、フューチャとサ
ーバ側オブジェクトとの関係を、オペレーティングシス
テムが常に把握することが可能となり、上述のような問
題は解消される。
yWithReplyID」ではなく、メソッド「Delegate」を用い
ることにより、サーバ側オブジェクトが複数のオブジェ
クトによって構成され、且つ処理の要求の受け口と出口
が同じではないような場合であっても、クライアント側
オブジェクトとフューチャとの関係や、フューチャとサ
ーバ側オブジェクトとの関係を、オペレーティングシス
テムが常に把握することが可能となり、上述のような問
題は解消される。
【0331】メソッド「Delegate」を導入した場合、ア
プリケーションプログラムを構成するオブジェクト間で
のメッセージの受け渡しによりフューチャについての情
報をやり取りするようなことはなくなり、フューチャに
ついての情報のやり取りは、オペレーティングシステム
の管理の下で、データ領域「DeliveryBoxA」を用いて行
われる。したがって、メソッド「Delegate」を導入した
場合、フューチャについての情報の受け渡しは、常にオ
ペレーティングシステムの管理下にあり、クライアント
側オブジェクトとフューチャとの関係や、フューチャと
サーバ側オブジェクトとの関係を、オペレーティングシ
ステムが把握できなくなるようなことはなくなる。その
結果、例えば、何らかの例外事象の発生によってクライ
アント側オブジェクトが待ち状態のまま止まってしまう
ようなことはなくなり、システムをより強固なもとにす
ることが可能となる。
プリケーションプログラムを構成するオブジェクト間で
のメッセージの受け渡しによりフューチャについての情
報をやり取りするようなことはなくなり、フューチャに
ついての情報のやり取りは、オペレーティングシステム
の管理の下で、データ領域「DeliveryBoxA」を用いて行
われる。したがって、メソッド「Delegate」を導入した
場合、フューチャについての情報の受け渡しは、常にオ
ペレーティングシステムの管理下にあり、クライアント
側オブジェクトとフューチャとの関係や、フューチャと
サーバ側オブジェクトとの関係を、オペレーティングシ
ステムが把握できなくなるようなことはなくなる。その
結果、例えば、何らかの例外事象の発生によってクライ
アント側オブジェクトが待ち状態のまま止まってしまう
ようなことはなくなり、システムをより強固なもとにす
ることが可能となる。
【0332】しかも、メソッド「Delegate」を導入した
場合には、サーバ側オブジェクトを構成するオブジェク
ト間で返答権限の委譲を行う際に、アプリケーションプ
ログラムの側は、データ領域「RBox」並びに当該データ
領域「RBox」を特定する識別子「rBoxID」を意識する必
要がない。したがって、メソッド「Delegate」を導入す
ることにより、アプリケーションプログラムの開発が容
易になるという利点もある。
場合には、サーバ側オブジェクトを構成するオブジェク
ト間で返答権限の委譲を行う際に、アプリケーションプ
ログラムの側は、データ領域「RBox」並びに当該データ
領域「RBox」を特定する識別子「rBoxID」を意識する必
要がない。したがって、メソッド「Delegate」を導入す
ることにより、アプリケーションプログラムの開発が容
易になるという利点もある。
【0333】
【発明の効果】以上詳細に説明したように、本発明で
は、フューチャを基本にしたメッセージパッシングにお
いて、結果の配送の権限を他のオブジェクトに委譲でき
るようにしている。したがって、本発明によれば、サー
バ側オブジェクトが複数のオブジェクトで構成され、且
つ要求の受け口と出口が異なるような場合でも、メッセ
ージパッシングを適切に行うことが可能となる。
は、フューチャを基本にしたメッセージパッシングにお
いて、結果の配送の権限を他のオブジェクトに委譲でき
るようにしている。したがって、本発明によれば、サー
バ側オブジェクトが複数のオブジェクトで構成され、且
つ要求の受け口と出口が異なるような場合でも、メッセ
ージパッシングを適切に行うことが可能となる。
【図1】本発明を適用したテレビ装置の一例について、
その概略構成を示す図である。
その概略構成を示す図である。
【図2】上記テレビ装置に搭載されたオペレーティング
システムを説明するための図である。
システムを説明するための図である。
【図3】メソッド「SendWithRBox」を用いて行われるメ
ッセージパッシングについて、正常に処理が進められた
場合のシナリオの一例を示す図である。
ッセージパッシングについて、正常に処理が進められた
場合のシナリオの一例を示す図である。
【図4】メソッド「SendWithRBox」を用いて行われるメ
ッセージパッシングについて、例外事象が発生した場合
のシナリオの一例を示す図である。
ッセージパッシングについて、例外事象が発生した場合
のシナリオの一例を示す図である。
【図5】サーバ側オブジェクトによる処理の要求の受け
口と出口が異なるような構成におけるメッセージパッシ
ングのシナリオの一例を示す図である。
口と出口が異なるような構成におけるメッセージパッシ
ングのシナリオの一例を示す図である。
【図6】メソッド「SendWithContinuation」を用いて行
われるメッセージパッシングのシナリオの一例を示す図
である。
われるメッセージパッシングのシナリオの一例を示す図
である。
【図7】異なるメタスペース間でのメッセージパッシン
グのシナリオの一例を示す図である。
グのシナリオの一例を示す図である。
【図8】サーバ側オブジェクトによる処理の要求の受け
口と出口が異なるような構成におけるメッセージパッシ
ングのシナリオの他の例を示す図である。
口と出口が異なるような構成におけるメッセージパッシ
ングのシナリオの他の例を示す図である。
【図9】関数読み出しの基本的な動作を示す図である。
【図10】フューチャを使ったメッセージパッシングの
基本的な動作を示す図である。
基本的な動作を示す図である。
1 バス/IOブリッジ、 2 バス、 3 テレビ機
能部、 4 バス/メモリブリッジ、 5 プロセッ
サ、 6 ROM、 7 RAM、 8 操作パネル、
9外部記憶装置、 10 通信装置、 11 グラフ
ィックス装置
能部、 4 バス/メモリブリッジ、 5 プロセッ
サ、 6 ROM、 7 RAM、 8 操作パネル、
9外部記憶装置、 10 通信装置、 11 グラフ
ィックス装置
Claims (8)
- 【請求項1】 クライアント側オブジェクトから2以上
のオブジェクトによって構成されるサーバ側オブジェク
トへメッセージを送り、当該メッセージが要求する処理
をサーバ側オブジェクトによって行い、当該処理の結果
をサーバ側オブジェクトからクライアント側オブジェク
トに返すにあたって、 クライアント側オブジェクトからサーバ側オブジェクト
にメッセージを送るときに、サーバ側オブジェクトによ
る処理の結果が格納されるデータ領域を確保し、 上記メッセージが要求する処理をサーバ側オブジェクト
によって行うときに、サーバ側オブジェクトを構成する
オブジェクト間で、サーバ側オブジェクトによる処理の
結果をクライアント側オブジェクトへ返す権限の委譲を
行い、 上記権限を最後に委譲されたオブジェクトによる処理の
結果を上記データ領域に格納し、 クライアント側オブジェクトは、上記データ領域に格納
されたデータを読み出すことにより、サーバ側オブジェ
クトによる処理の結果を受け取ることを特徴とするデー
タ処理方法。 - 【請求項2】 クライアント側オブジェクトは、サーバ
側オブジェクトにメッセージを送った後も処理を継続し
て行い、サーバ側オブジェクトによる処理の結果が必要
になった段階で、上記データ領域に格納されたデータの
読み出しを行うとともに、 クライアント側オブジェクトが上記データ領域に格納さ
れたデータの読み出しを行ったときに、当該データ領域
にサーバ側オブジェクトによる処理の結果が格納されて
いない場合には、当該データ領域にサーバ側オブジェク
トによる処理の結果が格納されるまで、クライアント側
オブジェクトは待ち状態となることを特徴とする請求項
1記載のデータ処理方法。 - 【請求項3】 オペレーティングシステムが記録された
記録媒体であって、 上記オペレーティングシステムは、 オブジェクトの記述に使用されるアプリケーションプロ
グラムインターフェースとして、クライアント側オブジ
ェクトからサーバ側オブジェクトへメッセージを送る処
理を行うためのメッセージ送信用メソッドと、オブジェ
クト間での権限の委譲の処理を行うための権限委譲用メ
ソッドとを有し、 上記メッセージ送信用メソッドの実行が要求されると、
クライアント側オブジェクトからサーバ側オブジェクト
へメッセージを送る処理を行うとともに、サーバ側オブ
ジェクトによる処理の結果が格納されるデータ領域を確
保する処理を行い、 上記権限委譲用メソッドの実行が要求されると、サーバ
側オブジェクトを構成するオブジェクトから、サーバ側
オブジェクトを構成する他のオブジェクトへ、サーバ側
オブジェクトによる処理の結果をクライアント側オブジ
ェクトへ返す権限を委譲する処理を行い、 上記メッセージ送信用メソッドによってサーバ側オブジ
ェクトに送られたメッセージに基づくサーバ側オブジェ
クトによる処理が完了したら、上記権限委譲用メソッド
によって上記権限が最後に委譲されたオブジェクトによ
る処理の結果を、上記データ領域に格納することを特徴
とする記録媒体。 - 【請求項4】 上記オペレーティングシステムは、オブ
ジェクトの記述に使用されるアプリケーションプログラ
ムインターフェースとして、上記データ領域に格納され
ているデータを読み出すデータ読み出し用メソッドを備
えていることを特徴とする請求項3記載の記録媒体。 - 【請求項5】 上記オペレーティングシステムは、上記
クライアント側オブジェクトが上記データ読み出し用メ
ソッドにより上記データ領域に格納されたデータを読み
出そうとしたときに、当該データ領域にサーバ側オブジ
ェクトによる処理の結果が格納されていない場合には、
当該データ領域にサーバ側オブジェクトによる処理の結
果が格納されるまで、クライアント側オブジェクトを待
ち状態とすることを特徴とする請求項4記載の記録媒
体。 - 【請求項6】 オペレーティングシステムが記録された
記録媒体を備えたデータ処理装置であって、 上記オペレーティングシステムは、 オブジェクトの記述に使用されるアプリケーションプロ
グラムインターフェースとして、クライアント側オブジ
ェクトからサーバ側オブジェクトへメッセージを送る処
理を行うためのメッセージ送信用メソッドと、オブジェ
クト間での権限の委譲の処理を行うための権限委譲用メ
ソッドとを有し、 上記メッセージ送信用メソッドの実行が要求されると、
クライアント側オブジェクトからサーバ側オブジェクト
へメッセージを送る処理を行うとともに、サーバ側オブ
ジェクトによる処理の結果が格納されるデータ領域を確
保する処理を行い、 上記権限委譲用メソッドの実行が要求されると、サーバ
側オブジェクトを構成するオブジェクトから、サーバ側
オブジェクトを構成する他のオブジェクトへ、サーバ側
オブジェクトによる処理の結果をクライアント側オブジ
ェクトへ返す権限を委譲する処理を行い、 上記メッセージ送信用メソッドによってサーバ側オブジ
ェクトに送られたメッセージに基づくサーバ側オブジェ
クトによる処理が完了したら、上記権限委譲用メソッド
によって上記権限が最後に委譲されたオブジェクトによ
る処理の結果を、上記データ領域に格納することを特徴
とするデータ処理装置。 - 【請求項7】 上記オペレーティングシステムは、オブ
ジェクトの記述に使用されるアプリケーションプログラ
ムインターフェースとして、上記データ領域に格納され
ているデータを読み出すデータ読み出し用メソッドを備
えていることを特徴とする請求項6記載のデータ処理装
置。 - 【請求項8】 上記オペレーティングシステムは、上記
クライアント側オブジェクトが上記データ読み出し用メ
ソッドにより上記データ領域に格納されたデータを読み
出そうとしたときに、当該データ領域にサーバ側オブジ
ェクトによる処理の結果が格納されていない場合には、
当該データ領域にサーバ側オブジェクトによる処理の結
果が格納されるまで、クライアント側オブジェクトを待
ち状態とすることを特徴とする請求項7記載のデータ処
理装置。
Priority Applications (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP10052493A JPH11249898A (ja) | 1998-03-04 | 1998-03-04 | データ処理方法、記録媒体及びデータ処理装置 |
US09/259,311 US6513049B1 (en) | 1998-03-04 | 1999-03-01 | Data processing method, recording medium, and data processing apparatus |
KR1019990006981A KR19990077560A (ko) | 1998-03-04 | 1999-03-03 | 데이터처리방법,기록매체및데이터처리장치 |
CA002264234A CA2264234A1 (en) | 1998-03-04 | 1999-03-03 | Data processing method, recording medium, and data processing apparatus |
DE69936744T DE69936744T2 (de) | 1998-03-04 | 1999-03-04 | Datenverarbeitungsverfahren |
EP99301645A EP0940749B1 (en) | 1998-03-04 | 1999-03-04 | Data processing method |
CN99105972A CN1237731A (zh) | 1998-03-04 | 1999-03-04 | 数据处理方法、记录介质及数据处理设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP10052493A JPH11249898A (ja) | 1998-03-04 | 1998-03-04 | データ処理方法、記録媒体及びデータ処理装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH11249898A true JPH11249898A (ja) | 1999-09-17 |
Family
ID=12916249
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP10052493A Withdrawn JPH11249898A (ja) | 1998-03-04 | 1998-03-04 | データ処理方法、記録媒体及びデータ処理装置 |
Country Status (7)
Country | Link |
---|---|
US (1) | US6513049B1 (ja) |
EP (1) | EP0940749B1 (ja) |
JP (1) | JPH11249898A (ja) |
KR (1) | KR19990077560A (ja) |
CN (1) | CN1237731A (ja) |
CA (1) | CA2264234A1 (ja) |
DE (1) | DE69936744T2 (ja) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6938251B1 (en) * | 2000-09-29 | 2005-08-30 | Sprint Communications Company L.P. | Deferred-Synchronous messaging software in a non-threaded environment |
US7290039B1 (en) * | 2001-02-27 | 2007-10-30 | Microsoft Corporation | Intent based processing |
JP2003186855A (ja) * | 2001-12-20 | 2003-07-04 | Fujitsu Ltd | 型照合によるオブジェクト連携システムおよび方法 |
US7523220B2 (en) * | 2003-09-17 | 2009-04-21 | Microsoft Corporation | Metaspace: communication middleware for partially connected mobile ad hoc networks |
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 |
US7840682B2 (en) * | 2005-06-03 | 2010-11-23 | QNX Software Systems, GmbH & Co. KG | Distributed kernel operating system |
GB2426839B (en) * | 2005-06-03 | 2011-02-23 | Jacobs Rimell Ltd | Automated provisioning system |
US8667184B2 (en) * | 2005-06-03 | 2014-03-04 | Qnx Software Systems Limited | Distributed kernel operating system |
US7680096B2 (en) * | 2005-10-28 | 2010-03-16 | Qnx Software Systems Gmbh & Co. Kg | System for configuring switches in a network |
US10896271B1 (en) | 2020-03-31 | 2021-01-19 | Mirmex Motor Sa | Optimized development of electro-mechanical devices |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5377350A (en) * | 1993-04-30 | 1994-12-27 | International Business Machines Corporation | System for cooperative communication between local object managers to provide verification for the performance of remote calls by object messages |
US6253252B1 (en) * | 1996-07-11 | 2001-06-26 | Andrew Schofield | Method and apparatus for asynchronously calling and implementing objects |
US5884316A (en) * | 1996-11-19 | 1999-03-16 | Microsoft Corporation | Implicit session context system with object state cache |
-
1998
- 1998-03-04 JP JP10052493A patent/JPH11249898A/ja not_active Withdrawn
-
1999
- 1999-03-01 US US09/259,311 patent/US6513049B1/en not_active Expired - Lifetime
- 1999-03-03 CA CA002264234A patent/CA2264234A1/en not_active Abandoned
- 1999-03-03 KR KR1019990006981A patent/KR19990077560A/ko not_active Application Discontinuation
- 1999-03-04 CN CN99105972A patent/CN1237731A/zh active Pending
- 1999-03-04 EP EP99301645A patent/EP0940749B1/en not_active Expired - Lifetime
- 1999-03-04 DE DE69936744T patent/DE69936744T2/de not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
CN1237731A (zh) | 1999-12-08 |
US6513049B1 (en) | 2003-01-28 |
EP0940749A3 (en) | 2003-11-26 |
DE69936744T2 (de) | 2008-04-30 |
EP0940749A2 (en) | 1999-09-08 |
KR19990077560A (ko) | 1999-10-25 |
DE69936744D1 (de) | 2007-09-20 |
EP0940749B1 (en) | 2007-08-08 |
CA2264234A1 (en) | 1999-09-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5175854A (en) | Inter-applicataion interface system | |
US7233972B2 (en) | Method and apparatus for coordination of client/server processes | |
US5881315A (en) | Queue management for distributed computing environment to deliver events to interested consumers even when events are generated faster than consumers can receive | |
US5390316A (en) | Multicomputer complex having a distributed shared memory system for providing a single system view from multiple consoles | |
US6697848B2 (en) | Method and apparatus for enabling application programs to communicate with network clients and servers | |
US7058950B2 (en) | Callback event listener mechanism for resource adapter work executions performed by an application server thread | |
US5249293A (en) | Computer network providing transparent operation on a compute server and associated method | |
US7028091B1 (en) | Web server in-kernel interface to data transport system and cache manager | |
EP0536073A2 (en) | Method and process for interprocess communication using named pipes | |
EP0574900A2 (en) | A method and system for registering data formats for objects | |
KR20020022085A (ko) | 응용프로그램 라이프사이클에 따른 응용프로그램 관리방법 및 장치 | |
JPH08339305A (ja) | サーバの非活動化と遮断を管理する方法および装置 | |
US5056003A (en) | Distributed data management mechanism | |
JPH11249898A (ja) | データ処理方法、記録媒体及びデータ処理装置 | |
JPH11249918A (ja) | データ処理方法、記録媒体及びデータ処理装置 | |
US5218713A (en) | Distributed data management mechanism for handling a data stream | |
US7106465B1 (en) | Method and apparatus for providing print job status | |
US6813629B1 (en) | Method and apparatus for facilitating object communication across a network | |
CN114462388B (zh) | 句柄管理或通信方法、电子设备、存储介质及程序产品 | |
JP3089359B2 (ja) | 有効範囲を定められたプロセス間メッセージ交換のための方法および装置 | |
JPH0799674A (ja) | 情報処理装置の部分ファイル更新方式 | |
JP3823468B2 (ja) | データ処理方法、記録媒体及びデータ処理装置 | |
JPH11154132A (ja) | サーバ/クライアント通信システム | |
WO2000068776A2 (en) | Dynamic installation and configuration broker | |
JPH0749840A (ja) | 共用記憶媒体制御方式 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A300 | Application deemed to be withdrawn because no request for examination was validly filed |
Free format text: JAPANESE INTERMEDIATE CODE: A300 Effective date: 20050510 |