(57)【特許請求の範囲】
【請求項１】
アプリケーションと関連付けられたモジュールのコレクションをストアする第１コンピュータから、前記アプリケーションを実行する第２コンピュータにおける遅延を短縮するようにモジュールを伝送するコンピュータ実装方法であって、
前記第１コンピュータは、
モジュール間の遷移と加重された値とを関連付けた遷移レコードを有するストリーミング制御データベースを備えており、
前記遷移レコードの値に基づいてモジュールの遷移パスを決定することによって前記コレクションからモジュールの順序付けられたセットを選択する工程と、
前記セットに含まれるモジュールを前記第２コンピュータに向けて透過的にストリーミングする工程と、
を実行することを特徴とする方法。
【請求項２】
前記透過的にストリーミングする工程では、前記第２コンピュータでアプリケーションを実行している間に前記第１コンピュータから前記第２コンピュータにモジュールを送信することを特徴とする請求項１に記載の方法。
【請求項３】
前記コレクション内の少なくとも１つのモジュールは、非実行データを備えることを特徴とする請求項１に記載の方法。
【請求項４】
前記コレクション内の少なくとも１つのモジュールは、プログラムコードを備えることを特徴とする請求項１に記載の方法。
【請求項５】
前記選択する工程では、前記アプリケーションの実行中に１つのモジュールから別のモジュールに遷移する可能性を示す遷移レコードを処理して前記遷移パスを決定することを特徴とする請求項１に記載の方法。
【請求項６】
前記ストリーミング制御データベースは、複数のリスト記録を備え、
前記複数のリスト記録のそれぞれは、前記コレクション内のモジュールのシーケンスを識別するものであり、
前記選択する工程では、前記複数のリスト記録のうちの１つを選択することを特徴とする請求項１に記載の方法。
【請求項７】
前記第２コンピュータは、モジュールを選択する工程を実行し、
前記第１コンピュータは、
前記第２コンピュータで選択された前記コレクション内の第１モジュールを識別する選択データを受信する工程と、
前記第１モジュールを前記第２コンピュータに伝送する工程と、
前記第２コンピュータで選択された前記コレクション内の第２モジュールを識別する第２選択データを受信する工程と、
前記第２モジュールを前記第２コンピュータに伝送する工程と、
を更に実行することを特徴とする請求項１に記載の方法。
【請求項８】
前記透過的にストリーミングする工程を中断する工程と、
前記コレクションからモジュールの順序付けられた第２セットを選択する工程と、
前記第２セットに含まれるモジュールを前記第２コンピュータに向けて透過的にストリーミングする工程と、
を更に実行することを特徴とする請求項１に記載の方法。
【請求項９】
前記第２コンピュータは、前記アプリケーションの実行状態に関する指示を提供するステータスデータを前記第１コンピュータに伝送する工程を実行することを特徴とする請求項８に記載の方法。
【請求項１０】
前記ステータスデータは、ユーザ入力を示すデータを備えることを特徴とする請求項９に記載の方法。
【請求項１１】
前記第２コンピュータは、モジュール要求を前記第１コンピュータに送信する工程を実行し、
前記第１コンピュータは、前記要求されたモジュールを前記第２コンピュータに伝送する工程を更に実行することを特徴とする請求項８に記載の方法。
【請求項１２】
前記モジュール要求は、前記要求されたモジュール内のコードを実行しようとする試みに応答して送信されることを特徴とする請求項１１に記載の方法。
【請求項１３】
前記モジュールはＪａｖａクラスであり、
前記第２コンピュータは、前記第１コンピュータから伝送されるＪａｖａクラスを動的にロードする工程を更に実行することを特徴とする請求項１１に記載の方法。
【請求項１４】
前記第２コンピュータは、
前記アプリケーションを実行している間に、前記セットに含まれる第１モジュールを受信する工程と、
前記第１モジュールを前記第２コンピュータにあるローカル記憶媒体上にストアする工程と、
前記第１モジュールを前記アプリケーションに統合する工程と、
を実行することを特徴とする請求項１に記載の方法。
【請求項１５】
前記統合する工程では、前記第１モジュール内に含まれるロジックを前記アプリケーション内に含まれるロジックに統合することを特徴とする請求項１４に記載の方法。
【請求項１６】
前記アプリケーションは割込みステートメントを備え、
前記第１モジュールに含まれるロジックは、実行可能な置換コードを備え、
前記統合する工程では、
前記割込みステートメントを実行し、
実行プログラムを呼び出し、
前記割込みステートメントを前記置換コードで置き換え、
前記置換コードを実行することを特徴とする請求項１５に記載の方法。
【請求項１７】
前記アプリケーションは第１スタブ手続きを備え、
前記第１モジュールは第１コードシーケンスを備え、
前記統合する工程では、前記第１スタブ手続きを前記第１コードシーケンスで置き換えることを特徴とする請求項１５に記載の方法。
【請求項１８】
前記統合する工程では、前記アプリケーションから前記第１コードシーケンスにアプリケーション実行が移ることを可能にするように、前記第１スタブ手続きを置き換えることを特徴とする請求項１７に記載の方法。
【請求項１９】
アプリケーションと関連付けられたモジュールのコレクションをストアする第１コンピュータから、前記アプリケーションを実行する第２コンピュータにおける遅延を短縮するようにモジュールを伝送するために、
モジュール間の遷移と加重された値とを関連付けた遷移レコードを有するストリーミング制御データベースを備えている前記第１コンピュータに、
前記遷移レコードの値に基づいてモジュールの遷移パスを決定することによって前記コレクションからモジュールの順序付けられたセットを選択する工程と、
前記セットに含まれるモジュールを前記第２コンピュータに向けて透過的にストリーミングする工程と、
を実行させるためのプログラムを記憶したことを特徴とするコンピュータ読取可能媒体。
【請求項２０】
前記第２のコンピュータに、
アプリケーションを実行する工程と、
実行中の前記アプリケーションと関連付けられたモジュールを透過的に受信する工程と、
前記受信したモジュールを前記実行中のアプリケーションとは独立にストアする工程と、
前記ストアしたモジュールを前記実行中のアプリケーションに統合する工程と、
を実行させるためのプログラムを更に記憶したことを特徴とする請求項１９に記載のコンピュータ読取可能媒体。
【請求項２１】
アプリケーションと関連付けられたモジュールのコレクションをストアする第１コンピュータから、前記アプリケーションを実行する第２コンピュータにおける遅延を短縮するようにモジュールを伝送するためのシステムであって、
１）  モジュール間の遷移と加重された値とを関連付けた遷移レコードを有するストリーミング制御データベースを備えており、
前記遷移レコードの値に基づいてモジュールの遷移パスを決定することによって前記コレクションからモジュールの順序付けられたセットを選択する工程と、
前記セットに含まれるモジュールを前記第２コンピュータに向けて透過的にストリーミングする工程と、
を実行するように構成された前記第１のコンピュータと、
２）  前記モジュールを前記第１のコンピュータから受信する工程と、
前記受信したモジュールのうちの１つまたは複数のモジュールを、実行中の前記アプリケーションに統合する工程と、
を実行するように構成された第２のコンピュータと
を備えることを特徴とするシステム。
【発明の詳細な説明】
【０００１】
（背景情報）
クライアントサーバ環境で、クライアントコンピュータは、サーバと通信を行ってそのサーバにストアされた情報に遠隔アクセスすることができる。サーバとクライアントコンピュータとの間での情報の転送は、標準プロトコルおよびソフトウェアを使用して提供することができる。例えば、クライアントコンピュータにあるハイパーテキストマークアップ言語（ＨＴＭＬ）ブラウザアプリケーションが、ＨＴＴＰサーバからウェブページを受信するのに、ＴＣＰ／ＩＰおよびハイパーテキストトランスファプロトコル（ＨＴＴＰ）を使用して、公衆インターネットを介して通信することができる。ウェブページは、フォーマットされたテキスト、ならびに埋め込まれたグラフィックスやサウンドなどのマルチメディアエレメントを含み得る。これらのマルチメディアエレメントが、クライアントによってダウンロードされて、ブラウザアプリケーションまたは「プラグイン」ブラウザコンポーネントによってユーザに提示されるということが可能である。例としてのブラウザアプリケーションは、ネットスケープナビゲータ（Ｎｅｔｓｃａｐｅ  Ｎａｖｉｇａｔｏｒ）４．０（登録商標）およびマイクロソフトインターネットエクスプローラ（Ｍｉｃｒｏｓｏｆｔ  Ｉｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ）４．０（商標）を含む。
【０００２】
クライアントコンピュータで使用されるブラウザアプリケーションは、ストリーミング（streaming）データ伝送プロトコルを使用してオーディオ情報およびビデオ情報を受信するのに、プラグインソフトウェアを使用することができる。ストリーミングプロトコルは、情報が受信されるのにつれて、それがクライアントコンピュータによって提示されるということを可能にする。例えば、フルモーションビデオを、サーバからクライアントにフレームの線形ストリームとして送信することができる。クライアントに各フレームが着信するごとに、それがリアルタイムのフルモーションビデオ表示を生成するように表示され得る。オーディオストリーミングおよびビデオストリーミングは、クライアントが、クライアントアプリケーションにすべてのストリームが着信するのを待つことなく、情報を提示することを可能にする。オーディオストリーミングおよびビデオストリーミングは、例えば、リアルネットワーク社（ＲｅａｌＮｅｔｗｏｒｋ，Ｉｎｃ．）からのリアルオーディオ（ＲｅａｌＡｕｄｉｏ）（登録商標）およびリアルビデオ（ＲｅａｌＶｉｄｅｏ）（商標）によって提供される。
【０００３】
また、ブラウザアプリケーションは、ＨＴＭＬベースのウェブページの外観を向上させるのに、実行可能なソフトウェアアプレットを使用することができる。アプレットは、クライアントからの要求に応じてサーバからクライアントに送信されるソフトウェアプログラムである。代表的なアプレット使用では、ＨＴＭＬベースのウェブページが、ブラウザアプリケーションにアプレットを要求させ、そのアプレットの実行を開始させるＨＴＴＰコマンドを含んでいる。したがって、アプレットは、ユーザと対話してデータの収集や処理を行うことができ、ネットワークを介してデータを通信することができ、結果をコンピュータ出力デバイス上に表示することができる。アプレットは、クライアントコンピュータにあるブラウザアプリケーションによって提供されるランタイム環境で実行するプログラミング言語で構築することができる。例えば、サンマイクロシステム社からのＪａｖａ（登録商標）プログラミング言語は、Ｊａｖａアプレットをウェブサーバにストアし、Ｊａｖａインタープリタによる実行のためにウェブページに添付することができるようにする。Ｊａｖａアプレットは、複数のＪａｖａクラスで形成され得る。Ｊａｖａクラスは、動的に生成された、そのクラスを実行する要求（モジュール実行要求）に応答して、サーバからダウンロードすることができる実行可能なＪａｖａコードを含む。実行中のアプレットがあるクラスによって提供される機能にアクセスしようとしたとき、そのＪａｖａクラスがＪａｖａインタープリタで利用可能ではない場合、Ｊａｖａインタープリタは、サーバから動的にそのクラスをリトリーブすることができる。マイクロソフト  Ｖｉｓｕａｌ  Ｂａｓｉｃ（登録商標）、またはマイクロソフト  Ｖｉｓｕａｌ  Ｃ＋＋（登録商標）などの、他のプログラミング言語もまた、マイクロソフト  ＡｃｔｉｖｅＸ（商標）コントロールなど、アプレット様式のソフトウェアモジュールを作成するのに使用することができる。
【０００４】
また、ダウンロード可能なアプレットを、大きく複雑なプログラムを開発するのに使用することができる。例えば、複雑な財務プログラムをアプレットのコレクションから構築することができる。こうした財務プログラムでは、ユーザから情報を集め、支払を計算し、利率を計算し、また印刷された報告書を生成するのに別々のアプレットを使用することができる。特定のプログラム機能がユーザによって要求されると、その要求された機能と関連するアプレットが、サーバからリトリーブされ得る。ただし、ソフトウェアアプリケーションのサイズが増大するのにつれて、ネットワークを介してそのモジュールをリトリーブするのに関連する遅延も同様に増大して、エンドユーザにとって許容できないものとなり得る。したがって、コンピュータ間でのソフトウェアの伝送の改善が望まれる。
【０００５】
（概要）
本発明は、第１コンピュータと第２コンピュータとの間で、データモジュールをストリームとして伝送するための方法およびシステムを含む。モジュールは、そのモジュール間に「自然な」順序が存在するかどうかに関わらず、ストリームとして伝送することができる。例えば、データストリーム内容を判断するのに、データの自然な線形順序を頼りにするストリーミングアプリケーションとは異なり、開示のストリーミングメカニズムは、線形データ順序に従って動作するように拘束されていない。代わりに、ストリームとして伝送されるデータモジュールは、特定のデータ内容とは独立していることが可能な予め定められた基準を使用して、選択される。
【０００６】
例としての適用では、開示のストリーミングメカニズムは、ソフトウェアモジュールのユーザ依存ストリーミングを提供することができる。例えば、ホームバンキングアプリケーションが、モジュール＃１から＃５を含み得る。第１バンキングアプリケーションユーザは、メニュースクリーンでのユーザ自身の入力選択に基づいて、１−３−４−５の順序でモジュールにアクセスすることができ、第２ユーザは、２−４−１の順序でモジュールにアクセスすることができる。こうしたバンキングアプリケーションの場合、ストリーミングシーケンスを決定するために使用される予め定められた基準が、各ユーザのモジュール使用パターンを詳述することができる。アプリケーションのユーザと関連付けられた予め定められた基準は、第１ユーザがこのバンキングアプリケーションにアクセスしているとき、好ましいストリーミングシーケンス１−３−４−５を指定するが、第２ユーザがアプリケーションにアクセスしているときには、好ましいシーケンス２−４−１を指定するということができる。したがって、ストリームとして伝送されるシーケンスは、履歴上のユーザ依存アクセスパターンに適合することが可能である。他のタイプの予め定められた基準もまた、使用することができる。開示のストリーミングメカニズムはまた、ハイパーテキストマークアップ言語データ、バイナリグラフィックス、およびテキストなどの非実行データ（non-executable data）をストリームとして伝送するのにも使用することができる。
【０００７】
一般的に一態様では、本発明は、第１コンピュータから第２コンピュータにモジュールを伝送するコンピュータ実装方法を備えている。第１コンピュータで、利用可能なモジュールのコレクションからモジュールのシーケンスを選択することによって、モジュールセットが形成される。選択されたモジュールのそれぞれは、第２コンピュータで動作しているアプリケーションと関連付けられる。選択されたモジュールは、第１コンピュータから第２コンピュータに、透過的に（transparently）ストリーミングすることができる。モジュールの選択は、予め定められた選択基準に従って行われ、第２コンピュータの実行環境とは独立している。
【０００８】
本発明の実装は、次の特徴のうちの１つまたは２つ以上を含むことが可能である。モジュールは、ハイパーテキストマークアップ言語、および／またはプログラムコードなどの、非実行データを含み得る。選択基準は、ストリーミング制御データベースにストアすることができる。ストリーミング制御データベースは、加重された値をコレクション内の選択されたモジュールの間での遷移と関連付ける遷移レコード（transition record）を含むことができる。遷移レコード情報の処理は、パス決定アルゴリズムを使用することなどによって、モジュールのシーケンスを決定するのに使用することができる。ストリーミング制御データベースは、それぞれがモジュールの予め定められたシーケンスを識別するリスト記録を含むことができる。モジュールの選択は、リスト記録を選択することによって行うことができる。モジュールのシーケンスを選択することは、第２コンピュータから第１コンピュータにデータを送信して、シーケンス内の各モジュールを識別する、または実行中のアプリケーションのステータスを識別することを含み得る。例えば、ステータスを識別するデータは、一連のユーザ入力値を含み得る。
【０００９】
また、実装は、次の特徴のうちの１つまたは２つ以上を含み得る。モジュールセットのストリーミングには、割込みが行われることが可能で、第２シーケンスが決定され、この第２シーケンスのストリーミングが発生することが有り得る。モジュールセットのストリーミングには、第２コンピュータから第１コンピュータに送信される、特定のモジュールに対する要求によって割込みが行われ得る。例えば、Ｊａｖａアプレットが、既にストリームとして第２コンピュータに伝送されたものではないＪａｖａクラスにアクセスしようとすることによって、Ｊａｖａクラスのストリームに割込みを行うことが有り得る。モジュールのシーケンスのストリーミングが行われ、実行中のアプリケーションとは独立に第２コンピュータにストアされ得る。つまり、実行中のアプリケーションは、ストリーミングを開始する必要がなく、ストリーミングに気付いている必要がない。ストリーミングされたモジュールはその後、ストリーミングされたモジュール内のロジックとアプリケーション内のロジックを相互接続することによって、第２コンピュータにあるアプリケーションに統合することができる。
【００１０】
また、実装は、次の特徴のうちの１つまたは２つ以上を含み得る。アプリケーションは、割込みステートメントを含み得る。割込みステートメントの実行は、制御を実行プログラムに引き渡し得る。実行（エグゼキュタ）プログラムは、割込みステートメントに応答し、実行中アプリケーションの処理の永久停止（終了）を妨げることによって、プログラムコードデバッガの方式で機能する。この後、実行プログラムは、割込みステートメントを（一般的に、置換ロジックのブロックの一部として）ストリーミングされたモジュールからの置換ロジックによって置え換えることによって、ストリーミングされたモジュール内のロジックをアプリケーションのロジックに統合することができる。この後、アプリケーションは、一般的に、割込みステートメントと入れ替えられた置換ロジックを実行することによって、動作を継続する。また、アプリケーションは、ストリーミングされたモジュール内のロジックによって置き換えることができるスタブプロシージャ（procedure）を含み得る。スタブプロシージャの置き換えは、スタブプロシージャコードを除去して、ストリーミングされたモジュールからのロジックでそれを置き換えることによるなど、直接的であることも、またはストリーミングされたモジュール内のロジックに対するリンクを作成することによるなど、オペラティブであることも可能である。
【００１１】
一般的に別の態様では、本発明は、コンピュータ読取可能媒体上に常駐するコンピュータプログラムを特徴とする。このコンピュータプログラムは、コンピュータに、アプリケーションと関連付けられたモジュールのコレクションにアクセスさせ、モジュール選択基準をストアするデータベースにアクセスさせ、そのモジュール選択基準に従ってそのコレクションからモジュールのシーケンスを選択することによってモジュールセットを形成させ、このモジュールセットを透過的に第２コンピュータにストリーミングさせるための命令を含んでいる。また、プログラムの実装は、コンピュータに、コレクションから第１モジュールをリトリーブさせ、この第１モジュールを第２コンピュータに送信させるための命令も含み得る。
【００１２】
一般的に別の態様では、本発明は、コンピュータ読取可能媒体上に常駐するコンピュータプログラムを特徴とする。このプログラムは、コンピュータに、アプリケーションを実行させ、実行中のアプリケーションと関連付けられたモジュールを透過的に受信させ、この受信されたモジュールを実行中のアプリケーションに統合させるための命令を含んでいる。
【００１３】
一般的に別の態様では、本発明は、コンピュータ間で情報モジュールを転送するためのシステムを備えている。このシステムは、第１コンピュータおよび第２コンピュータを含む。第１コンピュータは、アプリケーションを実行するための手段、アプリケーションが実行されている間にそのアプリケーションと関連付けられたモジュールのシーケンスを受信するための手段、および受信されたシーケンス内の第１モジュールをアプリケーションに統合するための手段を含む。第２コンピュータは、アプリケーションと関連付けられたモジュールのコレクションをストアするための手段、このコレクションからモジュールのシーケンスを選択するための手段、およびこの選択されたシーケンスを第１コンピュータから第２コンピュータに転送するための手段を含む。
【００１４】
また実装は、次の利点のうちの１つまたは２つ以上を含む。アプリケーション、コードモジュール、またはデータモジュールをダウンロードしているときに経験する遅延を短縮することができる。ソフトウェアおよびデータモジュールを、特定のエンドユーザの要求に従って、クライアントワークステーションに予測的に配信することができる。モジュールがサーバからクライアントにストリームとして伝送される順序を、動的に決定することができる。モジュール配信シーケンスのコレクションを特定のアプリケーションまたはユーザと関連付けることができ、また、そのシーケンスを動的に更新することができる。モジュール配信シーケンスを、ソフトウェア使用の個別パターン、またはモジュール使用と関連付けられた、ストアされている統計に基づいて決定することができる。アプリケーションの実行の間に、モジュールストリーミングに割込みを行い、それを変更することができる。実装は、以下の記載と特許請求の範囲から明らかになるとおり、追加または代替の利点を含み得る。
【００１５】
（詳細な説明）
図１を参照すると、ワイドエリアネットワーク１００が示されている。ネットワーク１００において、クライアントコンピュータ１０１は、リンク１０３および１０４上でデータネットワーク１３０にデータを送ることによって、サーバコンピュータ１０２と通信することができる。データネットワーク１３０は、クライアント１０１とサーバ１０２との間でデータを送ることができる複数のノード１３１〜１３４を含むことができる。クライアントコンピュータ１０１は、ＴＣＰ／ＩＰ、ＨＴＴＰ、および他のプロトコルを使用して、データを送信し、受信することができる。例えば、クライアント１０１は、ＨＴＴＰを使用して、サーバ１０２からウエッブページを要求することができる。
【００１６】
サーバ１０２からクライアント１０１に送られたウエッブページおよびマルチメディアデータは、それらに関連付けられた自然線形シーケンスを有することができる。ビデオデータの自然シーケンスは、ビデオフレームの線形な順序であり、一方テキストの自然シーケンスは、テキストのページがドキュメント内で構成されている順序である。自然線形シーケンスを有するデータは、サーバからクライアントにストリームし、ダウンロードの遅延を最小にすることができる。ストリーミングシステムでは、線形シーケンスのより前のアイテムを処理および／または表示しながら、後続のアイテムをクライアントコンピュータにダウンロードすることができる。アイテムの処理および／または表示が完了したとき、処理または表示または完全に受信した「ストリーミングされた」アイテムが、直ちに開始することができる。アイテムが要求されるとき、ストリーミングされたアイテムの受信は、完全または部分的に終了しているので、そのストリームされたアイテムを要求するユーザまたはクライアントアプリケーションは、低減されたダウンロードの遅延を知覚することになる。例えば、ドキュメントの第１ページをユーザが検索する場合、第１ページを読みながら第２ページをダウンロードすることができる。ユーザがドキュメントの第２ページを読み続ける場合、ハードディスクドライブ上のキャッシュエリア内などのクライアントのところでページは利用可能となり、追加のダウンロードの遅延なしで読むことができる。
【００１７】
ソフトウエアの実行は、予想可能な自然線形順序に従わない可能性がある。ソフトウエアは、ジャンプ命令文、ブレイク命令文、プロシージャコール、および実行コードのセクション内で突然実行を転送させる他のプログラミング構造体を含むことができる。相互に関係付けられたコードモジュール（コードセグメント、コードクラス、アプレット、プロシージャ、およびコードライブラリなど）の処理中にトラバース（traverse）された実行パスは、しばしば非線形で、ユーザに依存するようになり、アプリケーションプログラムを実行する度に変化することができ、また様々なデータアイテムの状態に応じて変化することができる。自然な順序は欠如している可能性があるが、モジュールをストリームする有利な順序を決定することができる。その順序は、コンピュータの内部構造または内部オペレーティングシステム（実行環境）の考慮事項に依存しない基準を用いて決定することができる。
【００１８】
図２を参照すると、ソフトウエアアプリケーション２００は、「Ａ」から「Ｈ」の複数のモジュールを含むことができる。モジュール「Ａ」から「Ｈ」は、Ｊａｖａクラス、Ｃ＋＋プロシージャライブラリ、またはサーバのところでストアすることができる他のコードモジュールとすることができる。またモジュール「Ａ」から「Ｈ」のいくつかは、ハードディスクキャッシュ内やクライアントコンピュータにストアされているソフトウエアライブラリの部分として、クライアントコンピュータのところでストアすることができる。クライアントコンピュータがアプリケーション２００の実行を開始するとき、モジュール「Ａ」などの第１モジュールは、サーバからダウンロードすることができ、クライアント４１０のところで実行を開始することができる。モジュール「Ａ」が処理されているとき、その中に含まれているプログラミング命令文は、例えばモジュール「Ｅ」にブランチすることができる。モジュール「Ｅ」がまだクライアントのところに存在しない場合、モジュール「Ａ」の実行を中断し、モジュール「Ｅ」をサーバから検索（リトリーブ）することができ、次いでモジュール「Ｅ」のコードの実行を開始することができる。そのようなシナリオでは、ユーザは、サーバからモジュール「Ｅ」をリトリーブすることに関連付けられたモジュールダウンロードの遅延を経験することになる。
【００１９】
ユーザが経験するモジュールダウンロードの遅延を最小にするために、モジュール「Ｅ」を、透過的にサーバからクライアントコンピュータにストリームすることができる。透過的なストリーミングにより、他の相互に関係付けられたモジュール「Ａ」を実行しながら、将来のモジュールの使用を予測し、モジュールをダウンロードすることが可能となる。図４を参照すると、透過的なストリーミングを提供する例示的ソフトウエア構造４００が示されている。ソフトウエア構造４００は、ストアされたソフトウエアモジュールのデータベース４０３を有するサーバ４０１を含む。サーバ４０１は、通信リンク上で、透過的にソフトウエアモジュール４０５のストリームをクライアントコンピュータ４１０に送信することができる。通信リンクは、アナログモデム接続、デジタル加入者ライン接続、ローカルエリアネットワーク接続、またはサーバ４０１とクライアント４１０の間のその他のタイプのデータ接続とすることができる。特定のソフトウエアモジュールがクライアント４１０のところで実行されているとき、追加のモジュールが、サーバ４０１からクライアント４１０に送られる。動的なストリーミングの実装では、サーバとクライアントの間でモジュールをストリームする順序は、使用されている特定のクライアントコンピュータ４１０に基づいて、クライアントコンピュータのユーザに基づいて、および他の動的に決定される因子に基づいて変更することができる。
【００２０】
図３を参照すると、アプリケーションモジュール「Ａ」から「Ｈ」の実行順序は、モジュールの線形シーケンスではなく、有向グラフ３００に類似することができる。例えば、グラフ３００で示すように、モジュール「Ａ」を実行した後、モジュール「Ｂ」、「Ｄ」、または「Ｅ」のところで実行を続けることができる。モジュール「Ｂ」を実行した後、モジュール「Ｃ」または「Ｇ」のところで実行を続けることができる。続いて、実行パスは、追加のモジュールへと進み、以前に実行したモジュールに戻ることができる。
【００２１】
サーバ４０１は、ストリーム制御情報４０２を使用して、サーバ４０１からクライアント４１０にモジュールをストリームする順序を決定することができる。例えば、ストリーム制御情報４０２は、有向グラフ３００によって表されているようなソフトウエアモジュール間の予測された実行フローを含むことができる。ダウンロードしたモジュールをクライアント４１０によって実行するとき、クライアントは、制御データ４１５をサーバ４０１に送り、モジュールをサーバ４０１からクライアント４１０にストリームする順序を、動的にアップデートおよび変更することができる。制御データ４１５を使用して、サーバ４０１から特定のモジュールを要求し、アプリケーションプログラムの現在の実行状態に関するデータを送り、クライアントのローカル記憶装置４１１にあるモジュールの現在の目録（inventory）を詳述し、およびユーザの入力選択と、プログラム実行の統計と、クライアントコンピュータ４１０およびその実行ソフトウエアに関して得られた他のデータとを報告することができる。
【００２２】
ストリーム４０５内で、サーバ４０１からクライアント４１０に送られたモジュールのシーケンスは、ストリーム制御ファイル４０２を用いて決定することができる。ストリーム制御ファイル４０２は、クライアント４１０のところで必要となるモジュールを予測するために、サーバが使用するデータを含むことができる。グラフをベースとする実装では、制御ファイル４０２は、有向グラフのノードとしてモジュールを表すことができる。また制御ファイル４０２は、モジュール間の可能な実行の移動を、ノードを相互接続する頂点（「エッジ（edge）」）として表すことができる。表１を参照すると、重み付きのグラフの実装では、ストリーム制御ファイル４０２は、モジュール間の可能な移動を表す頂点のリストを含むことができる。例えば、表１は、グラフ３００（図３）の「Ａ」から「Ｈ」のモジュール間の全ての可能な移動を表す頂点を列挙している。表１の各頂点は、モジュール間で特定の遷移が生じる相対的な可能性を示す重みの値を含む。表１の例では、重みの値がより大きいと、移動の可能性がより低いことを示す。サーバ４０１は、最短パスのグラフ・トラバース・アルゴリズム（graph traversal algorithm）（また「最低コスト」アルゴリズムとしても知られている）を適用して、現在実行しているモジュールに基づいて、所望のモジュールストリーミングシーケンスを決定することができる。最短パスアルゴリズムの例は、１９８７年のＭｉｓｃｈａ  Ｓｃｈｗａｒｔｚ、Ａｄｄｉｓｏｎ  ＷｅｓｌｅｙによるＴｅｌｅｃｏｍｍｕｎｉｃａｔｉｏｎｓ  Ｎｅｔｗｏｒｋｓ：Ｐｒｏｔｏｃｏｌｓ、Ｍｏｄｅｌｉｎｇ  ａｎｄ  Ａｎａｌｙｓｉｓの§６に見出すことができる。
【００２３】
【表１】
0004607320.tif 000002
【００２４】
例えば、表２は、モジュール「Ａ」と表１の残りのモジュールの間の最小パスの重みを表す。
【００２５】
【表２】
0004607320.tif 000003
【００２６】
表２に示す重みの値に基づいて、サーバ４０１は、モジュール「Ａ」の実行中に、モジュールストリームシーケンス「Ｂ」、「Ｃ」、「Ｅ」、「Ｇ」、「Ｈ」、「Ｄ」、「Ｆ」が有利であることを決定することができる。制御データ４１５によって報告された可能性があるように、決定されたシーケンス内の特定のモジュールが既にクライアント４０２のところに存在する場合は、サーバ４０１は、モジュール４０５のストリームからそのモジュールを削除することができる。シーケンス「Ｂ」、「Ｃ」、「Ｅ」、「Ｇ」、「Ｈ」、「Ｄ」、「Ｆ」の実行中に、モジュール「Ａ」の実行が完了し、他のモジュールの実行が開始する場合、サーバは、シーケンス「Ｂ」、「Ｃ」、「Ｅ」、「Ｇ」、「Ｈ」、「Ｄ」、「Ｆ」の引渡しに割り込み、現時点の実行モジュールに基づいて新しいシーケンスを計算し、新しく計算したストリーミングシーケンスに基づいてストリーミングを再開することができる。例えば、実行がモジュール「Ａ」からモジュール「Ｂ」に移動する場合、モジュール「Ｂ」が現在実行しているモジュールであることを示す制御データ４１５を、クライアント４１０からサーバ４０１に送ることができる。モジュール「Ｂ」がまだクライアント４０１のところで利用可能でない場合は、サーバ４０１は、クライアントへのモジュール「Ｂ」の引渡しを終了し、新しいモジュールストリーミングシーケンスを決定することになる。最短パスのルーティングアルゴリズムを、開始点とするモジュール「Ｂ」に基づいて、表１のエッジに適用することにより、表３に示すように、モジュール「Ｂ」とグラフ３００（図３）の他のモジュールの間の最小パスの重みを決定することができる。
【００２７】
【表３】
0004607320.tif 000004
【００２８】
表３に示す最短パスの重みに基づいて、サーバ４０１は、モジュールストリーミングシーケンス「Ｃ」、「Ｇ」、「Ｅ」および「Ｈ」が有利であることを決定することができる。
【００２９】
また、他のアルゴリズムを使用して、モジュールのストリーミングシーケンスを決定することができる。例えば、より重い重みの付いたエッジが、グラフに示すモジュール間の好ましいパスであることを示している重み付きのグラフ３００を使用することができる。表４では、より大きな値を割り当てられた重みの値は、モジュール間の好ましい移動を示す。例えば、エッジ（Ａ、Ｂ）、（Ａ、Ｄ）、および（Ａ、Ｅ）は、モジュールＡからの３つの可能な移動である。エッジ（Ａ、Ｂ）は、エッジ（Ａ、Ｄ）および（Ａ、Ｅ）より大きな重みの値を有しているので、好ましく、したがって、モジュール「Ａ」が開始点である場合、モジュール「Ｄ」または「Ｅ」の前にモジュール「Ｂ」をストリームすることが好ましい可能性がある。例えば、エッジの重みの値は、特定のモジュールがクライアントによって要求された回数の履歴カウント、コードモジュールの相対送信時間、またはシステムアドミニストレータによって経験的に決定され、サーバ４０１で表４０２にストアされている値、とすることができる。他のエッジの重みの計算方法を使用することもできる。
【００３０】
【表４】
0004607320.tif 000005
【００３１】
好ましいパス（重く重み付けしたエッジを第１とする）の実装では、より大きな重みの値を有しているグラフ３００のエッジが好まれる。以下の例示的アルゴリズムを使用して、好ましいパスの実装でのモジュールストリーミングシーケンスを決定することができる。
【００３２】
１：２つの空の順序付けしたセットを作成する：
ｉ）「Ｓ」がノード識別子であり、「Ｗ」がノード「Ｓ」に到達するようにトラバースすることができるエッジの重みである対（Ｓ、Ｗ）をストアする候補セット
ｉｉ）決定されたコードモジュールのストリームをストアするストリームセット
２：Ｓｉを開始ノードとする。
３：ノードＳｉをストリームセットに添付し、候補セットから任意の対（Ｓｉ、Ｗ）を除去する。
４：重みＷｊを有するエッジ（Ｓｉ、Ｓｊ）によってノードＳｉから到達することができる各ノードＳｊに対し：
｛
Ｓｊがストリームセットのメンバでない場合、候補セットに対（Ｓｊ、Ｗｊ）を追加する。
Ｓｊが候補セットの複数の対に現われる場合、最大重み（Ｓｊ、Ｗ）の対を除いて、全ての対を候補セットから除去する。
｝
５：候補セットが空でない場合、
候補セットから最大重みの対（Ｓｋ、Ｗｋ）を選択する。
Ｓｉ＝Ｓｋとする。
ステップ３で反復する。
【００３３】
例えば、表５に示すように、ノード「Ａ」のところで開始し、上記のアルゴリズムを表４のエッジに提供することにより、ストリームセット｛Ａ、Ｂ、Ｃ、Ｅ、Ｈ、Ｇ、Ｄ、Ｆ｝が作成される。
【００３４】
【表５】
0004607320.tif 000006
【００３５】
実装は、代替のアルゴリズムを選択して、ストリームセットを計算するすることができる。
【００３６】
また、アプリケーションストリーミングを用いて、アプリケーションまたはモジュールのサブセクションをストリームすることができる。例えば、Ｃ、Ｃ＋＋、フォートラン、パスカル、またはアセンブリ言語で書かれているアプリケーションなどのコンパイルされたアプリケーションのサブセクションは、サーバ４０１からクライアント４１０にストリームすることができる。図５Ａを参照すると、アプリケーション５００は、メインコードモジュール５０１およびコードライブラリ５１０ならびに５１５などの複数のコードモジュールを含むことができる。メインモジュール５０１は、アプリケーションが開始されるとき実行されるプログラムコードを含む。コードライブラリ５１０および５１５は、ヘッダデータ５１１および５１６、並びに、メインモジュール５０１および他のライブラリプロシージャから直接または間接的に呼び出される実行可能なプロシージャ５１２〜５１４および５１７〜５１９を含むことができる。
【００３７】
マイクロソフトウィンドウズ９５／マイクロソフトビジュアルＣ＋＋の実装では、メインコードモジュール５０１は、コンパイルされたＣ＋＋「メイン」プロシージャを含むことができ、ライブラリモジュール５１０および５１５は、コンパイルされたＣ＋＋オブジェクトコードプロシージャを有する動的リンクライブラリとすることができる。ヘッダデータ５１１および５１６は、動的にライブラリ５１０および５１５をメインモジュール５１０とリンクするために、オペレーティングシステムのリンクプロシージャが使用する記号名を含むことができる。またヘッダデータは、ライブラリ内の各プロシージャの位置（location）を示すことができる。ジャンプの表の実装では、コーリングプロシージャは、ヘッダ５１１または５１６内の予め定められた位置にジャンプし、そこから追加コードおよび／またはデータにアクセスし、結果的に続いてプロシージャの開始にジャンプすることによって、ライブラリプロシージャ５１２〜５１４、５１７〜５１９にアクセスすることができる。
【００３８】
アプリケーションのコードモジュールおよびライブライ内のデータおよびプロシージャは、何百または何千というバイトの長さとすることができる。アプリケーションを実行する前に、クライアントは、モジュールおよびライブラリの長いセットの検索を必要とすることがある。モジュールおよびライブラリのセットのサイズを低減することによって、アプリケーション実行前に経験された当初の遅延を低減することができる。アプリケーション５００のストリーミングの実装において、アプリケーションのコードモジュールのサブセクション内のコードを除去し、短縮したストリーミングの「スタブ」プロシージャで置き換えることができる。アプリケーションコードをストリーミングスタブプロシージャで置き換えることにより、モジュールサイズおよび関連付けられた送信の遅延を低減することができる。例えば、図５Ａおよび５Ｂを参照すると、コードライブラリ５１０は、長さが４キロバイト（Ｋバイト）であるヘッダ５１１と、それぞれ３２Ｋバイト、１６Ｋバイト、および８Ｋバイトであるプロシージャ５１２〜５１４を含むことができる。図５Ｂおよび５Ｃを参照すると、ライブラリ５１０のサイズを低減するために、プロシージャコード５１２〜５１４をライブラリ５１０から除去し、サーバ４０１（図４）のところでストリーミングコードモジュールデータベース４０３にストアすることができる。除去されたプロシージャコード５１２〜５１４は、「スタブ」プロシージャ５１５〜５１７によって置き換えられ、結果的に、ライブラリ５１０の代わりに、アプリケーションモジュール５０１および５２０とリンクすることができる、サイズが低減したコードライブラリ５３０を得る。ライブラリ５３０のヘッダデータ５１１は、アップデートされたジャンプ、またはスタブプロシージャ５１５〜５１７がプロシージャ５１２〜５１４のリンクタイム代用物として作用することを可能とするリンク情報を含むことができる。
【００３９】
サーバ４０１は、メインモジュール５０１と、ライブラリモジュール５２０と、「ストリームされた」ライブラリ５３０とを送ることによって、クライアント４１０にアプリケーション５００のストリーミング可能なバージョンを提供することができ、いくつかの実装では、アプリケーション５００に対する要求に応答して、クライアント４１０に、ストリーミングサポートファイル５３５を提供することができる。ストリーミングサポートファイル５３５は、サーバ４０１とクライアント４１０との間で、コードストリーミングを容易にするために、スタブ５１５〜５１７によってアクセスされるプロシージャを含む。クライアント４１０のところで、モジュール５０１、５２０、５３０、および５３５をリンクし、結果的に得られるアプリケーションの実行を開始することができる。メインモジュール５０１および様々な呼び出されたプロシージャをクライアント４１０のところで実行するとき、データベース４０３にストアされたコードモジュールを、サーバ４０１からクライアント４１０にストリームすることができる。データをストリーム４０３に含め、ストリームされたコードモジュールに関連付けられたスタブプロシージャ４１４〜４１７を識別することができる。ストリームされたモジュールがクライアントのところで受信されるとき、それらは、実行アプリケーションと統合される。
【００４０】
添付されたモジュールの実装では、ストリームされたコードモジュールは、受信したモジュールを対応するライブラリまたはコードファイルに添付することによって、実行アプリケーションと統合される。例えば、図５Ｃおよび５Ｄを参照すると、モジュール５１２〜５１４がサーバからクライアントにストリームされるとき、それらはライブラリファイル５３０に添付され、それにより、増大されたライブラリファイル５４０を形成する。モジュール５１２〜５１４をサーバ４０１からストリームし、ファイル５３０に添付するとき、ヘッダデータ５１１またはスタブデータ５１５〜５１６はアップデートされ、したがって、現時点で添付されたモジュールは、呼び出し（コーリング）プロシージャからアクセスすることができる。例えば、図５Ｄを参照すると、追加の「ジャンプ」を、各スタブプロシージャ５１５〜５１７とそれに関連付けられた添付のモジュール５１２〜５１４の間で追加することができる。代替として、ヘッダデータ５１１をアップデートし、スタブ５１５〜５１７の代わりに、プロシージャ５１２〜５１４をアクセス可能とすることができる。スタブ置換の実装では、モジュールがサーバ４０１から受信されるとき、スタブ５１５〜５１６はプロシージャモジュール５１２〜５１４で置き換えられる。スタブ置換は、置換コードが受信されるとき、コードモジュールまたはライブラリ内で、残りのスタブまたはプロシージャの位置を変更あるいは再構成することを要求する可能性がある。実装は、ストリームされたコードを実行アプリケーションおよびモジュールと統合するさらに他の方法を使用することができる。
【００４１】
いくつかのシナリオでは、上記の例ではスタブ５１５〜５１７によって置き換えられているプロシージャコード５１２〜５１４などの除去されたコードは、それをサーバ４０１からストリームし、モジュール５３０と統合する前に、必要とする可能性がある（他のプロシージャによって呼び出される）。そのような場合では、スタブコード５１５〜５１６は、ストリーミングサポートライブラリ５３５内でストリーミング機能にアクセスし、必要なプロシージャを獲得することができる。そのために、ストリーミングサポートライブラリ５３５は、制御データ４１５をサーバ４０１に送り、必要なプロシージャを要求することができる。応答して、サーバ４０１は、現在のモジュールストリーム４０５を中止して、要求されたモジュールを送ることができる。要求されたモジュールを受信する際に、ストリーミングサポートライブラリ５３５内のプロシージャを使用して、受信したモジュールをアプリケーションと統合し、要求されたモジュールの実行を続けることができる。その後サーバは、要求されたモジュールまたはクライアントから受信された他の制御データ４１５に基づいて、新しいモジュールストリームを決定することができる。
【００４２】
コードモジュールは、スタブプロシージャを使用せずに、サイズを低減することができる。例えば、図４、５Ａ、５Ｂ、および５Ｅを参照すると、割込みが駆動された実装では、プロシージャコード５１２〜５１４をコードライブラリ５１０から除去し、データベース４０３にストアすることができる。次いで、ヘッダ情報５１１並びに除去されたプロシージャコード５１２〜５１４のサイズおよび位置を示すデータを、クライアント４１０に送信することができる。クライアント４１０は、除去されたプロシージャコード５１２〜５１４の代わりに、一連の割込み命令文を添付することによって、新しいライブラリ５５０を構築することができる。アプリケーション５００を実行するとき、コードライブラリ５５０をライブラリ５１０の代用とし、プログラム５００の実行を開始することができる。プログラム５００を実行するとき、除去されたプロシージャコード５１２〜５１４をクライアント４１０にストリームし、ローカルデータベース４１１にストアする。アプリケーション５００が、プロシージャコード５１２〜５１４を実行することを試みる場合、代わりに、プロシージャコード５１２〜５１４と置き換わっている割込み命令文の１つを実行することができる。停止（halt）命令文の実行は、プログラム５００の実行を中止し、制御をストリーミングエグゼキュタプログラム４１５に転送する。
【００４３】
エグゼキュタ４１５は、従来のランタイムオブジェクトコードデバッガの技術と同様のインターフェース技術を実施し、それにより、エグゼキュタ４１５は、アプリケーション５００によって生成された割込みをインターセプトし、処理することが可能となる。エグゼキュタ４１５によって割込みがインターセプトされるとき、クライアントの実行プラットフォーム（オペレーティングシステム）割込み処理機能の部分としてエグゼキュタ４１５に提供されたデータを使用して、割込みが実行されたモジュール５５０と、モジュール内の割込みコードのアドレスを識別することができる。次いでエグゼキュタ４１５は、割込み位置に関連付けられたプロシージャコード５１２〜５１４が、クライアントに送られたモジュールストリーム４１５の部分として受信されたかを決定する。適切なプロシージャコードが受信されている場合、エグゼキュタ５１５は、識別した割込みを対応するコードで置き換える。例えば、プロシージャ５１２〜５１４を、クライアント４１０にストリームされる４キロバイトのコードモジュールに分割することができる。割込み命令文が、アプリケーション５００によって実行されるとき、エグゼキュタ４１５は、割込みをインターセプトし、割込み命令文を含む適切な４キロバイトのコードブロックを決定し、決定されたコードブロックを受信したコードモジュールで置き換える。適切なコードモジュールがまだ受信されていない場合、明確な要求をクライアント４１０からサーバ４０１に送り、コードモジュールを検索した後、ライブラリ５５０に挿入することができる。その後エグゼキュタ４１５は、遭遇した割込みのアドレスのところでアプリケーション５００を再開することができる。
【００４４】
また実装は、モジュールまたはライブラリの全体をストリームすることができる。例えばコードライブラリ５１０および５１５をサーバ４０１からクライアント４１０にストリームする間、メインコードモジュール５０１をサーバ４０１から受信し、クライアント４１０のところで実行を開始することができる。ストリームされたモジュールを実行モジュールと統合することは、クライアント４１０の動的モジュールリンク機能（facility）によって提供することができる。例えば、マイクロソフトビジュアルＣ＋＋６．０によって提供される遅延インポートローディングを使用して、ストリームされたモジュール５１０および５１５を、実行モジュール５０１と統合することができる。ストリームされたモジュールの動的リンクは、ストリームされたモジュールをローカルハードディスクドライブ上またはクライアント４１０のリンクローディング機能によってアクセス可能な他の格納装置の位置にストアすることによって、容易にすることができる。例示的な実装では、クライアント４１０のオペレーティングシステムのリンク機能を変更することによって、ストリーミングが容易になり、したがって、モジュールがまだクライアント４０１にストリームされていない場合、リンク機能は、制御データ４１５をサーバ４０１に送ることができる。
【００４５】
保護メモリのコンピュータシステムでは、実行アプリケーションコードおよびデータの直接操作が限定されている可能性がある。そのようなシステムでは、ストリームされたモジュールを実行アプリケーションと統合することをサポートするために、「カーネル」レベルのプロセスまたはプロシージャを必要とする可能性がある。そのような場合、ストリーミングサポート５３５は、クライアントがアプリケーション５００を要求する前に、クライアント４１０のところで、サポートプロシージャをインストールすることによって、予め準備することができる。
【００４６】
ストリームセットを決定する他の方法を使用することができる。リストをベースとする実装では、ストリーミング制御ファイルは、モジュールストリーミングシーケンスの予め定められたリストを含むことができる。例えば、ストリーミング制御ファイル４０２は、第１ユーザに関連付けられたモジュールストリーミングシーケンスのリストと、第２ユーザに関連付けられた第２モジュールストリーミングシーケンスのリストとを含むことができる。クライアント４１０からサーバ４０１に送られた制御データ４１５は、クライアント４１０のところで、現在のユーザを識別することができる。サーバに対しユーザが識別された後は、サーバは、ユーザの関連付けられたストリーミングシーケンスのリストに従って、ソフトウエアモジュールをストリームすることができる。ユーザベースのストリーミングデータは、ユーザの過去の行動を使用してそのユーザがアクセスするモジュールの順序を予測することができる場合に有利である可能性がある。
【００４７】
グラフベースのストリーミング制御ファイルの実装では、ノードを接続するエッジの重みは、静的または動的に決定することができ、またこれまでの使用データの収集に基づいて決定することができる。例えば、プログラマ制御の実装では、ソフトウエアのプログラマは、プログラマのソフトウエアコードと予期されるアプリケーションの使用パターンの知識に基づいて、ノード間の特定の移動が生じる可能性を推定する。代替として、アプリケーションプロファイリングプログラムを使用して、様々なアプレット、クラス、またはコードモジュール間の移動を記録するランタイム実行データを収集し、それにより、特定の移動が生じる可能性を決定することができる。クライアントフィードバックの実装では、モジュール実行中に、クライアント４１０からサーバ４０１に送られた制御データ４１５を使用して、モジュール使用の統計的データベースを構築し、そのデータベースに基づいて、モジュールをストリーミングする順序を決定する。
【００４８】
クライアント制御のストリーミングの実装では、ストリーミング制御データ４０２をクライアント４１０に配置し、クライアント４１０からサーバ４０１に送られた制御データ４１５を使用して、連続してサーバからモジュールのストリームを要求することができる。例えば、クライアントコンピュータ４１０が第１モジュールを実行している間、バックグラウンドプロセスは、制御データ４１５をサーバに送り、クライアントコンピュータ４１０のハードディスク４１１上でバッファすることができる追加のモジュールを要求することが可能である。クライアント制御のストリーミングの実装は、存在するＨＴＴＰサーバおよびＨＴＴＰプロトコルを使用して、クライアント４１０からサーバ４０１に要求を送り、サーバ４０１からクライアント４１０にソフトウエアモジュールを送ることができる。さらに、ソフトウエアモジュールのストリーミングは、上記の説明で強調されているが、ハイパーテキストマークアップ言語、２進グラフィックファイル、およびテキストなどの非実行データは、モジュールの収集としてストリームすることができる。
【００４９】
実装は、「ハンドシェーキング」プロシージャを含むことができ、それにより、アプリケーション実行の開始時に、サーバ４０１とクライアント４１０の間で制御データ４１５が送られる。ハンドシェーキングデータは、クライアントおよびサーバのところにあるアプリケーションモジュールの在庫を含むことができる。そのようなハンドシェーキングデータにより、クライアント４１０とサーバ４０１の両方が、それぞれのソフトウエアモジュールの在庫を決定し、その在庫情報に基づいて、ソフトウエアモジュールのストリームを最適化することが可能となる。
【００５０】
履歴（ヒストリ）に依存する実装では、サーバまたはクライアントは、モジュール間の一連の移動に関するデータをストアし、移動の履歴に基づいて、新しいモジュールのストリームを計算することができる。例えば、図３を参照すると、モジュール「Ｇ」がパスＡ−Ｂ−Ｇによって到達された場合、サーバまたはクライアントは、次が「Ｈ」であるモジュール「Ｅ」をストリームすることを決定することができる。他方、モジュール「Ｇ」がパスＡ−Ｂ−Ｃ−Ｇによって到達された場合、ストリーミングシーケンスは、モジュール「Ｈ」のみを含むことができる。
【００５１】
本発明は、コンピュータハードウエア、ファームウエア、ソフトウエア、デジタル電子回路において、またはそれらの組み合わせで実施することができる。本発明の装置は、プログラム可能なプロセッサで実行するためのマシン読取り可能記憶装置内に有形で組み込まれているコンピュータプログラム製品において実施することができる。また、本発明の方法のステップは、入力データに関して動作し、および出力を作成することによって本発明の機能を実施するために、命令プログラムを実行するプログラム可能なプロセッサによって実施することができる。
【００５２】
本発明は、データストアシステムからデータと命令を受信し、およびデータストアシステムにデータと命令を送信するために結合されている少なくとも１つのプログラム可能なプロセッサと、少なくとも１つの入力デバイスと、少なくとも１つの出力デバイスとを含むプログラム可能なシステム上で実行可能である１つまたは２つ以上のコンピュータで実施することが有利である可能性がある。各コンピュータプログラムは、高水準手続プログラミング言語またはオブジェクト指向のプログラミング言語、あるいは所望であればアセンブリ言語または機械言語で実施することができる。いずれの場合でも、言語は、コンパイルされた言語または解釈された言語とすることができる。例として、適切なプロセッサは、汎用および専用のマイクロプロセッサの両方を含む。一般に、プロセッサは、読取り専用メモリおよび／またはランダムアクセスメモリから命令およびデータを受信する。
【００５３】
有形に組み込んでいるコンピュータプログラムの命令およびデータに適したストレージデバイスは、例としてＥＰＲＯＭ、ＥＥＰＲＯＭ、およびフラッシュメモリデバイスなどの半導体メモリデバイス、内部ハードディスクおよび取外し可能ディスクなどの磁気ディスク、光磁気ディスク、およびＣＤ−ＲＯＭディスクを含む、不揮発性メモリの全ての形態を含む。上記のいずれも、専用に設計されたＡＳＩＣ（特定用途向け集積回路）によって補足し、またはその内部に組み込むことができる。
【図面の簡単な説明】
【図１】  コンピュータネットワークを示す図である。
【図２】  コンピュータソフトウェアアプリケーションモジュールを示す図である。
【図３】  本発明による、有向グラフである。
【図４】  本発明による、サーバおよびクライアントを示す図である。
【図５Ａ】  本発明による、アプリケーションコード構成要素を示す図である。
【図５Ｂ】  本発明による、アプリケーションコード構成要素を示す図である。
【図５Ｃ】  本発明による、アプリケーションコード構成要素を示す図である。
【図５Ｄ】  本発明による、アプリケーションコード構成要素を示す図である。
【図５Ｅ】  本発明による、アプリケーションコード構成要素を示す図である。
【図１】
0004607320.tif 000007
【図２】
0004607320.tif 000008
【図３】
0004607320.tif 000009
【図４】
0004607320.tif 000010
【図５Ａ】
0004607320.tif 000011
【図５Ｂ】
0004607320.tif 000012
【図５Ｃ】
0004607320.tif 000013
【図５Ｄ】
0004607320.tif 000014
【図５Ｅ】
0004607320.tif 000015