(57)【要約】【課題】プロセスをマイグレートするためのコンピュータ実装方法、コンピュータベースのシステム、およびコンピュータ可読媒体を提供すること。【解決手段】本発明は、少なくとも１つのプロセスを、ソース・オペレーティング・システム（ＯＳ１）を有するソース・システム（Ｓ１）から、ターゲット・オペレーティング・システム（ＯＳ２）を有するターゲット・システム（Ｓ２）にマイグレートするための方法に関し、前記ソース・システムと前記ターゲット・システム（Ｓ１、Ｓ２）、および前記ソース・オペレーティング・システムと前記ターゲット・オペレーティング・システム（ＯＳ１、ＯＳ２）は異なり、ターゲット・システム（Ｓ２）は、  −  ソース・システム（Ｓ１）のソース仮想化マイグレーション・コンポーネント（ＶＭ１）との互換性があり、ソース仮想化マイグレーション・コンポーネント（ＶＭ１）によって送られたマイグレーション・トリガ情報を受け取るように適合された、ターゲット仮想化マイグレーション・コンポーネント（ＶＭ２）と、  −  ターゲット・システム（Ｓ２）を使用してソース・システム（Ｓ１）をエミュレートするように適合されたエミュレータ（ＥＭ１２）と、  −  ソース・システム（Ｓ１）上で実行されるプロセスに関連するソース・アプリケーション・コード（Ｃ１）を、ターゲット・システム（Ｓ２）上で実行可能なバイナリ・ターゲット・アプリケーション・コード（Ｃ２）に変換するように適合されたコンパイラ（Ｃ１２）と、  −  ソース・オペレーティング・システム（ＯＳ１）に向けられたシステム・コールを、ターゲット・オペレーティング・システム（ＯＳ２）に向けられたシステム・コールに変換するためのシステム・コール変換器（ＳＣＴ１２）と、  −  ソース・オペレーティング・システム（ＯＳ１）のランタイム・ライブラリに向けられたコールを、ターゲット・オペレーティング・システム（ＯＳ２）のランタイム・ライブラリに向けられたコールに変換するためのランタイム・ライブラリ変換器（ＲＴＴ１２）とを備える。【選択図】図２
2016504673.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つのプロセスを、ソース・オペレーティング・システム（ＯＳ１）を有するソース・システム（Ｓ１）から、ターゲット・オペレーティング・システム（ＯＳ２）を有するターゲット・システム（Ｓ２）にマイグレートするためのコンピュータ実装方法であって、前記ソース・システムと前記ターゲット・システム（Ｓ１、Ｓ２）、および前記ソース・オペレーティング・システムと前記ターゲット・オペレーティング・システム（ＯＳ１、ＯＳ２）が異なり、前記ターゲット・システム（Ｓ２）が、
−  前記ソース・システム（Ｓ１）のソース仮想化マイグレーション・コンポーネント（ＶＭ１）との互換性があり、前記ソース仮想化マイグレーション・コンポーネント（ＶＭ１）によって送られたマイグレーション・トリガ情報を受け取るように適合された、ターゲット仮想化マイグレーション・コンポーネント（ＶＭ２）と、
−  前記ターゲット・システム（Ｓ２）を使用して前記ソース・システム（Ｓ１）をエミュレートするように適合されたエミュレータ（ＥＭ１２）と、
−  前記ソース・システム（Ｓ１）上で実行されるプロセスに関連するソース・アプリケーション・コード（Ｃ１）を、前記ターゲット・システム（Ｓ２）上で実行可能なバイナリ・ターゲット・アプリケーション・コード（Ｃ２）に変換するように適合されたコンパイラ（Ｃ１２）と、
−  前記ソース・オペレーティング・システム（ＯＳ１）に向けられたシステム・コールを、前記ターゲット・オペレーティング・システム（ＯＳ２）に向けられたシステム・コールに変換するためのシステム・コール変換器（ＳＣＴ１２）と、
−  前記ソース・オペレーティング・システム（ＯＳ１）のランタイム・ライブラリに向けられたコールを、前記ターゲット・オペレーティング・システム（ＯＳ２）のランタイム・ライブラリに向けられたコールに変換するためのランタイム・ライブラリ変換器（ＲＴＴ１２）とを備え、
前記方法が、
−  前記ソース仮想化マイグレーション・コンポーネントおよび前記ターゲット仮想化マイグレーション・コンポーネント（ＶＭ１、ＶＭ２）を使用して前記少なくとも１つのプロセス（ＰＭ）のマイグレーションを開始するステップと、
−  マイグレートされることになる前記プロセス（ＰＭ）のための仮想アドレス空間を前記ターゲット・システム（Ｓ２）中で割り振るステップと、
−  マイグレートされることになる前記プロセス（ＰＭ）の仮想アドレス空間のメモリを、前記ターゲット・システム（Ｓ２）の前記割り振られた仮想アドレス空間にコピーするステップと、
−  前記プロセス（ＰＭ）に関連するオペレーティング・システム状態に関する情報を前記ターゲット・オペレーティング・システム（ＯＳ２）にコピーするステップと、
−  マイグレートされることになる前記プロセス（ＰＭ）を、前記エミュレータ（ＥＭ１２）を用いて前記ターゲット・オペレーティング・システム（ＯＳ２）上で実行するステップとを含み、前記エミュレータが、前記プロセス（ＰＭ）に関連する前記コードの実行を開始し、かつ、
−  前記プロセスに関連する、前記ソース・オペレーティング・システム（ＯＳ１）のためのシステム・コールおよびランタイム・ライブラリ・コールを、前記システム・コール変換器（ＳＣＴ１２）を用いて前記ターゲット・オペレーティング・システム（ＯＳ２）のためのシステム・コールに、かつ前記ランタイム・ライブラリ変換器（ＲＴＴ１２）を用いて前記ターゲット・オペレーティング・システム（ＯＳ２）のためのランタイム・ライブラリ・コールに変換するステップと、
−  前記ソース・アプリケーション・コード（Ｃ１）がまだ変換されていない場合に、前記コンパイラ（Ｃ１２）を用いて、マイグレートされることになる前記プロセス（ＰＭ）に関連する前記ソース・アプリケーション・コード（Ｃ１）を、前記ターゲット・システム（Ｓ２）上で実行可能な前記バイナリ・ターゲット・アプリケーション・コード（Ｃ２）に変換するステップと、
−  前記ターゲット・システム（Ｓ２）上における前記変換されたバイナリ・ターゲット・アプリケーション・コード（Ｃ２）の実行を開始するステップとを実施または開始する、方法。
【請求項２】
システム・コールおよびランタイム・ライブラリ・コールを変換する前記ステップ、ならびに前記ソース・アプリケーション・コード（Ｃ１）を変換する前記ステップが、オンデマンドで実施される、請求項１に記載の方法。
【請求項３】
前記コンパイラ（Ｃ１２）がジャストインタイム・コンパイラである、請求項１または２に記載の方法。
【請求項４】
前記コンパイラ（Ｃ１２）によってコンパイルされることになる前記ソース・アプリケーション・コード（Ｃ１）が、バイナリ・マシン・コード、バイナリ・マシン・コードと中間コードの組合せ、または中間コードである、請求項１ないし３のいずれか一項に記載の方法。
【請求項５】
前記プロセスが中断なしでマイグレートされ、前記プロセス（ＰＭ）のエミュレーションが、前記ターゲット・システム（Ｓ２）上における前記変換されたバイナリ・ターゲット・アプリケーション・コード（Ｃ２）の実行が開始されたときに停止される、請求項１ないし４のいずれか一項に記載の方法。
【請求項６】
前記エミュレータ（ＥＭ１２）を始動させる前に、前記ソース・オペレーティング・システム（ＯＳ１）の状態に関する情報が、前記ターゲット・オペレーティング・システム（ＯＳ２）のエミュレータ・プロセスのコンテキスト中で同一に事前割振りされる、請求項１ないし５のいずれか一項に記載の方法。
【請求項７】
前記ソース・オペレーティング・システム（ＯＳ１）の状態に関する情報が、前記ターゲット・オペレーティング・システム（ＯＳ２）のプロセス・コンテキスト中の任意の場所に配置され、前記情報へのアクセスが、前記ソース・オペレーティング・システム（ＯＳ１）のコンテキスト中のシステム・リソースから、前記ターゲット・オペレーティング・システム（ＯＳ２）の前記コンテキスト中のシステム・リソースに動的にマッピングされる、請求項１ないし５のいずれか一項に記載の方法。
【請求項８】
システム・コールおよびランタイム・ライブラリ・コールを変換する前記ステップ、ならびに前記ソース・アプリケーション・コード（Ｃ１）を変換する前記ステップが、少なくとも２つのシステム・コール変換器、少なくとも２つのランタイム・ライブラリ変換器、少なくとも２つのエミュレータ、または少なくとも２つのコンパイラ、あるいはそれらの組合せの、カスケードを使用して実施される、請求項１ないし７のいずれか一項に記載の方法。
【請求項９】
計算負荷を分割するためまたは分散させるためあるいはこの両方のために、１つのソース・システムからの少なくとも２つの無関係のプロセスが、少なくとも２つのターゲット・システムにマイグレートされる、請求項１ないし８のいずれか一項に記載の方法。
【請求項１０】
前記変換されたバイナリ・ターゲット・アプリケーション・コード（Ｃ２）が、前記ターゲット・システム（Ｓ２）のリポジトリにキャッシュされるかまたは永続的に記憶されるかあるいはその両方を施される、請求項１ないし９のいずれか一項に記載の方法。
【請求項１１】
前記変換されたバイナリ・ターゲット・アプリケーション・コード（Ｃ２）が、前記ソース・システムおよび前記ターゲット・システム（Ｓ１、Ｓ２）によってアクセスされるように中央リポジトリに永続的に記憶される、請求項１ないし１０のいずれか一項に記載の方法。
【請求項１２】
前記ソース・アプリケーション・コード（Ｃ１）から前記バイナリ・ターゲット・アプリケーション・コード（Ｃ２）への変換が中央コンパイル・エンティティによって実施される、請求項１ないし１１のいずれか一項に記載の方法。
【請求項１３】
チェッキング・エンティティを使用して、マイグレーション前に前記ソース・システム（Ｓ１）上で実行されていた前記アプリケーション・コード（Ｃ１）の実行のセマンティクスが、前記ターゲット・システム（Ｓ２）上のマイグレーション後の変換済みバイナリ・コードの実行のセマンティクスと比較される、請求項１ないし１２のいずれか一項に記載の方法。
【請求項１４】
ソース・オペレーティング・システム（ＯＳ１）を有するソース・システム（Ｓ１）と、ターゲット・オペレーティング・システム（ＯＳ２）を有するターゲット・システム（Ｓ２）とを少なくとも含む、プロセスをマイグレートするためのコンピュータベースのシステムであって、前記ソース・システムと前記ターゲット・システム（Ｓ１、Ｓ２）、および前記ソース・オペレーティング・システムと前記ターゲット・オペレーティング・システム（ＯＳ１、ＯＳ２）が異なり、前記ターゲット・システム（Ｓ２）が、
−  前記ソース・システム（Ｓ１）のソース仮想化マイグレーション・コンポーネント（ＶＭ１）との互換性があり、前記ソース仮想化マイグレーション・コンポーネント（ＶＭ１）によって送られたマイグレーション・トリガ情報を受け取るように適合された、ターゲット仮想化マイグレーション・コンポーネント（ＶＭ２）と、
−  前記ターゲット・システム（Ｓ２）を使用して前記ソース・システム（Ｓ１）をエミュレートするように適合されたエミュレータ（ＥＭ１２）と、
−  前記ソース・システム（Ｓ１）上で実行されるプロセスに関連するソース・アプリケーション・コード（Ｃ１）を、前記ターゲット・システム（Ｓ２）上で実行可能なバイナリ・ターゲット・アプリケーション・コード（Ｃ２）に変換するように適合されたコンパイラ（Ｃ１２）と、
−  前記ソース・オペレーティング・システム（ＯＳ１）に向けられたシステム・コールを、前記ターゲット・オペレーティング・システム（ＯＳ２）に向けられたシステム・コールに変換するためのシステム・コール変換器（ＳＣＴ１２）と、
−  前記ソース・オペレーティング・システム（ＯＳ１）のランタイム・ライブラリに向けられたコールを、前記ターゲット・オペレーティング・システム（ＯＳ２）のランタイム・ライブラリに向けられたコールに変換するためのランタイム・ライブラリ変換器（ＲＴＴ１２）とを備え、
前記システムが、
−  前記ソース仮想化マイグレーション・コンポーネントおよび前記ターゲット仮想化マイグレーション・コンポーネント（ＶＭ１、ＶＭ２）を使用して前記少なくとも１つのプロセス（ＰＭ）のマイグレーションを開始することと、
−  マイグレートされることになる前記プロセス（ＰＭ）のための仮想アドレス空間を前記ターゲット・システム（Ｓ２）中で割り振ることと、
−  マイグレートされることになる前記プロセス（ＰＭ）の仮想アドレス空間のメモリを、前記ターゲット・システム（Ｓ２）の前記割り振られた仮想アドレス空間にコピーすることと、
−  前記プロセス（ＰＭ）に関連するオペレーティング・システム状態に関する情報を前記ターゲット・オペレーティング・システム（ＯＳ２）にコピーすることと、
−  マイグレートされることになる前記プロセス（ＰＭ）を、前記エミュレータ（ＥＭ１２）を用いて前記ターゲット・オペレーティング・システム（ＯＳ２）上で実行することと、を行うように適合され、前記エミュレータが、前記プロセス（ＰＭ）に関連する前記コードの実行を開始するように適合され、かつ、
−  前記プロセスに関連する、前記ソース・オペレーティング・システム（ＯＳ１）のためのシステム・コールおよびランタイム・ライブラリ・コールを、前記システム・コール変換器（ＳＣＴ１２）を用いて前記ターゲット・オペレーティング・システム（ＯＳ２）のためのシステム・コールに、かつ前記ランタイム・ライブラリ変換器（ＲＴＴ１２）を用いて前記ターゲット・オペレーティング・システム（ＯＳ２）のためのランタイム・ライブラリ・コールに変換するステップと、
−  前記ソース・アプリケーション・コード（Ｃ１）がまだ変換されていない場合に、前記コンパイラ（Ｃ１２）を用いて、マイグレートされることになる前記プロセス（ＰＭ）に関連する前記ソース・アプリケーション・コード（Ｃ１）を、前記ターゲット・システム（Ｓ２）上で実行可能な前記バイナリ・ターゲット・アプリケーション・コード（Ｃ２）に変換するステップと、
−  前記ターゲット・システム（Ｓ２）上における前記変換されたバイナリ・ターゲット・アプリケーション・コード（Ｃ２）の実行を開始するステップとを実施または開始するように適合された、コンピュータベースのシステム。
【請求項１５】
コンピュータ可読プログラム・コードが組み入れられたコンピュータ可読媒体であって、プロセッサによって実行されたときに請求項１ないし１３のいずれか一項に記載の方法を前記プロセッサに実行させる、コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は一般に、プロセスのマイグレーションの分野に関する。より詳細には、本発明は、異種コンピューティング環境、すなわち、ソース・ハードウェア・システム上のソース・オペレーティング・システムからターゲット・ハードウェア・システム上のターゲット・オペレーティング・システムへの、プロセスのマイグレーションのための方法およびシステムに関する。ここでは、ソース・オペレーティング・システムとターゲット・オペレーティング・システムは異なり、ソース・ハードウェアとターゲット・ハードウェアは異なる。
【背景技術】
【０００２】
異なるハードウェアおよび異なるオペレーティング・システムを使用するコンピュータ・システム同士を、標準化されたネットワーク・インタフェースを使用して相互接続することは、周知の技術である。特に、クラウド環境は、多種多様のサーバ・マシン・アーキテクチャおよびオペレーティング・システムを含む場合がある（異種クラウド環境）。
【０００３】
このようなサーバ・マシンは、定期的なメンテナンスを受ける必要があるかまたは他の機能停止に直面するが、これらはサーバ・ダウンタイムにつながる。この問題を回避するために、いくつかのサーバ・マシンは、別のサーバ・マシンへの、仮想サーバのゼロ・ダウンタイム・マイグレーションを提供する。しかし、これらの解決法は、ターゲット・マシンがソース・マシンと同じアーキテクチャのものであることを常に必要とする。
【０００４】
異種クラウド環境では、ゼロ・ダウンタイム・マイグレーションが実施されなければならない時点で、ソース・サーバ・マシンと同じアーキテクチャのサーバ・マシンが利用可能でないのに対して、異なるアーキテクチャの、または異なるアーキテクチャ・レベルの、または異なるハードウェア機能がインストールされたサーバ・マシンが利用可能である場合がある。
【０００５】
ソース・マシンのエミュレータをターゲット・マシン上で利用して、異なるハードウェア／アーキテクチャにマイグレートすることはできるが、コードのエミュレーションは一般に、低い全体性能を被る。しかし、このようなシナリオでは、完全な仮想サーバをマイグレートすることに束縛される。すなわち、ソース・マシン上で実行されている種々のアプリケーションを異なるターゲット・マシンに移動することは不可能である。
【０００６】
したがって、マイグレートされたアプリケーションが、ターゲット・マシン上でネイティブにまたはほぼネイティブに機能し、したがって可能な最大のフレキシビリティを提供する、異種クラウド・シナリオでアプリケーションのマイグレーションを実施するためのメカニズムを有することが有利であろう。
【０００７】
本発明のコンテキストにおけるマイグレーションは、ライブ・マイグレーション、またはライブでないマイグレーションに関係する場合がある。ライブ・マイグレーションは、実行中のプロセスを中断なしでマイグレートすることを意味する。ライブでないマイグレーションは、実行中のプロセスがソース・システム上でサスペンドされ、プロセスの状態がソース・システム上で保存され、プロセスの状態がソース・システムからターゲット・システムに転送されることを意味する。プロセスの状態が転送された後、プロセスは、ソース・システム上で終了され、ターゲット・システム上で再開される。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明の実施形態の目的は、異種コンピューティング環境でプロセスをマイグレートするための向上したコンピュータ実装方法、コンピュータ可読媒体、およびシステムを提供することである。この目的は、独立請求項の特徴によって解決される。好ましい実施形態が、従属請求項で提供される。明示的に別段の指示がない限り、本発明の実施形態は、相互に自由に組み合わせることができる。
【課題を解決するための手段】
【０００９】
第１の態様では、本発明は、少なくとも１つのプロセスを、ソース・オペレーティング・システムを有するソース・システムから、ターゲット・オペレーティング・システムを有するターゲット・システムにマイグレートするためのコンピュータ実装方法に関し、前記ソース・システムと前記ターゲット・システム、および前記ソース・オペレーティング・システムと前記ターゲット・オペレーティング・システムは異なり、ターゲット・システムは、
−  ソース・システムのソース仮想化マイグレーション・コンポーネントとの互換性があり、ソース仮想化マイグレーション・コンポーネントによって送られたマイグレーション・トリガ情報を受け取るように適合された、ターゲット仮想化マイグレーション・コンポーネントと、
−  ターゲット・システムを使用してソース・システムをエミュレートするように適合されたエミュレータと、
−  ソース・システム上で実行されるプロセスに関連するソース・アプリケーション・コードを、ターゲット・システム上で実行可能なバイナリ・ターゲット・アプリケーション・コードに変換するように適合されたコンパイラと、
−  ソース・オペレーティング・システムに向けられたシステム・コールを、ターゲット・オペレーティング・システムに向けられたシステム・コールに変換するためのシステム・コール変換器と、
−  ソース・オペレーティング・システムのランタイム・ライブラリに向けられたコールを、ターゲット・オペレーティング・システムのランタイム・ライブラリに向けられたコールに変換するためのランタイム・ライブラリ変換器とを備え、
この方法は、
−  前記ソース仮想化マイグレーション・コンポーネントおよび前記ターゲット仮想化マイグレーション・コンポーネントを使用して少なくとも１つのプロセスのマイグレーションを開始するステップと、
−  マイグレートされることになる前記プロセスのための仮想アドレス空間をターゲット・システム中で割り振るステップと、
−  マイグレートされることになるプロセスの仮想アドレス空間のメモリを、前記ターゲット・システムの前記割り振られた仮想アドレス空間にコピーするステップと、
−  前記プロセスに関連するオペレーティング・システム状態に関する情報をターゲット・オペレーティング・システムにコピーするステップと、
−  マイグレートされることになるプロセスを、前記エミュレータを用いて前記ターゲット・オペレーティング・システム上で実行するステップとを含み、前記エミュレータは、前記プロセスに関連するコードの実行を開始し、かつ、
−  前記プロセスに関連する、ソース・オペレーティング・システムのためのシステム・コールおよびランタイム・ライブラリ・コールを、前記システム・コール変換器を用いて前記ターゲット・オペレーティング・システムのためのシステム・コールに、かつ前記ランタイム・ライブラリ変換器を用いて前記ターゲット・オペレーティング・システムのためのランタイム・ライブラリ・コールに変換するステップと、
−  前記ソース・アプリケーション・コードがまだ変換されていない場合に、前記コンパイラを用いて、マイグレートされることになるプロセスに関連する前記ソース・アプリケーション・コードを、前記ターゲット・システム上で実行可能なバイナリ・ターゲット・アプリケーション・コードに変換するステップと、
−  前記ターゲット・システム上における前記変換されたバイナリ・ターゲット・アプリケーション・コードの実行を開始するステップとを実施または開始する。
【００１０】
したがって、この方法は、ゼロ・ダウンタイムの場合であっても、プロセスがソース・システムからターゲット・システムにマイグレートされるのを可能にする。すなわち、２つの異なるオペレーティング・システム／ハードウェアの組合せの間で、プロセスのライブ・マイグレーションがある。したがって、一時的にシャットダウンされることになるサーバのプロセスを、種々のターゲット・システムに分散させることができる。これにより、本発明は、マイグレーションにおける２つの段階を提案する。すなわち、最初に、ターゲット・システム上でのソース・システムのエミュレーションがあり、それにより、ソース・システム上のマイグレートされたプロセスをすぐに実行できるようにする。性能を増大させるために、第２段階で、ソース・アプリケーション・コードが、ターゲット・システム上でネイティブに実行できるターゲット・アプリケーション・コードに変換されることになる。変換後、計算リソースを節約するためにエミュレーション・プロセスは停止されてよい。
【００１１】
本発明の好ましい実施形態によれば、システム・コールおよびランタイム・ライブラリ・コールを変換するステップ、ならびに前記ソース・アプリケーション・コードを変換するステップは、オンデマンドで実施される。変換されることになるプロセスのエミュレーションがターゲット・システム内で開始された後、ソース・アプリケーション・コードは段階的に変換される。例えば、ソース・コード・パッセージがエミュレータ内で実行されて、このソース・コード・パッセージが前に変換されていない場合、ソース・コード・パッセージは即座に変換されることになる。同様に、過去に変換されなかったシステム・コールまたはランタイム・ライブラリ・コールが生じた場合、これらのシステム・コールまたはランタイム・ライブラリ・コールは、その使用後に直ちに変換されることになる。
【００１２】
本発明の好ましい実施形態によれば、コンパイラは、ジャストインタイム（ｊｕｓｔ−ｉｎ−ｔｉｍｅ）コンパイラである。ジャストインタイム・コンパイル（動的コンパイルとも呼ばれる）を使用して、機械可読バイナリ・ターゲット・コードがランタイムに生成される。すなわち、コードは、それが実行されようとしているときにコンパイルされる。これにより、ジャストインタイム・コンパイラへの入力は、中間コードまたは機械可読バイナリ・コードであってよく、このコードはジャストインタイム・コンパイラによって修正される。ジャストインタイム・コンパイルは、プロセスをマイグレートする性能を増大させる。
【００１３】
本発明の好ましい実施形態によれば、コンパイラによってコンパイルされることになるソース・アプリケーション・コードは、バイナリ・マシン・コード、バイナリ・マシン・コードと中間コードの組合せ、または中間コードである。中間コードは、プログラム・ソース・コードが解析されて字句および意味分析が実施された後の、プログラム・ソース・コードの抽象的なコンパイラ内部表現である。バイナリ・マシン・コードを使用するときは、エミュレータによって実行されることになるコードを直接使用して、バイナリ・ターゲット・コードを生成することができる。すなわち、同じバイナリ・コードが、エミュレータによって、ならびにコンパイラに対して使用される。一方、中間コードを使用すると、コンパイラは、元のソース・コードの抽象表現に基づいてプログラムを再コンパイルおよび最適化することができる。この手法では、元のソース・コードから直接生成されたかのように、基本的に同じ、ターゲット・システムのためのバイナリ・コードが得られる可能性が最も高い。
【００１４】
本発明の好ましい実施形態によれば、プロセスは中断なしでマイグレートされ、プロセスのエミュレーションは、前記ターゲット・システム上における前記変換されたバイナリ・ターゲット・アプリケーション・コードの実行が開始されたときに、停止される。プロセスをソース・システムからターゲット・システムのエミュレータにマイグレートし、後にターゲット・システム上でプロセスをネイティブ・モードで実行する（すなわち変換されたバイナリ・アプリケーション・コードを使用して）ことによって、プロセスは、ゼロ・ダウンタイムで、すなわちマイグレートされることになるプロセスの実行における中断なしでまたは少なくとも大きな中断なしで、ターゲット・システムに転送することができる。
【００１５】
本発明の好ましい実施形態によれば、エミュレータを始動させる前に、マイグレートされることになるプロセスに相関するソース・オペレーティング・システムの状態に関する情報が、ターゲット・オペレーティング・システムのエミュレータ・プロセスのコンテキスト中で同一に事前割振りされる。プロセスをマイグレートするためには、ソース・オペレーティング・システムの状態を定義するいくつかのオペレーティング・システム・リソース（例えば、プロセス識別子、ページ・テーブル・セットアップ、ファイル記述子、Ｓｙｓｔｅｍ  Ｖ  ＩＰＣリソースなど）を、ターゲット・オペレーティング・システムのコンテキストに転送することが不可欠である。リソースを同一に事前割振りした後、エミュレータ中で実行されているプロセスは、これらのリソースをすぐに直接に使用することができる。
【００１６】
本発明の好ましい実施形態によれば、ソース・オペレーティング・システムの状態に関する情報は、ターゲット・オペレーティング・システムのコンテキスト中の任意の場所に配置され、これらの情報へのアクセスは、ソース・オペレーティング・システムのコンテキスト中のシステム・リソースから、ターゲット・オペレーティング・システムのコンテキスト中のシステム・リソースに動的にマッピングされる。
【００１７】
本発明の好ましい実施形態によれば、システム・コールおよびランタイム・ライブラリ・コールを変換するステップ、ならびに前記ソース・アプリケーション・コードを変換するステップは、少なくとも２つのシステム・コール変換器、少なくとも２つのランタイム・ライブラリ変換器、少なくとも２つのエミュレータ、または少なくとも２つのコンパイラ、あるいはそれらの組合せの、カスケードを使用して実施される。これにより、オペレーティング・システム／ハードウェアの何らかの組合せに対してシステム・コール変換器、ランタイム・ライブラリ変換器、エミュレータ、またはコンパイラ、あるいはそれらの組合せが不足している場合に、これらの変換器、エミュレータ、およびコンパイラのうちの少なくとも２つをスタックすることによってマイグレーションを実現することができ、したがってコードやコールなどの変形が可能になる。
【００１８】
本発明の好ましい実施形態によれば、計算負荷を分割するためまたは分散させるためあるいはこの両方のために、１つのソース・システムからの少なくとも２つの無関係のプロセスが、少なくとも２つのターゲット・システムにマイグレートされる。これにより、シャットダウンされる予定のソース・システムのプロセスを複数のターゲット・サーバにマイグレートして、特定のターゲット・サーバによって引き継がれなければならない作業負荷を最小限に抑えることが可能である。
【００１９】
本発明の好ましい実施形態によれば、変換されたバイナリ・ターゲット・アプリケーション・コードは、ターゲット・システムのリポジトリにキャッシュされるかまたは永続的に記憶されるかあるいはその両方を施される。これにより、このコードは、好ましくはターゲット・システムのシャットダウン後でも、再使用することができる。変換されたバイナリ・ターゲット・アプリケーション・コードはまた、再使用するために、同じオペレーティング・システム／ハードウェア構成を有する別のターゲット・システムに転送することもできる。
【００２０】
本発明の好ましい実施形態によれば、変換されたバイナリ・ターゲット・アプリケーション・コードは、ソース・システムおよびターゲット・システムによってアクセスされるように、中央リポジトリに永続的に記憶される。エミュレータまたはコンパイラあるいはその両方は、それ自体で変換を実施する代わりに、すでに変換されたターゲット・アプリケーション・コード、または変換されたターゲット・アプリケーション・コードの一部を、後で再使用することができる。
【００２１】
本発明の好ましい実施形態によれば、ソース・アプリケーション・コードからバイナリ・ターゲット・アプリケーション・コードへの変換は、中央コンパイル・エンティティによって実施される。中央コンパイル・エンティティは、高度に並列かつ非常に高速な方式でコードを変換するように適合されてよい。中央コンパイル・エンティティを使用して、ターゲット・システムのコンパイル・タスク全体を引き継ぐことができる。別法として、中央コンパイル・エンティティを使用して、頻繁に使用されるいくつかのコード部分を事前変換し、変換されたコードをリポジトリ内に記憶することができる。ターゲット・システムは、マイグレーションを開始する前に、これらの事前変換済みコード部分をリポジトリから事前ロードすることができる。これらの事前変換済みコード部分を使用して最終的なターゲット・アプリケーション・コードを構築することができ、したがってマイグレーションはかなり高速化される。
【００２２】
本発明の好ましい実施形態によれば、チェッキング・エンティティを使用して、マイグレーション前にソース・システム上で実行されていたアプリケーション・コードの実行のセマンティクスが、ターゲット・システム上のマイグレーション後の変換済みバイナリ・コードの実行のセマンティクスと比較される。これにより、コードおよびコールの変換が正しかったこと、したがってプロセスが適切にマイグレートされたことが保証される。
【００２３】
さらに他の態様では、本発明は、ソース・オペレーティング・システムを有するソース・システムと、ターゲット・オペレーティング・システムを有するターゲット・システムとを少なくとも含む、プロセスをマイグレートするためのコンピュータベースのシステムに関し、前記ソース・システムと前記ターゲット・システム、および前記ソース・オペレーティング・システムと前記ターゲット・オペレーティング・システムは異なり、ターゲット・システムは、
−  ソース・システムのソース仮想化マイグレーション・コンポーネントとの互換性があり、ソース仮想化マイグレーション・コンポーネントによって送られたマイグレーション・トリガ情報を受け取るように適合された、ターゲット仮想化マイグレーション・コンポーネントと、
−  ターゲット・システムを使用してソース・システムをエミュレートするように適合されたエミュレータと、
−  ソース・システム（Ｓ１）上で実行されるプロセスに関連するソース・アプリケーション・コードを、ターゲット・システム上で実行可能なバイナリ・ターゲット・アプリケーション・コードに変換するように適合されたコンパイラと、
−  ソース・オペレーティング・システムに向けられたシステム・コールを、ターゲット・オペレーティング・システムに向けられたシステム・コールに変換するためのシステム・コール変換器と、
−  ソース・オペレーティング・システムのランタイム・ライブラリに向けられたコールを、ターゲット・オペレーティング・システムのランタイム・ライブラリに向けられたコールに変換するためのランタイム・ライブラリ変換器とを備え、
このシステムは、
−  前記ソース仮想化マイグレーション・コンポーネントおよび前記ターゲット仮想化マイグレーション・コンポーネントを使用して少なくとも１つのプロセスのマイグレーションを開始すること、
−  マイグレートされることになる前記プロセスのための仮想アドレス空間をターゲット・システム中で割り振ること、
−  マイグレートされることになるプロセスの仮想アドレス空間のメモリを、前記ターゲット・システムの前記割り振られた仮想アドレス空間にコピーすること、
−  前記プロセスに関連するオペレーティング・システム状態に関する情報をターゲット・オペレーティング・システムにコピーすること、
−  マイグレートされることになるプロセスを、前記エミュレータを用いて前記ターゲット・オペレーティング・システム上で実行すること、を行うように適合され、前記エミュレータは、前記プロセスに関連するコードの実行を開始するように適合され、かつ、
−  前記プロセスに関連する、ソース・オペレーティング・システムのためのシステム・コールおよびランタイム・ライブラリ・コールを、前記システム・コール変換器を用いて前記ターゲット・オペレーティング・システムのためのシステム・コールに、かつ前記ランタイム・ライブラリ変換器を用いて前記ターゲット・オペレーティング・システムのためのランタイム・ライブラリ・コールに変換するステップと、
−  前記ソース・アプリケーション・コードがまだ変換されていない場合に、前記コンパイラを用いて、マイグレートされることになるプロセスに関連する前記ソース・アプリケーション・コードを、前記ターゲット・システム上で実行可能なバイナリ・ターゲット・アプリケーション・コードに変換するステップと、
−  前記ターゲット・システム上における前記変換されたバイナリ・ターゲット・アプリケーション・コードの実行を開始するステップと、を実施または開始するように適合される。
【００２４】
以下、図面を参照しながら、本発明の好ましい実施形態についてほんの一例としてより詳細に述べる。
【図面の簡単な説明】
【００２５】
【図１】コンピューティング環境の概略アーキテクチャを示す図である。
【図２】ソース・システムおよびターゲット・システムの概略構造を示す図である。
【図３】本発明によるマイグレーション・プロセスの概略フローチャートである。
【図４】変換およびエミュレーション・エンティティのスタッキングを使用した、ソース・システムおよびターゲット・システムの概略構造を示す図である。
【発明を実施するための形態】
【００２６】
当業者には理解されるであろうが、本発明の態様は、システム、方法、またはコンピュータ・プログラム製品として具現化することができる。したがって、本発明の態様は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、または、ソフトウェアとハードウェアの態様を組み合わせた実施形態の形をとることができ、本明細書ではこれらは全て「回路」、「モジュール」、または「システム」と一般に呼ばれる場合がある。さらに、本発明の態様は、コンピュータ可読プログラム・コードが組み入れられた１つまたは複数のコンピュータ可読媒体において具現化されるコンピュータ・プログラム製品の形をとることもできる。１つまたは複数のコンピュータ可読媒体の、任意の組合せを利用することができる。コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体とすることができる。コンピュータ可読記憶媒体は、例えば、電子、磁気、光学、電磁、赤外線、もしくは半導体の、システム、装置、もしくはデバイス、またはこれらの任意の適切な組合せとすることができるが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例（非網羅的なリスト）は、１つもしくは複数のワイヤを有する電気接続、ポータブル・コンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読取専用メモリ（ＲＯＭ）、消去可能プログラム可能な読取専用メモリ（ＥＰＲＯＭもしくはフラッシュ・メモリ）、光ファイバ、ポータブル・コンパクト・ディスク読取専用メモリ（ＣＤ−ＲＯＭ）、光学記憶デバイス、磁気記憶デバイス、またはこれらの任意の適切な組合せを含むことになる。この文書のコンテキストでは、コンピュータ可読記憶媒体は、命令実行システム、装置、またはデバイスによって使用されるかまたはそれらに関連して使用されるプログラムを、収録または記憶することのできる、任意の有形媒体とすることができる。
【００２７】
コンピュータ可読信号媒体は、例えばベースバンド中にまたは搬送波の一部として、コンピュータ可読プログラム・コードが組み入れられた伝搬データ信号を含んでよい。このような伝搬信号は、電磁、光学、またはこれらの任意の他の適切な組合せを含めた（ただしこれらに限定されない）様々な形のいずれかをとることができる。コンピュータ可読信号媒体は、コンピュータ可読記憶媒体でないコンピュータ可読媒体であって、命令実行システム、装置、もしくはデバイスによって使用されるかまたはそれらに関連して使用されるプログラムを通信、伝搬または搬送できるコンピュータ可読媒体とすることができる。
【００２８】
コンピュータ可読媒体上に組み入れられたプログラム・コードは、ワイヤレス、有線、光ファイバ・ケーブル、ＲＦなど、またはこれらの任意の適切な組合せを含めた（ただしこれらに限定されない）、任意の適切な媒体を使用して伝送することができる。
【００２９】
本発明の態様に関する動作を実施するためのコンピュータ・プログラム・コードは、Ｊａｖａ（Ｒ）、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、および、「Ｃ」プログラミング言語または類似のプログラミング言語などの従来の手続き型プログラミング言語を含めた、１つまたは複数のプログラミング言語の任意の組合せで書かれてよい。プログラム・コードは、完全にユーザのコンピュータ上で実行されるか、部分的にユーザのコンピュータ上で実行されるか、または完全にリモート・コンピュータもしくはサーバ上で実行されてよい。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）もしくはワイド・エリア・ネットワーク（ＷＡＮ）を含めた任意のタイプのネットワークを介してユーザのコンピュータに接続されてよく、または、接続は、外部コンピュータに対して（例えばインターネット・サービス・プロバイダを使用してインターネットを介して）行われてもよい。
【００３０】
図１を参照すると、コンピューティング環境１の従来のアーキテクチャが示されている。例えば、２つのコンピューティング・システムＳ１、Ｓ２がネットワーク接続３を介して結合されて、コンピューティング・システムＳ１、Ｓ２が相互に通信することが可能になる。このコンピューティング環境は、異種環境である。すなわち、システムＳ１のハードウェアＨＷ１は、システムＳ２のハードウェアＨＷ２とは異なる。加えて、コンピューティング・システムＳ１、Ｓ２は、異なるオペレーティング・システムを備える場合がある。すなわち、システムＳ１は第１のオペレーティング・システムＯＳ１を備え、システムＳ２は第２のオペレーティング・システムＯＳ２を備え、オペレーティング・システムＯＳ１とＯＳ２は異なる。コンピューティング・システムＳ１、Ｓ２は、仮想マシン・モニタ（ハイパーバイザとも呼ばれる）の上で稼働することのできる専用サーバまたは仮想サーバであってよい。以下では、少なくとも１つのプロセスＰＭが、コンピューティング・システムＳ１からコンピューティング・システムＳ２にマイグレートされる。すなわち、このマイグレーションに関して、コンピューティング・システムＳ１はソース・システムであり、コンピューティング・システムＳ２はターゲット・システムである。
【００３１】
図２に、ソース・システムＳ１およびターゲット・システムＳ２をより詳細に示す。ソース・システムＳ１は、あるハードウェア・アーキテクチャを伴うハードウェアＨＷ１を備える。ソース・システムＳ１のオペレーティング・システムＯＳ１は、仮想化マイグレーション・コンポーネントＶＭ１、システム・コール・インタフェースＳＣ１、およびランタイム・ライブラリ・インタフェースＲＴ１を備える。仮想化マイグレーション・コンポーネントＶＭ１は、オペレーティング・システムＯＳ１内に位置することが好ましい。仮想化マイグレーション・コンポーネントＶＭ１は、ソース・システムＳ１からターゲット・システムＳ２にマイグレートされることになるプロセスＰＭのマイグレーションを開始および実施するように適合される。言い換えれば、仮想化マイグレーション・コンポーネントＶＭ１は、ソース・システムＳ１のマイグレーション・インタフェースを構築する。システム・コール・インタフェースＳＣ１は、プロセスＰＭによって開始されるシステム・コールを扱うためのインタフェースである。システム・コール・インタフェースＳＣ１を介して、プロセスがオペレーティング・システムのカーネルにサービスを要求することができる。これは、ハードウェアに関係するサービス（例えばハード・ディスクへのアクセス）、新しいプロセスの作成および実行、ならびに統合カーネル・サービスとの通信（スケジューリングのような）を含む場合がある。前出のランタイム・ライブラリ・インタフェースＲＴ１は、プロセスＰＭによって開始されるライブラリ・コールを扱う。ライブラリ・コールは、システム・コールを抽象化することによってアプリケーション・コードを削減するための、コンピュータ技術における周知の手段である。
【００３２】
マイグレートされることになる、プロセスＰＭ、またはプロセスのグループは、ソース・システムＳ１上で実行されている。プロセスＰＭは、コンパイルされたソース・アプリケーション・コードＣ１（すなわち、ソース・システムＳ１のハードウェアＨＷ１上でのみ実行できターゲット・システムＳ２上では実行できないバイナリ・マシン・コード）に関連する。コンパイルされたソース・アプリケーション・コードＣ１は、オペレーティング・システムＯＳ１のシステム・コール・インタフェースＳＣ１を介したシステム・コール、およびランタイム・ライブラリ・インタフェースＲＴ１を介したライブラリ・コールを開始することができる。
【００３３】
加えて、ターゲット・システムＳ２は、ハードウェアＨＷ１とは異なりうる、あるハードウェア・アーキテクチャを伴うハードウェアＨＷ２を備える。ターゲット・システムＳ２のオペレーティング・システムＯＳ２は、仮想化マイグレーション・コンポーネントＶＭ２、システム・コール・インタフェースＳＣ２、およびランタイム・ライブラリ・インタフェースＲＴ２を備える。仮想化マイグレーション・コンポーネントＶＭ２は、オペレーティング・システムＯＳ２内に位置することが好ましい。仮想化マイグレーション・コンポーネントＶＭ２は、ソース・システムＳ１の仮想化マイグレーション・コンポーネントＶＭ１との互換性を有する。すなわち、仮想化マイグレーション・コンポーネントＶＭ２は、仮想化マイグレーション・コンポーネントＶＭ１によってマイグレーションが開始されたプロセスＰＭのマイグレーション・ターゲットとしての役割を果たすように適合される。言い換えれば、仮想化マイグレーション・コンポーネントＶＭ２は、仮想化マイグレーション・コンポーネントＶＭ１の相対物を構築して、ソース・システムＳ１とターゲット・システムＳ２との間でのプロセスのマイグレーションを可能にする。
【００３４】
システム・コール・インタフェースＳＣ２は、オペレーティング・システムＯＳ２に向けられたシステム・コールを扱うためのインタフェースである。前記ランタイム・ライブラリ・インタフェースＲＴ２は、オペレーティング・システムＯＳ２に向けられたライブラリ・コールを扱う。
【００３５】
さらに、ターゲット・システムＳ２はエミュレータＥ１２を備え、エミュレータＥ１２は、ソース・システムＳ１のハードウェアＨＷ１をターゲット・システムＳ２上でエミュレートするように適合される。エミュレータＥ１２内では、プロセスＰＭを、ターゲット・システムＳ２上においてエミュレーション・モードで実行することが可能である。すなわち、ソース・システムＳ１の機能がターゲット・システムＳ２内で再現されて、プロセスＰＭをターゲット・システムＳ２上で実行することが可能になる。
【００３６】
ターゲット・システムＳ２はさらにコンパイラＣ１２を備え、コンパイラＣ１２は、ソース・システムＳ１上で実行できるソース・アプリケーション・コードＣ１を、ターゲット・システムＳ２上で直接に実行されるように適合されたターゲット・アプリケーション・コードＣ２に変換するように適合される。コンパイラＣ１２は、コードをランタイムにコンパイルできる動的ジャストインタイム・コンパイラであることが好ましい。ターゲット・システムＳ２上でプロセスがエミュレーション・モードで実行されている間に、コンパイルされることになるソース・アプリケーション・コードＣ１のアプリケーション・コード・パッセージにエミュレータＥ１２が遭遇したとき、ソース・アプリケーション・コードＣ１をオンデマンドでコンパイルすることが可能であることが好ましい。
【００３７】
ソース・オペレーティング・システムＯＳ１に向けられたシステム・コールを、ターゲット・オペレーティング・システムＯＳ２に向けられたコールに変換するために、ターゲット・システムＳ２は、システム・コール変換器ＳＣＴ１２を備える。システム・コール変換器ＳＣＴ１２は、ソース・オペレーティング・システムＯＳ１に向けられたシステム・コールを受け取って、このシステム・コールを、ターゲット・オペレーティング・システムＯＳ２によって扱われるかまたは処理されることが可能なシステム・コールに変換するように適合される。システム・コール変換器ＳＣＴ１２は、ソース・オペレーティング・システムＯＳ１に向けられたシステム・コールを受け取るためのシステム・コール・インタフェースＳＣ１と、オペレーティング・システムＯＳ２によって提供されるシステム・コール・インタフェースＳＣ２に変換済みシステム・コールを送信するためのインタフェースとを提供することが好ましい。これにより、ソース・アプリケーション・コードＣ１またはターゲット・アプリケーション・コードＣ２によって生成され、オペレーティング・システムＯＳ１を対象としていたシステム・コールを、オペレーティング・システムＯＳ２のためのネイティブ・システム・コールに変形することが可能である。
【００３８】
加えて、ターゲット・システムＳ２は、ランタイム・ライブラリ変換器ＲＴＴ１２を備える。ランタイム・ライブラリ変換器ＲＴＴ１２は、ソース・オペレーティング・システムＯＳ１のランタイム・ライブラリに向けられたライブラリ・コールを受け取って、このライブラリ・コールを、ターゲット・オペレーティング・システムＯＳ２によって扱われるかまたは処理されることが可能な、ターゲット・オペレーティング・システムＯＳ２のランタイム・ライブラリに向けられたライブラリ・コールに変換するように適合される。ランタイム・ライブラリ変換器ＲＴＴ１２は、ソース・オペレーティング・システムＯＳ１に向けられたライブラリ・コールを受け取るためのランタイム・ライブラリ・インタフェースＲＴ１と、オペレーティング・システムＯＳ２によって提供されるランタイム・ライブラリ・インタフェースＲＴ２に変換済みライブラリ・コールを送信するためのインタフェースとを提供することが好ましい。これにより、ソース・アプリケーション・コードＣ１またはターゲット・アプリケーション・コードＣ２によって生成され、オペレーティング・システムＯＳ１のランタイム・ライブラリを対象としていたライブラリ・コールを、オペレーティング・システムＯＳ２のためのネイティブ・ライブラリ・コールに変形することが可能である。
【００３９】
以下では、図３を用いて、ソース・システムＳ１からターゲット・システムＳ２へのプロセスＰＭの例示的なマイグレーションについて説明する。マイグレーション・プロセスの初め、マイグレートされることになるプロセスＰＭは、ソース・システムＳ１上で実行されている（１０）。ソース・システムＳ１上で実行されているプロセスＰＭをターゲット・システムＳ２にマイグレートすることが要求された場合（１１）、ターゲット・システムＳ２がソース・システムＳ１との互換性を有するかどうか、すなわちターゲット・システムＳ２がソース・システムＳ１と同じオペレーティング・システムＯＳ２およびハードウェアＨＷ２を備えることがチェックされる（１２）。
【００４０】
ターゲット・システムＳ２がソース・システムＳ１との互換性を有する場合は、ソース・システムＳ１からターゲット・システムＳ２への標準的なプロセス・マイグレーションが実施される（１３）。このプロセスは当業者に周知である。例えば、マイグレートされることになるプロセスに関連する、メモリおよび他のプロセス・パラメータが、ターゲット・システムＳ２にコピーされる。マイグレーション後、プロセスＰＭが開始され、プロセスＰＭは、ネイティブ・モードで（すなわち、ソース・システムＳ１上で実行されている間のものと同じバイナリ・アプリケーション・コード、システム・コール、ランタイム・ライブラリ・コールなどを使用して）実行されてよい（１４）。
【００４１】
互換性に関する判定が否定的である場合（１２）、すなわちターゲット・システムＳ２がソース・システムＳ１との互換性を有さない場合は、エミュレータＥ１２、システム・コール変換器ＳＣＴ１２、ランタイム・ライブラリ変換器ＲＴＴ１２、およびコンパイラＣ１２がターゲット・システムＳ２上で利用可能かどうかが調べられる。プロセス・マイグレーションに関わるシステムＳ１、Ｓ２のハードウェアＨＷ１、ＨＷ２およびオペレーティング・システムＯＳ１、ＯＳ２に関する前述のエミュレーションおよび変換タスクを実施するためには、エミュレータＥ１２、システム・コール変換器ＳＣＴ１２、ランタイム・ライブラリ変換器ＲＴＴ１２、およびコンパイラＣ１２が互換性を有さなければならない（１５）。
【００４２】
互換性のあるエミュレータＥ１２、システム・コール変換器ＳＣＴ１２、ランタイム・ライブラリ変換器ＲＴＴ１２、およびコンパイラＣ１２がターゲット・システムＳ２上で利用可能である場合は、プロセスＰＭは、ターゲット・システムＳ２上のエミュレータＥ１２のエミュレータ環境にマイグレートされる（１６）。マイグレーションは、仮想化マイグレーション・コンポーネントＶＭ１、ＶＭ２の対話によって実施される。プロセスＰＭを仮想化マイグレーション・コンポーネントＶＭ１から仮想化マイグレーション・コンポーネントＶＭ２にマイグレートするとき、プロセスＰＭの仮想アドレス空間のメモリが、オペレーティング・システムＯＳ２にコピーされる。さらに、プロセスＰＭに関連するオペレーティング・システム状態が、オペレーティング・システムＯＳ２にコピーされる。オペレーティング・システム状態は、ローカル・リソースおよびグローバル・リソースを含む。ローカル・リソースは、例えば、ページ・テーブル・セットアップ、ファイル記述子、Ｓｙｓｔｅｍ  Ｖ  ＩＰＣリソース（セマフォ、共有メモリ・エリア、キューなど）、プロセス識別子などである。グローバル・リソースは、例えば、オープン・ネットワーク接続、ネットワーク共有などである。
【００４３】
このコピーが終了した後、ターゲット・システムＳ２上で、エミュレータＥＭ１２を用いて、すなわちエミュレーション・モードで、プロセスＰＭの実行が開始される（１７）。ターゲット・システムＳ２上でソース・システムＳ１をエミュレートすることによってプロセスＰＭが実行される間、プロセスＰＭは、オペレーティング・システムＯＳ１に適合されたシステム・コールおよびランタイム・ライブラリ・コールを開始する。システム・コール変換器ＳＣＴ１２は、オペレーティング・システムＯＳ１に向けられたシステム・コールを、オペレーティング・システムＯＳ２に向けられたネイティブ・システム・コールに置換または変換し、したがって、置換または変換の後、元々オペレーティング・システムＯＳ１を対象としていたシステム・コールは、オペレーティング・システムＯＳ２によって扱うことができる（１８）。同様に、ランタイム・ライブラリ変換器ＲＴＴ１２は、オペレーティング・システムＯＳ１に向けられたランタイム・ライブラリ・コールを、オペレーティング・システムＯＳ２に向けられたネイティブ・ランタイム・ライブラリ・コールに置換または変換する（１９）。
【００４４】
ソース・アプリケーション・コードＣ１をターゲット・アプリケーション・コードＣ２（最終的にオペレーティング・システムＯＳ２によって実行できる）に変換するために、エミュレータＥＭ１２は、コード変換を実施するようコンパイラＣ１２をトリガする（２０）。コンパイラＣ１２は、ソース・アプリケーション・コードＣ１を受け取り、これを、ターゲット・システムＳ２上でネイティブに実行できるターゲット・アプリケーション・コードＣ２に変換する。すなわち、ターゲット・アプリケーション・コードＣ２は、ターゲット・システムＳ２に適合されたネイティブ・バイナリ・コードである。好ましくは、コンパイラＣ１２は、ソース・アプリケーション・コードＣ１のどの部分が前の変換ステップですでに変換済みかを認識するようにインテリジェントであってよい。これらのすでに変換された部分は再適用され、前に変換されていない残りの部分のみが変換される。さらに、コンパイラＣ１２は、動的なジャストインタイム・コンパイラであってよい。すなわち、ソース・アプリケーション・コードＣ１は、ソース・アプリケーション・コードＣ１がエミュレータＥＭ１２によって実行される間に、ターゲット・アプリケーション・コードＣ２に変換される。加えて、コンパイラは、ソース・アプリケーション・コードＣ１の変換をオンデマンドで実施することができる。すなわち、変換は、過去にターゲット・アプリケーション・コードＣ２にコンパイルされなかった、ソース・アプリケーション・コードＣ１のあるパッセージを、エミュレータＥＭ１２が使用するとき、インクリメンタルに実行される。これにより、ソース・アプリケーション・コードＣ１のコード・セグメントは、ターゲット・アプリケーション・コードＣ２のコード・セグメントで動的に置換される（２１）。ターゲット・アプリケーション・コードＣ２は、ターゲット・システムＳ２内で一時的に保存されることが好ましい。
【００４５】
ソース・アプリケーション・コードＣ１がターゲット・アプリケーション・コードＣ２に完全にコンパイルされた後、得られたターゲット・アプリケーション・コードＣ２は、永続的リポジトリに、すなわちターゲット・システムＳ２の不揮発性記憶手段に記憶される（２２）。これにより、ターゲット・アプリケーション・コードＣ２は、例えば、仮想化マイグレーション・コンポーネントＶＭ１から仮想化マイグレーション・コンポーネントＶＭ２への前述のマイグレーション・プロセスを実施する間に永続的リポジトリの内容を追加でマイグレートすることによって、再使用することができる。ターゲット・アプリケーション・コードＣ２をターゲット・システムＳ２上で永続的に記憶することに関するさらに他の利点は、ターゲット・システムＳ２の再起動後にターゲット・アプリケーション・コードＣ２を再使用できることである。すなわち、ソース・システムＳ１をエミュレートしソース・アプリケーション・コードＣ１をターゲット・アプリケーション・コードＣ２に再コンパイルするためのシステム・リソースを、節約することができる。
【００４６】
最後に、エミュレーション・モードでのプロセスＰＭの実施が停止され、プロセスＰＭは、前に生成されたターゲット・アプリケーション・コードＣ２を使用しながら、ＨＷ２に適したネイティブ・バイナリ・コードを実行する（２３）。システム・コール変換およびランタイム・ライブラリ・コール変換を実施し続ける必要がある場合もある。
【００４７】
ターゲット・システムＳ２上でのエミュレータＥＭ１２、システム・コール変換器ＳＣＴ１２、ランタイム・ライブラリ変換器ＲＴＴ１２、およびコンパイラＣ１２の利用可能性を決定する調査ステップ（１５）が否定的結果となった場合、ソース・システムＳ１からターゲット・システムＳ２へのマイグレーションは拒否されてよい（２４）。拒否の前に、変換およびエミュレーション・プロセスのスタッキングによってソース・システムＳ１からターゲット・システムＳ２へのマイグレーションが可能かどうかを判定するための中間調査ステップがあることが好ましい。異種コンピューティング環境では、エミュレータ、コンパイラ、システム・コール変換器、またはランタイム・ライブラリ・コール変換器、あるいはそれらの組合せが、ソースおよびターゲット・システムＳ１、Ｓ２のあらゆる可能な組合せについて存在するわけではない場合がある。
【００４８】
サポートされないオペレーティング・システムＯＳ２またはハードウェアＨＷ２あるいはその両方へのマイグレーションを可能にするために、それぞれの既存の変換およびエミュレーション・プロセスをスタックすることができ、したがって、結果的な処理スタックにより、任意のオペレーティング・システムＯＳ２上またはハードウェアＨＷ２上あるいはその両方で、所望のソース・アプリケーション・コードＣ１を実行することができる。例えば、Ｗｉｎｄｏｗｓ（Ｒ）／Ｉｎｔｅｌ（Ｒ）プロセスＰＭをＡＩＸ（Ｒ）システム上で実行することは、Ｌｉｎｕｘ／Ｉｎｔｅｌ（Ｒ）システム・コールおよびランタイム・ライブラリ・コール変換器の上でプロセスＰＭを処理し、Ｉｎｔｅｌ（Ｒ）−Ｐｏｗｅｒエミュレータおよびジャストインタイム・コンパイラを用いてＩｎｔｅｌ（Ｒ）コードをＬｉｎｕｘ  ｏｎ  Ｐｏｗｅｒコードに変換し、得られたコードをＬｉｎｕｘ  ｏｎ  Ｐｏｗｅｒ−ＡＩＸ（Ｒ）変換器の上で実行することによって、達成できるはずである。言い換えれば、コンパイラＣ１２、システム・コール変換器ＳＣＴ１２、またはランタイム・ライブラリ変換器ＲＴＴ１２、あるいはそれらの組合せが利用可能でないが、プロセスをソース・システムＳ１から第３のシステムにマイグレートするためのコンパイラＣ１３、システム・コール変換器ＳＣＴ１３、およびランタイム・ライブラリ変換器ＲＴＴ１３、ならびに、プロセスを第３のシステムからターゲット・システムＳ２にマイグレートするためのコンパイラＣ３２、システム・コール変換器ＳＣＴ３２、およびランタイム・ライブラリ変換器ＲＴＴ３２は利用可能である場合、このスタッキングを使用してソース・システムＳ１からターゲット・システムＳ２へのマイグレーションを実施することができる（図４）。
【００４９】
プロセスＰＭのマイグレーションのためには、プロセスＰＭに関連するオペレーティング・システム状態をオペレーティング・システムＯＳ２に転送する必要がある。オペレーティング・システム状態は、ページ・テーブル・セットアップ、ファイル記述子、Ｓｙｓｔｅｍ  Ｖ  ＩＰＣリソース（セマフォ、共有メモリ・エリア、キューなど）、プロセス識別子などを含む。オペレーティング・システム状態は、マイグレーション・プロセス中は変更されないものとすることができる。このことは、ターゲット・システムＳ２上でソース・システムＳ１のエミュレーションを実施する間、オペレーティング・システム状態がオペレーティング・システムＯＳ２のコンテキスト中で全く同じでなければならないことを意味する。さもなければ、エミュレーション・プロセスをオペレーティング・システムＯＳ２上で正しく実行することはできないはずである。ターゲット・システムＳ２上でマイグレートされることになるプロセスに関連するオペレーティング・システム状態を提供するための、少なくとも２つの異なる可能性がありうる。
【００５０】
第１の可能性は、オペレーティング・システム状態をオペレーティング・システムＯＳ２のコンテキスト中で事前割振りすることである。マイグレーションの最初に、オペレーティング・システムＯＳ２はまず、エミュレータを始動する前にオペレーティング・システム状態についての組合せのリソースをオペレーティング・システムＯＳ２のコンテキスト中で割り振る。マイグレートされることになるプロセスＰＭのエミュレーションが開始したとき、エミュレーションは、事前割振りされたリソースを、エミュレートされるプロセスに使用し、オペレーティング・システムＯＳ２のコンテキスト中の残りのリソースを、実際のエミュレータ・プロセスの実行に使用する。
【００５１】
第２の可能性は、オペレーティング・システム状態に関するリソースを、オペレーティング・システムＯＳ２のコンテキスト中の任意の場所に配置することである。オペレーティング・システム状態に関する情報へのアクセスを可能にするために、オペレーティング・システムに関する実際の情報へのマッピングが動的に行われる。この場合、ターゲット・システムＳ２上でのエミュレーションは、オペレーティング・システム状態をオペレーティング・システムＯＳ２のコンテキスト中で割り振る前に開始できるが、マッピングによる追加の計算労力がかかるので、全体的なマイグレーション性能はより低い場合がある。
【００５２】
本発明の好ましい一実施形態では、一意に識別可能なコード部分を永続的に保存するための中央リポジトリがあってよい。マイグレーション・プロセスに関わる可能性のある全てのシステムは、中央リポジトリへのアクセスを有することができる。特に、中央リポジトリは、クラウド環境内で構成されてよい。バイナリ・アプリケーション・コードを変形するエミュレータまたはコンパイラは、コンパイル結果を永続的に保存するために、コンパイル結果を中央リポジトリにサブミットすることができる。マイグレーション・プロセスに関わるシステムのエミュレータまたはコンパイラが、ソース・アプリケーション・コードＣ１をターゲット・アプリケーション・コードＣ２にコンパイルしなければならない場合、エミュレータまたはコンパイラは、コンパイルされることになるコードまたはコード部分が過去にすでにコンパイルされた可能性がありしたがって中央リポジトリ上で利用可能であるかどうかを調べるために、中央リポジトリへのアクセスを開始することができる。そうである場合は、エミュレータまたはコンパイラは、すでにコンパイルされたコードまたはコード部分をフェッチして再使用することができる。
【００５３】
多量のコンピューティング・エンティティを含むコンピューティング環境では特に、ソース・オペレーティング・システムＯＳ１またはハードウェアＨＷ１あるいはその両方に適合されたアプリケーション・コードを、ターゲット・オペレーティング・システムＯＳ２またはハードウェアＨＷ２あるいはその両方に適合されたバイナリ・アプリケーション・コードに変換するための、少なくとも１つのコンパイル・エンティティがある場合がある。コンパイル・エンティティは、コードの高度に並列かつ高速なコンパイルに適合されたものであってよい。コンパイル・エンティティは、コンパイル・タスクをエミュレータから受け取り、要求されたコンパイルを実施し、コンパイルされたコードを要求元エミュレータに送り返すことができる。追加でまたは別法として、コンパイルされたコードは中央リポジトリに送られてもよい。
【００５４】
コードのコンパイルは、中間コード技法を使用しながら実施されることが好ましい。コンパイラは、コンパイルのために、バイナリ・アプリケーション・コードに加えて、標準化された中間言語コードを生み出すことができる。中間言語コードが加わると、動的な再コンパイルは単純化され、ターゲット・システムのためのよりよい最適化されたバイナリ・コードを生み出すことができ、再コンパイルのさらに他の側面として、システム・コールおよびランタイム・ライブラリ・コール変換を不要にすることができる。例えば、中間言語コードおよび関連するバイナリ・アプリケーション・コードは、共に中央リポジトリに記憶されてよい。マイグレーション・プロセスに関わるシステムのオペレーティング・システムおよびハードウェア構成に応じて、コンパイルは、中間言語コードに基づいて行われてもよく、または、すでにコンパイルされたバイナリ・コードが選択されてもよい。
【００５５】
加えて、ターゲット・システム内またはコンピューティング環境内で、チェッキング・エンティティを共通エンティティとして利用することができる。チェッキング・エンティティは、マイグレーション前にソース・システムＳ１上で実行されていたバイナリ・コードの実行のセマンティクスを、ターゲット・システムＳ２上のマイグレーション後の変換済みバイナリ・コードの実行のセマンティクスと比較することができる。チェッキング・エンティティを実装することの目標は、ソース・アプリケーション・コードＣ１をターゲット・アプリケーション・コードＣ２にコンパイルする際に失敗があったかどうかを見出すことである。それぞれのセマンティクス間の違いが決定された場合、マイグレーションの試みは拒否されてよく、それによりエラー状況が回避される。
【図１】
2016504673.tif 000003
【図２】
2016504673.tif 000004
【図３】
2016504673.tif 000005
【図４】
2016504673.tif 000006
【手続補正書】
【提出日】平成27年6月19日(2015.6.19)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
少なくとも１つのプロセスを、ソース・オペレーティング・システム（ＯＳ１）を有するソース・システム（Ｓ１）から、ターゲット・オペレーティング・システム（ＯＳ２）を有するターゲット・システム（Ｓ２）にマイグレートするためのコンピュータ実装方法であって、前記ソース・システムと前記ターゲット・システム（Ｓ１、Ｓ２）、および前記ソース・オペレーティング・システムと前記ターゲット・オペレーティング・システム（ＯＳ１、ＯＳ２）が異なり、前記ターゲット・システム（Ｓ２）が、
−  前記ソース・システム（Ｓ１）のソース仮想化マイグレーション・コンポーネント（ＶＭ１）との互換性があり、前記ソース仮想化マイグレーション・コンポーネント（ＶＭ１）によって送られたマイグレーション・トリガ情報を受け取るように適合された、ターゲット仮想化マイグレーション・コンポーネント（ＶＭ２）と、
−  前記ターゲット・システム（Ｓ２）を使用して前記ソース・システム（Ｓ１）をエミュレートするように適合されたエミュレータ（ＥＭ１２）と、
−  前記ソース・システム（Ｓ１）上で実行されるプロセスに関連するソース・アプリケーション・コード（Ｃ１）を、前記ターゲット・システム（Ｓ２）上で実行可能なバイナリ・ターゲット・アプリケーション・コード（Ｃ２）に変換するように適合されたコンパイラ（Ｃ１２）と、
−  前記ソース・オペレーティング・システム（ＯＳ１）に向けられたシステム・コールを、前記ターゲット・オペレーティング・システム（ＯＳ２）に向けられたシステム・コールに変換するためのシステム・コール変換器（ＳＣＴ１２）と、
−  前記ソース・オペレーティング・システム（ＯＳ１）のランタイム・ライブラリに向けられたコールを、前記ターゲット・オペレーティング・システム（ＯＳ２）のランタイム・ライブラリに向けられたコールに変換するためのランタイム・ライブラリ変換器（ＲＴＴ１２）とを備え、
前記方法が、
−  前記ソース仮想化マイグレーション・コンポーネントおよび前記ターゲット仮想化マイグレーション・コンポーネント（ＶＭ１、ＶＭ２）を使用して前記少なくとも１つのプロセス（ＰＭ）のマイグレーションを開始するステップと、
−  マイグレートされることになる前記プロセス（ＰＭ）のための仮想アドレス空間を前記ターゲット・システム（Ｓ２）中で割り振るステップと、
−  マイグレートされることになる前記プロセス（ＰＭ）の仮想アドレス空間のメモリを、前記ターゲット・システム（Ｓ２）の前記割り振られた仮想アドレス空間にコピーするステップと、
−  前記プロセス（ＰＭ）に関連するオペレーティング・システム状態に関する情報を前記ターゲット・オペレーティング・システム（ＯＳ２）にコピーするステップと、
−  マイグレートされることになる前記プロセス（ＰＭ）を、前記エミュレータ（ＥＭ１２）を用いて前記ターゲット・オペレーティング・システム（ＯＳ２）上で実行するステップとを含み、前記エミュレータが、前記プロセス（ＰＭ）に関連する前記コードの実行を開始し、かつ、
−  前記プロセスに関連する、前記ソース・オペレーティング・システム（ＯＳ１）のためのシステム・コールおよびランタイム・ライブラリ・コールを、前記システム・コール変換器（ＳＣＴ１２）を用いて前記ターゲット・オペレーティング・システム（ＯＳ２）のためのシステム・コールに、かつ前記ランタイム・ライブラリ変換器（ＲＴＴ１２）を用いて前記ターゲット・オペレーティング・システム（ＯＳ２）のためのランタイム・ライブラリ・コールに変換するステップと、
−  前記ソース・アプリケーション・コード（Ｃ１）がまだ変換されていない場合に、前記コンパイラ（Ｃ１２）を用いて、マイグレートされることになる前記プロセス（ＰＭ）に関連する前記ソース・アプリケーション・コード（Ｃ１）を、前記ターゲット・システム（Ｓ２）上で実行可能な前記バイナリ・ターゲット・アプリケーション・コード（Ｃ２）に変換するステップと、
−  前記ターゲット・システム（Ｓ２）上における前記変換されたバイナリ・ターゲット・アプリケーション・コード（Ｃ２）の実行を開始するステップとを実施または開始する、方法。
【請求項２】
システム・コールおよびランタイム・ライブラリ・コールを変換する前記ステップ、ならびに前記ソース・アプリケーション・コード（Ｃ１）を変換する前記ステップが、オンデマンドで実施される、請求項１に記載の方法。
【請求項３】
前記コンパイラ（Ｃ１２）がジャストインタイム・コンパイラである、請求項１または２に記載の方法。
【請求項４】
前記コンパイラ（Ｃ１２）によってコンパイルされることになる前記ソース・アプリケーション・コード（Ｃ１）が、バイナリ・マシン・コード、バイナリ・マシン・コードと中間コードの組合せ、または中間コードである、請求項１ないし３のいずれか一項に記載の方法。
【請求項５】
前記プロセスが中断なしでマイグレートされ、前記プロセス（ＰＭ）のエミュレーションが、前記ターゲット・システム（Ｓ２）上における前記変換されたバイナリ・ターゲット・アプリケーション・コード（Ｃ２）の実行が開始されたときに停止される、請求項１ないし４のいずれか一項に記載の方法。
【請求項６】
前記エミュレータ（ＥＭ１２）を始動させる前に、前記ソース・オペレーティング・システム（ＯＳ１）の状態に関する情報が、前記ターゲット・オペレーティング・システム（ＯＳ２）のエミュレータ・プロセスのコンテキスト中で同一に事前割振りされる、請求項１ないし５のいずれか一項に記載の方法。
【請求項７】
前記ソース・オペレーティング・システム（ＯＳ１）の状態に関する情報が、前記ターゲット・オペレーティング・システム（ＯＳ２）のプロセス・コンテキスト中の任意の場所に配置され、前記情報へのアクセスが、前記ソース・オペレーティング・システム（ＯＳ１）のコンテキスト中のシステム・リソースから、前記ターゲット・オペレーティング・システム（ＯＳ２）の前記コンテキスト中のシステム・リソースに動的にマッピングされる、請求項１ないし５のいずれか一項に記載の方法。
【請求項８】
システム・コールおよびランタイム・ライブラリ・コールを変換する前記ステップ、ならびに前記ソース・アプリケーション・コード（Ｃ１）を変換する前記ステップが、少なくとも２つのシステム・コール変換器、少なくとも２つのランタイム・ライブラリ変換器、少なくとも２つのエミュレータ、または少なくとも２つのコンパイラ、あるいはそれらの組合せの、カスケードを使用して実施される、請求項１ないし７のいずれか一項に記載の方法。
【請求項９】
計算負荷を分割するためまたは分散させるためあるいはこの両方のために、１つのソース・システムからの少なくとも２つの無関係のプロセスが、少なくとも２つのターゲット・システムにマイグレートされる、請求項１ないし８のいずれか一項に記載の方法。
【請求項１０】
前記変換されたバイナリ・ターゲット・アプリケーション・コード（Ｃ２）が、前記ターゲット・システム（Ｓ２）のリポジトリにキャッシュされるかまたは永続的に記憶されるかあるいはその両方を施される、請求項１ないし９のいずれか一項に記載の方法。
【請求項１１】
前記変換されたバイナリ・ターゲット・アプリケーション・コード（Ｃ２）が、前記ソース・システムおよび前記ターゲット・システム（Ｓ１、Ｓ２）によってアクセスされるように中央リポジトリに永続的に記憶される、請求項１ないし１０のいずれか一項に記載の方法。
【請求項１２】
前記ソース・アプリケーション・コード（Ｃ１）から前記バイナリ・ターゲット・アプリケーション・コード（Ｃ２）への変換が中央コンパイル・エンティティによって実施される、請求項１ないし１１のいずれか一項に記載の方法。
【請求項１３】
チェッキング・エンティティを使用して、マイグレーション前に前記ソース・システム（Ｓ１）上で実行されていた前記アプリケーション・コード（Ｃ１）の実行のセマンティクスが、前記ターゲット・システム（Ｓ２）上のマイグレーション後の変換済みバイナリ・コードの実行のセマンティクスと比較される、請求項１ないし１２のいずれか一項に記載の方法。
【請求項１４】
ソース・オペレーティング・システム（ＯＳ１）を有するソース・システム（Ｓ１）と、ターゲット・オペレーティング・システム（ＯＳ２）を有するターゲット・システム（Ｓ２）とを少なくとも含む、プロセスをマイグレートするためのコンピュータベースのシステムであって、前記ソース・システムと前記ターゲット・システム（Ｓ１、Ｓ２）、および前記ソース・オペレーティング・システムと前記ターゲット・オペレーティング・システム（ＯＳ１、ＯＳ２）が異なり、前記ターゲット・システム（Ｓ２）が、
−  前記ソース・システム（Ｓ１）のソース仮想化マイグレーション・コンポーネント（ＶＭ１）との互換性があり、前記ソース仮想化マイグレーション・コンポーネント（ＶＭ１）によって送られたマイグレーション・トリガ情報を受け取るように適合された、ターゲット仮想化マイグレーション・コンポーネント（ＶＭ２）と、
−  前記ターゲット・システム（Ｓ２）を使用して前記ソース・システム（Ｓ１）をエミュレートするように適合されたエミュレータ（ＥＭ１２）と、
−  前記ソース・システム（Ｓ１）上で実行されるプロセスに関連するソース・アプリケーション・コード（Ｃ１）を、前記ターゲット・システム（Ｓ２）上で実行可能なバイナリ・ターゲット・アプリケーション・コード（Ｃ２）に変換するように適合されたコンパイラ（Ｃ１２）と、
−  前記ソース・オペレーティング・システム（ＯＳ１）に向けられたシステム・コールを、前記ターゲット・オペレーティング・システム（ＯＳ２）に向けられたシステム・コールに変換するためのシステム・コール変換器（ＳＣＴ１２）と、
−  前記ソース・オペレーティング・システム（ＯＳ１）のランタイム・ライブラリに向けられたコールを、前記ターゲット・オペレーティング・システム（ＯＳ２）のランタイム・ライブラリに向けられたコールに変換するためのランタイム・ライブラリ変換器（ＲＴＴ１２）とを備え、
前記システムが、
−  前記ソース仮想化マイグレーション・コンポーネントおよび前記ターゲット仮想化マイグレーション・コンポーネント（ＶＭ１、ＶＭ２）を使用して前記少なくとも１つのプロセス（ＰＭ）のマイグレーションを開始することと、
−  マイグレートされることになる前記プロセス（ＰＭ）のための仮想アドレス空間を前記ターゲット・システム（Ｓ２）中で割り振ることと、
−  マイグレートされることになる前記プロセス（ＰＭ）の仮想アドレス空間のメモリを、前記ターゲット・システム（Ｓ２）の前記割り振られた仮想アドレス空間にコピーすることと、
−  前記プロセス（ＰＭ）に関連するオペレーティング・システム状態に関する情報を前記ターゲット・オペレーティング・システム（ＯＳ２）にコピーすることと、
−  マイグレートされることになる前記プロセス（ＰＭ）を、前記エミュレータ（ＥＭ１２）を用いて前記ターゲット・オペレーティング・システム（ＯＳ２）上で実行することと、を行うように適合され、前記エミュレータが、前記プロセス（ＰＭ）に関連する前記コードの実行を開始するように適合され、かつ、
−  前記プロセスに関連する、前記ソース・オペレーティング・システム（ＯＳ１）のためのシステム・コールおよびランタイム・ライブラリ・コールを、前記システム・コール変換器（ＳＣＴ１２）を用いて前記ターゲット・オペレーティング・システム（ＯＳ２）のためのシステム・コールに、かつ前記ランタイム・ライブラリ変換器（ＲＴＴ１２）を用いて前記ターゲット・オペレーティング・システム（ＯＳ２）のためのランタイム・ライブラリ・コールに変換するステップと、
−  前記ソース・アプリケーション・コード（Ｃ１）がまだ変換されていない場合に、前記コンパイラ（Ｃ１２）を用いて、マイグレートされることになる前記プロセス（ＰＭ）に関連する前記ソース・アプリケーション・コード（Ｃ１）を、前記ターゲット・システム（Ｓ２）上で実行可能な前記バイナリ・ターゲット・アプリケーション・コード（Ｃ２）に変換するステップと、
−  前記ターゲット・システム（Ｓ２）上における前記変換されたバイナリ・ターゲット・アプリケーション・コード（Ｃ２）の実行を開始するステップとを実施または開始するように適合された、コンピュータベースのシステム。
【請求項１５】
コンピュータ可読プログラム・コードが組み入れられたコンピュータ可読媒体であって、プロセッサによって実行されたときに請求項１ないし１３のいずれか一項に記載の方法を前記プロセッサに実行させる、コンピュータ可読媒体。
【国際調査報告】
2016504673.tif 000007
2016504673.tif 000008