(57)【要約】【課題】ストリーミング技術を用いた複数ターゲット上でのソフトウェア・イメージの展開を提供する。【解決手段】ターゲット・データ処理システムの複数のターゲット・データ処理エンティティ上にソース・データ処理システムからソフトウェア・イメージを展開する方法であって、ソフトウェア・イメージは、個々にアクセス可能な複数のメモリ・ブロックを備え、メモリ・ブロックの事前定義されたサブセットが、ブートストラップ・モジュールを定義しており、この方法が、ブートストラップ・モジュールを、ソース・データ処理システムから、ターゲット・データ処理エンティティのうちのメインのターゲット・データ処理エンティティ上にダウンロードする（４０６）ステップと、メイン・ターゲット・データ処理エンティティをブートストラップ・モジュールからブートし、それにより、ブートストラップ・モジュールに含まれるストリーミング・ドライバをロードする（４０７〜４０９）ステップと、メイン・ターゲット・データ処理エンティティ上のソフトウェア・イメージの選択メモリ・ブロックにアクセスする各要求に、ストリーミング・ドライバにより応じる（４１０〜４２２）ステップであって、ストリーミング・ドライバが、選択メモリ・ブロックにアクセスする要求の最初のものに応じて、ソース・データ処理システムから選択メモリ・ブロックをダウンロードし（４１３〜４１４）てメイン・ターゲット・データ処理エンティティに選択メモリ・ブロックを格納する（４１５〜４１６）か、またはその他の場合、メイン・ターゲット・データ処理エンティティ内の選択メモリ・ブロックにアクセスする（４１７）、ステップと、ブートストラップ・モジュールを、ターゲット・データ処理エンティティのうちの一組のセカンダリ・ターゲット・データ処理エンティティの各々に提供する（４２３〜４２７）ステップと、ブートストラップ・モジュールから各セカンダリ・ターゲット・データ処理エンティティをブートし（４２８〜４２９）、これにより、ストリーミング・ドライバをロードするステップと、セカンダリ・ターゲット・データ処理エンティティ上のソフトウェア・イメージの追加の選択メモリ・ブロックにアクセスする各要求に、ストリーミング・ドライバにより応じる（４３０〜４４８）ステップであって、ストリーミング・ドライバが、追加の選択メモリ・ブロックにアクセスする要求の最初のものに応じて、メイン・ターゲット・データ処理エンティティから追加の選択メモリ・ブロックを取得し（４３３〜４４０）てセカンダリ・ターゲット・データ処理エンティティに追加の選択メモリ・ブロックを格納する（４４１〜４４２）か、またはその他の場合、セカンダリ・ターゲット・データ処理エンティティ内の追加の選択メモリ・ブロックにアクセスする（４４３）、ステップと、を含む。【選択図】図５
2015501995.tif 000002
【特許請求の範囲】
【請求項１】
ターゲット・データ処理システムの複数のターゲット・データ処理エンティティ上にソース・データ処理システムからソフトウェア・イメージを展開する方法（４００）であって、前記ソフトウェア・イメージは、個々にアクセス可能な複数のメモリ・ブロックを備え、前記メモリ・ブロックの事前定義されたサブセットが、ブートストラップ・モジュールを定義しており、前記方法が、
前記ブートストラップ・モジュールを、前記ソース・データ処理システムから、前記ターゲット・データ処理エンティティのうちのメインのターゲット・データ処理エンティティ上にダウンロードする（４０６）ステップと、
前記メイン・ターゲット・データ処理エンティティを前記ブートストラップ・モジュールからブートし、それにより、前記ブートストラップ・モジュールに含まれるストリーミング・ドライバをロードする（４０７〜４０９）ステップと、
前記メイン・ターゲット・データ処理エンティティ上の前記ソフトウェア・イメージの選択メモリ・ブロックにアクセスする各要求に、前記ストリーミング・ドライバにより応じる（４１０〜４２２）ステップであって、前記ストリーミング・ドライバが、前記選択メモリ・ブロックにアクセスする前記要求の最初のものに応じて、前記ソース・データ処理システムから前記選択メモリ・ブロックをダウンロードし（４１３〜４１４）て前記メイン・ターゲット・データ処理エンティティに前記選択メモリ・ブロックを格納する（４１５〜４１６）か、またはその他の場合、前記メイン・ターゲット・データ処理エンティティ内の前記選択メモリ・ブロックにアクセスする（４１７）、ステップと、
前記ブートストラップ・モジュールを、前記ターゲット・データ処理エンティティのうちの一組のセカンダリ・ターゲット・データ処理エンティティの各々に提供する（４２３〜４２７）ステップと、
前記ブートストラップ・モジュールから各セカンダリ・ターゲット・データ処理エンティティをブートし（４２８〜４２９）、これにより、前記ストリーミング・ドライバをロードするステップと、
前記セカンダリ・ターゲット・データ処理エンティティ上の前記ソフトウェア・イメージの追加の選択メモリ・ブロックにアクセスする各要求に、前記ストリーミング・ドライバにより応じる（４３０〜４４８）ステップであって、前記ストリーミング・ドライバが、前記追加の選択メモリ・ブロックにアクセスする前記要求の最初のものに応じて、前記メイン・ターゲット・データ処理エンティティから前記追加の選択メモリ・ブロックを取得し（４３３〜４４０）て前記セカンダリ・ターゲット・データ処理エンティティに前記追加の選択メモリ・ブロックを格納する（４４１〜４４２）か、またはその他の場合、前記セカンダリ・ターゲット・データ処理エンティティ内の前記追加の選択メモリ・ブロックにアクセスする（４４３）、ステップと、
を含む方法。
【請求項２】
前記ターゲット・データ処理エンティティが、前記ターゲット・データ処理システム上でホストされるターゲット仮想マシンである、請求項１に記載の方法（４００）。
【請求項３】
前記メイン・ターゲット・データ処理エンティティをブートする（４０７〜４０９）前記ステップが、
前記メイン・ターゲット・データ処理エンティティ上で前記ソフトウェア・イメージに含まれるアクセス・サーバを起動する（４０９）ことを含み、
追加の選択メモリ・ブロックにアクセスする各要求に応じる（４３０〜４４８）前記ステップが、
前記追加の選択メモリ・ブロックにアクセスする前記最初の要求に応じて、前記追加の選択メモリ・ブロックを取得する要求を、前記セカンダリ・ターゲット・データ処理エンティティの前記ストリーミング・ドライバにより、前記メイン・ターゲット・データ処理エンティティの前記アクセス・サーバに送信する（４３３）ことと、
前記追加の選択メモリ・ブロックを、前記メイン・ターゲット・データ処理エンティティの前記アクセス・サーバから前記セカンダリ・ターゲット・データ処理エンティティの前記ストリーミング・ドライバに戻す（４３４〜４４０）ことと、
を含む、請求項１または２に記載の方法（４００）。
【請求項４】
前記ブートストラップ・モジュールを、前記ターゲット・データ処理エンティティのうちのメインのターゲット・データ処理エンティティ上にダウンロードする（４０６）前記ステップが、
前記選択メモリ・ブロックにアクセスする前記最初の要求に応じて、前記ソース・データ処理システムから各選択メモリ・ブロックをダウンロードするように前記ストリーミング・ドライバを構成する（４０６）ことを含み、
前記ブートストラップ・モジュールを、前記ターゲット・データ処理エンティティのうちの一組のセカンダリ・ターゲット・データ処理エンティティの各々に提供する（４２８〜４２９）前記ステップが、
前記追加の選択メモリ・ブロックにアクセスする前記最初の要求に応じて、前記メイン・ターゲット・データ処理エンティティから追加の選択メモリ・ブロックそれぞれを取得するように前記ストリーミング・ドライバを構成する（４２７）こと
を含む、請求項３に記載の方法（４００）。
【請求項５】
前記ターゲット・データ処理エンティティのうちの最初のターゲット・データ処理エンティティを、前記ターゲット・データ処理システム上での前記ソフトウェア・イメージの最初の展開のために提供する（４０３）ステップと、
前記最初のターゲット・データ処理エンティティを前記メイン・ターゲット・データ処理エンティティとして設定する（４０５）ステップと、
前記ターゲット・データ処理エンティティのうちの次のターゲット・データ処理エンティティの組を、前記ターゲット・データ処理システム上での前記ソフトウェア・イメージの次の展開のために提供する（４０３）ステップと、
次のターゲット・データ処理エンティティそれぞれをセカンダリ・ターゲット・データ処理エンティティとして設定する（４２３）ステップと、
をさらに含む、請求項１乃至４のいずれかに記載の方法（４００）。
【請求項６】
前記ターゲット・データ処理システムから前記メイン・ターゲット・データ処理エンティティを削除する要求を受信する（４４９）ステップと、
前記セカンダリ・ターゲット・データ処理エンティティの１つを選択する（４５０〜４５２）ステップと、
前記選択したセカンダリ・ターゲット・データ処理エンティティを新しいメイン・ターゲット・データ処理エンティティとして設定する（４５３〜４５６）ステップと、
前記ターゲット・データ処理システムから前記メイン・ターゲット・データ処理エンティティを削除する（４５７）ステップと、
をさらに含む、請求項１乃至５のいずれかに記載の方法（４００）。
【請求項７】
前記セカンダリ・ターゲット・データ処理エンティティの１つを選択する（４５０〜４５２）前記ステップが、
前記セカンダリ・ターゲット・データ処理エンティティのうちの最も古いものを選択する（４５２）ステップ
を含む、請求項６に記載の方法（４００）。
【請求項８】
選択メモリ・ブロックにアクセスする各要求に応じる（４１０〜４２２）前記ステップが、
前記メイン・ターゲット・データ処理エンティティにおいて更新された各選択メモリ・ブロックの指示を保存する（４２２）ことを含み、
前記メイン・ターゲット・データ処理エンティティから前記追加の選択メモリ・ブロックを取得する（４３３〜４４０）前記ステップが、
前記追加の選択メモリ・ブロックが前記ターゲット仮想マシンにおいて更新されたかどうかを確認する（４３４）ことと、
前記追加の選択メモリ・ブロックが前記ターゲット仮想マシンにおいて更新された場合は、前記追加の選択メモリ・ブロックを前記ソース・データ処理システムから前記メイン・ターゲット・データ処理エンティティ上にダウンロードし（４３６〜４３７）、またはその他の場合は、前記メイン・ターゲット・データ処理エンティティから前記追加の選択メモリ・ブロックを読み込む（４３９）ことと、
を含む、請求項１乃至７のいずれかに記載の方法（４００）。
【請求項９】
追加の選択メモリ・ブロックにアクセスする各要求に応じる（４３０〜４４８）前記ステップが、
前記セカンダリ・ターゲット・データ処理エンティティにおいて更新された追加の選択メモリ・ブロックそれぞれの指示を保存する（４４８）こと
を含む、請求項８に記載の方法（４００）。
【請求項１０】
選択メモリ・ブロックにアクセスする各要求に応じる（４１０〜４２２）前記ステップが、
前記メイン・ターゲット・データ処理エンティティにおいて更新された各選択メモリ・ブロックのオリジナル・バージョンを保存する（４２０）ことを含み、
前記メイン・ターゲット・データ処理エンティティから前記追加の選択メモリ・ブロックを取得する（４３３〜４４０）前記ステップが、
前記追加の選択メモリ・ブロックが前記メイン・ターゲット・データ処理エンティティにおいて更新されたかどうかを確認する（４３４）ことと、
前記追加の選択メモリ・ブロックが前記メイン・ターゲット・データ処理エンティティにおいて更新されていない場合は、前記追加の選択メモリ・ブロックを、またはその他の場合は、その前記オリジナル・バージョンを戻す（４３８〜４３９）ことと、
を含む、請求項１乃至７のいずれかに記載の方法（４００）。
【請求項１１】
追加の選択メモリ・ブロックにアクセスする各要求に応じる（４３０〜４４８）前記ステップが、
前記セカンダリ・ターゲット・データ処理エンティティにおいて更新された追加の選択メモリ・ブロックそれぞれのオリジナル・バージョンを保存する（４４６）こと
を含む、請求項１０に記載の方法（４００）。
【請求項１２】
コンピュータ・プログラム（３００）であって、前記コンピュータ・プログラムがデータ処理システム（１００）上で実行される際に、請求項１乃至１１のいずれかに記載の前記方法（４００）の前記ステップを前記データ処理システムに実施させるコード手段を備えるコンピュータ・プログラム。
【請求項１３】
データ処理システム（１００）であって、請求項１乃至１１のいずれかに記載の前記方法（４００）の前記ステップを実施するように構成された手段（３００）を備えるデータ処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の１つ以上の実施形態による解決策は、データ処理分野に関する。特に、本解決策は、ソフトウェア・イメージの展開に関する。
【背景技術】
【０００２】
ソフトウェア・イメージは、最新のデータ処理システムの重要な機能である。一般的に、ソフトウェア・イメージは、（物理的または仮想的）データ処理マシンにあるファイルをカプセル化する構造であり、例えば、そのオペレーティング・システム、アプリケーション・プログラム、もしくはデータまたはそのいずれかの組み合わせを格納する。ソフトウェア・イメージは、非常に簡単な方法で移動、コピー、複製、保護およびプロファイルするのに適している。これらの利点は、ソフトウェア・イメージが仮想マシンで使用される際に明確に知覚される（すなわち、ソフトウェアによる物理マシンのエミュレーション）。確かに、この場合、単に新しい仮想マシンを作成し、次に所望のソフトウェア・イメージからそれをブートすることで、いかなる種類の仮想マシンでもオンデマンドで準備できる。例えば、（複数のデータ処理サービスがクライアント・コンピュータに、その物理的実装には全く依存せずに提供される）クラウド・コンピューティングにおいて、このことは特に有用である。
【０００３】
ソフトウェア・イメージは、一般に、ソース・データ処理システム（例えば、ソース・サーバ）で格納され、そこから、複数のターゲット・データ処理エンティティ（例えば、ターゲット・サーバ上でホストされるターゲット仮想マシン）に展開される。ターゲット・サーバは、一般にソース・サーバから離れている。したがって、そのターゲット仮想マシン上へのソフトウェア・イメージの展開は、比較的長時間のプロセスとなる。
【０００４】
この問題に対処するために、他のターゲット仮想マシンにソフトウェア・イメージ（または、少なくともその一部）を提供するよう、いくつかのターゲット仮想マシンを使用することが提案されている。例えば、特許文献１、特許文献２および特許文献３で記述されている（これらの全体の開示は参照によって本明細書に組み込まれている）。また、他のターゲット・サーバによるアクセスのために、ソース・サーバからターゲット・サーバに至るネットワーク経路に沿って、ソフトウェア・イメージをキャッシュすることも可能である。例えば、非特許文献１で記述されている（これらの全体の開示は参照によって本明細書に組み込まれている）。
【０００５】
いずれの場合でも、それぞれの新しいターゲット仮想マシンは、完全なソフトウェア・イメージが展開された後（一般的には、数時間後）にのみ使用可能となる。
【０００６】
あるいは、各ターゲット仮想マシン上でソフトウェア・イメージ全体を展開するのではなく、そのメモリ・ブロックをオンデマンドでダウンロードすることが可能である。ダウンロードしたメモリ・ブロックを、ローカル・キャッシュに一時的に保存して、場合により、次の使用のために先読みすることができる。特に、非特許文献２（これらの全体の開示は参照によって本明細書に組み込まれている）で記述しているとおり、同一ソフトウェア・イメージの複数のインスタンスが同一ターゲット・サーバで同時に使用されると、そのメモリ・ブロックは、より高速のターゲット仮想マシンの以前のアクセスパターンに従ってより低速のターゲット仮想マシンによって先読みすることができる（これはそれらのパターンが非常に似ているためである）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】米国特許出願公開第２０１１／０２３１８４４号
【特許文献２】米国特許第７７８８７１３号
【特許文献３】米国特許出願公開第２０１１／０２１９３７２号
【非特許文献】
【０００８】
【非特許文献１】Ｄａｔａｃａｓｔ：Ａ  Ｓｃａｌａｂｌｅ  ａｎｄ  Ｅｆｆｉｃｉｅｎｔ  Ｇｒｏｕｐ  Ｄａｔａ  Ｄｅｌｉｖｅｒｙ  Ｓｅｒｖｉｃｅ  ｆｏｒ  Ｄａｔａ  Ｃｅｎｔｅｒｓ、Ｃｈｕａｎｘｉｏｎｇ  Ｇｕｏ他（マイクロソフト社）、Ｍｉｃｒｏｓｏｆｔ  Ｔｅｃｈｎｏｌｏｇｙレポート（ＭＳＲ−ＴＲ−２０１１−７６）
【非特許文献２】Ｏｐｔｉｍｉｚｉｎｇ  Ｍｕｌｔｉ−Ｄｅｐｌｏｙｍｅｎｔ  Ｏｎ  Ｃｌｏｕｄｓ  Ｂｙ  Ｍｅａｎｓ  Ｏｆ  Ｓｅｌｆ−Ａｄａｐｔｉｖｅ  Ｐｒｅｆｅｔｃｈｉｎｇ、Ｎｉｃｏｌａｅ、Ｂｏｇｄａｎ他；Ｃａｐｐｅｌｌｏ、Ｆｒａｎｃｋ他、Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  Ｃｏｍｐｕｔｅｒ  Ｓｃｉｅｎｃｅ（Ａｒｔｉｆｉｃｉａｌ  Ｉｎｔｅｌｌｉｇｅｎｃｅ  ａｎｄ  Ｌｅｃｔｕｒｅ  Ｎｏｔｅｓ  ｉｎ  ＢｉｏｉｎｆｏｒｍａｔｉｃｓのサブシリーズＬｅｃｔｕｒｅ  Ｎｏｔｅｓを含む）、ｖ  ６８５２  ＬＮＣＳ、ｎ  パート１、ｐ．５０３〜５１３、２０１１、Ｅｕｒｏ−Ｐａｒ  ２０１１  並列処理−第１７回国際会議、紀要、Ｓｐｒｉｎｇｅｒ  Ｖｅｒｌａｇ
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上記技術では、ソフトウェア・イメージのメモリ・ブロックは、それらを即時使用する場合のみ、各ターゲット仮想マシンにダウンロードされる。したがって、これらのメモリ・ブロックは、使用後、およびいかなる場合でもターゲット仮想マシンの電源を切った後には消滅するため、次回使用するためには再度ダウンロードする必要がある（ターゲット・サーバはソース・サーバから決して切断できない）。メモリ・ブロックを（場合によっては、先読みを使って）ローカル・キャッシュに格納する場合でも、そのうちわずかなものしか再利用のためにローカル・キャッシュには残らない（いかなる場合でも、ローカル・キャッシュで最長時間未使用のメモリ・ブロックは新しいメモリ・ブロックを格納するために最終的に排除される）。
【課題を解決するための手段】
【００１０】
概して、本発明の１つ以上の実施形態による解決策は、メモリ・ブロックを既にダウンロードした場所からそのメモリ・ブロックを取得することによって、ソフトウェア・イメージを展開するという考えに基づいている。
【００１１】
特に、本発明の特定の実施形態による解決策の１つ以上の態様は、独立請求項に記載されており、同解決策の有利な特徴は、従属請求項に記載されており、全ての請求項の文言は参照によって本明細書にそのまま組み込まれる（本発明の実施形態による解決策の特定の態様を参照して提供される任意の有利な特徴は、解決策の他の全ての態様に準用される）。
【００１２】
より詳細には、本発明の実施形態による解決策の態様は、ターゲット・データ処理システムの複数のターゲット・データ処理エンティティにソース・データ処理システムからのソフトウェア・イメージを展開する方法を提供し、ターゲット・データ処理エンティティの１つがメイン・ターゲット・データ処理エンティティ（ソフトウェア・イメージのメモリ・ブロックはソース・データ処理システムからダウンロードされ、最初のアクセスでローカルに格納される）であり、他のターゲット・データ処理エンティティはセカンダリ・ターゲット・データ処理エンティティ（ソフトウェア・イメージのメモリ・ブロックはメイン・ターゲット・データ処理エンティティから取得され、最初のアクセスでローカルに格納される）である。
【００１３】
本発明の一実施形態による解決策の追加の態様は、対応するコンピュータ・プログラムを提供する。
【００１４】
本発明の一実施形態による解決策のさらなる態様は、対応するコンピュータ・プログラム製品を提供する。
【００１５】
本発明の一実施形態による解決策の異なる態様は、対応するデータ処理システムを提供する。
【００１６】
本発明の１つ以上の実施形態による解決策と、さらなる特徴およびその利点は、添付の図面と併せて読むよう、純粋に非限定的な指示として与えられる、以下の詳細な説明を参照することで最もよく理解される（明確化のために、対応する要素は、同一または類似の符号を付して示し、その説明は省略し、各エンティティの名前は一般に、その種類と、値、内容および表示といった属性との両方を表すよう用いられる）。
【図面の簡単な説明】
【００１７】
【図１】本発明の一実施形態による解決策を実施するために使用できる展開インフラストラクチャの図形表現を示す。
【図２】図２Ａ〜図２Ｃは、本発明の一実施形態による解決策の適用の概念図を示す。
【図３】図３Ａ〜図３Ｃは、本発明の一実施形態による解決策の適用の概念図を示す。
【図４】図４Ａ〜図４Ｃは、本発明の一実施形態による解決策の適用の概念図を示す。
【図５】本発明の一実施形態による解決策を実装するために使用できるメイン・ソフトウェア・モジュールのブロック図を示す。
【図６】本発明の一実施形態による解決策の実装に関するアクティビティのフローを記述するアクティビティ図を示す。
【図７】本発明の一実施形態による解決策の実装に関するアクティビティのフローを記述するアクティビティ図を示す。
【図８】本発明の一実施形態による解決策の実装に関するアクティビティのフローを記述するアクティビティ図を示す。
【図９】本発明の一実施形態による解決策の実装に関するアクティビティのフローを記述するアクティビティ図を示す。
【図１０】本発明の一実施形態による解決策の実装に関するアクティビティのフローを記述するアクティビティ図を示す。
【発明を実施するための形態】
【００１８】
特に図１を参照すると、本発明の一実施形態による解決策を実施するために使用できる展開インフラストラクチャ１００の図形表現が示される。
【００１９】
展開インフラストラクチャ１００は、ネットワーク１０５、例えば、ローカル・エリア・ネットワーク（ＬＡＮ：Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）に基づく分散アーキテクチャを有する。複数のデータ処理システム（例えば、サーバ・コンピュータ）は、ネットワーク１０５を介して相互に接続されている。特に、ソース・サーバ・コンピュータ（または単にソース・サーバ）１１０は、１つ以上のターゲット・サーバ・コンピュータ（または単にターゲット・サーバ）１１５上でのソフトウェア・イメージ（例えば、各々がオペレーティング・システムと複数のアプリケーション・プログラムとを含む各々）の展開をコントロールする。
【００２０】
各（ソースまたはターゲット）サーバ１１０、１１５は、システム・バス１２０に並列接続されたユニットを複数含む。詳細には、１つ以上のマイクロプロセッサ（μＰ）１２５は、サーバ１１０、１１５の動作をコントロールする。ＲＡＭ１３０は、マイクロプロセッサ１１５によるワーキング・メモリとして用いられ、ＲＯＭ１３５は、サーバ１１０、１１５のブートストラップのための基本コードを格納する。複数の周辺ユニットは、（それぞれのインターフェースを介して）ローカル・バス１４０の周りに集められる。特に、大容量メモリは、１つ以上のハード・ディスク１４５と、光ディスク１５５の読み込み／書き込みを行うドライブ１５０とを備えている。また、サーバ１１０、１１５は、入力ユニット１６０（例えば、キーボードおよびマウス）と出力ユニット１６５（例えば、モニタおよびプリンタ）とを備える。ネットワーク・アダプタ１７０を用いて、サーバ１１０、１１５をネットワーク１０５に接続する。ブリッジ・ユニット１７５は、システム・バス１２０をローカル・バス１４０とインターフェース接続する。各マイクロプロセッサ１２５およびブリッジ・ユニット１７５は、情報を伝達するためのシステム・バス１２０へのアクセスを要求するマスタ・エージェントとして動作可能である。アービタ１８０は、システム・バス１２０への相互排他をもったアクセスの許可を管理する。
【００２１】
本発明の一実施形態による解決策の適用の概念図を図２Ａ〜４Ｃに示す。
【００２２】
図２Ａにおいて、ターゲット・サーバ１１５のうちの１つでホストされる複数のターゲット仮想マシンにソース・サーバ１１０から展開する汎用ソフトウェア・イメージを、符号ＳＩで示す。
【００２３】
ソフトウェア・イメージＳＩは、複数のメモリ・ブロックを備えており、それらの各々は、（読み込みもしくは書き込みまたはその両方用に）個々にアクセス可能である。メモリ・ブロックは、１つ以上のセクタ、ファイル、ライブラリ、ディレクトリ、それらの組み合わせまたは一部などの任意の種類の情報を含んでもよい（例えば、それぞれ５２０バイトで構成）。メモリ・ブロックのサブセットは、ターゲット仮想マシンをブートして（以下に記述する）ストリーミング・ドライバをロードするのに必要なメモリ・ブロックを（互いに隣接していなくとも、それぞれの正しい位置に）備えるブートストラップ・モジュールＢｔを定義する。
【００２４】
図２Ｂに移る。ターゲット仮想マシンのうちのメインのターゲット仮想マシン（メイン仮想マシンＶＭｍと表記される）が、ソフトウェア・イメージＳＩの展開のために選択される（例えば、ソフトウェア・イメージＳＩを最初に展開するためにターゲット・サーバ１１５上に作成する第１のターゲット仮想マシン）。ブートストラップ・モジュールＢｔは、ソース・サーバ１１０からメイン仮想マシンＶＭｍにダウンロードされる。この時点でメイン仮想マシンＶＭｍは、ブートストラップ・モジュールＢｔからブートされ、その結果、包含されるストリーミング・ドライバがロードされる（図示せず）。
【００２５】
図２Ｃを参照する。メイン仮想マシンＶＭｍの動作中にソフトウェア・イメージＳＩの選択メモリ・ブロック（符号ＭＢｓで示される）にアクセスするそれぞれの要求には、以降、ストリーミング・ドライバが応じる。特に、メモリ・ブロックＭＢｓが、メイン仮想マシンＶＭｍで初めて要求されると、ストリーミング・ドライバは、ソース・サーバ１１０からメモリ・ブロックＭＢｓをダウンロードし、メイン仮想マシンＶＭｍに格納する。
【００２６】
その他の場合、図３Ａで示すとおり、選択されたメモリ・ブロックは、（後の同一メモリ・ブロックＭＢｓの場合と同様に）次回アクセスされる際に、すでにメイン仮想マシンＶＭｍに格納されている。したがって、以降、メモリ・ブロックＭＢｓは、（ソース・サーバ１０５から再度ダウンロードする必要なく）メイン仮想マシンＶＭｍにおいて直接アクセスすることができる。
【００２７】
上述したストリーミング技術により、ソフトウェア・イメージの残りの展開がまだ進行中であっても、各ターゲット仮想マシンを非常に短い時間で、すなわちブートストラップ・モジュールがダウンロードされた直後（例えば、１０〜２００メガバイトの典型的なサイズのブートストラップ・モジュールでは１〜２分後）に使用できるようになる。その後、ターゲット仮想マシンの動作は、内蔵のソフトウェア・イメージの他のメモリ・ブロックが使用できるかどうかに関わらず、完全に正常なものとなり、ソース・サーバからまだダウンロードされていないメモリ・ブロックにアクセスする際にターゲット仮想マシンのパフォーマンスが若干低下するだけである。また、メイン仮想マシンの使用を準備するのに必要な時間は、ソフトウェア・イメージのサイズとは無関係である。ソフトウェア・イメージのメモリ・ブロックが一度アクセスされると、さらに多くのメモリ・ブロックがメイン仮想マシンで予め利用可能になるため、メイン仮想マシン上にソフトウェア・イメージをダウンロードするネットワークの使用度も、時間とともに（例えば、対数法則に従い）減少する。
【００２８】
図３Ｂに移る。ターゲット仮想マシンのうちのセカンダリ・ターゲット仮想マシン（セカンダリ仮想マシンＶＭｓと表記される）が、同一ソフトウェア・イメージＳＩの展開のために選択される（例えば、ソフトウェア・イメージＳＩを次に展開するためにターゲット・サーバ１１５上に作成する次のターゲット仮想マシン）。ブートストラップ・モジュールＢｔは、セカンダリ仮想マシンＶＭｓに、（例えば、ソース・サーバ１１０から再度ダウンロードすることで）提供される。上記のとおり、セカンダリ仮想マシンＶＭｓは、ブートストラップ・モジュールＢｔからブートされ、その結果、包含されるストリーミング・ドライバがロードされる（図示せず）。
【００２９】
図３Ｃを参照する。セカンダリ仮想マシンＶＭｓの動作中に（上記の同一メモリ・ブロックＭＢｓと同様に）ソフトウェア・イメージＳＩの追加の選択メモリ・ブロックにアクセスするそれぞれの要求には、ここでもやはりストリーミング・ドライバが応じる。
【００３０】
ただし、本発明の実施形態による解決策において、メモリ・ブロックＭＢｓがセカンダリ仮想マシンＶＭｓ上で初めて要求されると、ここで、ストリーミング・ドライバが、メイン仮想マシンＶＭｍから直接読み込まれるまたはソース・サーバ１１０からダウンロードして上記のように格納されるメモリ・ブロックＭＢｓを使って、メイン仮想マシンＶＭｍからメモリ・ブロックＭＢｓを取得し、セカンダリ仮想マシンＶＭｓに格納する。
【００３１】
その他の場合、図４Ａで示すとおり、選択メモリ・ブロックは、（後の同一メモリ・ブロックＭＢｓの場合と同様に）次回アクセスされる際に、すでにセカンダリ仮想マシンＶＭｓに格納されている。したがって、以降、メモリ・ブロックＭＢｓは、（メイン仮想マシンＶＭｍから再度取得する必要なく）セカンダリ仮想マシンＶＭｓにおいて直接アクセスすることができる。
【００３２】
これにより、各メモリ・ブロックが、ここで、メイン仮想マシンに一度だけダウンロードされるため、ソース・サーバからメモリ・ブロックをダウンロードする必要性が急激に低下する。
【００３３】
また、（メインおよびセカンダリ）ターゲット仮想マシンが（同一ソフトウェア・イメージに基づいているため）非常に似ていることから、共通の挙動を示す（すなわち、実質的に同一の順序で実質的に同一のメモリ・ブロックにアクセスする）可能性が非常に高い。したがって、各セカンダリ仮想マシンが必要とするメモリ・ブロックがメイン仮想マシンですでに格納されている（その結果、メイン仮想マシンから直接、素早く取得できる）可能性が非常に高い。
【００３４】
上記の解決策がメイン仮想マシンに与える影響は、ほとんどの実際的な状況において無視できる。実際に、セカンダリ仮想マシンの要求に応じるメイン仮想マシンのオーバーヘッドは、（メイン仮想マシンにまだ格納されていない少数の追加メモリ・ブロックをセカンダリ仮想マシンのためにダウンロードすることしか、本解決策は必要とせず、いずれにせよそのメモリ・ブロックは、メイン仮想マシン自体が後にアクセスする可能性があるため）実質的に動作を損なわない。
【００３５】
なお、上記の解決策は、標準的なキャッシング技術とは何も関係ないことに留意すべきである。実際、キャッシング技術では、メモリ・ブロックは、要求に応じてダウンロードされ、（起こり得る）次回の使用に向けて一時的な形でローカルに格納される。逆に、メイン仮想マシンは、メモリ・ブロックをダウンロードし、それ自体の動作のために恒久的に内部に格納する（そのため、この結果は、セカンダリ仮想マシンによってメモリ・ブロックが必ずしも要求されなくても自動的に得られる）。言い換えると、セカンダリ仮想マシンによって要求されるメモリ・ブロックは、メイン仮想マシンそのものによって既にアクセスされていることから、メイン仮想マシンに格納されているはずである（あるいは、各セカンダリ仮想マシンによって既にアクセスされたメモリ・ブロックは、そこに格納されており、メイン仮想マシンに要求される必要が全くない）。
【００３６】
上記のすべてにより、ソース・サーバの負荷とネットワーク・トラフィックとを大きく低減して上述のストリーミング技術が改善される。
【００３７】
さらに、これにより、ストリーミング技術を（例えば、クラウド・コンピューティング・インフラストラクチャをサポートするよう）容易に拡張できる。
【００３８】
ここで図４Ｂを参照すると、本発明の特定の実施形態において、メモリ・ブロックはさらに、図中の薄い色で表されるメモリ・ブロックＭＢｕのように、メイン仮想マシンＶＭｍで更新され得る。したがって、（更新した）メモリ・ブロックＭＢｕは、セカンダリ仮想マシンＶＭｓで最初に要求されると、（メモリ・ブロックＭＢｕがソフトウェア・イメージＳＩのオリジナル・バージョンと異なるため）メイン仮想マシンＶＭｍから取得できない。この場合、メモリ・ブロックＭＢｕのオリジナル・バージョンは、ソース・サーバ１１０からメイン仮想マシンＶＭｍにダウンロードされ、（メイン仮想マシンＶＭｍに格納することなく）セカンダリ仮想マシンＶＭｓに戻される。
【００３９】
あるいは、図４Ｃで示すとおり、更新したメモリ・ブロックすべてのオリジナル・バージョンを、メイン仮想マシンＶＭｍの専用ブロック・レポジトリＢＲに保存することができる。この場合、更新したメモリ・ブロックが（上記の同一メモリ・ブロックＭＢｕのように）セカンダリ仮想マシンＶＭｓで初めて要求されると、ここではそのオリジナルのバージョンを、ブロック・レポジトリＢＲから抽出して、セカンダリ仮想マシンＶＭｓに直接戻すことができる。
【００４０】
ブロック・レポジトリは、（ソース・サーバの作業負荷とネットワーク・トラフィックとの対応する減少により、ただし、メイン仮想マシンのメモリ容量の対応する浪費と引き換えに）ソース・サーバから更新されたメモリ・ブロックを再度ダウンロードする必要性がなくなる。
【００４１】
ここで図５を参照すると、本発明の一実施形態による解決策を実装するために使用できるメイン・ソフトウェア・モジュールのブロック図が示される。情報（プログラムおよびデータ）は、典型的には、異なるサーバ・コンピュータのハード・ディスクに格納され、プログラム実行中に作業メモリに（少なくとも部分的に）ロードされる。プログラムは、最初に、ハード・ディスク、例えば、光ディスクにインストールされる。
【００４２】
特に、ソース・サーバ１１０は、展開マネージャ３０５、例えば、ＩＢＭコーポレーションのＩＢＭ  Ｔｉｖｏｌｉ（ＩＢＭ社の登録商標）Ｐｒｏｖｉｓｉｏｎｉｎｇ  Ｍａｎａｇｅｒ  ｆｏｒ  ＯＳ  Ｄｅｐｌｏｙｍｅｎｔ（ＴＰＭ  ｆｏｒ  ＯＳＤ）のＩＢＭ  Ｔｉｖｏｌｉ  Ｐｒｏｖｉｓｉｏｎｉｎｇ  Ｍａｎａｇｅｒ  ｆｏｒ  Ｉｍａｇｅｓ（ＴＰＭｆＩ）（ＩＢＭ社の登録商標）を実行する。展開マネージャ３０５は、ターゲット・サーバ１１５（図では１つのみ示す）へのソフトウェア・イメージの展開を自動化するために用いられる。ソフトウェア・イメージは、おのおの所定形式（例えば、ＶＭＤＫまたはＶＨＤ仕様に準拠）に従って単一ファイルまたは複数ファイルで対応するレポジトリ３１０に格納される。このために、ソース・サーバ１１０はさらに、レポジトリ３１０に格納されたソフトウェア・イメージに外部からアクセスするために使用するリモート・アクセス・サーバ３１５ｒを（例えば、インターネット・スモール・コンピュータ・システム・インターフェース（ｉＳＣＳＩ：Ｉｎｔｅｒｎｅｔ  Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）プロトコルに基づき）実行する。
【００４３】
ターゲット・サーバ１１５に移ると、（ハードウェア上で直接実行されている）ホスト・オペレーティング・システム３１７がソフトウェア・プラットフォームを定義し、そのプラットフォーム上で他のプログラムが実行できる。特に、展開エージェント３２０は、展開マネージャ３０５と対話するために、ホスト・オペレーティング・システム３１７上で実行される。また、仮想化レイヤ３２５が、ターゲット・サーバ１１５の仮想化を実装するためにホスト・オペレーティング・システム３１７上で実行される。市場で入手可能な仮想化レイヤ３２５の例として、ＶＭｗａｒｅ社のＶＭｗａｒｅ（ＶＭｗａｒｅ社の商標）およびＣｉｔｒｉｘ  Ｓｙｓｔｅｍｓ社のＸｅｎ（Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ社の商標）がある。仮想化レイヤ３２５は、同一ソフトウェア・イメージＳＩが展開されるメイン仮想マシンＶＭｍと１つ以上のセカンダリ仮想マシンＶＭｓ（図では１つのみ示す）とを備える複数の仮想マシンのホストとなる。
【００４４】
各（メインおよびセカンダリ）仮想マシンＶＭｍ、ＶＭｓは、（仮想マシンＶＭｍ、ＶＭｓが唯一コントロールする）物理マシンのハードウェアをエミュレートする抽象構造で構成される。特に、このエミュレートしたハードウェアは、（物理ディスクをエミュレートする）仮想ディスク３３０ｍ、３３０ｓを備え、これは仮想マシンＶＭｍ、ＶＭｓ上で展開したソフトウェア・イメージＳＩのメモリ・ブロックを格納するために使用される（まずブートストラップ・モジュールのメモリ・ブロックから始まり、他のメモリ・ブロックにアクセスされるとすぐにそのメモリ・ブロックが追加される）。
【００４５】
各仮想マシンＶＭｍ、ＶＭｓにおいて、ゲスト・オペレーティング・システム３３５ｍ、３３５ｓがそのエミュレートされたハードウェア上で実行され、そのソフトウェア・プラットフォームを定義し、その上で他のプログラムが実行され得る（まずブートストラップ・モジュールが提供する最小限の機能から始まり、他の機能が使用されるとすぐにその機能が追加される）。特に、メイン仮想マシンＶＭｍは、（ソフトウェア・イメージＳＩの一部を格納する）仮想ディスク３３０ｍに外部からアクセスするために使用される別のリモート・アクセス・サーバ３１５ｌを（例えば、同じｉＳＣＳＩプロトコルに基づき）実行する。いずれの場合でも、各仮想マシンＶＭｍ、ＶＭｓは、仮想ディスク３３０ｍ、３３０ｓのメモリ・ブロックに対する（読み込み、もしくは書き込み、またはその両方のための）アクセスをコントロールするための（符号３４０ｍ、３４０ｓで示す）対応するストリーミング・ドライバを実行する。特に、メイン仮想マシンＶＭｍのストリーミング・ドライバ３４０ｍは、（ソース・サーバ１１０からソフトウェア・イメージＳＩのメモリ・ブロックをダウンロードするために）リモート・アクセス・サーバ３１５ｒと対話するよう構成される。代わりに、セカンダリ仮想マシンＶＭｓのストリーミング・ドライバ３３５ｓは、（メイン仮想マシンＶＭｍからソフトウェア・イメージＳＩのメモリ・ブロックを取得するために）リモート・アクセス・サーバ３１５ｌと対話するように構成される。このために、ストリーミング・ドライバ３４０ｍ、３４０ｓはマッピング・テーブル３４５ｍ、３４５ｓをコントロールする。ソフトウェア・イメージＳＩの各メモリ・ブロックについて、マッピング・テーブル３４５ｍ、３４５ｓは、メモリ・ブロックが既にアクセスされ、その結果、仮想ディスク３３０ｍ、３３０ｓに格納されている（アクセス・フラグがアサートされている）か、格納されていない（アクセス・フラグがアサート解除されている）か、を示すアクセス・フラグを備える。
【００４６】
（以下で詳細に説明するとおり）仮想マシンＶＭｍ、ＶＭｓにおいて更新されたメモリ・ブロックを管理するために、マッピング・テーブル３４５ｍ、３４５ｓは、各メモリ・ブロックの更新フラグをさらに含む。更新フラグは、メモリ・ブロックが仮想マシンＶＭｍ、ＶＭｓにおいて更新されており、その結果、ソフトウェア・イメージＳＩのオリジナル・バージョンと異なっている（更新フラグがアサートされている）か、異なっていない（更新フラグがアサート解除されている）か、を示す。オプションとして、各仮想マシンＶＭｍ、ＶＭｓは、（符号ＢＲｍ、ＢＲｓで示す）ブロック・レポジトリを備えることができる。各更新メモリ・ブロックについて、ブロック・レポジトリＢＲｍ、ＢＲｓは、その連続した場所に（ソフトウェア・イメージＳＩと同じように）オリジナルのバージョンを格納する。この場合、各更新メモリ・ブロックについて、マッピング・テーブル３４５ｍ、３４５ｓは、ブロック・レポジトリＢＲｍ、ＢＲｓにおけるオリジナル・バージョンのアドレスも含む。
【００４７】
本発明の一実施形態による解決策の実装に関するアクティビティのフローを記述するアクティビティ図を図６〜１０に示す。特に、アクティビティ図は、方法４００を使用して、複数のターゲット仮想マシンに特定のソフトウェア・イメージを展開するために実装する例示的プロセスを示す。
【００４８】
方法４００は、ソース・サーバのスイムレーンの黒の開始円４０１で始まり、その後、ブロック４０２に移り、ここで、システム管理者は、このソフトウェア・イメージと、展開マネージャによってソフトウェア・イメージを展開するターゲット・サーバを（例えば、ウェブ・インターフェースによって）選択する。これを受けて、展開マネージャは、ブロック４０３で、（ソフトウェア・イメージを格納する仮想ディスクを備える）対応するターゲット仮想マシンを作成するようターゲット・サーバの展開エージェントに指示する。同時に、対応する情報が展開マネージャによって、（例えば、ターゲット・サーバ上のこのターゲット仮想マシンと、そこに展開されるソフトウェア・イメージとを識別するレコードが追加される展開マップに）保存される。アクティビティのフローは、次に、ブロック４０４において、ターゲット・サーバで既に展開されているソフトウェア・イメージのインスタンス数（展開マップで示される）に応じて分岐する。特に、この時点で、ターゲット・サーバ上におけるソフトウェア・イメージの最初の展開であれば（つまり、ターゲット・サーバ上の同一ソフトウェア・イメージに関して構成マップに他のレコードがない場合）、ブロック４０５〜４２２が実行されるのに対して、この時点で、ターゲット・サーバ上におけるソフトウェア・イメージの次の展開であれば（つまり、ターゲット・サーバ上の同一ソフトウェア・イメージに関して構成マップに少なくとも１つ別のレコードがある場合）、ブロック４２３〜４４８が実行される。
【００４９】
ここで、ブロック４０５（ソフトウェア・イメージの最初の展開）について検討する。ターゲット仮想マシンを、（例えば、マッピング・テーブル内のレコードの対応するフラグをアサートすることで）ソフトウェア・イメージの展開のためのメイン仮想マシンとして設定する。次に、展開マネージャは、ターゲット・サーバにブートストラップ・モジュールをアップロードし、ブロック４０６で、メイン仮想マシンの仮想ディスクに（ブートストラップ中に見つかることが予想される場所に）メモリ・ブロックを格納するよう展開エージェントに指示する。この時点で、展開マネージャは、ブロック４０７で、メイン仮想マシンをオンにするよう展開エージェントに指示する。
【００５０】
メイン仮想マシンのスイムレーンのブロック４０８に移動すると、ブートストラップ・モジュールから通常どおりブートすることで、ゲスト・オペテーティング・システムの対応部分と、そのマッピング・テーブルとともにストリーミング・ドライバとをロードする。例えば、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓ（マイクロソフト社の商標）において、ブートストラップ・モジュールＢｔは、マスタ・ブート・レコード（ＭＢＲ：Ｍａｓｔｅｒ  Ｂｏｏｔ  Ｒｅｃｏｒｄ）、ブート・セクタ、ｂｏｏｔｍｇｒ．ｅｘｅファイル、ｂｏｏｔ＼ｂｃｄファイル、システム・レジストリ、ｗｉｎｌｏａｄ．ｅｘｅファイル、システム・レジストリで指定されたドライバ（対応するリモート・アクセス・サーバおよびストリーミング・ドライバとの対話を行うためのリモート・アクセス・ドライバを備える）を含む。ストリーミング・ドライバのマッピング・テーブルは、ブートストラップ・モジュールのメモリ・ブロックのアクセス・フラグがアサートされ、他のメモリ・ブロックのアクセス・フラグがアサート解除され、メモリ・ブロックすべての更新フラグがアサート解除された状態に初期化される。ストリーミング・ドライバは、選択したメモリ・ブロックにアクセスする各要求に応えるために、（仮想ディスクに格納されているものとしてソフトウェア・イメージ全体を見る）ゲスト・オペレーティング・システムの標準ファイル・システム・ドライバをオーバーライドする。特に、ブートストラップ・モジュールは、ソース・サーバのリモート・アクセス・サーバとストリーミング・ドライバを対話させるようデフォルトで設定されている。また、ブートストラップ・モジュールは、（ソフトウェア・イメージに含まれる）リモート・アクセス・サーバを起動するようデフォルトで構成されており、その結果、これがブロック４０９で生じる。
【００５１】
ここでブロック４１０を参照すると、選択メモリ・ブロックにアクセスするアクセス要求がファイル・システム・ドライバに（初めにリモート・アクセス・ドライバをロードし、後にメイン仮想マシンを動作させるために）送信されるとすぐに、この要求はストリーミング・ドライバに渡される。その後、アクセス要求の様式に応じて、アクティビティのフローがブロック４１１で分岐する。特に、アクセス要求が選択メモリ・ブロックを読み込むためであれば、ブロック４１２〜４１８が実行されるのに対して、アクセス要求が選択メモリ・ブロックを書き込むためであれば、ブロック４１９〜４２２が実行される。
【００５２】
ここで、ブロック４１２（読み込みアクセス要求）について検討する。選択メモリ・ブロックがメイン仮想マシンで（一般に）最初にアクセスされているかどうかを確認するテストが行われる（マッピング・テーブルで示される）。そうである場合（すなわち、選択メモリ・ブロックのアクセス・フラグがアサート解除されているとき）、ストリーミング・ドライバは、リモート・アクセス・ドライバにアクセス要求を渡す。次に、（当該の例で、ｉＳＣＳＩイニシエータとして機能する）リモート・アクセス・ドライバは、ブロック４１３でソース・サーバのリモート・アクセス・サーバに、対応するダウンロード要求を送信する。ブロック４１４に続き、ソース・サーバのリモート・アクセス・サーバは、メイン仮想マシンに選択メモリ・ブロックをダウンロードする。ブロック４１５でストリーミング・ドライバは、（リモート・アクセス・ドライバから受信した）選択メモリ・ブロックを仮想ディスクに格納する。次に、ブロック４１６で、ストリーミング・ドライバは、対応するアクセス・フラグをアサートすることでマッピング・テーブルを更新する。ブロック４１２を再度参照すると、逆に（すなわち、選択メモリ・ブロックのアクセス・フラグがアサートされている場合）、ストリーミング・ドライバは、ブロック４１７で仮想ディスクから、選択メモリ・ブロックを直接読み込む。両方の場合において、方法４００は、次に、（ブロック４１６からか、ブロック４１７からのいずれかで）ブロック４１８に移り、ここで、ストリーミング・ドライバは、選択メモリ・ブロックをファイル・システム・ドライバに戻し、このドライバが、次にリクエスタに戻す。
【００５３】
代わりに、ブロック４１９（書き込みアクセス要求）を考慮すると、アクティビティのフローは、ストリーミング・ドライバの実装に応じて分岐する。特に、ストリーミング・ドライバがブロック・レポジトリをサポートし、選択メモリ・ブロックがまだ更新されていない（すなわち、その更新フラグがアサート解除されている）場合、方法４００はブロック４２０に下降する。この段階で、選択メモリ・ブロックのオリジナルのコピーは、ブロック・レポジトリの最初の空き位置に仮想ディスクからコピーされる。同時に、ブロック・レポジトリのこの位置のアドレスは、マッピング・テーブルにおいて、選択メモリ・ブロックに関連付けられる。次に、方法４００はブロック４２１に進む。ストリーミング・ドライバがブロック・レポジトリをサポートしないか、選択メモリ・ブロックがすでに更新されている場合、ブロック４１９からも同じ点に直接達する。いずれの場合も、ストリーミング・ドライバは、（初めて格納するか、以前のバージョンを変更するかのいずれかで）選択メモリ・ブロックの所望の値を仮想ディスクに書き込む。次に、ブロック４２２で、ストリーミング・ドライバは、対応するアクセス・フラグと、（必要であれば）対応する更新フラグとをアサートすることでマッピング・テーブルを更新する。
【００５４】
両方の場合とも、アクティビティのフローは、次の選択メモリ・ブロックにアクセスする要求を待つブロック４１０に（ブロック４１８またはブロック４２２から）戻る。
【００５５】
代わりに、ブロック４２３（ソフトウェア・イメージの次の展開）について検討する。ターゲット仮想マシンを、（例えば、マッピング・テーブル内のレコードの対応するフラグをアサート解除されたままとすることで）ソフトウェア・イメージの展開のためのセカンダリ仮想マシンとして設定する。その後、ストリーミング・ドライバの実装に応じて、アクティビティのフローがブロック４２４で分岐する。特に、ストリーミング・ドライバがブロック・レポジトリをサポートしない場合、上記の展開マネージャは、ブロック４２５でブートストラップ・モジュールをターゲット・サーバにアップロードする。逆に（ストリーミング・ドライバがブロック・レポジトリをサポートする場合）、ブロック４２６で、展開マネージャは、展開エージェントに対して、メイン仮想マシンからブートストラップ・モジュールのオリジナルのバージョンを再生成するよう指示する。このために、ブートストラップ・モジュールの各メモリ・ブロックは、仮想ディスクから読み出される（対応する更新フラグがアサート解除されている場合）か、その他の場合、ブロック・レポジトリから抽出される。
【００５６】
両方の場合において、方法４００は（ブロック４２５から、またはブロック４２６から）ブロック４２７に進む。この時点で、展開マネージャは、展開エージェントに対して、ストリーミング・ドライバを（展開マップで示すとおり、同一ターゲット・サーバ上の同一ソフトウェア・イメージの）メイン仮想マシンのリモート・アクセス・サーバと対話させ、リモート・アクセス・サーバを起動しないよう、（ダウンロードまたは再生成した）ブートストラップ・モジュールを構成する指示を行う。次に、展開マネージャは、展開エージェントに対して、（更新された）ブートストラップ・モジュールのメモリ・ブロックをセカンダリ仮想マシンの仮想ディスクに格納するよう指示する。ここでブロック４２８を参照すると、展開マネージャは、展開エージェントに対して、セカンダリ仮想マシンをオンにするよう指示する。
【００５７】
セカンダリ仮想マシンのスイムレーンのブロック４２９に移動すると、セカンダリ仮想マシンは、ブートストラップ・モジュールから通常どおりブートし、その結果、ゲスト・オペテーティング・システムの対応部分と（上記のように初期化した）マッピング・テーブルを伴うストリーミング・ドライバとをロードし、ストリーミング・ドライバは、この場合もやはり、ターゲット仮想マシンの（追加の）選択メモリ・ブロックにアクセスする各要求に応えるために、ゲスト・オペレーティング・システムの標準ファイル・システム・ドライバをオーバーライドする。
【００５８】
ここでブロック４３０を参照すると、選択メモリ・ブロックにアクセスするアクセス要求がファイル・システム・ドライバに（セカンダリ仮想マシンを動作させるために）送信されるとすぐに、上記のように、この要求はストリーミング・ドライバに渡される。その後、アクセス要求の様式に応じて、アクティビティのフローがブロック４３１で分岐する。特に、アクセス要求が選択メモリ・ブロックを読み込むものであれば、ブロック４３２〜４４４が実行されるのに対して、アクセス要求が選択メモリ・ブロックを書き込むものであれば、ブロック４４５〜４４８が実行される。
【００５９】
ここで、ブロック４３２（読み込みアクセス要求）について検討する。選択メモリ・ブロックがセカンダリ仮想マシンで（一般に）最初にアクセスされているかどうかを確認するテストが行われる（マッピング・テーブルで示される）。そうである場合（すなわち、選択メモリ・ブロックのアクセス・フラグがアサート解除されているとき）、ストリーミング・ドライバは、リモート・アクセス・ドライバにアクセス要求を渡す。次に、（この場合もやはりｉＳＣＳＩイニシエータとして機能する）リモート・アクセス・ドライバは、ブロック４３３でメイン仮想マシンのリモート・アクセス・サーバに対応する取得要求を送信する。
【００６０】
メイン仮想マシンのスイムレーンに移動すると、（リモート・アクセス・サーバから取得要求を受信する）ストリーミング・ドライバは、メイン仮想マシンで選択メモリ・ブロックが更新されているかどうかを確認するために、ブロック４３４でテストを実行する（マッピング・テーブルで示される）。そうである場合（すなわち、選択メモリ・ブロックがダウンロード前に書き込まれているか、あるいはダウンロード後に変更されているかを示すために、選択メモリ・ブロックの更新フラグがアサートされている場合）、アクティビティのフローが、ストリーミング・ドライバの実装に応じてブロック４３５で分岐する。特に、ストリーミング・ドライバがブロック・レポジトリをサポートしていない場合、方法４００はブロック４３６に下降する。この段階で、ストリーミング・ドライバは、アクセス要求をリモート・アクセス・ドライバに渡し、このドライバが次に、ソース・サーバのリモート・アクセス・サーバに対応するダウンロード要求を送信する。ブロック４３７に続き、ソース・サーバのリモート・アクセス・サーバは、メイン仮想マシンに選択メモリ・ブロックをダウンロードする。ブロック４３５を再度参照すると、逆に（つまり、メイン・ストリーミング・ドライバがブロック・レポジトリをサポートしている場合）、ブロック４３８において、ストリーミング・ドライバは、マッピング・テーブルで示すブロック・レポジトリの場所から選択メモリ・ブロックのオリジナル・バージョンを直接抽出する。代わってブロック４３４に戻ると、選択メモリ・ブロックがメイン仮想マシンにおいて更新されていない（すなわち、その更新フラグがアサート解除されている）場合、方法４００はブロック４３９に下降する。この段階で、選択メモリ・ブロックは、上記同様の操作を繰り返すことで、メイン仮想マシン上で読み込まれる（すなわち、初めてアクセスされる場合はソース・サーバから選択メモリ・ブロックをダウンロードして仮想ディスクに格納し、またはその他の場合は、仮想ディスクから選択メモリ・ブロックを読み込む）。いずれの場合でも、方法４００は、（ブロック４３７、ブロック４３８またはブロック４３９から）ブロック４４０で再度合流し、ここで、ストリーミング・ドライバは、選択メモリ・ブロックをリモート・アクセス・サーバに渡し、次に、このサーバがセカンダリ仮想マシンのリモート・アクセス・ドライバに戻す。セカンダリ仮想マシンのスイムレーンに戻ると、ブロック４４１で、ストリーミング・ドライバは、（リモート・アクセス・ドライバから受信した）選択メモリ・ブロックを仮想ディスクに格納する。次に、ブロック４４２で、ストリーミング・ドライバは、対応するアクセス・フラグをアサートすることでマッピング・テーブルを更新する。
【００６１】
ブロック４３２に再度戻ると、選択メモリ・ブロックがセカンダリ仮想マシンで既にアクセスされている（すなわち、そのアクセス・フラグがアサートされている）場合、ストリーミング・ドライバは、ブロック４４３で、ターゲット仮想ディスクから選択メモリ・ブロックを直接読み取る。
【００６２】
両方の場合において、方法４００は、次に、（ブロック４４２からか、ブロック４４３からのいずれかで）ブロック４４４に移り、ここで、ストリーミング・ドライバは、選択メモリ・ブロックをファイル・システム・ドライバに戻し、このドライバが、次にリクエスタに戻す。
【００６３】
代わりに、ブロック４４５（書き込みアクセス要求）について検討する。ブロック４１９〜４２２を参照して上述したのと全く同じ動作がブロック４４５〜４４８で実行される（そのため、説明は繰り返さない）。
【００６４】
両方の場合とも、アクティビティのフローは、次の選択メモリ・ブロックにアクセスする要求を待つブロック４３０に（ブロック４４４またはブロック４４８から）戻る。
【００６５】
完全に非同期な形で、ソース・サーバのスイムレーンのブロック４４９で、システム管理者は、対応するソフトウェア・イメージが（展開マップで示すとおり）少なくとも部分的にすでに展開されているターゲット仮想マシン（以降、旧仮想マシンと呼ぶ）の１つを、削除するために展開マネージャを通して選択する。これに応じて、（展開マップで示される）旧仮想マシンのタイプを確認するテストがブロック４５０で行われる。特に、旧仮想マシンが、そのソフトウェア・イメージに対する対応するターゲット・サーバ上のメイン仮想マシンであれば、方法４００はブロック４５１に移る。この段階で、同一ターゲット・サーバ上のこのソフトウェア・イメージのセカンダリ仮想マシン数を確認する他のテストが行われる（展開マップで示される）。ソフトウェア・イメージのセカンダリ仮想マシンが１つ以上、ターゲット・サーバ上で利用できる場合、そのうちの１つが（旧仮想マシンの代わりに新しいメイン仮想マシンとするよう）ブロック４５２で選択される。特に、選択セカンダリ・ターゲット仮想マシンは、ソフトウェア・イメージが（少なくとも部分的に）展開されているターゲット・サーバの中で最も古いものである。こうすると、選択されるセカンダリ仮想マシンは、その仮想ディスクに既に格納されたメモリ・ブロックの数が最も多いものとなる可能性が高い。ブロック４５３に進むと、ここで、選択セカンダリ仮想マシンは、（マッピング・テーブルにおいてレコードの対応するフラグをアサートすることで）ターゲット・サーバ上のソフトウェア・イメージの新しいメイン仮想マシンとして設定される。次に、展開マネージャは、展開エージェントに対して、ブロック４５４で、ストリーミング・ドライバをソース・サーバのリモート・アクセス・サーバと対話させ、リモート・アクセス・サーバを起動するよう、新しいメイン仮想マシンでブートストラップ・モジュールを構成する指示を行う。その後、展開マネージャは、ブロック４５５で、展開エージェントに対して、新しいメイン仮想マシンのリモート・アクセス・サーバを起動するよう指示する。また、展開マネージャは、展開エージェントに対して、ブロック４５６で、（展開マップで示されるように）他のセカンダリ仮想マシンがある場合、そのストリーミング・ドライバを新しいメイン仮想マシンのリモート・アクセス・サーバと対話させるよう、他のセカンダリ仮想マシンのブートストラップ・モジュールを構成するよう指示する。
【００６６】
その後、方法４００は、ソース・サーバのスイムレーンのブロック４５７に続く。同ポイントには、（旧仮想マシンがソフトウェア・イメージに対してターゲット・サーバ上のメイン仮想マシンでない場合）ブロック４５０から、または、（旧仮想マシンがソフトウェア・イメージに対してターゲット・サーバ上のメイン仮想マシンであるが、同一ソフトウェア・イメージに対してターゲット・サーバ上に利用可能なセカンダリ仮想マシンがない場合）ブロック４５１からも直接達する。いずれの場合でも、展開マネージャは、展開エージェントに対して、旧仮想マシンをオフにして、ターゲット・サーバから削除するよう指示する。同時に、対応するレコードが展開マップから削除される。
【００６７】
その後、方法４００は、同心円状の白／黒の停止円４５８で終了する。
【００６８】
当然ながら、ローカルおよび特定の要件を満たすために、当業者は、上記解決策に対して、多くの論理的もしくは物理的またはその両方の修正および変更を適用することができる。さらに詳細には、本解決策は、その１つ以上の実施形態を参照して、ある程度特定して説明したものの、形態および詳細における様々な省略、置換、および変更、ならびに他の実施形態が可能であることを理解すべきである。特に、本発明の異なる実施形態は、それをより完全に理解させるために前述の説明に記載した（例えば、数値などの）特定の詳細なしに実施してもよい。逆に、周知の特性については、不必要に細かい説明により不明瞭とならないように、省略または簡略化していることがある。また、開示した解決策のいずれかの実施形態に関連して説明した特定の要素もしくは方法ステップまたはその両方は、一般的な設計選択の事柄として他の実施形態に組み込むこともできることが明確に意図されている。いずれの場合でも、序数または他の修飾子は、同じ名前の要素を単に区別するためのラベルとして使用しているが、それ自体は優先度、先行性または順序を暗示するものではない。また、含む、備える、有する、内包する、伴う（およびそれらの任意の形態）という用語は、オープンで非網羅的な（すなわち、列挙した項目に限定されない）意味を意図するべきであり、基づく、依存する、従う、応じる（およびそれらの任意の形態）という用語は、非独占的な関係として（すなわちさらなる変数も含まれ得る）意図されるべきであり、１つのという用語は、（他に明確に示さない限り）１つ以上の項目としても意図されるべきである。
【００６９】
例えば、本発明の実施形態は、（任意のタイプの（下記参照））ターゲット・データ処理システムの（任意数の任意のタイプの（下記参照））複数のターゲット・データ処理エンティティ上に、（任意のタイプの（下記参照））ソース・データ処理システムから（例えば、何らのアプリケーション・プログラムもなしに、オペレーティング・システムのみ備えるなど、任意のタイプの）ソフトウェア・イメージを展開する方法を提供する。ソフトウェア・イメージは、個々にアクセス可能な（任意数で任意のサイズの）複数のメモリ・ブロックを含む。メモリ・ブロックの（任意数で任意の位置にある）事前定義したサブセットが、（例えば、Ｌｉｎｕｘ（Ｌｉｎｕｓ  Ｔｏｒｖａｌｄｓの商標）のＧＲＢＵブート・ローダを含むＭＢＲ、カーネルおよびｉｎｉｔｒｄファイル・システムを含む／ｂｏｏｔディレクトリを含むなど、任意のオペレーティング・システムの任意のタイプの）ブートストラップ・モジュールを定義する。この方法は以下のステップを含む。ブートストラップ・モジュールは、（任意の方法で）ソース・データ処理システムからターゲット・データ処理エンティティのうちのメインのターゲット・データ処理エンティティ上にダウンロードされる。メイン・ターゲット・データ処理エンティティは、ブートストラップ・モジュールからブートされ、それにより、ブートストラップ・モジュールに含まれるストリーミング・ドライバをロードする。メイン・データ処理エンティティ上のソフトウェア・イメージの選択メモリ・ブロックにアクセスする各要求は、ストリーミング・ドライバにより応じられる。ストリーミング・ドライバは、選択メモリ・ブロックにアクセスする要求の最初のものに応じて、ソース・データ処理システムから選択メモリ・ブロックをダウンロードして、選択メモリ・ブロックをメイン・ターゲット・データ処理エンティティに格納する。代わりに、ストリーミング・ドライバは、それ以外の場合、メイン・ターゲット・データ処理エンティティの選択メモリ・ブロックにアクセスする。ブートストラップ・モジュールはまた、（例えば、ソース・データ処理システムからダウンロードする、他のターゲット・データ処理エンティティからコピーする、またはローカルに再生成するなど、任意の方法で）ターゲット・データ処理エンティティのうちの一組の（１つ以上の）セカンダリ・ターゲット・データ処理エンティティの各々に提供される。各セカンダリ・ターゲット・データ処理エンティティは、ブートストラップ・モジュールからブートされ、それにより、ストリーミング・ドライバをロードする。セカンダリ・データ処理エンティティ上のソフトウェア・イメージの追加の選択メモリ・ブロックにアクセスする各要求には、ストリーミング・ドライバが応じる。ストリーミング・ドライバは、追加の選択メモリ・ブロックにアクセスする要求の最初のものに応じて、メイン・ターゲット・データ処理エンティティから追加の選択メモリ・ブロックを取得して、追加の選択メモリ・ブロックをセカンダリ・ターゲット・データ処理エンティティに格納する。代わりに、ストリーミング・ドライバは、それ以外の場合、セカンダリ・ターゲット・データ処理エンティティの追���の選択メモリ・ブロックにアクセスする。
【００７０】
ただし、同解決策は、（さらなるステップまたはその一部の同一機能をもつ同様のステップを用いる、非本質的な一部のステップを除く、またはさらにオプションのステップを追加することで）等価な方法で実装してもよい。また、これらステップは、異なる順序で、同時に、または（少なくとも部分的に）交互に実行してもよい。例えば、ソース・データ処理システムからメモリ・ブロックをメイン・ターゲット・データ処理エンティティにダウンロードすること、もしくは、バックグラウンドで（例えば、対応する作業負荷が小さい場合）セカンダリ・ターゲット・データ処理エンティティによりメイン・ターゲット・データ処理エンティティからメモリ・ブロックを取得すること、またはその両方が可能である。また、ソフトウェア・イメージの全てのメモリ・ブロックが対応するターゲット・データ処理エンティティに格納されると、ストリーミング・ドライバを無効にすることも可能である。
【００７１】
本発明の一実施形態において、ターゲット・データ処理エンティティは、ターゲット・データ処理システム上でホストされるターゲット仮想マシンである。
【００７２】
ただし、仮想マシンは、他の何らかの方法（例えば、ターゲット・サーバのハードウェア上で直接実行されているハイパーバイザのコントロール下）で実装することができる。いずれの場合においても、物理マシン（例えば、ソース・サーバからリモートである同じデータ処理センタのコンピュータ）への同方法の適用は除外されない。
【００７３】
本発明の一実施形態において、メイン・ターゲット・データ処理エンティティをブートするステップは、メイン・データ処理エンティティ上でソフトウェア・イメージに含まれるアクセス・サーバを起動することを含む。追加の選択メモリ・ブロックにアクセスする各要求に対応するステップは、追加の選択メモリ・ブロックにアクセスする最初の要求に応じて、メイン・データ処理エンティティのアクセス・サーバへ、セカンダリ・データ処理エンティティのストリーミング・ドライバにより、追加の選択メモリ・ブロックを取得する要求を送信することと、メイン・データ処理エンティティのアクセス・サーバから、追加の選択メモリ・ブロックを、セカンダリ・データ処理エンティティのストリーミング・ドライバに戻すこととを含む。
【００７４】
ただし、アクセス・サーバは、（例えば、ＡｏＥプロトコルに基づく）他の何らかのタイプであってもよい。いずれの場合でも、メモリ・ブロックは、任意の方法で（例えば、専用サービスを介して）セカンダリ・データ処理エンティティによりメイン・ターゲット・データ処理エンティティから取得してもよい。
【００７５】
本発明の一実施形態において、ターゲット・データ処理エンティティのうちのメインのターゲット・データ処理エンティティ上にブートストラップ・モジュールをダウンロードするステップは、選択メモリ・ブロックにアクセスする最初の要求に応えて、ソース・データ処理システムから各選択メモリ・ブロックをダウンロードするようストリーミング・ドライバを構成することを含む。ターゲット・データ処理エンティティのうちの一組のセカンダリ・ターゲット・データ処理エンティティの各々にブートストラップ・モジュールを提供するステップは、追加の選択メモリ・ブロックにアクセスする最初の要求に応えて、メイン・ターゲット・データ処理エンティティから追加の選択メモリ・ブロックそれぞれを取得するようストリーミング・ドライバを構成することを含む。
【００７６】
ただし、ブートストラップ・モジュールは、任意の形（例えば、反対のデフォルト動作またはデフォルト動作なし）に構成してもよい。いずれの場合でも、（メイン・ターゲット・データ処理エンティティと、セカンダリ・ターゲット・データ処理エンティティとに対して）２つの異なるブートストラップ・モジュールを有する可能性を排除するものではない。
【００７７】
本発明の一実施形態において、本方法はさらに以下のステップを含む。ターゲット・データ処理エンティティのうちの最初のものが、ターゲット・データ処理システム上でのソフトウェア・イメージの最初の展開のために提供される。最初のターゲット・データ処理エンティティは、メイン・ターゲット・データ処理エンティティとして設定される。ターゲット・データ処理エンティティのうちの（１つ以上の）次のものの組が、ターゲット・データ処理システム上でのソフトウェア・イメージの次の展開のために提供される。次のターゲット・データ処理エンティティはそれぞれ、セカンダリ・ターゲット・データ処理エンティティとして設定される。
【００７８】
ただし、メインおよびセカンダリ・ターゲット・データ処理エンティティは、異なる方法で（例えば、格納されているメモリ・ブロックの対応数に応じて動的に）選択してもよい。
【００７９】
本発明の一実施形態において、本方法はさらに以下のステップを含む。ターゲット・データ処理システムからメイン・ターゲット・データ処理エンティティを削除する要求が受信される。セカンダリ・ターゲット・データ処理エンティティの１つが選択される。選択したセカンダリ・ターゲット・データ処理エンティティは、新しいメイン・ターゲット・データ処理エンティティとして設定される。メイン・ターゲット・データ処理エンティティは、ターゲット・データ処理システムから削除される。
【００８０】
ただし、メイン・ターゲット・データ処理エンティティを動的に変更できない基本的な実装が考えられる。
【００８１】
本発明の一実施形態において、セカンダリ・ターゲット・データ処理エンティティの１つを選択するステップは、セカンダリ・ターゲット・データ処理エンティティの最も古いものを選択することを含む。
【００８２】
ただし、セカンダリ・ターゲット・データ処理エンティティの選択は、任意の他の追加または代替の基準（例えば、格納されているメモリ・ブロックの数）に基づいてもよい。
【００８３】
本発明の一実施形態において、選択メモリ・ブロックにアクセスする各要求に応じるステップは、メイン・ターゲット・データ処理エンティティにおいて更新された各選択メモリ・ブロックの指示を保存することを含む。メイン・ターゲット・データ処理エンティティから追加の選択メモリ・ブロックを取得するステップは、追加の選択メモリ・ブロックがメイン仮想マシンにおいて更新されたかどうかを確認することと、追加の選択メモリ・ブロックがメイン仮想マシンにおいて更新されている場合は、ソース・データ処理システムから追加の選択メモリ・ブロックをメイン・データ処理エンティティにダウンロードし、その他の場合は、メイン・ターゲット・データ処理エンティティから追加の選択メモリ・ブロックを読み込むこととを含む。
【００８４】
ただし、更新したメモリ・ブロックに関する情報は、他の何らかの方法（例えば、更新されたメモリ・ブロックの別個のリスト）で提供してもよい。いずれの場合でも、ソフトウェア・イメージがターゲット・データ処理エンティティにおいて更新できない基本的な実装を排除するものではない。
【００８５】
本発明の一実施形態において、追加の選択メモリ・ブロックにアクセスする各要求に応じるステップは、セカンダリ・ターゲット・データ処理エンティティにおいて更新された追加の選択メモリ・ブロックそれぞれの指示を保存することを含む。
【００８６】
ただし、この情報は、メイン・ターゲット・データ処理エンティティでのみ（例えば、動的に変更することができない場合に）収集してもよい。
【００８７】
本発明の一実施形態において、選択メモリ・ブロックにアクセスする各要求に応じるステップは、メイン・ターゲット・データ処理エンティティにおいて更新された各選択メモリ・ブロックのオリジナル・バージョンを保存することを含む。メイン・ターゲット・データ処理エンティティから追加の選択メモリ・ブロックを取得するステップは、追加の選択メモリ・ブロックがメイン仮想マシンにおいて更新されたかどうかを確認することと、追加の選択メモリ・ブロックがメイン・ターゲット・データ処理エンティティにおいて更新されていない場合は、追加の選択メモリ・ブロックを、またはその他の場合は、そのオリジナル・バージョンを戻すこととを含む。
【００８８】
ただし、ブロック・レポジトリは、（例えば、既にダウンロードされたソフトウェア・イメージの全体のコピーを格納するなど）任意の構造を有していてもよく、また、新しいセカンダリ・ターゲット・データ処理エンティティを作成するためにも使用してもよい。
【００８９】
本発明の一実施形態において、追加の選択メモリ・ブロックにアクセスする各要求に応じるステップは、セカンダリ・ターゲット・データ処理エンティティにおいて更新された追加の選択メモリ・ブロックそれぞれのオリジナル・バージョンを保存することを含む。
【００９０】
ただし、この動作は、メイン・ターゲット・データ処理エンティティでのみ（例えば、動的に変更することができない場合に）実施してもよい。
【００９１】
本発明の一実施形態は、データ処理システム（例えば、ターゲット・サーバの各々、ソース・サーバまたは展開インフラストラクチャ全体）に、コンピュータ・プログラムがシステム上で実行される際に提案する方法のステップを実施させるコード手段を備えるコンピュータ・プログラムを提供する。
【００９２】
ただし、プログラムは、単に、各々ソフトウェア・イメージからなってもよく、あるいはスタンドアロン・モジュールとしてか、展開マネージャのプラグインとしてか、展開マネージャそのもので直接実装してもよい。いずれの場合でも、プログラムが異なる方法で構成される場合、あるいは追加のモジュールまたは機能が設けられている場合は、同様の考慮事項が適用される。同様に、メモリ構造は、他の型であってもよく、あるいは（必ずしも物理記憶媒体で構成されていない）同等のエンティティで置き換えてもよい。プログラムは、任意のデータ処理システムによって、または（例えば仮想マシン内で）それと関連して使用するのに適した任意の形態をとることができ、これにより、所望の動作を実施するようデータ処理システムを構成する。特に、プログラムは、（オブジェクト・コードまたはソース・コードのいずれかで、例えば、コンパイルまたは解釈されるよう）外部または常駐ソフトウェア、ファームウェア、またはマイクロコードの形態であってもよい。また、任意のコンピュータで使用可能な媒体上にプログラムを（特に、非一時的媒体上の製造物として）提供することができる。この媒体は、プログラムを包含、格納、通信、伝播、または転送するのに適した任意の要素とすることができる。例えば、媒体は、電子、磁気、光学、電磁気、赤外線、または半導体の型であってもよい。このような媒体の例として、（プログラムが事前ロードされることのある）ハード・ディスク、リムーバブル・ディスク、テープ、カード、ワイヤ、ファイバ、無線接続、ネットワーク、放送波などがある。いずれの場合でも、本発明の実施形態による解決策は、（例えば、半導体材料のチップに集積した）ハードウェア構造、または適切にプログラムした、あるいはその他の構成を行ったソフトウェアとハードウェアとの組み合わせでの実装に向いている。
【００９３】
本発明の一実施形態は、同方法のステップを実施する手段（例えば、ターゲット・サーバの各々、ソース・サーバまたは展開インフラストラクチャ全体）を備えるデータ処理システムを提供する。
【００９４】
ただし、データ処理システムが異なる構造を有するか、同等の構成要素を備えるか、または他の作動特性を有している場合は、同様の考慮事項が適用される。いずれの場合でも、それらすべての構成要素は、複数の要素に分離してもよく、２つ以上の構成要素を単一の要素にまとめてもよい。また、各構成要素は、対応動作の実行を並行してサポートするために複製してもよい。また、（特に断らない限り）異なる構成要素間の対話は、一般に連続的である必要はなく、直接的であっても、または１つ以上の仲介物を介して間接的であってもよいことを指摘しておく。さらに詳細には、同方法は、任意の型の（有線もしくは無線またはその両方の）接続を利用する、あるいはスタンドアロン型の異なるアーキテクチャ（例えば、ローカル、ワイド・エリア、グローバル、セルラまたは衛星ネットワーク）に基づくデータ処理システム上で実施してもよい。いずれの場合においても、データ処理システムは、別の構造であってもよく、（例えば、プログラムまたはその一部を一時的に格納するキャッシュ・メモリのような）類似の要素を備えていてもよい。また、データ処理システムを、（ＰＤＡ、携帯電話等の）物理的マシンまたは仮想マシンのいずれかに基づく任意のコード実行エンティティ、あるいは（多層アーキテクチャ、グリッド・コンピューティング・インフラストラクチャ等の）複数のエンティティの組み合わせと置き換えることができる。
【図１】
2015501995.tif 000003
【図２】
2015501995.tif 000004
【図３】
2015501995.tif 000005
【図４】
2015501995.tif 000006
【図５】
2015501995.tif 000007
【図６】
2015501995.tif 000008
【図７】
2015501995.tif 000009
【図８】
2015501995.tif 000010
【図９】
2015501995.tif 000011
【図１０】
2015501995.tif 000012
【国際調査報告】
2015501995.tif 000013
2015501995.tif 000014
2015501995.tif 000015