対応するメモリアドレスを大容量メモリ130内にそれぞれ有する複数のメモリ位置を備えた前記大容量メモリを含むデータ処理エンティティ100上で、複数のソフトウェアイメージを管理する方法300~900;A1~A20であって、各ソフトウェアイメージは、対応するイメージアドレスを前記ソフトウェアイメージ内にそれぞれ有する複数のメモリブロックを含み、前記方法は、すべての前記ソフトウェアイメージの少なくとも一部の各メモリブロックの単一バージョンを、対応するメモリ位置に格納するステップ500、900と、各メモリブロックと、前記メモリブロックを格納している前記メモリ位置とを関連付ける制御構造215i、230を提供するステップ525~530、935~940と、現在のソフトウェアイメージのブート位置に格納されている前記メモリブロックを再配置するステップ720であって、各ソフトウェアイメージの前記ブート位置は、前記ソフトウェアイメージのブートブロックの前記イメージアドレスに等しい前記メモリアドレスを有する前記メモリ位置であり、前記ブートブロックは、前記ソフトウェアイメージの前記メモリブロックにアクセスするようになっているアクセス機能260をロードするよう前記データ処理エンティティをブートするために必要な前記メモリブロックを含む、前記ステップ720と、前記現在のソフトウェアイメージの前記ブートブロックを、対応する前記ブート位置に格納するステップ725と、前記対応するブート位置にある、前記現在のソフトウェアイメージの前記ブートブロックから、前記データ処理エンティティをブートするステップ735であって、その結果、前記アクセス機能をロードする、前記ステップ735と、前記現在のソフトウェアイメージの選択されたメモリブロックにアクセスするリクエストそれぞれに、前記アクセス機能によって応じるステップ300、400であって、前記アクセス機能は、前記選択されたメモリブロックに、前記制御構造によって提供される前記関連付けられたメモリ位置においてアクセスする、前記ステップ300、400と、を含む方法300~900;A1~A20。前記大容量メモリ130は、前記再配置されていないメモリブロックを格納するイメージ部分205および前記再配置されたメモリブロックを格納する再配置部分240を含み、前記制御構造215i、230は、再配置されていないメモリブロックそれぞれを格納する前記イメージ部分における前記メモリ位置の前記メモリアドレスのインジケーションを提供するオフセットマップ220iと、対応する前記ブートブロックの前記イメージアドレスのインジケーションを提供するブートリスト225iとを、各ソフトウェアイメージに関して含み、前記アクセス機能260は、前記対応するイメージアドレスが、前記現在のソフトウェアイメージの前記ブートリストによって提供される前記ブートブロックの前記イメージアドレスに含まれていない場合は、前記選択されたメモリブロックに、前記現在のソフトウェアイメージの前記オフセットマップによって提供される前記メモリアドレスを有する前記イメージ部分の前記メモリ位置においてアクセスし、またはその他の場合は、前記選択されたメモリブロックに、前記再配置部分の対応するメモリ位置においてアクセスする、請求項1に記載の方法300~900。前記選択されたメモリブロックにアクセスする前記ステップ300は、前記選択されたメモリブロックを前記大容量メモリから読み込むステップ300を含み、前記読み込むステップ300は、前記選択されたメモリブロックがどのメモリ位置にも格納されていない場合は、デフォルト値を返すステップ325、350、またはその他の場合は、前記制御構造215iによって提供される前記関連付けられたメモリ位置から読み出される前記選択されたメモリブロックを返すステップ330~350による、請求項1または2に記載の方法300~900。前記選択されたメモリブロックにアクセスする前記ステップ400は、前記選択されたメモリブロックを前記大容量メモリ上に書き込むステップ400を含み、前記書き込むステップ400は、前記選択されたメモリブロックがどのメモリ位置にも格納されていない場合は、前記選択されたメモリブロックを、空きメモリ位置に格納するステップ425~430、485、および前記選択されたメモリブロックと、前記空きメモリ位置とを、前記制御構造215iにおいて関連付けるステップ435、前記制御構造215iによって提供される前記関連付けられたメモリ位置に格納されている前記メモリブロックが、前記現在のソフトウェアイメージのみによって使用されている場合は、前記選択されたメモリブロックを、前記関連付けられたメモリ位置に格納するステップ440~460、485、または、前記関連付けられたメモリ位置に格納されている前記メモリブロックが、少なくとももう1つのソフトウェアイメージと共有されている場合は、前記選択されたメモリブロックを空きメモリ位置に格納ステップ440~450、465~475、485、前記選択されたメモリブロックと、前記空きメモリ位置とを、前記制御構造215iにおいて関連付けるステップ480による、請求項1~3いずれか1項に記載の方法300~900。前記制御構造215i、230は、各メモリ位置のブロックカウンタを提供するブロックマップ230を含み、前記ブロックカウンタは、前記メモリ位置に格納されている前記メモリブロックを共有しているソフトウェアイメージの数を示し、前記選択されたメモリブロックを書き込む前記ステップ400は、前記選択されたメモリブロックがどのメモリ位置にも格納されていない場合は、前記空きメモリ位置の前記ブロックカウンタを1にセットするステップ430、または、前記関連付けられたメモリ位置に格納されている前記メモリブロックが、少なくとももう1つのソフトウェアイメージと共有されている場合は、前記関連付けられたメモリ位置の前記ブロックカウンタを減らすステップ465、および前記空きメモリ位置の前記ブロックカウンタを1にセットするステップ475をさらに含む、請求項4に記載の方法300~900。ソースソフトウェアイメージからターゲットソフトウェアイメージを作成するリクエスト510に応答して、前記制御構造215i、230において、前記ソースソフトウェアイメージの各メモリブロックを格納している前記メモリ位置と、前記ターゲットソフトウェアイメージの対応するメモリブロックとを関連付けるステップ515~535をさらに含む、請求項1~5いずれか1項に記載の方法300~900。関連付ける前記ステップ515~535は、前記ソースソフトウェアイメージの各メモリブロックを格納している前記メモリ位置の前記ブロックカウンタを、1増やすステップ530を含む、請求項5に従属する請求項6に記載の方法300~900。古くなったソフトウェアイメージを削除するリクエスト610に応答して、前記制御構造215i、230において、前記古くなったソフトウェアイメージの各メモリブロックと、前記古くなったソフトウェアイメージの前記メモリブロックを格納している前記メモリ位置との前記関連付けを除去するステップ615~635をさらに含む、請求項1~7いずれか1項に記載の方法300~900。前記関連付けを除去する前記ステップ615~635は、前記古くなったソフトウェアイメージの各メモリブロックを格納している前記メモリ位置の前記ブロックカウンタを、1減らすステップ625を含む、請求項5に直接的または間接的に従属する請求項8に記載の方法300~900。前のソフトウェアイメージから前記現在のソフトウェアイメージに切り替えるリクエスト710に応答して、前記現在のソフトウェアイメージの前記ブート位置に格納されている前記メモリブロックを再配置する720前に、前記前のソフトウェアイメージの前記ブート位置から再配置されている前記メモリブロックを、前記前のソフトウェアイメージの前記ブート位置に復元するステップ715をさらに含む、請求項1~9いずれか1項に記載の方法300~900。選択されたソフトウェアイメージを、外部デバイス上にエクスポートするリクエスト810に応答して、前記選択されたソフトウェアイメージの各メモリブロックを読み込むステップ815~850であって、前記選択されたソフトウェアイメージの前記メモリブロックがどのメモリ位置にも格納されていない場合は、前記メモリブロックを別のデフォルト値にセットすること、またはその他の場合は、前記制御構造215iによって提供される前記関連付けられたメモリ位置から、前記選択されたソフトウェアイメージの前記メモリブロックを読み出すことによって、前記読み込むステップ815~850と、前記選択されたソフトウェアイメージの各メモリブロックを、前記外部デバイス上にコピーするステップ855と、をさらに含む、請求項1~10いずれか1項に記載の方法300~900。外部ソフトウェアイメージを別の外部デバイスからインポートするリクエスト910に応答して、前記別の外部デバイスから、前記外部ソフトウェアイメージの各メモリブロックを読み出すステップ925と、前記外部ソフトウェアイメージの前記メモリブロックを、別の空きメモリ位置に格納して、前記制御構造215iにおいて、前記外部ソフトウェアイメージの前記メモリブロックと、前記別の空きメモリ位置とを関連付けることによって、前記外部ソフトウェアイメージの各メモリブロックを書き込むステップ930~945と、をさらに含む、請求項1~11に記載の方法300~900。外部ソース1015から前記データ処理エンティティ100上への新たなソフトウェアイメージの展開をリクエストするステップA14と、前記外部ソースから前記データ処理エンティティ上に、前記新たなソフトウェアイメージの前記ブートブロックをダウンロードするステップA15と、前記新たなソフトウェアイメージの前記ブート位置に格納されている前記メモリブロックを再配置するステップA17と、前記新たなソフトウェアイメージの前記ブートブロックを、対応する前記ブート位置に格納するステップA19と、前記対応するブート位置にある、前記新たなソフトウェアイメージの前記ブートブロックから、前記データ処理エンティティをブートするステップA20であって、その結果、前記新たなソフトウェアイメージを展開するようになっているストリーミング機能をロードする、前記ステップA20と、前記新たなソフトウェアイメージの別の選択されたメモリブロックを読み込むリクエストそれぞれに、前記ストリーミング機能によって応じるステップA8~A10であって、前記ストリーミング機能は、前記別の選択されたメモリブロックがどのメモリ位置にも格納されていない場合は、前記別の選択されたメモリブロックを前記外部ソースからダウンロードしA9.10、前記別の選択されたメモリブロックを、さらに別の空きメモリ位置に格納しA9.11、前記制御構造215iにおいて、前記別の選択されたメモリブロックと、前記さらに別の空きメモリ位置とを関連付け、またはその他の場合は、前記制御構造によって提供される前記関連付けられたメモリ位置から、前記別の選択されたメモリブロックを読み込むA9.20、前記ステップA8~A10と、をさらに含む、請求項1~12いずれか1項に記載の方法A1~A20。請求項1~13いずれか1項に記載の方法300~900;A1~A20の前記ステップをコンピュータに実行させる、コンピュータプログラム。請求項1~13いずれか1項に記載の方法300~900;A1~A20の前記ステップを実行する手段300~900;1000を具備するシステム100。このために、マルチブート技術を活用することが可能である。マルチブート技術は、複数のオペレーティングシステムをコンピュータ上にインストールすることを可能にし、コンピュータの起動時にどのオペレーティングシステムをブートするか選ぶことができる。この所望の結果は、コンピュータのハードディスクを複数のパーティションに分割することによって得られ、各パーティションが、対応するオペレーティングシステムを格納する論理ディスクを定義する。コンピュータは、プライマリパーティションからブートし、プライマリパーティションには、実際に起動するオペレーティングシステムの選択を可能にするブートローダが含まれる。あるいは、所望のオペレーティングシステムを選択するためのみに使用されるプライマリブートローダを備えたブートパーティションを提供することが可能である。その結果、プライマリブートローダは、選択されたオペレーティングシステムの起動のために、そのオペレーティングシステムのセカンダリブートローダを呼び出す。しかし、マルチブート技術は、ハードディスクのパーティションが前もって定義されるため、柔軟性を大きく欠く。いずれの場合でも、選択されたオペレーティングシステムが起動されれば、それがハードディスク全体を完全に制御する。したがって、選択されたオペレーティングシステムは、他のパーティションにもアクセスできるそれらを破損させるリスクを伴う。あるいは、仮想化技術を活用して同じ結果を得ることもできる。この場合、コンピュータにハイパーバイザがインストールされる。ハイパーバイザは仮想化層を実装し、これによって、物理コンピュータ仮想マシンが単独で制御するのように見える抽象的な環境からそれぞれ成る複数の仮想マシンがエミュレートされる。このようにして、対応する仮想マシン上で種々のオペレーティングシステムを独立して同時にでも実行させることができる。しかし、仮想化技術では、仮想マシンを管理するための複雑なインフラストラクチャをインストールする必要がある。さらに、これには、コンピュータのパフォーマンス低下が伴うオペレーティングシステムがコンピュータ上でネイティブに実行されなくなるため。もう1つよくあるニーズが、コンピュータのソフトウェアイメージのバックアップコピーをとることである。例えば、これは、コンピュータが正常に機能しなくなった場合に、コンピュータのコンテンツを復元するために有用であることもある。このために、ソフトウェアイメージのスナップショットすなわち、特定の時点の一貫した状態におけるソフトウェアイメージのバックアップコピーをとることができる。スナップショットは、バックアップディスクまたはバックアップサーバに保存され得る。こうすることで、バックアップディスクまたはバックアップサーバからコンピュータ上へスナップショットを再インストールして、スナップショットを復元することができる。しかし、スナップショットをとるプロセスおよび復元するプロセスは、どちらも非常に遅い。さらに、バックアップサーバを使用する場合、これには、ネットワークリソースの高消費が伴う。さらに、バックアップサーバからスナップショットを復元するためには、バックアップサーバとのネットワーク接続が必要である。あるいは、バックアップサーバ上のスナップショットからコンピュータを遠隔ブートすることが可能である。しかしこの場合、コンピュータが動作するためには常にバックアップサーバに接続されている必要がある。いずれの場合でも、ネットワークを介したコンピュータの動作は、そのパフォーマンス低下を伴う。さらに、特許文献1その開示全体を参照によって本願明細書に引用したものとするは、コンピュータから直接、その物理スナップショットを使用して仮想マシンを実行する方法を開示している。このために、仮想マシンは、その初期状態を表現する仮想スナップショットとして、この物理スナップショットを使用して初期化する。例えば、仮想マシンは更新のテストに使用されてもよく、テストが成功すればその更新をコンピュータに利用可能にする可能性もあり対応する新たな物理スナップショットとして、または、疑わしいプログラムの実行がウイルスもしくはスパイウェアアクティビティを示すかどうか検証するために使用されることもできる。上記のように、これには仮想化層のインストールが必要である上述の欠点を伴う。さらに、この文書に記載されている技術は、コンピュータ上で単一のオペレーティングシステムしかサポートしない。概略として、本発明の1つ以上の実施形態によるソリューションは、複数のソフトウェアイメージを、その共通のメモリブロックを共有することによって管理するという考えに基づく。詳細には、本発明の特定の実施形態によるソリューションの1つ以上の側面が、独立請求項に記載されており、同じソリューションの有利な特徴は、従属請求項に記載されており、その表現は、参照によって逐語的に本願明細書に引用される本願明細書の実施形態によるソリューションの、特定の側面を参照して提供される任意の有利な特徴は、他のすべての側面に準用される。さらに具体的には、本発明の実施形態によるソリューションの側面は、データ処理エンティティ例えば、スタンドアローンコンピュータ上で複数のソフトウェアイメージを管理する方法を提供する。データ処理エンティティは、複数のメモリ位置memorylocationを備える大容量メモリを含む。各メモリ位置は、対応するメモリアドレスを大容量メモリ内に有する。各ソフトウェアイメージは、複数のメモリブロックを含む。各メモリブロックは、対応するイメージアドレスをソフトウェアイメージ内に有する。本方法は、以下のステップを含む。すべてのソフトウェアイメージまたは少なくともその一部の各メモリブロックの単一バージョンが、対応するメモリ位置に格納される。制御構造が提供される。制御構造は、各メモリブロックと、メモリブロックを格納するメモリ位置とを関連付ける例えば、対応するメモリ位置のメモリアドレスの計算を可能にする、各メモリブロックのブロックオフセットblockoffsetを格納するオフセットマップoffsetmap、およびメモリ位置に格納されているメモリブロックを使用するソフトウェアイメージの数を示す、各メモリ位置のブロックカウンタblockcounterを格納するブロックマップblockmap。現在のソフトウェアイメージのブート位置bootlocationに格納されているメモリブロックは、再配置される例えば大容量メモリの再配置部分へ。各ソフトウェアイメージのブート位置は、ソフトウェアイメージのブートブロックのイメージアドレスに等しいメモリアドレスを有するメモリ位置であり、このブートブロックは、アクセス機能ソフトウェアイメージのメモリブロックにアクセスするようになっているをロードするようデータ処理エンティティをブートするために必要なメモリブロックを含む。現在のソフトウェアイメージのブートブロックが、対応するブート位置に格納される。データ処理エンティティは、この対応するブート位置にある現在のソフトウェアイメージのブートブロックからブートされるその結果アクセス機能をロードする。現在のソフトウェアイメージの選択されたメモリブロックにアクセスするリクエストそれぞれに、アクセス機能が応じるserve。アクセス機能は、選択されたメモリブロックに、制御構造によって提供される関連付けられたメモリ位置においてアクセスする。本発明の実施形態によるソリューションの別の側面は、コンピュータプログラムを提供し、コンピュータプログラムは、コンピュータプログラムがデータ処理システム上で実行されると本方法のステップをデータ処理エンティティに実行させるコード手段を含む。本発明の実施形態によるソリューションのさらに別の側面は、コンピュータプログラムを具現化する非一時的コンピュータ可読媒体を含むコンピュータプログラム製品を提供し、コンピュータプログラムは、データ処理システムのワーキングメモリworkingmemoryに直接ロード可能であり、その結果同方法を実行するようデータ処理システムを構成する、コード手段を含む。本発明の実施形態によるソリューションのもう1つの側面は、前記方法のステップを実行する手段を具備するシステムを提供する。非制限的な指示のみを目的として与えられ添付の図面と併せて読まれる以下の詳細な説明を参照することで、本発明の1つ以上の実施形態によるソリューション、ならびにその別の特徴および利点が最もよく理解される図面では、単純化のために、対応する構成要素は等しい参照符号または同様の参照符号を用いて表示されており、その説明は繰り返されず、各エンティティの名称は概して、その値、コンテンツ、および表現など、そのタイプと特質との両方を表示するように使用されている。図1を詳細に参照する。本発明の実施形態によるソリューションを適用できるコンピュータ100の概略ブロック図が示されている。コンピュータ100例えばPCは、システムバス105に並列接続されたいくつかのユニットによって形成されている。詳細には、1つ以上のマイクロプロセッサμP:microprocessor110が、コンピュータ100の動作を制御する。RAMが、マイクロプロセッサ110によってワーキングメモリ115として使用され、ROM120が、コンピュータ100の基本コードを格納する。いくつかの周辺ユニットが、ローカルバス125の周りに集められているそれぞれのインターフェースを用いて。詳細には、大容量メモリは、1つ以上のハードディスク130および光ディスク140例えばDVDまたはCDを読み込むドライブ135を含む。さらに、コンピュータ100は、入力ユニット145例えば、キーボードおよびマウスならびに出力ユニット150例えば、モニタおよびプリンタを含む。アダプタ155は、コンピュータ100をネットワーク図示せずに接続するために使用される。ブリッジユニット160は、システムバス105をローカルバス125とインターフェースで接続する。マイクロプロセッサ110およびブリッジユニット160はそれぞれ、情報を送るためにシステムバス105へのアクセスをリクエストするマスタエージェントとして動作することができる。アービタ165は、システムバス105へのアクセスの、相互排除による許可を管理する。図2に、本発明の実施形態によるソリューションの例示的適用が示されている。詳細には、このソリューションは、コンピュータ100上の種々のソフトウェアイメージを管理するのに使用される。各ソフトウェアイメージは、1つ以上のソフトウェアモジュールを含む例えば、オペレーティングシステム、アプリケーションプログラム、もしくはデータ、またはそのいずれかの組み合わせ。ソフトウェアイメージは、メモリブロック例えば、それぞれ1~10MBのセットによって形成され、メモリブロックは、対応するアドレスをソフトウェアイメージ内に有するイメージアドレスと呼ばれる。このために、ハードディスク130は、別々の部分に論理的に分割される。より詳細には、ハードディスク130の大部分は、イメージ部分205によって使われるその先頭から。イメージ部分205は、ハードディスク130内の対応するアドレスメモリアドレスと呼ばれるを備えるメモリ位置のセットによって形成される。それぞれが、ソフトウェアイメージのメモリブロックを格納するためのものである。詳細には、すべてのソフトウェアイメージの各メモリブロックの単一のバージョンが、対応するメモリ位置に格納される。一方、ハードディスク130の残りの部分その最後部は、サービス情報を格納するために使用される。さらに具体的には、ヘッダ部分210が、各ソフトウェアイメージのイメージヘッダ215iを格納するために予約される。イメージヘッダ215iは、オフセットマップ220iおよびブートリスト225iを含む。オフセットマップ220iは、対応するソフトウェアイメージの各メモリブロックそのイメージアドレスによって識別されるのブロックオフセットを特定し、このブロックオフセットは、イメージ部分205内のメモリブロックの、ソフトウェアイメージ内での場所に対する変位量を示すすなわち、メモリブロックを格納するメモリ位置のメモリアドレスと、そのイメージアドレスとの間の、正または負いずれかの差に等しい。ブロックオフセットは、対応するメモリブロックが使用されていなければヌル値に等しい。イメージヘッダ215iは、比較的小さい。例えば、各ブロックオフセットを5Bでコード化すると仮定すると2500GB=1TBのイメージ部分205のアドレス指定に、ヌル値を無視して±258-1=239=500GBの範囲のブロックオフセットの値が可能となるように、2MBのメモリブロックを備える100GBのソフトウェアイメージは、100GB/2MB5B=250kBのイメージヘッダ215iを必要とする。ヘッダ部分210は、比較的多数のイメージヘッダ215i例えば10~50までを格納することを可能にするサイズである。一方、ブートリスト225iは、ソフトウェアイメージのブートブロックのイメージアドレスブートアドレスと呼ばれるのリストを特定する。ブートブロックは、展開エージェントをロードするようソフトウェアイメージのブートシーケンスを起動するために必要なメモリブロックを含む以下に記載。例えば、MicrosoftRWindowsRでは、ブートブロックは展開エージェントに加えて、マスタブートレコードMBR:MasterBootRecord、ブートセクタ、bootmgr.exeファイル、boot\bcdファイル、システムレジストリ、winload.exeファイル、およびシステムレジストリで特定されるドライバファイルを含む。さらに、ブロックマップ230は、イメージ部分205の各メモリ位置そのメモリアドレスによって識別されるのブロックカウンタを特定する。ブロックカウンタは、そのメモリ位置に格納されたメモリブロックを使用するソフトウェアイメージの数を示す。メモリ位置が空きであれば、ブロックカウンタは0に等しい。ブロックマップ230は、ほとんどの場合、イメージヘッダ215iよりも大きい。例えば、各ブロックカウンタを1Bでコード化すると仮定すると28-1=255までのソフトウェアイメージを管理できるように、2MBのメモリブロックを備える1TBのイメージ部分は、100TB/2MB1B=400MBのブロックマップ230を必要とする。一方、ヘッダインデックス235は、コンピュータ上で現在アクティブであるソフトウェアイメージ現在のソフトウェアイメージと呼ばれるのイメージヘッダ215iをポイントする。最後に、ハードディスク130の再配置部分240は、メモリアドレスが現在のソフトウェアイメージのブートアドレスに等しいイメージ部分205のメモリ位置を再配置するために使用され、それらは再配置されたメモリ位置245Cと呼ばれる。続いて、現在のソフトウェアイメージのブートブロックは、そのブート位置にコピーされることが可能であり、それが、濃い灰色で示され、参照符号250Cで表示されている。このようにして、ブートブロック250Cは、ハードディスク130において、現在のソフトウェアイメージのブートシーケンス中に発見されると予想される、まさにその場所に配置される。それでも、無効にされた対応するメモリブロックは、再配置されたメモリ位置245Cに保存されているため、これによって、イメージ部分205の情報は何も喪失されない。その結果、コンピュータ100は、電源が入ると、ハードディスク130から通常通りブートする。実際、コンピュータ100の電源投入時に実行される、そのファームウェアに格納されたブートローダ、例えば基本入出力システムBIOS:BasicInput/OutputSystemは、ブート可能デバイスとしてハードディスク130を識別する。したがって、BIOSは、MBRをロードし、MBRは、ブートセクタをロードし、ブートセクタは、bootmgr.exeファイルを発見して起動し、bootmgr.exeは、boot\bcdファイルを発見して読み込み、システムレジストリ、winload.exeファイル、およびシステムレジストリ内で特定されているドライバファイルのメモリ位置を判断して、続いてそれをロードし、winload.exeが、展開エージェントを起動する。このようにして、現在のソフトウェアイメージのブートブロック250Cに対応する、現在のソフトウェアイメージの実際のオペレーティングシステムの部分参照符号255Cで表示されているおよび展開エージェント参照符号260で表示されているが、ワーキングメモリ115にロードされる。これ以降、コンピュータ100の動作中の、現在のソフトウェアイメージの選択されたメモリブロックにアクセスするリクエストすべてに、展開エージェント260のアクセスドライバが応じ以下に記載、これは、図示されていない、オペレーティングシステム255Cの標準のファイルシステムドライバに優先する。このために、展開エージェント260は、対応するアクセスを高速化するように、現在のソフトウェアイメージのイメージヘッダ250iをワーキングメモリ115にロードすることが好ましい。上記の技術は、非常に容易な方法でコンピュータ100上の複数のソフトウェアイメージを管理することを可能にする。さらに、種々のソフトウェアイメージは、互いに完全に分離されている。実際、各ソフトウェアイメージは、対応するメモリブロックのみにアクセスできる他のソフトウェアイメージを破損させるあらゆるリスクを防ぐために。この結果は、何らの仮想化インフラストラクチャも必要とすることなく得られる。したがって、コンピュータ100のパフォーマンスは悪影響を受けない。実際、この場合、ソフトウェアイメージのみすなわち、そのメモリブロックが格納されているメモリ位置が仮想化され、逆にオペレーティングシステムは、コンピュータ100上でネイティブに実行され続ける。さらに、ソフトウェアイメージの数およびそのサイズがあらかじめ定められていないため、このソリューションは非常に柔軟性が高い。より広く述べると、ソフトウェアイメージの数およびそのサイズは、すべてのソフトウェアイメージによって実際に使用される異なるメモリブロックの数によって決まるため、ソフトウェアイメージの数およびそのサイズが、ハードディスク130上の利用可能なメモリ空間によって厳しく決定されることは、もうなくなる。実際には、使用されないメモリブロックは、ハードディスク130に格納されず、種々のソフトウェアイメージ間の同じメモリブロックは、共有されるしたがって、その増加が回避される。これは、特に、ソフトウェアイメージが、利用可能なメモリ空間のわずかな部分のみを活用する場合実際に頻繁に生じる、もしくはソフトウェアイメージが互いにわずかに異なる場合例えば、コンピュータのいくつかのスナップショットが経時的にとられる場合、またはその両方の場合に、大きなメモリ空間の節約を提供する。本発明の対応する実施形態による、上記のコンピュータ上で実行され得る種々の例示的動作について、以下に詳しく記載する。詳細には、図3は、本発明の実施形態による読み込み動作に関するアクティビティのフローを表すアクティビティ図を示し、この読み込み動作が、方法300により表現されている。本方法300は、黒い開始円305にて始まり、続いて、現在のソフトウェアイメージの選択されたメモリブロック対応する選択されたイメージアドレスにあるを読み込むリクエストがファイルシステムドライバに例えば、アプリケーションプログラムから提出されると、すぐにブロック310に移動する。読み込みリクエストは、ブロック315にて、展開エージェントに渡され、展開エージェントは、選択されたメモリブロックのブロックオフセットを、現在のソフトウェアイメージのオフセットマップから読み出す。次に、アクティビティのフローは、選択されたメモリブロックのブロックオフセットの値に従ってブロック320にて分岐する。選択されたメモリブロックのブロックオフセットがヌル値に等しければ選択されたメモリブロックが使用されていないことを意味する、ブロック325にて展開エージェントは、選択されたメモリブロックにデフォルト値を割り当てる例えば、そのすべてのビットを0にセットすることによる。反対に、選択されたメモリブロックのブロックオフセットが有効値を有する選択されたメモリブロックが使用されていることを意味すると、展開エージェントは、ブロック330にて、選択されたメモリブロックを格納しているべきイメージ部分のメモリ位置選択されたメモリ位置と呼ばれるのメモリアドレスを、そのブロックオフセットをそのイメージアドレスに加算することによって計算する。ここで、ブロック335にてテストが行われ、選択されたメモリ位置が再配置部分へ再配置されているすなわち、選択されたメモリ位置のメモリアドレスが、ブートリストにおいて示される、現在のソフトウェアイメージのブートアドレスの1つに等しい場合かどうかが検証される。そうであれば、展開エージェントは、ブロック340にて、選択されたメモリ位置を、対応する再配置されたメモリ位置に等しくセットするそれに合わせてそのメモリアドレスを置換することによる。続いて、方法300はブロック345へと下降する。選択されたメモリ位置が再配置されていない場合も、ブロック335から直接同じポイントに達する。この時点で、展開エージェントは、選択されたメモリブロックを選択されたメモリ位置から読み出す。いずれの場合でも、アクティビティのフローはブロック350にて合流するブロック325またはブロック345のいずれかから。展開エージェントは、ここで、選択されたメモリブロックをファイルシステムドライバに返し、次にファイルシステムドライバは、それをアプリケーションプログラムに返す。方法300は、その結果、白/黒の停止の同心円355にて終わる。一方、図4は、本発明の実施形態による書き込み動作に関するアクティビティのフローを表すアクティビティ図を示し、この書き込み動作が、方法400により表現されている。本方法400は、黒い開始円405にて始まり、続いて、現在のソフトウェアイメージの選択されたメモリブロック対応する選択されたイメージアドレスにあるを書き込むリクエストがファイルシステムドライバに例えば、アプリケーションプログラムから提出されるとすぐにブロック410に移動する。書き込みリクエストは、ブロック415にて、展開エージェントに渡され、展開エージェントは、選択されたメモリブロックのブロックオフセットを、現在のソフトウェアイメージのオフセットマップから読み出す。次に、アクティビティのフローは、選択されたメモリブロックのブロックオフセットの値に従ってブロック420にて分岐する。選択されたメモリブロックのブロックオフセットがヌル値を有する場合選択されたメモリブロックが使用されていないことを意味する、展開エージェントは、ブロック425にて、選択されたメモリブロックを受け入れる、空きのイメージ部分のメモリ位置選択されたメモリ位置と呼ばれる、例えば、ブロックマップにおいて対応するブロックカウンタが0に等しい最初のメモリ位置を識別する。続いて、ブロック430にて展開エージェントは、選択されたメモリ位置のブロックカウンタを1にセットするそれが今は現在のソフトウェアイメージによって使用されているということを示すために。ブロック435へと続いて、展開エージェントは、選択されたメモリ位置のメモリアドレスから、選択されたメモリブロックのイメージアドレスを減算することによって、選択されたメモリ位置のブロックオフセットを計算する。続いて、選択されたメモリ位置のブロックオフセットは、現在のソフトウェアイメージのオフセットマップに格納される選択されたメモリブロックが選択されたメモリ位置に格納されていることを示すために。ブロック420に戻る。選択されたメモリブロックのブロックオフセットが有効値を有する選択されたメモリブロックが使用されていることを意味すると、展開エージェントは、ブロック440にて、選択されたメモリブロックを格納しているメモリ位置この場合もやはり選択されたメモリ位置と呼ばれるのメモリアドレスを、そのブロックオフセットをそのイメージアドレスに加算することによって計算する。ブロック445へと続いて、展開エージェントはここで、選択されたメモリ位置のブロックカウンタをブロックマップから読み出す。アクティビティのフローはさらに、選択されたメモリ位置のブロックカウンタの値に従ってブロック450にて分岐する。選択されたメモリ位置のブロックカウンタが1に等しい場合選択されたメモリブロックが現在のソフトウェアイメージのみによって使用されていることを意味する、選択されたメモリ位置が再配置部分に再配置されているすなわち、選択されたメモリ位置のメモリアドレスが、ブートリストにおいて示されている、現在のソフトウェアイメージのブートアドレスの1つに等しい場合かどうかを検証するために、ブロック455にてテストが行われる。そうであれば、展開エージェントは、ブロック460にて、選択されたメモリ位置を、対応する再配置されたメモリ位置と等しくセットするそれに合わせてそのメモリアドレスを置換することによる。反対に、選択されたメモリブロックのブロックカウンタが、1よりも大きいことがブロック450にて分かれば選択されたメモリブロックが、現在のソフトウェアイメージに加えて他のソフトウェアイメージによって使用されていることを意味する、方法400は、ブロック465へと下降する。この段階で、展開エージェントは、選択されたメモリ位置のブロックカウンタを1減らす現在のソフトウェアイメージによってはもう使用されていないことを示すために。ここで、ブロック470を参照する。展開エージェントは、選択されたメモリブロックを受け入れる、空きのイメージ部分のメモリ位置選択されたメモリ位置になるを識別する。続いて、ブロック475にて展開エージェントは、選択されたメモリ位置のブロックカウンタを1にセットするそれが今は現在のソフトウェアイメージによって使用されているということを示すために。ブロック480へと続いて、展開エージェントは、選択されたメモリ位置のメモリアドレスから選択されたメモリブロックのイメージアドレスを減算することによって、選択されたメモリ位置のブロックオフセットを計算する。続いて、選択されたメモリブロックのブロックオフセットは、現在のソフトウェアイメージのオフセットマップに格納される選択されたメモリブロックが選択されたメモリ位置に格納されていることを示すために。アクティビティのフローは、ブロック435から、ブロック460から、またはブロック480から、ブロック485にて合流する。いずれの場合でも、選択されたメモリブロックは、ここではもう、選択されたメモリ位置に格納されている。方法400は、その結果、白/黒の停止の同心円490にて終わる。図5は、本発明の実施形態によるスナップショット作成の動作に関するアクティビティのフローを表すアクティビティ図を示し、この動作が、方法500により表現されている。方法500は、黒の開始円505にて始まり、続いて、ソースソフトウェアイメージのスナップショットターゲットソフトウェアイメージと呼ばれるを作成するリクエストが展開エージェントに提出されると、すぐにブロック510に移動する。それに応答して、展開エージェントはブロック515にて、ターゲットソフトウェアイメージの新たなイメージヘッダを、ヘッダ部分に作成するソースソフトウェアイメージのイメージヘッダと同じサイズで。ブロック520へと続いて、展開エージェントは、ソースソフトウェアイメージのオフセットマップおよびブートリストを、ターゲットソフトウェアイメージのイメージヘッダへとコピーする。続いて、ターゲットソフトウェアイメージの各メモリブロックそのオフセットマップに示されているに対し、ループが実行される。ループは、ブロック525にて開始し、展開エージェントは、ターゲットソフトウェアイメージのオフセットマップから、現メモリブロック第1のメモリブロックから始まるのブロックオフセットを読み出す。続いて、現メモリブロックを格納しているメモリ位置現メモリ位置と呼ばれるのメモリアドレスが、そのブロックオフセットをそのイメージアドレスに加算することによって計算される。ブロック530へと続いて、展開エージェントは、ブロックマップ内の現メモリ位置のブロックカウンタを1増やすそれがターゲットイメージにも使用されていることを示すために。ここで、ブロック535にてテストが行われ、ターゲットソフトウェアイメージのすべてのメモリブロックが処理されたかどうかが検証される。処理されていなければ、アクティビティのフローはブロック525へ戻り、ターゲットソフトウェアイメージの次のメモリブロックに対して同じ動作を繰り返す。逆の場合、ループは終了し、方法500は、白/黒の停止の同心円540にて終わる。したがって、ソフトウェアイメージのスナップショットを作成する動作は、対応するメモリブロックのコピーを必要としないため、非常に高速である。図6は、本発明の実施形態によるスナップショット削除の動作に関するアクティビティのフローを表すアクティビティ図を示し、この動作が、方法600により表現されている。方法600は、黒の開始円605にて始まり、続いて、古くなったソフトウェアイメージを削除するリクエストが展開エージェントに提出されると、すぐにブロック610に移動する。それに応答して、展開エージェントはブロック615にて、古くなったソフトウェアイメージのオフセットマップにアクセスする。続いて、古くなったソフトウェアイメージの各メモリブロックそのオフセットマップに示されているに対し、ループが実行される。ループは、ブロック620にて開始し、展開エージェントは、古くなったソフトウェアイメージのオフセットマップから、現メモリブロック第1のメモリブロックから始まるのブロックオフセットを読み出す。続いて、現メモリブロックを格納しているメモリ位置現メモリ位置と呼ばれるのメモリアドレスが、そのブロックオフセットをそのイメージアドレスに加算することによって計算される。ブロック625へと続いて、展開エージェントは、ブロックマップ内の現メモリ位置のブロックカウンタを1減らすそれが古くなったソフトウェアイメージによってもう使用されていないことを示すために。特に、現メモリ位置が、古くなったソフトウェアイメージのみに使用されていた場合は、そのブロックカウンタは0になり、現メモリ位置が空きであることが示される。ここで、ブロック630にてテストが行われ、古くなったソフトウェアイメージのすべてのメモリブロックが処理されたかどうかが検証される。処理されていなければ、アクティビティのフローはブロック620へ戻り、古くなったソフトウェアイメージの次のメモリブロックに対して同じ動作を繰り返す。逆の場合、ブロック635へと下降することで、ループは終了する。この時点で、展開エージェントは、古くなったソフトウェアイメージのイメージヘッダを削除する。方法600は、その結果、白/黒の停止の同心円640にて終わる。したがって、ソフトウェアイメージを削除する動作も、そのメモリブロックに対するいかなる実際のアクションも必要としないため、非常に高速である。図7は、本発明の実施形態によるスナップショット切り替えの動作に関するアクティビティのフローを表すアクティビティ図を示し、この動作が、方法700により表現されている。方法700は、黒の開始円705にて始まり、続いて、もう1つのソフトウェアイメージに切り替えるリクエストが展開エージェントに提出されると、すぐにブロック710に移動する。それに応答して、展開エージェントは、ブロック715にて、再配置された位置から、現在のソフトウェアイメージのブート位置そのブートリストにおいて示されているに、メモリブロックを復元する。ブロック720へと続いて、展開エージェントは、このもう1つのソフトウェアイメージのブート位置そのブートリストにおいて示されているに格納されているメモリブロックを、再配置部分へ再配置する。ここでブロック725を参照する。展開エージェントは、このもう1つのソフトウェアイメージのブートブロックを、そのブート位置へとコピーする。アクティビティのフローは、ブロック730へと続き、展開エージェントは、このもう1つのソフトウェアイメージのイメージヘッダをポイントするようヘッダインデックスを更新する。この時点で、展開エージェントは、ブロック735にて、コンピュータの電源を切り、続いて電源を入れて、このもう1つのソフトウェアイメージのブート位置にある、そのブートブロックから再起動する。結果として、このもう1つのソフトウェアイメージのオペレーティングシステムの、そのブートブロックに対応する部分および展開エージェントが、コンピュータのワーキングメモリにロードされるまさに上記のように、このもう1つのソフトウェアイメージの選択されたメモリブロックにアクセスするリクエストすべてに、展開エージェントが応じるように。方法700は、その結果、白/黒の停止の同心円740にて終わる。したがって、もう1つのソフトウェアイメージに切り替える動作例えば、コンピュータの前のスナップショットに戻すためには、対応するブートブロックのコピーのみを必要とするため、非常に高速である。これは、特定の用途で非常に有用となり得る例えば、要求に応じた使用のために複数のソフトウェアイメージがクラウドコンピューティングアーキテクチャにおいて提供される場合。図8は、本発明の実施形態によるスナップショットエクスポートの動作に関するアクティビティのフローを表すアクティビティ図を示し、この動作が、方法800により表現されている。方法800は、黒の開始円805にて始まり、続いて、選択されたソフトウェアイメージを外部デバイス例えば、リムーバブルストレージユニットまたは遠隔サーバにエクスポートするリクエストが展開エージェントに提出されると、すぐにブロック810へ移動する。それに応答して、展開エージェントはブロック815にて、選択されたソフトウェアイメージのオフセットマップにアクセスする。続いて、選択されたソフトウェアイメージの各メモリブロックそのオフセットマップに示されているに対し、ループが実行される。ループは、ブロック820にて開始し、展開エージェントは、現メモリブロック第1のメモリブロックから始まるのブロックオフセットを、選択されたソフトウェアイメージのオフセットマップから読み出す。次に、アクティビティのフローは、現メモリブロックのブロックオフセットの値に従ってブロック825にて分岐する。現メモリブロックのブロックオフセットがヌル値と等しければ現メモリブロックが使用されていないことを意味する、ブロック830にて展開エージェントは、現メモリブロックにデフォルト値を割り当てる例えば、そのすべてのビットを0にセットすることによる。反対に、現メモリブロックのブロックオフセットが有効値を有する現メモリブロックが使用されていることを意味すると、展開エージェントは、ブロック835にて、現メモリブロックを格納しているべきイメージ部分のメモリ位置現メモリ位置と呼ばれるのメモリアドレスを、そのブロックオフセットをそのイメージアドレスに加算することによって計算する。ここで、ブロック840にてテストが行われ、現メモリ位置が再配置部分へ再配置されているすなわち、現メモリ位置のメモリアドレスが、ブートリストにおいて示される、現在のソフトウェアイメージのブートアドレスの1つに等しい場合かどうかが検証される。そうであれば、展開エージェントは、ブロック845にて、現メモリ位置を、対応する再配置されたメモリ位置に等しくセットするそれに合わせてそのメモリアドレスを置換することによる。方法800は、続いて、ブロック850へと下降する。現メモリ位置が再配置されていない場合も、ブロック840から直接同じポイントに達する。この時点で、展開エージェントは、現メモリブロックを現メモリ位置から読み出す。いずれの場合でも、アクティビティのフローはブロック855にて合流するブロック830またはブロック850のいずれかから。展開エージェントはここで、現メモリブロックを外部デバイスにコピーする。ここで、ブロック860にてテストが行われ、選択されたソフトウェアイメージのすべてのメモリブロックが処理されたかどうかが検証される。処理されていなければ、アクティビティのフローはブロック820へ戻り、選択されたソフトウェアイメージの次のメモリブロックに対して同じ動作を繰り返す。逆の場合、ループは終了し、方法800は、白/黒の停止の同心円865にて終わる。最後に、図9は、本発明の実施形態によるスナップショットインポートの動作に関するアクティビティのフローを表すアクティビティ図を示し、この動作が、方法900により表現されている。方法900は、黒の開始円905にて始まり、続いて、外部ソフトウェアイメージを外部デバイス例えば、リムーバブルストレージユニットまたは遠隔サーバからインポートするリクエストが展開エージェントに提出されると、すぐにブロック910へ移動する。それに応答して、展開エージェントはブロック915にて、外部デバイス上の外部ソフトウェアイメージにアクセスする。ブロック920へと続いて、展開エージェントは、ヘッダ部分に、外部ソフトウェアイメージの新たなイメージヘッダを作成する。外部ソフトウェアイメージのイメージヘッダは、インポートされるソフトウェアイメージのサイズに対応するいくつかのブロックオフセットを備えるオフセットマップと、インポートされるソフトウェアイメージのブートアドレスにセットされるブートリストとを含むソフトウェアイメージと関連して外部デバイスにおいて特定されているとおり。続いて、外部ソフトウェアイメージの各メモリブロックに関してループが実行される。ループは、ブロック925にて開始し、展開エージェントは、現メモリブロック第1のメモリブロックから始まるを外部デバイスから読み出す。ブロック930に移動し、展開エージェントは、現メモリブロックを受け入れる、空きのイメージ部分のメモリ位置現メモリ位置と呼ばれるを識別する。続いて、ブロック935にて展開エージェントは、現メモリ位置のブロックカウンタを1にセットするそれが今は外部ソフトウェアイメージによって使用されているということを示すために。ブロック940へと続いて、展開エージェントは、現メモリ位置のメモリアドレスから現メモリブロックのイメージアドレスを減算することによって、現メモリ位置のブロックオフセットを計算する。続いて、現メモリブロックのブロックオフセットは、外部ソフトウェアイメージのオフセットマップに格納される。ブロック945にて、ここで現メモリブロックは現メモリ位置に格納される。ここで、ブロック950にてテストが行われ、外部ソフトウェアイメージのすべてのメモリブロックが処理されたかどうかが検証される。処理されていなければ、アクティビティのフローはブロック925へ戻り、外部ソフトウェアイメージの次のメモリブロックに対して同じ動作を繰り返す。逆の場合、ループは終了し、方法900は、白/黒の停止の同心円955にて終わる。さらに、上記の技術は、ソフトウェアイメージをコンピュータ上に展開するために使用されてもよい。この点について、以下、本発明の実施形態による展開プロセスを実装するために使用されるとよい主なソフトウェアコンポーネントの役割を表現するコラボレーション図を示す、図10~図13を参照する。詳細には、図面は、システムの静的構造を表し参照符号1000を用いて全体として表示された対応するコンポーネントを用いて、さらにその動的挙動を表す連続的な順序番号により表示され、対応するアクションをそれぞれ表現する、交換される一連のメッセージを用いて。図10から始める。コンピュータ100は、例えばローカルエリアネットワークLAN:LocalAreaNetworkなどのネットワーク1005を介してサーバコンピュータまたは単にサーバ1010に接続されている。サーバ1010参照符号1015および1030によりそれぞれ表示されたワーキングメモリおよびハードディスクを備えるは、展開マネージャ1035、例えば、IBM社のIBMTivoliProvisioningManagerforOSDeploymentまたはTPMforOSDのIBMTivoliProvisioningManagerforImagesまたはTPMfIIBMおよびTivoliは、IBM社の商標を実行する。展開マネージャ1035は、それに接続された任意のクライアントコンピュータへの、ソフトウェアイメージ1040対応するリポジトリに格納されているの展開を自動化するために使用される。詳細には、新たなソフトウェアイメージ参照符号1040Nで表示されているがコンピュータ100上に展開されるときは必ず、オペレータ1045が、例えば図示されていないもう1つのクライアントコンピュータ上で実行されているブラウザに接続することにより、展開マネージャ1035を介して、これらコンピュータ100および新たなソフトウェアイメージ1040Cを選択するアクションA1:選択。それに応答して、展開マネージャ1035は、コンピュータ100の電源を入れる。結果として、コンピュータ100が、機能しているオペレーティングシステムを何も有しないと仮定すれば、コンピュータ100は、ネットワーク1005を介してブートする。詳細には、コンピュータ100のブートローダは、ブート可能デバイスを発見せず、その結果、例えばそのネットワークアダプタに組み込まれているプリブート実行環境PXE:PrebootExecutionEnvironmentなどのネットワークブートローダを立ち上げる。ネットワークブートローダは、例えば、動的ホスト構成プロトコルDHCP:DynamicHostConfigurationProtocolに基づく動的アドレスサービスを活用して、サーバ1010DHCPサーバとしての機能を果たすからコンピュータ100の動的アドレスを取得し、これによって、ネットワークブートストラッププログラムのアドレスも提供され、このプログラムは、コンピュータ100のRAMディスク、すなわち大容量メモリとして扱われるワーキングメモリ115の一部にダウンロードされ、続いて立ち上げられる。例えば、Windowsプレインストール環境WinPE:WindowsPreinstallationEnvironmentなどのネットワークブートストラッププログラムは、最小限のオペレーティングシステム1055を提供し、これに展開エージェント260が含まれるアクションA2:ネットワークブート。Windowsは、MicrosoftCorporationの商標である。展開エージェント260は、ハードディスク130のイメージ部分205、ヘッダ部分210何のイメージヘッダもない、ブロックマップ230イメージ部分205のメモリ位置すべてのブロックカウンタが、それらが空きであることを示すよう0にセットされている、ヘッダインデックス235、および再配置部分240を定義することによって、ハードディスク130を初期化するアクションA3:初期化。続いて展開エージェント260は、新たなソフトウェアイメージ1040Nのブートブロックをサーバ1010からダウンロードする。このために、展開エージェント260は、例えばiSCSIプロトコルに基づきサーバコンピュータ1010の遠隔アクセスサーバ1060と対話する遠隔アクセスイニシエータとしての機能を果たすアクションA4:ダウンロード。続いて展開エージェント260は、ヘッダ部分210内に、新たなソフトウェアイメージ1040Nの新たなイメージヘッダを作成する参照符号215Nで表示されている。イメージヘッダ215Nは、新たなソフトウェアイメージ1040Nのサイズに対応するいくつかのブロックオフセットを備えるオフセットマップそのすべてが、ヌル値にセットされ、この場合は、対応するメモリブロックがハードディスク130において利用可能でないことも示すと、ブートリストとを含み、ブートリストは、新たなソフトウェアイメージ1040Nと関連して対応するリポジトリにおいて特定されている、新たなソフトウェアイメージ1040NのブートアドレスにセットされるアクションA5:構成。ここで展開エージェント260は、新たなソフトウェアイメージ1040Nのブートブロックを、イメージ部分205内の対応するブート位置へと格納することができ、それらが濃い灰色で示され参照符号250Nで表示されている。同時に、イメージヘッダ215Nのオフセットマップ内の各ブートブロックのブロックオフセットが、対応するブートアドレスにセットされる。さらに、ブロックマップ230内の各ブート位置のブロックカウンタが1にセットされ、現在は新たなソフトウェアイメージ1040Nによって使用されていることが示されるアクションA6:格納。この時点で、展開エージェント260は、コンピュータ100の電源を切り、続いて電源を入れる。その結果、図11に示されているように、ここでコンピュータ100は、ブートブロック250Nからブートし、その結果、そのブートブロック250Nに対応する新たなソフトウェアイメージ1040Nのオペレーティングシステムの部分参照符号255Nで表示されているおよび展開エージェント260イメージヘッダ215Nを含むをワーキングメモリ115にロードするアクションA7:ローカルブート。これ以降、コンピュータ100の動作中の、新たなソフトウェアイメージ1040Nの選択されたメモリブロックにアクセスするリクエストすべてに、展開エージェント260のストリーミングドライバが応じるこれは、この場合もやはり、図示されていない、オペレーティングシステム255Nの標準のファイルシステムドライバに優先する。詳細には、ファイルシステムドライバは、選択されたメモリブロックにアクセスするリクエストを、例えば図示されていないアプリケーションプログラムから受け取る。ファイルシステムドライバは、リクエストを展開エージェント260に渡すアクションA8:アクセスリクエスト。選択されたメモリブロックの読み込みがリクエストされた場合、展開エージェント260は、選択されたメモリブロックがハードディスク130において利用可能であるかどうかを検証するイメージヘッダ215Nのオフセットマップ内の対応するブロックオフセットによって示される。選択されたメモリブロックが、ハードディスク130において利用可能でなければすなわち、ブロックオフセットがヌル値に等しい、展開エージェント260は、オペレーティングシステム255Nの、図示されていない遠隔アクセスドライバ当該の例ではiSCSIイニシエータとしての機能を果たすに、リクエストを渡す。遠隔アクセスドライバは、遠隔アクセスサーバ1060を介して、ソフトウェアイメージ1040Nサーバ1010上から選択されたメモリブロックをダウンロードする。続いて遠隔アクセスドライバは、選択されたメモリブロックを展開エージェント260に返すアクションA9.10:ダウンロード。展開エージェント260は、上述の対応する書き込み動作を実行することによって、選択されたメモリブロックをハードディスク130に格納しこの場合、選択されたメモリブロックは、常にイメージ部分205の空きメモリ位置に格納される、灰色で示されている新たなソフトウェアイメージ1040Nのメモリブロックでイメージ部分205を徐々に埋めるアクションA9.11:書き込み。反対に、選択されたメモリブロックが、ハードディスク130において既に利用可能であればすなわち、そのブロックオフセットが有効値を有する、展開エージェント260は、上記のように対応する読み込み動作を実行することによって、選択されたメモリブロックをハードディスク130から直接読み出すアクションA9.20:読み込み。どちらの場合も、展開エージェント260は、選択されたメモリブロックをファイルシステムドライバに返し、次にファイルシステムドライバは、それをアプリケーションプログラムに返すアクションA10:返す。一方、選択されたメモリブロックの書き込みがリクエストされた場合、展開エージェント260は、上記のように対応する書き込み動作を実行することによって、選択されたメモリブロックをハードディスク130に直接書き込むアクションA11:書き込み。したがって、新たなソフトウェアイメージ1040Nは、展開プロセスがまだ進行中でも、通常通り更新可能であるそれが既に完全にコンピュータ100上に展開されたかのように。以下、図12を参照する。完全に非同期の形で、展開エージェント260は、サーバ1010、コンピュータ100、もしくはネットワーク1005、またはそのいずれかの組み合わせの作業負荷を周期的に検証する例えば、10~100ms毎。作業負荷が所定の閾値よりも低ければ例えば、サーバ1010もしくはコンピュータ100、またはその両方でアクションが実行されていないこと、およびネットワーク1005のトラフィックが低いことなどが理由で、対応するリソースが現在十分に活用されていないことを示す、展開エージェント260は、ハードディスク130においてまだ利用可能でない新たなソフトウェアイメージ1040Nの新たなメモリブロック例えば、イメージヘッダ215Nのオフセットマップ内のブロックオフセットがヌル値に等しい最初のものを、遠隔アクセスサーバ1060を介してダウンロードするアクションA12:ダウンロード。続いて展開エージェント260は、新たなメモリブロックを、上記のようにハードディスク130に書き込むアクションA13:書き込み。このようにして、新たなソフトウェアイメージ1040Nのすべてのメモリブロックが必ず、最後にはダウンロードされるようにすることができる使用されることがなくても。これが生じると、展開エージェント260のストリーミング機能を無効化することが続いてコンピュータ100をサーバ1010から切断することもできる。上記のストリーミング技術は、非常に短時間で、つまり新たなソフトウェアイメージ1040Nのブートブロック250Nがハードディスク130に格納された直後に、コンピュータ100を、展開プロセスがまだ進行中であっても使える状態にする例えば、10~200Mバイトのブートブロックという典型的なサイズでは、1~2分後。その結果、コンピュータ100の動作は、ハードディスク130において新たなソフトウェアイメージ1040Nの他のメモリブロックが利用可能か否かにかかわらず、完全に通常通りでありそのブートは、通常通りハードディスク130から直接である、コンピュータ100が、サーバ1010からまだダウンロードされなくてはならないメモリブロックにアクセスするときに、コンピュータ100のパフォーマンスがわずかに低下するのみである。さらに、コンピュータ100を使用できる状態にするのに必要な時間は、新たなソフトウェアイメージ1040Nのサイズとは無関係である。メモリブロックがアクセスされると、ますます多くのメモリブロックがコンピュータ100上で既に利用可能となるため、ネットワーク1005の利用も時間と共に減る例えば、対数法則で。なお、この点において、このストリーミング技術は、ソフトウェアイメージを要求に応じて提供する、当技術分野で既知の技術とは無関係である。実際、既知のストリーミング技術では、ソフトウェアイメージのメモリブロックがコンピュータにダウンロードされるのは即時使用のためのみである。しかし、このメモリブロックは、コンピュータ上に永続的には格納されずすなわち、使用された後、およびいずれにしてもコンピュータの電源が切られた後には、メモリブロックは消失する、その結果、それを次に使用するためには再度ダウンロードしなければならない。結果として、コンピュータをサーバから切断することは決してできない。実際、メモリブロックは、先取りされる場合でも、次の見込まれる使用までしかコンピュータ上に残らない。同じく、メモリブロックのローカルキャッシュが実装された場合でも、再使用のためにローカルキャッシュに残るメモリブロックはほんのわずかであるいずれの場合でも、新たなメモリブロックを格納するために、ローカルキャッシュ内の最も長い間使用されていないメモリブロックは最終的には排除される。他の新たなソフトウェアイメージ1040をコンピュータ100上に展開するためにも、同じストリーミング技術が使用され得るスナップショット切り替えの上記動作に関連する。このために、図13に示されているように、オペレータ1045は、もう1つの新たなソフトウェアイメージ参照符号1040N’で表示されているを選択するアクションA14:選択。それに応答して、上記のように、展開エージェント260は、新たなソフトウェアイメージ1040N’のブートブロックを、遠隔アクセスサーバ1060を介してサーバ1010からダウンロードするアクションA15:ダウンロード。この時点で、展開エージェント260は、現在のソフトウェアイメージのブートリストにおいて示されている現在のソフトウェアイメージのブート位置に、再配置されたメモリ位置からのメモリブロックあればを復元するアクションA16:復元。続いて展開エージェント260は、新たなソフトウェアイメージ1040N’のブート位置に格納されたメモリブロックを、再配置部分240に再配置し、それらは参照符号245N’で表示されているアクションA17:再配置。続いて展開エージェント260は、新たなソフトウェアイメージ1040N’のサイズに対応するいくつかのブロックオフセットを含むオフセットマップと、新たなソフトウェアイメージ1040N’のブートアドレスにセットされるブートリストとを備える、新たなソフトウェアイメージ1040N’の新たなイメージヘッダ参照符号215N’で表示されているを、ヘッダ部分210に作成するアクションA18:構成。ここで展開エージェント260は、新たなソフトウェアイメージ1040N’のブートブロックを、そのブート位置に格納できそれらが濃い灰色で示され、参照符号250N’で表示されている、これは、それに合わせてイメージヘッダ215N’のオフセットマップおよびブロックマップ230を更新するのと同時に行われるアクションA19:格納。この時点で、展開エージェント260は、コンピュータ100をそのブートブロック250N’からブートするために、その電源を切り、続いて電源を入れて、その結果、新たなソフトウェアイメージ1040N’のオペレーティングシステムの、そのブートブロック250N’および展開エージェントに対応する部分をワーキングメモリ115にロードする。まさに上記のように、展開エージェントが、新たなソフトウェアイメージ1040N’の任意の選択されたメモリブロックにアクセスするあらゆるリクエストに応じるアクションA20:リブート。上記のソリューションは、すべてのソフトウェアイメージのブートブロックの認識を必要とする。このために、例えば、それに合わせてソフトウェアイメージを準備することができる。この点について、本発明の実施形態によるソリューションで使用される一般的なソフトウェアイメージの準備プロセスを実装するために使用され得る主なソフトウェアコンポーネント全体として参照符号1100で表示されているの役割を表現するコラボレーション図を示す、図14を参照する。このために、サーバ1010は、マスタソフトウェアイメージまたは単にマスタイメージ1105のリポジトリを含む。各マスタイメージ1105は、対応するソフトウェアイメージの基本バージョン例えば、それが以前にインストールされていたドナーコンピュータのハードディスクのコンテンツを記録することによって作成されるを提供するが、これは、ドナーコンピュータの任意の構成に関係する固有のコンテンツ例えばドライバおよびレジストリ設定が除去されたものである。サーバ1010は、モデル1110のリポジトリも含み、代わって各モデル1110は、ソフトウェアイメージが展開されなければならないクライアントコンピュータの対応する構成の固有のコンテンツを含む。オペレータ1045は、展開マネージャ1035を介して、特定のタイプのコンピュータその展開エージェント260を備える対応する補助コンピュータ100’によって表現されているのソフトウェアイメージ選択されたマスタイメージ1105および選択されたモデル1110を含むを選択するアクションB1:選択。それに応答して、展開マネージャ1035は、選択されたソフトウェアイメージの識別子を渡すことによって、補助コンピュータ100’上の展開エージェント260をウェイクアップさせるwakes-upアクションB2:ウェイクアップ。結果として、展開エージェント260は、選択されたソフトウェアイメージに遠隔アクセスサーバ1060を介して遠隔アクセスするために、選択されたソフトウェアイメージを遠隔ディスクとしてマウントするすなわち、当該の例ではiSCSIイニシエータとして機能することによる。結果として、補助コンピュータ100’による排他的アクセス用の、一時ソフトウェアイメージまたは単に一時イメージ1115が作成される。一時イメージ1115は、単に、選択されたマスタイメージ1105および選択されたモデル1110のメモリブロックをポイントするインデックス構造によって定義され、すなわち、そのコピーは作られない。一時イメージ1115は、アクセスされる一時イメージ1115の任意のメモリブロックのイメージアドレスを追跡するために、ブロック追跡機能が有効にされた状態でマウントされるアクションB3:マウント。この時点で、展開エージェント260は、一時イメージ1115上の補助コンピュータ100’のブートシーケンスをシミュレートする展開エージェントのロードまで。例えば、MicrosoftWindowsでは、展開エージェント260は、MBR、ブートセクタ、bootmgr.exeファイル、boot\bcdファイル、システムレジストリ、winload.exeファイル、システムレジストリで特定されているドライバファイル、および展開エージェントを読み込むアクションB4:シミュレートされたブート。シミュレートされたブートシーケンスが完了すると、展開エージェント260は、一時イメージ1115をアンマウントするアクションB5:アンマウント。続いて展開エージェント260は、一時イメージ1115を、展開マネージャ1035にコミットするアクションB6:コミット。それに応答して、展開マネージャ1035は、新たなソフトウェアイメージまたは単に新たなイメージ1120を、一時イメージ1115単にそのインデックス構造により定義されているから構築する。さらに、新たなイメージ1120は、シミュレートされたブート手順の間にアクセスされたメモリブロックのリストに関連付けられ、このメモリブロックが、対応するブートブロックを定義するアクションB7:構築。当然、ローカルの、特有の要件を満たすために、当業者は、上述のソリューションに対して多数の論理的もしくは物理的またはその両方の変更および改変を適用してよい。さらに具体的には、このソリューションは、その1つ以上の実施形態を参照して、ある程度の詳細事項と共に記載されたが、当然のことながら、形態および細部における様々な省略、置換、および変更、ならびに他の実施形態も可能である例えば、数値および構成に関して。詳細には、本発明の種々の実施形態は、本発明をより深く理解できるよう上記の説明において記載された特定の細部を伴わずに実践されることさえも可能である。反対に、周知の特徴は、不必要な詳細で説明を曖昧にしないために、省略または簡略化されていることもある。さらに、一般的な設計上の問題として、開示されたソリューションの任意の実施形態に関連して記載された特定の構成要素もしくは方法ステップまたはその両方が、他の任意の実施形態に組み入れられてもよいということが明白に意図されている。例えば、同じソリューションが、等価な方法で実装される場合より多くのステップの同じ機能を伴う同様のステップ、またはその一部を使用すること、必須ではないいくつかのステップを除去すること、または別の任意選択のステップを追加することによって、同様の留意事項が当てはまる。さらに、このステップは、異なる順序で、または同時に、または交互配置された形で実行されてもよい少なくとも部分的に。提案された技術は、特に物理コンピュータ上での使用を対象に設計されているが、仮想マシン上での適用も除外されない。さらに、ソフトウェアイメージは、任意のソフトウェアプログラムを含み得る例えば、いかなるアプリケーションプログラムもしくはデータまたはその両方も伴わないオペレーティングシステムのみ。同じく、メモリブロックは、任意の種類の情報を含み得る例えば、オペレーティングシステムまたはアプリケーションプログラムのいずれかに関する、1つ以上のセクタ、ファイル、ライブラリ、ディレクトリ、その組み合わせまたは一部。前述の説明では、1つ以上のソフトウェアイメージが完全にインストールされるその結果ネットワーク接続が必要なくなるコンピュータに言及したが、同じ技術が、コンピュータのハードディスクに部分的にのみ格納されるソフトウェアイメージにも適用されてもよいコンピュータがそのソフトウェアイメージに戻されるときに再開するソフトウェアイメージの展開を伴う。同じ技術がさらに、ブートシーケンスにかかわらず、その他任意のオペレーティングシステムに適用され得る。例えば、LinuxLinusTorvaldsの商標では、ブートブロックは、展開エージェントに加えてGRBUブートローダを含むMBR、ならびにカーネルおよびinitrdファイルシステムを含む/bootディレクトリを含む。この場合、ブートシーケンスの間に、BIOSは、GRBUを含むMBRをロードし、GRBUが、/bootディレクトリを発見してカーネルおよびinitrdファイルシステムをロードし、GRBUがカーネル上でブートし、カーネルがinitrdファイルシステムを起動し、initrdファイルシステムが展開エージェントを起動する。いずれの場合でも、上記のアクセス機能は、どのような等価な構造によっても実装され得る展開エージェントがなくても。コンピュータのハードディスクは、違った形で編成されてもよい。例えば、代わりの実装では、メモリブロックは、イメージ部分の空きメモリ位置に再配置される専用の再配置部分を何ら必要としない。さらに、その他任意の制御構造が、ソフトウェアイメージの各メモリブロックと、それが格納される対応するメモリ位置とを関連付けるために使用されてもよい。例えば、各ソフトウェアイメージに関して、オフセットマップは、各メモリブロックを格納するメモリ位置のメモリアドレスまたはその任意の他のインジケーションを直接含んでもよく、ブートブロックも、オフセットマップにおいて識別されてもよい例えば、対応するフラグを用いてなどである。あるいは、メモリブロックが再配置されると、このメモリブロックと、それを使用する各ソフトウェアイメージのオフセットマップ内の対応する再配置されたメモリ位置のメモリアドレスとを関連付けることができる。こうすることで、オフセットマップは常に、各メモリブロックが格納されている実際のメモリ位置イメージ部分または再配置部分内のメモリアドレスを直接提供する。他の任意のデフォルト値が、使用されていないメモリブロックに関連付けられてもよい。なお、すべてのソフトウェアイメージの、使用されていないメモリブロックと、共通の所定のメモリ位置とを関連付ける可能性は除外されないその場合、すべてのメモリブロックが、厳密に同じ形で読み込まれる。この場合、書き込み動作も簡略化することができるすなわち、書き込まれるメモリブロックを格納するメモリ位置が現在のソフトウェアイメージによってのみ使用されている状況、または他のソフトウェアイメージと共有されている状況を、区別することのみによる。ブロックマップは、任意の等価な構造に置き換えることもできるそれに合わせて書き込み動作が更新される。例えば、各メモリ位置の利用可能性を示すフラグを格納するビットマップを提供し、その結果、使用されているメモリ位置のみのブロックカウンタ常に0より大きいを提供しても、何も支障はない。さらに、または代わりに、各メモリ位置に格納されたメモリブロックを使用して、ソフトウェアイメージのインジケーションを格納することも可能である。同様の留意事項が、上述の他の動作に当てはまるすなわち、スナップショット作成動作、スナップショット削除動作、スナップショット切り替え動作、スナップショットエクスポート動作、およびスナップショットインポート動作。当然、こうした動作は、制限的な形で解釈されてはならず、上述の同じソリューションが、それらの一部のみ、もしくは追加の動作またはその両方もサポートし得る例えば、オペレーティングシステムのスナップショットの管理のみ。コンピュータがもう1つのソフトウェアイメージに切り替えられるときに再配置されたメモリブロックを復元するステップは、必ずしも必要ではない。例えば、すべてのソフトウェアイメージのブートブロックを、対応するブート位置に常に格納された状態に保ち、その結果、対応するメモリブロックを常に再配置された状態に保つことも可能であるそれによって、切り替え動作が高速化するが、ハードディスクの空き容量の浪費という代償がある。ソフトウェアイメージは、任意の外部ソース例えば、リムーバブル格納デバイスからの上記のストリーミング技術を用いて展開され得る。あるいは、ソフトウェアイメージが完全に展開された後でも、ストリーミングプロセスを常にアクティブに保つことも可能である例えば、対応するブロックオフセットのヌル値へのリセットに応答してメモリブロックの最新バージョンをダウンロードするために。作業負荷が、任意の他の頻度で、もしくは特定の期間のみに例えば夜間、コンピュータ、サーバ、ネットワーク、もしくはその任意の組み合わせのみに関して監視される場合、または作業負荷が閾値を下回るときに2つ以上のメモリブロックが同時にダウンロードされる場合ストリーミングプロセスが常にアクティブのままであればこの機能は省略されてよい、同様の留意事項が当てはまる。いずれの場合でも、提案された技術は、ソフトウェアイメージがどのようにしてクライアントコンピュータ上に展開されているかとは完全に無関係である例えば、いかなるサーバコンピュータも用いず手動であっても。ソフトウェアイメージはさらに、別の形で準備されてもよい例えば、そのブートブロックを識別するために、補助コンピュータを実際にブートして、ブーティングシーケンスの間にアクセスされるメモリブロックを追跡することによって。プログラム本発明の各実施形態を実装するために使用され得るが、別の形で構築されている場合、または追加のモジュールもしくは機能が提供される場合、同様の留意事項が当てはまる。同じく、メモリ構造は、他のタイプであっても、または等価なエンティティに置き換えられてもよい必ずしも物理的な格納媒体から成らない。このプログラムは、任意のデータ処理システムによって、またはそれに関連して例えば、仮想マシン内使用されるのに適した任意の形態をとるとよい。詳しくは、プログラムは、外部または常駐ソフトウェア、ファームウェア、またはマイクロコード例えばコンパイルまたは解釈される、オブジェクトコードまたはソースコードのいずれかの形態をとり得る。さらに、プログラムを、任意のコンピュータ使用可能媒体上に実装される製品として提供することができる。媒体は、プログラムを含むこと、格納すること、伝達すること、伝播させること、または転送することに適した任意の構成要素とすることができる。例えば、媒体は、電子、磁気、光学、電磁気、赤外線、または半導体タイプのものでもよい。そのような媒体の例は、固定ディスクプログラムがあらかじめロードされることができる、リムーバブルディスク、テープ、カード、ワイヤ、ファイバ、ワイヤレス接続、ネットワーク、放送波などである。いずれの場合でも、本発明の実施形態によるソリューションは、ハードウェア構造例えば、半導体材料のチップに統合されて、または適切にプログラムされた、もしくは別の方法で構成されたソフトウェアおよびハードウェアの組み合わせを用いて実装されるのにも適する。あるいは、システムは、別の構造を有するか、または等価なコンポーネントを含むか、または他の動作特性を有する。いずれの場合でも、そのあらゆるコンポーネントが、より多くの構成要素に分けられてもよく、または2つ以上のコンポーネントが、単一の構成要素へと結合されてもよい。さらに、各コンポーネントが、対応する動作の並列実行をサポートするよう複製されてもよい。さらに、概して、異なるコンポーネント間の任意の対話は連続的である必要はなく別に指定のない限り、直接であっても、または1つ以上の中間物を介し間接的であってもよいことを指摘しておく。詳細には、システムは、異なるアーキテクチャに基づいてもよく例えば、広域、グローバル、セルラ方式、または衛星ネットワーク、任意のタイプの有線もしくは無線、またはその両方接続を活用する。いずれの場合でも、各コンピュータは、別の構造を有してもよく、同様の構成要素を含んでもよいプログラムまたはその一部を一時的に格納するキャッシュメモリなど。さらに、コンピュータを、任意のデータ処理エンティティ例えばPDA、移動電話など、または複数のエンティティの組み合わせに置き換えることが可能である。