(57)【要約】【課題】複数のプロセスが相互にデータを交換することによって協調的動作を行うシステムにおいて、プロセスが利用する受信イベントバッファのあふれを防止すること。【解決手段】操作イベントを受信した被操作プロセスは、操作実行時にシステム内の全プロセスに対してイベント送信を抑制させるサスペンド設定を発信する（Ｔ３０２）。そして、操作実行（Ｔ３０３）後、サスペンド設定の解除を全プロセスに対して発信する（Ｔ３０４）。サスペンド設定中に発生した操作イベント（Ｔ３０９）は、サスペンド解除がなされた（Ｔ３０８）後に発信される（Ｔ３１０）。【選択図】図３
2004265062.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセスの各々が、当該複数のプロセスで共有する共有データを保有し、情報伝達媒体を介した通信を用いて、前記共有データに対する処理を行うシステムにおける情報処理方法であって、
前記共有データに対する操作が発生した場合に、当該操作の内容を表す操作イベントを前記情報伝達媒体上に発信する発行工程と、
前記操作イベントを受信すると、当該操作イベントに対応する処理を自らが保有する前記共有データに対して実行する操作実行工程と、
前記操作イベントの受信に応じて、前記システム内の全プロセスに対し、新たな前記操作イベントの発信を停止するように通知する発信停止通知を発信する停止通知発信工程と、
前記システム内の全プロセスに対し、新たな前記操作イベントの発信停止を解除する停止解除通知を発信する解除通知発信工程とを有することを特徴とする情報処理方法。
【請求項２】
さらに、前記発信停止通知を受信すると、その後前記停止解除通知を受信するまでに発生した前記共有データに対する操作に関する操作イベントの発信を延期する状態に自プロセスを設定する設定工程を有することを特徴とする請求項１記載の情報処理方法。
【請求項３】
前記停止通知発信工程は、前記操作イベントを受信すると、前記発信停止通知を発信し、
前記解除通知発信工程は、前記操作実行工程が前記操作イベントに対応する処理を実行した後に前記停止解除通知を発信することを特徴とする請求項１又は請求項２に記載の情報処理方法。
【請求項４】
前記複数のプロセスの各々は、受信した前記操作イベントをバッファ手段に一旦記憶するとともに、
前記停止通知発信工程は、前記バッファ手段の空き容量、前記操作実行工程が実行しようとする操作の種類、所定時間内に受信した前記操作イベントの数、所定時間内に前記操作実行工程が処理した前記操作イベントの数、前記発信停止通知を発信してから自プロセスにおいて前記設定工程が実行されるまでの時間の少なくとも１つに基づいて前記発信通知を行うか否かを決定することを特徴とする請求項２記載の情報処理方法。
【請求項５】
前記停止通知発信工程が、前記操作実行工程が開始した時点から所定時間経過すると、前記発信停止通知を発信することを特徴とする請求項１又は請求項２記載の情報処理方法。
【請求項６】
前記複数のプロセスの各々は、受信した前記操作イベントをバッファ手段に一旦記憶するとともに、
前記停止通知発信工程は、前記バッファ手段の空き容量、前記操作実行工程が実行しようとする操作の種類、所定時間内に受信した前記操作イベントの数、所定時間内に前記操作実行工程が処理した前記操作イベントの数、前記発信停止通知を発信してから自プロセスにおいて前記設定工程が実行されるまでの時間の少なくとも１つ以上に基づいて前記所定時間を決定することを特徴とする請求項５記載の情報処理方法。
【請求項７】
前記共有データは仮想空間の構造、属性を記述するデータであり、
前記操作実行工程は、前記共有データを読み込み、該読み込まれたデータに対して前記操作を行うことを特徴とする請求項１乃至請求項６のいずれか１項に記載の情報処理方法。
【請求項８】
複数のプロセスの各々が、当該複数のプロセスで共有する共有データを保有し、情報伝達媒体を介した通信を用いて、前記共有データに対する処理を行うシステムにおいて、前記複数のプロセスの少なくとも１つを実行可能な情報処理装置であって、
前記共有データに対する操作が発生した場合に、当該操作の内容を表す操作イベントを前記情報伝達媒体上に発信する発行手段と、
前記操作イベントを受信すると、当該操作イベントに対応する処理を自らが保有する前記共有データに対して実行する操作実行手段と、
前記操作イベントの受信に応じて、前記システム内の全プロセスに対し、新たな前記操作イベントの発信を停止するように通知する発信停止通知を発信する停止通知発信手段と、
前記システム内の全プロセスに対し、新たな前記操作イベントの発信停止を解除する停止解除通知を発信する解除通知発信手段とを有することを特徴とする情報処理装置。
【請求項９】
コンピュータ装置を請求項７記載の情報処理装置として動作させるためのコンピュータプログラム。
【請求項１０】
請求項８記載のコンピュータプログラムを格納したコンピュータ装置読み取り可能な記憶媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数のプロセスがプロセス間で通信することで協調的動作を行う技術に関し、特に共有データを各プロセスが保有する場合に確実な協調的動作を実現させる技術に関する。
【０００２】
【従来の技術】
複数のプロセス、例えば異なる装置内に分散する複数のプロセスが相互にデータを交換することによって協調的動作を行う技術の一例として、本出願人は先にデータベースの共有方法に関する「情報処理方法及び装置」（特願２００２−３４８７２６）を出願した。この発明では、各プロセスが共有するデータ（共有データ）のコピーを各プロセスが保持する。
【０００３】
そして、あるプロセスにおいて共有データに対する操作要求が発生した場合には、その操作要求を表す要求情報をネットワークを介してプロセス間で交換し、受信した操作要求に基づいて各プロセスが自らの有する共有データを更新する。この処理において、すべてのプロセスに含まれる、操作要求を発行する処理、および操作要求を共有データに反映する処理は並列に動作する。
【０００４】
【発明が解決しようとする課題】
この先願発明においては、受信した操作要求を一時的に蓄積するバッファを用い、操作要求の処理速度よりも短い間隔で操作要求が発生した場合に対処しているが、バッファに操作要求が入り切らなくなること（バッファのあふれ）を防ぐためには、十分な大きさのバッファが必要であった。
【０００５】
このように、複数のプロセスが相互にデータ交換することにより協調的動作を行う装置においては、各プロセスが用いる受信バッファがあふれないように留意して設計しなければならなかった。しかし、最適な受信バッファの容量を定めるのは困難であり、改善の余地があった。
【０００６】
本発明はこのような課題に鑑みてなされたものであり、その目的は、複数のプロセスがプロセス間通信を用いて協調的動作を行うシステムにおいて、簡便な方法で信頼性の高い処理を実現するための情報処理方法及び装置を提供することにある。
【０００７】
【課題を解決するための手段】
本発明によれば、上述の目的は、複数のプロセスの各々が、当複数のプロセスで共有する共有データを保有し、情報伝達媒体を介した通信を用いて、共有データに対する処理を行うシステムにおける情報処理方法であって、共有データに対する操作が発生した場合に、当操作の内容を表す操作イベントを情報伝達媒体上に発信する発行工程と、操作イベントを受信すると、当操作イベントに対応する処理を自らが保有する共有データに対して実行する操作実行工程と、操作イベントの受信に応じて、システム内の全プロセスに対し、新たな操作イベントの発信を停止するように通知する発信停止通知を発信する停止通知発信工程と、システム内の全プロセスに対し、新たな操作イベントの発信停止を解除する停止解除通知を発信する解除通知発信工程とを有することを特徴とする情報処理方法によって達成される。
【０００８】
また、上述の目的は、複数のプロセスの各々が、当複数のプロセスで共有する共有データを保有し、情報伝達媒体を介した通信を用いて、共有データに対する処理を行うシステムにおいて、複数のプロセスの少なくとも１つを実行可能な情報処理装置であって、共有データに対する操作が発生した場合に、当操作の内容を表す操作イベントを情報伝達媒体上に発信する発行手段と、操作イベントを受信すると、当操作イベントに対応する処理を自らが保有する共有データに対して実行する操作実行手段と、操作イベントの受信に応じて、システム内の全プロセスに対し、新たな操作イベントの発信を停止するように通知する発信停止通知を発信する停止通知発信手段と、システム内の全プロセスに対し、新たな操作イベントの発信停止を解除する停止解除通知を発信する解除通知発信手段とを有することを特徴とする情報処理装置によっても達成される。
【０００９】
さらに、上述の目的は、コンピュータ装置を本発明の情報処理装置として動作させるためのコンピュータプログラム又はこのコンピュータプログラムを格納したコンピュータ装置読み取り可能な記憶媒体によっても達成される。
【００１０】
【発明の実施の形態】
以下、添付の図面を参照して、本発明をその好適な実施形態に基づいて詳細に説明する。
■（第１の実施形態）
以下の実施形態では、コンピュータグラフィクスで仮想空間を表す際の、仮想空間の構造と属性を記述するシーンデータベースを複数の端末で共有する仮想空間共有システムに対して、本願発明による情報処理方法を応用した実施形態について説明する。シーンデータベースに含まれる、共有データとしてのシーンデータは例えばシーングラフによって表現される。
【００１１】
図１に、本実施形態の仮想空間共有システムの全体構成をプロセス間の通信という観点から模式的に示す。システムには複数のプロセス１０２および１０３があり、通信路１０１を介して互いに接続され、データを交換することができる。本実施形態においては、複数のプロセス１０２及び１０３から構成されるプロセス群のうち、１つのプロセス（例えば１０２）はシステムに含まれるプロセス群に関する情報を管理するサーバプロセスとして機能する。以下、プロセス１０２をサーバプロセス１０２、他のプロセス１０３をクライアントプロセス１０３とも呼ぶ。
【００１２】
なお、通信路１０１は図１のようにすべてのプロセスに共通であってもよいし、いくつかのプロセス間で専用の通信路が複数存在してもよい。
なお、図１に構成を実現するハードウェア構成としては、例えば通信路１０１としてＬＡＮや公衆電話網、インターネットを用い、相互に通信可能に接続された複数の端末を例示することができる。
【００１３】
この場合、各端末ではプロセス群を構成するプロセス１０２、１０３の１つあるいは複数が動作可能であり、プロセスの総数と端末の総数は一致していなくても良い。また、通信路１０１は各端末内のプロセス間で通信可能であれば上述した以外の任意の通信媒体を用いることが可能である。
【００１４】
ここで、以下の説明で用いる用語を定義する。システム内の各プロセスは、共有データを変更あるいは参照する何らかの「操作」を行う。本実施形態では、シーンデータベースに記述された仮想空間の構造あるいは属性を変更あるいは参照することが「操作」に相当する。操作の内容は、通信路１０１を介して他のプロセスに伝達され、各プロセスで操作の内容に応じた処理が行われる。また、操作を起動することを「操作を指令する」、操作内容を表すデータを「操作イベント」あるいは単に「イベント」、操作内容に応じて処理を行うことを「操作の実行」と表現することにする。
【００１５】
各プロセスは、受信した操作イベントを保持するバッファ「受信イベントバッファ」を持つが、そのバッファに蓄積可能なイベントの数は有限である。ある一定時間内に数多くのイベントが到着して、受信イベントバッファがあふれることを防止するため、本実施形態において、操作を実行するプロセスは、操作の実行中、すべてのプロセスがイベントを発信することを抑制する。
【００１６】
以下では、イベント発信を抑制することを「サスペンドを設定する」あるいは「サスペンドする」と表現する。また、イベント発信の抑制を解除することを「サスペンドを解除する」と表現する。サスペンドの設定・解除もイベントを用いて指示される。そこで、サスペンドを設定・解除するためのイベントを他の種類のイベントから区別する場合には、それぞれ「サスペンド設定イベント」「サスペンド解除イベント」と呼ぶことにする。
【００１７】
次に図２を用いて、本システムにおいてプロセス１０２、１０３が動作可能な情報処理装置（端末）の構成を説明する。図２において、２０１は端末全体の動作を制御するＣＰＵ、２０２はＣＰＵの動作に用いるプログラムやデータを格納するメモリ、２０３は端末を構成する各部間のデータ転送を司るバス、２０４はバス２０３と各種装置とのインタフェース、２０５は通信路１０１と接続するための通信部、２０６はＣＰＵに読み込むプログラムやデータを格納するＨＤＤ等の外部記憶装置、２０７および２０８は端末のユーザが端末に対して各種指示を与えるための入力装置としてのキーボードおよびマウス、２０９はプロセスの動作結果等を表示するための表示部、２１０は端末と他の外部機器との入出力を行うための外部インタフェース（ＩＦ）部である。
【００１８】
各プロセスは、自プロセスが行う操作を司る操作処理と、自プロセスまたは他のプロセスから伝達された操作イベントを処理する受信イベント処理の２つの処理から構成される。図３は、あるプロセス（図３の「被操作プロセス」）が操作イベントを受信してからの処理手順を模式的に示したものである。
【００１９】
まず、受信イベント処理において、手順Ｔ３０１で操作イベントを受信する。次に、受信した操作イベントの処理中にプロセスがイベントを発信することを抑制するため、手順Ｔ３０２でサスペンド設定イベントをすべてのプロセスに対して発信する。
【００２０】
その後、手順Ｔ３０１で受信した操作イベントに応じた操作を実行し（手順Ｔ３０３）、操作実行が終了すると、プロセスに対して設定したイベント発信の抑制を解除するため、サスペンド解除イベントをすべてのプロセスに対して発信する（手順Ｔ３０４）。
【００２１】
ここで、手順Ｔ３０３で実行される処理では、外部記憶装置２０６から、操作対象となる共有データ（データベース中のシーンデータ）のデータファイルを読み込むことが必要となる。シーンデータは仮想空間を記述するデータであるため、容量が大きくなる可能性がある。つまり、手順Ｔ３０３においてデータの読み込み及び操作に必要な時間が長くなる可能性があり、結果として受信イベントバッファがあふれる可能性が高い。そこで、本実施形態では、シーンデータベースのファイルを読み込むことが必要となる操作イベントを受信した際に、サスペンドを設定するようにすることによりバッファがあふれことを防止している。
【００２２】
一方、本システムにおける被操作プロセス以外の全プロセスにおける受信イベント処理では、手順Ｔ３０５でサスペンド設定イベントを受信し、サスペンドを設定する（手順Ｔ３０６）。そして、手順Ｔ３０４で発信されたサスペンド解除イベントを受信する（手順Ｔ３０７）と、サスペンドを解除する（手順Ｔ３０８）。したがって、手順Ｔ３０６終了時から手順Ｔ３０８の終了時まで、イベントの発信は不可能になる。その結果、例えば手順Ｔ３０９に示した時刻に操作処理から操作イベントの発信を試みた場合には、サスペンド中のため発信されず、実際にイベントが発信されるのは手順Ｔ３０８でサスペンドが解除された後の手順Ｔ３１０に示す時刻になる。
【００２３】
プロセス全体の処理の流れを図４に示す。プロセスが起動されると、ステップＳ４０１にて操作の対象となるデータを記録したファイルを外部記憶装置（図２の２０６）あるいは外部ＩＦ部（図２の２１０）を介して外部機器より読み込むなど、プロセスの動作に必要な一連の初期化を行う。次に、他のプロセスとのネットワーク接続を確立する（ステップＳ４０２）。
【００２４】
このとき、サーバプロセス１０２は、接続を確立したクライアントプロセス１０３に対して当該プロセスをシステム内で一意に識別するためのプロセスＩＤを割り当てるとともに、システム内の全プロセスに対し、新たに接続したプロセスのプロセスＩＤを通知する。各プロセスは、通知されたプロセスＩＤに関連づけて、「サスペンド中フラグ」と呼ぶフラグデータを新たに作成し、ＯＦＦに設定する。サスペンド中フラグは、システム内に存在するプロセスごとに用意され、対応するプロセスがサスペンドを設定している状態か否かを表すものである。
【００２５】
なお、本実施形態において、任意の２つのプロセス間でのデータ交換は、ＴＣＰ／ＩＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ／Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）を用いた１対１のソケット通信にて行う。したがって、プロセスの総数がＮであるとすると、各プロセスは少なくともＮ−１本のソケット通信路を持つことになる。ただし、通信路の構成はこれに限ったものではなく、任意の２つのプロセス間で論理的にデータの交換ができれば、構成は問わない。例えば、サーバプロセス１０２以外のクライアントプロセス１０３がサーバプロセス１０２との通信路を確立し、クライアントプロセス１０３間の通信は必ずサーバプロセス１０２を介するように構成することも可能である。
【００２６】
続いて、ステップＳ４０３で、このプロセス内で操作処理及び受信イベント処理を並列して行うためにプロセスを分岐し、操作指令を処理するための操作処理スレッド（ステップＳ４０４）および受信イベントを処理するための受信イベント処理スレッド（ステップＳ４０６）を起動する。なお、操作処理および受信イベント処理スレッドについては、後で詳しく説明する。操作処理および受信イベント処理スレッドはそれぞれステップＳ４０５およびステップＳ４０７で終了指示があったかどうか判定され、終了指示がなければステップＳ４０４およびステップＳ４０６に戻って操作指令および受信イベントを繰り返し処理する。一方、終了指示があればステップＳ４０８で２つのスレッドを統合し、プロセス間のネットワーク接続を切断（ステップＳ４０９）した上で、すべての処理を終了する。
【００２７】
ここで、図４の操作処理スレッドで行われるステップＳ４０４の操作処理について、図５のフローチャートを参照して詳しく説明する。
初めに、ステップＳ５０１にて操作指令の内容を入力する。次に、ステップＳ５０１で入力した操作指令に対応する操作イベントを生成する（ステップＳ５０２）。ステップＳ５０３ではサスペンド中フラグを参照し、いずれかのプロセスによってイベントの発信を抑制されているか否か判定する。ここでイベント発信が抑制されていればステップＳ５０３に戻り、抑制されていなければステップＳ５０４に進み、ステップＳ５０２で生成した操作イベントを、自プロセスを含む全てのプロセスに向けて発信し、操作処理を終了する。
【００２８】
続いて、図４の受信イベント処理スレッドで行われるステップＳ４０６の受信イベント処理について、図６のフローチャートを参照して詳しく説明する。
受信イベントは、不図示のイベント通信部が受信し、例えばメモリ２０２等の記憶装置の領域として予め設定された受信イベントバッファに入力される。ステップＳ６０１では、受信イベントバッファを検索する。続くステップＳ６０２で、受信イベントバッファに受信イベントが入力されているか否かを判定し、受信イベントがあればステップＳ６０３に進む。一方、受信イベントが存在しないと判定されれば、処理を終了する。
【００２９】
ステップＳ６０３では、サスペンド設定イベントを、全てのプロセスに対して発信する。なお、サスペンド設定イベントには、それを発信するプロセスのＩＤが含まれている。続いて、受信イベントバッファに蓄積されている受信イベントのうち、先頭のイベントで指示された操作内容を解析した上で実行する（ステップＳ６０４）。特に実行するイベントがサスペンド設定イベントである場合は、当該イベントに含まれるプロセスＩＤに対応するサスペンド中フラグをＯＮに設定する。逆に、実行するイベントがサスペンド解除イベントである場合は、当該イベントに含まれるプロセスＩＤに対応するサスペンド中フラグをＯＦＦに設定する。イベントの実行後は、ステップＳ６０５でサスペンドの解除を指示するイベントを、全てのプロセスに対して送信し、処理を終了する。
【００３０】
上記に説明した処理を行うことにより、システム内で動作するプロセスのいずれかが操作を実行している間、全てのプロセスがイベントを発信しないように設定することができる。その結果、操作実行中に多量のイベントが到着することにより受信イベントバッファがあふれ、操作が確実に実行されなくなる危険性を大幅に軽減することができる。
【００３１】
■（第２の実施形態）
第１の実施形態では、共有データに対する操作を実行する際、必ずサスペンドを設定している。仮想空間を表すシーンデータのように、操作対象となる共有データの容量が大きくなる可能性が高い場合、簡便な処理で顕著なバッファあふれ防止効果が得られるが、サスペンド設定中は全プロセスが影響を受けるため、サスペンド設定自体の回数を減らすことができればさらに好ましい。そのため、本実施形態では、ある判定基準に基づいて、サスペンドするか否か決定することを特徴とする。
【００３２】
ここで、本実施形態におけるサスペンド設定・非設定の判定基準について説明する。この判定基準は、受信イベントバッファが飽和するまでの時間的余裕が、ある一定値未満である場合で、かつ所定の種類のイベントを実行する際にサスペンドするようにするものである。
【００３３】
この判定基準を示す式は、
Ｓ＝ｆ×Ｔｈ（Ｒ（ｔ）、Ｂ）      （式１）
と表すことができる。この式の値Ｓが１である場合はサスペンドを設定し、０である場合はサスペンドしない。
【００３４】
ここで、”ｆ”はイベントの種類ごとに決まるフラグ（以下「サスペンド対象フラグ」と呼ぶ）で、予め、イベントの種類毎にサスペンドする場合はｆ＝１、サスペンドしない場合はｆ＝０と設定されている。”Ｔｈ（ａ，ｂ）”は２値化処理を行う関数であり、第１引数ａが第２引数ｂ未満である場合に１、そうでない場合は０を返す。”Ｒ（ｔ）”は、ある時刻ｔにおいて、受信イベントバッファの飽和を防止するためにサスペンド設定イベントを発信しなければならない時刻まで時間であり、”Ｂ”は時間を単位とする正の値の定数である。
【００３５】
本実施形態において、式１のＲ（ｔ）は以下の式２で定義される。
Ｒ（ｔ）＝ｎ（ｔ）／（ｒ（ｔ）−ｐ（ｔ））−α（ｔ）    （式２）
式２で、ｎは受信バッファの空きスロット数、ｒは単位時間あたりに到着するイベントの個数すなわちイベント到着速度、ｐは単位時間あたりに実行が完了するイベントの個数すなわちイベント処理速度である。αはサスペンド設定イベント発信処理を起動してから、そのイベントが処理されて、サスペンドが設定されるまでの時間（以下、「サスペンド設定遅延時間」と呼ぶ）である。”（ｔ）”は、それぞれの時刻ｔにおける値であることを示す。なお、「スロット」とは、受信イベントバッファにおいて、個々のイベントが蓄積される記憶領域を指す。従って、空きスロットが１０である場合、受信可能な残りイベント数は１０となる。
【００３６】
次に、本実施形態におけるプロセスの処理の流れを説明する。本実施形態において、プロセス全体の処理の流れは、初期化（ステップＳ４０１）および受信イベント処理（ステップＳ４０６）の内容を除き、第１の実施形態（図４）と同様である。
【００３７】
本実施形態において、初期化処理（ステップＳ４０１）は、第１の実施形態で行った初期化処理に加え、サスペンド対象フラグ、イベント到着速度、イベント処理速度、サスペンド設定遅延時間、の初期値を保持するデータファイルを外部記憶装置（例えば図２の２０６）より読み込み、各パラメータに設定する。
【００３８】
なお、これらのパラメータの初期値は、ファイルから読み込む方法の他、処理内容を表すプログラム中で予め設定する方法、外部ＩＦ部（図２の２１０）を介して別の装置から入力する方法、システムのユーザがインタラクティブに設定する方法など、任意の方法で設定することができることは言うまでもない。
【００３９】
本実施形態における受信イベント処理（図４のステップＳ４０６に相当）を、図７に示すフローチャートを用いて説明する。
受信イベント処理を開始すると、ステップＳ７０１で処理開始時刻を表す情報を、端末内部に存在する時計又はシステム上に存在するタイムサーバ等から取得する。ステップＳ７０２では、受信イベントバッファを検索する。続くステップＳ７０３で、受信イベントバッファに受信イベントが入力されているかどうか判定し、受信イベントがあればステップＳ７０４に進む。一方、受信イベントが存在しないと判定されれば、処理を終了する。
【００４０】
ステップＳ７０４では、イベントの到着速度を算出し、続いて前述の式１の値を算出する（ステップＳ７０５）。なお、ステップＳ７０４におけるイベント到着速度算出は、前回の受信イベント処理におけるステップＳ７０４の実行時に現在時刻情報を蓄積しておき、今回の実行時の現在時刻情報との差分に基づいて算出することができる。ただし、算出方法はこれに限定されるものではなく、任意の統計学的手法により算出することができる。
【００４１】
また、ステップＳ７０５で式１の値を得る際に用いる残りのパラメータ、すなわち受信バッファの空きスロット数ｎ、イベント処理速度ｐ、サスペンド設定遅延時間αは、例えばメモリ２０２等に記憶され、後述のように各パラメータ毎に所定の周期もしくはタイミングで更新処理を行っているものとする。また、サスペンド対象フラグｆの値は、受信イベントに含まれるイベント種別情報を用い、イベントの種類とそのサスペンド対象フラグの値を初期化時に設定したテーブルを参照して得ることが可能である。
【００４２】
次のステップＳ７０６で、Ｓ＝１、すなわちサスペンドを実行すると判定された場合は、ステップＳ７０７に進み、そうでない場合（Ｓ＝０）はステップＳ７１２に進む。ステップ７０７では、サスペンド設定イベントを、全てのプロセスに対して発信する。続いて、受信バッファに蓄積されているイベントのうち、先頭のイベントで指示された操作内容を解析した上で実行する（ステップＳ７０８）。
【００４３】
次に、ステップＳ７０９にてサスペンド設定遅延時間を算出、更新する。本実施形態においては、ステップＳ７０７で発信するサスペンド設定イベントにその発信時刻の情報もあわせて持たせ、発信時刻とステップＳ７０９を実行する時点の差分をもってサスペンド設定遅延時間とする。すなわち、本実施形態においては、自プロセスが発信するサスペンド設定イベントの遅延時間が、他のプロセスが発信するサスペンド設定イベントの遅延時間とほぼ等しく、かつ全ての端末の時刻が一致していることを仮定している。本実施形態におけるシステムを構成する端末間で時刻を一致させるには、例えばＮＴＰ（Ｎｅｔｗｏｒｋ  Ｔｉｍｅ  Ｐｒｏｔｏｃｏｌ）を用いることができる。
【００４４】
さらに、ステップＳ７１０で、サスペンド解除イベントを全てのプロセスに対して送信し、ステップＳ７１１でイベント処理速度を算出、更新した後、処理を終了する。本実施形態において、イベント処理速度は、ステップＳ７０１で取得した時刻とステップＳ７１１を実行する時刻の情報に基づいて算出する。ただし、算出方法はこれに限定されるものではなく、任意の統計学的手法により算出することができる。
【００４５】
一方、ステップＳ７０６で、Ｓ＝０であると判定された場合は、ステップＳ７１２でステップＳ７０８と同様にイベントを実行した後、イベント処理速度情報の更新をステップＳ７１１で行い、処理を終了する。
【００４６】
このように、本実施形態によれば、特定の条件に従ってサスペンドを設定することが可能になるため、受信バッファのあふれを防止しつつ、サスペンド設定の発生を抑制することが可能になる。
【００４７】
■（第３の実施形態）
第２の実施形態では、サスペンドを行うか否かの判定に用いるパラメータのうち、イベント到着速度ｒ、イベント処理速度ｐ・サスペンド設定遅延時間αを、受信イベント処理を行うごとに更新しているが、これらのパラメータのうちいずれか１つあるいは複数を予め設定した値に固定してもよい。
【００４８】
固定値は、ファイルに記述して初期化ステップ（ステップＳ４０１）で読み込む方法、処理内容を表すプログラム中で予め設定する方法、外部ＩＦ部（図２の２１０）を介して別の装置から入力する方法、システムのユーザがインタラクティブに設定する方法など、任意の方法で設定することができる。
【００４９】
■（第４の実施形態）
第２および第３の実施形態では、サスペンド対象フラグｆ・受信バッファの空きスロット数ｎ・イベント到着速度ｒ・イベント処理速度ｐ・サスペンド設定遅延時間αのすべてを用いてサスペンドするか否かを判定するが、このうちのいずれか１つ、あるいは複数に基づいて判定してもよい。
【００５０】
例えば、受信イベントの種類のみ（すなわち、サスペンド対象フラグｆの値のみ）により判定することや、受信バッファの空きスロット数ｎの値のみに基づいて判定することもできる。
【００５１】
■（第５の実施形態）
第２乃至第４の実施形態とは別の方法により選択的なサスペンド設定を行うように構成することができる。本実施形態では、イベントの実行を開始してから、ある時間の間にイベント実行が終了しない場合のみサスペンドを設定することを特徴とする。
【００５２】
以下の説明では、イベントの実行開始からサスペンド設定イベント発信までの時間を「サスペンド待機時間」、サスペンド設定イベントを発信すべき時刻を「タイムアウト時刻」、タイムアウト時刻までにイベント実行が終了しないことを「タイムアウトする」と表現する。
【００５３】
本実施形態における受信イベント処理（図４のステップＳ４０６に相当）の一部について、図８及び図９を用いて説明する。図８は、タイムアウトしない場合の手順である。この場合、操作イベントを受信（手順Ｔ８０１）し、その操作内容を実行する（手順Ｔ８０２）が、操作実行がタイムアウト時刻までに完了するので、タイムアウトせず、サスペンドは設定されない。また、サスペンドしていないので、サスペンドの解除も行わない。
【００５４】
一方、図９の場合は、手順Ｔ９０１で受信した操作イベントを実行（手順Ｔ９０２）する間にタイムアウト時刻に到達する（タイムアウトする）ので、手順Ｔ９０４でサスペンド設定イベントを発信する。そして、操作実行が完了した後、サスペンドを解除する（手順Ｔ９０３）。
【００５５】
図１０は、本実施形態における受信イベント処理（図４のステップＳ４０６に相当）の、処理の流れを示したものである。図１０で、第２の実施形態に係る受信イベント処理を説明した図７と同じ処理には同一の参照数字を付し、重複する説明を省略する。なお、図１０に示す処理の開始時点で、後述するタイマー処理終了フラグはＯＦＦに設定されている。
【００５６】
ステップＳ１００５では上述の式２の値Ｒ（ｔ）を算出し、これをサスペンド待機時間とする。続くステップＳ１００６では、現在時刻およびサスペンド待機時間よりタイムアウト時刻を算出し、タイムアウト時刻を引数としてタイマー処理を起動する。タイマー処理の詳細については後述する。タイマー処理は、図４のステップＳ４０３で行ったように、プロセス分岐によって受信イベント処理の別スレッドとして並列に動作させることができる。
【００５７】
受信イベント処理側では、第２の実施形態で説明したように、ステップＳ７０８、Ｓ７０９でイベントの実行及びサスペンド設定遅延時間αの更新処理を行い、その後ステップＳ１００９で、タイマー処理に終了を指示するための「タイマー処理終了フラグ」をＯＮに設定する。これによりタイマー処理スレッドが終了する。
【００５８】
ステップＳ１０１０ではサスペンド中フラグを参照し、自プロセスに対応するサスペンド中フラグがＯＮに設定されている場合（すなわち、ステップＳ７０８におけるイベント実行がタイムアウトし、タイマ処理でサスペンド設定がなされた場合）はステップＳ７１０へ、ＯＦＦに設定されている場合はステップＳＳ７１１へそれぞれ進み、処理を終了する。
【００５９】
次に図１１のフローチャートを用いて、本実施形態において実行されるタイマー処理の流れを説明する。タイマー処理は、上述のように受信イベント処理と並行して動作する。処理を開始すると、ステップＳ１１０１にてタイマー処理終了フラグを参照し、ＯＮであるか否か判定する。ＯＮであると判定された場合は処理を終了し、ＯＮでない場合はステップＳ１１０２に進む。ステップＳ１１０２では現在時刻を参照してタイムアウト時刻と比較し（ステップＳ１１０３）、現在時刻がタイムアウト時刻以降であれば（タイムアウトしていれば）ステップＳ１１０４に進み、そうでなければステップＳ１１０１に戻る。ステップＳ１１０４ではサスペンド設定イベントを発信し、処理を終了する。
【００６０】
このように、本実施形態によれば、イベントの処理にかかる時間が長く、受信イベントバッファが飽和する危険性がある場合のみ、適応的にサスペンドを設定することができる。
【００６１】
■（第６の実施形態）
第５の実施形態においても、第３の実施形態と同様に、イベント到着速度・イベント処理速度・サスペンド設定遅延時間のうちいずれか１つあるいは複数を予め設定した値に固定してもよい。
【００６２】
固定値は、ファイルに記述して初期化ステップ（ステップＳ４０１）で読み込む方法、処理内容を表すプログラム中で予め設定する方法、端末外部との入出力部（図２の２１０）を介して別の装置から入力する方法、システムのユーザがインタラクティブに設定する方法など、任意の方法で設定することができる。
【００６３】
■（第７の実施形態）
第５および第６の実施形態においても、第４の実施形態で説明したように、サスペンド対象フラグ・受信バッファの空きスロット数・イベント到着速度・イベント処理速度・サスペンド設定遅延時間のいずれか１つ、あるいは複数に基づいてサスペンド待機時間を算出してもよい。
例えば、受信バッファの空きスロット数ｎのみに基づいてサスペンド待機時間を算出してもよい。
【００６４】
■（第８の実施形態）
第２〜第７の実施形態において、イベント到着速度ｒ・イベント処理速度ｐ・サスペンド設定遅延時間αは、ある時刻ｔにおける値を算出して用いている（ただし、第３の実施形態および第６の実施形態で固定値を用いる場合を除く）。しかしながら、これらのパラメータとして、平均値・最大値・最小値など、他の種類の統計的な数値を用いるようにしてもよい。
【００６５】
例えば、イベント到着速度ｒは最大値、イベント処理速度ｐは最小値、サスペンド設定遅延時間αは最大値を用いれば、受信バッファがあふれる危険性をより軽減することができる。
【００６６】
■（第９の実施形態）
第１〜第８の実施形態では、各プロセスが操作すべきデータを、プロセス間で共有する仮想空間シーンデータベースとしているが、操作対象となるデータはこれ以外の任意の内容を記述するデータであってよいことは言うまでもない。
【００６７】
【他の実施形態】
上述の実施形態においては、１つの機器から構成される情報処理装置についてのみ説明したが、同等の機能を複数の機器から構成されるシステムによって実現しても良い。
【００６８】
尚、前述した実施形態の機能を実現するソフトウェアのプログラムを、記録媒体から直接、或いは有線／無線通信を用いて当該プログラムを実行可能なコンピュータを有するシステム又は装置に供給し、そのシステム或いは装置のコンピュータが該供給されたプログラムを実行することによって同等の機能が達成される場合も本発明に含む。
【００６９】
従って、本発明の機能処理をコンピュータで実現するために、該コンピュータに供給、インストールされるプログラムコード自体も本発明を実現するものである。つまり、本発明の機能処理を実現するためのコンピュータプログラム自体も本発明に含まれる。
【００７０】
その場合、プログラムの機能を有していれば、オブジェクトコード、インタプリタにより実行されるプログラム、ＯＳに供給するスクリプトデータ等、プログラムの形態を問わない。
【００７１】
プログラムを供給するための記録媒体としては、例えば、フレキシブルディスク、ハードディスク、磁気テープ等の磁気記録媒体、ＭＯ、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−ＲＷ、ＤＶＤ−ＲＯＭ、ＤＶＤ−Ｒ、ＤＶＤ−ＲＷ等の光／光磁気記憶媒体、不揮発性の半導体メモリなどがある。
【００７２】
有線／無線通信を用いたプログラムの供給方法としては、コンピュータネットワーク上のサーバに本発明を形成するコンピュータプログラムそのもの、もしくは圧縮され自動インストール機能を含むファイル等、クライアントコンピュータ上で本発明を形成するコンピュータプログラムとなりうるデータファイル（プログラムデータファイル）を記憶し、接続のあったクライアントコンピュータにプログラムデータファイルをダウンロードする方法などが挙げられる。この場合、プログラムデータファイルを複数のセグメントファイルに分割し、セグメントファイルを異なるサーバに配置することも可能である。
【００７３】
つまり、本発明の機能処理をコンピュータで実現するためのプログラムデータファイルを複数のユーザに対してダウンロードさせるサーバ装置も本発明に含む。
【００７４】
また、本発明のプログラムを暗号化してＣＤ−ＲＯＭ等の記憶媒体に格納してユーザに配布し、所定の条件を満たしたユーザに対して暗号化を解く鍵情報を、例えばインターネットを介してホームページからダウンロードさせることによって供給し、その鍵情報を使用することにより暗号化されたプログラムを実行してコンピュータにインストールさせて実現することも可能である。
【００７５】
また、コンピュータが、読み出したプログラムを実行することによって、前述した実施形態の機能が実現される他、そのプログラムの指示に基づき、コンピュータ上で稼動しているＯＳなどが、実際の処理の一部または全部を行ない、その処理によっても前述した実施形態の機能が実現され得る。
【００７６】
さらに、記録媒体から読み出されたプログラムが、コンピュータに挿入された機能拡張ボードやコンピュータに接続された機能拡張ユニットに備わるメモリに書き込まれた後、そのプログラムの指示に基づき、その機能拡張ボードや機能拡張ユニットに備わるＣＰＵなどが実際の処理の一部または全部を行ない、その処理によっても前述した実施形態の機能が実現され得る。
【００７７】
【発明の効果】
以上説明したように本発明によれば、複数のプロセスがデータ交換に基づき協調的動作を行うシステムにおいて、様々な条件に基づいてイベント情報の発信を制限することにより、プロセスが用いる受信バッファのあふれを防止又は抑制し、簡便な方法で信頼性の高い処理を実現することが可能になる。
【図面の簡単な説明】
【図１】本発明を適用可能な情報処理システムのプロセス構成を示す図である。
【図２】図１の情報処理システムを構築可能な情報処理装置のハードウェア構成例を示すブロック図である。
【図３】第１の実施形態における情報処理手順を示す図である。
【図４】本発明の実施形態におけるプロセスの全体処理を説明するフローチャートである。
【図５】第１の実施形態における操作処理を説明するフローチャートである。
【図６】第１の実施形態における受信イベント処理を説明するフローチャートである。
【図７】第２の実施形態における受信イベント処理を説明するフローチャートである。
【図８】第５の実施形態におけるタイムアウト未発生時の受信イベント処理の処理手順を示す図である。
【図９】第５の実施形態におけるタイムアウト発生時の受信イベント処理の処理手順を示す図である。
【図１０】第５の実施形態の受信イベント処理を説明するフローチャートである。
【図１１】第５の実施形態におけるタイマー処理を説明するフローチャートである。
【図１】
2004265062.tif 000003
【図２】
2004265062.tif 000004
【図３】
2004265062.tif 000005
【図４】
2004265062.tif 000006
【図５】
2004265062.tif 000007
【図６】
2004265062.tif 000008
【図７】
2004265062.tif 000009
【図８】
2004265062.tif 000010
【図９】
2004265062.tif 000011
【図１０】
2004265062.tif 000012
【図１１】
2004265062.tif 000013