(57)【特許請求の範囲】
【請求項１】
マルチプロセス機能を有するオペレーティングシステムによって複数のプロセスを生成し、プログラムを並列処理する計算機システムにおいて、
前記各プロセスは、
データと手続きとをカプセル化するものであって、通信メッセージを出力可能に構成された一以上のオブジェクトと、
通信メッセージを受信し転送するものであって、受信した通信メッセージが自プロセスのオブジェクトの出力したものである場合には、当該メッセージに含まれる通信方式情報に基づいてその通信が同期通信か非同期通信であるかを調べ、同期通信である場合には前記通信メッセージの処理が完了した後に前記自プロセスのオブジェクトに通信の終了を通知し、非同期通信である場合には直ちに前記自プロセスのオブジェクトに通信の終了を通知するメッセージ取扱手段を有するメッセージ通信制御手段と
を備えたことを特徴とする計算機システム。
【請求項２】
前記メッセージ通信制御手段は、
各オブジェクトがどのプロセスに属するかの情報を記録するプロセス対応記録部と、
通信メッセージを他のプロセスに転送し、また、他のプロセスからの通信メッセージを前記メッセージ取扱手段に引き渡すプロセスメッセージ取扱手段とを備え、
前記メッセージ取扱手段は、前記プロセス対応記録部を検索することで、受信した通信メッセージの宛先オブジェクトがどのプロセスに属するを判定し、自プロセスに属する場合には当該宛先オブジェクトに通信メッセージを引き渡し、他のプロセスに属する場合には前記プロセスメッセージ取扱手段に通信メッセージを引き渡すことを特徴とする請求項１記載の計算機システム。
【請求項３】
前記メッセージ通信制御手段は、各オブジェクトについてのオブジェクト識別情報と、前記オペレーティングシステムに生成されたときに各オブジェクトに付されたオブジェクトアドレスとの対応情報を記録するオブジェクト対応記録部を備え、
前記メッセージ取扱手段は、前記メッセージの宛先情報として前記オブジェクト識別情報のみが付されているときであっても、前記オブジェクト対応記録部を検索してオブジェクトアドレスを取得することにより、宛先オブジェクトに前記通信メッセージを引き渡し可能とすることを特徴とする請求項１又は２記載の計算機システム。
【請求項４】
前記オペレーティングシステムは、前記オブジェクトを自律的に動作させるためのスレッドと通信メッセージ受信用のキューを生成可能に構成され、
少なくとも一以上のオブジェクトは、前記スレッド及び前記キューを生成又は消滅させるための指令を通信メッセージとして出力可能に構成されたことを特徴とする請求項１乃至３に記載の計算機システム。
【請求項５】
複数の計算機が接続されてなるネットワークシステムにおいて、
請求項１乃至４のうち何れか一項に記載された複数の前記プロセスを、二以上の前記計算機に分散配置させたことを特徴としたネットワークシステム。
【請求項６】
マルチプロセス機能を有するオペレーティングシステムによって生成されるプロセスを記述するプログラムであって、
前記プロセスを、
データと手続きとをカプセル化させたものであって、通信メッセージを出力させる一以上のオブジェクトと、
通信メッセージを受信させ転送させるものであって、受信させた通信メッセージが自プロセスのオブジェクトの出力したものである場合には、当該メッセージに含まれる通信方式情報に基づいてその通信が同期通信か非同期通信であるかを調べさせ、同期通信である場合には前記通信メッセージの処理が完了した後に前記自プロセスのオブジェクトに通信の終了を通知させ、非同期通信である場合には直ちに前記自プロセスのオブジェクトに通信の終了を通知させるメッセージ取扱手段を有するメッセージ通信制御手段として
コンピュータ上で機能させるためのプログラムを記録したコンピュータ読み取り可能な記録媒体。
【請求項７】
前記メッセージ通信制御手段は、通信メッセージを他のプロセスに転送させ、また、他のプロセスからの通信メッセージを前記メッセージ取扱手段に引き渡させるプロセスメッセージ取扱手段を備え、
前記メッセージ取扱手段は、各オブジェクトがどのプロセスに属するかの情報を記録するプロセス対応記録部を検索させることで、受信した通信メッセージの宛先オブジェクトがどのプロセスに属するを判定させ、自プロセスに属する場合には当該宛先オブジェクトに通信メッセージを引き渡させ、他のプロセスに属する場合には前記プロセスメッセージ取扱手段に通信メッセージを引き渡させることを特徴とする請求項６記載の記録媒体。
【請求項８】
前記メッセージ取扱手段は、各オブジェクトについてのオブジェクト識別情報と前記オペレーティングシステムに生成されたときに各オブジェクトに付されたオブジェクトアドレスとの対応情報を記録させるオブジェクト対応記録部を検索させ、前記メッセージの宛先情報として前記オブジェクト識別情報のみが付されているときであっても、オブジェクトアドレスを取得させることにより、宛先オブジェクトに前記通信メッセージを引き渡し可能とすることを特徴とする請求項６又は７記載の記録媒体。
【請求項９】
前記オペレーティングシステムは、前記オブジェクトを自律的に動作させるためのスレッドと通信メッセージ受信用のキューを生成可能に構成され、
少なくとも一以上のオブジェクトは、前記スレッド及び前記キューを生成又は消滅させるための指令を通信メッセージとして出力させ得ることを特徴とする請求項６乃至８に記載の記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は計算機システム及びネットワークシステム並びに記録媒体、更に詳しくは、プログラムの並行処理が可能なマルチプロセス／マルチスレッド環境において複数オブジェクト間のメッセージ通信を適切に行うのに適した計算機システム及びネットワークシステム並びに記録媒体に関するものである。
【０００２】
【従来の技術】
近年Ｃ＋＋言語等のオブジェクト指向言語を用いてプログラム作成が行われるようになっている。このオブジェクト指向言語においては、データ処理等を行う手続きとその対応データとを一体（カプセル化）としてオブジェクトという単位を構成し、あるオブジェクトのデータは、当該オブジェクトの手続きのみを介して操作するようにしている。
【０００３】
したがって、一のオブジェクトが他のオブジェクトのデータに関連して何らかの処理を行う場合には、当該一のオブジェクトの手続きが当該他のオブジェクトの手続きに対して処理を依頼することになる。具体的には、オブジェクト間でメッセージ通信が行われることで依頼処理等が実現される。ここで、オブジェクト指向の概念におけるメッセージ通信とは、オブジェクトは自律的に動作しており、必要に応じてメッセージを送信することである。
【０００４】
一方、プログラムの並行処理が可能なマルチプロセス／マルチスレッド環境を実現するＵＮＩＸ等のＯＳ（オペレーティングシステム）が広く用いられるようになっている。
【０００５】
このようなプリエンプティブ方式のマルチタスクＯＳでは、プログラムはプロセスという単位で実行されるとともに、さらにスレッドというプロセスよりも細かい実行単位を導入してこれらの動作についてスケジューリングを行っている。
【０００６】
マルチプロセス／マルチスレッド機能を有する並行環境でオブジェクト指向言語のプログラムを実行させる場合、多くの場合にはプロセスに複数のオブジェクトが設けられる。また、スレッドは、オブジェクトを自律的に動作させるために起動される場合があり、また、起動されない場合もある。さらに、マルチタスクＯＳでは、プロセスは複数存在するのが一般的である。
【０００７】
プログラムは、これらの多数のオブジェクト間でメッセージ通信を行いつつ、必要な処理を実行していくことになる。
【０００８】
【発明が解決しようとする課題】
しかしながら、マルチプロセス／マルチスレッド環境におけるオブジェクト間のメッセージ通信に関しては、（１）オブジェクト間のメッセージ通信方法、（２）オブジェクトに対するプロセス／スレッドマッピング方法、（３）オブジェクト生成・破壊とスレッドの起動・停止タイミング、等について解決すべき課題がある。
【０００９】
（１）オブジェクト間のメッセージ通信方法
オブジェクト間のメッセージ通信の方法には、同期通信と非同期通信がある。
【００１０】
同期通信とは、送信元オブジェクトが送信先オブジェクトへメッセージを送った時に、送信先オブジェクトにてメッセージに対応する処理が終了するまで、送信元オブジェクトが待たされる通信方式である。
【００１１】
図３７は同期通信方式を用いるオブジェクト間のメッセージ送受を時系列順に示すシーケンス図である。
【００１２】
このような通信を実現する手段として、送信先オブジェクトにスレッドを割り当てずに、送信元オブジェクトが送信先のオブジェクトのメソッドを直接呼び出す方法がある。なお、メソッドとは、Ｃ＋＋言語におけるクラスの中で定義される操作の実装である。この通信を実現するためのプログラムの例を図３７の下側に示す。
【００１３】
また、同期通信を実現する他の手段としては、送信先オブジェクトにスレッドを割り当てるが、送信先のオブジェクトの処理が終了するまでスレッド間で同期待ちを行う方法がある。
【００１４】
一方、非同期通信とは、送信元オブジェクトが送信先オブジェクトへメッセージを送った時に、送信先オブジェクトにメッセージを送信した時点で、送信元オブジェクトが自分の処理を継続する通信方式である。
【００１５】
図３８は非同期通信方式を用いるオブジェクト間のメッセージ送受を時系列順に示すシーケンス図である。
【００１６】
このような通信を実現する手段として、オブジェクトに対しメッセージを積んでおくメッセージキューとそれを監視するスレッドとを設け、メッセージキューにメッセージが積まれたら、メッセージに対応する処理を起動することをスレッドの実行内容とする方法がある。このような非同期通信方式によるメッセージ通信については、特願平１０−３２８０６５号で提案されている。
【００１７】
上記の同期通信と非同期通信とは、図３７、図３８における下側のプログラムに示されるように異なるインタフェースを有する。したがって、あるオブジェクトを同期通信方式から非同期通信方式に変更したり、あるいはその逆に変更したりするためには、その都度プログラムを変更する必要がある。
【００１８】
（２）オブジェクトに対するプロセス／スレッドマッピング方法
先に（１）で述べたオブジェクトの非同期通信を実現する特願平１０−３２８０６５号においては、オブジェクトの生成とともに自分自身のメッセージキューを監視するスレッドを起動し、オブジェクトの破壊とともに先のスレッドを停止する方式を採用している。この方法では、すべてのオブジェクトにスレッドを与え、かつオブジェクトの生成・破壊とスレッドの起動・停止のタイミングを同一にすることで、プロセスマッピングを容易に指定することができる。
【００１９】
しかし、あまりに多くのスレッドを起動すると、逆にシステムの性能が劣化する場合がある。したがって、システム性能の調整のために、オブジェクトによってスレッドをマッピングしないことも考えられる。ここで、特願平１０−３２８０６５号では、非同期通信を実現するとともにオブジェクトの生成とスレッドの起動タイミングが同一であることから、例えば図３９（ａ）に示すような生成メソッドを記述している。また、同期通信を実現する目的でオブジェクトに対してスレッドをマッピングしないようにするためには、この生成メソッドを図３９（ｂ）のように修正しなければならない。
【００２０】
（３）オブジェクト生成・破壊とスレッドの起動・停止タイミング
ある時点までは同期通信を行っていたオブジェクトを、非同期通信を行うように変更させること、またはその逆を行うことが考えられる。特願平１０−３２８０６５号のようにオブジェクトの生成・破壊とともにスレッドの起動・停止を行う方式では、これを実現することは困難である。
【００２１】
本発明は、このような実情を考慮してなされたもので、その第１の目的は、プログラムの並行処理が可能なマルチプロセス環境にあって、オブジェクト指向の概念における同期メッセージ通信及び非同期メッセージ通信を容易に実現することができる計算機システム及びネットワークシステム並びに記録媒体を提供することにある。
【００２２】
また、第２の目的は、オブジェクト指向の概念における同期通信及び非同期通信の両通信方式をプログラム変更することなく容易に変更することができる計算機システム及びネットワークシステム並びに記録媒体を提供することにある。
【００２３】
さらに、第３の目的は、オブジェクトの生成・破壊とオブジェクト内のスレッドの起動・停止を分離し、システム動作中に同期通信と非同期通信を切り替えることができる計算機システム及びネットワークシステム並びに記録媒体を提供することにある。
【００２４】
【課題を解決するための手段】
次に、課題解決のための第１の発明は、マルチプロセス機能を有するオペレーティングシステムによって複数のプロセスを生成し、プログラムを並列処理する計算機システムについてなされたものである。
【００２５】
ここで各プロセスには、一以上のオブジェクトと、メッセージ通信制御手段とが設けられる。
【００２６】
オブジェクトは、データと手続きとをカプセル化するものであって、通信メッセージを出力可能に構成されている。
【００２７】
また、メッセージ通信制御手段は、メッセージ取扱手段を備えている。このメッセージ取扱手段は、通信メッセージを受信し転送するものである。
【００２８】
また、メッセージ取扱手段は、受信した通信メッセージが自プロセスのオブジェクトの出力したものである場合には、当該メッセージに含まれる通信方式情報に基づいてその通信が同期通信か非同期通信であるかを調べる。そして、同期通信である場合には通信メッセージの処理が完了した後に自プロセスのオブジェクトに通信の終了を通知し、非同期通信である場合には直ちに自プロセスのオブジェクトに通信の終了を通知する。
【００２９】
これにより、プログラムの並行処理が可能なマルチプロセス環境にあって、オブジェクト指向の概念における同期メッセージ通信及び非同期メッセージ通信が容易に実現される。また、メッセージ内の通信方式情報のみを変更することで同期，非同期通信を変更できるので、同期通信及び非同期通信の両通信方式をプログラム変更することなく容易に変更することができる。
【００３０】
次に、課題解決のための第２の発明は、上記第１の発明において、メッセージ通信制御手段は、各オブジェクトがどのプロセスに属するかの情報を記録するプロセス対応記録部と、プロセスメッセージ取扱手段とを備えている。
【００３１】
ここで、プロセスメッセージ取扱手段は、通信メッセージを他のプロセスに転送し、また、他のプロセスからの通信メッセージを前記メッセージ取扱手段に引き渡すものである。
【００３２】
メッセージ取扱手段においては、オブジェクトあるいはプロセスメッセージ取扱手段から通信メッセージを受信するが、このときプロセス対応記録部を検索する。これにより、受信した通信メッセージの宛先オブジェクトがどのプロセスに属するが判定され、自プロセスに属する場合には当該宛先オブジェクトに通信メッセージが引き渡され、他のプロセスに属する場合にはプロセスメッセージ取扱手段に通信メッセージを引き渡される。
【００３３】
このような過程をへて通信メッセージがあるオブジェクトから他のオブジェクトへ渡されることになる。
【００３４】
次に、課題解決のための第３の発明は、上記第１又は２の発明において、メッセージ通信制御手段は、各オブジェクトについてのオブジェクト識別情報と、前記オペレーティングシステムに生成されたときに各オブジェクトに付されたオブジェクトアドレスとの対応情報を記録するオブジェクト対応記録部を備えている。
【００３５】
メッセージ取扱手段は、メッセージの宛先情報としてオブジェクト識別情報のみが付されているときであっても、オブジェクト対応記録部を検索してオブジェクトアドレスを取得することにより、宛先オブジェクトに通信メッセージを引き渡し可能とする。
【００３６】
したがって、プログラムの変更をしなくても、プロセス対応記録部のオブジェクト識別情報を変更するのみでオブジェクト間通信における通信先等を変更することができる。
【００３７】
次に、課題解決のための第４の発明は、上記第１〜３の発明において、オペレーティングシステムは、オブジェクトを自律的に動作させるためのスレッドと通信メッセージ受信用のキューを生成可能に構成されている。
【００３８】
さらに、少なくとも一以上のオブジェクトは、スレッド及びキューを生成又は消滅させるための指令を通信メッセージとして出力可能となっている。
【００３９】
したがって、オブジェクトの生成・破壊とオブジェクト内のスレッドの起動・停止を分離される。また、システム動作中に同期通信と非同期通信を切り替えることも容易となる。
【００４０】
次に、課題解決のための第５の発明は、複数の計算機が接続されてなるネットワークシステムについてなされたものである。
【００４１】
このネットワークシステムにおいては、上記第１〜第５の発明のうち何れか一項に記載された複数のプロセスが、二以上の計算機に分散配置させている。
【００４２】
したがって、上記各発明の効果を計算機システム内にとどめることなく、ネットワーク全体に対して発揮させることができる。
【００４３】
次に、課題解決のための第６の発明は、上記第１の発明をコンピュータに実現させるためのプログラムを記録した記録媒体である。
【００４４】
この記録媒体から読み出されたプログラムにより制御されるコンピュータは、上記第１の発明の計算機システムとして機能する。
【００４５】
次に、課題解決のための第７の発明は、上記第２の発明をコンピュータに実現させるためのプログラムを記録した記録媒体である。
【００４６】
この記録媒体から読み出されたプログラムにより制御されるコンピュータは、上記第２の発明の計算機システムとして機能する。
【００４７】
次に、課題解決のための第８の発明は、上記第３の発明をコンピュータに実現させるためのプログラムを記録した記録媒体である。
【００４８】
この記録媒体から読み出されたプログラムにより制御されるコンピュータは、上記第３の発明の計算機システムとして機能する。
【００４９】
次に、課題解決のための第９の発明は、上記第４の発明をコンピュータに実現させるためのプログラムを記録した記録媒体である。
【００５０】
この記録媒体から読み出されたプログラムにより制御されるコンピュータは、上記第４の発明の計算機システムとして機能する。
【００５１】
【発明の実施の形態】
以下、本発明の実施の形態について説明する。
【００５２】
（発明の第１の実施の形態）
図１は本発明の第１の実施の形態に係る計算機システムの一例を示す構成図である。
【００５３】
この計算機システム２０においては、パーソナルコンピュータやワークステーション等の計算機上でマルチプロセス／マルチスレッド環境を実現するＵＮＩＸ等のＯＳが動作し、さらに当該ＯＳ上に複数のプロセス２１−１〜２１−２（プロセス＃１〜＃２）が設けられている。以下、各機能構成部分を示す符号における「−１」，「−２」，．．部分を削除して例えば「プロセス２１」等と示した場合には、その機能構成部分の一般的な場合を意味する。
【００５４】
各プロセス２１−１〜２１−２は、オブジェクト指向言語で記述されたプログラムをもとに生成されたものであり、それぞれメッセージ通信制御部２２およびアクタ部２３で構成されている。
【００５５】
アクタ部２３には、そのプロセス独自の処理を行うための主たるオブジェクトが配置される。ここで、プロセス２１−１のアクタ部２３には、オブジェクト２４−１〜２４−２（オブジェクトＡ〜Ｂ）が存在する。また、プロセス２１−２のアクタ部２３には、オブジェクト２４−３〜２４−４（オブジェクトＣ〜Ｄ）が存在する。
【００５６】
メッセージ通信制御部２２は、アクタ部２３に配置された各オブジェクト２４が他のオブジェクトと通信するために、メッセージハンドラ２５等の各機能を有している。なお、メッセージ通信制御部２２の機能構成部分も基本的にはオブジェクトから構成される。
【００５７】
メッセージハンドラ２５は、アクタ部２３における送信元オブジェクト２４からの通信メッセージを送信先オブジェクト２４に引き渡すための処理を、プロセス／スレッド対応マップ２６及びオブジェクト対応マップ２７を参照して行う。また、メッセージハンドラ２５は、メッセージ通信が同期通信であるか非同期通信であるかの通信種別を判別し、通信種別に対応して送信元のオブジェクト２４へ制御を戻すタイミングを調整することにより、オブジェクト２４からの同期通信又は非同期通信を実現する。
【００５８】
まず、メッセージハンドラ２５を経由してメッセージ通信を行う仕組みについて説明し、後にメッセージハンドラ２５を用いた同期通信・非同期通信の実現について説明する。
【００５９】
図２は各プロセスにおけるメッセージ通信部の詳細構成例を示すブロック図である。
【００６０】
同図に示すように、メッセージ通信制御部２２には、メッセージハンドラ２５に対応してメッセージハンドラキュー２８が設けられ、また、プロセスメッセージハンドラ２９，プロセス送信用メッセージキュー３０及びプロセス受信用メッセージキュー３１が設けられる。また、プロセス２１−１〜２１−２間には、共有メモリ３２−１及び３２−２が設けられる。
【００６１】
メッセージハンドラキュー２８は、オブジェクト２４からの通信メッセージを格納する。ここで格納される通信メッセージには、同一プロセス内のアクタ部２３に存在するオブジェクト２４から直接格納される場合と、他のプロセス２１のオブジェクト２４からプロセスメッセージハンドラ２９を経由して格納される場合とがある。
【００６２】
メッセージハンドラ２５では、自律的動作を行うためにスレッドが起動されており、このスレッドが自身のキュー２８を監視している。メッセージハンドラ２５は、メッセージハンドラキュー２８からスレッドにより取り出された送信メッセージを、同一プロセス２１（同一アクタ部２３）内の他のオブジェクト２４に引き渡すか、プロセスメッセージハンドラ２９に引き渡してメッセージ通信の他プロセス２１への送信を依頼する。
【００６３】
このために各メッセージハンドラ２５−１〜２５−２は、システム内に唯一存在するプロセス／スレッド対応マップ２６を参照し、送信先オブジェクト２４−１〜２４−４が存在するプロセス２１を識別する。
【００６４】
図３はプロセス／スレッド対応マップの構成例を示す図である。
【００６５】
同図（ａ）はプロセス／スレッド対応マップの一般的な構成（フォーマット）を示し、同図（ｂ）は本実施形態の場合におけるプロセス／スレッド対応マップ２６の構成を示している。
【００６６】
また、図４はオブジェクト対応マップの構成例を示す図である。
【００６７】
同図（ａ）はオブジェクト対応マップの一般的な構成（フォーマット）を示し、同図（ｂ）は本実施形態の場合におけるオブジェクト対応マップ２７−１の構成を示す。さらに、同図（ｃ）は本実施形態の場合におけるオブジェクト対応マップ２７−２の構成を示している。
【００６８】
プロセス／スレッド対応マップ２６は、各プロセスがどのようなオブジェクト２４を含むかの情報をオブジェクトＩＤ（識別情報）９１の形で格納している。また、各オブジェクト２４においてスレッドを起動させるか否かを示すスレッド起動情報９２を格納する。
【００６９】
オブジェクト対応マップ２７は、プロセス／スレッド対応マップ２６における各オブジェクトＩＤ９１が計算機システムのメモリ上ではどのアドレスに存在するかを示すオブジェクトアドレス情報９３を格納する。なお、プロセス対応マップ２６は、システム稼動時に参照できるようにシステムのファイルや共有メモリ等に保管されている。
【００７０】
メッセージハンドラ２５は、メッセージ内のオブジェクトＩＤに基づいてプロセス／スレッド対応マップ２６を参照した結果、同一プロセス内での通信であると判定した場合には、さらにオブジェクト対応マップ２７−１，２７−２（オブジェクト対応マップＰ１，Ｐ２）を参照し、送信先オブジェクトのアドレス情報９３を取得する。さらに取得したアドレス情報９３をもとに、自プロセスのアクタ部２３における送信先オブジェクト２４にメッセージの引き渡しを行う。
【００７１】
図５は各プロセスにおけるアクタ部の詳細構成例を示すブロック図である。
【００７２】
同図に示すように、アクタ部２３においては各オブジェクト２４に対応して、メッセージマップ３４が設けられる。また、メッセージキュー３３は、プロセス／スレッド対応マップ２６におけるスレッド起動情報９２がオンになっているオブジェクトについてのみ設けられる。
【００７３】
図６はスレッドが起動されたオブジェクトの詳細構成例を示すブロック図である。
【００７４】
オブジェクト２４のスレッド９４は、そのオブジェクトを自律的に動作させる場合に起動させるものである。このスレッド９４は、メッセージキュー３３に格納されたメッセージを順番に取り出し、そのメッセージ内に含まれるメッセージＩＤ（識別情報）とメッセージマップ３４とから対応するメゾット９５を特定し、そのメソッド９５を動作させるようになっている。
【００７５】
なお、スレッド９４が起動されない場合には、メッセージキュー３３が設けられず、オブジェクト２４は、メッセージを受信するたびに逐次的にメソッド９５の実行処理が行われる。この場合には、受信メソッドによってメッセージマップ３４が参照され、メッセージＩＤ９６に対応するメソッド情報９７が取り出されて実行されるべきメソッド９５が特定される。
【００７６】
図７はメッセージマップの構成例を示す図である。
【００７７】
同図（ａ）はメッセージマップの一般的な構成（フォーマット）を示し、同図（ｂ）は本実施形態の場合におけるメッセージマップ３４−１の構成を示す。さらに、同図（ｃ），（ｄ），（ｅ）は、それぞれ本実施形態の場合におけるメッセージマップ３４−２，３４−３，３４−４の構成を示している。
【００７８】
メッセージマップ３４においては、メッセージＩＤ９６に対応するメソッド情報９７が格納されている。
【００７９】
また、メッセージハンドラ２５は、プロセスメッセージハンドラ２９からメッセージの取り扱い通知を受けたときも、上記と同様にしてアクタ部２３のオブジェクトＩＤを取得しメッセージの引き渡しを行う。
【００８０】
一方、プロセス対応マップ２６を参照した結果、異なるプロセス間での通信であることが判定された場合には、メッセージハンドラ２５−１は、このメッセージ通信を図２に示すプロセスメッセージハンドラ２９−１に依頼する。
【００８１】
すなわちオブジェクト２４−１〜２４−２とオブジェクト２４−３〜２４−４との間のメッセージ通信は、プロセスメッセージハンドラ２９−１〜２９−２（プロセスメッセージハンドラＰ１−Ｐ２〜Ｐ２−Ｐ１）が取り扱う。
【００８２】
プロセスメッセージハンドラ２９には、自律的に動作するためにスレッドが起動されており、このスレッドが自分自身のキューを監視することでプロセス間メッセージ通信が実現される。
【００８３】
ここで、プロセス２１−１とプロセス２１−２との間は、共有メモリ３２−１（共有メモリＰ１−Ｐ２：プロセス＃１からプロセス＃２へのメッセージ通信）及び共有メモリ３２−２（共有メモリＰ２−Ｐ１：プロセス＃２からプロセス＃１へのメッセージ通信）が設けられ、これらの共有メモリ３２−１〜３２−２を介して、オブジェクト２４−１〜２４−２とオブジェクト２４−３〜２４−４との間のメッセージ通信が可能となる。
【００８４】
次に、メッセージハンドラ２５を用いて同期通信・非同期通信を実現させるための構成を説明する。
【００８５】
図８はメッセージハンドラの主要部分の構成例を示すブロック図である。
【００８６】
同図に示すメッセージハンドラ２５には、通信種別判定部１０１、送信先判定部１０２及び制御戻し部１０３が設けられている。なお、これらの各機能部１０１，１０２，１０３はスレッド（図示せず）により実行されるメソッド等からなっている。したがって、これらはスレッドにより実現される機能であるともいえる。ここで、メッセージは、送信先オブジェクトＩＤ及びメッセージ本体からなり、さらに、メッセージ本体には、送信元オブジェクトＩＤ、メッセージＩＤ及び同期／非同期何れの通信を行うかの通信方式情報が格納されている。
【００８７】
通信種別判定部１０１は、オブジェクト２４又はプロセスメッセージハンドラ２９からメッセージを受け取ると、そのメッセージをメッセージハンドラキュー２８に積むとともに、そのメッセージに含まれる送信元オブジェクトＩＤ及び通信方式情報に基づいて通信種別を判定する。すなわちまず、送信元オブジェクトＩＤ及びプロセス／スレッド対応マップ２６に基づいて当該メッセージが自己のプロセス２１から出力されたものであるかを判定する。自己プロセスで発信され、かつ非同期通信を行う場合には、制御戻し部１０３に直ちに制御を戻すように通知する。
【００８８】
制御戻し部１０３は、通信種別判定部１０１より、メッセージが非同期通信を行う旨の通知を受けた場合には、送信元オブジェクトにおいてメッセージ関数が完了できるように、送信元オブジェクトに制御を戻す。また、同期通信を行う場合には、送信先メッセージからメゾットの実行完了通知を受け取ると、送信元オブジェクトに制御を戻すように処理する。
【００８９】
このように、メッセージ内容に対応して通信種別判定部１０１及び制御戻し部１０３が処理を行うことにより、同期／非同期通信が実現される。何れの通信方式をとるかは通信方式情報の指定のみで決定されるので、通信方式の適宜の変更が可能である。
【００９０】
送信先判定部１０２は、メッセージハンドラキュー２８からスレッドによって取り出されたメッセージについて、そのメッセージに含まれる送信先オブジェクトのオブジェクトＩＤと、プロセス／スレッド対応マップ２６及びオブジェクト対応マップ２７とに基づいて、そのメッセージの送信先判定を行う。さらに、送信先オブジェクトに直接又は送信先が存在するプロセスにメッセージを引き渡すための処理を行う。すなわち上記した処理である。
【００９１】
また、メッセージハンドラ２５は、オブジェクト２４の生成時にオブジェクト２４が自分自身をメッセージハンドラ２５に登録する際、プロセス／スレッド対応マップ２６を参照し、スレッド起動情報９２にスレッドマッピングの指定がある場合（オン時）には、そのオブジェクト２４に対してスレッド起動メッセージを送信する。また同様に、オブジェクト２４の破壊時に、オブジェクト２４が自分自身をメッセージハンドラ２５から抹消する際、スレッド起動情報９２にスレッドマッピングの指定がある場合には、メッセージハンドラ２５は、そのオブジェクト２４に対してスレッド停止メッセージを送信する。
【００９２】
次に、以上のように構成された本実施形態における計算機システムの動作について、システムを起動した際のプロセスの動作、オブジェクトのメッセージ通信の動作、システムを停止した時のプロセスの動作を順に説明する。
【００９３】
［システム起動］
図９及び図１０はシステムを起動する際におけるプロセス、メッセージ通信制御部及びアクタ部の動作を示す流れ図である。
【００９４】
プロセスを起動するときには、図９（ａ）に示すように、まず始めにメッセージハンドラ２５−１〜２５−２が生成される（Ｓ１）。次に、プロセス２１に存在するべきオブジェクト２４−１〜２４−４が生成される（Ｓ２）。以下でさらに詳しく説明する。
【００９５】
メッセージハンドラ２５−１〜２５−２の生成時（Ｓ１）には、図９（ｂ）に示すように、メッセージハンドラキュー２８−１〜２８−２が生成され（Ｓ３）、メッセージハンドラキュー２８−１〜２８−２を監視するためのスレッドが起動される（Ｓ４）。さらに、プロセス／スレッド対応マップ２６が読み込まれ（Ｓ５）、プロセスメッセージハンドラ２９−１〜２９−２が生成される（Ｓ６）。
【００９６】
一方、プロセスメッセージハンドラ２９−１〜２９−２の生成時（Ｓ６）には、図９（ｃ）に示すように、プロセス送信用メッセージキュー３０−１〜３０−２が生成され（Ｓ７）、プロセス受信用メッセージキュー３１−１〜３１−２が生成される（Ｓ８）。さらに、プロセス受信用メッセージキュー３１−１〜３１−２を監視するためのスレッドが起動される（Ｓ９）。
【００９７】
また、プロセス２１に配置されるオブジェクト２４−１〜２４−４の生成時（図９：Ｓ２）には、図１０（ａ）に示すように、オブジェクト２４−１〜２４−４によって、メッセージハンドラ２５−１〜２５−２に自分自身が登録される（Ｓ１０）。これにより、オブジェクト対応マップ２７−１〜２７−２にオブジェクトのアドレス情報が登録されることになる。
【００９８】
一方、メッセージハンドラ２５−１〜２５−２がオブジェクト２４−１〜２４−４から登録指示を受けると（Ｓ１０）、図１０（ｂ）に示すように、まず、オブジェクト対応マップ２７−１〜２７−２にオブジェクト２４−１〜２４−４が登録される（Ｓ１１）。次に、プロセス／スレッド対応マップ２６が参照され（Ｓ１２）、登録したオブジェクト２４−１〜２４−４に対してスレッドマッピングの指定があるかどうかがスレッド起動情報９２により調べられる（Ｓ１３）。ここで、オブジェクト２４−４にはスレッドマッピングの指定があるため、メッセージハンドラ２５−２からオブジェクト２４−４に対してスレッド起動メッセージが送信される（Ｓ１４）。
【００９９】
このスレッド起動メッセージはオブジェクト２４−４にて受け取られ、スレッドがマッピングされる。メッセージ通信の詳しい動作については後述するが、図７（ｂ）〜（ｅ）に示すように、スレッド起動メッセージ（図７中のメッセージＩＤ＿Ｒｕｎ）がオブジェクト２４−４にて受け取られると、当該オブジェクト２４−４にてメッセージに対応するメソッドが呼び出される。
【０１００】
図７（ｅ）に示すように、スレッド起動メッセージのＩＤ９６は、スレッド起動メソッド情報９７に対応している。このメソッドは、図７に示すように、オブジェクト２４−１〜２４−４において共通で利用可能に構成されている。したがって、オブジェクト２４−１〜２４−４を抽象化したオブジェクトで定義し、オブジェクト２４−１〜２４−４ではオブジェクト指向技術の継承機構を導入して再利用する。
【０１０１】
さらに、スレッド起動メソッドは、図１１（ａ）に示す内容になっている。
図１１は各種のメソッドの内容例を示す図である。
図１１（ａ）のメソッドによれば、まずメッセージを受信するためのメッセージキュー３３−４が生成され、スレッドが起動され、そしてスレッドフラグがオンにされる。この時点で、オブジェクト２４−４は自律的に動作することが可能となるので、それ自体で非同期メッセージ通信することも可能な状態になる。
【０１０２】
［メッセージ通信］
次に、メッセージ通信について説明する。ここで、メッセージ通信には、同一プロセス内のオブジェクト間通信と、プロセスをまたぐオブジェクト間通信とがある。また、メッセージ通信においては、非同期通信と同期通信の両方について示す。さらに、送信先オブジェクト２４に対するスレッドマッピングの状態によっても動作が異なる。以上を整理すると次のようになる。
【０１０３】
■  同一プロセス内のオブジェクト間メッセージ通信
（１）非同期メッセージ通信（オブジェクトのスレッドなし）
送信先オブジェクト２４にはスレッドはないが、メッセージハンドラ２５にスレッドがあるため、結果として非同期メッセージ通信が可能となる。
【０１０４】
（２）同期メッセージ通信（オブジェクトのスレッドなし）
送信先オブジェクトにはスレッドはないが、直接送信先オブジェクトのメソッドを呼び出すのではなく、メッセージハンドラ経由で通信するため、同期待ちが必要である。
【０１０５】
（３）非同期メッセージ通信（オブジェクトのスレッドあり）
送信先オブジェクトにスレッドがあり、通常の非同期メッセージ通信である。
【０１０６】
（４）同期メッセージ通信（スレッドあり）
送信先オブジェクトにスレッドがあり、必ず同期待ちが必要である。
【０１０７】
■  プロセスをまたぐオブジェクト間メッセージ通信
（５）非同期メッセージ通信（オブジェクトのスレッドなし）
送信先オブジェクトにはスレッドはないが、プロセスをまたぐため、結果として非同期メッセージ通信が可能となる。
【０１０８】
（６）同期メッセージ通信（オブジェクトのスレッドなし）
送信先オブジェクトにはスレッドはないが、プロセスをまたぐため、同期待ちが必要である。
【０１０９】
（７）非同期メッセージ通信（オブジェクトのスレッドあり）
送信先オブジェクトにスレッドがあり、通常の非同期メッセージ通信と考えられる。
【０１１０】
（８）同期メッセージ通信（オブジェクトのスレッドあり）
送信先オブジェクトにスレッドがあり、プロセスをまたぐため、必ず同期待ちが必要である。
【０１１１】
すなわち本発明においては、メッセージ通信を実現するためにメッセージハンドラ２５を利用し、このメッセージハンドラ２５にスレッドを与えている。したがって、このメッセージハンドラ２５に通信方式を識別し制御する手段（図８）を与えることで、オブジェクト側の事情に関係なく、同期通信と非同期通信を実現するとともに、通信方式を容易に変更することが可能となる。
【０１１２】
説明の都合上から、上記の（１）〜（６）の場合については本実施形態にて詳細に説明し、（７）〜（８）については第２の実施形態にて説明する。
この詳細説明の前に、第１，第２実施形態における同期通信と非同期通信の考え方を図１２により説明する。
【０１１３】
図１２は同期通信又は非同期通信を行う場合の全体的な考え方について説明する図である。
同期通信の場合（図１２（ａ））には、送信元オブジェクトからメッセージがメッセージハンドラ２５のキュー２８に積まれると、これをスレッドが検出し、通信種別判定部１０１により通信種別が判定される。この場合、通信種別が同期通信であるので、メッセージはそのまま送信先オブジェクトに送信され、当該送信先オブジェクトにてメソッドが実行される。メソッドが実行されるとその実行完了通知が送信先オブジェクトから最初のメッセージハンドラ２５に送信される。この完了通知を受けた時点でメッセージハンドラ２５の制御戻し部１０３により送信元オブジェクトに制御が戻される。これにより、事実上、同期通信が実現されることになる。
【０１１４】
非同期通信の場合（図１２（ｂ））においても、送信元オブジェクトからのメッセージはメッセージハンドラキュー２８に積まれ、スレッド検出、通信種別判定部１０１による通信種別判定が行われる。この場合は、通信種別が非同期通信であるので、その旨が直ちに制御戻し部１０３に通知され、制御戻し部１０３から送信元オブジェクト２４に制御が戻される。これにより、事実上、非同期通信が実現される。
【０１１５】
以下、上記（１）〜（６）について図１３〜図１６を用いて細述する。
図１３はメッセージ通信全体の処理を示す流れ図である。
図１４はメッセージ通信におけるメッセージハンドラスレッドの処理を説明する流れ図である。
図１５はメッセージ通信におけるプロセスハンドラスレッドの処理を説明する流れ図である。
図１６はメッセージ通信におけるオブジェクトの処理を説明する流れ図である。なお、同図（ａ）はメッセージを受信したオブジェクトにおける受信メソッドの処理を示し、同図（ｂ）は同オブジェクトにおけるスレッドの処理を示す。
【０１１６】
（１）同一プロセス非同期メッセージ通信（オブジェクトのスレッドなし）
まず、同一プロセス内のオブジェクト間の非同期メッセージ通信（オブジェクト２４のスレッドなし）について、メッセージ通信制御部２２のメッセージハンドラ２５−１およびアクタ部２３のオブジェクト２４−１〜２４−２の動作を図１３，図１４及び図１６を用いて説明する。
【０１１７】
オブジェクト２４−１のメソッドＡでオブジェクト２４−２に向けてメッセージ本体Ｂ（以下、メッセージＢともいう、他のメッセージについても同様）を送信することを考える。オブジェクト２４−１のメソッドＡは、図１１（ｃ）に示す内容になる。
【０１１８】
メッセージ関数（ＳｅｎｄＭｅｓｓａｇｅ）を利用して、オブジェクト２４−１からオブジェクト２４−２に向けてメッセージＢが送信されると、送信先オブジェクト２４−２のオブジェクトＩＤとメッセージＢがメッセージハンドラ２５−１に渡され、メッセージハンドラキュー２８−１に格納される（図１３：Ｔ１）。さらに、メッセージ本体の内容から同期通信かどうかがメッセージハンドラ２５−１により調べられる（Ｔ２）。同期通信に関する情報は上記のようにメッセージ本体に含まれている。
【０１１９】
この場合、非同期通信を想定しているので、メッセージハンドラキュー２８−１に送信先オブジェクト２４−２のオブジェクトＩＤとメッセージＢが格納された時点でメッセージハンドラ２５−１からオブジェクト２４−１に制御が戻り、オブジェクト２４−１におけるメッセージ関数は完了する。したがって、以降、オブジェクト２４−１は、オブジェクト２４−２とは独立して自律的に動作することになり、非同期メッセージ通信が実現される。
【０１２０】
続いて、送信先のオブジェクト２４−２のオブジェクトＩＤと送信メッセージＢがメッセージハンドラキュー２８−１に格納されると（図１４：Ｔ４）、メッセージハンドラ２５−１により、メッセージハンドラキュー２８−１からオブジェクト２４−２のオブジェクトＩＤとメッセージＢが取り出される（Ｔ５）。さらに、プロセス／スレッド対応マップ２６に記述されたオブジェクト２４−２のオブジェクトＩＤに対応するプロセスが検索される（Ｔ６）。
【０１２１】
これにより、オブジェクト２４−２がオブジェクト２４−１と同一プロセス２１−１（プロセス＃１）に存在するかどうかが調べられる（Ｔ７）。図３（ｂ）に示すように、本実施形態においては同一プロセスに存在することが判明するので、メッセージハンドラ２５−１により、メッセージＢがスレッド終了メッセージでないことが確認された上で（Ｔ９）、さらに、オブジェクト対応マップ２７−１からオブジェクト２４−２のオブジェクトＩＤに対応するオブジェクトが検索される（Ｔ１０）。
【０１２２】
図４（ｂ）に示すオブジェクト対応マップに基づき、メッセージハンドラ２５−１によりオブジェクト２４−２のオブジェクトＩＤからオブジェクトのアドレス情報９３が取り出され（Ｔ１０）、送信先オブジェクト２４−２にメッセージＢが送信される（Ｔ１１）。この場合は、メッセージ通信にプロセスメッセージハンドラ２９−１を介さないので、図１６の処理に移る。
【０１２３】
すなわち、メッセージＢがメッセージハンドラ２５−１から送信されると、送信メッセージＢが送信先オブジェクト２４−２に渡され、送信先オブジェクト２４−２の受信メソッドが呼び出される。まず、送信先オブジェクト２４−２にスレッドがマッピングされているかが調べられる（図１６：Ｔ１９）。送信先オブジェクト２４−２には、図３（ｂ）にあるようにスレッドがマッピングされていないため、メッセージの着信に対応して受信メソッドにより、メッセージＢに対応するメソッドＢがメッセージマップ３４−２から検索される（Ｔ２１）。
【０１２４】
図７（ｃ）に示す対応関係があることから、オブジェクト２４−２においては、メッセージＢに対応するメソッドＢが呼び出され（Ｔ２２）、さらに、同期通信かどうかが調べられる（Ｔ２３）。ここでは、非同期通信を想定しているため、送信先オブジェクト２４−２のメソッドＢが実行された時点で受信メソッドは完了する。
【０１２５】
（２）同一プロセス同期メッセージ通信（オブジェクトのスレッドなし）
次に、同一プロセス内のオブジェクト間の同期メッセージ通信（オブジェクト２４のスレッドなし）について、メッセージ通信制御部２２のメッセージハンドラ２５−１およびアクタ部２３のオブジェクト２４−１〜２４−２の動作を図１３，図１４及び図１６を用いて説明する。
【０１２６】
オブジェクト２４−１がオブジェクト２４−２に向けてメッセージＢを送信することを考える。オブジェクト２４−１のメソッドＡは、図１１（ｃ）に示す内容である。メッセージ関数（ＳｅｎｄＭｅｓｓａｇｅ）を利用して、オブジェクト２４−１からオブジェクト２４−２に向けてメッセージＢが送信されると、送信先オブジェクト２４−２のオブジェクトＩＤとメッセージＢがメッセージハンドラ２５−１に渡され、メッセージハンドラキュー２８−１に格納される（Ｔ１）。
【０１２７】
さらに、メッセージハンドラ２５−１において、この通信が同期通信かどうかが調べられる（Ｔ２）。この場合、同期通信を想定しているので、メッセージハンドラ２５−１からはメソッド実行完了通知が受信されるまで制御がオブジェクト２５−１に戻されない。したがって、オブジェクト２５−１におけるメッセージ関数は完了せず、送信先オブジェクト２４−２のメソッドの実行が完了するまで待つことになる（Ｔ３）。これにより、オブジェクト２４−１は、オブジェクト２４−２と同期をとって動作することになる。
【０１２８】
上記の動作以降、メッセージハンドラ２５−１を経由してオブジェクト２４−２の受信メソッドが呼び出されるまでは（１）と同様である（図１４：Ｔ４〜Ｔ１１）。
【０１２９】
次に、図１６のオブジェクトにおける処理に移る。この（２）の場合においても、（１）の場合と同様にスレッドが起動されていないので、図１６における同期通信判断の処理（Ｔ２３）までは、（１）と同様である。
【０１３０】
同期通信かどうかを調べるステップＴ２３においては、今回は、同期通信を想定しているため、ステップＴ２４に進む。ステップＴ２４においては、メソッドＢ実行（Ｔ２２）後に、送信元オブジェクト２４−１に対して送信先オブジェクト２４−２のメソッドＢの実行が完了したことが通知される（Ｔ２４）。この処理は、実際には、一旦、メッセージハンドラ２５−１に対する通知がなされ、当該ハンドラ２５−１からオブジェクト２４−１に制御が戻されることになる。これにより、オブジェクト２４−１のメッセージ関数が完了する。この時点以降、オブジェクト２４−１においては動作を継続することができ、同期メッセージ通信が実現される。
【０１３１】
上記の通信（１）と（２）とを比較すると、オブジェクト２４−１にとっては同一のスレッドによって同期非同期通信を行うことができる。このとき、両通信で異なっているのは、メッセージ本体（メッセージＣ）における通信種別指定が同期となっているか非同期となっているかだけである。なお、この事情は、後述する（３）と（４）と間、（５）と（６）と間、（７）と（８）と間において同様である。
【０１３２】
（３）同一プロセス非同期メッセージ通信（オブジェクトのスレッドあり）
次に、同一プロセス内のオブジェクト間の非同期メッセージ通信（オブジェクト２４のスレッドあり）について、メッセージ通信制御部２２のメッセージハンドラ２５−２およびアクタ部２３のオブジェクト２４−３〜２４−４の動作を図１３，図１４及び図１６を用いて説明する。
【０１３３】
オブジェクト２４−３のメソッドＣでオブジェクト２４−４に向けてメッセージＤを送信することを考える。オブジェクト２４−３のメソッドＣは、図１１（ｅ）に示す内容である。メッセージ関数（ＳｅｎｄＭｅｓｓａｇｅ）を利用して、メッセージハンドラ２５−２経由でオブジェクト２４−４の受信メソッドが呼び出されるまでは（１）と同様である。先と同様に、メッセージハンドラキュー２８−２に送信先オブジェクト２４−４のオブジェクトＩＤとメッセージＤが格納された時点でオブジェクト２４−３のメッセージ関数は完了する。したがって、オブジェクト２４−３は、オブジェクト２４−４とは独立して自律的に動作することができ、非同期メッセージ通信が実現される。
【０１３４】
次に、図１６において、送信先オブジェクト２４−４の受信メソッドが呼び出されると、オブジェクト２４−４にスレッド指定があるかどうかが調べられる（Ｔ１９）。送信先オブジェクト２４−４は、図３（ｂ）に示されるようにスレッドがマッピングされている。したがって、送信メッセージＤはメッセージキュー３３−４に格納される（Ｔ２０）。この時点でオブジェクト２４−４にメッセージが積まれたことが通知される。
【０１３５】
続いて、オブジェクト２４−４におけるスレッドによりメッセージキュー３３−４にメッセージが積まれたかどうかが調べられる（Ｔ２５）。送信先オブジェクト２４−４により、メッセージキュー３３−４からメッセージＤが取り出され（Ｔ２６）、まず、メッセージＤがスレッド終了メッセージでないことが確認される（Ｔ２７）。スレッド終了メッセージでなければ、メッセージＤに対応するメソッドＤがメッセージマップ３４−４から検索され（Ｔ２８）、図７（ｅ）にあるように、メッセージＤに対応するメソッドＤが呼び出される（Ｔ２９）。
【０１３６】
次に、同期通信かどうかが調べられる（Ｔ３０）。ここでは、非同期通信を想定しているため、送信先オブジェクト２４−４のメソッドＤが実行された時点でメッセージ受信処理は完了する。続いて、再びメッセージキューにメッセージを積まれるまで待つ。
【０１３７】
（４）同一プロセス同期メッセージ通信（オブジェクトのスレッドあり）
次に、同一プロセス内のオブジェクト間の同期メッセージ通信（オブジェクト２４のスレッドあり）について、メッセージ通信制御部２２のメッセージハンドラ２５−２およびアクタ部２３のオブジェクト２４−３〜２４−４の動作を図１３，図１４及び図１６を用いて説明する。
【０１３８】
オブジェクト２４−３のメソッドＣでオブジェクト２４−４に向けてメッセージＤを送信することを考える。オブジェクト２４−３のメソッドＣは、図１１（ｅ）に示す内容である。メッセージ関数（ＳｅｎｄＭｅｓｓａｇｅ）を利用して、メッセージハンドラ２５−２経由でオブジェクト２４−４の受信メソッドが呼び出されるまでは（２）と同様である。先と同様に、オブジェクト２４−３は、オブジェクト２４−４と同期をとって動作する。
【０１３９】
また、図１６における処理は、ステップＴ３０の同期通信であるか否かの判断までは上記（３）と同様である。メソッド実行（Ｔ２９）後、同期通信かどうかが調べられる（Ｔ３０）。ここでは、同期通信を想定しているため、送信元オブジェクト２４−３に対してオブジェクト２４−４のメソッドＤの実行が完了したことが通知される（Ｔ３１）。この処理は、（２）と同様に実際には、一旦、メッセージハンドラ２５−１に対する通知がなされ、当該ハンドラ２５−１からオブジェクト２４−１に制御が戻されて実現される。
【０１４０】
この時点ではじめて、オブジェクト２４−３は動作を継続することができ、同期メッセージ通信が実現される。なお、オブジェクト２４−４においては、再びメッセージキュー３３−４にメッセージが積まれるのを待つことになる。
【０１４１】
（５）プロセス間非同期メッセージ通信（オブジェクトのスレッドなし）
さらに、プロセスをまたぐオブジェクト間の非同期メッセージ通信（オブジェクト２４のスレッドなし）について、メッセージ通信制御部２２のメッセージハンドラ２５−１〜２５−２およびアクタ部２３のオブジェクト２４−２〜２４−３の動作を図１３〜図１６を用いて説明する。
【０１４２】
オブジェクト２４−２がメソッドＢでオブジェクト２４−３に向けてメッセージＣを送信することを考える。オブジェクト２４−３のメソッドＣは、図１１（ｄ）に示す内容である。まず、メッセージ関数（ＳｅｎｄＭｅｓｓａｇｅ）が用いられ、さらに、メッセージハンドラ２５−１によりプロセス／スレッド対応マップ２６からオブジェクト２４−３のオブジェクトＩＤが検索されるまでは、（１）と同様である（図１３のＴ１〜図１４のＴ６）。
【０１４３】
先と同様に、メッセージハンドラキュー２８−１に送信先オブジェクト２４−３のオブジェクトＩＤとメッセージＣが格納された時点でメッセージ関数は完了する。したがって、オブジェクト２４−２は、オブジェクト２４−３とは独立して自律的に動作することができ、非同期メッセージ通信が実現される。
【０１４４】
ここでは、図３（ｂ）に示すように、オブジェクト２４−３がオブジェクト２４−２とは異なるプロセス２１−２に存在することが判明する（図１４：Ｔ７）。したがって、メッセージハンドラ２５−１により、プロセス２１−２に対応するプロセスメッセージハンドラ２９−１が取り出され（Ｔ１２）、オブジェクト２４−３のオブジェクトＩＤとメッセージＣが当該プロセスメッセージハンドラ２９−１に送信される（Ｔ１３）。送信されたオブジェクト２４−３のオブジェクトＩＤ及びメッセージＣは、プロセスメッセージハンドラ２９−１によりプロセス送信用メッセージキュー３０−１に格納され（Ｔ１４）、続いて共有メモリ３２−１上にオブジェクト２４−３のオブジェクトＩＤとメッセージＣが置かれる。次に、図１５に示す処理に移行する。
【０１４５】
次に、送信先オブジェクト２４−３が存在するプロセス２１−２内のプロセスメッセージハンドラ２９−２によって、共有メモリ３２−１に置かれたオブジェクト２４−３のオブジェクトＩＤとメッセージＣが取り出され、プロセス受信用メッセージキュー３１−２に格納される（Ｔ１５）。プロセスメッセージハンドラ２９−２により、プロセス受信用メッセージキュー３１−２からオブジェクト２４−３のオブジェクトＩＤとメッセージＣが取り出される（Ｔ１６）。さらに、メッセージＣがスレッド終了メッセージでないことが確認された上で（Ｔ１７）、メッセージハンドラ２５−２に送信される（Ｔ１８）。
【０１４６】
上記の動作により、図１４のメッセージハンドラにおける処理に移り、今度は、同一プロセス内のオブジェクトに対するメッセージ引き渡しとなるので、以降は（１）と同様な処理がなされることになる。
【０１４７】
（６）プロセス間同期メッセージ通信（オブジェクトのスレッドなし）
さらに、プロセスをまたぐオブジェクト間の非同期メッセージ通信（オブジェクト２４のスレッドなし）について、メッセージ通信制御部２２のメッセージハンドラ２５−１〜２５−２およびアクタ部２３のオブジェクト２４−２〜２４−３の動作を図１３〜図１６を用いて説明する。
【０１４８】
オブジェクト２４−２がメソッドＢでオブジェクト２４−３に向けてメッセージＣを送信することを考える。オブジェクト２４−３のメソッドＣは、図１１（ｄ）に示す内容である。メッセージ関数（ＳｅｎｄＭｅｓｓａｇｅ）を利用して、メッセージハンドラ２５−１からメッセージハンドラ２５−２へメッセージＣが渡され、オブジェクト２４−３の受信メソッドが呼び出されるまでは（５）と同様である（図１３のＴ１〜図１６のＴ１９）。ここでは同期通信を想定しているため、上記（２）と同様にオブジェクト２４−２はオブジェクト２４−３のメソッドの実行が完了するまで処理を待つことになる。
【０１４９】
オブジェクト２４−３の受信メソッドが呼び出された後の処理は、上記（２）と同様である。したがって、オブジェクト２４−３におけるメソッド実行が完了すると、その旨がメッセージハンドラ２５−１に通知され、制御がオブジェクト２４−２に戻されて、同期メッセージ通信が実現される。
【０１５０】
［システム停止］
次に、システムを停止する際のプロセスの動作、メッセージ通信制御部２２およびアクタ部２３の動作を図１７及び図１８を用いて説明する。
【０１５１】
図１７及び図１８はシステムを停止する際におけるプロセス、メッセージ通信制御部及びアクタ部の動作を示す流れ図である。
【０１５２】
図１７（ａ）に示すように、プロセスを停止するときには、まず始めに、プロセスに存在しているオブジェクト２４−１〜２４−４が破壊される（Ｕ１）。次に、メッセージハンドラ２５−１〜２５−２が破壊される（Ｕ２）。以下でさらに詳しく説明する。
【０１５３】
プロセス２１−１〜２１−２に配置されたオブジェクト２４−１〜２４−４の破壊時には、オブジェクトＩＤの登録がメッセージハンドラ２５−１〜２５−２から抹消される（図１７（ｂ）：Ｕ３）。
【０１５４】
一方、メッセージハンドラ２５−１〜２５−２の破壊時には、まず、プロセスメッセージハンドラ２９−１〜２９−２が削除される（図１７（ｃ）：Ｕ４）。続いて、自分自身にスレッド終了メッセージが送信され（Ｕ５）、メッセージハンドラキュー２８−１〜２８−２を監視しているスレッドが終了（Ｕ６）した後に、メッセージハンドラキュー２８−１〜２８−２が破壊される（Ｕ７）。
【０１５５】
また、プロセスメッセージハンドラ２９−１〜２９−２の破壊時には、自分自身にスレッド終了メッセージが送信される（図１８（ａ）：Ｕ８）。続いて、プロセス受信用メッセージキュー３１−１〜３１−２を監視していたスレッドが終了（Ｕ９）した後に、プロセス受信用メッセージキュー３１−１〜３１−２が破壊される（Ｕ１０）。そして、プロセス送信用メッセージキュー３０−１〜３０−２が破壊される（Ｕ１１）。
【０１５６】
一方、メッセージハンドラ２５−１〜２５−２がオブジェクト２４−１〜２４−４から抹消指示を受けると、オブジェクト対応マップ２７−１〜２７−２からオブジェクト２４−１〜２４−４が抹消される（図１８（ｂ）：Ｕ１２）。次に、プロセス／スレッド対応マップ２６が参照され（Ｕ１３）、抹消したオブジェクト２４−１〜２４−４に対してスレッドマッピングの指定があるかどうかが調べられる（Ｕ１４）。本実施形態ではオブジェクト２４−４にはスレッドマッピングの指定があり、オブジェクト２４−４に対してスレッド停止メッセージが送信される（Ｕ１５）。
【０１５７】
また、オブジェクト２４−４においては、スレッド停止メッセージを受信すると、スレッドが停止する。図７（ｂ）〜（ｅ）に示すように、スレッド停止メッセージ（メッセージＩＤ＿Ｔｅｒｍｉｎａｔｅ）をオブジェクト２４−４が受け取ると、自分自身でメッセージに対応するメソッドを呼び出す。図７（ｅ）にあるように、スレッド停止メッセージは、スレッド停止メソッドに対応している。
【０１５８】
このメソッドはオブジェクト２４−１〜２４−４において共通に利用可能なため、オブジェクト２４−１〜２４−４を抽象化したオブジェクトで定義し、オブジェクト２４−１〜２４−４ではオブジェクト指向技術の継承機構を導入して再利用する。さらに、スレッド停止メソッドは、図１１（ｂ）に示す内容になっている。このメソッドでは、まずスレッドを停止し、メッセージを受信するためのメッセージキュー３３−４を破壊し、スレッドフラグをＯＦＦにする。
【０１５９】
上述したように、本発明の実施の形態に係る計算機システムは、プログラムの並行処理が可能なマルチプロセス／マルチスレッド環境において、メッセージハンドラを設けてプロセス間通信を実現するとともに、このメッセージハンドラにより通信の同期／非同期の判断を行ってその後の処理を行うようにしたので、同期通信および非同期通信を同じインタフェースで実現することができる。
【０１６０】
さらに、同期／非同期の通信種別情報をメッセージ内に含めるようにしたので、同期／非同期の両通信方式をプログラムを変更することなしに容易に変更できることができる。
【０１６１】
また、プロセス／スレッド対応マップ２６によりシステム内の各オブジェクトを管理するようにしたので、オブジェクトのプロセス配置およびスレッドマッピングを容易に変更することができる。したがって、プログラムの変更量を軽減するとともに、プロセス配置やスレッドマッピングの変更に伴うプログラムの変更量を軽減し、システムを効率的に開発することができる。
【０１６２】
（発明の第２の実施の形態）
本実施形態は、第１の実施形態においてシステム内のプロセスの数を三つとしたものであり、その点を除けば第１の実施形態と同様に構成され動作する。
【０１６３】
図１９は本発明の第２の実施の形態に係る計算機システムの一例を示す構成図である。図２０及び図２１は、図１９のシステムにおいて、それぞれメッセージ通信制御部及びアクタ部の構成を詳細に示す図である。
【０１６４】
さらに図２２、図２３及び図２４は、本実施形態のプロセス／スレッド対応マップ、オブジェクト対応マップ及びメッセージマップを示す図である。
【０１６５】
本実施形態の各図において、図１〜図１８と同一部分には同一符号を付して説明を省略し、ここでは異なる部分についてのみ述べる。なお、図１９，図２０，図２１，図２２，図２３，図２４は、それぞれ図１，図２，図５，図３，図４，図７に対応する。
【０１６６】
本実施形態の計算機システム２０は、オブジェクト２４−４（オブジェクトＤ）を新たに別のプロセス２１−３（プロセス＃３）に配置するように変更したものである。すなわち、本システム２０は、プロセス２１−１〜２１−３（プロセス＃１〜＃３）という三つのプロセスが存在し、それぞれメッセージ通信制御部２２およびアクタ部２３で構成されている。
【０１６７】
ここで、新たなプロセス＃３が付加され、当該プロセス＃３はプロセス＃１と共有メモリ３２−３，３２−４を介して通信可能に構成される。したがって、プロセス＃３のオブジェクトＤとの通信は、プロセス＃１内に新たに設けられたプロセスメッセージハンドラ２９−２を介して行われることになる。なお、図１９〜図２１において、Ｐ１−Ｐ２はプロセス＃１からプロセス＃２への処理であることを示し、同様にＰ２−Ｐ１，Ｐ１−Ｐ３，Ｐ３−Ｐ１はプロセス＃２から＃１，＃１から＃３，＃３から＃１への処理であることを示す。
【０１６８】
各メッセージ通信制御部２２には、図２２及び図２３に示すようなプロセス／スレッド対応マップ２６及びオブジェクト対応マップ２７が設けられる。
【０１６９】
したがって、オブジェクト間のメッセージ通信においては、図１１と同様な通信用メソッドにより、第１の実施形態と同様な処理が実行される。したがって、同一プロセス間であっても異なるオブジェクト間、異なるプロセス間ではプロセス＃１，＃２，＃３の自由な組み合わせで同期，非同期のメッセージ通信が実現できる。
【０１７０】
なお、本実施形態の場合、プロセス＃２，＃３間の通信では、そのメッセージ及びオブジェクトＩＤは、一旦プロセス＃１で中継されることになる。この場合の処理では、メッセージハンドラキュー２８−１に格納されたオブジェクトＩＤ９１がメッセージハンドラ２５−１によって取り出され、このＩＤ４１に基づき、プロセス／スレッド対応マップ２６が検索される。そして、対応するプロセス＃２，＃３のプロセスメッセージハンドラ２９−１又は２９−２に、このメッセージ及び論理オブジェクトＩＤが引き渡されて、通信処理が継続される。
【０１７１】
以上は、第三のプロセス＃３を加えたことによる一般的な通信動作の説明であるが、さらに、同期通信又は非同期通信の実現に関連し、第１の実施形態における（７），（８）の場合を詳しく説明する。
【０１７２】
なお、メッセージハンドラ２５−１〜２５−３、プロセスメッセージハンドラ２９−１〜２９−４には、それぞれ一つのスレッドが割り当てられて自律的に動作し、このスレッドが自分自身のキューを監視する。一方、送信先オブジェクト２４−１〜２４−４については、図２４でスレッドマッピングの指定を行っている。送信先オブジェクト２４−１、２４−２及び２４−４については、スレッドが“ＯＦＦ”指定されているため、スレッドは割り当てられない。一方、送信先オブジェクト２４−３については、スレッドが“ＯＮ”指定されているため、一つのスレッドが割り当てられて自律的に動作し、このスレッドが自分自身のキューを監視する。アクタ部２３のオブジェクト２４−１〜２４−４を表現し、オブジェクト２４−１〜２４−４のスレッドマッピングに関する情報を表現したプロセス／スレッド対応マップ２６は、あらかじめ図２２（ｂ）に示す内容でファイルや共有メモリなどシステム稼動時に参照できるような形態で保管されている。
【０１７３】
（７）プロセス間非同期メッセージ通信（オブジェクトのスレッドあり）
プロセスをまたぐオブジェクト間の非同期メッセージ通信（オブジェクトのスレッドあり）に関し、メッセージ通信制御部２２のメッセージハンドラ２５−１〜２５−２およびアクタ部２３のオブジェクト２４−２〜２４−３の動作を第１実施形態の図１３〜図１６を参照して説明する。
【０１７４】
オブジェクト２４−２のメソッドＢでオブジェクト４４−３に向けてメッセージＣを送信することを考える。
【０１７５】
図２５は第２の実施形態にて用いられる各種のメソッドの内容例を示す図である。
オブジェクト２４−２のメソッドＢは、図２５（ｄ）に示す内容になる。メッセージは第１実施形態と同様な情報を含む。ここで、メッセージ関数（ＳｅｎｄＭｅｓｓａｇｅ）を利用して、オブジェクト２４−２からオブジェクト２４−３に向けてメッセージＣが送信されると、メッセージハンドラ２５−１からメッセージハンドラ２５−２へメッセージＣが渡され、オブジェクト２４−３の受信メソッドが呼び出されるまでの処理は、第１の実施形態の（５）と同様である。
【０１７６】
なお、先と同様に、メッセージハンドラキュー２８−１に送信先オブジェクト２４−３のオブジェクトＩＤとメッセージＣが格納された時点でメッセージハンドラ２５−１の処理によりメッセージ関数は完了する。したがって、オブジェクト２４−２は、オブジェクト２４−３とは独立して自律的に動作することができ、非同期メッセージ通信を実現できる。
【０１７７】
上記の動作以降、メッセージハンドラ２５−２を経由してオブジェクト２４−３の受信メソッドが呼び出された後の処理は、第１の実施形態の（３）と同様である。
【０１７８】
なお、プロセス／スレッド対応マップ２６及びオブジェクト対応マップ２７の内容は図２２及び図２３に示すようになっており、本計算機システムは、上記のように動作するので、プロセスの配置を変更しても、メッセージ通信に関するプログラムには影響を与えることはない。
【０１７９】
（８）プロセス間同期メッセージ通信（オブジェクトのスレッドあり）
さらに、プロセスをまたぐオブジェクト間の同期メッセージ通信（オブジェクトのスレッドあり）に関し、メッセージ通信制御部２２のメッセージハンドラ２５−１〜２５−２およびアクタ部２３のオブジェクト２４−２〜２４−３の動作を第１実施形態の図１３〜図１６を参照して説明する。
【０１８０】
オブジェクト２４−２のメソッドＢがオブジェクト２４−３に向けてメッセージＣを送信することを考える。オブジェクト２４−２のメソッドＢは、図２５（ｄ）に示す内容になる。メッセージ関数（ＳｅｎｄＭｅｓｓａｇｅ）を利用して、オブジェクト２４−２からオブジェクト２４−３に向けてメッセージＣが送信される。さらに、メッセージハンドラ２５−１からメッセージハンドラ２５−２にメッセージＣが渡され、オブジェクト２４−３の受信メソッドが呼び出される処理までは、第１の実施形態の（７）と同様である。
【０１８１】
ここでは同期通信を想定しているため、第１の実施形態の（４）と同様に、オブジェクト２４−２は、オブジェクト２４−３のメソッドの実行が完了するまで待つことになる。したがって、オブジェクト２４−２は、オブジェクト２４−３と同期をとって動作することができる。
【０１８２】
上記の動作以降、メッセージハンドラ２５−２を経由してオブジェクト２４−３の受信メソッドが呼び出された後の処理は、第１の実施形態の（４）と同様である。すなわち、オブジェクト２４−３は、メッセージハンドラ２５−１を介してオブジェクト２４−２にオブジェクト２４−３のメソッドの実行が完了したことを通知する。このために同期メッセージ通信を実現できる。
【０１８３】
上述したように、本発明の実施の形態に係る計算機システムは、第１の実施形態と同様な構成を設けたので、第１の実施形態と同様な効果が得られる他、たとえプロセスの配置を変更しても、メッセージ通信に関するプログラムには影響を与えることなく、同期，非同期通信を実現することができる。
【０１８４】
（発明の第３の実施の形態）
本実施形態では、第２の実施形態と同様な計算機システムにおける他の動作例について説明する。したがって、その構成は、第２の実施形態と同様である。
【０１８５】
本実施形態においは、プロセス／スレッド対応マップ２６で与えられたスレッドマッピングに関する情報をシステム起動時にシステム内のオブジェクトに反映するのみならず、システム実行時にシステム仕様として意図的にスレッドを起動し、停止することが容易に実現可能であることを説明する。
【０１８６】
ここで、オブジェクト２４−３のメソッドＣでオブジェクト２４−４に向けてスレッド起動メッセージ（メッセージＩＤ＿Ｒｕｎ）を送信する場合を考える。オブジェクト４５−３のメソッドＣは、図２５（ｅ）に示す内容になる。スレッド起動メッセージもメッセージの一種であるため、第１及び第２の実施形態で説明した動作により、オブジェクト２４−３にスレッド起動メッセージが送信される。
【０１８７】
スレッド起動メッセージ（メッセージＩＤ＿Ｒｕｎ）は、図２４（ｅ）に示すようにスレッド起動メソッドに対応している。さらに、スレッド起動メソッドは、図２５（ａ）で示すものである。このメソッドにより、第１の実施形態のシステム起動時にオブジェクト２４−１〜２４−４がスレッド起動メッセージを受信した際と同様の動作が実現される。
【０１８８】
また、オブジェクト２４−４のメソッドＤで自分自身に向けてスレッド停止メッセージ（メッセージＩＤ＿Ｔｅｒｍｉｎａｔｅ）を送信することを考える。オブジェクト２５−４のメソッドＤは、図２５（ｆ）に示す内容になる。スレッド停止メッセージもメッセージの一種であるため、第１及び第２の実施形態で説明した動作により、オブジェクト２５−４に対しスレッド停止メッセージが送信される。
【０１８９】
スレッド停止メッセージ（メッセージＩＤ＿Ｔｅｒｍｉｎａｔｅ）は、図２４（ｅ）に示すようにスレッド停止メソッドに対応している。さらに、スレッド停止メソッドは、図２５（ｂ）で示すものである。このメソッドにより、第１の実施形態のシステム停止時にオブジェクト２４−１〜２４−４がスレッド停止メッセージを受信した際と同様の動作が実現される。
【０１９０】
なお、システム実行中にオブジェクト２４−１〜２４−４が起動したスレッドは、システム実行中にオブジェクト２４−１〜２４−４が停止することとする。メッセージハンドラ２５−１〜２５−２は、プロセス／スレッド対応マップ２６のスレッドマッピング指定のあるオブジェクト２４−１〜２４−４についてスレッドの起動および停止の責任を持つようにしているためである。
【０１９１】
上述したように、本発明の実施の形態に係る計算機システムは、第２の実施形態と同様な構成を設け、通信メッセージを用いてオブジェクトの起動／停止を行うようにしたので、システム実行時にシステム仕様として意図的にスレッドを起動し、停止することを容易に実現することができる。すなわち、オブジェクトの生成・破壊とスレッドの起動・停止を分離し、システム動作中に同期通信と非同期通信を切り替えたりすることが実現できる。
【０１９２】
これによって、例えばシステム開発の処理を行っているときなどに、開発中の情報を磁気ディスクに保存したいようなときに、適宜対応オブジェクトのスレッド状況や通信状況（同期、非同期）を変更し、効率の良い開発作業を行うことができる。
【０１９３】
（発明の第４の実施の形態）
本実施形態は、第１〜第３の実施形態をさらに一般化した例である。その構成例を図２６〜図３２に示す。
【０１９４】
同図において、プロセス１は、本実施形態のプロセス２１に対応し、同様に、メッセージ通信制御部２，アクタ部３，オブジェクト４，メッセージハンドラ５，プロセス／スレッド対応マップ６，オブジェクト対応マップ７，メッセージハンドラキュー８，プロセスメッセージハンドラ９，プロセス送信用メッセージハンドラ１０，プロセス受信用メッセージハンドラ１１，共有メモリ１２，メッセージキュー１３，メッセージマップ１４は、それぞれ本実施形態のメッセージ通信制御部２２，アクタ部２３，オブジェクト２４，メッセージハンドラ２５，プロセス／スレッド対応マップ２６，オブジェクト対応マップ２７，メッセージハンドラキュー２８，プロセスメッセージハンドラ２９，プロセス送信用メッセージハンドラ３０，プロセス受信用メッセージハンドラ３１，共有メモリ３２，メッセージキュー３３，メッセージマップ３４に対応する。
【０１９５】
この一般化構成の場合も、プロセス＃１を介することで各プロセス間のオブジェクトメッセージ通信が実現できる。また、第１又は第２の実施形態と同様に同期，非同期通信を実現することができる。さらに、第３の実施形態と同様にオブジェクトの生成・破壊とスレッドの起動・停止とを分離し、システム動作中に同期通信と非同期通信を切り替えることができる。
【０１９６】
（発明の第５の実施の形態）
上記各実施形態においては、同一の計算機上でメッセージ通信を実現する場合について述べたが、本実施形態では、プロセスが複数の計算機にまたがって存在している場合について述べる。すなわち本実施形態にいう計算機システムはネットワークシステムを含むものである。
【０１９７】
図３３は本発明の第５の実施の形態に係るネットワークシステムの一例を示す構成図である。図３４及び図３５は、図３３のシステムにおいて、それぞれメッセージ通信制御部及びアクタ部の構成を詳細に示す図である。
【０１９８】
本実施形態の各図において、図１〜図３２と同一部分には同一符号を付して説明を省略し、ここでは異なる部分についてのみ述べる。
【０１９９】
このマルチプロセス／マルチスレッドネットワークシステムは、計算機２０−１（計算機＃１）にプロセス２１−１〜２１−２（プロセス＃１〜＃２）という二つのプロセスが存在し、計算機２０−２（計算機＃２）にプロセス２１−３（プロセス＃３）が存在し、それぞれメッセージ制御部２２とアクタ部２３で構成されている。また、計算機２０−１と計算機２０−２の間は、データ伝送路１７３−１〜１７３−２で接続され、ネットワークシステムを構成している。
【０２００】
オブジェクト間のメッセージ通信は、異なるプロセス間（プロセス２１−１とプロセス２１−２）のみならず、異なる計算機間（計算機２０−１と計算機２０−２）でも行うことができるようになっている。そのためにメッセージ通信制御部２２に計算機間のメッセージ通信機能を付加した他は、第１〜第４の実施形態と同様に構成されている。
【０２０１】
メッセージ制御部２２には、ネットワーク内の計算機２０−１〜２０−２で同一内容のマシン対応マップ１７５と、送信用メッセージキュー１７７−１〜１７７−２と、受信用メッセージキュー１７８−１〜１７８−２とが設けられている。
【０２０２】
図３６はマシン対応マップを示す図である。ここで、図３６（ａ）はマシン対応マップの一般的な構成を示し、図３６（ｂ）は本実施形態に対応した具体例である。なお、プロセス／スレッド対応マップ２６及びオブジェクト対応マップ２７については図示を省略する。
【０２０３】
メッセージハンドラ２５−１〜２５−３は、第１〜第４の実施形態と同様に構成されている他、異なる計算機間での通信となる場合には、マシン対応マップ１７５を参照し、送信先のオブジェクトがどの計算機２０−１〜２０−２のどのプロセスに存在するかを調べるようになっている。ここで同一の計算機２０−１〜２０−２に存在する場合には、第１〜第４の実施形態と同様に動作する。
【０２０４】
一方、異なる計算機２０−１〜２０−２に存在する場合には、マシンメッセージハンドラ１７６−１〜１７６−２を呼び出して、メッセージ通信を行う。
【０２０５】
マシンメッセージハンドラ１７６−１〜１７６−２は、メッセージ受信時には、受信用メッセージキュー１７７−１から１７７−２に格納されている送信先オブジェクト２４−１〜２４−６のオブジェクトＩＤとメッセージを取り出し、メッセージハンドラ２５−１〜２５−３に引き渡す。一方、送信時には、送信先オブジェクト２４−１〜２４−６のオブジェクトＩＤとメッセージを送信用メッセージキュー１７８−１〜１７８−２に格納するとともに、送信先のマシンメッセージハンドラ１７６−１〜１７６−２に送信先オブジェクト２４−１〜２４−６のオブジェクトＩＤとメッセージを送信する。
【０２０６】
次に、以上のように構成された本実施形態におけるネットワークシステムでは、同一計算機内のプロセス内およびプロセス間のオブジェクト間メッセージ通信は、第１〜第４の実施形態と同様にして行われる。
【０２０７】
また、メッセージハンドラ２５−１〜２５−３がマシン対応マップ１７５を参照した結果、送信先オブジェクトの存在するプロセスが異なる計算機にまたがっていることが検出された場合には、マシンメッセージハンドラ１７６−１〜１７６−２により計算機間の通信が実行される。
【０２０８】
この計算機間通信が行われた場合でも、送信先オブジェクト２４−１〜２４−６のオブジェクトＩＤとメッセージは、送信先の計算機のメッセージハンドラ２５−１〜２５−３に送信され、さらにマシン対応マップ１７５、プロセス／スレッド対応マップ２６、オブジェクト対応マップ２７−１〜２７−３を用いた通信管理、通信中継などが行われる。
【０２０９】
上述したように、本発明の実施の形態に係る計算機システムは、第２の実施形態と同様な構成に加え、メッセージ通信制御部２２にマシン対応マップ１７５及びマシンメッセージハンドラ１７６を設けたので、プロセス２１−１〜２１−３が異なる計算機上に配置される場合であっても、送信先オブジェクト２４−１〜２４−６のオブジェクトＩＤを指定するだけで、オブジェクト間メッセージ通信を実現することができ、上記各実施形態と同様な効果を得ることができる。
【０２１０】
なお、本発明は、上記各実施の形態に限定されるものでなく、その要旨を逸脱しない範囲で種々に変形することが可能である。また、各実施形態は可能な限り適宜組み合わせて実施してもよく、その場合組み合わされた効果が得られる。
【０２１１】
また、実施形態に記載した手法は、計算機（コンピュータ）に実行させることができるプログラム（ソフトウエア手段）として、例えば磁気ディスク（フロッピーディスク、ハードディスク等）、光ディスク（ＣＤ−ＲＯＭ、ＤＶＤ等）、半導体メモリ等の記憶媒体に格納し、また通信媒体により伝送して頒布することもできる。なお、媒体側に格納されるプログラムには、計算機に実行させるソフトウエア手段（実行プログラムのみならずテーブルやデータ構造も含む）を計算機内に構成させる設定プログラムをも含むものである。本装置を実現する計算機は、記憶媒体に記録されたプログラムを読み込み、また場合により設定プログラムによりソフトウエア手段を構築し、このソフトウエア手段によって動作が制御されることにより上述した処理を実行する。
【０２１２】
【発明の効果】
以上詳記したように本発明によれば、プログラムの並行処理が可能なマルチプロセス環境にあって、オブジェクト指向の概念における同期メッセージ通信及び非同期メッセージ通信を容易に実現することができる計算機システム及びネットワークシステム並びに記録媒体を提供することができる。
【０２１３】
また、本発明によれば、オブジェクト指向の概念における同期通信及び非同期通信の両通信方式をプログラム変更することなく容易に変更することができる計算機システム及びネットワークシステム並びに記録媒体を提供することができる。
【０２１４】
さらに、本発明によれば、オブジェクトの生成・破壊とオブジェクト内のスレッドの起動・停止を分離し、システム動作中に同期通信と非同期通信を切り替えることができる計算機システム及びネットワークシステム並びに記録媒体を提供することができる。
【図面の簡単な説明】
【図１】本発明の第１の実施の形態に係る計算機システムの一例を示す構成図。
【図２】各プロセスにおけるメッセージ通信部の詳細構成例を示すブロック図。
【図３】プロセス／スレッド対応マップの構成例を示す図。
【図４】オブジェクト対応マップの構成例を示す図。
【図５】各プロセスにおけるアクタ部の詳細構成例を示すブロック図。
【図６】スレッドが起動されたオブジェクトの詳細構成例を示すブロック図。
【図７】メッセージマップの構成例を示す図。
【図８】メッセージハンドラの主要部分の構成例を示すブロック図。
【図９】システムを起動する際におけるプロセス、メッセージ通信制御部及びアクタ部の動作を示す流れ図。
【図１０】システムを起動する際におけるプロセス、メッセージ通信制御部及びアクタ部の動作を示す流れ図。
【図１１】各種のメソッドの内容例を示す図。
【図１２】同期通信又は非同期通信を行う場合の全体的な考え方について説明する図。
【図１３】メッセージ通信全体の処理を示す流れ図。
【図１４】メッセージ通信におけるメッセージハンドラスレッドの処理を説明する流れ図。
【図１５】メッセージ通信におけるプロセスハンドラスレッドの処理を説明する流れ図。
【図１６】メッセージ通信におけるオブジェクトの処理を説明する流れ図。
【図１７】システムを停止する際におけるプロセス、メッセージ通信制御部及びアクタ部の動作を示す流れ図。
【図１８】システムを停止する際におけるプロセス、メッセージ通信制御部及びアクタ部の動作を示す流れ図。
【図１９】本発明の第２の実施の形態に係る計算機システムの一例を示す構成図。
【図２０】メッセージ通信制御部の構成を詳細に示す図。
【図２１】アクタ部の構成を詳細に示す図。
【図２２】プロセス／スレッド対応マップを示す図。
【図２３】オブジェクト対応マップを示す図。
【図２４】メッセージマップを示す図。
【図２５】各種のメソッドの内容例を示す図。
【図２６】本発明の第４の実施の形態に係る一般化された計算機システムの一例を示す構成図。
【図２７】メッセージ通信制御部の構成を詳細に示す図。
【図２８】メッセージ通信制御部の構成を詳細に示す図。
【図２９】メッセージ通信制御部の構成を詳細に示す図。
【図３０】アクタ部の構成を詳細に示す図。
【図３１】アクタ部の構成を詳細に示す図。
【図３２】アクタ部の構成を詳細に示す図。
【図３３】本発明の第５の実施の形態に係るネットワークシステムの一例を示す構成図。
【図３４】メッセージ通信制御部の構成を詳細に示す図。
【図３５】アクタ部の構成を詳細に示す図。
【図３６】マシン対応マップを示す図。
【図３７】同期通信方式を用いるオブジェクト間のメッセージ送受を時系列順に示すシーケンス図。
【図３８】非同期通信方式を用いるオブジェクト間のメッセージ送受を時系列順に示すシーケンス図。
【図３９】メソッド記述の例を示す図。
【符号の説明】
１−１〜１−３…プロセス＃１〜＃ｎ
２…メッセージ通信制御部
３…アクタ部
４−１〜４−６…オブジェクトＡ〜Ｉ
５−１〜５−３…メッセージハンドラＰ１〜Ｐｎ
６…プロセス／スレッド対応マップ
７−１〜７−３…オブジェクト対応マップＰ１〜Ｐｎ
８−１〜８−３…メッセージハンドラキューＰ１〜Ｐ３
９−１〜９−６…プロセスメッセージハンドラＰ１−Ｐ２〜Ｐｎ−Ｐｎ−１
１０−１〜１０−６…プロセス送信用メッセージキューＰ１−Ｐ２〜Ｐｎ−Ｐｎ−１
１１−１〜１１−６…プロセス受信用メッセージキューＰ２−Ｐ１〜Ｐｎ−１−Ｐｎ
１２−１〜１２−１２…共有メモリＰ１−Ｐ２〜Ｐｎ−１−Ｐｎ
１３−１〜１３−６…メッセージキューＡ〜Ｉ
１４−１〜１４−６…メッセージマップＡ〜Ｉ
２１−１〜２１−２…プロセス＃１〜＃２
２２…メッセージ通信制御部
２３…アクタ部
２４−１〜２４−４…オブジェクトＡ〜Ｄ
２５−１〜２５−２…メッセージハンドラＰ１〜Ｐ２
２６…プロセス／スレッド対応マップ
２７−１〜２７−２…オブジェクト対応マップＰ１〜Ｐ２
２８−１〜２８−２…メッセージハンドラキューＰ１〜Ｐ２
２９−１〜２９−２…プロセスメッセージハンドラＰ１−Ｐ２〜Ｐ２−Ｐ１
３０−１〜３０−２…プロセス送信用メッセージキューＰ１−Ｐ２〜Ｐ２−Ｐ１
３１−１〜３１−２…プロセス受信用メッセージキューＰ２−Ｐ１〜Ｐ１−Ｐ２
３２−１〜３２−２…共有メモリＰ１−Ｐ２〜Ｐ１−Ｐ２
３３−１〜３３−４…メッセージキューＡ〜Ｄ
３４−１〜３４−４…メッセージマップＡ〜Ｄ
９５…メソッド
９６…メッセージＩＤ
９７…メソッド情報
１０１…通信種別判定部
１０２…送信先判定部
１０３…制御戻し部
１７５…マシン対応マップ
１７６−１〜１７６−２…マシンメッセージハンドラＰ１−Ｐ３〜Ｐ３−Ｐ１
１７７−１〜１７７−２…送信用メッセージキューＰ１−Ｐ３〜Ｐ３−Ｐ１
１７８−１〜１７８−３…受信用メッセージキューＰ３−Ｐ１〜Ｐ１−Ｐ３
１７９−１〜１７９−２…データ伝送路
【図１】
0003762173.tif 000002
【図２】
0003762173.tif 000003
【図３】
0003762173.tif 000004
【図４】
0003762173.tif 000005
【図５】
0003762173.tif 000006
【図６】
0003762173.tif 000007
【図７】
0003762173.tif 000008
【図８】
0003762173.tif 000009
【図９】
0003762173.tif 000010
【図１０】
0003762173.tif 000011
【図１１】
0003762173.tif 000012
【図１２】
0003762173.tif 000013
【図１３】
0003762173.tif 000014
【図１４】
0003762173.tif 000015
【図１５】
0003762173.tif 000016
【図１６】
0003762173.tif 000017
【図１７】
0003762173.tif 000018
【図１８】
0003762173.tif 000019
【図１９】
0003762173.tif 000020
【図２０】
0003762173.tif 000021
【図２１】
0003762173.tif 000022
【図２２】
0003762173.tif 000023
【図２３】
0003762173.tif 000024
【図２４】
0003762173.tif 000025
【図２５】
0003762173.tif 000026
【図２６】
0003762173.tif 000027
【図２７】
0003762173.tif 000028
【図２８】
0003762173.tif 000029
【図２９】
0003762173.tif 000030
【図３０】
0003762173.tif 000031
【図３１】
0003762173.tif 000032
【図３２】
0003762173.tif 000033
【図３３】
0003762173.tif 000034
【図３４】
0003762173.tif 000035
【図３５】
0003762173.tif 000036
【図３６】
0003762173.tif 000037
【図３７】
0003762173.tif 000038
【図３８】
0003762173.tif 000039
【図３９】
0003762173.tif 000040