(57)【特許請求の範囲】
【請求項１】
ネットワークを介して接続された他のコンピュータ上で動作するプロセスあるいは同一のコンピュータ上で動作するプロセスから、機能呼び出しのメッセージを受けるプロセスを所定のオペレーティングシステム上で動作させるコンピュータであって、
前記機能呼び出しを受けるプロセスは、
前記機能呼び出しの対象となる機能を提供するアプリケーションプログラムと、
前記機能呼び出しのメッセージを受けたときに、当該メッセージに応じた機能呼び出し処理のうち、前記アプリケーションプログラムを記述したプログラム言語の種類に依存しない処理を行うプログラム言語非依存部と、
前記メッセージに応じた機能呼び出し処理のうち、前記プログラム言語の種類に依存する処理を行うプログラム言語依存部と、
によって実行され、
前記機能呼び出しのメッセージにおいて、任意のデータ構造体が、前記アプリケーションプログラムで使用されるデータの表現形式の引数として扱われ、
当該引数は、当該メッセージにおいて、前記アプリケーションプログラムで使用されるデータの表現形式から、ネットワーク間で通信に使用されるデータの表現形式に変換され、
前記プログラム言語非依存部は、
ネットワークを介して接続された他のコンピュータ上で動作するプロセスあるいは同一のコンピュータ上で動作するプロセスの機能を呼び出すためのメッセージ送信と、
前記受けたメッセージによって呼び出しを行う機能を特定する参照情報を、前記機能呼び出しを行うプロセス外でユニークな外部参照情報から、当該プロセス内でユニークな内部参照情報に変換する参照解決と、
前記メッセージの実行タイミングを決定するメッセージ評価スケジューリングと、
を行い、
前記プログラム言語依存部は、
前記プログラム言語非依存部によって実行タイミングが決定されたメッセージに応じた機能呼び出しに対応する前記アプリケーションプログラムの機能を起動して当該機能呼び出し処理を行うとともに、
前記メッセージの受け付け用の新たな前記メッセージに応じた機能呼び出し処理を起動して当該機能呼び出し処理に基づくメッセージ受け付け処理を並行して行う
コンピュータ。
【請求項２】
前記機能呼び出しの処理の起動および前記アプリケーションプログラムの機能の起動は、
前記プログラム言語依存部が、当該プロセスにおける新たなスレッドの生成要求を発生することによって行う
請求項１に記載のコンピュータ。
【請求項３】
前記プログラム言語依存部は、前記スレッドの生成要求に応じて、前記新たなスレッドを生成するスレッド生成部を有し、
前記アプリケーションプログラムおよび前記プログラム言語依存部は、前記プログラム言語依存部内で前記スレッドを生成するプログラム言語で記述されたプログラムである
請求項２に記載のコンピュータ。
【請求項４】
前記オペレーティングシステムは、前記プログラム言語依存部が発生した前記スレッドの生成要求に応じて、前記新たなスレッドを生成し、
前記アプリケーションプログラムおよび前記プログラム言語依存部は、前記オペレーティングシステムに前記スレッド生成を実行させるプログラム言語で記述されたプログラムである
請求項２に記載のコンピュータ。
【請求項５】
ネットワークを介して接続された複数のコンピュータのオペレーティングシステム上で動作するプロセス相互間で機能呼び出しを行いながら処理を実行する並列分散システムにおいて、
前記コンピュータの前記機能呼び出しを受けるプロセスは、
前記機能呼び出しの対象となる機能を提供するアプリケーションプログラムと、
前記機能呼び出しのメッセージを受けたときに、当該メッセージに応じた機能呼び出し処理のうち、前記アプリケーションプログラムを記述したプログラム言語の種類に依存しない処理を行うプログラム言語非依存部と、
前記メッセージに応じた機能呼び出し処理のうち、前記プログラム言語の種類に依存する処理を行うプログラム言語依存部と、
によって実行され、
前記機能呼び出しのメッセージにおいて、任意のデータ構造体が、前記アプリケーションプログラムで使用されるデータの表現形式の引数として扱われ、
当該引数は、当該メッセージにおいて、前記アプリケーションプログラムで使用されるデータの表現形式から、ネットワーク間で通信に使用されるデータの表現形式に変換され、
前記プログラム言語非依存部は、
ネットワークを介して接続された他のコンピュータ上で動作するプロセスあるいは同一のコンピュータ上で動作するプロセスの機能を呼び出すためのメッセージ送信と、
前記受けたメッセージによって呼び出しを行う機能を特定する参照情報を、前記機能呼び出しを行うプロセス外でユニークな外部参照情報から、当該プロセス内でユニークな内部参照情報に変換する参照解決と、
前記メッセージの実行タイミングを決定するメッセージ評価スケジューリングと、
を行い、
前記プログラム言語依存部は、
前記プログラム言語非依存部によって実行タイミングが決定されたメッセージに応じた機能呼び出しに対応する前記アプリケーションプログラムの機能を起動して当該機能呼び出し処理を行うとともに、
前記メッセージの受け付け用の新たな前記メッセージに応じた機能呼び出し処理を起動して当該機能呼び出し処理に基づくメッセージ受け付け処理を並行して行う
並列分散システム。
【請求項６】
プロセス相互間で機能呼び出しを行う機能呼び出し方法において、
前記機能呼び出しを受けるプロセスは、
前記機能呼び出しのメッセージを受けたときに、当該メッセージに応じた機能呼び出し処理のうち、アプリケーションプログラムを記述するプログラム言語の種類に依存しない処理をプログラム言語非依存部で行い、
前記メッセージに応じた機能呼び出し処理のうち、前記プログラム言語の種類に依存する処理をプログラム言語依存部で行い、
前記機能呼び出しのメッセージにおいて、任意のデータ構造体が、前記アプリケーションプログラムで使用されるデータの表現形式の引数として扱われ、
当該引数は、当該メッセージにおいて、前記アプリケーションプログラムで使用されるデータの表現形式から、ネットワーク間で通信に使用されるデータの表現形式に変換され、
前記プログラム言語非依存部は、
ネットワークを介して接続された他のコンピュータ上で動作するプロセスあるいは同一のコンピュータ上で動作するプロセスの機能を呼び出すためのメッセージ送信処理と、
前記受けたメッセージによって呼び出しを行う機能を特定する参照情報を、前記機能呼び出しを行うプロセス外でユニークな外部参照情報から、当該プロセス内でユニークな内部参照情報に変換する参照解決処理と、
前記メッセージの実行タイミングを決定するメッセージ評価スケジューリング処理と、
を行い、
前記プログラム言語依存部は、
前記プログラム言語非依存部によって実行タイミングが決定されたメッセージに応じた機能呼び出しに対応する前記アプリケーションプログラムの機能を起動して当該機能呼び出し処理を行うとともに、
前記メッセージの受け付け用の新たな前記メッセージに応じた機能呼び出し処理を起動して当該機能呼び出し処理に基づくメッセージ受け付け処理を並行して行う
機能呼び出し方法。
【発明の詳細な説明】
【０００１】
【発明が属する技術分野】
本発明は、例えば、ネットワークを介して接続されたコンピュータ上で動作するプロセス相互間で機能呼び出しを行うコンピュータ、並列分散システムおよび機能呼び出し方法に関する。
【０００２】
【従来の技術】
種々の計算リソースを、電話回線、ケーブルテレビ、衛星通信などのネットワークを介して複数のコンピュータを接続したネットワークシステムが急速に普及している。そのようなネットワークシステムとして、複数のオブジェクトをネットワークワイドにコンピュータ上に配置し、それらを連携させて所望の処理を行う並列分散システムがある。
従来、このような並列分散システムを実現するために、多数の分散処理言語が提案されている。また、ＪａｖａＲＭＩ(Remote Method Invocation)やＨＯＲＢなど、特定の言語に限定された分散システム構築機能が試みられている。
しかしながら、プログラミングに関する柔軟なアプローチが要求される分散マルチメディアシステムなどでは、多様なプログラム言語で記述され、しかも、多様なＯＳ(Operating System)上で動作するプロセスが管理する並行オブジェクト相互間でのメッセージ通信を実現したいという要請がある。ここで、並行オブジェクトには、分散オブジェクト、分散手続き（関数）および大域共有変数などがある。
【０００３】
ところで、従来の並列分散システムにおける並行オブジェクト相互間のメッセージ通信機構は、例えば、ＯＳと、プログラム言語に依存した分散プラットフォームライブラリと、当該プログラム言語で記述された単数または複数の並行オブジェクトから構成されたユーザアプリケーションプログラムとを用いて実現されている。
ここで、分散プラットフォームライブラリは、並行オブジェクト相互間でのメッセージ通信に必要な処理を行う種々のモジュールを備え、一部のモジュールでは、スレッドの制御を伴う処理を行っている。スレッドは、機能呼び出しのためのメッセージ通信に関する処理の流れを意味し、プログラム言語の種類によって、分散プラットフォームライブラリ（プログラム言語処理系）によって生成される場合と、ＯＳによって生成される場合とがある。
【０００４】
図７は、従来の並列分散システムにおけるメッセージ通信機構を説明するための図である。
なお、図７に示す分散プラットフォームライブラリ１１２および１１６には、説明の簡単化のため、メッセージ受信に関係するモジュールのみ示されている。
図７（Ａ）に示すように、ユーザアプリケーションプログラム１１０がプログラム言語「Ｊａｖａ」で記述されている場合には、分散プラットフォームライブラリ１１２も「Ｊａｖａ」で記述される。また、図７（Ｂ）に示すように、ユーザアプリケーションプログラム１１４がプログラム言語「Ｃ＋＋」で記述されている場合には、分散プラットフォームライブラリ１１６も「Ｃ＋＋」で記述される。
すなわち、プログラム言語毎に、分散プラットフォームライブラリを用意している。
【０００５】
このように、プログラム言語毎に分散プラットフォームライブラリを用意するのは以下の理由による。
前述したように、分散プラットフォームライブラリ１１２および１１６では、スレッドの制御を行っており、プログラム言語「Ｊａｖａ」では、ＯＳ以下のプラットフォームに依存しないでプログラムが記述できるように分散プラットフォームライブラリ１１２で生成されたＪａｖａ（疑似）スレッド１３０が用いられ、プログラム言語「Ｃ＋＋」では、分散プラットフォームライブラリ１１６からのスレッド生成要求１３２に応じてＯＳ１１８が生成したネイティブスレッド１３４が用いられる。
【０００６】
ここで、スレッドの実現方法は各プログラム言語毎に異なるため、一のプログラム言語のスレッドを、他のプログラム言語の分散プラットフォームライブラリにおけるスレッド制御の対象とすることはできない。
従って、分散プラットフォームライブラリ１１２において、プログラム言語「Ｃ＋＋」に応じてＯＳ１１８が提供したネイティブスレッドを用いることはできず、分散プラットフォームライブラリ１１６において、分散プラットフォームライブラリ１１２が生成したＪａｖａスレッドを用いることはできない。
その結果、ユーザアプリケーションプログラム１１０および１１４は、それぞれ独自の分散プラットフォームライブラリ１１２および１１６を用いている。
【０００７】
【発明が解決しようとする課題】
しかしながら、前述した従来の並列分散システムのように、各プログラム言語毎に独自の分散プラットフォームライブラリを用いなければならないと、大規模な分散プラットフォームライブラリを各々のプログラム言語毎に開発する必要があり、開発およびデバッグ作業の負担が大きいという問題がある。
【０００８】
本発明は上述した従来技術の問題点に鑑みてなされ、プログラム言語毎に開発する分散プラットフォームライブラリの開発およびデバッグ作業の負担を軽減できるコンピュータ、並列分散システムおよび機能呼び出し方法を提供することを目的とする。
【０００９】
上述した従来技術の問題点を解決し、上述した目的を達成するために、本発明のコンピュータは、ネットワークを介して接続された他のコンピュータ上で動作するプロセスあるいは同一のコンピュータ上で動作するプロセスから、機能呼び出しのメッセージを受けるプロセスを所定のオペレーティングシステム上で動作させるコンピュータであって、前記機能呼び出しを受けるプロセスは、前記機能呼び出しの対象となる機能を提供するアプリケーションプログラムと、前記機能呼び出しのメッセージを受けたときに、当該メッセージに応じた機能呼び出し処理のうち、前記アプリケーションプログラムを記述したプログラム言語の種類に依存しない処理を行うプログラム言語非依存部と、前記メッセージに応じた機能呼び出し処理のうち、前記プログラム言語の種類に依存する処理を行うプログラム言語依存部と、によって実行され、前記機能呼び出しのメッセージにおいて、任意のデータ構造体が、前記アプリケーションプログラムで使用されるデータの表現形式の引数として扱われ、当該引数は、当該メッセージにおいて、前記アプリケーションプログラムで使用されるデータの表現形式から、ネットワーク間で通信に使用されるデータの表現形式に変換され、前記プログラム言語非依存部は、ネットワークを介して接続された他のコンピュータ上で動作するプロセスあるいは同一のコンピュータ上で動作するプロセスの機能を呼び出すためのメッセージ送信と、前記受けたメッセージによって呼び出しを行う機能を特定する参照情報を、前記機能呼び出しを行うプロセス外でユニークな外部参照情報から、当該プロセス内でユニークな内部参照情報に変換する参照解決と、前記メッセージの実行タイミングを決定するメッセージ評価スケジューリングと、を行い、前記プログラム言語依存部は、前記プログラム言語非依存部によって実行タイミングが決定されたメッセージに応じた機能呼び出しに対応する前記アプリケーションプログラムの機能を起動して当該機能呼び出し処理を行うとともに、前記メッセージの受け付け用の新たな前記メッセージに応じた機能呼び出し処理を起動して当該機能呼び出し処理に基づくメッセージ受け付け処理を並行して行う。
【００１０】
本発明の並列分散システムは、ネットワークを介して接続された複数のコンピュータのオペレーティングシステム上で動作するプロセス相互間で機能呼び出しを行いながら処理を実行する並列分散システムにおいて、前記コンピュータの前記機能呼び出しを受けるプロセスは、前記機能呼び出しの対象となる機能を提供するアプリケーションプログラムと、前記機能呼び出しのメッセージを受けたときに、当該メッセージに応じた機能呼び出し処理のうち、前記アプリケーションプログラムを記述したプログラム言語の種類に依存しない処理を行うプログラム言語非依存部と、前記メッセージに応じた機能呼び出し処理のうち、前記プログラム言語の種類に依存する処理を行うプログラム言語依存部と、によって実行され、前記機能呼び出しのメッセージにおいて、任意のデータ構造体が、前記アプリケーションプログラムで使用されるデータの表現形式の引数として扱われ、当該引数は、当該メッセージにおいて、前記アプリケーションプログラムで使用されるデータの表現形式から、ネットワーク間で通信に使用されるデータの表現形式に変換され、前記プログラム言語非依存部は、ネットワークを介して接続された他のコンピュータ上で動作するプロセスあるいは同一のコンピュータ上で動作するプロセスの機能を呼び出すためのメッセージ送信と、前記受けたメッセージによって呼び出しを行う機能を特定する参照情報を、前記機能呼び出しを行うプロセス外でユニークな外部参照情報から、当該プロセス内でユニークな内部参照情報に変換する参照解決と、前記メッセージの実行タイミングを決定するメッセージ評価スケジューリングと、を行い、前記プログラム言語依存部は、前記プログラム言語非依存部によって実行タイミングが決定されたメッセージに応じた機能呼び出しに対応する前記アプリケーションプログラムの機能を起動して当該機能呼び出し処理を行うとともに、前記メッセージの受け付け用の新たな前記メッセージに応じた機能呼び出し処理を起動して当該機能呼び出し処理に基づくメッセージ受け付け処理を並行して行う。
【００１１】
本発明の機能呼び出し方法は、プロセス相互間で機能呼び出しを行う機能呼び出し方法において、前記機能呼び出しを受けるプロセスは、前記機能呼び出しのメッセージを受けたときに、当該メッセージに応じた機能呼び出し処理のうち、アプリケーションプログラムを記述するプログラム言語の種類に依存しない処理をプログラム言語非依存部で行い、前記メッセージに応じた機能呼び出し処理のうち、前記プログラム言語の種類に依存する処理をプログラム言語依存部で行い、前記機能呼び出しのメッセージにおいて、任意のデータ構造体が、前記アプリケーションプログラムで使用されるデータの表現形式の引数として扱われ、当該引数は、当該メッセージにおいて、前記アプリケーションプログラムで使用されるデータの表現形式から、ネットワーク間で通信に使用されるデータの表現形式に変換され、前記プログラム言語非依存部は、ネットワークを介して接続された他のコンピュータ上で動作するプロセスあるいは同一のコンピュータ上で動作するプロセスの機能を呼び出すためのメッセージ送信処理と、前記受けたメッセージによって呼び出しを行う機能を特定する参照情報を、前記機能呼び出しを行うプロセス外でユニークな外部参照情報から、当該プロセス内でユニークな内部参照情報に変換する参照解決処理と、前記メッセージの実行タイミングを決定するメッセージ評価スケジューリング処理と、を行い、前記プログラム言語依存部は、前記プログラム言語非依存部によって実行タイミングが決定されたメッセージに応じた機能呼び出しに対応する前記アプリケーションプログラムの機能を起動して当該機能呼び出し処理を行うとともに、前記メッセージの受け付け用の新たな前記メッセージに応じた機能呼び出し処理を起動して当該機能呼び出し処理に基づくメッセージ受け付け処理を並行して行う。
【００２２】
【発明の実施の形態】
以下、本発明の実施形態に係わる並列分散システムについて説明する。
本実施の形態においては、複数のコンピュータがネットワークを介して接続された並列分散システムであって、各コンピュータがネットワークを介して通信を行いながら協働して所望の計算処理を行うような、分散処理環境を提供する並列分散システムを例示して本発明を説明する。
【００２３】
図１は、本実施形態の並列分散システムの全体構成を模式的に示す図である。
本実施の形態の並列分散システムは、インターネットや、ＣＡＴＶ網、衛星通信など多様な通信メディアが混在して構成されるネットワーク環境において、ネットワーク上の分散リソースを論理的に一体の計算環境として捉え、分散処理環境を提供するものである。
ここで、分散リソースとは、各ノードのハードウェア機能に加えて、データベースや高性能計算サーバ、ＷＷＷページの情報ソースなど、任意の計算機能を提供するものである。また、その計算とは、広い範囲の種々の処理の実行を含むものとする。
【００２４】
このような分散処理環境上に、計算実体である並行オブジェクトが配置され、計算空間を形成する。なお、計算空間は、同一のネットワーク環境上に複数のものをそれぞれ個別に形成することができる。
この並行オブジェクトは、具体的には、リモート呼出可能な分散オブジェクト、分散関数、あるいは、ネットワークを介して参照可能な共有変数（大域共有変数）である。そして、これらにより、分散オブジェクト指向計算、分散関数（手続き）呼び出しおよび大域共有変数処理という各計算が、並行的に行われる。
【００２５】
このような計算を行うための、並行オブジェクトのメソッドおよび分散関数の呼び出しや、大域共有変数へのアクセスという並行オブジェクト間の通信は、▲１▼非同期メッセージ送信（返値なしの一方向の通信）、▲２▼遅延評価型同期呼び出し（返値にアクセスしたときブロックする）、▲３▼完全同期呼び出し（返値到着まで呼出側がブロックする）という３種類の方法により行う。なお、これらの通信を総称してメッセージ通信と呼ぶ。
すなわち、このような並列分散システムは、ネットワーク上に分散配置された並行オブジェクトが、メッセージ通信によって並行計算を各々順次実行し、メッセージの連鎖によって全体として所望の計算を進行させるシステムと言うことができる。
【００２６】
計算空間に配置される各並行オブジェクトは、図２に示すように、コンピュータにプロセスを生成して管理する。
プロセスは、並行オブジェクト間のメッセージ送受信の機構などを提供する、並行オブジェクトのための計算環境である。そのため、アプリケーション言語インタフェース（ＡＰＩ) と、ＯＳやハードウェアに対するシステムインターフェースを備え、プログラミング言語やＯＳ、ハードウェア、ネットワークといった実行環境の違いに適応して稼働できるようになっている。また、メッセージは、異なる言語間でも送信可能であり、任意のデータ構造体を引数として扱えるようになっている。
その結果、このようなプロセスの集合として得られる実行環境は、大域空間上で共通の仮想的計算環境として機能する。
【００２７】
以下、このようなプロセス相互間での通信を実現するために各プロセスに備えられたメッセージ通信機構について説明する。
当該メッセージ通信機構は、ネットワークを介して接続されている各コンピュータ上で動作するプロセス内で実現される。
【００２８】
ユーザアプリケーションプログラムが「Ｊａｖａ」の場合
図３は、プログラム言語「Ｊａｖａ」で記述されたユーザアプリケーションプログラム１１０を用いた場合における、プロセスが提供するメッセージ通信機構の受信機能を説明するための図である。
この場合には、図３に示すように、メッセージ通信機構の受信機能は、ＯＳ１１７と、言語非依存部共通ライブラリ１０と、言語依存部ライブラリ２０と、ユーザアプリケーションプログラム１１０とによって実現される。
なお、言語非依存部共通ライブラリ１０と言語依存部ライブラリ２０との間のインタフェースとしては、言語依存部ライブラリ２０が提供する外部機能インターフェースである、例えば、ＪＤＫ１．１の「Ｊａｖａ  Ｎａｔｉｖｅ  Ｉｎｔｅｒｆａｃｅ」が使用される。
先ず、各構成要素について詳細に説明する。
【００２９】
〔ＯＳ１１７〕
ＯＳ１１７としては、例えば、Ｕｎｉｘ（商標名）およびＭＳ−ＤＯＳ（商標名）などが用いられる。
【００３０】
〔言語非依存部共通ライブラリ１０〕
言語非依存部共通ライブラリ１０は、メッセージ通信機能のうち、プログラム言語に依存しない基本機能を共通機能としてまとめたものであり、システム独立な機能レイヤとして位置づけられる。
具体的には、言語非依存部共通ライブラリ１０の受信機能は、参照解決(Reference Resolver)モジュール１１、メッセージディストリビュータ(Message Distributer) モジュール１２、ＣＰＰプリインボーク(Preinvoke) モジュール１３、メッセージ評価スケジューラ(Message Evaluation Scheduler)モジュール１４、ＣＰＰポストインボーク(Postinvoke)モジュール１５、ＣＭＩ(Communication Media Interface) モジュール１６およびセンディングラウンチャー(Sending Launcher)モジュール１７によって実現される。各モジュールは、例えば、コンピュータのＣＰＵ(Central Processing Unit) において、プログラム言語「Ｃ＋＋」で記述されたプログラムを実行することで生成されてもよいし、ハードウェアによって実現してもよい。
【００３１】
言語非依存部共通ライブラリ１０は、プログラム言語「Ｃ＋＋」で記述されたプログラムを実行することで生成される場合には、プログラム言語「Ｊａｖａ」などからも利用するために、実行時にリンクが行われるＤＬＬ(Dynamic Link Library)として実現される。これにより、分散プラットフォームのバージョンアップやバグフィックスを行った場合にも、ユーザアプリケーションプログラムを再構築する必要がなくなる。
【００３２】
参照解決モジュール１１は、ユーザープロシジャー１２０を構成する並行オブジェクトおよび分散オブジェクトメソッドへの大域参照を管理する。メッセージ送信の際には、メッセージを送信する宛て先の並行オブジェクトが存在するコンピュータと、プロセス識別子と、メッセージ伝送のための通信プロトコルとを決定する。メッセージ受信の場合には、メッセージに含まれる並行オブジェクトおよびプロセスの識別子５０5 を入力し、当該識別子５０5 を、ネットワーク上でユニークな外部参照情報から、プロセス内でユニークな内部参照情報に変換し、当該変換により得られた識別子５０6 をメッセージディストリビュータモジュール１２に出力する。
【００３３】
メッセージディストリビュータモジュール１２は、言語依存部ライブラリ２０のレシーバーモジュール２２から呼び出し要求５０1 を受けると、ＣＭＩモジュール１６の呼び出し要求５０2 を発生して、ＣＭＩモジュール１６を呼び出す。
また、メッセージディストリビュータモジュール１２は、ＣＭＩモジュール１６から、構造体ＦＤ(Function Descriptor: 機能記述子) ５０4 を入力すると、当該構造体ＦＤ５０4 に含まれる並行オブジェクトおよびプロセスの識別子５０5 を参照解決モジュール１１に出力し、参照解決モジュール１１から得た識別子５０6 に基づいて、当該メッセージ５０4 が自プロセス宛のものか否かを判断する。そして、メッセージ５０4 が自プロセス宛のものである場合には、メッセージディストリビュータモジュール１２は、構造体ＦＤ５０4 を構造体ＦＤ５０7 としてレシーバーモジュール２２に出力する。
【００３４】
ＣＭＩモジュール１６は、メッセージディストリビュータモジュール１２による呼び出し要求５０２によって呼び出され、呼び出された後に待機状態となる。そして、ＣＭＩモジュール１６は、外部のプロセスから、メッセージを受信すると、動作状態となり、受信したメッセージを格納した構造体ＦＤ５０４をメッセージディストリビュータモジュール１２に出力する。また、ＣＭＩモジュール１６は、センディングラウンチャーモジュール１７から入力した返戻値５０２４を含むメッセージ５０２５を、メッセージ５０３の送信元に出力する。ＣＭＩモジュール１６は、ネットワークを介して接続された他のコンピュータ上で動作するプロセスとの間で通信を行う場合に用いられる。ＣＭＩモジュール１６は、通信プロトコル毎に独立したモジュールとして構成され、通信プロトコルとしては、例えば、イーサーネットあるいはＩＳＤＮなどが用いられる。なお、同一コンピュータ上で動作する他のプロセスと通信を行う場合には、ＣＭＩモジュール１６を使用せずに、ＯＳ１１７が提供するプロセス通信機能を使用する。
【００３５】
ＣＰＰプリインボークモジュール１３は、言語依存部ライブラリ２０のプリインボークモジュール２３からの呼び出し要求５０11を受けると、メッセージ評価スケジューラモジュール１４の呼び出し要求５０12を発生し、呼び出し要求５０11に引数として含まれる構造体ＦＤ５０12をメッセージ評価スケジューラモジュール１４に出力する。
また、ＣＰＰプリインボークモジュール１３は、メッセージ評価スケジューラモジュール１４から、単数または複数の構造体ＦＤ５０13を入力すると、当該入力した構造体ＦＤ５０13を構造体ＦＤ５０14として言語依存部ライブラリ２０のプリインボークモジュール２３に出力する。
【００３６】
メッセージ評価スケジューラモジュール１４は、ＣＰＰプリインボークモジュール１３から入力した構造体ＦＤ12に格納されたメッセージに付加されている優先度に基づいて、内蔵するキュー内に、構造体ＦＤ12を登録する。そして、キューの先頭に存在する構造体ＦＤ、すなわち優先度の最も高い構造体ＦＤから順に取り出して、構造体ＦＤ５０13としてＣＰＰプリインボークモジュール１３に出力する。
【００３７】
ＣＰＰポストインボークモジュール１５は、言語依存部ライブラリ２０のポストインボーク２５から呼び出し要求５０22を受けると、当該呼び出し要求５０22に含まれる構造体ＦＤ５０23と、プロシジャーコーラーモジュール２１の返戻値５０23とをセンディングラウンチャーモジュール１７に出力する。
【００３８】
センディングラウンチャーモジュール１７は、ＣＰＰポストインボークモジュール１５から入力した構造体ＦＤ５０23に含まれる、メッセージ５０3 の送信元情報を取り出し、当該送信元に対して返戻値５０23を送信するために、呼び出し要求５０24を発生してＣＭＩモジュール１６を呼び出す。
【００３９】
〔言語依存部ライブラリ２０〕
言語依存部ライブラリ２０は、ユーザアプリケーションプログラム１１０と同様に、プログラム言語「Ｊａｖａ」で記述されており、スレッド生成およびスレッド制御を含む種々の処理を行うモジュールを備えている。
【００４０】
図３に示すように、言語依存部ライブラリ２０の受信機能は、プロシジャーコーラー(Procedure Caller)モジュール２１、レシーバー(Receiver)モジュール２２、プリインボーク(Preinvoke) モジュール２３、インボーカ(Invoker) モジュール２４、ポストインボーク(Postinvoke)モジュール２５およびスレッド生成モジュール２６によって実現される。各モジュールは、例えば、コンピュータのＣＰＵにおいて、プログラム言語「Ｊａｖａ」で記述されたプログラムを実行することで生成されてもよいし、ハードウェアによって実現してもよい。
【００４１】
レシーバーモジュール２２は、構造体ＦＤ５０7 をメッセージディストリビュータモジュール１２から入力すると、スレッド生成要求５０8 をスレッド生成モジュール２６に出力する。これにより、新たなレシーバーモジュール２２が生成され、当該新たなレシーバーモジュール２２は、呼び出し要求５０1 を再びメッセージディストリビュータモジュール１２に出力する。それと並行して、構造体ＦＤ５０7 を入力したレシーバーモジュール２２は、引数として構造体５０7 を含む呼び出し要求５０10をプリインボークモジュール２３に出力する。
【００４２】
スレッド生成モジュール２６は、レシーバーモジュール２２からスレッド生成要求５０8 を入力すると、新たなレシーバーモジュール２２を生成する。
また、スレッド生成モジュール２６は、プリインボークモジュール２３から、スレッド生成要求５０30を入力すると、スレッド生成要求５０30で指定された数のインボーカモジュール２４を生成する。
【００４３】
プリインボークモジュール２３は、レシーバーモジュール２２から呼び出し要求５０10を入力すると、言語非依存部共通ライブラリ１０のＣＰＰプリインボークモジュール１３の呼び出し要求５０11を発生し、引数として構造体５０7 をＣＰＰプリインボークモジュール１３に出力する。
また、プリインボークモジュール２３は、ＣＰＰプリインボークモジュール１３から、単数または複数の構造体ＦＤ５０14を入力すると、構造体ＦＤ５０14の数だけインボーカモジュール２４を生成することを指示するスレッド生成要求５０30をスレッド生成モジュール２６に出力する。
また、プリインボークモジュール２３は、構造体ＦＤ５０14を構造体ＦＤ５０16として、インボーカモジュール２４に出力する。
【００４４】
このとき、プリインボークモジュール２３が、ＣＰＰプリインボークモジュール１３から、３個の構造体ＦＤ５０14〔１〕，ＦＤ５０14〔２〕およびＦＤ５０14〔３〕を入力した場合には、それらに対応してスレッド生成モジュール２６によって３個のインボーカモジュール２４1 ，２４2 および２４3 が生成される。そして、プリインボークモジュール２３からインボーカモジュール２４1 ，２４2 および２４3 に、それぞれ構造体ＦＤ５０14〔１〕，ＦＤ５０14〔２〕およびＦＤ５０14〔３〕が出力される。
【００４５】
インボーカモジュール２４は、プリインボークモジュール２３から入力した構造体ＦＤ５０14に含まれるデータから、メッセージ毎に、呼び出しを行うプロシジャーコーラーモジュール２１を決定し、当該決定したプロシジャーコーラーモジュール２１の呼び出し要求５０17を発生する。そして、インボーカモジュール２４は、当該呼び出したプロシジャーコーラーモジュール２１に、引数としてプリインボークモジュール２３から入力した構造体ＦＤ５０14を出力する。
また、インボーカモジュール２４は、プロシジャーコーラーモジュール２１から入力した内部表現形式の返戻値５０20を論理表現形式に変換する。ここで、内部表現形式とは、ユーザアプリケーションプログラム１１０で使用されるデータの表現形式であり、論理表現形式とは、ネットワーク間で通信を行う際に使用されるネットワークワイドなデータの表現形式である。
インボーカモジュール２４は、プリインボークモジュール２３から入力した構造体ＦＤ５０14と、前述したように変換した返戻値５０20とを引数として含む呼び出し要求５０21をポストインボークモジュール２５に出力する。
【００４６】
プロシジャーコーラーモジュール２１は、インボーカモジュール２４から入力した構造体ＦＤ５０１４に格納されている引数を用いて、ユーザアプリケーションプログラム１１０内の並行オブジェクト、関数あるいはメソッドであるユーザープロシジャー１２０の呼び出し要求５０１８を発生する。これにより、ユーザープロシジャー１２０の機能が実行され、必要に応じて返戻値が生成される。プロシジャーコーラーモジュール２１は、ユーザープロシジャー１２０から返戻値５０１９を入力すると、当該返戻値５０１９を返戻値５０２０としてインボーカモジュール２４に出力する。
【００４７】
ポストインボークモジュール２５は、インボーカモジュール２４から入力した呼び出し要求５０21に含まれる構造体ＦＤ５０14と返戻値５０20とを引数とするＣＰＰポストインボークモジュール１５の呼び出し要求５０22を発生する。
【００４８】
〔ユーザアプリケーションプログラム１１０〕
ユーザアプリケーションプログラム１１０は、プログラム言語「Ｊａｖａ」で記述された単数または複数のユーザープロシジャー１２０を備えている。
【００４９】
ユーザープロシジャー１２０は、並行オブジェクト、関数あるいはメソッドなどである。
ユーザープロシジャー１２０は、本実施形態では、他のプロセスから呼び出される機能であり、プロシジャーコーラーモジュール２１から呼び出し要求５０18を受けると、必要に応じてシンクコールモジュール６０から入力した引数を用いて所定の処理を行い、処理結果に応じた返戻値５０50をシンクコールモジュール６０に出力する。
【００５０】
以下、図３に示すメッセージ通信機構の受信機能の動作について説明する。
先ず、例えば、ネットワークを介して接続された他のコンピュータ上で動作するプロセスから出力されたメッセージが、言語非依存部共通ライブラリ１０のＣＭＩモジュール１６で受信され、当該受信されたメッセージを格納した構造体ＦＤ５０4 がメッセージディストリビュータモジュール１２に出力される。
【００５１】
メッセージディストリビュータモジュール１２に、ＣＭＩモジュール１６から、構造体ＦＤ５０4 が入力されると、当該構造体ＦＤ５０4 に含まれる並行オブジェクトおよびプロセスの識別子５０5 が参照解決モジュール１１に出力され、参照解決モジュール１１から得た識別子５０6 に基づいて、当該メッセージ５０4 が自プロセス宛のものか否かが判断される。そして、メッセージ５０4 が自プロセス宛のものであると判断された場合には、メッセージディストリビュータモジュール１２から、構造体ＦＤ５０4 が構造体ＦＤ５０7 としてレシーバーモジュール２２に出力される。
【００５２】
メッセージディストリビュータモジュール１２からレシーバーモジュール２２に構造体ＦＤ５０7 が入力されると、レシーバーモジュール２２からスレッド生成モジュール２６にスレッド生成要求５０8 が出力される。そして、スレッド生成モジュール２６によって、新たなレシーバーモジュール２２が生成される。
これにより、新たなレシーバーモジュール２２からメッセージディストリビュータモジュール１２に、呼び出し要求５０1 が再び発生する。それと並行して、構造体ＦＤ５０7 を入力したレシーバーモジュール２２からプリインボークモジュール２３に、引数として構造体５０7 を含む呼び出し要求５０10が発生する。
【００５３】
レシーバーモジュール２２からプリインボークモジュール２３に呼び出し要求５０10が発生すると、プリインボークモジュール２３から言語非依存部共通ライブラリ１０のＣＰＰプリインボークモジュール１３の呼び出し要求５０11を発生し、引数として構造体５０7 が、ＣＰＰプリインボークモジュール１３に出力される。
【００５４】
言語依存部ライブラリ２０のプリインボークモジュール２３からの呼び出し要求５０11をＣＰＰプリインボークモジュール１３が受けると、メッセージ評価スケジューラモジュール１４の呼び出し要求５０12を発生し、呼び出し要求５０11に引数として含まれる構造体ＦＤ５０12がメッセージ評価スケジューラモジュール１４に出力される。
【００５５】
そして、メッセージ評価スケジューラモジュール１４において、ＣＰＰプリインボークモジュール１３から入力した構造体ＦＤ12に格納されたメッセージに付加されている優先度に基づいて、内蔵するキュー内に、構造体ＦＤ12が登録される。また、キューの先頭に存在する構造体ＦＤ、すなわち優先度の最も高い構造体ＦＤから順に取り出され、これが構造体ＦＤ５０13としてＣＰＰプリインボークモジュール１３に出力される。
【００５６】
また、メッセージ評価スケジューラモジュール１４から、単数または複数の構造体ＦＤ５０13が、ＣＰＰプリインボークモジュール１３に入力されると、当該入力した構造体ＦＤ５０13が構造体ＦＤ５０14として言語依存部ライブラリ２０のプリインボークモジュール２３に出力される。
【００５７】
ＣＰＰプリインボークモジュール１３から、単数または複数の構造体ＦＤ５０14をプリインボークモジュール２３が入力すると、構造体ＦＤ５０14の数だけインボーカモジュール２４を生成することを指示するスレッド生成要求５０30がスレッド生成モジュール２６に出力される。
そして、スレッド生成モジュール２６によって、構造体ＦＤ５０14の数だけインボーカモジュール２４が生成される。また、プリインボークモジュール２３からインボーカモジュール２４に、構造体ＦＤ５０14が構造体ＦＤ５０16として出力される。
【００５８】
そして、インボーカモジュール２４において、プリインボークモジュール２３から入力した構造体ＦＤ５０14に含まれるデータから、メッセージ毎に、呼び出しを行うプロシジャーコーラーモジュール２１が決定され、当該決定されたプロシジャーコーラーモジュール２１の呼び出し要求５０17が発生する。そして、インボーカモジュール２４から、当該呼び出したプロシジャーコーラーモジュール２１に、引数としてプリインボークモジュール２３から入力した構造体ＦＤ５０14が出力される。
【００５９】
そして、プロシジャーコーラーモジュール２１において、インボーカモジュール２４から入力した構造体ＦＤ５０14に格納されている引数を用いて、ユーザアプリケーションプログラム１１０内のユーザープロシジャー１２０の呼び出し要求５０18が発生する。これにより、ユーザープロシジャー１２０の機能が実行され、必要に応じて返戻値が生成される。
【００６０】
ユーザープロシジャー１２０からプロシジャーコーラーモジュール２１に返戻値５０19が出力されると、当該返戻値５０19が返戻値５０20としてインボーカモジュール２４に出力される。
【００６１】
そして、インボーカモジュール２４において、返戻値５０20が内部表現形式から論理表現形式に変換され、インボーカモジュール２４からポストインボークモジュール２５に、プリインボークモジュール２３から入力した構造体ＦＤ５０14と、論理表現形式に変換された返戻値５０20とを引数として含む呼び出し要求５０21が発生する。
【００６２】
そして、ポストインボークモジュール２５が、インボーカモジュール２４から入力した呼び出し要求５０21に含まれる構造体ＦＤ５０14と返戻値５０20とを引数とするＣＰＰポストインボークモジュール１５の呼び出し要求５０22を発生する。
【００６３】
そして、ＣＰＰポストインボークモジュール１５が、言語依存部ライブラリ２０のポストインボーク２５から呼び出し要求５０22を受けると、当該呼び出し要求５０22に含まれる構造体ＦＤ５０23と、プロシジャーコーラーモジュール２１の返戻値５０23とが、センディングラウンチャーモジュール１７に出力される。
【００６４】
そして、センディングラウンチャーモジュール１７において、ＣＰＰポストインボークモジュール１５から入力した構造体ＦＤ５０23に含まれる、メッセージ５０3 の送信元情報が取り出され、当該送信元に対して返戻値５０23を送信するために呼び出し要求５０24を発生し、ＣＭＩモジュール１６が呼び出される。
【００６５】
そして、ＣＭＩモジュール１６から、センディングラウンチャーモジュール１７から入力した返戻値５０24を含むメッセージ５０25が、メッセージ５０3 の送信元に出力される。
【００６６】
図４は、プログラム言語「Ｊａｖａ」で記述されたユーザアプリケーションプログラム１１０を用いた場合における、プロセスが提供するメッセージ通信機構の送信機能を説明するための図である。
【００６７】
〔言語非依存部共通ライブラリ１０〕
図４に示すように、言語非依存部共通ライブラリ１０の送信機能は、参照解決モジュール１１、ＣＭＩモジュール１６、コーリングラウンチャー(Calling Launcher)モジュール７１およびメッセージセンダー(Message Sender)モジュール７２によって実現される。各モジュールは、例えば、コンピュータのＣＰＵにおいて、プログラム言語「Ｃ＋＋」で記述されたプログラムを実行することで生成されてもよいし、ハードウェアによって実現してもよい。
【００６８】
コーリングラウンチャーモジュール７１は、コーラーモジュール６１から呼び出し要求５０52を受けると、メッセージセンダーモジュール７２の呼び出し要求５０53を発生し、呼び出し要求５０52に含まれる、送信先のユーザープロシジャーへの参照情報と、転送先のユーザープロシジャーに与える論理表現形式の引数とをメッセージセンダーモジュール７２に出力する。
また、コーリングラウンチャーモジュール７１は、メッセージセンダーモジュール７２から返戻値５０58を入力すると、これを返戻値５０59としてコーラーモジュール６１に出力する。
【００６９】
メッセージセンダーモジュール７２は、送信先の特定するために、コーリングラウンチャーモジュール７１から入力した参照情報５０71を参照解決モジュール１１に出力し、メッセージの送信先情報５０70を得る。
メッセージセンダーモジュール７２は、メッセージの送信先情報５０70と、コーリングラウンチャーモジュール７１から入力した論理表現形式の引数とを含む呼び出し要求５０54をＣＭＩモジュール１６に出力する。
また、メッセージセンダーモジュール７２は、ＣＭＩモジュール１６から返戻値５０57を入力すると、これを返戻値５０58としてコーリングラウンチャーモジュール７１に出力する。
【００７０】
ＣＭＩモジュール１６は、メッセージの送信先情報５０70で特定される送信先に対して、メッセージセンダーモジュール７２から入力した論理表現形式の引数５０55を送信する。
ＣＭＩモジュール１６は、他のプロセスから、返戻値５０56を入力すると、これを返戻値５０57としてメッセージセンダーモジュール７２に出力する。
【００７１】
〔言語依存部ライブラリ２０〕
図４に示すように、言語依存部ライブラリ２０の送信機能は、シンクコール(Sync Call) モジュール６０およびコーラー(Caller)モジュール６１によって実現される。
【００７２】
コーラーモジュール６１は、シンクコールモジュール６０からの呼び出し要求５０51を受けると、シンクコールモジュール６０から入力した論理表現形式の引数と参照情報とを入力し、これらを含むコーリングラウンチャーモジュール７１の呼び出し要求５０52を発生する。
また、コーリングラウンチャーモジュール７１から返戻値５０59を入力すると、これを返戻値５０60としてシンクコールモジュール６０に出力する。
【００７３】
シンクコールモジュール６０は、ユーザプロシジャーモジュール８０からの呼び出し要求５０50を受けると、ユーザプロシジャーモジュール８０から引数と送信先の参照情報とを入力し、当該入力した引数を内部表現形式から論理表現形式に変換し、当該変換した引数と入力した参照情報とを含むコーラーモジュール６１の呼び出し要求５０51を発生する。
また、シンクコールモジュール６０は、コーラーモジュール６１から、返戻値５０60を入力すると、これを内部表現形式に変換し、当該変換した返戻値を返戻値５０61としてユーザプロシジャーモジュール８０に出力する。
【００７４】
〔ユーザアプリケーションプログラム１１０〕
ユーザアプリケーションプログラム１１０は、プログラム言語「Ｊａｖａ」で記述された単数または複数のユーザープロシジャー８０を備えている。
【００７５】
ユーザープロシジャー８０は、並行オブジェクト、関数あるいはメソッドなどである。
ユーザープロシジャー８０は、本実施形態では、他のプロセスが提供する機能を呼び出す機能であり、シンクコールモジュール６０に呼び出し要求５０50を発生すると、返戻値５０61を入力するまで処理を停止する。そして、シンクコールモジュール６０から返戻値５０61を入力すると、処理を再開する。
【００７６】
なお、言語依存部ライブラリ２０は、シンクコールモジュール６０の他に、例えば、ユーザプロシジャーモジュール８０からの呼び出し要求に応じて、センド(Send)モジュールおよびコール(Call)モジュールを生成することができる。
ここで、センドモジュールおよびコールモジュールは、ユーザプロシジャーモジュール８０から呼び出し要求を受けると、当該呼び出し要求に応じたコーラーモジュール６１の呼び出し要求（スレッド）を発生すると共に、図３に示すスレッド生成モジュール２６にスレッド生成要求を出力し、新たに生成されたスレッドをユーザプロシジャーモジュール８０に返す。ユーザプロシジャーモジュール８０は、当該新たなスレッドを受けて、処理を再開する。
ここで、センドモジュールは、呼び出し先のプロセスから返戻値を入力しないのに対して、コールモジュールは、呼び出し先のプロセスから返戻値を入力する。
【００７７】
以下、図４に示すメッセージ通信機構の送信機能の動作について説明する。
先ず、ユーザアプリケーションプログラム１１０のユーザプロシジャーモジュール８０から、例えばネットワークを介して接続された他のコンピュータ上で動作するプロセスのユーザアプリケーションプログラムのユーザプロシジャーモジュールが提供する機能を呼び出す場合に、引数と送信先の参照情報とを含むシンクコールモジュール６０の呼び出し要求５０50を発生する。
ユーザプロシジャーモジュール８０からの呼び出し要求５０50をシンクコールモジュール６０が受けると、ユーザプロシジャーモジュール８０からの引数が内部表現形式から論理表現形式に変換され、当該変換された引数と入力した参照情報とを含むコーラーモジュール６１の呼び出し要求５０51を発生する。
【００７８】
シンクコールモジュール６０からの呼び出し要求５０51をコーラーモジュール６１が受けると、シンクコールモジュール６０から入力した論理表現形式の引数と参照情報とを含むコーリングラウンチャーモジュール７１の呼び出し要求５０52を発生する。
【００７９】
コーラーモジュール６１から呼び出し要求５０52をコーリングラウンチャーモジュール７１が受けると、コーリングラウンチャーモジュール７１がメッセージセンダーモジュール７２の呼び出し要求５０53を発生し、呼び出し要求５０52に含まれる、送信先のユーザープロシジャーへの参照情報と、転送先のユーザープロシジャーに与える論理表現形式の引数とがメッセージセンダーモジュール７２に出力される。
【００８０】
そして、送信先の特定するために、コーリングラウンチャーモジュール７１から入力した参照情報５０71が、メッセージセンダーモジュール７２から参照解決モジュール１１に出力され、参照解決モジュール１１からメッセージの送信先情報５０70が得られる。
そして、メッセージセンダーモジュール７２から呼び出し要求５０54が発生し、メッセージの送信先情報５０70とコーリングラウンチャーモジュール７１から入力した論理表現形式の引数とが、ＣＭＩモジュール１６に出力される。
【００８１】
そして、ＣＭＩモジュール１６から、メッセージの送信先情報５０70で特定される送信先に対して、メッセージセンダーモジュール７２から入力した論理表現形式の引数５０55が送信される。
【００８２】
その後、ＣＭＩモジュール１６が、他のプロセスから、返戻値５０56を入力すると、これが返戻値５０57としてメッセージセンダーモジュール７２に出力される。この返戻値５０57は、メッセージセンダーモジュール７２、コーリングラウンチャーモジュール７１、コーラーモジュール６１およびシンクコールモジュール６０を介して、ユーザプロシジャーモジュール８０に出力される。
【００８３】
ユーザアプリケーションプログラムが「Ｃ＋＋」の場合
図５は、プログラム言語「Ｃ＋＋」で記述されたユーザアプリケーションプログラム１１４を用いた場合における、プロセスが提供するメッセージ通信機構の受信機能を説明するための図である。
この場合には、図５に示すように、メッセージ通信機構の受信機能は、ＯＳ１１７と、言語非依存部共通ライブラリ１０と、言語依存部ライブラリ３０と、ユーザアプリケーションプログラム１１４とによって実現される。
図５において、言語非依存部共通ライブラリ１０は、図３を参照して前述した言語非依存部共通ライブラリ１０と同じである。すなわち、言語非依存部共通ライブラリ１０は、プログラム言語「Ｃ＋＋」で記述されている。
【００８４】
〔言語依存部ライブラリ３０〕
言語依存部ライブラリ３０は、ユーザアプリケーションプログラム１１４と同様に、プログラム言語「Ｃ＋＋」で記述されており、スレッド生成およびスレッド制御を含む種々の処理を行うモジュールを備えている。
【００８５】
図５に示すように、言語依存部ライブラリ３０の受信機能は、プロシジャーコーラーモジュール２１、レシーバーモジュール３２、プリインボークモジュール３３、インボーカモジュール２４およびポストインボークモジュール２５によって実現される。
ここで、図３と同一の符号を付した、プロシジャーコーラーモジュール２１、インボーカモジュール２４およびポストインボークモジュール２５は、前述した図３に示すものと同じである。
なお、各モジュールは、例えば、コンピュータのＣＰＵにおいて、プログラム言語「Ｃ＋＋」で記述されたプログラムを実行することで生成されてもよいし、ハードウェアによって実現してもよい。
【００８６】
レシーバーモジュール３２は、構造体ＦＤ５０7 をメッセージディストリビュータモジュール１２から入力すると、スレッド生成要求５０8 をＯＳ１１８に出力する。これにより、新たなレシーバーモジュール３２が生成され、当該新たなレシーバーモジュール３２は、呼び出し要求５０1 を再びメッセージディストリビュータモジュール１２に出力する。それと並行して、構造体ＦＤ５０7 を入力したレシーバーモジュール２２は、構造体ＦＤ５０7 を引数として含む呼び出し要求５０10をプリインボークモジュール３３に出力する。
【００８７】
プリインボークモジュール３３は、レシーバーモジュール３２から呼び出し要求５０10を入力すると、言語非依存部共通ライブラリ１０のＣＰＰプリインボークモジュール１３の呼び出し要求５０11を発生し、引数として構造体５０7 をＣＰＰプリインボークモジュール１３に出力する。
また、プリインボークモジュール３３は、ＣＰＰプリインボークモジュール１３から、単数または複数の構造体ＦＤ５０14を入力すると、構造体ＦＤ５０14の数だけインボーカモジュール２４を生成することを指示するスレッド生成要求５０30をＯＳ１１８に出力する。
また、プリインボークモジュール３３は、構造体ＦＤ５０14を構造体ＦＤ５０16として、インボーカモジュール２４に出力する。
【００８８】
このとき、プリインボークモジュール３３が、ＣＰＰプリインボークモジュール１３から、３個の構造体ＦＤ５０14〔１〕，ＦＤ５０14〔２〕およびＦＤ５０14〔３〕を入力した場合には、それらに対応してＯＳ１１８によって３個のインボーカモジュール２４1 ，２４2 および２４3 が生成される。そして、プリインボークモジュール３３からインボーカモジュール２４1 ，２４2 および２４3 に、それぞれ構造体ＦＤ５０14〔１〕，ＦＤ５０14〔２〕およびＦＤ５０14〔３〕が出力される。
【００８９】
〔ＯＳ１１８〕
ＯＳ１１８は、プリインボークモジュール３３から、スレッド生成要求５０30を入力すると、スレッド生成要求５０30で指定された数のインボーカモジュール２４を生成する。
【００９０】
〔ユーザアプリケーションプログラム１１４〕
ユーザアプリケーションプログラム１１４は、プログラム言語「Ｃ＋＋」で記述された単数または複数のユーザープロシジャー１４０を備えている。
ユーザープロシジャー１４０は、並行オブジェクト、関数あるいはメソッドなどである。
ユーザープロシジャー１４０は、本実施形態では、他のプロセスから呼び出される機能であり、プロシジャーコーラーモジュール２１から呼び出し要求５０18を受けると、必要に応じてシンクコールモジュール６０から入力した引数を用いて所定の処理を行い、処理結果に応じた返戻値５０50をシンクコールモジュール６０に出力する。
【００９１】
図５に示すメッセージ通信機構の受信機能の動作は、レシーバーモジュール３２およびプリインボークモジュール３３が、スレッド生成要求５０8 ，５０30をＯＳ１１８に出力する点を除いて、前述した図３に示す受信機能の動作と同じである。
【００９２】
次に、プログラム言語「Ｃ＋＋」で記述されたユーザアプリケーションプログラム１１４を用いた場合における、プロセスが提供するメッセージ通信機構の送信機能は、言語依存部ライブラリ３０およびユーザアプリケーションプログラム１１４が、プログラム言語「Ｃ＋＋」で記述されている点を除いて、基本的に、図４に示すものと同じである。
【００９３】
また、言語依存部ライブラリ３０は、シンクコールモジュール６０の他に、例えば、ユーザプロシジャーモジュール８０からの呼び出し要求に応じて、前述したセンドモジュールおよびコールモジュールを生成することができる。
【００９４】
但し、言語依存部ライブラリ３０の場合には、言語依存部ライブラリ２０の場合と異なり、センドモジュールおよびコールモジュールは、ユーザプロシジャーモジュール８０から呼び出し要求を受けると、当該呼び出し要求に応じたコーラーモジュール６１の呼び出し要求（スレッド）を発生し、ユーザプロシジャーモジュール８０に復帰する。
【００９５】
以上説明したように、本実施形態の並列分散システムによれば、図６に示すように、プログラム言語「Ｊａｖａ」で記述されたユーザアプリケーションプログラム１１０のプロセスと、プログラム言語「Ｃ＋＋」で記述されたユーザアプリケーションプログラム１１４のプロセスとにおいて、スレッド制御に係わるモジュール以外のモジュールを持つ言語非依存部共通ライブラリ１０を共用できる。そのため、プログラム言語「Ｊａｖａ」の言語依存部ライブラリ２０およびプログラム言語「Ｃ＋＋」の言語依存部ライブラリ３０を小規模にできる。
その結果、言語依存部ライブラリ２０および３０と、言語非依存部共通ライブラリ１０とから構成される分散プラットフォームライブラリの開発およびデバッグ作業の負担を軽減できる。
また、スレッド制御に関するモジュールについては、言語依存部ライブラリ２０と３０とで個別に設けてあるため、誤ったスレッド制御が行われることを効果的に回避できる。
【００９６】
また、上述した本実施形態の並列分散システムによれば、図３に示すレシーバーモジュール２２において、呼び出し要求５０10を発生する既存のスレッドの他に、呼び出し要求５０1 を発生する新たなスレッドを生成することから、既存のスレッドに基づいたユーザープロシジャー１２０の機能の実行と、新たなスレッドに応じて生成されたメッセージディストリビュータモジュール１２およびＣＭＩモジュール１６によるメッセージ通信とを並行して行うことができる。
【００９７】
本発明は上述した実施形態には限定されない。
上述した実施形態では、ユーザアプリケーションプログラムが記述されたるプログラム言語として、「Ｊａｖａ」および「Ｃ＋＋」を例示したが、その他に「ＬＩＳＰ」などであってもよい。なお、プログラム言語「ＬＩＳＰ」を用いた場合にも、「Ｊａｖａ」および「Ｃ＋＋」と同様に言語依存部ライブラリが実現される。
【００９８】
また、上述した実施形態では、ネットワークを介して接続された異なるコンピュータ上で動作するプロセス相互間で、ユーザプロシジャーモジュールの機能呼び出しを行う場合を例示したが、同一のコンピュータ上で動作する異なるプロセス相互間でユーザプロシジャーモジュールの機能呼び出しを行う場合にも、本発明を適用できる。
【００９９】
【発明の効果】
以上説明したように、コンピュータ、並列分散システムおよび機能呼び出し方法によれば、分散プラットフォームライブラリの一部として、プログラム言語の種類に依存しない処理を行うプログラム言語非依存部を設けることで、複数のプログラム言語の分散プラットフォームライブラリを開発する際に、当該プログラム言語非依存部を共用することができ、分散プラットフォームライブラリの開発およびデバッグ作業の負担を軽減できる。
【図面の簡単な説明】
【図１】図１は、本発明の実施形態の並列分散システムの全体構成を模式的に示す図である。
【図２】図２は、プロセスと並行オブジェクトとの関係を説明するための図である。
【図３】図３は、プログラム言語「Ｊａｖａ」で記述されたユーザアプリケーションプログラムを用いた場合における、プロセスが提供するメッセージ通信機構の受信機能を説明するための図である。
【図４】図４は、プログラム言語「Ｊａｖａ」で記述されたユーザアプリケーションプログラムを用いた場合における、プロセスが提供するメッセージ通信機構の送信機能を説明するための図である。
【図５】図５は、プログラム言語「Ｃ＋＋」で記述されたユーザアプリケーションプログラムを用いた場合における、プロセスが提供するメッセージ通信機構の受信機能を説明するための図である。
【図６】図６は、本発明の実施形態に係わる並列分散システムの効果を説明するための図である。
【図７】図７は、プログラム言語「Ｊａｖａ」および「Ｃ＋＋」で記述されたユーザアプリケーションプログラムを用いた場合における、プロセスが提供する従来のメッセージ通信機構の受信機能を説明するための図である。
【符号の説明】
１０…言語非依存部共通ライブラリ、１１…参照解決モジュール、１２…メッセージディストリビュータモジュール、１３…ＣＰＰプリインボークモジュール、１４…メッセージ評価スケジューラモジュール、１５…ＣＰＰポストインボークモジュール、１６…ＣＭＩモジュール、１７…センディングラウンチャーモジュール、２０…言語依存部ライブラリ、２１…プロシジャーコーラーモジュール、２２…レシーバーモジュール、２３…プリインボークモジュール、２４…インボーカモジュール、２５…ポストインボークモジュール、２６…スレッド生成モジュール、６０…シンクコールモジュール、６１…コーラーモジュール、７１…コーリングラウンチャーモジュール、７２…メッセージセンダーモジュール、８０，１２０，１４０…ユーザープロシジャー、１１０，１１４…ユーザアプリケーションプログラム、１１７，１１８…ＯＳ
【図１】
0004668367.tif 000002
【図２】
0004668367.tif 000003
【図３】
0004668367.tif 000004
【図４】
0004668367.tif 000005
【図５】
0004668367.tif 000006
【図６】
0004668367.tif 000007
【図７】
0004668367.tif 000008