(57)【特許請求の範囲】
【請求項１】
複数のデバイスとサーバとを含む分散データ処理システムにおいて、前記サーバがデータ・ストリームをデバイスに共有アクセスさせる方法であって、前記サーバは、前記データ・ストリームに対して共有アクセスを提供するデータ・ストリーム・スプリッタと、前記データ・ストリーム・スプリッタに結合したデータ・ストリーム・スプリッタ・マネージャとを備えており、前記データ・ストリーム・スプリッタ・マネージャにより実行され、
デバイスから前記データ・ストリームにアクセスする要求を受け取るステップと、
前記デバイスのためにデータ・ストリーム・スプリッタ・テーブルの項目に、前記デバイスのデバイス識別子と、前記データ・ストリーム・スプリッタのデータ・ストリーム・スプリッタ識別子とを含むデバイス情報を追加するステップと、
前記データ・ストリーム・スプリッタに関連した項目を識別するために、該データ・ストリーム・スプリッタのデータ・ストリーム・スプリッタ識別子に基づいて前記データ・ストリーム・スプリッタ・テーブルの項目を該データ・ストリーム・スプリッタに検索させ、検索により識別された前記デバイス及び他のデバイスに前記データ・ストリーム・スプリッタを介して前記データ・ストリームを循環的にアクセスさせるステップとを含む方法。
【請求項２】
前記デバイスに対する擬似端末を生成するステップをさらに含み、前記追加するステップでは、前記デバイス識別子と前記データ・ストリーム・スプリッタ識別子と前記擬似端末の擬似端末識別子を含む前記デバイス情報を追加し、前記データ・ストリーム・スプリッタによって受け取られた前記データ・ストリームからの出力は、前記擬似端末へ送られ、前記デバイスから前記擬似端末によって受け取られたデータは前記データ・ストリーム・スプリッタへ送られることを特徴とする請求項１に記載の方法。
【請求項３】
前記データ・ストリームに対するアクセスがデータ・ストリーム・スプリッタによって処理されているかどうかを判断するステップをさらに含み、
前記デバイスのためにデータ・ストリーム・スプリッタ・テーブルの項目に前記デバイス情報を追加するステップが前記データ・ストリーム・スプリッタに関連してデータ・ストリーム・スプリッタ・テーブルの項目に前記デバイス情報を加えるステップを含むことを特徴とする請求項１に記載の方法。
【請求項４】
前記デバイスのために前記データ・ストリーム・スプリッタに対する前記アクセスを処理するために、前記データ・ストリーム・スプリッタ・マネージャのコピーを生成させるステップを含み、前記データ・ストリーム・スプリッタ・マネージャは、前記デバイスからの前記要求を受け取ることを特徴とする請求項１に記載の方法。
【請求項５】
前記データ・ストリーム・スプリッタ・マネージャは、グラフィカル・ユーザ・インタフェースを有することを特徴とする請求項１に記載の方法。
【請求項６】
バッファ内に前記データ・ストリームからのデータを格納するステップをさらに含み、前記デバイスが最初に前記データ・ストリームにアクセスする場合、前記バッファのコンテンツは前記デバイスにリアルタイムに提供されることを特徴とする請求項１に記載の方法。
【請求項７】
各項目で識別された前記クライアント・デバイスからデータを受け取るステップと、
前記クライアント・デバイスから前記データ・ストリーム・スプリッタを介して前記データを前記双方向データ・ストリームに送るステップとをさらに含む、請求項１に記載の方法。
【請求項８】
前記データ・ストリーム・スプリッタは、前記データ・ストリームに対して前記デバイスによる入力処理が行われることなく入出力アクセスを行うことを特徴とする請求項７に記載の方法。
【請求項９】
データ・ストリームに対してデバイスが共有アクセスするためのコンピュータ可読なプログラムが記録された記録媒体であって、前記プログラムは、
デバイスからデータ・ストリームに対するアクセス要求を受け取るステップと、
前記デバイスのためにデータ・ストリーム・スプリッタ・テーブルの項目に、前記デバイスのデバイス識別子と、前記データ・ストリーム・スプリッタのデータ・ストリーム・スプリッタ識別子とを含むデバイス情報を追加するステップと、
前記データ・ストリーム・スプリッタに関連した項目を識別するために、該データ・ストリーム・スプリッタのデータ・ストリーム・スプリッタ識別子に基づいて前記データ・ストリーム・スプリッタ・テーブルの項目を該データ・ストリーム・スプリッタに検索させ、検索により識別された前記デバイス及び他のデバイスに前記データ・ストリーム・スプリッタを介して前記データ・ストリームを循環的にアクセスさせるステップと  を前記コンピュータに実行させることを特徴とする記録媒体。
【請求項１０】
前記デバイスの擬似端末を生成するステップを、さらに実行させ、前記追加するステップでは、前記デバイス識別子と前記データ・ストリーム・スプリッタ識別子と前記擬似端末の擬似端末識別子を含む前記デバイス情報を追加し、前記データ・ストリーム・スプリッタによって受け取られたデータは、前記擬似端末へ送られ、前記デバイスから前記擬似端末によって受け取られたデータは前記データ・ストリーム・スプリッタへ送られることを特徴とする請求項９に記載の記録媒体。
【請求項１１】
前記データ・ストリームに対するアクセスがデータ・ストリーム・スプリッタによって処理されているかどうかを判断するステップをさらに実行させ、
前記デバイスのためにデータ・ストリーム・スプリッタ・テーブルの項目に前記デバイス情報を追加するステップが前記データ・ストリーム・スプリッタに関連してデータ・ストリーム・スプリッタ・テーブルの項目に前記デバイス情報を加えるステップを含むことを特徴とする請求項９に記載の記録媒体。
【請求項１２】
前記デバイスのために前記データ・ストリーム・スプリッタに対する前記アクセスを処理するために、前記データ・ストリーム・スプリッタ・マネージャのコピーを生成させるステップを実行させ、前記データ・ストリーム・スプリッタ・マネージャは、前記デバイスからの前記要求を受け取ることを特徴とする請求項１１に記載の記録媒体。
【請求項１３】
バッファ内に前記データ・ストリームからのデータを格納するステップと、
前記デバイスが最初に前記データ・ストリームにアクセスする場合に、前記バッファのコンテンツを前記デバイスにリアルタイムに提供するステップと、
をさらに実行させることを特徴とする請求項９に記載の記録媒体。
【請求項１４】
データ・ストリームに対してデバイスが共有アクセスするための装置であって、
データ・ストリーム・スプリッタと、
前記データ・ストリーム・スプリッタに結合したデータ・ストリーム・スプリッタ・マネージャとを備え、
前記データ・ストリーム・スプリッタ・マネージャは、前記デバイスから前記データ・ストリームにアクセスするための要求を受け取り、前記デバイスのためにデータ・ストリーム・スプリッタ・テーブルの項目に、前記デバイスのデバイス識別子と、前記データ・ストリーム・スプリッタのデータ・ストリーム・スプリッタ識別子とを含むデバイス情報を追加し、前記データ・ストリーム・スプリッタに関連した項目を識別するために、該データ・ストリーム・スプリッタのデータ・ストリーム・スプリッタ識別子に基づいて前記データ・ストリーム・スプリッタ・テーブルの項目を該データ・ストリーム・スプリッタに検索させ、検索により識別された前記デバイス及び他のデバイスに前記データ・ストリーム・スプリッタを介して前記データ・ストリームを循環的にアクセスさせることを特徴とする装置。
【請求項１５】
前記データ・ストリーム・スプリッタ・マネージャは、前記デバイスのための擬似端末を生成し、前記デバイス識別子と前記データ・ストリーム・スプリッタ識別子と前記擬似端末の擬似端末識別子を含む前記デバイス情報を追加し、前記データ・ストリーム・スプリッタによって受け取られたデータは前記擬似端末へ送られ、前記デバイスから前記擬似端末によって受け取られたデータは前記データ・ストリーム・スプリッタへ送られることを特徴とする請求項１４に記載の装置。
【請求項１６】
前記データ・ストリーム・スプリッタ・マネージャは、前記データ・ストリームに対するアクセスがデータ・ストリーム・スプリッタによって処理されているかどうかを判断し、前記デバイスのためにデータ・ストリーム・スプリッタ・テーブルの項目に前記デバイス情報を追加することは、前記データ・ストリーム・スプリッタに関連したデータ・ストリーム・スプリッタ・テーブルの項目に前記デバイス情報を追加することが含まれることを特徴とする請求項１４に記載の装置。
【請求項１７】
前記データ・ストリーム・スプリッタ・マネージャは、前記デバイスからの前記要求を受け取り、前記デバイスのために前記データ・ストリームに対する前記アクセスを処理するために、前記データ・ストリーム・スプリッタ・マネージャのコピーを生成することを特徴とする請求項１４に記載の装置。
【請求項１８】
前記データ・ストリーム・スプリッタ・マネージャは、グラフィカル・ユーザ・インタフェースを有することを特徴とする請求項１４に記載の装置。
【請求項１９】
前記データ・ストリーム・スプリッタは、前記データ・ストリームに対して前記デバイスによる入力処理が行われることなく入出力アクセスを行うことを特徴とする請求項１４に記載の装置。
【請求項２０】
バッファをさらに有し、前記バッファは前記データ・ストリームからのデータを格納し、前記デバイスが最初に前記データ・ストリームにアクセスする時、前記バッファのコンテンツは前記デバイスにリアルタイムに提供されることを特徴とする請求項１４に記載の装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、同時に複数のユーザによるデータ・ストリームへのアクセスを可能とする装置及び方法に関する。特に、本発明は同一データ・ストリームに対する複数のユーザによるアクセスを多重化するためのデータ・ストリーム・スプリッタ管理のための装置及び方法に関する。
【０００２】
【従来の技術】
現在、分散データ処理システムにおいて、ユーザがシステム・リソースを利用するセッションに関係している場合、単一のユーザがセッションの間にシステム・リソースにアクセスするようにセッションの設定が一般に行われる。したがって、セッションが完了するまで単一のユーザのみがシステム・リソースを利用することができ、その後にシステム・リソースが解放されて他のユーザが使用可能となる。
【０００３】
最近、システムは多数のユーザが単一セッションにおけるシステム・リソースの状態をモニタすることを可能とするように工夫されている。一般に、そのようなシステムでは、１人のユーザがシステム・リソースに対するフル・アクセスを行うことができ、該システム・リソースの使用及び／又は変更を行う能力が与えられる。セッションに関与する他のユーザは、オブザーバとしてのみ振る舞い、システム・リソースに対するフル・アクセスはできない。
【０００４】
上記システムのいずれかで、もし最初のユーザが第２のユーザとシステム／リソースに対する変更を共有することを望み、第２のユーザが第１のユーザと変更の共有を望む場合に、問題が生ずる。各ユーザはシステム・リソースに対してアクセスし、変更を行い、システム・リソースに対するアクセスを止め、さらに他のユーザがアクセスして変更を行うことを許可しなければならない。最初のユーザは、さらに第２のユーザの変更を検査するためにシステム・リソースを再度アクセスしなければならない。両方のユーザがほぼ同時にシステム・リソースに対してフル・アクセスすることができるメカニズムがない。
【０００５】
【発明が解決しようとする課題】
したがって、複数のユーザに対してほぼ同時に同一セッションの同一システム・リソースに対してフル・アクセスし、さらに該セッションにおいてシステム・リソースに対する各ユーザのアクセスの結果を他のユーザと共有可能とする装置及び方法を有することが有益であろう。
【０００６】
【課題を解決するための手段】
本発明は、ほぼ同時に複数のユーザによるデータ・ストリームに対するフル・アクセスを可能とする装置及び方法を提供する。方法及び装置は、クライアント・デバイスからの新たな接続をリッスンするデータ・ストリーム・スプリッタ・マネージャを有する。クライアント・デバイスからの新たな接続が識別されると、データ・ストリーム・スプリッタ・マネージャは該クライアント・デバイスに対する擬似端末を生成し、クライアント・デバイス及び擬似端末情報をデータ・ストリーム・スプリッタ・テーブルに加える。また、データ・ストリーム・スプリッタがデータ・ストリーム・スプリッタ・マネージャと要求されたリソースとの間でのデータ転送を処理するために既に確立されていなければ、新たなデータ・ストリーム・スプリッタがデータ転送を処理するために生成されてもよい。
【０００７】
その後、システム・リソースに関連したデータ・ストリーム・スプリッタは、該システム・リソースに対して共有アクセスするクライアント・デバイスを求めてデータ・ストリーム・スプリッタ・テーブルを検索する。データ・ストリーム・スプリッタは、システム・リソースに関連したデータ・ストリームからシステム・リソースを現在共有しているクライアント・デバイスに関連した擬似端末に対して連続的にデータを送る。同様に、データ・ストリーム・スプリッタは、擬似端末を介してクライアント・デバイスからの入力を受けて該入力をシステム・リソースに関連したデータ・ストリームへ送る。このようにして、各クライアント・デバイスは、システム・リソースに対する個別の接続を有するが、該システム・リソースからの出力は各々のクライアント・デバイスによって共有される。さらに、各クライアント・デバイスに対して、リアルタイムでシステム・リソースからの出力が与えられる。
【０００８】
本発明の他の特徴及び利点は、以下に説明されるが、図面及び以下の好ましい実施形態例の詳細な説明を参照することで、当業者にとって明らかなものとなろう。
【０００９】
本発明を特徴付けるものと考えられる新規な特徴は特許請求の範囲で明らかにされる。しかし、発明それ自体は、その使用の好ましいモード、さらなる目的及び利点と同様に、図面を参照しながら例証となる実施形態の詳細な以下の詳細な説明を参考にすることで最もよく理解されよう。
【００１０】
【発明の実施の形態】
以下、図面を参照しながら説明する。図１は、本発明をインプリメントすることができる分散データ処理システムを説明するための図である。分散処理システム１００は、本発明をインプリメントすることができる複数のコンピュータからなるネットワークである。分散処理システム１００はネットワーク１０２を有する。このネットワーク１０２は、分散処理システム１００内で接続した種々のデバイスとコンピュータとの間の通信リンクを提供するために用いられる媒体である。ネットワーク１０２は、電線又は光ファイバケーブル等の永久的な接続、又は電話回線接続を介してなされる一時的な接続を有するものであってもよい。
【００１１】
図に示す例では、サーバ１０４は記憶装置１０６とともにネットワーク１０２に接続されている。また、クライアント１０８、１１０、及び１１２もまた、ネットワーク１０２に接続されている。これらのクライアント１０８、１１０、及び１１２は、例えばパーソナル・コンピュータ又はネットワーク・コンピュータである。この出願の目的のために、ネットワーク・コンピュータは、ネットワークに接続した任意のコンピュータであり、該コンピュータはそのネットワークに接続した他のコンピュータからプログラム又は他のアプリケーションを受け取る。図示した例では、サーバ１０４はブート・ファイル、オペレーティング・システム画像及びアプリケーションをクライアント１０８〜１１２に提供する。クライアント１０８、１１０、及び１１２は、サーバ１０４に対するクライアントである。分散データ処理システム１００は、図には示さない追加のサーバ、クライアント、及び他のデバイスを有するものであってもよい。
【００１２】
図示した例では、分散データ処理システム１００は、ネットワークが互いに通信を行うためにプロトコルのＴＣＰ／ＩＰスイートを使用するネットワーク及びゲートウェイの世界的規模の集まりを表すネットワーク１０２を有するインターネットである。インターネットの中核は、データ及びメッセージを配信する何千という商業、政府、教育、及び他のコンピュータ・システムから構成される大ノード又はホスト・コンピュータ間の高速データ通信回線のバックボーンである。もちろん、分散データ処理システム１００もまた、いくつかの異なるタイプのネットワーク、例えばイントラネット又はローカル・エリア・ネットワークとしてインプリメントしてもよい。図１は本発明のプロセスの一例として意図されたものであり、本発明のプロセスのアーキテクチャ的な限界を意図したものではない。
【００１３】
図２は、本発明にもとづいて、サーバ、例えば図１のサーバ１０４としてインプリメント可能なデータ処理システムの構成を示すブロック図である。データ処理システム２００は、システム・バス２０６に接続された複数のプロセッサ２０２及び２０４を有する対称型（ＳＭＰ）マルチプロセッシングであってもよい。あるいは、シングル・プロセッサ・システムを用いてもよい。また、システム・バス２０６に接続されたものは、メモリ・コントローラ／キャッシュ２０８であり、それによってローカル・メモリ２０９に対するインタフェースが提供される。Ｉ／Ｏバス・ブリッジ２１０は、システム・バス２０６に接続されており、Ｉ／Ｏバス２１２に対するインタフェースを提供する。メモリ・コントローラ／キャッシュ２０８及びＩ／Ｏバス・ブリッジ２１０は、図に示すように統合化されたものであってもよい。Ｉ／Ｏバス２１２に接続された周辺機器相互接続（ＰＣＩ）バス・ブリッジ２１４は、ＰＣＩローカル・バス２１６に対するインタフェースを提供する。いくつかのモデム２１８〜２２０をＰＣＩバス２１６に接続することも可能である。典型的なＰＣＩバスのインプリメンテーションは、３つのＰＣＩ拡張スロット又はアド・イン・コネクタをサポートするであろう。図１のネットワーク・コンピュータ１０８〜１１２に対する通信リンクは、アド・イン・ボードを介してＰＣＩローカル・バス２１６に接続されたモデム２１８及びネットワーク・アダプタ２２０を介して提供されるものであってもよい。追加のＰＣＩバス・ブリッジ２２２及び２２４は、追加のＰＣＩバス２２６及び２２８に対するインタフェースを提供するもので、それによって追加のモデム又はネットワーク・アダプタをサポートすることができる。このようにして、サーバ２００は多数のネットワーク・コンピュータに対する接続を可能とする。メモリ・マップ・グラフィック・アダプタ２３０及びハード・ディスク２３２もまた、図に示すように直接又は間接的にＩ／Ｏバス２１２に接続させてもよい。
【００１４】
当業者は、図２に示すハードウェアが多種多様なものであってもよいことを理解するであろう。例えば、他の周辺装置、例えば光ディスク・ドライブ等もまた図に示したハードウェアに加えて、あるいはそれと置き換えて使用してもよい。図に示した例は本発明のアーキテクチャ的限界を示すことを意図したものではない。図２に示すデータ処理システムは、例えば、International Business Machines Corporation（所在地：Armonk, New York, U.S.A、以下の説明ではＩＢＭと略す）の製品であり、かつＡＩＸ（Advanced Interactive Executive）オペレーティング・システムで動くIBM RISC/System 6000であってもよい。
【００１５】
ここで図３を参照する。この図は、本発明がインプリメント可能であるデータ処理システムのブロック図である。データ処理システム３００は、クライアント・コンピュータの一例である。データ処理システム３００は、周辺機器相互接続（ＰＣＩバス２２６）ローカル・バス・アーキテクチャを用いる。図に示した例はＰＣＩバスを用いるが、他のバース・アーキテクチャ、例えばマイクロ・チャンネル・アーキテクチャ（ＭＣＡ）及びインダストリ・スタンダード・アーキテクチャ（ＩＳＡ）を使用することも可能である。
【００１６】
プロセッサ３０２及びメイン・メモリ３０４は、ＰＣＩブリッジ３０８を介してＰＣＩローカル・バス３０６に接続されている。ＰＣＩブリッジ３０８は、プロセッサ３０２に対して一体化したメモリ・コントローラ及びキャッシュも有する。ＰＣＩローカル・バス３０６に対する追加の接続は、直接的な相互接続又はアド・イン・ボードを介して行うことができる。図に示した例では、ローカル・エリア・ネットワーク（ＬＡＮ）アダプタ３１０、ＳＣＳＩホスト・バス・アダプタ３１２、及び拡張バス・インタフェース３１４は、直接的なコンポーネント接続によってＰＣＩローカル・バス３０６に接続されている。
【００１７】
対照的に、オーディオ・アダプタ３１６、グラフィック・アダプタ３１８、及びオーディオ／ビデオ・アダプタ（Ａ／Ｖ）３１９は拡張スロットに挿入されたアド・イン・ボードによってＰＣＩローカル・バス３０６に接続されている。拡張バス・インタフェース３１４は、キーボード及びマウス・アダプタ３２０、モデム３２２、及び追加のメモリ３２４に対する接続を提供する。
【００１８】
図に示した例では、ＳＣＳＩホスト・バス・アダプタ３１２は、ハード・ディスク・ドライブ３２６、テープ・ドライブ３２８、ＣＤ−ＲＯＭドライブ３３０、及びデジタル・ビデオ・ディスク読み出し専用メモリ（ＤＶＤ−ＲＯＭ）３３２に対する接続を提供する。典型的なＰＣＩローカル・バスのインプリメンテーションは、３乃至４つのＰＣＩ拡張スロット又はアド・イン・コネクタをサポートするであろう。
【００１９】
オペレーティング・システムは、プロセッサ３０２で実行され、図３に示すデータ処理システム３００内の種々のコンポーネントを連係させて働かせ、かつそれらを制御するために使われる。オペレーティング・システムは、市販のオペレーティング・システム、例えばＩＢＭから入手可能なＯＳ／２であってもよい。「ＯＳ／２」は、ＩＢＭの登録商標である。
【００２０】
オブジェクト指向プログラミング・システム、例えばJava(R)は、オペレーティング・システムと共に実行可能であり、データ処理システム３００上で実行されるJaveプログラム又はアプリケーションからオペレーティング・システムに対する呼び出しが提供される。オペレーティング・システム、オブジェクト指向オペレーティング・システム、及びアプリケーション又はプログラムに対する命令は、記憶装置、例えばハード・ディスク・ドライブ上に位置しており、プロセッサ３０２による実行のためにメイン・メモリ３０４にロード可能である。
【００２１】
当業者は、図３のハードウェアがインプリメンテーションに応じて変えてもよいことを理解するであろう。例えば、他の周辺装置、例えば光ディスク・ドライブ等を図３に示したハードウェアに加えて、あるいはその代わりに使用してもよい。図示した例は、本発明に関してアーキテクチャ上の限界を意味するように意図したものではない。例えば、本発明のプロセスは、マルチプロセッサ・データ処理システムに適用することができる。
【００２２】
本発明は、複数のユーザ、例えばクライアント・デバイス１０８、１１０、及び１１２のユーザが同一セッションの間にシステム・リソースに対してフル・アクセスすることができる機構を提供する。本発明を用いることで、第１のクライアント・デバイス上のユーザは、同一セッションの間に第２のクライアント上の他のユーザと同一のデータ・ストリームに対してフル・アクセスできる。さらに、各ユーザは、好きなようにしてデータ・ストリームを増やし、セッションの間にデータ・ストリームにアクセスするユーザの各々と共有したデータ・ストリームに対する追加を有するものであってもよい。したがって、本発明によって、各クライアント・デバイスは、リソースからの出力がセッションに関与しているクライアント・デバイスのすべてによって共有される一方で、他のクライアント・デバイスにはアクセス不可能なシステム・リソースに対してプライベートの通信チャンネルを有するものであってもよい。
【００２３】
上記の機構を提供するために、サーバ、例えばサーバ１０４は、データ・ストリーム・スプリッタ・マネージャと１つ以上のデータ・ストリーム・スプリッタとをインプリメントする。図４は、本発明にもとづくサーバの主要な要素を例証するための模範的なブロック図を示す。図４に示すように、サーバは、入出力（Ｉ／Ｏ）インタフェース４１０、データ・ストリーム・スプリッタ・マネージャ４２０、複数のデータ・ストリーム・スプリッタ４３０〜４５０、データ・ストリーム・スプリッタ・テーブル記憶装置４６０、及びバッファ４７０を含む。図示した構成要素は、信号／データ・バス４８０を介して結合しているが、本発明の精神及び範囲から逸脱することなく、これらの構成要素を結合するための他の機構を用いてもよい。構成要素４１０〜４７０は、本発明の精神及び範囲から逸脱することなく、ハードウェア、ソフトウェア、又はハードウェアとソフトウェアとの組み合わせとしてインプリメントされてもよい。
【００２４】
データ・ストリーム・スプリッタ・マネージャ４３０は、１つ以上のデータ・ストリーム・スプリッタに対するクライアント・デバイスのアクセスを管理する。各データ・ストリーム・スプリッタ４３０〜４５０は、クライアント・デバイスがアクセスするかもしれない特定のデータ・ストリームを処理する。データ・ストリーム・スプリッタを動的に組み立て／分解してもよい。例えば、新たなセッションが既存のデータ・ストリーム・スプリッタによって現在のところ処理されていないシステム・リソースによって起動されているならば、新たなデータ・ストリーム・スプリッタは該システム・リソースを往復するデータ・ストリームの共有を容易にするために組み立てられる。同様に、ひとたびセッションが終了すると、そのセッションのデータ・ストリーム・スプリッタはもはや必要なければ分解される。
【００２５】
本発明の好ましい実施形態は、単一のデータ・ストリームを処理する各データ・ストリーム・スプリッタ４３０〜４５０に関して説明されるが、１つのデータ・ストリーム／スプリッタ４３０〜４５０が複数の異なるデータ・ストリームを処理することが可能であることも本発明の範囲内であることを意図している。そのような実施形態では、各データ・ストリームに対してデータ・ストリーム・スプリッタ４３０〜４５０によって認識可能である識別子を設けてもよく、該識別子は特定のセッションにおいてデータ・ストリームを識別するためにデータ・ストリーム・スプリッタ・マネージャ４２０によって利用することが可能である。
【００２６】
本発明によれば、クライアント・デバイスは、データ・ストリーム・スプリッタ・マネージャ４２０を介してデータ・ストリームのためのセッションを確立する。クライアント・デバイスは、ネットワーク、例えばネットワーク１０２と入出力インタフェース４１０とを介して、データ・ストリーム・スプリッタ・マネージャ４２０に対して要求メッセージを送ることによって、セッションを確立する。要求メッセージは、クライアント・デバイスを特徴付ける情報、例えばネットワーク・アドレス、ユーザ識別、パスワード、ビット・レート等を含む。要求メッセージは、クライアント・デバイスがアクセスを求めるシステム・リソースのインジケータも含む。
【００２７】
データ・ストリーム・スプリッタ・マネージャ４２０は、クライアント・デバイスのための擬似端末を確立し、データ・ストリームを処理する特定のデータ・ストリーム・スプリッタのためにデータ・ストリーム・スプリッタ・テーブル記憶装置４６０のデータ・ストリーム・スプリッタ・テーブルにクライアント・デバイス情報を格納する。データ・ストリーム・スプリッタ・テーブルは、現在アクティブである全てのデータ・ストリーム・スプリッタのための項目を有する単一のテーブルであってもよく、あるいは各々が単一のデータ・ストリーム・スプリッタに対応して構成された複数のテーブルからなるものであってもよい。
【００２８】
擬似端末は、主に使いやすさ、通信特性のセットアップ制御、及び擬似端末ネームに合うことができるツールによる報告のために使われる。擬似端末は、データ・ストリーム・スプリッタ・マネージャ４２０を介してセッションに関与しているクライアント・デバイスとデータ・ストリーム・スプリッタが通信を行う機構を提供する。本発明の好ましい実施形態が擬似端末を利用するものとして説明されているが、擬似端末の使用は本発明の作用にとって必須のものではない。
【００２９】
データ・ストリーム・スプリッタ・テーブルに格納されたクライアント・デバイス情報は、例えば、クライアント・デバイス識別子、ネットワーク・アドレス、擬似端末、識別子、データ・ストリーム・スプリッタ識別子等を含むものであってもよい。データ・ストリーム・スプリッタ・テーブル記憶装置４６０は、データ・ストリーム・スプリッタ・マネージャ４２０と共に記憶装置に対するアクセスを共有するように、データ・ストリーム・スプリッタ４３０〜４５０が共用記憶装置であってもよい。
【００３０】
データ・ストリーム・スプリッタは、データ・ストリーム・スプリッタ・テーブル記憶装置４６０にある対応するデータ・ストリーム・スプリッタ・テーブルの項目を一回りする。データ・ストリーム・スプリッタが項目を一巡するので、データ・ストリーム・スプリッタは、データ・ストリームに対するアクセスを対応する擬似端末に与え、該擬似端末へのデータ・ストリーム出力を開始するだろう。
【００３１】
大きなデータ・ストリーム・スプリッタ・テーブルが使用される場合、データ・ストリーム・スプリッタによって処理されるデータ・ストリームに対する要求アクセスとして識別されたデータ・ストリーム・スプリッタ・テーブルの項目に関連したそれらの擬似端末のみがデータ・ストリームに対するアクセスが行われる。大きなデータ・ストリーム・スプリッタ・テーブルにある他の項目は、もしそれらがその特定のデータ・ストリームに対する添付としてマークされていなければ、データ・ストリームに対するアクセスが行われないであろう。個々のテーブルが各データ・ストリーム・スプリッタに対して使用されている場合、テーブルの項目に関連した擬似端末の全てが上記した方法でデータ・ストリームに対するアクセスが行われるであろう。
【００３２】
データ・ストリームをクライアント・デバイスへ送ることに加えて、データ・ストリーム・スプリッタ・マネージャ４２０はクライアント・デバイスから入力を受け、データ・ストリーム・スプリッタ・テーブル記憶装置４６０のデータ・ストリーム・スプリッタ・テーブルにもとづいて、対応する擬似端末へその入力を適用する。擬似端末に対するクライアント・デバイスの入力の結果は、次にデータ・ストリームに適用され、さらにデータ・ストリーム・スプリッタがデータ・ストリーム・スプリッタ・テーブルの項目を循環する時、セッションに関与しているクライアント・デバイスの各々に対して転送される。このようにして、各クライアント・デバイスは、セッションに関与している他のクライアント・デバイスの各々に送られている変更の結果によってデータ・ストリームを変更するために、フル・アクセスすることができる。
【００３３】
好ましい実施形態では、上記のプロセスはキャラクタ・ベースで１つのキャラクタ上にインプリメントされる。例えば、クライアント・デバイスのユーザがデータ・ストリームに対する入力をタイプすると、タイプされた各キャラクタはそのデータ・ストリームのためのシステム・リソースへ送られる。それに応答して、システム・リソースは出力を生成する。システム・リソースからの出力は、データ・ストリームを介して、連続的かつ循環的な方法でデータ・ストリームに対するアクセスを要求しているクライアント・デバイスの各々に対して、直ちに送られる。
【００３４】
したがって、もし最初のユーザが該ユーザのクライアント・デバイスにコマンドをタイプするならば、各キャラクタはデータ・ストリームを介してシステム・リソースに送られる。システム・リソースは最初のユーザからの特定のキャラクタ入力に関連したグラフィカル・キャラクタの出力を生成する。この出力はデータ・ストリームへのアクセスを要求する他のクライアント・デバイスの各々に送られる。したがって、セッション内のクライアント・デバイスの全ては、最初のユーザが特定のクライアント・デバイスを直接使用するコマンドをあたかもタイピングしたようにコマンドをタイピングする最初のユーザを認識する。このようにして、各ユーザは、他のユーザ及び最初のユーザ自身から受信した入力に基づいたリソース・システムからのリアルタイム出力が与えられる。
【００３５】
クライアント・デバイスは、確立されたセッションにおいて他のクライアント・デバイスによってアクセスされている同一のシステム・リソースに対するアクセスを要求することによって、データ・ストリーム・スプリッタ・マネージャ４２０を介して既存のセッションに加わることができる。クライアント・デバイスが既存のセッションに加わる場合、クライアント・デバイス情報、擬似端末情報、及びデータ・ストリーム・スプリッタ情報は、データ・ストリーム・スプリッタ・テーブル記憶装置４６０のデータ・ストリーム・スプリッタ・マネージャ４２０によって維持されたデータ・ストリーム・スプリッタ・テーブルに加えられる。その後、新たに加えられたクライアント・デバイスに対して、そのセッションのためのデータ・ストリームに対するフル・アクセスが行われる。
【００３６】
また、データ・ストリーム・スプリッタ・マネージャ４２０は、データ・ストリームからのデータ・ストリーム・スプリッタ・マネージャのバッファ４７０を有するものであってもよい。このバッファ４７０は、例えば経過した所定時間のデータ・ストリームから得たデータの所定量を格納するものであってもよい。例えば、バッファ４７０はセッション時間の経過した分のデータ・ストリームから得たデータを格納するものであってもよい。新たなクライアント・デバイスがセッションに参加すると、新たなクライアント・デバイスがセッションに加わることができるコンテキストを提供するために、新たなクライアント・デバイスに対してこのバッファに格納されたデータが与えられる。バッファ４７０が満杯になる時にバッファ４７０内のデータを連続的に更新してもよい。それによって、新たなデータを受け取ると、バッファ４７０内の古いデータが消え去る、すなわち上書きされる。
【００３７】
図５は、本発明のインプリメンテーションを説明するためのブロック図である。図５に示すように、複数のクライアント・デバイス（ＣＤ１〜ＣＤ４）５１０〜５４０がいくつかのセッションに関わる。各クライアント・デバイス（ＣＤ１〜ＣＤ４）５１０〜５４０は、複数のセッションに関与することができる。図５に示すセッションは、「ウィンドウ」としてインプリメントされる。ここでは、「ウィンドウ」は、任意のオペレーション・システムのもとでソフトウェアが実行されるビュー・ポートを意味する。
【００３８】
各セッションは、データ・ストリーム・スプリッタ・マネージャ５５０及び５６０の１つによって管理され、データ・ストリーム・スプリッタ（ＤＳＳ１〜ＤＳＳ４）５７０〜５９５の１つによって処理される。各データ・ストリーム・スプリッタ（ＤＳＳ１〜ＤＳＳ４）５７０〜５９５は、データ・ストリーム、例えば図中のデータ・ストリーム１、２、３、又は５に沿ってデータの送受信を行う。
【００３９】
図５に示す具体例では、２つの項目の間のライン毎に１本の双方向性の入出力データ・ストリームがある。データ・ストリーム１〜４は任意のデータ・ストリームであり、該データ・ストリームは、一般に、従来のシステムでは単一のクライアント・デバイスに対して出力を送り、またそこから入力を受けるものであろう。これらのデータ・ストリームは、例えば、デバッグ・アプリケーション、ドキュメント・エディタ、アプリケーション追跡プログラム、又はクライアント・デバイスへの出力送出及び／又はクライアント／デバイスからの入力受信を行う任意の他の種類のシステム・リソースに対する入出力から構成される。
【００４０】
図５に示すように、クライアント・デバイス５１０は３つのセッションに関与する。これらのセッションは、すべてデータ・ストリーム・スプリッタ・マネージャ５５０によって管理されている。各セッションは、データ・ストリーム・スプリッタの擬似端末、すなわちウィンドウＡ１、Ａ２、及びＡ３としてインプリメントされ、それぞれ異なるデータ・ストリーム・スプリッタ５７０、５８０、及び５９０によって処理される。クライアント・デバイス５３０及び５４０は、同様に、データ・ストリーム・スプリッタ・マネージャ５５０及び５６０によって管理されている複数のセッションに関与する。クライアント・デバイス５２０は、２つのセッション、ウィンドウＢ１及びウィンドウＢ２に関与し、第３のセッション、ウィンドウＢ３を加えるように試みている。
【００４１】
したがって、データ・ストリーム１はクライアント・デバイス５１０及び５２０によって共有される。データ・ストリーム２はクライアント・デバイス５１０によってのみアクセスされている。データ・ストリーム３は、４つのクライアント・デバイス（ＣＤ１〜ＣＤ４）５１０〜５４０のすべてによって共有されている。データ・ストリーム４は、クライアント・デバイス５３０及び５４０によって共有されており、クライアント・デバイス５２０はデータ・ストリーム４の共有を試みている。
【００４２】
クライアント・デバイス５２０の場合、該クライアント・デバイスはセッションに加わることを試み、データ・ストリーム・スプリッタ・マネージャ５８０が作動しているサーバ２の周知のポートに接続することでデータ・ストリームを共有する。データ・ストリーム・スプリッタ・マネージャ５６０は、それ自身のコピーを分ける。すなわち、以下により詳細に説明するように、クライアント・デバイス５２０のウィンドウＢ３に対する入出力を処理するために、現在実行されているコードの追加のインスタンスを生成する。また、データ・ストリーム・スプリッタ・マネージャ５６０は、クライアント・デバイス４３０及び４４０のウィンドウＣ２及びＤ２とデータ・ストリーム４との間の入出力を既に処理しているデータ・ストリーム・スプリッタ５９５との通信のために擬似端末を開く。
【００４３】
次に、データ・ストリーム・スプリッタ・マネージャ５６０の枝分かれされたコピーは、クライアント・デバイスのためにデータ・ストリーム・スプリッタ・マネージャ５６０が通信する擬似端末をデータ・ストリーム・スプリッタ５９５に知らせるために、データ・ストリーム・スプリッタ・テーブルに要素を設定する。データ・ストリーム・スプリッタ５９５がデータ・ストリーム・スプリッタ・テーブルの項目を循環すると、データ・ストリーム・スプリッタ５９５はデータ・ストリーム４の出力を種々のウィンドウＣ２、Ｄ２、及びＢ３へ送る。また、データ・ストリーム・スプリッタ５９５は、ウィンドウＣ２、Ｄ２、及びＢ３からの任意の入力をデータ・ストリーム４へ送る。万が一、クライアント・デバイス（ＣＤ１〜ＣＤ４）５１０〜５４０がデータ・ストリーム・スプリッタ・マネージャ５６０との接続を切るならば、それに応じてデータ・ストリーム・スプリッタ・テーブルはその擬似端末の項目を取り除くことでアップデートされ、それによってデータ・ストリーム・スプリッタ５９５がそのクライアント・デバイスとのデータ・ストリーム４の共有を停止するであろう。
【００４４】
さらに、別の実施形態では、データ・ストリーム・スプリッタ・マネージャ５６０は、セッションに関与するクライアント・デバイスの全てがデータ・ストリーム・スプリッタ・マネージャ５６０から接続を断つとしても、データ・ストリーム・スプリッタのためのデータ・ストリーム・スプリッタ・テーブルと特定のデータ・ストリームとを保持することができる。このようなデータ・ストリーム・スプリッタ・テーブルの保持は、所定の時間にわたって実行されるか、データ・ストリーム・スプリッタ・テーブルからセッションが論理的に取り除かれるコマンドがクライアント・デバイス又はネットワーク・アドミニストレータから受け取られるまで、特定のシステム要求に応じて、いつまでも維持しておくこともできる。このようにして、クライアント・デバイスの全てが、例えば作業日の終わりに接続を断ち、後でセッションを再開する。
【００４５】
本発明のデータ・ストリーム・スプリッタ・マネージャを、クライアント・デバイスに対して明らかな、又は明らかではないサーバ上で実行されるアプリケーションとしてインプリメントしてもよい。例えば、データ・ストリーム・スプリッタ・マネージャは、クライアント・デバイスで使用されたアプリケーションとしてインプリメントしてもよく、あるいはクライアント・デバイスからデータ・ストリーム・スプリッタ・マネージャを受け取り、データ・ストリーム・スプリッタ・マネージャの存在に気が付いているクライアント・デバイスのユーザ無しでそのデータを処理するサーバ上でのデーモン・プロセスとしてインプリメントしてもよい。
【００４６】
さらに別のインプリメンテーションでは、データ・ストリーム・スプリッタ・マネージャは、グラフィカル・ユーザ・インタフェースを持つアプリケーションとしてインプリメントされる。そのグラフィカル・ユーザ・インタフェースを介して、クライアント・デバイスのユーザは、新しいセッションの開始、既存のセッションへの参加、セッションからの退出、セッションへの復帰等を選択することができる。さらに、アクティブな接続を表示したり、コマンドをリストしたり、オンライン・ヘルプを得たり等、種々のオプションを提供するものであってもよい。
【００４７】
要約すれば、上記した本発明の特定の実施形態では、データ・ストリーム・スプリッタ・マネージャ５６０は、クライアント・デバイスからの新たな接続要求を、例えば周知のネットワーク・ポートでリッスンする。接続がクライアント・デバイスからなされると、データ・ストリーム・スプリッタ・マネージャ５６０は、現在実行されているコード、すなわちデータ・ストリーム・スプリッタ・マネージャ５６０のコピーを分岐し、次の新たな接続に対するリスニングへ戻る。
【００４８】
データ・ストリーム・スプリッタ・マネージャ５６０の分岐したコピーは、以下、クライアント特異的サーバとして言及され、以下の機能を実行することができる。クライアント特異的サーバは、クライアント・デバイスとサーバとの間でソフトウェア・バージョンの交換／確認を行い、任意のセキュリティ情報を確認する。このことは、接続されているクライアント・デバイスのホストネームが認証されていることを確認し、パスワードの入力を要求し、該パスポートを許可／拒絶し、共有しようとするシステム・リソースがクライアント・デバイスによってアクセス可能であることが認証されていることを確認し、発行し、権限を更新／格下げするためにユーザネームを変更すること等を含むものであってもよい。
【００４９】
クライアント特異的サーバは、新たなデータ・ストリーム・スプリッタを開始し、既存のデータ・ストリーム・スプリッタへ加入し、既に多重化されたシステム・リソースを探索し、続いてデータ・ストリーム・スプリッタへ加入又は適宜新たなものを開始し、現在のデータ・ストリーム・スプリッタから離れ、現在の接続について報告し、接続を断つ等に対するコマンド・フラグ及びメニュー要求をさらに処理するものであってもよい。さらに、クライアント特異的サーバは、データ・ストリーム・スプリッタとクライアント特異的サーバとのこのユニークな通信に対して特異的な擬似端末から読み取ったデータを読み取り、続いてクライアント・デバイスに対してソケット・ネットワーク・プロトコルを介して同一データを書き込むことによって、データ・ストリーム・スプリッタ・コードからクライアント・デバイスへの通信のパイプ役を務める。さらに、クライアント特異的サーバは、ソケット・ネットワーク・プロトコルを介してクライアント・デバイスからのデータを読み取り、データ・ストリーム・スプリッタ及びクライアント特異的サーバのこのユニークな組み合わせに対して特異的な擬似端末に同一データを書き込むことによって、クライアント・デバイスからデータ・ストリーム・スプリッタ・コードへの通信のパイプ役を務める。
【００５０】
データ・ストリーム・スプリッタ、例えばデータ・ストリーム・スプリッタ５９５は、他のクライアント・デバイスを待つ送れなしに、また任意の特定のビット・パターン、例えばエスケープ・シーケンスをフィルタリングすることなしに、任意の接続されたクライアント・デバイスからの任意のデータがデータ・ストリームに対して直接向かうように、ブロッキングされていない生入力を使用する。「ブロッキングされていない」という用語は、データ・ストリームへ入力が送られる前にクライアント・デバイスによる該入力の処理が行われていないこと意味する。したがって、ユーザがキャラクタをクライアント・デバイスにタイプすると、このキャラクタはユーザが転送機能を選択したり、「入力」ボタンを押したりすること等を待つことなく直ちにデータ・ストリームへ送られる。この方法では、セッションに関与している各クライアント・デバイスは、クライアント・デバイスの各々からシステム・リソースによって受信された入力に基づいたシステム・リソースからリアルタイムの出力が与えられるだろう。
【００５１】
データ・ストリーム・スプリッタは、信号ポイント間通信経路を介して特定のシステム・リソースへの入力及び該システム・リソースへの出力を向け直すことによって、そのシステム・リソースにアクセスする。データ・ストリーム・スプリッタは、システム・リソースから出てきているストリーミングされたデータを再生バッファの中に記録し、それによって、システム・リソースがデータを送った時点で出力「ライブ」を認識するために時を違えず接続されていないクライアントによってデータ・ストリーム・スプリッタが「認識される」ことがまだ可能である。さらに、データ・ストリーム・スプリッタは、連続的にデータ・ストリーム・スプリッタ・テーブルを走査し、接続を要求しているそれらのクライアント・デバイスを接続し、切断を要求しているそれらのクライアント・デバイスを切断し、そのクライアント・デバイスの擬似端末を使用しているクライアント・デバイスに対して多重化データ・ストリームからクライアント・デバイスへ送られていない任意のデータを送り、さらに接続されたクライアント・デバイスの数がゼロに達した場合に必要に応じて終了する。
【００５２】
したがって、本発明によれば、データ・ストリーム・スプリッタ・マネージャは、必要に応じてそれ自身のコピーを特定クライアント用のサーバとして生成する。同様に、特定クライアント用のサーバは、必要に応じてデータ・ストリーム・スプリッタを生成する。クライアント・デバイスは、データ・ストリーム・スプリッタ・マネージャにとって十分な長さだけ該データ・ストリーム・スプリッタ・マネージャと通信し、そのクライアント・デバイスのための特定クライアント用サーバを生成する。その後、クライアント・デバイスは、ネットワーク上でユーザと特定クライアント用サーバとの間の通信を中継する。
【００５３】
上記したように、本発明は複数のクライアント・デバイスが同一データ・ストリームを共有し、かつ共有したデータ・ストリームを変更するためにフル・アクセスすることを可能とする機構を提供する。また、本発明は、データ・ストリームに対する１つのクライアント・デバイスによる変更がセッションの間にアクティブな他のクライアント・デバイスの全てに転送される機構を提供する。
【００５４】
図６（ａ）は、データ・ストリームを共有するためにセッションの開始／加入を行う場合に、本発明のデータ・ストリーム・スプリッタ・マネージャの模範的な動作を概説するフローチャートである。図６（ａ）に示すように、動作は受け取られているデータ・ストリームに対するアクセスの要求によって開始される（ステップ６１０）。クライアント・デバイスに対して擬似端末が生成される（ステップ６２０）。要求されたデータ・ストリームのためのデータ・ストリーム・スプリッタ・テーブルの項目が加えられ、クライアント／デバイス及び擬似端末を識別する（ステップ６３０）。その後、データ・ストリーム・スプリッタ・マネージャは任意の新たなデータをクライアント・デバイスから擬似端末へ送り（ステップ６４０）、さらに任意の新たなデータを擬似端末からクライアント・デバイスへ送る（ステップ６５０）。
【００５５】
データ・ストリーム・スプリッタ・マネージャは、クライアント・デバイスの切断をモニタし（ステップ６６０）、もしクライアント・デバイスが切断されると、そのクライアント・デバイスに対するデータ・ストリーム・スプリッタ・テーブルの項目を削除する（ステップ６７０）。さもなければ、クライアント・デバイスが切断されていない場合は、データ・ストリーム・スプリッタ・マネージャはステップ６４０に戻る。
【００５６】
図６（ｂ）は、データ・ストリームのデータ送受信の際における本発明のデータ・ストリーム・スプリッタの模範的な動作を概説するフローチャートである。図６（ｂ）に示すように、動作はデータ・ストリーム・スプリッタがデータ・ストリーム・スプリッタ・マネージャ内のデータ・ストリーム・スプリッタ・テーブルから項目を読み取ることによって開始される（ステップ７１０）。データ・ストリーム・スプリッタは、現在のデータ・ストリーム・スプリッタ・テーブルの項目がこのデータ・ストリーム・スプリッタをサポートしているリソースに関連しているかどうかを判断する（ステップ７１５）。もしそうでなければ、動作はステップ７４０に飛ぶ。さもなければ、動作はステップ７２０に続く。
【００５７】
マルチプレクサは、データ・ストリームからデータ・ストリーム・スプリッタ・テーブルの項目に関連した擬似端末へデータを送る（ステップ７２０）。その後、データ・ストリーム・スプリッタは、擬似端末からの任意の入力をデータ・ストリームに送る（ステップ７３０）。データ・ストリーム・スプリッタは、続いてデータ・ストリーム・スプリッタ・テーブルの次の項目を読み取り（ステップ７４０）、さらにステップ７２０に戻る。
【００５８】
図７は、データ・ストリームに関する共有セッションのクライアント・デバイスから得られる表示の一例を示す。図７に示す本発明の特定のアプリケーションは、コンピュータ・プログラムをデバッグするためのデバッグ・セッションに対するものである。しかし、当業者ならば、本発明はデータ・ストリームが任意の特定の種類に限定されるものではないことを容易に理解するであろう。むしろ、本発明はオーディオ、ビデオ、テキスト・データ・ストリーム等のいかなる種類のものに対しても適用可能と思われる。
【００５９】
図７に示すように、表示にはデバッガがキーボードを介して入力した識別子によるデバッガ情報の第１のリスト化が含まれる。その後、異なるクライアント・デバイスを使用している２人のユーザ間でカンバセーションが始まる。カンバセーションは、デバッガ・アプリケーションのコマンド・プロンプトによって容易に行われる。したがって、２人のユーザのテキスト状のコメントは、デバッガによっては認識されない言葉を含むので、いくつかのエラー・ステートメントが表示される。
【００６０】
ユーザは、表示する前にデバッグ情報についてディスカッションする。各ユーザは、各々のユーザが該ユーザのクライアント・デバイス上で他のユーザからのコメント及びエラー・メッセージと同様にデバッグ情報を確認するようにデータ・ストリームに対してアクセスできる。したがって、各ユーザは、データ・ストリームを変更するために完全にアクセスし、他のユーザによって入力された変更を加える。
【００６１】
２人のユーザからのコメントは、ユーザがタイプした通りに表示される。言い換えれば、ユーザによって認識される出力は、システム・リソースからの生出力である。その結果、もし第１のユーザがコマンドをミスタイプし、コマンドを訂正するためにバックスペースすると、第２のユーザはミスタイプされたコマンド及びバックスペースのタイピングをそのまま通りに見るであろう。同様に、もしユーザが同時に複数のコマンドをタイプすると、両方のユーザからの入力をインタリーブする文字化けしたコマンドが得られるであろう。したがって、本発明は、両方のユーザがほぼ同時にデータ・ストリームに対してアクセスを完全かつフルに行うことが可能となる機構を提供する。各々のユーザに対して、他のユーザ及びそのユーザ自身の入力に基づいた変更データ・ストリームのリアルタイム表示が提供される。
【００６２】
上記したように、本発明は、データ・ストリームへのアクセス、またそれによるセッションの間にアクセスされたシステム・リソースへのアクセスを共有する複数のクライアント・デバイスを提供するための装置及び方法を提供する。この共有アクセスは、各ユーザがデータ・ストリームを変更することを可能とし、他のユーザによる変更をデータ・ストリームに加えることが可能となる。
【００６３】
完全に機能しているデータ処理システムという状況のもとで本発明を説明したが、当業者は本発明のプロセスが命令のコンピュータ読み取り可能媒体の形態及び様々な形態で分散可能であり、本発明は分散を実行するために実際に使用される信号保持媒体の特定の種類に関わらず等しく適用されることを指摘することは重要である。コンピュータ読み取り可能媒体の例として、記録可能なタイプの媒体、例えばフロッピ・ディスク、ハード・ディスク・ドライブ、ＲＡＭ、ＣＤ−ＲＯＭ、さらに送信可能なタイプの媒体、例えばデジタル及びアナログ通信リンクが挙げられる。
【００６４】
本発明に関する以上の記述は、本発明を図解及び説明するためのものであって、開示された形態に本発明を網羅又は限定することを意図したものではない。多くの変更及び変形が当業者に容易に理解されるであろう。実施形態は、本発明の原理を最良に説明するために選択され、かつ記述されたものであり、本発明を当業者が理解して特定の用途に適するように様々な変更が加えられた様々な実施形態を可能とさせるものである。
【００６５】
まとめとして、本発明の構成に関して以下の事項を開示する。
（１）１つのデバイスと複数のデバイスとの間で通信を行う方法であって、
アプリケーション・データ・ストリームに対する入力をデバイスから受け取るステップと、
複数の他のデバイスからの入力と前記受け取った入力とに基づいた前記アプリケーション・データ・ストリームからの出力を受け取るステップと、
実質的に同時に、前記デバイスと前記複数のデバイスとに対して前記出力を提供するステップとを有し、
前記アプリケーション・データ・ストリームの前記出力のみが前記デバイスと前記複数のデバイスとによって共有されることを特徴とする方法。
（２）前記アプリケーション・データ・ストリームからの出力は、データ・ストリーム・スプリッタを用いて、前記デバイスと前記複数のデバイスとによって共有されることを特徴とする上記（１）に記載の方法。
（３）前記データ・ストリーム・スプリッタは、前記アプリケーション・データ・ストリームに対する共有アクセスを提供するために、動的に構成されることを特徴とする上記（２）に記載の方法。
（４）前記デバイスの擬似端末を確立するステップをさらに有することを特徴とする上記（１）に記載の方法。
（５）前記アプリケーション・データ・ストリームからの前記データ・ストリーム・スプリッタによって受け取られた出力は、前記擬似端末に送られ、前記デバイスから前記擬似端末によって受け取られたデータは、データ・ストリーム・スプリッタに送られることを特徴とする上記（４）に記載の方法。
（６）前記アプリケーション・データ・ストリームに対する入力を受け取るステップは、
前記データ・ストリーム・スプリッタに関連した項目を識別するために、データ・ストリーム・スプリッタ・テーブル内の項目を循環するステップと、
前記データ・ストリーム・スプリッタ・テーブルの循環に基づいて前記アプリケーション・データ・ストリームに対するアクセスを前記デバイス及び前記他のデバイスが循環的に行うステップと、
を含むことを特徴とする上記（２）に記載の方法。
（７）もし前記アプリケーション・データ・ストリームが他のデータ・ストリーム・スプリッタによって処理されていなければ、前記アプリケーション・データ・ストリームに対するアクセスを処理するデータ・ストリーム・スプリッタを生成するステップと、
前記デバイス及び前記データ・ストリーム・スプリッタのために、項目を・ストリーム・スプリッタ・テーブルに追加するステップと、
をさらに有することを特徴とする上記（１）に記載の方法。
（８）アプリケーション・データ・ストリームに対する入力を受け取るステップ、アプリケーション・データ・ストリームから出力を受け取るステップ、及び提供するステップは、データ・ストリーム・スプリッタ・マネージャによって実行されることを特徴とする上記（１）に記載の方法。
（９）前記データ・ストリーム・スプリッタ・マネージャは、前記デバイスから前記アプリケーション・データ・ストリームに対するアクセスの要求を受け取り、前記デバイスのための前記アプリケーション・データ・ストリームに対する前記アクセスを処理するために、前記データ・ストリーム・スプリッタ・マネージャは、それ自身のコピーを分岐することを特徴とする上記（８）に記載の方法。（１０）前記データ・ストリーム・スプリッタ・マネージャは、前記デバイスのユーザに対してトランスペアレントであることを特徴とする上記（８）に記載の方法。
（１１）前記データ・ストリーム・スプリッタ・マネージャは、グラフィカル・ユーザ・インタフェースを有することを特徴とする上記（８）に記載の方法。
（１２）バッファに前記データ・ストリームからのデータを格納するステップをさらに有し、前記デバイスが最初に前記データ・ストリームに対してアクセスする場合、前記バッファのコンテンツは前記デバイスによってストリーミングされることを特徴とする上記（１）に記載の方法。
（１３）データ・ストリームに対してデバイスが共有アクセスする方法であって、
デバイスから前記データ・ストリームにアクセスする要求を受け取るステップと、
前記デバイスのためにデータ・ストリーム・スプリッタ・テーブルに項目を追加するステップと、
前記データ・ストリーム・スプリッタ・テーブルの前記項目にもとづいて、データ・ストリーム・スプリッタを介して前記デバイスが前記データ・ストリームにアクセスするステップとを有し、さらに、
前記デバイスが前記データ・ストリームにアクセスするステップは、前記データ・ストリームから前記デバイスに出力を与えるステップと、前記デバイスから前記データ・ストリームに入力を送るステップとを有し、また前記データ・ストリームからの前記出力は、前記デバイスからの入力及び少なくとも１つの他のデバイスから受け取られた入力に基づいてリアルタイムで提供されることを特徴とする方法。
（１４）データ・ストリームに対して複数のデバイスが共有アクセスする方法であって、
デバイスから、前記データ・ストリームに対する入力を受け取るステップと、前記デバイスからの前記入力に基づいたデータ・ストリーム出力を生成するステップと、
連続的に前記複数のデバイスの他のデバイスに対してデータ・ストリーム出力を供給するステップとを有し、さらに、
前記入力は、前記デバイスがキャラクタに基づいてキャラクタ上に前記入力を生成すると受け取られるブロッキングされていない生入力であり、また前記データ・ストリーム出力は前記入力が受け取られるとキャラクタに基づいてキャラクタ上に生成されることを特徴とする方法。
（１５）双方向データ・ストリームに対して共有アクセスする方法であって、
データ・ストリーム・スプリッタ・マネージャの各項目がクライアント・デバイスを識別する前記データ・ストリーム・スプリッタ・テーブルの項目を循環するステップと、
前記項目を循環するステップに基づいて各項目で識別された前記クライアント・デバイスに対して前記データ・ストリームからデータを送るステップと、
各項目で識別された前記クライアント・デバイスからデータ・ストリーム・スプリッタ・マネージャを受け取るステップと、
前記クライアント・デバイスから前記データを前記双方向データ・ストリームに送るステップと、
を有することを特徴とする方法。
（１６）前記データ・ストリームに対するアクセスは、前記データ・ストリーム・スプリッタ・テーブルの前記項目に基づいて複数のクライアント・デバイスによって共有され、前記クライアント・デバイスの各々は前記データ・ストリームに対してフル・アクセスすることを特徴とする上記（１５）に記載の方法。
（１７）前記クライアント・デバイスは、前記データ・ストリームに対するプライベート通信チャンネルを有するが、前記データ・ストリームからの前記出力は前記クライアント・デバイスの全てによって共有されることを特徴とする上記（１５）に記載の方法。
（１８）前記データ・ストリームから前記クライアント・デバイスへデータを送るステップ及び前記クライアント・デバイスからデータを受け取るステップは、データ・ストリーム・スプリッタによって実行されることを特徴とする上記（１５）に記載の方法。
（１９）前記データ・ストリーム・スプリッタは、前記データ・ストリームに対して共有アクセスするために動的に構成されていることを特徴とする上記（１８）に記載の方法。
（２０）前記データ・ストリームから前記クライアント・デバイスへデータを送るステップは、前記クライアント・デバイスに関連した擬似端末に前記データ・ストリーム・スプリッタからデータを送るステップを有することを特徴とする上記（１５）に記載の方法。
（２１）前記クライアント・デバイスからデータを受け取るステップは、前記クライアント・デバイスに関連した擬似端末を介して前記クライアント・デバイスからデータを受け取るステップを有することを特徴とする上記（１５）に記載の方法。
（２２）前記データ・ストリーム・スプリッタは、前記データ・ストリームに対してブロックされていない入出力アクセスを行うことを特徴とする上記（１８）に記載の方法。
（２３）データ・ストリームに対してデバイスが共有アクセスするためのコンピュータ読み取り可能媒体に格納されたコンピュータ・プログラム・プロダクトであって、
デバイスからデータ・ストリームに対するアクセス要求を受け取るための第１の命令と、
前記デバイスのためにデータ・ストリーム・スプリッタ・テーブルに項目を追加するための第２の命令と、
前記データ・ストリーム・スプリッタ・テーブルの前記項目に基づいてデータ・ストリーム・スプリッタを介して前記データ・ストリームに前記デバイスがアクセスするための第３の命令と、
を有することを特徴とするコンピュータ・プログラム・プロダクト。
（２４）前記データ・ストリームに対するアクセスは、他のデバイスと共有され、前記デバイス及び前記他のデバイスの各々は、前記データ・ストリームに対してフル・アクセスすることを特徴とする上記（２３）に記載のコンピュータ・プログラム・プロダクト。
（２５）前記デバイスは前記データ・ストリームに対するプライベート通信チャンネルを有するが、前記データ・ストリームからの前記出力はデバイス及び前記他のデバイスによって共有されることを特徴とする上記（２３）に記載のコンピュータ・プログラム・プロダクト。
（２６）前記データ・ストリームに対して共有アクセスするために、前記データ・ストリーム・スプリッタを動的に構成するための第４の命令を、さらに有することを特徴とする上記（２３）に記載のコンピュータ・プログラム・プロダクト。
（２７）前記デバイスの擬似端末を確立するための第４の命令を、さらに有することを特徴とする上記（２３）に記載のコンピュータ・プログラム・プロダクト。
（２８）前記データ・ストリームから前記データ・ストリーム・スプリッタによって受け取られたデータは、前記擬似端末へ送られ、前記デバイスから前記擬似端末によって受け取られたデータは前記データ・ストリーム・スプリッタへ送られることを特徴とする上記（２７）に記載のコンピュータ・プログラム・プロダクト。
（２９）前記データ・ストリームに対して前記デバイスがアクセスするための前記第３の命令は、
前記データ・ストリーム・スプリッタに関連した項目を識別するために前記データ・ストリーム・スプリッタ・テーブルを循環するための第４の命令と、
前記データ・ストリーム・スプリッタ・テーブルの前記循環に基づいて前記データ・ストリームに前記デバイス及び他のデバイスが循環的にアクセスするための第５の命令と、
をさらに有することを特徴とする上記（２３）に記載のコンピュータ・プログラム・プロダクト。
（３０）前記データ・ストリームに対するアクセスがデータ・ストリーム・スプリッタによって処理されているかどうかを判断するための第４の命令をさらに有し、
前記デバイスのためにデータ・ストリーム・スプリッタ・テーブルに項目を追加する第２の命令が前記データ・ストリーム・スプリッタに関連してデータ・ストリーム・スプリッタ・テーブルに前記項目を加えるための命令を含むことを特徴とする上記（２３）に記載のコンピュータ・プログラム・プロダクト。
（３１）前記第１、第２、及び第３の命令は、データ・ストリーム・スプリッタ・マネージャによってインプリメントされることを特徴とする上記（２３）に記載のコンピュータ・プログラム・プロダクト。
（３２）前記デバイスのために前記データ・ストリーム・スプリッタに対する前記アクセスを処理するために、前記データ・ストリーム・スプリッタ・マネージャのコピーを分岐するための第４の命令をさらに有し、前記データ・ストリーム・スプリッタ・マネージャは、前記デバイスからの前記要求を受け取ることを特徴とする上記（３１）に記載のコンピュータ・プログラム・プロダクト。
（３３）バッファ内に前記データ・ストリームからのデータを格納するための第４の命令と、
前記デバイスが最初に前記データ・ストリームにアクセスする場合に、前記バッファのコンテンツを前記デバイスに対してストリーミングする第５の命令と、をさらに有することを特徴とする上記（２３）に記載のコンピュータ・プログラム・プロダクト。
（３４）データ・ストリームに対してデバイスが共有アクセスするための装置であって、
データ・ストリーム・スプリッタと、
前記データ・ストリーム・スプリッタに結合したデータ・ストリーム・スプリッタ・マネージャとを備え、
前記データ・ストリーム・スプリッタ・マネージャは、装置から前記データ・ストリームにアクセスするための要求を受け取り、前記デバイスのためにデータ・ストリーム・スプリッタ・テーブルに項目を追加し、前記データ・ストリーム・スプリッタ・テーブルの前記項目に基づいて前記データ・ストリーム・スプリッタを介して前記データ・ストリームに対して前記デバイスをアクセスさせることを特徴とする装置。
（３５）前記データ・ストリームは、他のデバイスと共有され、前記デバイス及び前記他のデバイスの各々は前記データ・ストリームに対してフル・アクセスを有することを特徴とする上記（３４）に記載の装置。
（３６）前記データ・ストリーム・スプリッタは、前記デバイスに対して、前記データ・ストリームに対するプライベート通信チャンネルを与えるが、前記データ・ストリームからの前記出力は、前記デバイス及び前記他のデバイスによって共有されることを特徴とする上記（３４）に記載の装置。
（３７）前記データ・ストリーム・スプリッタは、前記データ・ストリームに対して共有アクセスするために、前記データ・ストリーム・スプリッタ・マネージャによって動的に構成されることを特徴とする上記（３４）に記載の装置。
（３８）前記データ・ストリーム・スプリッタ・マネージャは、前記デバイスのための擬似端末を確立することを特徴とする上記（３４）に記載の装置。
（３９）前記データ・ストリームから前記データ・ストリーム・スプリッタによって受け取られたデータは擬似端末に送られ、前記デバイスから前記擬似端末によって受け取られたデータは前記データ・ストリーム・スプリッタに送られることを特徴とする上記（３８）に記載の装置。
（４０）前記データ・ストリーム・スプリッタ・マネージャは、前記データ・ストリームに対する前記デバイスのアクセスを、
前記データ・ストリーム・スプリッタに関連した項目を識別するために前記データ・ストリーム・スプリッタ・テーブルを循環し、
前記データ・ストリーム・スプリッタ・テーブルの前記循環に基づいて前記データ・ストリームに前記デバイス及び他のデバイスが循環的にアクセスすることをによって行うことを特徴とする上記（３４）に記載の装置。
（４１）前記データ・ストリーム・スプリッタ・マネージャは、前記データ・ストリームに対するアクセスがデータ・ストリーム・スプリッタによって処理されているかどうかを判断し、前記デバイスのためにデータ・ストリーム・スプリッタ・テーブルに項目を追加することは、前記データ・ストリーム・スプリッタに関連したデータ・ストリーム・スプリッタ・テーブルに前記項目を追加することが含まれることを特徴とする上記（３４）に記載の装置。
（４２）前記データ・ストリーム・スプリッタ・マネージャは、前記デバイスからの前記要求を受け取り、前記デバイスのために前記データ・ストリームに対する前記アクセスを処理するために、前記データ・ストリーム・スプリッタ・マネージャはそれ自身のコピーを分岐することを特徴とする上記（３４）に記載の装置。
（４３）前記データ・ストリーム・スプリッタ・マネージャは、前記デバイスのユーザに対してトランスパレントであることを特徴とする上記（３４）に記載の装置。
（４４）前記データ・ストリーム・スプリッタ・マネージャは、グラフィカル・ユーザ・インタフェースを有することを特徴とする上記（３４）に記載の装置。（４５）前記データ・ストリーム・スプリッタは、前記データ・ストリームに対してブロッキングされていない生の入出力アクセスを行うことを特徴とする上記（３４）に記載の装置。
（４６）バッファをさらに有し、前記バッファは前記データ・ストリームからのデータを格納し、前記デバイスが最初に前記データ・ストリームにアクセスする時、前記バッファのコンテンツは前記デバイスに対してストリーミングされることを特徴とする上記（３４）に記載の装置。
（４７）１つのデバイスと複数のデバイスとの間で通信を行う方法であって、
アプリケーションに対する入力を、前記複数のデバイスの少なくとも２つから受け取るステップと、
前記複数のデバイスの前記少なくとも２つからの前記入力を組み合わせて組合わさった出力を生成するステップと、
前記複数のデバイスの各々から前記組合わさった出力を同時に出力するステップと、
を有することを特徴とする方法。
（４８）１つのデバイスと複数のデバイスとの間で通信を行う方法であって、
アプリケーションに対する入力を、１つのデバイスから受け取るステップと、前記複数の他のデバイスの１つ以上からの入力と前記受け取られた入力とに基づいて前記アプリケーションから出力を受け取るステップと、
実質的に同時に、前記複数のデバイスの各々に対して前記出力を提供するステップと、
を有することを特徴とする方法。
（４９）複数のデバイスによって共有されたアプリケーションからの出力表示を表示するための方法であって、
前記複数のデバイスの少なくとも２つから入力を受け取るステップと、
前記複数のデバイスの少なくとも２つからの入力を組み合わせるステップと、前記複数のデバイスの前記少なくとも２つで、前記複数のデバイスの前記少なくとも２つからの前記組合わさった入力に基づいた出力表示を、実質的に同時に表示するステップと、
を有することを特徴とする方法。
【図面の簡単な説明】
【図１】  本発明にもとづく分散データ処理システムを例証する図である。
【図２】  本発明にもとづくサーバの模範的なブロック図である。
【図３】  本発明にもとづくクライアントの模範的なブロック図である。
【図４】  本発明にもとづく基本的構成要素の模範的なブロック図である。
【図５】  本発明の模範的なインプリメンテーションを例証する模範的なブロック図である。
【図６】  （ａ）及び（ｂ）は本発明にもとづく模範的なオペレーションの概要を説明するためのフローチャートである。
【図７】  本発明をインプリメントするクライアント・デバイスからのデータ・ストリームの表示の説明図である。
【符号の説明】
１００    分散処理システム
１０２    ネットワーク
１０４    サーバ
１０６    記憶装置
１０８、１１０、１１２    クライアント
２００    データ処理システム
２０２、２０４    プロセッサ
２０６    システム・バス
２０８    メモリ・コントローラ／キャッシュ
２０９    ローカル・メモリ
２１０    Ｉ／Ｏバス・ブリッジ
２１２    Ｉ／Ｏバス
２１４    周辺機器相互接続（ＰＣＩ）バス・ブリッジ
２１６    ＰＣＩローカル・バス２１６
２１８    モデム
２２０    ネットワーク・アダプタ
２２２、２２４      ＰＣＩバス・ブリッジ
２２６、２２８      追加のＰＣＩバス
２３０    メモリ・マップ・グラフィック・アダプタ
２３２    ハード・ディスク
３００    データ処理システム
３０２    プロセッサ
３０４    メイン・メモリ
３０６    ＰＣＩローカル・バス
３０８    ＰＣＩブリッジ
３１０    ローカル・エリア・ネットワーク（ＬＡＮ）アダプタ
３１２    ＳＣＳＩホスト・バス・アダプタ
３１４    拡張バス・インタフェース
３１６    オーディオ・アダプタ
３１８    グラフィック・アダプタ
３１９    オーディオ／ビデオ・アダプタ（Ａ／Ｖ）
３２０    キーボード及びマウス・アダプタ
３２２    モデム
３２４    追加のメモリ
３２６    ハード・ディスク・ドライブ
３２８    テープ・ドライブ
３３０    ＣＤ−ＲＯＭドライブ
３３２    デジタル・ビデオ・ディスク読み出し専用メモリ（ＤＶＤ−ＲＯＭ）４１０    入出力（Ｉ／Ｏ）インタフェース４１０
４２０    データ・ストリーム・スプリッタ・マネージャ
４３０、４４０、４５０      データ・ストリーム・スプリッタ
４６０    データ・ストリーム・スプリッタ・テーブル記憶装置
４７０    バッファ
４８０    信号／データ・バス
５１０、５２０、５３０、５４０      クライアント・デバイス５１０〜５４０５５０、５６０      データ・ストリーム・スプリッタ・マネージャ
５７０、５８０、５９０、５９５    データ・ストリーム・スプリッタ
【図１】
0003887186.tif 000002
【図２】
0003887186.tif 000003
【図３】
0003887186.tif 000004
【図４】
0003887186.tif 000005
【図５】
0003887186.tif 000006
【図６】
0003887186.tif 000007
【図７】
0003887186.tif 000008