(57)【要約】【課題】  適切に情報を処理できる。【解決手段】  分散処理システムは、クライアント５０およびサーバ６０を含む分散処理システムである。クライアント５０は、サーバ６０との間で情報を通信する通信部５６と、コールバックした際に情報を処理するコールバックルーチン部７６と、情報を変換するコールバックサーバスタブ部８０と、対応関係を表わす３種類以上の情報を記憶するコールバックスタブ記憶部５４と、３種類以上の情報のいずれかを生成するコールバックスタブ束縛部７４と、コールバックサーバスタブを検索するコールバックスタブ検索部７２と、通信部５６を制御する第１クライアントスタブ１０８とを含む。サーバ６０は、クライアント５０との間で情報を通信する通信部６４と、通信部６４が、コールバックを実施するサービスルーチンとを含む。【選択図】        図１
2006195584.tif 000002
【特許請求の範囲】
【請求項１】
クライアントおよびサーバを含む分散処理システムであって、
前記クライアントは、
前記サーバとの間で情報を通信するための通信手段と、
前記サーバがクライアントにコールバックした際に前記通信手段が受信した情報を処理するための複数のコールバック用の処理手段と、
前記サーバからの情報を、前記コールバック用の処理手段が処理できる情報に変換するための複数の変換手段と、
前記コールバック用の処理手段および変換手段の対応関係を表わす３種類以上の情報を記憶するための記憶手段と、
前記対応関係を表わす３種類以上の情報のいずれかを生成するための生成手段と、
前記記憶手段を参照して、前記変換手段のうち、前記コールバック用の処理手段のいずれかに対応する変換手段を検索するためのコールバック用の検索手段と、
前記検索手段が検索した変換手段を表わす情報を送信するように、前記通信手段を制御するための手段とを含み、
前記サーバは、
前記クライアントとの間で情報を通信するための通信手段と、
前記通信手段が、前記検索手段が検索した変換手段を表わす情報を受信すると、コールバックを実施するための実施手段とを含む、分散処理システム。
【請求項２】
前記３種類以上の情報は、
前記変換手段に一意に割当てられた情報と、
２種類以上の、前記複数のコールバック用の処理手段それぞれを互いに区別する情報とを含む、請求項１に記載の分散処理システム。
【請求項３】
前記複数のコールバック用の処理手段それぞれを互いに区別する情報は、
前記複数のコールバック用の処理手段それぞれの種類を表わす情報と、
前記コールバック用の処理手段の名称を表わす情報とを含む、請求項２に記載の分散処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、分散処理システムに関し、特に、あるコンピュータに記憶されたプログラムの処理を他のコンピュータが利用できる分散処理システムに関する。
【背景技術】
【０００２】
近年、分散処理システムが多く用いられている。分散処理システムとは、通信を介して接続された複数の機器が、さまざまな処理を分散して実行するシステムのことである。
【０００３】
分散処理システムのクライアントがサーバに対して処理を要求する方法の一つとして、リモートプロシージャコールが存在する。リモートプロシージャコールは、クライアントプログラムを実行する際、クライアントのＡＰＩ（Application Program Interface)と同等のソフトウェアとして利用できる。
【０００４】
リモートプロシージャコールを利用する場合、プログラム構成は、サービスを提供するサーバプログラムと、それを利用するクライアントプログラムと、それらを仲介するクライアントスタブおよびサーバアントスタブとからなる。クライアントスタブは、サーバプログラム中で実行されるべき処理を代行するルーチンである。クライアントスタブを実行する際、クライアントのＣＰＵ（Central Processing Unit）は、クライアントプログラムの実行時に引数としたパラメータを通信データに変換する。クライアントスタブを実行する際、クライアントのＣＰＵは、通信装置（インターフェイスなど）に、変換した通信データをサーバへ送信させる。サーバスタブは、クライアントプログラム中で実行されるべき処理を代行するルーチンである。サーバスタブを実行する際、サーバのＣＰＵは、クライアントから受取った通信データをもとのパラメータに復元する。サーバのＣＰＵは、復元したパラメータを引数として、サーバプログラムのルーチンを実行する。
【０００５】
以下の説明において、あるルーチン（この段落では「ルーチンＡ」とする）を呼び出すとき、そのルーチン（ルーチンＡ）を呼び出そうとするルーチン（この段落では「ルーチンＢ」とする）が記憶されたアドレスを引数として渡し、ルーチンＡがルーチンＢを呼び出すことをコールバックという。リモートプロシージャコールを利用する場合においても、ルーチンＢであるサーバプログラムが、クライアントプログラムに存在するコールバックルーチン（ルーチンＡ）を呼び出すための手法がすでに提案されている。
【０００６】
特許文献１に開示されるコールバック方式は、複数のサーバと複数のクライアントからなるコンピュータ・ネットワークにおいて、クライアント上のクライアントプログラムが呼び出すサービスルーチンをサーバ上のサーバプログラムが実行するシステムの、クライアント・サーバ間のルーチン呼び出し方式である。このコールバック方式は、複数のコールバックルーチンをクライアントプログラムに持ち、クライアントプログラム内にコールバックルーチンを管理するためのコールバック記憶回路を持ち、クライアントプログラムがサービスルーチンの呼出時にコールバックルーチンをコールバック記憶回路に登録するステップと、サーバプログラムが必要に応じてコールバックするステップと、クライアントプログラムがコールバックルーチンをその型をキーにしてコールバック記憶回路から検索するステップと、検索されたコールバックルーチンを実行するステップとを含む。
【０００７】
この発明によると、サービスプログラム内にコールバックルーチンを代表するスタブを置くことにより、コールバックルーチンのエントリポイントをリモートプロシージャコールの引数として使うことができる。
【０００８】
しかし、前述の公報に開示された発明では、サービスルーチンの仕様によって次の前提が成り立たなくなる場合には、本来呼び出すべきコールバックルーチンを呼び出すことができないという問題点がある。その前提とは、引数としてアドレス（そのサービスルーチンが記憶されたアドレス）を渡したコールバックルーチンが、サービスルーチン（アドレスが渡されたサービスルーチン）を実行している間に呼ばれることである。
【０００９】
そのような前提が成立しない例を説明する。非ブロッキングルーチン（以下の説明では、処理が完了するよりも前の段階で一旦実行制御が呼び出し元のルーチンに帰るルーチンをいう）において実行結果を通知するために、コールバック関数を用いる手法がよく見られる。サービスルーチンがこのように振る舞う非ブロッキングルーチンであって、そのサービスルーチンがコールバックルーチンのアドレスを引数として呼び出された場合には、サービスルーチンはアドレス（そのコールバックルーチンが記憶されたアドレス）を記憶したまま、本来行うべき処理を開始した直後に終了する。コールバックルーチンの終了を待って終了するのではない。そして、本来の処理が完了するとアドレスが記憶されたコールバックルーチンを呼び出すことによって、本来の処理についての実行結果をサービスルーチンの呼び出し元に通知する。このような場合、コールバックルーチンが、サービスルーチンの実行が終了した後に呼ばれている。
【００１０】
上述の問題点について、より具体的に説明する。一例として、サービスルーチンＡが型「Ｉ」のコールバックルーチンＢによって結果を通知する非ブロッキングルーチンであり、サービスルーチンＣが同じ型「Ｉ」のコールバックルーチンＤを実行中に呼び出すブロッキング関数であった場合を考える。この場合において、クライアントルーチン、サービスルーチンＡ、サービスルーチンＣの順に各ルーチンが実行されたとする。サービスルーチンＡおよびサービスルーチンＣが実行されるタイミングによっては、以下のような順序でサービスルーチンＡおよびサービスルーチンＣが実行される可能性がある。
【００１１】
第１に、クライアントルーチンが、コールバックルーチンＢが記憶されたアドレスを引数としてサービスルーチンＡを呼び出す。
【００１２】
第２に、サービスルーチンＡが、コールバックルーチンＢが記憶されたアドレスを記憶する。
【００１３】
第３に、サービスルーチンＡの処理が完了し、クライアントルーチンの処理が継続される。
【００１４】
第４に、クライアントルーチンが、コールバックルーチンＤが記憶されたアドレスを引数としてサービスルーチンＣを呼び出す。
【００１５】
第５に、サービスルーチンＣが、コールバックルーチンＤを実行する。
【００１６】
このようにサービスルーチンＡおよびサービスルーチンＣが実行されたとき、コールバックルーチンを実行するために、クライアントプログラムを実行中のＣＰＵはコールバック記憶回路に記憶されたルーチンの中から型「Ｉ」のコールバックルーチンを検索する。この時点ではコールバック記憶回路には少なくともコールバックルーチンＢおよびコールバックルーチンＤが登録されている。特許文献１に開示された方式を用いて、コールバック記憶回路に記憶されたルーチンの中から型「Ｉ」のコールバックルーチンを検索すると、コールバックルーチンＤが実行されるべきであるにも関わらず、コールバックルーチンＢが実行される危険が存在する。同一型のコールバックルーチンが複数記憶されていると、その中のいずれのコールバックを選択すべきか判定するための対策が何ら提供されていないためである。このように不適切なルーチンが実行されると、情報を適切に処理することは困難になる。
【特許文献１】特開平６−１９５２８８号公報
【発明の開示】
【発明が解決しようとする課題】
【００１７】
本発明は上述の問題点を解決するためになされたものであって、その目的は、適切に情報を処理できる分散処理システムを提供することにある。
【課題を解決するための手段】
【００１８】
上記目的を達成するために、本発明のある局面にしたがうと、分散処理システムは、クライアントおよびサーバを含む分散処理システムである。クライアントは、サーバとの間で情報を通信するための通信手段と、サーバがクライアントにコールバックした際に通信手段が受信した情報を処理するための複数のコールバック用の処理手段と、サーバからの情報を、コールバック用の処理手段が処理できる情報に変換するための複数の変換手段と、コールバック用の処理手段および変換手段の対応関係を表わす３種類以上の情報を記憶するための記憶手段と、対応関係を表わす３種類以上の情報のいずれかを生成するための生成手段と、記憶手段を参照して、変換手段のうち、コールバック用の処理手段のいずれかに対応する変換手段を検索するためのコールバック用の検索手段と、検索手段が検索した変換手段を表わす情報を送信するように、通信手段を制御するための手段とを含む。サーバは、クライアントとの間で情報を通信するための通信手段と、通信手段が、検索手段が検索した変換手段を表わす情報を受信すると、コールバックを実施するための実施手段とを含む。
【００１９】
すなわち、コールバック用の検索手段は、コールバック用の処理手段および変換手段の対応関係を表わす３種類以上の情報から、変換手段のうち、コールバック用の処理手段のいずれかに対応する変換手段を検索する。実施手段は、検索手段が検索した変換手段を表わす情報が受信されると、コールバックを実施する。変換手段は、サーバからの情報を、コールバック用の処理手段が処理できる情報に変換する。コールバック用の処理手段は、サーバがクライアントにコールバックした際に通信手段が受信した情報を処理する。これにより、本来情報を処理すべきコールバック用の処理手段が、クライアントにコールバックされた情報を処理する可能性は高くなる。その結果、適切に情報を処理できる分散処理システムを提供することができる。
【００２０】
また、上述の３種類以上の情報は、変換手段に一意に割当てられた情報と、２種類以上の、複数のコールバック用の処理手段それぞれを互いに区別する情報とを含むことが望ましい。
【００２１】
すなわち、コールバック用の検索手段は、変換手段に一意に割当てられた情報と、複数のコールバック用の処理手段それぞれを互いに区別する２種類以上の情報とから、コールバック用の処理手段のいずれかに対応する変換手段を検索する。これにより、本来情報を処理すべきコールバック用の処理手段が、クライアントにコールバックされた情報を処理する可能性は、より高くなる。その結果、より適切に情報を処理できる分散処理システムを提供することができる。
【００２２】
また、上述の複数のコールバック用の処理手段それぞれを互いに区別する情報は、複数のコールバック用の処理手段それぞれの種類を表わす情報と、コールバック用の処理手段の名称を表わす情報とを含むことが望ましい。
【００２３】
すなわち、コールバック用の検索手段は、変換手段に一意に割当てられた情報と、複数のコールバック用の処理手段それぞれの種類を表わす情報と、コールバック用の処理手段の名称を表わす情報とから、コールバック用の処理手段のいずれかに対応する変換手段を検索する。これにより、本来情報を処理すべきコールバック用の処理手段が、クライアントにコールバックされた情報を処理する可能性は、さらに高くなる。その結果、さらに適切に情報を処理できる分散処理システムを提供することができる。
【発明の効果】
【００２４】
本発明に係る分散処理システムは、適切に情報を処理できる。
【発明を実施するための最良の形態】
【００２５】
以下、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同一である。したがって、それらについての詳細な説明は繰返さない。
【００２６】
図１を参照して、本実施の形態に係る分散処理システムは、バス４０と、クライアント５０と、サーバ６０とを含む。バス４０は、クライアント５０とサーバ６０との通信を仲介する。クライアント５０は情報を処理する。サーバ６０は、クライアント５０による情報の処理の一部を代行する。
【００２７】
クライアント５０は、実行部５２と、コールバックスタブ記憶部５４と、通信部５６とを含む。実行部５２は、クライアント５０が担当する、情報の処理のための演算を実行する。コールバックスタブ記憶部５４は、コールバックルーチン部７６およびコールバックサーバスタブ部８０の対応関係を表わす情報を記憶する。本実施の形態の場合、コールバックルーチン部７６およびコールバックサーバスタブ部８０の対応関係は、後述する「組情報」によって表わされる。コールバックスタブ記憶部５４は、組情報を複数記憶できる。通信部５６は、サーバ６０との間で情報を通信する。
【００２８】
図２を参照して、コールバックスタブ記憶部５４が記憶する情報（コールバックルーチン部７６およびコールバックサーバスタブ部８０の対応関係を表わす情報）は、スタブ情報と、型情報と、ルーチン情報とを含む。スタブ情報は、コールバックに利用されるスタブに一意に割当てられた、リモートプロシージャコールの機能を表わす番号である。型情報は、コールバックルーチンそれぞれの型を表わす情報である。本実施の形態の場合、コールバックサーバスタブ部８０が含むコールバックサーバスタブは、それぞれある「型」に属する。本実施の形態の場合、「型」とは、情報の処理の方法などに基づく、種類を表わす概念である。この「型」の具体的な内容は、本実施の形態に係る分散システムの仕様の一部として、予め定められている。ルーチン情報は、コールバックルーチンの名称を表わす情報である。型情報およびルーチン情報は、いずれも複数のコールバックルーチンそれぞれを互いに区別する情報である。スタブ情報と型情報とルーチン情報とを含む１組の情報を「組情報」と称する。本実施の形態の場合、スタブ情報および型情報は、事前（本実施の形態の場合、初期化を実行するとき）に設定される。どのような情報がスタブ情報や型情報として設定されるかは、本実施の形態に係る分散システムの仕様の一部として予め定められている。ルーチン情報も、初期化を実行するときに設定される。設定される情報は「Ｎ／Ａ」である。これは、割当てられたコールバックルーチンが存在しないことを意味する情報である。つまり、クライアント５０の初期化が完了した時点でルーチン情報として設定されている情報は「Ｎ／Ａ」である。
【００２９】
実行部５２は、クライアントルーチン７０と、コールバックスタブ検索部７２と、コールバックスタブ束縛部７４と、コールバックルーチン部７６と、クライアントスタブ部７８と、コールバックサーバスタブ部８０とを含む。本実施の形態の場合、これらはいずれも後述するＣＰＵ６２２とメモリ６２４とにより実行されるプログラムである。これらのプログラムは、ＣＰＵ６２２によりメモリ６２４から読み出され実行されることにより、実行部５２が含む仮想回路を形成する。
【００３０】
クライアントルーチン７０は、実行部５２の処理を制御する。クライアントルーチン７０が担当する制御には、サーバ６０が含むサービスルーチン部９２を呼び出すための制御も含まれている。コールバックスタブ検索部７２は、コールバックスタブ記憶部５４を参照して、コールバックサーバスタブ部８０が含むコールバックサーバスタブのうち、コールバックした情報を処理するコールバックルーチンに対応するコールバックサーバスタブを検索する。コールバックスタブ検索部７２は、コールバックサーバスタブが存在するか否かを判断するルーチンでもある。コールバックスタブ検索部７２で検索されるコールバックサーバスタブは、コールバックルーチンに対応するコールバックスタブである。コールバックスタブが対応するコールバックルーチンは、コールバックした情報を処理するコールバックルーチンである。本実施の形態の場合、コールバックスタブ検索部７２は、前者の検索を実施するルーチンと、後者の判断を実施するルーチンとを含む。コールバックスタブ束縛部７４は、予め指定されたコールバックスタブと後述する手順で特定されたコールバックルーチンとを対応付ける。コールバックルーチン部７６は、サーバ６０がクライアント５０にコールバックした（クライアント５０が自らのアドレスを引数として渡し、サーバ６０が、クライアント５０の、引数として渡されたアドレスに記憶されたプログラムを呼出した）際に通信部５６が受信した情報を処理する。本実施の形態の場合、実際にサーバ６０がクライアント５０にコールバックした際に通信部５６が受信した情報を処理するのは、コールバックルーチン部７６が含むコールバックルーチンである。クライアントスタブ部７８は、通信部５６を用いてサーバ６０と通信する。サービスルーチン部９２の実行を要求するためである。本実施の形態の場合、実際にサービスルーチン部９２の実行を要求するのは、クライアントスタブ部７８が含むクライアントスタブである。クライアントスタブは、サービスルーチン部９２が含むサービスルーチンと同一のインターフェイスを持ち、かつ同一の名称である。このため、クライアントルーチン７０は、サービスルーチン部９２を呼び出すためのプログラムコードを変更することなく（実行部５２が含む各プログラムと同様に）、（サービスルーチン部９２に代えて）クライアントスタブを呼び出すことができる。コールバックサーバスタブ部８０は、サーバ６０からの情報を、コールバックルーチン部７６が処理できる情報に変換する。本実施の形態の場合、実際にサーバ６０からの情報をコールバックルーチン部７６が処理できる情報に変換するのは、コールバックサーバスタブ部８０が含むコールバックサーバスタブである。
【００３１】
サーバ６０は、実行部６２と、通信部６４とを含む。実行部６２は、サーバ６０が代行する情報の処理のための演算を実行する。通信部６４は、クライアント５０との間で情報を通信する。
【００３２】
実行部６２は、サーバスタブ部９０と、サービスルーチン部９２と、コールバッククライアントスタブ部９４とを含む。本実施の形態の場合、これらはいずれも後述するＣＰＵ７２２とメモリ７２４とにより実行されるプログラムである。これらのプログラムも、ＣＰＵ７２２によってメモリ７２４から読み出され実行されることにより、実行部６２が含む仮想回路を形成する。この点は、クライアント５０の実行部５２が含む各プログラムと同様である。
【００３３】
サーバスタブ部９０は、クライアント５０から受信した情報をサービスルーチンが利用できる情報に変換する。サーバスタブ部９０は、サービスルーチンが出力した情報をクライアント５０が利用できる情報に変換する。本実施の形態の場合、実際に情報を変換するのは、サーバスタブ部９０が含むサーバスタブである。サービスルーチン部９２は、パラメータとして与えられたルーチン（厳密には、パラメータとして与えられたアドレスに記憶されたルーチン）が実行されるように、実行部６２が含む各プログラムを制御する。本実施の形態の場合、実際に各プログラムを制御するのは、サービスルーチン部９２が含むサービスルーチンである。コールバッククライアントスタブ部９４は通信部６４を用いてクライアント５０と通信する。本実施の形態の場合、実際に通信部６４を用いてクライアント５０と通信するのは、コールバッククライアントスタブ部９４が含むコールバッククライアントスタブである。
【００３４】
上述したように、クライアント５０は、図３に示すコンピュータハードウェアとＣＰＵ６２２により実行されるソフトウェアとにより実現される。図３を参照して、上述のコンピュータハードウェアは、液晶からなるディスプレイ６１０と（ディスプレイ６１０は、ＣＲＴ（Cathode-Ray Tube）からなるディスプレイであってもよい。しかし本実施の形態では、ディスプレイ６１０は液晶からなることとする）、コンピュータハードウェア自体を集中的に管理し、かつ制御するＣＰＵ６２２と、ＲＯＭ（Read Only Memory）またはＲＡＭ（Random Access Memory）を含んで構成されるメモリ６２４と、固定ディスク６２６と、ＦＤ（Flexible Disk）６３２が着脱自在に装着されて、装着されたＦＤ６３２にアクセスするＦＤ駆動装置６３０と、ＣＤ−ＲＯＭ（Compact Disk Read Only Memory）６４２が着脱自在に装着されて、装着されたＣＤ−ＲＯＭ６４２にアクセスするＣＤ−ＲＯＭ駆動装置６４０と、通信ネットワークとコンピュータハードウェアとを接続し、かつ通信するための通信インターフェイス６８０と、キーによる入力を受付けるキーボード６５０とを含む。これらの各部はバスを介して通信かつ接続される。コンピュータハードウェアには、カセット形式の磁気テープを着脱自在に装着してアクセスする磁気テープ装置が設けられてもよい。ただし本実施の形態では、そのような装置は設けられていないこととする。一般的にこうしたソフトウェアは、ＦＤ６３２やＣＤ−ＲＯＭ６４２などの記録媒体に格納されて流通し、ＦＤ駆動装置６３０やＣＤ−ＲＯＭ駆動装置６４０などにより記録媒体から読取られて固定ディスク６２６に一旦格納される。さらにメモリ６２４に読出されて、上述したＣＰＵ６２２により実行される。上述したコンピュータのハードウェア自体は一般的なものである。したがって、本発明の最も本質的な部分は、ＦＤ６３２やＣＤ−ＲＯＭ６４２などの記録媒体に記録されたソフトウェアである。
【００３５】
サーバ６０は、図４に示すコンピュータハードウェアとＣＰＵ７２２により実行されるソフトウェアとにより実現される。図４を参照して、上述のコンピュータハードウェアは、図３を用いて説明したＣＰＵ６２２に代えて、これとは異なる制御を実施するＣＰＵ７２２と、図３に示すメモリ６２４に代えて、これとは異なる情報を記憶するメモリ７２４と、図３に示す固定ディスク６２６に代えて、これとは異なる情報を記憶する固定ディスク７２６とを含む。一般的にこうしたソフトウェアは、ＦＤ７３２やＣＤ−ＲＯＭ７４２などの記録媒体に格納されて流通し、ＦＤ駆動装置６３０やＣＤ−ＲＯＭ駆動装置６４０などにより記録媒体から読取られて固定ディスク７２６に一旦格納される。さらにメモリ７２４に読出されて、上述したＣＰＵ７２２により実行される。上述したコンピュータのハードウェア自体は一般的なものである。したがって、本発明の最も本質的な部分は、ＦＤ７３２やＣＤ−ＲＯＭ７４２などの記録媒体に記録されたソフトウェアである。なお、図４に示す図の中で、前述の図３に示した装置には同じ符号を付してある。それらの機能も同じである。したがって、それらについての詳細な説明はここでは繰り返さない。
【００３６】
図５および図６を参照して、本実施の形態に係る分散処理システムで実行されるプログラムは、サービスマシンの起動に関し、以下のような制御構造を有する。
【００３７】
ステップ１５０（以下、ステップをＳと略す。）にて、クライアントルーチン７０は、サービスルーチン部９２が含むサービスルーチンのいずれかを呼び出す。これにより、サービスルーチンの代わりに、クライアントスタブ部７８が含むクライアントスタブのいずれかが呼び出される。その際、クライアントルーチン７０は、パラメータとして、コールバックルーチン部７６が含むコールバックルーチンのいずれかを渡す。厳密に言うと、クライアントルーチン７０は、そのようなコールバックルーチンが記憶されたメモリ６２４のアドレスを渡す（すなわち、そのようなアドレスの値を、メモリ６２４のうち、クライアントスタブを実行中のＣＰＵ６２２が参照できるアドレスに記憶させる）。なお、以下の説明においても、パラメータとしてプログラムを渡す場合、実際にはそのようなプログラムが記憶されたメモリのアドレスが渡される。
【００３８】
Ｓ１５２にて、Ｓ１５０にて指定されたクライアントスタブは、コールバックスタブ検索部７２に対して、Ｓ１５０にてパラメータとして渡されたコールバックルーチンに対応するコールバックスタブの検索を要求する。
【００３９】
Ｓ１５４にて、コールバックスタブ検索部７２は、コールバックスタブ記憶部５４に記憶されている組情報を参照して、次の条件を満たすコールバックスタブを検索する（これは、コールバックスタブを特定することでもある）。第１の条件は、Ｓ１５０にてパラメータとして渡されたコールバックルーチンと「型」が同じことである。コールバックスタブの「型」は、型情報により表わされる。第２の条件は、ルーチン情報（このステップの場合、コールバックスタブに対応するルーチン情報のこと）が、Ｓ１５０にてパラメータとして渡されたコールバックルーチンを示すことである。これにより、コールバックスタブ検索部７２は、コールバックスタブ記憶部５４を参照して、コールバックサーバスタブ部８０が含むコールバックサーバスタブのうち、コールバックした情報を処理するコールバックルーチンに対応するコールバックサーバスタブを検索（特定）することとなる。
【００４０】
Ｓ１５６にて、コールバックスタブ検索部７２は、Ｓ１５０にてパラメータとして渡されたコールバックルーチンに対応するコールバックスタブが存在するか否かを判断する。そのようなコールバックスタブが存在すると判断した場合（Ｓ１５６にてＹＥＳ）、処理はＳ１５８へと移される。もしそうでないと（Ｓ１５６にてＮＯ）、処理はＳ１６０へと移される。
【００４１】
Ｓ１５８にて、コールバックスタブ検索部７２は、検索（特定）の結果（厳密には、Ｓ１５４にて説明した条件を満たすコールバックスタブのアドレス）を返す。その結果は、Ｓ１５２にてコールバックスタブの検索を要求したクライアントスタブに返される。
【００４２】
Ｓ１６０にて、コールバックスタブ検索部７２は、コールバックスタブ記憶部５４に記憶されている組情報を参照して、次の条件を満たすコールバックスタブを検索する（これも、コールバックスタブを特定することである）。第１の条件は、Ｓ１５０にてパラメータとして渡されたコールバックルーチンと「型」が同じことである。第２の条件は、ルーチン情報（このステップの場合、コールバックスタブに対応するルーチン情報のこと）が「Ｎ／Ａ」である（割当てられたコールバックルーチンが存在しない）ことである。
【００４３】
Ｓ１６２にて、コールバックスタブ検索部７２は、コールバックスタブ束縛部７４に対して次のことを要求する。その要求とは、Ｓ１６０にて説明した条件を満たすコールバックスタブをＳ１５０にてパラメータとして渡されたコールバックルーチンに対応付けるという要求である。コールバックスタブ束縛部７４は、コールバックスタブ（Ｓ１６０にて説明した条件を満たすコールバックスタブのこと）を表わすルーチン情報の内容を、Ｓ１５０にてパラメータとして渡されたコールバックルーチンを表わす情報に更新する。これにより、Ｓ１６０にて説明した条件を満たすコールバックスタブが、Ｓ１５０にてパラメータとして渡されたコールバックルーチンに対応付けられる。
【００４４】
Ｓ１６４にて、コールバックスタブ検索部７２は、Ｓ１５２にてコールバックスタブの検索を要求したクライアントスタブに対し、検索の結果を返す。検索の結果として返されるのは、ルーチン情報の内容が更新された組情報が表わすコールバックスタブのアドレスである。
【００４５】
Ｓ１６６にて、クライアントスタブ（Ｓ１６４にてコールバックスタブ検索部７２が検索の結果を返したクライアントスタブ）は、コールバックスタブ（Ｓ１６４にてコールバックスタブ検索部７２がクライアントスタブに対して返したコールバックスタブ）のスタブ情報を通信データに変換する。このスタブ情報は、Ｓ１５０にて渡されたパラメータの代わりに通信データに変換される。スタブ情報が通信データに変換されると、クライアントスタブ（コールバックスタブ検索部７２が検索の結果を返したクライアントスタブ）は、通信部５６に対し、送信先を指定して、変換した通信データを出力する。通信部５６は、クライアントスタブが出力した通信データをサーバ６０に送信する。これにより、このクライアントスタブは、サーバ６０に対して、サービスルーチン部９２における情報の処理を要求することとなる。
【００４６】
図７を参照して、本実施の形態に係る分散処理システムで実行されるプログラムは、コールバックの要求に関し、以下のような制御構造を有する。
【００４７】
Ｓ１７０にて、サーバ６０の通信部６４は、クライアント５０からの通信データを受信する。通信部６４は、受信した通信データをサーバスタブ部９０のいずれかのサーバスタブに出力する。通信データが出力されたサーバスタブは、その通信データから、コールバックスタブのスタブ情報を復元する。これにより、通信データが出力されたサーバスタブは、コールバックに利用するコールバックサーバスタブおよびコールバッククライアントスタブを特定できる。スタブ情報を復元したサーバスタブは、復元されたスタブ情報の内容に基づき、自ら特定したコールバックサーバスタブをパラメータとして（クライアント５０のコールバックルーチンをパラメータとする代わりに、コールバックサーバスタブをパラメータとする）、サービスルーチン部９２のいずれかのサービスルーチンを呼び出す。
【００４８】
Ｓ１７２にて、サービスルーチン（Ｓ１７０にて呼び出されたサービスルーチン。ただし本実施の形態の場合、後述する第１サービスルーチン１２４のみがこの処理を行なう。本実施の形態の場合、他のサービスルーチンはこの処理を行なわない。）は、自らが担当する処理を実行する。その実行の際、サービスルーチンは、コールバックを実施する。これにより、サービスルーチンは、通信部６４が、コールバックスタブ検索部７２が検索したコールバックサーバスタブを表わすスタブ情報を受信すると、コールバックを実施することとなる。コールバックを実施する際、サービスルーチンは、コールバッククライアントスタブ部９４が含むコールバッククライアントスタブのうち、Ｓ１７０にてパラメータとされたコールバッククライアントスタブを呼び出す。
【００４９】
Ｓ１７４にて、コールバッククライアントスタブ（Ｓ１７２にて呼び出されたコールバッククライアントスタブ。ただし本実施の形態の場合、後述する第２コールバッククライアントスタブ１３０のみがこの処理を行なう。本実施の形態の場合、他のサービスルーチンはこの処理を行なわない。）は、自らに渡されたパラメータ（スタブ情報およびその他の情報を含む）を通信データに変換する。パラメータが通信データに変換されると、コールバッククライアントスタブは、送信先を同じスタブ情報に対応するコールバックサーバスタブに指定して、変換した通信データを通信部６４に出力する。通信部６４は、クライアント５０に対しその通信データを送信する。これにより、このコールバッククライアントスタブは、クライアント５０に対して、コールバックサーバスタブの実行を要求することとなる。
【００５０】
図８を参照して、本実施の形態に係る分散処理システムで実行されるプログラムは、コールバックに関し、以下のような制御構造を有する。
【００５１】
Ｓ１８０にて、通信部５６は、サーバ６０から通信データを受信する。通信部５６は、コールバックサーバスタブ部８０のコールバックサーバスタブに、受信した通信データを出力する。通信データが出力されるコールバックサーバスタブは、通信データが表わすスタブ情報に対応するコールバックサーバスタブである。このとき、通信部５６は、通信データをどのコールバックサーバスタブに出力すべきか判断できない。そこで、ＣＰＵ６２２が、通信データを解析することにより、その通信データが出力されるべきコールバックサーバスタブを特定する。コールバックサーバスタブが特定されると、ＣＰＵ６２２は、その特定されたコールバックサーバスタブとして動作する。これにより、通信部５６は、通信データが表わすスタブ情報に対応するコールバックサーバスタブに、通信データを出力できる。通信データが出力されたコールバックサーバスタブは、サーバ６０からの通信データを、コールバックルーチンが処理できる情報（サービスルーチンがコールバッククライアントスタブに渡したパラメータを含む）に変換する。通信データを変換したコールバックサーバスタブは、コールバックスタブ記憶部５４に記憶された組情報を参照して、自らに対応付けられたコールバックルーチンを特定する。コールバックルーチンが特定されると、コールバックサーバスタブは、特定されたコールバックルーチンを呼び出す。コールバックサーバスタブは、コールバックルーチンを呼び出す際のパラメータとして、通信データから変換したパラメータを用いる。
【００５２】
Ｓ１８２にて、コールバックルーチンは自らの処理を実行する。これにより、コールバックルーチンは、サーバ６０がクライアント５０にコールバックした際に通信部５６が受信した情報を処理することとなる。コールバックルーチンは、処理を実行した結果得た値を、Ｓ１８０にて自らに処理を実行させたコールバックサーバスタブに返す。
【００５３】
Ｓ１８４にて、コールバックサーバスタブは、コールバックルーチンから受取った値を通信データに変換する。値が通信データに変換されると、コールバックサーバスタブは、Ｓ１７４にてコールバックサーバスタブの実行を要求したコールバッククライアントスタブを送信先に指定して、通信データを通信部５６に出力する。通信部５６は、出力された通信データをサーバ６０に送信する。
【００５４】
図９を参照して、本実施の形態に係る分散処理システムで実行されるプログラムは、サービスルーチンにおける演算に関し、以下のような制御構造を有する。
【００５５】
Ｓ１９０にて、通信部６４は、クライアント５０から通信データを受信する。通信部６４は、受信した通信データをコールバッククライアントスタブ部９４のいずれかのコールバッククライアントスタブに出力する。コールバッククライアントスタブは、出力された通信データを元の値（Ｓ１８２にてコールバックルーチンが得た値）に変換する。コールバッククライアントスタブは、コールバックの戻り値として、サービスルーチン部９２のサービスルーチンのうち、Ｓ１７２にて自らを呼び出したサービスルーチンに、通信データから変換された値を渡す。
【００５６】
Ｓ１９２にて、サービスルーチンは、コールバッククライアントスタブから戻り値を受取ると、自身の処理を継続する。処理が完了すると、サービスルーチンは、戻り値をサーバスタブ部９０のサーバスタブのうち、Ｓ１７０にて自らを呼び出したサーバスタブに渡す。
【００５７】
Ｓ１９４にて、戻り値を渡されたサーバスタブは、渡された戻り値を、クライアント５０のクライアントスタブ部７８が利用できる通信データに変換する。サーバスタブは、Ｓ１６６にて自らにスタブ情報を送信したクライアントスタブを送信先に指定して、変換した通信データを通信部６４に出力する。通信部６４は、出力された通信データをクライアント５０に送信する。
【００５８】
図１０を参照して、本実施の形態に係る分散処理システムで実行されるプログラムは、サーバ６０からの値の受信に関し、以下のような制御構造を有する。
【００５９】
Ｓ２００にて、通信部５６は、サーバ６０から通信データを受信する。通信データが受信されると、通信部５６は、その通信データをクライアントスタブ部７８のいずれかのクライアントスタブに渡す。
【００６０】
Ｓ２０２にて、クライアントスタブは、渡された通信データを元の戻り値に変換する。通信データが戻り値に変換されると、クライアントスタブは、戻り値をクライアントルーチン７０に渡す。クライアントルーチン７０は、戻り値を受取ると、自身の処理を完了させる。
【００６１】
図１１を参照して、本実施の形態に係る分散処理システムで実行されるプログラムは、サービスルーチンの演算に関し、以下のような制御構造を有する。なお、図１１に示すフローチャートの中で、前述の図７に示した処理は同じステップ番号を付してある。それらの処理も同じである。したがって、それらについての詳細な説明はここでは繰返さない。
【００６２】
Ｓ２１０にて、サービスルーチン（Ｓ１７０にて呼び出されたサービスルーチン。ただし本実施の形態の場合、後述する第２サービスルーチン１２６のみがこの処理を行なう。本実施の形態の場合、他のサービスルーチンはこの処理を行なわない。）は、自らが担当する処理を実行する。その途中で、サービスルーチンは、パラメータとして与えられたコールバックサーバスタブを記憶する。サービスルーチンは、自らが担当する処理が完了すると、その戻り値をサーバスタブ（Ｓ１７０にて自らを呼び出したサーバスタブ）に返す。
【００６３】
Ｓ２１２にて、戻り値が返されたサーバスタブ（本実施の形態の場合、後述する第２サーバスタブ１２２のみがこの処理を行なう。本実施の形態の場合、他のサービスルーチンはこの処理を行なわない。）は、その戻り値を通信データに変換する。戻り値が通信データに変換されると、サーバスタブは、送信先としてクライアントスタブ（Ｓ１６６にて自らを送信先に指定したクライアントスタブ）を指定して、通信データを通信部６４に出力する。通信部６４は、通信データをクライアント５０に送信する（Ｓ２１２）。
【００６４】
以上のような構造およびフローチャートに基づく、分散処理システムの動作について説明する。
【００６５】
図１２を参照して、本実施の形態に係るコールバックルーチン部７６は、第１コールバックルーチン１００（第１コールバックルーチン１００の型は「Ｔ」とする。第１コールバックルーチン１００のルーチン情報を「ｃａｌｌｂａｃｋ１」とする。）と第２コールバックルーチン１０２（第２コールバックルーチン１０２の型も「Ｔ」とする。第２コールバックルーチン１０２のルーチン情報を「ｃａｌｌｂａｃｋ２」とする。）とを含む。第１コールバックルーチン１００および第２コールバックルーチン１０２は、いずれもサーバ６０がクライアント５０にコールバックした情報を処理するルーチンである。クライアントスタブ部７８は、第１クライアントスタブ１０８と第２クライアントスタブ１１０とを含む。コールバックサーバスタブ部８０は、第１コールバックサーバスタブ１０４と、第２コールバックサーバスタブ１０６とを含む。第１コールバックサーバスタブ１０４および第２コールバックサーバスタブ１０６は、いずれも、サーバ６０からの情報を、コールバックルーチン部７６が処理できる情報に変換する。サーバスタブ部９０は、第１サーバスタブ１２０と、第２サーバスタブ１２２とを含む。サービスルーチン部９２は、第１サービスルーチン１２４と、第２サービスルーチン１２６とを含む。コールバッククライアントスタブ部９４は、第１コールバッククライアントスタブ１２８と、第２コールバッククライアントスタブ１３０とを含む。ちなみに、本実施の形態において、第１コールバックサーバスタブ１０４および第１コールバッククライアントスタブ１２８に対応するスタブ情報の値は「１０１」である。第２コールバックサーバスタブ１０６および第２コールバッククライアントスタブ１３０に対応するスタブ情報の値は「１０２」である。
【００６６】
クライアントルーチン７０は、サービスルーチン部９２が含む第２サービスルーチン１２６を呼び出す。これにより、第２サービスルーチン１２６の代わりに、クライアントスタブ部７８が含む第２クライアントスタブ１１０が呼び出される。その際、クライアントルーチン７０は、パラメータとして、コールバックルーチン部７６が含む第２コールバックルーチン１０２を渡す（Ｓ１５０）。第２クライアントスタブ１１０が呼び出されると、第２クライアントスタブ１１０は、コールバックスタブ検索部７２に対して、第２コールバックルーチン１０２に対応するコールバックスタブの検索を要求する（Ｓ１５２）。検索が要求されると、コールバックスタブ検索部７２は、コールバックスタブ記憶部５４を参照して、コールバックサーバスタブ部８０が含むコールバックサーバスタブのうち、第２コールバックルーチン１０２（サーバ６０がクライアント６０にコールバックした情報を処理するコールバックルーチン）に対応するコールバックサーバスタブを検索する（Ｓ１５４）。図１３を参照して、このときコールバックスタブ記憶部５４に記憶された組情報を説明する。このときコールバックスタブ記憶部５４に記憶された組情報は、スタブ情報を「１０１」、型情報を「Ｔ」、ルーチン情報を「Ｎ／Ａ」とする組情報（第１の組情報）と、スタブ情報を「１０２」、型情報を「Ｔ」、ルーチン情報を「Ｎ／Ａ」とする組情報（第２の組情報）とである。検索の後、コールバックスタブ検索部７２は、型情報の内容が「Ｔ」でルーチン情報の内容が「ｃａｌｌｂａｃｋ２」であるコールバックスタブが存在するか否か（コールバックルーチンに対応するコールバックサーバスタブが存在するか否か）を判断する（Ｓ１５６）。この場合、そのようなコールバックスタブは存在しないので（Ｓ１５６にてＮＯ）、コールバックスタブ検索部７２は、コールバックスタブ記憶部５４に記憶されている組情報を参照して、型情報の内容が「Ｔ」でルーチン情報の内容が「Ｎ／Ａ」であるコールバックスタブを検索する（Ｓ１６０）。この場合、そのようなコールバックスタブが記憶されているので（Ｓ１６０にてＹＥＳ）、コールバックスタブ束縛部７４は、Ｓ１６０にて説明した条件を満たすコールバックスタブを第２コールバックルーチン１０２に対応付ける（Ｓ１６２）。このために、コールバックスタブ束縛部７４は、第１の組情報が含むルーチン情報の内容「Ｎ／Ａ」を、Ｓ１５０にてパラメータとして渡されたコールバックルーチンを表わす情報「ｃａｌｌｂａｃｋ２」に更新する（第１の組情報を更新するか第２組情報を更新するかはコールバックスタブ検索部７２が任意に決定する）。これにより、コールバックスタブ束縛部７４は、コールバックルーチンに対応するコールバックサーバスタブが存在しないとコールバックスタブ検索部７２が判断した場合、コールバックルーチンおよびコールバックサーバスタブの対応関係を表わす情報を生成することとなる。図１４は、情報が更新された後のコールバックスタブ記憶部５４の内容を表わす図である。コールバックルーチンが対応付けられると、コールバックスタブ検索部７２は、検索の結果（第１コールバックサーバスタブ１０４）を第２クライアントスタブ１１０に返す（Ｓ１６４）。検索の結果が返されると、第２クライアントスタブ１１０は、第１コールバックサーバスタブ１０４のスタブ情報「１０１」を通信データに変換する。スタブ情報が通信データに変換されると、第２クライアントスタブ１１０は、通信部５６に対し、送信先をサーバスタブ部９０の第２サーバスタブ１２２に指定して、変換した通信データを出力する。これにより、第２クライアントスタブ１１０は、コールバックスタブ検索部７２が検索したコールバックサーバスタブを表わすスタブ情報を送信するように、通信部５６を制御することとなる。通信部５６は、第２クライアントスタブ１１０が出力した通信データをサーバ６０に送信する（Ｓ１６６）。
【００６７】
通信データが送信されると、サーバ６０の通信部６４は、通信データを受信する。通信データが受信されると、通信部６４は、その通信データを第２サーバスタブ１２２に出力する。第２サーバスタブ１２２は、その通信データから、コールバックスタブのスタブ情報を復元する。第２サーバスタブ１２２は、復元されたスタブ情報の内容が「１０１」であることから、第１コールバッククライアントスタブ１２８をパラメータとして、第２サービスルーチン１２６を呼び出す（Ｓ１７０）。第２サービスルーチン１２６は、自らが担当する処理を実行する。その途中で、第２サービスルーチン１２６は、パラメータとして与えられた第１コールバッククライアントスタブ１２８を記憶する。第２サービスルーチン１２６は、自らが担当する処理が完了すると、その戻り値を第２サーバスタブ１２２に返す（Ｓ２１０）。戻り値が返された第２サーバスタブ１２２は、その戻り値を通信データに変換する。戻り値が通信データに変換されると、第２サーバスタブ１２２は、送信先として第２クライアントスタブ１１０を指定して、通信データを通信部６４に出力する。通信部６４は、通信データをクライアント５０に送信する（Ｓ２１２）。
【００６８】
通信データが送信されると、クライアント５０の通信部５６は、サーバ６０から通信データを受信する。通信データが受信されると、通信部５６は、その通信データを第２クライアントスタブ１１０に渡す（Ｓ２００）。通信データが渡されると、第２クライアントスタブ１１０は、渡された通信データを元の戻り値に変換する。通信データが戻り値に変換されると、第２クライアントスタブ１１０は、戻り値をクライアントルーチン７０に渡す。クライアントルーチン７０は、戻り値を受取ると、自身の処理を完了させる（Ｓ２０２）。
【００６９】
処理がいったん完了すると、クライアントルーチン７０は、第１サービスルーチン１２４を呼び出す。これにより、第１サービスルーチン１２４の代わりに、第１クライアントスタブ１０８が呼び出される。その際、クライアントルーチン７０は、パラメータとして、第１コールバックルーチン１００を渡す（Ｓ１５０）。第１クライアントスタブ１０８が呼び出されると、第１クライアントスタブ１０８は、コールバックスタブ検索部７２に対して、第１コールバックルーチン１００に対応するコールバックスタブの検索を要求する（Ｓ１５２）。検索が要求されると、コールバックスタブ検索部７２は、コールバックスタブを検索する（Ｓ１５４）。上述した通り、このときコールバックスタブ記憶部５４に記憶された組情報は、スタブ情報を「１０１」、型情報を「Ｔ」、ルーチン情報を「ｃａｌｌｂａｃｋ２」とする第１の組情報と、第２の組情報とである。検索の結果、コールバックスタブ検索部７２は、型情報の内容が「Ｔ」でルーチン情報の内容が「ｃａｌｌｂａｃｋ１」であるコールバックスタブが存在するか否かを判断する（Ｓ１５６）。この場合、そのようなコールバックスタブは存在しないので（Ｓ１５６にてＮＯ）、コールバックスタブ検索部７２は、コールバックスタブ記憶部５４に記憶されている組情報を参照して、型情報の内容が「Ｔ」でルーチン情報の内容が「Ｎ／Ａ」であるコールバックスタブを検索する（Ｓ１６０）。この場合、そのようなコールバックスタブが記憶されているので（Ｓ１６０にてＹＥＳ）、コールバックスタブ束縛部７４は、Ｓ１６０にて説明した条件を満たすコールバックスタブを第１コールバックルーチン１００に対応付ける（Ｓ１６２）。このために、コールバックスタブ束縛部７４は、第２の組情報が含むルーチン情報の内容「Ｎ／Ａ」を、Ｓ１５０にてパラメータとして渡されたコールバックルーチンを表わす情報「ｃａｌｌｂａｃｋ１」に更新する。図１５は、情報が更新された後のコールバックスタブ記憶部５４の内容を表わす図である。これにより、コールバックスタブ束縛部７４は、コールバックルーチンおよびコールバックサーバスタブの対応関係を表わす情報を生成することとなる。コールバックルーチンが対応付けられると、コールバックスタブ検索部７２は、検索の結果（第２コールバックサーバスタブ１０６）を第１クライアントスタブ１０８に返す（Ｓ１６４）。検索の結果が返されると、第１クライアントスタブ１０８は、第２コールバックサーバスタブ１０６のスタブ情報「１０２」を通信データに変換する。スタブ情報が通信データに変換されると、第１クライアントスタブ１０８は、通信部５６に対し、送信先をサーバスタブ部９０の第１サーバスタブ１２０に指定して、変換した通信データを出力する。通信部５６は、第１クライアントスタブ１０８が出力した通信データをサーバ６０に送信する（Ｓ１６６）。これにより、第１クライアントスタブ１０８は、コールバックスタブ検索部７２が検索したコールバックサーバスタブを表わすスタブ情報を送信するように、通信部５６を制御することとなる。
【００７０】
通信データが送信されると、サーバ６０の通信部６４は、通信データを受信する。通信データが受信されると、通信部６４は、その通信データを第１サーバスタブ１２０に出力する。第１サーバスタブ１２０は、その通信データから、コールバックスタブのスタブ情報を復元する。第１サーバスタブ１２０は、復元されたスタブ情報の内容が「１０２」であることから、第２コールバッククライアントスタブ１３０をパラメータとして、第１サービスルーチン１２４を呼び出す（Ｓ１７０）。第１サービスルーチン１２４は、自らが担当する処理を実行する。その実行の際、第１サービスルーチン１２４は、コールバックを実施する。これにより、第１サービスルーチン１２４は、通信部６４が、第２コールバックサーバスタブ１０６（コールバックスタブ検索部７２が検索したコールバックサーバスタブ）を表わすスタブ情報を受信すると、コールバックを実施することとなる。コールバックを実施する際、第１サービスルーチン１２４は、第２コールバッククライアントスタブ１３０を呼び出す（Ｓ１７２）。第２コールバッククライアントスタブ１３０は、クライアント５０に対して、第２コールバックサーバスタブ１０６の実行を要求する（Ｓ１７４）。
【００７１】
クライアント５０の通信部５６は、サーバ６０から通信データを受信する。通信部５６は、第２コールバックサーバスタブ１０６に、受信した通信データを出力する。第２コールバックサーバスタブ１０６は、サーバ６０からの情報を、コールバックルーチン（この場合、第１コールバックルーチン１００）が処理できる情報（第１サービスルーチン１２４が第２コールバッククライアントスタブ１３０に渡したパラメータを含む）に変換する。通信データを変換した第２コールバックサーバスタブ１０６は、コールバックスタブ記憶部５４に記憶された組情報を参照して、自らに対応付けられたコールバックルーチン（第１コールバックルーチン１００）を特定する。コールバックルーチンが特定されると、第２コールバックサーバスタブ１０６は、第１コールバックルーチン１００を呼び出す。第２コールバックサーバスタブ１０６は、第１コールバックルーチン１００を呼び出す際のパラメータとして、通信データから変換したパラメータを用いる（Ｓ１８０）。第１コールバックルーチン１００が呼び出されると、第１コールバックルーチン１００は自らの処理を実行する。これにより、第１コールバックルーチン１００は、サーバ６０がクライアント５０にコールバックした情報を処理することとなる。処理が実行されると、第１コールバックルーチン１００は、処理を実行した結果得た値を第２コールバックサーバスタブ１０６に返す（Ｓ１８２）。値が返されると、第２コールバックサーバスタブ１０６は、第１コールバックルーチン１００から受取った結果を通信データに変換する。値が通信データに変換されると、第２コールバックサーバスタブ１０６は、第２コールバッククライアントスタブ１３０を送信先に指定して、通信データを通信部５６に出力する。通信部５６は、出力された通信データをサーバ６０に送信する（Ｓ１８４）。
【００７２】
通信データが送信されると、サーバ６０の通信部６４は、その通信データを受信する。通信データが受信されると、通信部６４は、その通信データを第２コールバッククライアントスタブ１３０に出力する。第２コールバッククライアントスタブ１３０は出力された通信データを元の値に変換する。通信データが元の値に変換されると、第２コールバッククライアントスタブ１３０は、コールバックの戻り値として、第１サービスルーチン１２４に、通信データから変換された値を渡す（Ｓ１９０）。値が渡されると、第１サービスルーチン１２４は、自身の処理を継続する。処理が完了すると、第１サービスルーチン１２４は、戻り値を第１サーバスタブ１２０に渡す（Ｓ１９２）。戻り値が渡されると、第１サーバスタブ１２０は、渡された戻り値をクライアント５０のクライアントスタブ部７８が利用できる通信データに変換する。戻り値が通信データに変換されると、第１サーバスタブ１２０は、送信先として第１クライアントスタブ１０８を指定して、その通信データを通信部６４に出力する。通信部６４は、その通信データをクライアント５０に送信する（Ｓ１９４）。
【００７３】
通信データが送信されると、クライアント５０の通信部５６は、サーバ６０から通信データを受信する。通信データが受信されると、通信部５６は、その通信データを第１クライアントスタブ１０８に渡す（Ｓ２００）。通信データが渡されると、第１クライアントスタブ１０８は、渡された通信データを元の戻り値に変換する。通信データが戻り値に変換されると、第１クライアントスタブ１０８は、戻り値をクライアントルーチン７０に渡す。クライアントルーチン７０は、戻り値を受取ると、自身の処理を完了させる（Ｓ２０２）。
【００７４】
以上のようにして、本実施の形態に係る分散処理システムは、クライアントが、コールバックルーチンを指定した上でサーバ内のサービスルーチンを呼び出すとき、サービスルーチンの実行後にそのコールバックルーチンが呼び出されたとしても、前述のコールバックルーチンが正しく呼び出される。このことは、サービスルーチンが非ブロッキング動作（処理が完了するよりも前の段階で一旦実行制御が呼び出し元のルーチンに帰る動作）を行なう場合にも同様である。その結果、適切に情報を処理できる分散処理システムを提供することができる。
【００７５】
今回開示された実施の形態はすべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【００７６】
【図１】本発明の実施の形態に係る分散処理システムの全体構成図である。
【図２】本発明の実施の形態に係るコールバックスタブ記憶部が記憶する情報を表わす図である。
【図３】本発明の実施の形態に係るクライアントを実現するコンピュータハードウェアの制御ブロック図である。
【図４】本発明の実施の形態に係るサーバを実現するコンピュータハードウェアの制御ブロック図である。
【図５】本発明の実施の形態に係るサーバの起動処理の制御の手順を示すフローチャート（その１）である。
【図６】本発明の実施の形態に係るサーバの起動処理の制御の手順を示すフローチャート（その２）である。
【図７】本発明の実施の形態に係るコールバックの要求処理の制御の手順を示すフローチャートである。
【図８】本発明の実施の形態に係るコールバック処理の制御の手順を示すフローチャートである。
【図９】本発明の実施の形態に係るサービスルーチンにおける演算処理の制御の手順を示すフローチャートである。
【図１０】本発明の実施の形態に係るサーバの実行結果の受信処理の制御の手順を示すフローチャートである。
【図１１】本発明の実施の形態に係るサービスルーチンの演算処理の制御の手順を示すフローチャートである。
【図１２】本発明の実施の形態に係る分散処理システムの全体構成図である。
【図１３】本発明の実施の形態におけるコールバックスタブ記憶部の当初の内容を表わす図である。
【図１４】本発明の実施の形態に係るコールバックスタブ記憶部の対応付けの後の内容を表わす図（その１）である。
【図１５】本発明の実施の形態に係るコールバックスタブ記憶部の対応付けの後の内容を表わす情報（その２）である。
【符号の説明】
【００７７】
４０  バス、５０  クライアント、５２，６２  実行部、５４  コールバックスタブ記憶部、５６，６４  通信部、６０  サーバ、７０  クライアントルーチン、７２  コールバックスタブ検索部、７４  コールバックスタブ束縛部、７６  コールバックルーチン部、７８  クライアントスタブ部、８０  コールバックサーバスタブ部、９０  サーバスタブ部、９２  サービスルーチン部、９４  コールバッククライアントスタブ部、１００  第１コールバックルーチン、１０２  第２コールバックルーチン、１０４  第１コールバックサーバスタブ、１０６  第２コールバックサーバスタブ、１０８  第１クライアントスタブ、１１０  第２クライアントスタブ、１２０  第１サーバスタブ、１２２  第２サーバスタブ、１２４  第１サービスルーチン、１２６  第２サービスルーチン、１２８  第１コールバッククライアントスタブ、１３０  第２コールバッククライアントスタブ、６１０  ディスプレイ、６２２，７２２  ＣＰＵ、６２４，７２４  メモリ、６２６，７２６  固定ディスク、６３０  ＦＤ駆動装置、６３２，７３２  ＦＤ、６４０  ＣＤ−ＲＯＭ駆動装置、６４２，７４２  ＣＤ−ＲＯＭ、６５０  キーボード、６８０  通信インターフェイス。
【図１】
2006195584.tif 000003
【図２】
2006195584.tif 000004
【図３】
2006195584.tif 000005
【図４】
2006195584.tif 000006
【図５】
2006195584.tif 000007
【図６】
2006195584.tif 000008
【図７】
2006195584.tif 000009
【図８】
2006195584.tif 000010
【図９】
2006195584.tif 000011
【図１０】
2006195584.tif 000012
【図１１】
2006195584.tif 000013
【図１２】
2006195584.tif 000014
【図１３】
2006195584.tif 000015
【図１４】
2006195584.tif 000016
【図１５】
2006195584.tif 000017