(57)【特許請求の範囲】
【請求項１】
仮想マシンが物理マシン間を移動したことにより無効となった命令を検出し、
検出した前記命令に含まれる無効なオペレーションコードに対応付けられた有効なオペレーションコードを取得し、
取得した前記有効なオペレーションコードに対応した命令を実行し、
前記無効となった命令を検出した場合、
前記検出した命令を実行した仮想マシンを特定し、
特定した仮想マシンが確保している記憶領域を対象に前記無効なオペレーションコードを検索し、
検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
例外処理方法。
【請求項２】
前記特定した仮想マシンが確保している記憶領域を対象に、前記仮想マシンが動作する物理マシンにて無効なオペレーションコードを検索し、
検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
請求項１に記載の例外処理方法。
【請求項３】
仮想マシンが物理マシン間を移動する時に、
仮想マシンに対応付けられたメモリイメージを対象に前記無効なオペレーションコードを検索し、
検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
請求項１又は２に記載の例外処理方法。
【請求項４】
前記有効なオペレーションコードを取得する際、無効なオペレーションコード及び有効なオペレーションコードを対応付けたテーブルを用いる
請求項１から３のいずれか１項に記載の例外処理方法。
【請求項５】
仮想マシンが物理マシン間を移動したことにより、仮想マシンが動作する物理マシンにて無効となった命令を検出し、
検出した命令に含まれる無効なオペレーションコードに対応付けられた有効なオペレーションコードを取得し、
取得した有効なオペレーションコードに対応した命令を実行し、
前記無効となった命令を検出した場合、
前記検出した命令を実行した仮想マシンを特定し、
特定した仮想マシンが確保している記憶領域を対象に前記無効なオペレーションコードを検索し、
検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
処理を前記物理マシンに実行させるプログラム。
【請求項６】
仮想マシンが物理マシン間を移動したことにより無効となった命令を検出する検出部、
検出した命令に含まれるオペレーションコードに対応付けられた有効なオペレーションコードを取得する取得部、
取得した有効なオペレーションコードを出力する出力部、
前記無効となった命令を検出した場合、前記検出した命令を実行した仮想マシンを特定する特定部、及び
特定した仮想マシンが確保している記憶領域を対象に前記無効なオペレーションコードを検索し、検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える書き換え部
を有する装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マシンが複数の物理マシン間を動的に移動するライブマイグレーションに関する。
【背景技術】
【０００２】
ライブマイグレーションは、仮想マシンを動作させたまま、動作している物理マシンを他の物理マシンに移動させることである。仮想マシンが移動した場合、移動元のＣＰＵ(Central Processing Unit)と移動先のＣＰＵとのＣＰＵタイプが異なり、実行可能な命令セットが異なる場合がある。そのような場合、移動元のＣＰＵでは発生しない未定義命令例外が、移動先のＣＰＵにて発生する。
【０００３】
従来、プログラム実行中に未定義命令による不正命令割り込みが発生すると、ＯＳが未定義命令をエミュレーションするという例外処理の技術が知られている（特許文献１）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平２−２３１６３４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術では、未定義命令例外を発生する命令は予め定まっている必要がある。搭載されているＣＰＵが異なる物理マシンが混在する環境にて、ライブマイグレーションを実行する場合、移動先の物理マシンは各物理マシンの状況に応じて、その都度、決定される。従って、未定義命令例外を発生する命令も、その都度異なるため、従来技術では対応できない。
【０００６】
そこで、搭載されているＣＰＵが異なる物理マシンが混在する環境にて、ライブマイグレーションを実行する場合には、すべてのＣＰＵを下位互換の動作モードで起動しておき、動作可能な命令セットをすべてのＣＰＵで統一することも行なわれている。この場合、上位のＣＰＵは実行できる命令セットが制限される。そのため、複雑な処理を効率的に処理可能な拡張命令は実行されないため、ＣＰＵの本来の性能や機能を十分に活用できない。
【０００７】
１つの側面では、本発明は、異なるタイプの物理ＣＰＵが混在していても、物理ＣＰＵの本来の性能や機能を無駄なく利用可能となるよう、ライブマイグレーションに対応した例外処理方法等を提供することにある。
【課題を解決するための手段】
【０００８】
本願に開示する例外処理方法は、仮想マシンが物理マシン間を移動したことにより無効となった命令を検出し、検出した前記命令に含まれる無効なオペレーションコードに対応付けられた有効なオペレーションコードを取得し、取得した前記有効なオペレーションコードに対応した命令を実行し、前記無効となった命令を検出した場合、前記検出した命令を実行した仮想マシンを特定し、特定した仮想マシンが確保している記憶領域を対象に前記無効なオペレーションコードを検索し、検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える。
【発明の効果】
【０００９】
本願の一観点によれば、異なるタイプの物理ＣＰＵが混在していても、物理ＣＰＵの本来の性能や機能を無駄なく利用可能となる。
【図面の簡単な説明】
【００１０】
【図１】情報処理システムの概要を示す説明図である。
【図２】ホストのハードウェア群を示すブロック図である。
【図３】実施の形態１に係るホストの機能構成を示すための説明図である。
【図４】未定義命令例外が発生した場合のホストの処理手順を示すフローチャートである。
【図５】オペコードテーブルのレコードレイアウトの一例を示す説明図である。
【図６】エミュレーションコードテーブルのレコードレイアウトの一例を示す説明図である。
【図７】実施の形態２に係るホストの機能構成を示すための説明図である。
【図８】未定義命令例外が発生した場合のホストの処理手順を示すフローチャートである。
【図９】実施の形態３に係るバックエンド処理の処理手順を示すフローチャートである。
【図１０】実施の形態１から３に係るホストの構成を示すブロック図である。
【図１１】実施の形態４に係る命令書き換え処理の処理手順を示すフローチャートである。
【図１２】実施の形態５に係るホスト及び管理ホストの機能構成を示すための説明図である。
【図１３】実施の形態５に係るホスト及び管理ホストにおける例外処理の処理手順を示すフローチャートである。
【図１４】実施の形態６に係る例外処理装置のハードウェア群を示すブロック図である。
【図１５】実施の形態７に係るホストのハードウェア群を示すブロック図である。
【発明を実施するための形態】
【００１１】
実施の形態１
以下実施の形態を、図面を参照して説明する。図１は情報処理システムの概要を示す説明図である。情報処理システムはインターネット、ＬＡＮ（Local Area Network）及び公衆電話網等の通信網Ｎを介して相互に接続される複数のホストコンピュータ１（以下、「ホスト１」と略記する。）、ホストコンピュータ２（以下、「ホスト２」と略記する。）、管理ホストコンピュータ３（以下、「管理ホスト３」と略記する。）、共有ディスク４を含む。ホスト１、ホスト２、及び管理ホスト３は、例えばサーバコンピュータである。
【００１２】
ホスト１及びホスト２は、主として情報処理システムのユーザにサービスを提供するコンピュータである。ホスト１及びホスト２は仮想マシン（ＶＭ：Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）を提供するよう構成されている。ホスト１及びホスト２はそれぞれ物理的には一台の計算機であるが、ハイパーバイザと呼ばれるソフトウェアによりＣＰＵ、メモリ等の資源を論理的に分割し、独立した仮想マシンが複数動作可能となっている。各仮想マシンは、それぞれＯＳが動作し、それぞれのＯＳ上でアプリケーションプログラムが動作し、ユーザにサービスを提供している。
【００１３】
管理ホスト３は、主として、ホスト１及びホスト２にて動作するハイパーバイザ及び仮想マシンにより構成された仮想化環境を管理・制御する。管理ホスト３は、仮想化環境を管理・制御するための管理・制御ミドルウェアが動作する。
【００１４】
共有ディスク４は、ホスト１、ホスト２、及び管理ホスト３のいずれのコンピュータからもアクセスが可能なディスクである。各ホストは自らの動作に必要なデータを共有ディスク４に書き込み、書き込んだデータの読み込みを行う。各仮想マシンは、共有ディスク上にＶＭイメージファイルを作成し、仮想ディスクとして共有ディスク４を利用する。
【００１５】
図１に示す例では、ホスト１には３つの仮想マシンＶＭ１、ＶＭ２、ＶＭ３が、ホスト２には２つの仮想マシンＶＭ４、ＶＭ５が動作している。仮想マシンＶＭ４は、ホスト１にて動作していたが、動作させたままホスト２に移動されている。すなわち、ライブマイグレーションにより仮想マシンＶＭ４が移動されている。
【００１６】
図２はホスト１のハードウェア群を示すブロック図である。ここでは、ホスト１についてのみ説明するが、ホスト２についても同様な構成である。ホスト１は制御部としてのＣＰＵ１１、ＲＡＭ（Random Access Memory）１２、記憶部１３、及び通信部１４等を含む。ＣＰＵ１１は、バスを介してハードウェア各部と接続されている。ＣＰＵ１１は記憶部１３に記憶された制御プログラムに従いハードウェア各部を制御する。ＲＡＭ１２は例えばＳＲＡＭ（Static ＲＡＭ）、ＤＲＡＭ（Dynamic ＲＡＭ）、フラッシュメモリ等である。ＲＡＭ１２は、記憶部としても機能し、ＣＰＵ１１による各種プログラムの実行時に発生する種々のデータを一時的に記憶する。
【００１７】
記憶部１３は例えば、ハードディスクまたは大容量フラッシュメモリ等である。記憶部１３にはハイパーバイザプログラム、ＶＭイメージファイルが記憶されうる場所の一つである。ハイパーバイザプログラムは仮想化環境を実現するためのプログラムである。ハイパーバイザ上で仮想マシンが動作する。仮想マシン上でＯＳ（Operating System）が動作し、さらにＯＳ上でアプリケーションプログラムが動作し、ユーザにサービスを提供する。各仮想マシン上で動作するＯＳやアプリケーションプログラムはその各該当ＶＭイメージファイル内に書き込まれて（インストールされて）存在している。ＶＭイメージファイルはいわば仮想マシンに接続される仮想ディスクである。
【００１８】
通信部１４は例えばＬＡＮ（Local Area Network）カード等であり、ユーザ端末、例えばホスト２などの他のホスト、管理ホスト等と通信を行う。
【００１９】
本実施の形態では、ホスト１は、拡張命令セットが動作可能なＣＰＵを備えるが、ホスト２は、拡張命令セットが動作しないＣＰＵを備えている。ホスト１からホスト２へライブマイグレーションされた仮想マシンＶＭ４は、拡張命令セットが用いられるアプリケーションが動作しているため、ホスト２では未定義命令例外が発生する。図３は実施の形態１に係るホストの機能構成を示すための説明図である。図４は未定義命令例外が発生した場合のホスト２の処理手順を示すフローチャートである。
【００２０】
割り込みハンドラ２５ａは、未定義命令例外が発生した場合に起動され、例外処理を行う。図５はオペコードテーブル２５ｂのレコードレイアウトの一例を示す説明図である。オペコードテーブル２５ｂは、拡張命令列を含む。拡張命令列には、他ホストのＣＰＵでは実行可能であるが、ＣＰＵ２１では実行できない無効な命令、すなわち、実行すると未定義命令例外が発生する命令のオペコードを記憶している。図５では一例として、ＯＰ１、ＯＰ２、…がオペコードとして記憶されている。オペコードマッチャー２５ｃは、未定義命令例外を発生させた命令を取得し、取得した命令のオペコードが、オペコードテーブル２５ｂに記憶されているかを調べる。
なお、オペコードはオペレーションコードとも記載するが、本明細書では主としてオペコードと記載する。
【００２１】
エミュレーション部２５ｄは、ＣＰＵ２１では無効となる命令をエミュレーションする。図６はエミュレーションコードテーブル２５ｅのレコードレイアウトの一例を示す説明図である。エミュレーションコードテーブル２５ｅは、拡張命令列、引数列、代替コード列を含む。拡張命令列は、未定義命令例外が発生する拡張命令のオペコードが格納されている。引数列は、拡張命令に対する引数が格納されている。代替コード列は、拡張命令をエミュレーションするための代替コードが格納されている。図６では一例として、オペコードＯＰ１の命令は、引数ａ、ｂを取り、その代替コードは、それぞれオペコードがＯＰ１１、ＯＰ１２、ＯＰ１３である３つの命令から構成されることが示されている。オペコードＯＰ２の命令は、引数ａを取り、その代替コードは、オペコードＯＰ２１、ＯＰ２２である２つの命令から構成されることが示されている。
エミュレーション部２５ｄは、代替コードをエミュレーションコードテーブル２５ｅより取得し、それを基に、未定義命令例外を発生させた命令のエミュレーションを行う。
【００２２】
レジスタコンテキスト退避・復元領域２５ｆは、未定義命令例外が発生時のレジスタの状態を退避させておくための領域である。例外発生時、まずＣＰＵ２１は自動的にその時点の各種レジスタの状態をレジスタコンテキスト退避・復元領域２５ｆに退避させる。そしてその後、ハイパーバイザ２５に割込みをあげて、該当例外の担当としてハイパーバイザ２５に登録されている割り込みハンドラ２５ａが例外処理を行う。例外処理が終わると、レジスタコンテキスト退避・復元領域２５ｆに基づき、ＣＰＵ２１が自動的にレジスタの状態を復元して、割込み元のプログラムに制御を戻す。
【００２３】
図４に戻り、割り込みハンドラ２５ａによる処理について説明する。仮想マシンＶＭ４により、ＣＰＵ２１は、自分が対応していない拡張命令を実行する。ＣＰＵ２１にて、未定義命令例外が発生する（ステップＳ１）。それに伴い、ＣＰＵ２１は、未定義命令例外の割り込みを発生する（ステップＳ２）。ＣＰＵ２１は、ハイパーバイザ２５の設定に従い、予め未定義命令例外の割り込みハンドラとして登録されている割り込みハンドラ２５ａへ制御を移行する（ステップＳ３）。
【００２４】
ＣＰＵ２１は、オペコードマッチャー２５ｃとして機能し、未定義命令例外を発生させた命令のオペコードを取得する。ＣＰＵ２１は、オペコードテーブル２５ｂを検索し、取得したオペコードがオペコードテーブル２５ｂに含まれているかを調べる（ステップＳ４）。ＣＰＵ２１は検索にヒットしたか否かを調べる（ステップＳ５）。検索にヒットした場合（ステップＳ５でＹＥＳ）、ＣＰＵ２１は、エミュレーション部２５ｄとして機能し、エミュレーションコードテーブル２５ｅから未定義命令に対応した代替コードを取り出す。代替コードは、ＣＰＵ２１において有効な命令（オペコードと引数）から構成されている。ＣＰＵ２１は代替コードを基に、未定義命令をエミュレートするコードを生成し、未定義命令をエミュレートする（ステップＳ６）。ＣＰＵ２１は、エミュレートした命令に戻り値があるか否かを調べる（ステップＳ７）。戻り値がある場合（ステップＳ７でＹＥＳ）、戻り値をレジスタコンテキスト退避・復元領域２５ｆに反映させる（ステップＳ８）。ＣＰＵ２１は、制御を仮想マシンＶＭ４に戻し（ステップＳ９）、割り込みハンドラとしての処理を終了する。戻り値がない場合（ステップＳ７でＮＯ）、ＣＰＵ２１は、制御を仮想マシンＶＭ４に戻し（ステップＳ９）、割り込みハンドラとしての処理を終了する。未定義命令例外を発生させた命令のオペコードを検索して、検索にヒットしなかった場合（ステップＳ５でＮＯ）、拡張命令が実行されたことが原因ではないので、通常の例外処理（ステップＳ１０）を行い、処理を終了する。
【００２５】
以上のように、実施の形態１では、拡張命令に対応していないホストにおいて、拡張命令に起因する未定義命令例外が発生した場合、例外を発生させた命令をエミュレートして実行する。それにより、異なるタイプの物理ＣＰＵが混在していても、命令セットを最下位ＣＰＵの命令セットに揃える必要が無いので、物理ＣＰＵの本来の性能や機能が無駄なく利用可能となる。
【００２６】
実施の形態２
実施の形態１では、未定義命令例外が発生した場合に、例外を発生させた命令をエミュレートして実行している。実施の形態２では、例外を発生させた命令をエミュレートする際に、仮想マシンＶＭ４のメモリ上やディスク上の該当命令をエミュレートする命令に書き換えるものとする。それにより、一度未定義命令例外を発生させた命令は、すべてエミュレーションするための命令に書き換わるので、同一仮想マシンにおいて、再び同一の命令による未定義命令例外は発生しない。そのため、例外処理の発生回数が減るので、より効率的な処理が可能となる。
【００２７】
図７は実施の形態２に係るホストの機能構成を示すための説明図である。実施の形態２においては、割り込みハンドラ２５ａにバイナリパッチ部２５ｇが追加されている。バイナリパッチ部２５ｇは、仮想マシンで動作しているプログラムのバイナリコードを書き換える機能を持っている。このバイナリパッチ部２５ｇにより、未定義命令例外を発生させる命令をエミュレーションコードに書き換える。
【００２８】
図８は未定義命令例外が発生した場合のホストの処理手順を示すフローチャートである。以下では、実施の形態１との相違点について主に説明する。ＣＰＵ２１は、オペコードマッチャー２５ｃとして機能し、未定義命令例外を発生させた命令のオペコードがオペコードテーブル２５ｂに含まれているかを調べる（ステップＳ４）。ＣＰＵ２１は検索にヒットしたか否かを調べる（ステップＳ５）。検索にヒットした場合（ステップＳ５でＹＥＳ）、ＣＰＵ２１は、エミュレーション部２５ｄとして機能し、エミュレーションコードテーブル２５ｅから未定義命令に対応した代替コードを取り出す。ＣＰＵ２１は代替コードを基に、未定義命令をエミュレートするエミュレーションコードを生成する（ステップＳ１１）。ＣＰＵ２１は、バイナリパッチ部２５ｇとして機能し、未定義命令例外を発生させた仮想マシンＶＭ４が管理するＲＡＭ１２、記憶部１３、共有ディスク４上のＶＭイメージファイルを検索し（ステップＳ１２）、記憶されているプログラムコードに含まれる未定義命令例外を発生させた命令をすべて、それに対応したエミュレーションコードに書き換える（ステップＳ１３）。具体的には、ＲＡＭ１２の空き領域にエミュレーションコードを書き込む。エミュレーションコードの最後にはリターン命令を設けておき、ジャンプ元に戻るようにする。未定義命令例外を発生させた命令をジャンプ命令に置き換え、ＲＡＭ１２の空き領域に書き込んだエミュレーションコードを実行するようにする。
【００２９】
次に、ＣＰＵ２１は未定義命令例外が発生した前の状態に戻す（ステップＳ１４）。ＣＰＵ２１は仮想マシンに制御を戻す（ステップＳ９）。仮想マシンでは、未定義命令例外が発生する直前の状態に戻っている。次の命令が実行されるが、上述の処理により、コードが書き変わっているので、実行される命令は、未定義命令ではなく、例えばジャンプ命令となっている。ジャンプ命令により、未定義命令をエミュレートするコードが呼び出され、未定義命令がエミュレートされる。
【００３０】
なお、上述の説明では、未定義命令例外が発生した命令を書き換えた後に、ＣＰＵ２１の状態を戻して、仮想マシンの制御に戻しているが、実施の形態１と同様に、未定義命令例外が発生した命令のエミュレートを行い、処理を仮想マシンに戻した後に、バックエンドプロセスでコードの書き換えを行うこととしても良い。
【００３１】
上述したように、実施の形態２においては、未定義命令例外が発生した時点で、例外を発生させた仮想マシンが管理するＲＡＭ１２、記憶部１３、共有ディスク４上のＶＭイメージファイルを検索し、例外を発生させた命令を書き換える。それにより、一度、例外を発生させた命令については、エミュレーションコードが実行され、例外が発生しなくなるので、例外処理によるオーバーヘッドが少なくなり、より効率的に処理を行うことが可能となる。
【００３２】
本実施の形態２は以上の如きであり、その他は実施の形態１と同様であるので、対応する部分には同一の符号を付してその詳細な説明を省略する。
【００３３】
実施の形態３
実施の形態２では、未定義命令例外を発生させた命令のみに関して、プログラムコードの書き換えを行った。実施の形態３では、未定義命令例外を発せさせるすべての命令を対象とし、バックエンドで書き換え処理を行う。ここで言うバックエンドで処理を行うとは、バックグラウンドで処理を動作させ、ユーザとの対話する機能を持たないことを意味している。
【００３４】
バックエンド処理は、ハイパーバイザ２５が備える機能である。ハイパーバイザはＣＰＵ２１の負荷状況を監視し、アイドル時にバックエンド処理を起動する。図９は実施の形態３に係るバックエンド処理の処理手順を示すフローチャートである。
【００３５】
ＣＰＵ２１は、オペコードテーブルより未定義命令例外を発生させるオペコードを取得する（ステップＳ２１）。ここで言うオペコードテーブルは図５に示すものと同様なものである。ＣＰＵ２１は、仮想マシンが管理するＲＡＭ１２、記憶部１３、共有ディスク４上のＶＭイメージファイルを検索し、記憶されているプログラムコードが取得したオペコードを含んでいないか否かを調べる（ステップＳ２２）。ＣＰＵ２１は検索がヒットしたか否かを調べる（ステップＳ２３）。検索がヒットした場合（ステップＳ２３でＹＥＳ）、ＣＰＵ２１は、取得したオペコードに対応した代替コードをエミュレーションコードテーブルより取得し、エミュレーションコードを生成する（ステップＳ２４）。ここで言うエミュレーションコードテーブルとは図６に示すものと同様なものである。ＣＰＵ２１は、未定義命令例外が発生する命令を、エミュレーションコードに書き換える（ステップＳ２５）。この書き換えは、実施の形態２と同様である。
【００３６】
ＣＰＵ２１は、すべてのオペコードについて検索したかを判定する（ステップＳ２６）。すべてのオペコードについて検索が完了した場合（ステップＳ２６でＹＥＳ）、ＣＰＵ２１は処理を終了する。すべてのオペコードについて検索が完了していない場合（ステップＳ２６でＮＯ）、ＣＰＵ２１は処理をステップＳ２１に戻し、未だ検索していない未定義命令例外を発生させる命令のオペコードを取得し、処理を行う。
【００３７】
上述のように、実施の形態３においては、未定義命令例外を発生させる命令をバックエンド処理にて書き換えを行うので、未定義命令例外を発生する頻度を低減され、例外処理によるオーバーヘッドが少なくなり、より効率的に処理を行うことが可能となる。
【００３８】
本実施の形態３は以上の如きであり、その他は実施の形態１及び実施の形態２と同様であるので、対応する部分には同一の符号を付してその詳細な説明を省略する。
【００３９】
図１０は、実施の形態１から３に係るホスト２の構成を示すブロック図である。ＣＰＵ２１が制御プログラム等を実行することにより、ホスト２は以下のように動作する。仮想マシン実行部２１ａは、仮想マシンを動作させ、ユーザにサービスを提供する。例外検知部２１ｂは、未定義命令例外などの例外の発生を検知する。オペコードマッチャー２１ｃ、エミュレーション部２１ｄ、バイナリパッチ部２１ｇは上述した動作を行う。オペコードテーブル２５ｂ、エミュレーションコードテーブル２５ｅ、レジスタコンテキスト退避・復元領域２５ｆの機能は、上述したとおりである。なお、ホスト１についても、ホスト２と同様な構成である。
【００４０】
実施の形態４
実施の形態１から３においては、仮想マシンがマイグレーション後に、未定義命令例外を発生させた命令のエミュレート、または未定義命令例外を発生させる命令の書き換えを行っている。本実施の形態においては、マイグレーションを行う際に、未定義命令例外を発生させる命令の書き換えを行う。
【００４１】
図１１は実施の形態４に係る命令書き換え処理の処理手順を示すフローチャートである。ホスト１からホスト２へ仮想マシンＶＭ４が移動する場合の処理である。
【００４２】
管理ホスト３は、仮想マシンＶＭ４をホスト２にライブマイグレーションにより移動することをホスト１に通知する（ステップＳ３１）。ホスト１のＣＰＵ１１は、ホスト２では無効となる命令のオペコードの一覧を取得する（ステップＳ３２）。該一覧は、図５に示したオペコードテーブル２５ｂと同様なものである。該一覧は移動先のホスト２より取得する。ＣＰＵ１１は、一覧より処理対象とするオペコードを取得する（ステップＳ３３）。ＣＰＵ１１は、仮想マシンＶＭ４が管理するメモリイメージ内に、処理対象のオペコードが含まれていないか検索を行う（ステップＳ３４）。ＣＰＵ１１は検索結果を検証する（ステップＳ３５）。検索にヒットした場合（ステップＳ３５でＹＥＳ）、エミュレーションコードを生成する（ステップＳ３６）。エミュレーションコードの生成については、上述した処理と同様であり、図６に示したエミュレーションコードテーブル２５ｅと同様なテーブルを用いて生成する。該テーブルは移動先のホスト２より取得する。ＣＰＵ１１は、無効となる命令をエミュレーションコードに書き換える（ステップＳ３７）。ＣＰＵ１１は無効となるすべての命令のオペコードについて検索したかを判定する（ステップＳ３８）。すべてのオペコードについて検索をしている場合（ステップＳ３８でＹＥＳ）、仮想マシンＶＭ４のメモリイメージを移動先のホスト２に転送する（ステップＳ３９）。管理ホスト３は、ライブマイグレーションを実行し、仮想マシンＶＭ４をホスト１からホスト２に移動する（ステップＳ４０）。検索がヒットしなかった場合（ステップＳ３５でＮＯ）、ＣＰＵ１１は処理をステップＳ３８に移す。すべてのオペコードについて検索していない場合（ステップＳ３８でＮＯ）、ＣＰＵ１１は処理をステップＳ３３に移す。
【００４３】
本実施の形態では、ライブマイグレーションの際の仮想マシンイメージ送信時に移動先ホストで無効となる命令の書き換えを行うので、ライブマイグレーション後に、未定義命令例外を発生することを防ぐことが可能となる。
【００４４】
本実施の形態においては、仮想マシン移動元のホスト１が無効命令の書き換えを行ったが、移動先のホスト２が行なっても良い。その場合、ホスト２は、まず、ホスト１より送信された仮想マシンイメージを受信する。ホスト２は、受信した仮想マシンイメージに対して、図１１で示したステップＳ３２からＳ３８までの処理と同様な処理を行い、無効命令の書き換えを行う。書き換えが終了したら、管理ホスト３に通知し、マイグレーションを実行すれば良い。
【００４５】
上述の実施の形態１から４において、オペコードテーブル２５ｂ、エミュレーションコードテーブル２５ｅは、割り込みハンドラ２５ａのプログラム内に保持している。割り込みハンドラ２５ａがＲＡＭにロードされる際にオペコードテーブル２５ｂ、エミュレーションコードテーブル２５ｅがメモリにロードされる。オペコードテーブル２５ｂ、エミュレーションコードテーブル２５ｅの内容を更新する場合には、割り込みハンドラ２５ａのプログラム自体の更新が必要となるので、メンテナンス性が低くなる。
【００４６】
変形例１
変形例１では、オペコードテーブル２５ｂ、エミュレーションコードテーブル２５ｅをプログラムコードに埋め込むのではなく、各ホストが備えるハードディスク、フラッシュメモリなどの記憶装置に記憶することとする。割り込みハンドラ２５ａは必要に応じて、記憶装置に記憶したオペコードテーブル２５ｂ、エミュレーションコードテーブル２５ｅを参照する。この場合、テーブルの更新は、記憶装置上のテーブルを置き換えるだけで済むので、メンテナンス性が高い。また、割り込みハンドラ２５ａが動作中であっても、更新が行えるという利点がある。
【００４７】
変形例２
変形例２では、オペコードテーブル２５ｂ、エミュレーションコードテーブル２５ｅを、共有ディスク４に記憶することとする。テーブルを一元管理できるので、変形例１よりもさらにメンテナンス性が向上する。ただし、共有ディスクへのアクセスが増えると読み出し時間がオーバーヘッドとなるので、割り込みハンドラ２５ａをロードする際に、メモリ上にオペコードテーブル２５ｂ、エミュレーションコードテーブル２５ｅをロードし、メモリ上で参照しても良い。
【００４８】
変形例３
変形例３では、オペコードテーブル２５ｂ、エミュレーションコードテーブル２５ｅを、管理ホスト３の記憶装置に記憶して管理する。ライブマイグレーションは、主として各ホストの負荷状況に応じて動的に行なわれる。そのため、オペコードテーブル２５ｂ、エミュレーションコードテーブル２５ｅは、情報システム内に存在する全タイプのＣＰＵに対応している必要がある。そのため、ＣＰＵタイプの数に比例して、オペコードテーブル２５ｂのレコード数が増加する。エミュレーションコードテーブル２５ｅは、ＣＰＵタイプの数の増加に伴い、移動元ＣＰＵと移動先ＣＰＵとの組み合わせ数が増大するため、レコード数が増加する。テーブルのレコード数が増加すると、テーブルの検索効率、読み出し効率が低下する。そこで、管理ホスト３の記憶装置にオペコードテーブル２５ｂ、エミュレーションコードテーブル２５ｅを記憶させる。ライブマイグレーション時に、移動元ＣＰＵ及び移動先ＣＰＵのタイプに基づいて、オペコードテーブル２５ｂ、エミュレーションコードテーブル２５ｅの必要なレコードを抽出し、移動先ホストの割り込みハンドラ２５ａに渡すようにする。そのようにすれば、移動先ホストが用いるオペコードテーブル２５ｂ、エミュレーションコードテーブル２５ｅのレコード数は必要最小限となり、検索効率、読み出し効率の低下を防ぐことが可能となる。
【００４９】
実施の形態５
図１２は実施の形態５に係るホスト２及び管理ホスト３の機能構成を示すための説明図である。上述の実施の形態１と同様、ライブマイグレーションにより、仮想マシンＶＭ４がホスト１からホスト２に移動されている。図１３は実施の形態５に係るホスト２及び管理ホスト３における例外処理の処理手順を示すフローチャートである。
【００５０】
実施の形態５では、図１２に示すように、オペコードテーブル３ｂ、オペコードマッチャー３ｃ、及びエミュレーションコードテーブル３ｅは、管理・制御ミドルウェアが動作している管理ホスト３が備えている。なお、オペコードテーブル３ｂ、オペコードマッチャー３ｃ、及びエミュレーションコードテーブル３ｅを管理・制御ミドルウェアが備えていても良い。また、オペコードテーブル３ｂ、又はエミュレーションコードテーブル３ｅを、共有ディスク４に記憶させても良い。
【００５１】
図１３を参照して、ホスト２及び管理ホスト３の処理手順について説明する。仮想マシンＶＭ４の動作により、ＣＰＵ２１にて、未定義命令例外が発生する（ステップＳ４１）。ＣＰＵ２１は、未定義命令例外割り込みを発生する（ステップＳ４２）。ＣＰＵ２１は、ハイパーバイザ２５の設定に従い、割り込みハンドラ２５ａへ制御を移行する（ステップＳ４３）。割り込みハンドラ２５ａは、管理ホスト３に未定義命令例外を発生させた命令のオペコードを通知する。管理ホスト３のＣＰＵ３１は、オペコードマッチャー３ｃを実行し、オペコードテーブル３ｂを検索する（ステップＳ４４）。ＣＰＵ３１は、検索がヒットしたか否かを調べる（ステップＳ４５）。検索にヒットした場合（ステップＳ４５でＹＥＳ）、ＣＰＵ３１は、エミュレーションコードテーブル３ｅを参照して、未定義命令例外を発生させた命令に対応する、ホスト２のＣＰＵ２１でエミュレート可能なコード（エミュレーションコード）を生成し、ホスト２に送信する（ステップＳ４６）。
【００５２】
ホスト２のＣＰＵ２１は、エミュレーション部２５ｄとして機能し、管理ホスト３より送信されたエミュレーションコードを実行する（ステップＳ４７）。ＣＰＵ２１は、エミュレーションコードに戻り値があるか判定する（ステップＳ４８）。戻り値がある場合（ステップＳ４８でＹＥＳ）、戻り値をレジスタコンテキスト退避・復元領域２５ｆに反映させる（ステップＳ４９）。ＣＰＵ２１は、仮想マシンへ制御を戻す。戻り値がない場合（ステップＳ４８でＮＯ）、ＣＰＵ２１は、仮想マシンへ制御を戻す（ステップＳ５０）。
【００５３】
未定義命令例外を発生させた命令のオペコードが、オペコードテーブルの検索にヒットしない場合（ステップＳ４５でＮＯ）、管理ホスト３のＣＰＵ３１はその旨を、ホスト２に通知し、ホスト２のＣＰＵ２１は、通常の例外処理を実行する（ステップＳ５１）。ＣＰＵ２１は、仮想マシンへ制御を戻す（ステップＳ５０）。
【００５４】
本実施の形態５では、オペコードテーブル３ｂ、オペコードマッチャー３ｃ、及びエミュレーションコードテーブル３ｅを、管理ホスト３が備えている。管理ホスト３は管理・制御ミドルウェアを備え、ライブマイグレーション時の移動元、移動先を履歴として管理している。従って、未定義命令例外を発生させた命令のオペコードの検索、該命令に対するエミュレーションコードの生成を効率的に行うことが可能である。
【００５５】
実施の形態６
図１４は実施の形態６に係る例外処理装置５のハードウェア群を示すブロック図である。実施の形態６に係る例外処理装置５は、例外処理の中で、オペコードの検索、エミュレーションコードの生成を行う機能をホスト１、ホスト２、管理ホスト３とは異なるハードウェアで構成したものである。以下の説明では、コンピュータプログラムを汎用のコンピュータに読み取らせ、コンピュータの中央処理装置が所定の処理を実行することにより例外処理装置５を構成した場合について説明する。しかし、それに限られず、等価な働きをする専用のハードウェアを有する装置として、例外処理装置５を構成してもよい。
【００５６】
例外処理装置５は、ＣＰＵ５１、ＲＡＭ５２、記憶部５３、通信部５４を含む。ＣＰＵ５１は記憶部５３に記憶された制御プログラム５３１に従いハードウェア各部を制御する。ＲＡＭ５２は例えばＳＲＡＭ、ＤＲＡＭ、フラッシュメモリ等である。ＲＡＭ５２は記憶部としても機能し、ＣＰＵ５１による各種プログラムの実行時に発生する種々のデータを一時的に記憶する。
【００５７】
記憶部５３は例えば、ハードディスクまたは大容量フラッシュメモリ等である。記憶部５３には制御プログラム５３１、オペコードテーブル５３２、エミュレーションコードテーブル５３３が記憶されている。
【００５８】
通信部５４は例えばＬＡＮ（Local Area Network）カード等であり、ホスト、管理ホスト等と通信を行う。
【００５９】
本実施の形態に係る例外処理装置５は、各ホストのＣＰＵタイプを記憶部５３に記憶しているものとする。また、管理ホスト３よりライブマイグレーションの情報、例えば、移動元のホスト名、移動先のホスト名、移動した仮想マシンの識別情報などを受信し、履歴情報として保持しているものとする。
【００６０】
例外処理装置５及び各ホストでの処理は、上述の図１３と同様である。以下、簡単に説明する。各ホストは、仮想マシンの動作により未定義命令例外が発生した場合に、例外が発生した命令のオペコードを、例外処理装置５に送信する。例外処理装置５のＣＰＵ５１は、送信元のＣＰＵのタイプを取得する。ＣＰＵ５１は、オペコードテーブル５３２を検索し、ホストから受信したオペコードがオペコードテーブル３ｂに含まれ、かつ、取得したＣＰＵタイプと対応付けられているかを調べる。検索にヒットした場合、ＣＰＵ５１は、エミュレーションコードテーブル５３３を基に、ホストのＣＰＵタイプに適合したエミュレーションコードを生成し、ホストに送信する。検索にヒットしない場合、ＣＰＵ５１は、通常の例外処理をするよう、その旨をホストに送信する。
【００６１】
本実施の形態においては、オペコードの検索と、エミュレーションコードの生成を例外処理装置５で行うこととしたので、未定義命令例外処理を行う際に、各ホスト及び管理ホストの負荷を低減することが可能となる。
【００６２】
上述の説明では、オペコードテーブル５３２、エミュレーションコードテーブル５３３を、例外処理装置５が備えることとしたが、それに限られず、例えば、共有ディスク４に記憶しておいても良い。
【００６３】
また、上述の説明においては、例外処理装置５はネットワークＮに接続されることを前提としたが、それに限られるものではない。各ホストの拡張カードスロットに装填可能な拡張カードとして例外処理装置５を構成しても良い。この場合、例外処理装置５は、主として装填されているホストの例外処理を担うこととなる。
【００６４】
上述の実施の形態１から６及び変形例１から３において、オペコードテーブルに、オペコードに加えて引数（オペランド）を含めることとしても良い。引数を含めることにより、より厳密にマッチングを行うことが可能となる。
また、オペコードテーブル、エミュレーションコードテーブルは一つのテーブルでも良い。
【００６５】
実施の形態７
図１５は実施の形態７に係るホスト１のハードウェア群を示すブロック図である。上述の実施の形態１から５では、ホスト１を動作させるための制御プログラムは、ディスクドライブ等の読み取り部１０ＡにCD-ROM、DVD（DigitalVersatile Disc）ディスク、メモリカード、またはUSB(Universal SerialBus)メモリ等の可搬型記録媒体１Ａを読み取らせて記憶部１３に記憶しても良い。また当該プログラムを記憶したフラッシュメモリ等の半導体メモリ１Ｂをホスト１内に実装しても良い。さらに、当該プログラムは、インターネット等の通信網を介して接続される他のサーバコンピュータ（図示せず）からダウンロードすることも可能である。以下に、その内容を説明する。
【００６６】
図１５に示すホスト１は、上述した各種ソフトウェア処理を実行するプログラムを、可搬型記録媒体１Ａまたは半導体メモリ１Ｂから読み取り、或いは、通信網を介して他のサーバコンピュータ（図示せず）からダウンロードする。当該プログラムは、制御プログラムとしてインストールされ、ＲＡＭ１２にロードして実行される。これにより、上述したホスト１として機能する。
【００６７】
本実施の形態７は以上の如きであり、その他は実施の形態１から５と同様であるので、対応する部分には同一の参照番号を付してその詳細な説明を省略する。
【００６８】
ホスト１と同様に、ホスト２を構成することも可能である。また、管理ホスト３又は実施の形態６における例外処理装置５についても、制御プログラムを可搬型記録媒体から読み取り記憶部に記憶したり、半導体メモリとして実装したりしても良い。
なお、制御プログラムにとどまらず、オペコードテーブルやエミュレーションコードテーブルを可搬型記録媒体から読み取り記憶部に記憶したり、半導体メモリとして実装したりしても良い。
【００６９】
なお、上述した実施の形態はすべての点で例示であって、制限的なものではないと考えられるべきである。本発明の範囲は、上述した意味ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
【００７０】
以上の実施例１から７及び変形例１から３を含む実施の形態に関し、更に以下の付記を開示する。
【００７１】
（付記１）
仮想マシンが物理マシン間を移動したことにより無効となった命令を検出し、
検出した前記命令に含まれる無効なオペレーションコードに対応付けられた有効なオペレーションコードを取得し、
取得した前記有効なオペレーションコードに対応した命令を実行する
例外処理方法。
【００７２】
（付記２）
前記無効となった命令を検出した場合、
前記検出した命令を実行した仮想マシンを特定し、
特定した仮想マシンが確保している記憶領域を対象に前記無効なオペレーションコードを検索し、
検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
付記１に記載の例外処理方法。
【００７３】
（付記３）
前記特定した仮想マシンが確保している記憶領域を対象に、前記仮想マシンが動作する物理マシンにて無効なオペレーションコードを検索し、
検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
付記１又は２に記載の例外処理方法。
【００７４】
（付記４）
仮想マシンが物理マシン間を移動する時に、
仮想マシンに対応付けられたメモリイメージを対象に前記無効なオペレーションコードを検索し、
検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
付記１から３のいずれか１つに記載の例外処理方法。
【００７５】
（付記５）
前記有効なオペレーションコードを取得する際、無効なオペレーションコード及び有効なオペレーションコードを対応付けたテーブルを用いる
付記１から４のいずれか１つに記載の例外処理方法。
【００７６】
（付記６）
仮想マシンが物理マシン間を移動したことにより、仮想マシンが動作する物理マシンにて無効となった命令を検出し、
検出した命令に含まれる無効なオペレーションコードに対応付けられた有効なオペレーションコードを取得し、
取得した有効なオペレーションコードに対応した命令を実行する
処理を前記物理マシンに実行させるプログラム。
【００７７】
（付記７）
前記無効となった命令を検出した場合、
前記検出した命令を実行した仮想マシンを特定し、
特定した仮想マシンが確保している記憶領域を対象に前記無効なオペレーションコードを検索し、
検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
付記６に記載のプログラム。
【００７８】
（付記８）
前記特定した仮想マシンが確保している記憶領域を対象に、前記仮想マシンが動作する物理マシンにて無効なオペレーションコードを検索し、
検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
付記６又は７に記載のプログラム。
【００７９】
（付記９）
仮想マシンが物理マシン間を移動することを検出し、
移動を検出した仮想マシンに対応付けられたメモリイメージを対象に無効なオペレーションコードを検索し、
検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
付記６から８のいずれか１つに記載のプログラム。
【００８０】
（付記１０）
前記有効なオペレーションコードを取得する際、無効なオペレーションコード及び有効なオペレーションコードを対応付けたテーブルを用いる
付記６から９のいずれか１つに記載のプログラム。
【００８１】
（付記１１）
仮想マシンが物理マシン間を移動したことにより無効となった命令を検出する検出部、
検出した命令に含まれるオペレーションコードに対応付けられた有効なオペレーションコードを取得する取得部、
取得した有効なオペレーションコードを出力する出力部
を有する装置。
【符号の説明】
【００８２】
１、２  ホスト
２１ａ  仮想マシン実行部
２１ｂ  例外検知部
２５  ハイパーバイザ
２５ａ  割り込みハンドラ
２５ｂ  オペコードテーブル
２５ｃ  オペコードマッチャー
２５ｄ  エミュレーション部
２５ｅ  エミュレーションコードテーブル
２５ｆ  レジスタコンテキスト退避・復元領域
３  管理ホスト
４  共有ディスク
５  例外処理装置
【図１】
0005929353.tif 000002
【図２】
0005929353.tif 000003
【図３】
0005929353.tif 000004
【図４】
0005929353.tif 000005
【図５】
0005929353.tif 000006
【図６】
0005929353.tif 000007
【図７】
0005929353.tif 000008
【図８】
0005929353.tif 000009
【図９】
0005929353.tif 000010
【図１０】
0005929353.tif 000011
【図１１】
0005929353.tif 000012
【図１２】
0005929353.tif 000013
【図１３】
0005929353.tif 000014
【図１４】
0005929353.tif 000015
【図１５】
0005929353.tif 000016