(57)【要約】【課題】  複数のサーバーによりそれぞれサービスが提供され、これらサービスにより仮想的な世界がそれぞれ構築されるシステムにおいて、ユーザが仮想的な世界を自由に構築したり連結したりできるようにするとともに、仮想的な世界の間の自由に移動できるようにする。【解決手段】  サーバー１１、２１をネットワーク４０上で所定のインターフェイスパーツを通じて動的に結合し、この結合により仮想的な世界を互いに結合して拡張する。【選択図】  図４
2005234633.tif 000002
【特許請求の範囲】
【請求項１】
複数のサーバーによりそれぞれサービスが提供され、
これらサービスにより仮想的な世界がそれぞれ構築されるシステムにおいて、
上記複数のサーバーをネットワーク上で所定のインターフェイスを通じて動的に結合し、
この結合により上記仮想的な世界を互いに拡張する
ようにしたサービスの拡張方法。
【請求項２】
請求項１に記載のサービスの拡張方法において、
上記結合した世界を構築しつつ、その処理を所定の単位で各サーバーに分散し、
その結果をクライアントに提供する
ようにしたサービスの拡張方法。
【請求項３】
請求項１に記載のサービスの拡張方法において、
上記サービスの提供を受けるクライアントが、上記インターフェイスを通じて上記各サーバーが処理を担当している区画の境界を越えて移動できる
ようにしたサービスの拡張方法。
【請求項４】
請求項３に記載のサービスの拡張方法において、
上記クライアントが、上記区画の境界を越えて移動したとき、その移動先における世界のクライアント処理を移動先のサーバーへ受け渡す
ようにしたサービスの拡張方法。
【請求項５】
複数のサーバーを動的に結合して複数の仮想世界を動的に結合するようにしたサービスの拡張方法において、
クライアントの処理を、各サーバーの状況にしたがってサーバー間で受け渡し、
上記サーバー間で負荷を分散させる
ようにしたサービスの拡張方法。
【請求項６】
請求項５に記載のサービスの拡張方法において、
分散処理フレームワークあるいは共通コンピューティングモジュールを用いて上記分散処理を組み込む
ようにしたサービスの拡張方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、サーバにより提供されるサービスの拡張方法に関する。
【背景技術】
【０００２】
近年、ネットワーク上における仮想コミュニティが広く実用化されている。オンラインゲーム、ホームページ上の掲示板群で構成されるもの、ＶＲＭＬなどを用いたバーチャルモールなど、さまざまな形態が存在する。
【０００３】
中でもオンラインゲームにおける仮想コミュニティは年々規模が大きくなり、数千人のユーザが１つのコミュニティにログインし、コミュニケーションをとり、相互に影響を及ぼしあうことができる。このようなゲームは「ＭＭＯＧ」と呼ばれ、広く普及している。また、３ＤＣＧを用いた「ＭＭＯＲＰＧ」では、サーバー上にＣＧを用いた仮想世界が構築され、その仮想世界にユーザがアバター（仮想空間上でユーザの分身として作用するキャラクタ）を介して参加するといったことも実現している。
【０００４】
これらのシステムは、多数のユーザアクセスによる高負荷を分散するため、通常、ゲームを運用する企業が数台から数百台のサーバーを用意して運営されている。また、世界各地にサーバーを配置したり、複数のシステムを稼動させたりすることにより、運営者が用意した仮想コミュニティのうちの１つをユーザが選択して参加することができるようにして、ネットワークサービスの向上を図っている。
【０００５】
現在、企業がパーソナルコンピュータで稼動するＭＭＯＲＰＧのサーバーエミュレーターなどを構築しているが、今後、個人が所有するパーソナルコンピュータの性能向上、ネットワークの高速化が進むにつれ、ＭＭＯＧやバーチャルモールなどのハイクオリティな仮想コミュニティを個人で構築し、容易にサービスを提供できるようになると思われる。
【０００６】
なお、先行技術文献として例えば以下のものがある。
【特許文献１】特開２０００−３４２８５５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ところが、ＭＭＯＧやバーチャルモールなどを含む仮想コミュニティには、根本的に以下のような問題が存在する。すなわち、
・ＷＷＷのサイト間にリンクが張れるように、ユーザが自由なコミュニティを構築できない。  
・いったんサーバーごとに異なるコミュニティを稼動させると、ユーザがコミュニティ間を自由に移動することができない。あらかじめコミュニティを連結させる構成でシステムを構築する必要がある。  
・動的な負荷分散システムを構築するためには、特別なシステム構成やミドルウェア製品などが必要になる。
【０００８】
この発明は、以上のような問題点を解決しようとするものである。
【課題を解決するための手段】
【０００９】
この発明においては、
複数のサーバーによりそれぞれサービスが提供され、
これらサービスにより仮想的な世界がそれぞれ構築されるシステムにおいて、
上記複数のサーバーをネットワーク上で所定のインターフェイスを通じて動的に結合し、
この結合により上記仮想的な世界を互いに拡張する
ようにしたサービスの拡張方法
とするものである。
【発明の効果】
【００１０】
この発明によれば、ネットワーク上に存在する仮想コミュニティを、他の仮想コミュニティに、自由に、かつ、動的に連結することができる。また、ユーザは参加している仮想コミュニティが動的に変化しても自由に仮想世界を移動できる。さらに、ユーザ同士が協力して仮想コミュニティを創造することができ、新しいコミュニケーション手段とすることができる。また、点在するネットワーク上のビジネスを有機的に結合して新しいネット取り引きの場を提供できる。
【００１１】
さらに、１台のサーバーに集中していた仮想コミュニティの処理が、複数のサーバー間の結合と協力によって分散され、簡単に負荷を低減できる。また、複数のサーバー構成により仮想コミュニティの分散処理を行っているシステムにおいても、運用を停止せずに、かつ、可用性を損なうことなく構成の変更やメンテナンスを行うことができる。さらに、複数のサーバー構成により仮想コミュニティの分散処理を行っているシステムにおいて、アプリケーション自体に上述の機構を組み込めば、特別なミドルウェアなどが不要になる。
【発明を実施するための最良の形態】
【００１２】
〔１〕  システム全体の構成
図１は、この発明によるシステムの全体の構成の一例を示し、この例においては、２つの仮想コミュニティ１０、２０が構築されている場合である。
【００１３】
仮想コミュニティ１０は、サーバー１１の処理により構築されるもので、サーバー１１、１２には、ネットワーク４０を通じて３台のクライアント１２〜１４が接続されている。そして、サーバー１１により、クライアント１２〜１４との間のデータ処理および仮想世界におけるクライアント１２〜１４の状態や動作の管理などが行われる。
【００１４】
また、クライアント１２〜１４のそれぞれが、サーバー１１に対して仮想世界内の自分の動作に関する命令を送信し、サーバー１１はそれによって仮想世界におけるその影響を計算し、結果をクライアント１２〜１４のそれぞれに送信する。これにより、３台のクライアント１２〜１４がサーバー１１に構築された世界で行動し、その世界の変化を共有することができる。
【００１５】
また、仮想コミュニティ２０が、サーバー２１の処理により同様に構築され、その仮想コミュニティ２０にクライアント２２が参加している。さらに、サーバー１１、２１にはデータベース１９、２９が接続され、ネットワーク４０には、管理サーバー３０が接続されるが、これらについては後述する。
【００１６】
〔２〕  仮想コミュニティの具体例
ここで、後述の説明の理解を容易にするため、アプリケーションの具体例を示す。
【００１７】
仮想コミュニティ１０の具体例として、次のようなものを考える。すなわち、図２に示すように、街の１区画を模した仮想空間内に、ＣＧで構築された家が個人のホームページとして存在する。クライアント１２〜１４は、与えられた敷地内に自分の家を構え、そこに自分がもつ情報を反映させる。例えば、クライアント１２は、自分の家の中にテレビが置いてあり、クライアント１３が仮想空間内で自分を模したキャラクタを操って、クライアント１２の家を訪ねる。その家でテレビをつけると、クライアント１３は、クライアント１２が現実の世界で撮影して仮想世界に保存しておいたホームビデオを見ることができる。
【００１８】
すると、図１におけるデータベース１９は、
・仮想コミュニティ１０の地理情報
町の区画情報、クライアントの敷地情報など
・存在するオブジェクトの情報
クライアントの家、家の内部備品（例えばテレビ）など
各種情報（テレビオブジェクトにリンクしているホームビデオの動画ファイルなど）
街中の木、その他のオブジェクトなど
・各クライアントの情報
クライアントの分身となるキャラクタやクライアントの接続情報
などを保存するものである。ただし、サーバー１１がデータベース１９を兼ねる場合もある。
【００１９】
なお、図１に示すように、仮想コミュニティごとにデータベースを持つこともできるが、１つのデータベースを複数の仮想コミュニティが共用することもできる。その場合には、通常の稼動時のデータベースのアクセスが遅くなるが、仮想コミュニティの連結時に、仮想コミュニティのデータベースの同期を高速にすることができる。
【００２０】
以上が仮想コミュニティ１０の単体の概要であるが、仮想コミュニティ２０についても同様とすることができる。そして、このような仮想コミュニティの単体の実現方法や運用については、これまでの技術によりさまざまな形態で実現できるので、これ以上の説明は省略する。
【００２１】
〔３〕  実施方法
上述の仮想コミュニティ１０、２０において、サーバー１１、２１とクライアント１２〜１４、２２とのすべてが、ネットワーク４０を通じて互いに通信可能であるとする。
【００２２】
この発明においては、例えば図２に示すように、仮想コミュニティ１０、２０を動的に結合させ、仮想コミュニティ１０、２０を連結させるものである。したがって、ユーザは、連結された仮想コミュニティ１０と２０との間を自由に行き来することができる。
【００２３】
仮想コミュニティ１０が仮想コミュニティ２０と連結しようとする場合、仮想コミュニティ１０は、始めに仮想コミュニティ２０とのセッションを確立させる必要があり、そのためにアドレスなどのネットワーク情報を入手する必要がある。
【００２４】
そして、そのためには、図１に示すように、ネットワーク上に管理サーバー３０を配置し、現在ネットワーク上のどこでどのような仮想コミュニティがどのような設定で稼動しているかという情報を提供すればよい。あるいは、現実の世界で、仮想コミュニティ１０の管理者と仮想コミュニティ２０の管理者とが情報を交換してもよく、その他の自由な方法で必要な情報を互いに取得すればよい。
【００２５】
〔４〕  連結インターフェイスの調整
同じアプリケーションであっても異なる仮想コミュニティにおいては、独特の構造を持つことが考えられる。したがって、それぞれの仮想コミュニティを連結するためには、その連結部分のインターフェイスを一致させる必要がある。このインターフェイスを一致させる方法も、アプリケーションにより自由な手法を用いてよい。
【００２６】
先に述べたアプリケーションの場合をモデルとして、以下に２つの方法を説明する。
【００２７】
第１の方法は、例えば図３に示すように、結合された仮想コミュニティ１０、２０の構造をあらかじめマップとして構築しておく方法である。すなわち、複数の仮想コミュニティ、今の場合、２つの仮想コミュニティ１０、２０が最終的にどのように配置されるか、仮想コミュニティ１０、２０の間の境界は、どのような制限を守らなければならないかを示した最終的な地図を、「ワールドマップ」と呼ぶことにする。
【００２８】
図３はそのワールドマップの一例を示し、このワールドマップは、全体を３×５の区画に分割し、その１つの区画を仮想コミュニティ単体を構築するスペース（以下、「エリアマップ」と呼ぶ）として提供する場合である。
【００２９】
ワールドマップのデータには、ワールドマップ全体および各エリアマップのそれぞれの形状・サイズ、エリアマップ間のインターフェイスなどが定義されている。インターフェイスとしては、例えば境界の中央には、（仮想世界内の単位で）何ｍかの幅を持つ「道路」のグラフィックパーツを配置しなければならない、ユーザが境界を通るときには、この「道路」を通ることで仮想コミュニティ間の移動が可能である、などの設定が記述されており、仮想コミュニティはこれらの制約にしたがって構築される。
【００３０】
ワールドマップは、図１の管理サーバー３０に置いて、空いているエリアマップに各仮想コミュニティが参加していくという使いかたや、仮想コミュニティ間で連結セッションを開始するときに、どちらかの仮想コミュニティが持っているワールドマップを基準にするか選択する、などの使い方ができる。
【００３１】
第２の方法は、ワールドマップを用いず、自由な仮想コミュニティの連結インターフェイスを実現する方法である。先に示したアプリケーションの例であれば、例えば図４に示すように、道路を連結する交差点のような「インタフェースパーツ」をアプリケーションで用意しておき、連結セッション開始時に交差点パーツを選択して仮想コミュニティ間を接続する方法が可能である。
【００３２】
インターフェイスパーツは、グラフィックデータと、先のワールドマップ方式におけるエリアマップ境界インターフェイスと同様のデータを持つ。インターフェイスパーツはアプリケーションである程度用意していてもよいし、境界のみの定義をいくつか用意しておき、ユーザが自分の仮想コミュニティの境界に合わせてカスタマイズしたインターフェイスパーツを作成してもよい。
【００３３】
例えば、連結する境界は幅１ｍ×高さ２ｍの長方形として定義し、仮想コミュニティ１０、２０で自分の家の前に道路を設け、その道路の終端を境界とする。そして、双方の仮想インターフェイス１０、２０を連結するインターフェイスパーツを、仮想コミュニティ１０、２０の中にユーザが独自に作りこむ。
【００３４】
これらインターフェイスパーツは、アプリケーションで用意する、各仮想コミュニティが作成して所持する、管理サーバーに容易する、管理サーバーにユーザが登録していく、などの方法で提供することができる。
【００３５】
以上、仮想コミュニティ境界のインターフェイスを一致させる方法の例を示したが、なんらかのアルゴリズムでグラフィックスをスムーズに連結する処理や境界を定義する処理を自動的に行う方法も考えられる。
【００３６】
〔５〕  仮想コミュニティ同士の連結のプロセス
仮想コミュニティ１０のサーバー１１が、仮想コミュニティ２０に対して連結を要請するときのプロセスについて、図５により説明する。なお、図５（および図６、図８）において、丸数字はプロセスの番号を示し、以下の［］内のプロセス番号と対応する。また、図９は、仮想コミュニティを構成するサーバー同士でやりとりする情報（メッセージ）の一覧であり、連結のプロセスにおいては、情報A1〜A7、B1が使用される。
【００３７】
［プロセス１］
まず、連結する相手である仮想コミュニティサーバー２１のネットワークアドレスや連結セッションを開始するための受け口となるインターフェイスを知る必要がある。これら必要な情報はアプリケーションによって変わるが、主に情報A1〜A3により構成される。ここでは、管理サーバー３０がネットワーク上に点在する仮想コミュニティに関する情報を一括管理しているものとして話を進める。この場合、サーバー１１は前述した仮想コミュニティサーバー２１の情報を取得する要求を管理サーバー３０に送信する。
【００３８】
［プロセス２］
管理サーバー３０は仮想コミュニティ連結を行うための情報A1〜A3をサーバー１１に与える。サーバー１１と同じ情報A2を持ち、情報A1によりネットワーク到達可能と判断されたサーバーで構成されている仮想コミュニティが仮想コミュニティ１０と連結可能な仮想コミュニティである。これによりサーバー２１に構成される、連結可能な仮想コミュニティ２０の存在を知ることができる。情報A3はアプリケーションの種類やサーバー管理者のセキュリティポリシーによって内容や利用法が変わってくる。なお、すでにこれらの情報を何らかの手段によりサーバー１１が取得している場合、プロセス［１、２］は省略可能である。
【００３９】
［プロセス３］
サーバー１１は自分の情報A1〜A7をもとに連結要請メッセージを作成し、この連結要請メッセージをサーバー２１の情報A1〜A3の情報をもとにサーバー２１に送信する。
【００４０】
［プロセス４］
連結要請メッセージを受信したサーバー２１は、受け取ったサーバー１１の情報A1〜A7を元に仮想コミュニティの連結を実行するかどうかを、以下の観点から判断する。
【００４１】
(A) 自分の属しているネットワークセキュリティポリシーなどを考慮しながら、ネットワーク到達可能、アプリケーションの通信可能であるかを情報A1から判断する。
【００４２】
(B) 情報A2から同一仮想コミュニティアプリケーション、もしくは連結互換性のある仮想コミュニティかどうかを判断する。
【００４３】
(C) 情報A3から連結してもよい相手かどうかを判断する。
【００４４】
(D) 情報A4、A6、A7から自分の仮想コミュニティ運用パフォーマンスに影響がないか、運用ポリシーに同意できるかを判断する。
【００４５】
(E) サーバー２１の管理者が総合的に連結を行うかどうかを選択する。
【００４６】
以上の観点から、連結要請を受諾するか、拒否するかを判断し、その結果をサーバー１１に連結応答メッセージとして返す。このときサーバー２１の情報A4〜A7を応答メッセージに含める。
【００４７】
［プロセス５］
連結要請を受諾するメッセージをサーバー１１が受信すると、仮想コミュニティの連結が成立し、情報B1をサーバー間でサーバー間連結メッセージにより交換する。このメッセージ交換が終了すると、仮想コミュニティ境界にインターフェイスが構築され、連結処理が終了する。
【００４８】
また、連結処理には境界付近の地理データや、同期すべきデータベースの一部のデータの交換処理が必要な場合がある。これにより、仮想世界を移動しているユーザが連結された隣の仮想コミュニティの世界を視界に捉えることができたり、仮想コミュニティがお互いに連結による結果の影響を及ぼすことができる。
【００４９】
〔６〕  仮想コミュニティ境界を越えてやりとりされるメッセージ
次に仮想コミュニティが連結されている状態で、サーバー・サーバー間、サーバー・クライアント間でやりとりされるメッセージを、ユーザが仮想コミュニティ境界を越えて移動したときのプロセスを例にとって、図６および図９を用いて説明する。
【００５０】
連結中にやりとりされる情報（メッセージ）には、サーバー間の情報C1〜C7と、サーバー・クライアント間の情報D1とがある。なお、サーバー・クライアント間の情報は、連結仮想コミュニティに関連する情報D1以外にも、仮想コミュニティ本体の処理によってやり取りされるものが存在するが、ここでは考えない。
【００５１】
以下、仮想コミュニティ１０上に存在していたクライアント１２の分身であるキャラクタが仮想コミュニティ２０に移動するときのプロセスを説明する。
【００５２】
［プロセス１］
ユーザが、クライアント１２を操作することによりクライアント１のキャラクタが、連結された仮想コミュニティ１０から仮想コミュニティ２０への境界を越えると、クライアント１２のキャラクタは仮想コミュニティ２０に移動したという判定がなされる。この操作をトリガーとしてクライアント１２の仮想コミュニティの移動が開始される。
【００５３】
［プロセス２］
クライアント１２の情報C1が、移動元から移動先の仮想コミュニティ２０に送信される。このクライアント情報のうち、時間経過に対して変化しないデータ（ユーザの分身キャラクタの身体的特徴、服装などの属性）に関しては、仮想コミュニティ１０、２０が連結した時点でバックグラウンド処理で送信し、データベース２９などに保存してもよい。この方針は連結時に設定された情報A7の内容にしたがう。また、データベース１９、２９を共用している場合には、このプロセスは不要、もしくは単純なものになる。
【００５４】
また、データベースのコピーに注目すると、連結されたときの境界の地理データの同期など情報C2のデータのやりとりは、連結時だけでなく、仮想世界に変化があった場合に連結中も任意のタイミングで同期は行われる。この処理も連結時に設定された情報A7の内容にしたがう。
【００５５】
［プロセス３］
上記［プロセス１、２］で移動の準備が整うと、サーバー２１にクライアント１２がそちらへ移動したことをメッセージC6で伝える。
【００５６】
［プロセス４］
クライアント１２の移動に問題がなければ、移動完了メッセージC7でサーバー１１に返す。
【００５７】
［プロセス５］
移動完了メッセージを受け取ると、サーバー１１は情報D1によりクライアント１２に仮想コミュニティの移動完了を知らせ、接続サーバーを変更するように通知する。
【００５８】
［プロセス６］
クライアント１２は接続先サーバーのみを変更し、それまでサーバー１１と行っていた仮想コミュニティ本体の通信処理を同様にサーバー２１と継続する。これによりクライアント１２が仮想世界上でも仮想コミュニティ２０に移動し、その処理もサーバー２１で担当するようになる。
【００５９】
以上がクライアントの仮想コミュニティ間の移動プロセスについてであるが、上記の処理では使用されていない情報C3、C4、C5について説明する。
【００６０】
情報C3は、主に負荷分散の用途で使われるものであり、詳細は後述する。情報C4は、連結時の情報A7の設定にしたがってサーバー間でやりとりされ、この内容によっては負荷分散や、新たなユーザや仮想コミュニティの接続を拒否を行う判断材料として使われる。情報C5は、連結された仮想コミュニティを切断するものである。シーケンスが単純なので、図示しないが、例えば、切断要求、切断応答、全仮想コミュニティ内クライアントへの通知を順に実行することにより、仮想コミュニティの切断を行うことができる。
【００６１】
〔７〕  仮想コミュニティ間の負荷分散
ここで言う負荷分散とは、例えば図７に示すように、仮想コミュニティ１０、２０が連結されたとき、多数のクライアント１２〜１６が接続しているなどの理由により、一方の仮想コミュニティの負荷が高いときに、その一方の仮想コミュニティ内のクライアントの処理を、他方の仮想コミュニティ内のサーバーに肩代わりさせる仕組みである。この場合、クライアントが仮想世界の現象を受け取るときのサーバー、すなわち、接続先のサーバーは変化するが、クライアントが仮想コミュニティ間を移動することはない。
【００６２】
図８および図９により負荷分散を開始するためのシーケンスについて説明する。ここでは、サーバー１１のクライアント１２に関する処理を、サーバー２１に分担させるまでのプロセスの場合である。
【００６３】
［プロセス１］
まず、サーバー１１が仮想コミュニティ１０に関する処理を行っているクライアントの中からサーバー２１に処理を移譲するクライアント、今の場合、クライアント１２を選択し、処理の移譲を要請する情報（メッセージ）C6をサーバー２１に送信する。ここで、情報C6は、ユーザの仮想コミュニティ間の移動のときとは異なり、処理を行うサーバーのみの変更を要請するメッセージになっている。この中には、サーバー１１の状態を示す情報C4やクライアント処理実行のために必要な情報C2を含むこともできる。
【００６４】
［プロセス２］
サーバー２１は自身の稼動状況と、受信した情報C6の内容とから、クライアント１２の処理を受け持つかどうかを応答メッセージ（情報）C7によってサーバー１１に伝える。
【００６５】
［プロセス３］
サーバー２１へクライアント１２の負荷を受け渡すことが決まると、サーバー１１は情報D1により、クライアントの仮想コミュニティ内での行動に対する結果をサーバー２１から受け取るため、接続先の変更の指示および接続先を示す情報D1を送信する。
【００６６】
［プロセス４］
上記［プロセス１〜３］までの負荷分散手続きを終えた後、クライアント１２は仮想コミュニティ１０における行動の内容をサーバー２１に送信する。
【００６７】
［プロセス５］
サーバー２１はサーバー−１１に変わってクライアント１２の仮想コミュニティ１０内での処理を行うため、サーバー１１が管理している仮想コミュニティ１０に関するデータベースのうち、必要なデータを受け取る。これはクライアント１２からの処理要求がくる前に必要なだけコピーしてもよく、あるいはすべてをあらかじめコピーしておいてもよい。
【００６８】
［プロセス６］
サーバー２１はクライアント１２からの処理要求と、仮想コミュニティ１０に関するデータとを用いて、仮想コミュニティ１０に関する処理をクライアント１２に返す。これと並行して自身が処理を行っている仮想コミュニティ２０の処理を行い、結果を仮想コミュニティ２０にいるクライアント１２に送信する。
【００６９】
なお、上記［プロセス４〜６］に関してはさまざまな異なる形態をとることもできる。例えば、クライアント１２の仮想コミュニティ１０の処理要求をそのままサーバー１１に送信し、サーバー１１はＲＰＣのような形でサーバー２１にその処理を依頼し、サーバー２１はその結果をクライアント１２に送信する方法を採ることができる。
【００７０】
この方法の利点はサーバー１１が、自身の負荷状態を見ながら、負荷が軽いときはクライアント１２の処理要求を自分で処理して返信し、負荷が重いときはサーバー２１に処理を依頼するという処理がスムーズに切り換えられることである。ただし、この場合にはサーバー２１に処理を依頼するプロセスが増える。
【００７１】
ＲＰＣのような方法で処理を依頼する部分については、Ｊａｖａ（登録商標）ＲＭＩ、ＤＣＯＭ、ＣＯＲＢＡなどの分散処理フレームワークを利用したり、特開２００２-３６６５３３号公報「コンピュータ・ネットワーク及びコンピュータ可読媒体」に示されているような共通のコンピューティングモジュールを用いてネットワーク上で処理を分散させる方法など、環境やアプリケーションによって様々なものが利用できる。またこれらを用いなくともアプリケーション独自のプロトコルで処理の依頼を実現してもよい。
【００７２】
なお、［プロセス１〜６］でやり取りされるメッセージおよびデータの一例を、図１０および図１１（図１１は図１０の続き）に示す。接続する方式は、図４の場合を想定している。
【００７３】
〔８〕  分散処理
ここでは、［プロセス４〜６］を実現するために複数の情報処理装置間で分散処理を行うネットワークシステムの一例について、図１２により説明する。
【００７４】
図１２に示す例においては、３台の情報処理装置１００〜３００がネットワーク４００を通じて互いに接続され、これらの間で分散処理を行う場合である。情報処理装置１００は、１つのメインプロセッサ１０１と、１つあるいは複数のサブプロセッサ、この例においては、３つのサブプロセッサ１１１〜１１３と、ＤＭＡコントローラ１２１と、ディスクコントローラ１２２とを有し、単一の集積回路に構成されている。
【００７５】
また、メインプロセッサ１０１およびサブプロセッサ１１１〜１１３は、それぞれローカルストレージ１３１を有している。そして、メインプロセッサ１０１は、サブプロセッサ１１１〜１１３によるプログラムあるいはデータの処理のスケジュール管理と、全般的な管理とを行う。サブプロセッサ１１１〜１１３は、メインプロセッサ１０１の制御によって並列に、かつ、独立にプログラムあるいはデータの処理を実行する。
【００７６】
なお、メインプロセッサ１０１内でプログラムが動作する場合もある。また、メインプロセッサ１０１のプログラムが、サブプロセッサ１１１のプログラムと連携して動作する場合もある。さらに、情報処理装置１００〜３００は、ネットワーク全体を通して当該情報処理装置を一意的に識別できる識別子が情報処理装置ＩＤとして割り当てられている。メインプロセッサ１０１およびサブプロセッサ１１１〜１１３も、同様に識別可能な識別子がメインプロセッサＩＤおよびサブプロセッサＩＤとして割り当てられている。
【００７７】
ＤＭＡコントローラ１２１は、メインメモリ１４１に格納されているプログラムあるいはデータへのアクセスを行う。なお、メインメモリ１４１は、情報処理装置１００の外部に接続されているもので、例えばＤＲＡＭとされている。
【００７８】
また、ディスクコントローラ１２２は、情報処理装置１００と接続されている外部記憶装置１４２へのアクセスを行う。外部記憶装置１４２には、固定ディスク（ハードディスク）、リムーバブルディスク、ＭＯ、ＣＤ±ＲＷ、ＤＶＤ±ＲＷなどの光ディスク、メモリディスクなどが想定され、ＳＲＡＭ、ＲＯＭなども含まれる。
【００７９】
そして、メインプロセッサ１０１、サブプロセッサ１１１〜１１３、ＤＭＡコントローラ１２１、ディスクコントローラ１２２はバス１０２によって接続されている。さらに、他の情報処理装置２００、３００も情報処理装置１００と同様に構成されているものであり、詳細は省略する。
【００８０】
〔９〕  データの不整合の回避
上述のように、サブプロセッサ１１１〜１１３は、独立にプログラムあるいはデータの処理を実行するが、もしも異なるサブプロセッサが同一メインメモリ１４１の同一領域に対して、同時に読み出しあるいは書き込みを行った場合には、データの不整合を生じる可能性がある。したがって、メインメモリ１４１にアクセスする場合には、ある手順が必要となるが、その手順について、図１３により説明する。
【００８１】
図１３Ａにおいて、メインメモリ１４１は、複数のアドレス指定可能な「メモリロケーション」から構成される。各メモリロケーションに対して、データの状態情報を格納するための「追加セグメント」が割り振られる。追加セグメントは、「Ｆ／Ｅビット」、「サブプロセッサＩＤ」、「ローカルストレージアドレス」（ＬＳアドレス）を含む。各メモリロケーションには「アクセスキー」も割り振られるが、これについては後述する。
【００８２】
そして、Ｆ／Ｅビットは、以下のように定義される。  
Ｆ／Ｅビット＝“０”のとき
サブプロセッサ（１１１〜１１３）により読み出され、処理中あるいは空き状態であるため、最新データではない無効データである。読み出し不可だが、予約は可能であり、“１”になったときにあらかじめ読み出し予約情報として追加セグメントに書き込まれたサブプロセッサＩＤ、ローカルストレージアドレスへ読み出される。  
すなわち、複数のサブプロセッサによりデータを多段階に処理する必要がある場合、上記のように構成することにより、前段階の処理を行うサブプロセッサが、処理済みのデータをメインメモリ１４１の所定のアドレスへ書き込んだ直後に、ただちにそのデータが後段階の処理を行うサブプロセッサへ読み出されることになり、非常に好適である。また、書き込み可能であり、書き込み後、“１”になる。
【００８３】
Ｆ／Ｅビット＝“１”のとき
サブプロセッサ（１１１〜１１３のどれか）により読み出されておらず、したがって、処理中ではない最新データである。読み出し可能であり、読み出し後、“０”になる。書き込み不可である。  
Ｆ／Ｅビットは、以上のように定義される。
【００８４】
図１３Ｂに示すサブプロセッサ１１１のローカルストレージ１３１も、複数のアドレス指定可能なメモリロケーションから構成される。各メモリロケーションに対してはやはり、追加セグメントが割り振られる。追加セグメントは、メインメモリ１４１の追加セグメントの内容に加えてビジービットを含む。
【００８５】
メインメモリ１４１のデータをローカルストレージ１３１のメモリロケーションへ読み出すときには、対応するビジービットを“１”に設定し、予約する。ビジービットが“１”のメモリロケーションには他のデータは格納不可である。ローカルストレージ１３１のメモリロケーションへ読み出した後、ビジービットは“０”になり、任意の目的に使用可能になる。
【００８６】
さらに、図１３Ａに示すように、情報処理装置１００のメインメモリ１４１には複数の「サンドボックス」を有する。サンドボックスはメインメモリ１４１の領域を画定するものであり、各サンドボックスはサブプロセッサ１１１〜１１３に割り当てられ、排他的に使用可能とされる。すなわち、サブプロセッサ１１１〜１１３のそれぞれは、自身に割り当てられたサンドボックスを使用可能だが、前述の領域を超えてデータのアクセスを行えない。また、図１３Ａに示すように、メインメモリ１４１は複数のメモリロケーションから構成されるが、サンドボックスはこれらのメモリロケーションの集合である。
【００８７】
さらに、メインメモリ１４１の排他制御を実現するために、図１４に示すようなキー管理テーブルが用意される。このキー管理テーブルは、ＳＲＡＭのような比較的高速のメモリに用意され、ＤＭＡコントローラ１２１と関連付けられる。キー管理テーブルの各エントリには、サブプロセッサ１１１〜１１３を識別する「サブプロセッサＩＤ」、「サブプロセッサキー」および「キーマスク」が含まれる。なお、サブプロセッサ１１１〜１１３の場合には、Ｎ＝２である。
【００８８】
ここで、サブプロセッサ１１１〜１１３のうちの任意のサブプロセッサがメインメモリ１４１を使用するときのプロセスを図１３および図１４を用いて説明する。サブプロセッサはＤＭＡコントローラ１２１へ、読み出しあるいは書き込みコマンドを出力する。このコマンドには、そのサブプロセッサ自身のサブプロセッサＩＤと、使用要求対象先であるメインメモリ１４１のアドレスとが含まれる。ＤＭＡコントローラ１２１は、このコマンドを実行する前にキー管理テーブルを参照し、使用要求元であるサブプロセッサのサブプロセッサキーを調べる。
【００８９】
次いで、ＤＭＡコントローラ１２１は、調べたサブプロセッサキーと、サブプロセッサ１１１の使用要求先である図１３に示されるメインメモリ１４１のメモリロケーションに割り振られたアクセスキーとを比較する。２つのキーが一致した場合のみ、前述のコマンドを実行する。
【００９０】
また、図１４に示すキーマスクの使用方法として、キーマスクの任意のビットが“１”になることにより、関連付けられたサブプロセッサキーの対応するビットが“０”あるいは“１”になることができる。
【００９１】
例えば、サブプロセッサキーが“１０１０”であるとする。通常このサブプロセッサキーによって“１０１０”のアクセスキーを持つサンドボックスへのアクセスだけが可能になる。しかし、このサブプロセッサキーと関連付けられたキーマスクが“０００１”に設定されている場合、このサブプロセッサキーを用いて“１０１０”あるいは“１０１１”のいずれかのアクセスキーを持つサンドボックスへのアクセスが可能となる。以上のようにしてサンドボックスの排他性を実現する。
【００９２】
すなわち、前述の複数のサブプロセッサ１１１〜１１３によりデータを多段階に処理する必要がある場合、上述のように構成することにより、前段階の処理を行うサブプロセッサと、後段階の処理を行うサブプロセッサだけがメインメモリ１４１の所定のアドレスへアクセスでき、したがって、データの保護が可能となる。
【００９３】
〔１０〕  分散処理の手順
ここでは、図１２のシステムにより分散処理を行う手順について説明する。ネットワーク上の情報処理装置１００〜３００の間では、ソフトウェアセルが伝送される。ある情報処理装置は、コマンド、プログラムおよびデータを含むソフトウェアセルを生成し、ネットワーク４００を通じて他の情報処理装置に送信することにより処理を分散できる。
【００９４】
ソフトウェアセルは、例えば図１５に示すように構成される。すなわち、「送信元ＩＤ」には、ソフトウェアセルの送信元である情報処理装置のネットワークアドレスや情報処理装置ＩＤ、メインプロセッサＩＤ、サブプロセッサＩＤが含まれる。「送信先ＩＤ」および「応答先ＩＤ」には、ソフトウェアセルの送信先である情報処理装置およびソフトウェアセルの実行結果の応答先である情報処理装置について同じ情報が含まれる。
【００９５】
「セルインターフェイス」には、ソフトウェアセルの利用に必要な情報が含まれ、「グローバルＩＤ」、「必要なサブプロセッサ」、「サンドボックスサイズ」、「前回のソフトウェアセルＩＤ」から構成される。グローバルＩＤは、ネットワーク全体を通してソフトウェアセルを一意的に識別できるものであり、送信元ＩＤおよびソフトウェアセルの作成あるいは送信の日付と時刻に基づいて作成される。また、必要なサブプロセッサによって、ソフトウェアセルの実行に必要な最低数のサブプロセッサが与えられる。
【００９６】
さらに、サンドボックスサイズによって、ソフトウェアセルの実行に必要なメインメモリ１４１内およびサブプロセッサ１１１〜１１３のローカルストレージ１３１のメモリ量が与えられる。前回のソフトウェアセルＩＤによって、ストリーミングデータなどのシーケンシャルな実行を要求する１グループのソフトウェアセルの前回のソフトウェアセルの識別子が提供される。
【００９７】
また、ソフトウェアセルにおいて、「実行セクション」が、「ＤＭＡコマンド」、「プログラム」、「データ」から構成される。ＤＭＡコマンドには、プログラムの起動に必要な一連のＤＭＡコマンドが含まれ、プログラムには、サブプロセッサによって実行されるサブプロセッサプログラムが含まれる。また、データとは、これらのサブプロセッサプログラムを含むプログラムによって処理されるデータである。
【００９８】
さらに、ＤＭＡコマンドには、「ロードコマンド」、「キックコマンド」、「ステータスコマンド」、「ステータス返信コマンド」、「機能プログラム実行コマンド」がある。ロードコマンドは、メインメモリ１４１の情報を、サブプロセッサのローカルストレージへロードするコマンドである。このため、ロードコマンドは、ロードコマンド本体の他に、「メインメモリアドレス」、「サブプロセッサＩＤ」、「ローカルストレージアドレス」（ＬＳアドレス）を含む。
【００９９】
なお、メインアドレスは、情報のロード元であるメインメモリ１４１の所定領域のアドレスを示す。サブプロセッサＩＤおよびローカルストレージアドレスは、情報のロード先であるサブプロセッサの識別子およびローカルストレージ１３１のアドレスを示す。
【０１００】
キックコマンドは、プログラムの実行を開始するコマンドであり、キックコマンド本体の他に「サブプロセッサＩＤ」と、「プログラムカウンタ」とを有する。なお、サブプロセッサＩＤは、キックする対象サブプロセッサを識別し、プログラムカウンタは、プログラムの実行用プログラムカウンタのためのアドレスを与える。
【０１０１】
ステータスコマンドは、送信先ＩＤに示される情報処理装置の現在の状態（装置情報）を要求するコマンドであり、ステータス返信コマンドは、後述するとおりである。また、機能プログラム実行コマンドは、ある装置が他の装置に対して機能プログラムの実行を要求するコマンドである。機能プログラム実行コマンドを受信したスレーブは、後述する「機能プログラムＩＤ」によって、起動すべき機能プログラムを識別する。
【０１０２】
そして、ステータス返信コマンドは、ステータスコマンドを受信した情報処理装置が、自身の装置情報を当該ステータスコマンドに含まれる応答先ＩＤに示される情報処理装置へ応答するコマンドである。ステータス返信コマンドは、実行セクションのデータ領域に装置情報を格納するが、そのときのデータ領域の構造の一例を図１６に示す。
【０１０３】
この図１６を用いて、ＤＭＡコマンドがステータス返信コマンドである場合におけるソフトウェアセルのデータ領域の構造について説明する。
【０１０４】
「情報処理装置ＩＤ」は、自身の装置情報を応答する情報処理装置を識別するための識別子であり、電源投入時にメインプロセッサ１０１によって、電源投入時の日付、時刻、情報処理装置のネットワークアドレス、サブプロセッサの数などに基づいて生成される。「情報処理装置種別ＩＤ」には、情報処理装置の特徴を表す値が含まれる。この情報処理装置の特徴としては、例えば、ハードディスクレコーダー、ＰＤＡ、テレビなどといった商品を表す場合もあれば、画像処理、映像記録再生などといった機能を表す場合もある。
【０１０５】
「ＭＳステータス」は、情報処理装置が、マスタあるいはスレーブのどちらで動作しているかを表し、“０”のときにはマスタとして動作し、“１”のときにはスレーブとして動作していることを表す。
【０１０６】
「メインプロセッサ動作周波数」はメインプロセッサ１０１の動作周波数を表す。「メインプロセッサ使用率」はメインプロセッサ１０１で現在動作しているすべてのプログラムが、メインプロセッサ１０１を使用している割合を表す。「サブプロセッサ数」は、情報処理装置が有するサブプロセッサの数を表す。「サブプロセッサＩＤ」は、情報処理装置におけるサブプロセッサを識別するための識別子である。
【０１０７】
「サブプロセッサステータス」はサブプロセッサの状態を表すものであり、unused、reserved、busyなどの状態がある。unusedは、当該サブプロセッサが未使用の場合であり。reservedは、現在は未使用であるが、予約されている場合、busyは使用中であることを示す。
【０１０８】
「サブプロセッサ使用率」は、当該サブプロセッサで動作しているプログラムが、そのサブプロセッサを使用している割合を表す。ステータスがbusyの場合には、サブプロセッサ使用率は現在の使用率を示し、reservedの場合には、後に使用されるときの使用率を示す。そして、サブプロセッサＩＤ、サブプロセッサステータス、サブプロセッサ使用率は、これらを１組とし、サブプロセッサ数だけ存在する。
【０１０９】
「メインメモリ総容量」および「メインメモリ使用量」は、情報処理装置に接続されているメインメモリ１４１の総容量および現在使用中の容量を表す。
【０１１０】
「外部記憶装置数」は、情報処理装置に接続されている外部記憶装置１４２の数を表し、「外部記憶装置ＩＤ」は、情報処理装置に接続されている外部記憶装置１４２を一意的に識別する情報を表す。「外部記憶装置種別ＩＤ」には、対応する外部記憶装置１４２の種類を表す情報が含まれる。この外部記憶装置１４２の種類としては、前述のものが想定される。「外部記憶装置総容量」および「外部記憶装置使用量」は、外部記憶装置ＩＤにより識別される外部記憶装置１４２の総容量および現在使用中の容量を表す。
【０１１１】
外部記憶装置ＩＤ、外部記憶装置種別ＩＤ、外部記憶装置総容量、外部記憶装置使用量は、これらを１組とし、外部記憶装置１４２の数だけ存在する。すなわち、１つの情報処理装置に複数の外部記憶装置が接続されている場合であっても、それぞれの外部記憶装置には異なる外部記憶装置ＩＤが割り当てられ、また、外部記憶装置種別ＩＤ、外部記憶装置総容量、外部記憶装置使用量も個別に管理されることになる。
【０１１２】
〔１１〕  ソフトウェアセルの生成および実行
ここでは、ソフトウェアセルを生成し、実行するまでのプロセスについて説明する。情報処理装置１００〜３００のうちのある情報処理装置のメインプロセッサ１０１はソフトウェアセルを生成し、ネットワーク４００を通じて他の情報処理装置へ送信する。送信元である情報処理装置、送信先である情報処理装置および応答先である情報処理装置は、前述の送信元ＩＤ、送信先ＩＤおよび応答先ＩＤにより識別される。
【０１１３】
ソフトウェアセルを受信した他の情報処理装置のメインプロセッサ１０１は、メインメモリ１４１にそのソフトウェアセルを格納する。メインプロセッサ１０１はソフトウェアセルを評価し、それに含まれるＤＭＡコマンドを処理する。
【０１１４】
具体的には、メインプロセッサ１０１は、まず、ロードコマンドを実行する。すると、ロードコマンドに含まれるメインメモリ１４１のメインメモリアドレスから、同様にロードコマンドに含まれるサブプロセッサＩＤと、ローカルストレージアドレスに対応するサブプロセッサのローカルストレージ１３１の所定領域へ情報がロードされる。ここで言う情報として、受信したソフトウェアセルに含まれるサブプロセッサプログラムあるいはデータがあるが、その他のデータなどであってもよい。
【０１１５】
次に、メインプロセッサ１０１は、キックコマンドを、このキックコマンドに含まれるサブプロセッサＩＤに対応するサブプロセッサ１１１へ、同様にキックコマンドに含まれるプログラムカウンタとともに出力する。サブプロセッサ１１１はキックコマンドおよびプログラムカウンタにしたがってサブプロセッサプログラムを実行する。そして、その実行結果をメインメモリ１４１に格納し、その後、実行完了したことをメインプロセッサ１０１へ通知する。
【０１１６】
また、メインメモリ１４１において実行されるメインメモリ用プログラムを、ソフトウェアセルを用いて他の情報処理装置へ送信することも考えられる。その場合には、サブプロセッサ１１１プログラムの代わりにメインメモリ１４１用プログラムを含むロードコマンドを送信することになる。
【０１１７】
他の情報処理装置のメインメモリ１４１へ送信したメインメモリ用プログラムを実行するときには、例えば、メインプロセッサＩＤ、メインメモリアドレス、メインメモリ用プログラムを識別するための識別子、プログラムカウンタを含み、ＤＭＡコマンドがキックコマンドであるソフトウェアセルを同様に他の情報処理装置へ送信する。
【０１１８】
このようにしてソフトウェアセルを使用することにより、ソフトウェアセルの送信元である情報処理装置は、送信先である他の情報処理装置をユーザが操作する必要なく、サブプロセッサプログラムあるいはメインメモリ用プログラムを他の情報処理装置へ送信し、そのサブプロセッサプログラムを他の情報処理装置のサブプロセッサへロードさせ、そのサブプロセッサプログラムあるいはメインメモリ用プログラムを、他の情報処理装置により実行させることができる。
【０１１９】
〔１２〕  処理例
ここでは、ネットワーク４００に接続されている複数の情報処理装置、例えば図１７に示すように、３台の情報処理装置１００〜３００が仮想的な１台の情報処理装置として動作するための前提処理として、情報処理装置の電源投入後の処理を説明する。
【０１２０】
図１８は、情報処理装置１００〜３００のうちの任意の情報処理装置、例えば情報処理装置１００のメインメモリ１４１が記憶するソフトウェアの構成を示すものである。各プログラムは機能あるいは特徴によってカテゴライズされている。また、これらのプログラムは情報処理装置１００の電源投入前には、情報処理装置１００に接続されている外部記憶装置１４２に格納されている。
【０１２１】
電源を投入すると、メインプロセッサ１０１は、デバイスドライバのカテゴリに属する各プログラムおよび制御プログラムのカテゴリに属する各プログラムをメインメモリ１４１にロードする。各プログラムをメインメモリ１４１にロードする手順は、以下のとおりである。
【０１２２】
まず、メインプロセッサ１０１は、ディスクコントローラ１２２に対して読み出し命令を実行することにより外部記憶装置１４２からプログラムを読み出す。そして、ＤＭＡコントローラ１２１への書き込み命令を実行することにより、その読み出したプログラムをメインメモリ１４１にロードする。なお、機能プログラムのカテゴリに属する各プログラムについては、必要なときに必要なものだけをロードしてもよく、他のカテゴリに属する各プログラムと同様に、電源投入後にロードしてもよい。
【０１２３】
機能プログラムには、機能プログラムごとに一意な識別子が機能プログラムＩＤとして割り当てられている。機能プログラムＩＤは、日付や時刻、情報処理装置ＩＤなどから機能プログラムの作成の段階で決定される。
【０１２４】
メインプロセッサ１０１は、自身が動作する情報処理装置に関する装置情報を格納するための領域をメインメモリ１４１に確保し、その装置情報を自装置の装置情報テーブルとして記録する。ここでの装置情報とは、図１６に示される情報処理装置ＩＤ以下の情報である。
【０１２５】
そして、メインプロセッサ１０１は、メインメモリ１４１にロードされたマスタ／スレーブマネージャを実行する。マスタ／スレーブマネージャは処理が終了すると、終了通知をメインプロセッサ１０１へ送る。メインプロセッサ１０１はマスタ／スレーブマネージャから終了通知を受け取ると、次に、能力交換プログラムを実行する。マスタ／スレーブマネージャおよび能力交換プログラムは、情報処理装置１００の電源が切断されるまで動作する常駐プログラムである。
【０１２６】
マスタ／スレーブマネージャは、自身が動作する情報処理装置１００がネットワーク４００に接続されていることを検知すると、同一ネットワークに接続されている他の情報処理装置２００、３００の存在を確認する。マスタ／スレーブマネージャは、もしもネットワーク４００に他の情報処理装置が存在しないことを確認したときには、前述の自装置の装置情報テーブルにおけるＭＳステータスを“０”に設定する。ネットワークに他の情報処理装置が存在することを確認したときには、ＭＳステータスを“０”以外、例えば“１”に設定する。
【０１２７】
また、マスタ／スレーブマネージャは、常にネットワーク４００の状況を確認し、ネットワーク４００に新たに情報処理装置が接続されたことや、ネットワーク４００に接続されている情報処理装置の電源が切断されたこと、あるいはネットワーク４００から情報処理装置が切り離されたことを監視し、ネットワークの接続状態に変化があると、その情報を能力交換プログラムに通知する。
【０１２８】
能力交換プログラムは、自身が動作する情報処理装置がマスタである場合、ネットワーク４００に接続されている他の情報処理装置に関する装置情報を取得する。装置情報の取得は、前述したように、ＤＭＡコマンドがステータスコマンドであるソフトウェアセルを生成・送信し、その後ＤＭＡコマンドがステータス返信コマンドであり、データとして他の情報処理装置に関する装置情報を含むソフトウェアセルを受信することで可能である。
【０１２９】
能力交換プログラムは、前述の自装置の装置情報テーブルと同様に、取得した他のすべての情報処理装置に関する装置情報を格納するための領域をメインメモリ１４１に確保し、当該情報を他装置の装置情報テーブルとして記録する。すなわち、マスタのメインメモリ１４１には、ネットワーク４００に接続されている自身を含むすべての情報処理装置の装置情報テーブルが記録される。
【０１３０】
一方、能力交換プログラムが動作する情報処理装置がスレーブである場合、ネットワーク４００に接続されているマスタの情報処理装置および自身以外のすべてのスレーブの情報処理装置に関する装置情報を取得する。そして装置情報に含まれる情報処理装置ＩＤおよびＭＳステータスをメインメモリ１４１に記録する。すなわち、スレーブには、自装置に関するすべての装置情報が装置情報テーブルとして記録されるとともに、ネットワーク４００に接続された自身以外のすべての情報処理装置について、その情報処理装置ＩＤおよびＭＳステータスが装置情報テーブルとして記録されることになる。
【０１３１】
また、能力交換プログラムは、ネットワーク４００に新たに情報処理装置が接続されたことを示すネットワーク状態の変化通知をマスタ／スレーブマネージャから受信すると、その情報処理装置に関する装置情報を取得する。同様にネットワーク４００から情報処理装置が切り離された、あるいは電源が切断されたというネットワーク状態の変化通知を受信すると、当該装置の装置情報テーブルをメインメモリ１４１から削除する。
【０１３２】
〔１３〕  マスタおよびスレーブの制御フロー
ネットワーク４００に接続されている複数の情報処理装置を仮想的な１台の情報処理装置として動作させるために、マスタの情報処理装置（以下「マスタ」と呼ぶ）が、ユーザの操作およびスレーブとなる情報処理装置（以下「スレーブ」と呼ぶ）の動作状況を把握する必要がある。
【０１３３】
図１９は、ネットワーク４００に接続されている３台の情報処理装置１００〜３００が、仮想的な１台の情報処理装置として動作する様子を示すものである。この例においては、情報処理装置１００がマスタとして動作し、情報処理装置２００および情報処理装置３００がスレーブとして動作し、ユーザが情報処理装置２００を操作すると、この操作に応じた処理を情報処理装置３００が実行する場合である。また、図２０は、その場合のフローチャートを示す。
【０１３４】
ユーザが情報処理装置２００を操作すると、その操作された情報処理装置がマスタあるいはスレーブに関わらず、その操作情報は常にマスタに送信される。マスタにおけるメインプロセッサ１０１は、当該操作情報に従い、実行する機能プログラムを選択する。このとき、必要ならば、前述の方法にしたがい外部記憶装置１４２からメインメモリ１４１へ機能プログラムをロードする。実行時に機能プログラムは、自身が実行されるときに必要なメインプロセッサ１０１、サブプロセッサ１１１、メインメモリ１４１、外部記憶装置１４２に関する情報をメインプロセッサ１０１に通知する。ここでの情報とは、図１６に示される情報処理装置ＩＤ以下の情報である。
【０１３５】
メインプロセッサ１０１は、メインメモリ１４１に記録されている前述の自装置あるいは他装置の装置情報テーブルに基づき、当該機能プログラムを実行可能なスレーブを選択する。マスタは、選択されたスレーブへ機能プログラムの実行を要求する。このとき、マスタは、前述の機能プログラムの実行に必要な情報等に基づき、自身のメインメモリ１４１に記録された選択されたスレーブに関する装置情報テーブルを更新する。
【０１３６】
機能プログラムの実行を要求されたスレーブのメインプロセッサ１０１は、機能プログラムを実行する。その場合にも、必要ならばスレーブのメインプロセッサ１０１は、前述の方法にしたがい外部記憶装置１４２からメインメモリ１４１へ機能プログラムをロードする。
【０１３７】
ここで、機能プログラムの実行を要求されたスレーブと接続された外部記憶装置１４２に必要な機能プログラムが記録されていない場合には、他の情報処理装置１００が前述のメインメモリ用プログラムとして当該機能プログラムを機能プログラムの実行を要求されたスレーブへ送信してもよい。さらにメインメモリ用プログラムと同様に、サブプロセッサプログラムも必要ならば、ソフトウェアセルを用いることにより他の情報処理装置１００へ送信して、この情報処理装置１００のサブプロセッサ１１１へロードさせ、サブプロセッサプログラムを他の情報処理装置１００により実行させることができる。
【０１３８】
そして、機能プログラムの処理終了後、終了通知をマスタに送信する。マスタは終了通知を受信することにより、機能プログラムを実行したスレーブに関する装置情報テーブルを更新する。
【０１３９】
また、マスタのメインプロセッサ１０１は、自装置あるいは他装置の装置情報テーブルに基づき、当該機能プログラムを実行可能な情報処理装置１００として自身を選択する場合もあり得る。その場合には、マスタが機能プログラムを実行する。その際にはスレーブのメインメモリ１４１に記録されたマスタに関する装置情報テーブルが、マスタの動作状況に応じて更新されることになる。
【０１４０】
このようにして、ユーザは、複数の情報処理装置のうちの１台の情報処理装置だけを操作することにより、他の情報処理装置を操作しなくても、複数の情報処理装置を仮想的な１台の情報処理装置として動作させることができる。
【０１４１】
〔１４〕  まとめ
上述のシステムによれば、インターフェイスを用意したので、ネットワーク上に存在する仮想コミュニティを、同様にネットワーク上に構築された他の仮想コミュニティに、自由に、かつ、動的に連結することができる。また、ユーザは参加している仮想コミュニティが動的に変化しても自由に仮想世界を移動できる。
【０１４２】
さらに、ユーザが複数の仮想世界を移動できるので、ユーザ同士が協力して仮想コミュニティを創造することができ、新しいコミュニケーション手段とすることができる。また、点在するネットワーク上のビジネスを有機的に結合して新しいネット取り引きの場を提供できる。さらに、１台のサーバーに集中していた仮想コミュニティの処理が、複数のサーバー間の結合と協力によって分散され、簡単に負荷を低減できる。
【０１４３】
また、複数のサーバー構成により仮想コミュニティの分散処理を行っているシステムにおいても、運用を停止せずに、かつ、可用性を損なうことなく構成の変更やメンテナンスを行うことができる。さらに、複数のサーバー構成により仮想コミュニティの分散処理を行っているシステムにおいて、アプリケーション自体に上述の機構を組み込めば、特別なミドルウェアなどが不要になる。
【０１４４】
なお、この発明は、サーバーと複数のクライアントとがネットワーク接続されて１つの仮想コミュニティを形成するようなアプリケーションで、同様の仮想コミュニティがネットワーク上に存在する場合に適用することができる。
【０１４５】
また、この発明は、各種のオンラインゲームの形態をとるもの、ＶＲＭＬやＣＧにより構築されたバーチャルモールなどの仮想世界など、さまざまなアプリケーションに適用できる。さらに、ある世界を構築する情報と、その中で自律的に行動するユーザ（または人工知能）を表現する情報とが存在してシステム世界を構築しているような、仮想コミュニティという範疇にとらわれないアプリケーション全般に適用することができる。
【０１４６】
さらに、この発明は、仮想コミュニティの連結と、その中のユーザの自由な移動とを実現するものであるが、アプリケーションの応用として、例えば、ＨＴＭＬ、ＣＧＩ、ＡＳＰ、Ｊａｖａ（登録商標）アプリケーションサーバーなどで構築されたオンラインショッピングサイトを連結してショッピングモールを構築し、ユーザが各ショップで買い物をした後、一括して精算を行うシステムを構築することもできる。
【０１４７】
また、システム構成として図１に示すようなクライアントサーバー構成の仮想コミュニティの連結だけではなく、クライアント１つ１つがサーバーとしての機能を持ち、ピア・ツー・ピア接続によりメッシュ形ネットワークを形成し、結合された仮想コミュニティを形成することもできる。
【０１４８】
〔略語の一覧〕
３ＤＣＧ    ：three Dimension CG
ＡＳＰ      ：Active Server Pages
ＣＤ        ：Compact Disc
ＣＤ±ＲＷ  ：CD +ReWritable, CD ReWritable
ＣＧ        ：Computer Graphics
ＣＧＩ      ：Common Gateway Interface
ＣＯＲＢＡ  ：Common Object Request Broker Architecture
ＤＣＯＭ    ：Distributed Component Object
ＤＭＡ      ：Direct Memory Access
ＤＲＡＭ    ：Dynamic RAM
ＤＶＤ±ＲＷ：DVD +ReWritable, DVD ReWritable
ＨＴＭＬ    ：Hyper Text Markup Language
ＩＤ        ：IDentification
ＭＭＯＧ    ：Massive Multiplayer Online Game
ＭＭＯＲＰＧ：Massive Multiplayer Online Role Playing Game
ＭＯ        ：Magneto-Optical disk
ＲＡＭ      ：Random Access Memory
ＲＭＩ      ：Remote Method Invocation
ＲＯＭ      ：Read Only Memory
ＲＰＣ      ：Remote Procedure Call
ＳＲＡＭ    ：Static RAM
ＶＲＭＬ    ：Virtual Reality Modeling Language
ＷＷＷ      ：World Wide Web
【図面の簡単な説明】
【０１４９】
【図１】この発明の一形態を示す系統図である。
【図２】この発明における仮想空間の連結の一例を示す図である。
【図３】仮想空間の連結を説明するための図である。
【図４】仮想空間の連結を説明するための図である。
【図５】連結のシーケンスを説明するための図である。
【図６】移動のシーケンスを説明するための図である。
【図７】負荷分散を説明するための図である。
【図８】負荷分散のシーケンスを説明するための図である。
【図９】サーバー間でアクセスされる情報を示す図である。
【図１０】サーバー間でアクセスされる情報を示す図である。
【図１１】図１０の続きを示す図である。
【図１２】コンピュータシステムの一例を示す系統図である。
【図１３】図１２のシステムを説明するための図である。
【図１４】図１２のシステムを説明するための図である。
【図１５】図１２のシステムを説明するための図である。
【図１６】図１２のシステムを説明するための図である。
【図１７】仮想情報処理装置を説明するための図である。
【図１８】情報処理装置のソフトウェア構成の一例を示す図である。
【図１９】図１７の装置を説明するための図である。
【図２０】図１７の装置を説明するための図である。
【符号の説明】
【０１５０】
１０および２０…仮想コミュニティ、１１および２１…サーバー、１２〜１４および２２…クライアント、１９および２９…データベース、３０…管理サーバー、４０…ネットワーク
【図１】
2005234633.tif 000003
【図２】
2005234633.tif 000004
【図３】
2005234633.tif 000005
【図４】
2005234633.tif 000006
【図５】
2005234633.tif 000007
【図６】
2005234633.tif 000008
【図７】
2005234633.tif 000009
【図８】
2005234633.tif 000010
【図９】
2005234633.tif 000011
【図１０】
2005234633.tif 000012
【図１１】
2005234633.tif 000013
【図１２】
2005234633.tif 000014
【図１３】
2005234633.tif 000015
【図１４】
2005234633.tif 000016
【図１５】
2005234633.tif 000017
【図１６】
2005234633.tif 000018
【図１７】
2005234633.tif 000019
【図１８】
2005234633.tif 000020
【図１９】
2005234633.tif 000021
【図２０】
2005234633.tif 000022