JP5929353B2 - 例外処理方法、プログラム及び装置 - Google Patents

例外処理方法、プログラム及び装置 Download PDF

Info

Publication number
JP5929353B2
JP5929353B2 JP2012057848A JP2012057848A JP5929353B2 JP 5929353 B2 JP5929353 B2 JP 5929353B2 JP 2012057848 A JP2012057848 A JP 2012057848A JP 2012057848 A JP2012057848 A JP 2012057848A JP 5929353 B2 JP5929353 B2 JP 5929353B2
Authority
JP
Japan
Prior art keywords
operation code
instruction
virtual machine
host
invalid
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2012057848A
Other languages
English (en)
Other versions
JP2013191089A (ja
Inventor
昌生 山本
昌生 山本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2012057848A priority Critical patent/JP5929353B2/ja
Publication of JP2013191089A publication Critical patent/JP2013191089A/ja
Application granted granted Critical
Publication of JP5929353B2 publication Critical patent/JP5929353B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Executing Machine-Instructions (AREA)

Description

本発明は、仮想マシンが複数の物理マシン間を動的に移動するライブマイグレーションに関する。
ライブマイグレーションは、仮想マシンを動作させたまま、動作している物理マシンを他の物理マシンに移動させることである。仮想マシンが移動した場合、移動元のCPU(Central Processing Unit)と移動先のCPUとのCPUタイプが異なり、実行可能な命令セットが異なる場合がある。そのような場合、移動元のCPUでは発生しない未定義命令例外が、移動先のCPUにて発生する。
従来、プログラム実行中に未定義命令による不正命令割り込みが発生すると、OSが未定義命令をエミュレーションするという例外処理の技術が知られている(特許文献1)。
特開平2−231634号公報
しかしながら、従来技術では、未定義命令例外を発生する命令は予め定まっている必要がある。搭載されているCPUが異なる物理マシンが混在する環境にて、ライブマイグレーションを実行する場合、移動先の物理マシンは各物理マシンの状況に応じて、その都度、決定される。従って、未定義命令例外を発生する命令も、その都度異なるため、従来技術では対応できない。
そこで、搭載されているCPUが異なる物理マシンが混在する環境にて、ライブマイグレーションを実行する場合には、すべてのCPUを下位互換の動作モードで起動しておき、動作可能な命令セットをすべてのCPUで統一することも行なわれている。この場合、上位のCPUは実行できる命令セットが制限される。そのため、複雑な処理を効率的に処理可能な拡張命令は実行されないため、CPUの本来の性能や機能を十分に活用できない。
1つの側面では、本発明は、異なるタイプの物理CPUが混在していても、物理CPUの本来の性能や機能を無駄なく利用可能となるよう、ライブマイグレーションに対応した例外処理方法等を提供することにある。
本願に開示する例外処理方法は、仮想マシンが物理マシン間を移動したことにより無効となった命令を検出し、検出した前記命令に含まれる無効なオペレーションコードに対応付けられた有効なオペレーションコードを取得し、取得した前記有効なオペレーションコードに対応した命令を実行し、前記無効となった命令を検出した場合、前記検出した命令を実行した仮想マシンを特定し、特定した仮想マシンが確保している記憶領域を対象に前記無効なオペレーションコードを検索し、検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
本願の一観点によれば、異なるタイプの物理CPUが混在していても、物理CPUの本来の性能や機能を無駄なく利用可能となる。
情報処理システムの概要を示す説明図である。 ホストのハードウェア群を示すブロック図である。 実施の形態1に係るホストの機能構成を示すための説明図である。 未定義命令例外が発生した場合のホストの処理手順を示すフローチャートである。 オペコードテーブルのレコードレイアウトの一例を示す説明図である。 エミュレーションコードテーブルのレコードレイアウトの一例を示す説明図である。 実施の形態2に係るホストの機能構成を示すための説明図である。 未定義命令例外が発生した場合のホストの処理手順を示すフローチャートである。 実施の形態3に係るバックエンド処理の処理手順を示すフローチャートである。 実施の形態1から3に係るホストの構成を示すブロック図である。 実施の形態4に係る命令書き換え処理の処理手順を示すフローチャートである。 実施の形態5に係るホスト及び管理ホストの機能構成を示すための説明図である。 実施の形態5に係るホスト及び管理ホストにおける例外処理の処理手順を示すフローチャートである。 実施の形態6に係る例外処理装置のハードウェア群を示すブロック図である。 実施の形態7に係るホストのハードウェア群を示すブロック図である。
実施の形態1
以下実施の形態を、図面を参照して説明する。図1は情報処理システムの概要を示す説明図である。情報処理システムはインターネット、LAN(Local Area Network)及び公衆電話網等の通信網Nを介して相互に接続される複数のホストコンピュータ1(以下、「ホスト1」と略記する。)、ホストコンピュータ2(以下、「ホスト2」と略記する。)、管理ホストコンピュータ3(以下、「管理ホスト3」と略記する。)、共有ディスク4を含む。ホスト1、ホスト2、及び管理ホスト3は、例えばサーバコンピュータである。
ホスト1及びホスト2は、主として情報処理システムのユーザにサービスを提供するコンピュータである。ホスト1及びホスト2は仮想マシン(VM:Virtual Machine)を提供するよう構成されている。ホスト1及びホスト2はそれぞれ物理的には一台の計算機であるが、ハイパーバイザと呼ばれるソフトウェアによりCPU、メモリ等の資源を論理的に分割し、独立した仮想マシンが複数動作可能となっている。各仮想マシンは、それぞれOSが動作し、それぞれのOS上でアプリケーションプログラムが動作し、ユーザにサービスを提供している。
管理ホスト3は、主として、ホスト1及びホスト2にて動作するハイパーバイザ及び仮想マシンにより構成された仮想化環境を管理・制御する。管理ホスト3は、仮想化環境を管理・制御するための管理・制御ミドルウェアが動作する。
共有ディスク4は、ホスト1、ホスト2、及び管理ホスト3のいずれのコンピュータからもアクセスが可能なディスクである。各ホストは自らの動作に必要なデータを共有ディスク4に書き込み、書き込んだデータの読み込みを行う。各仮想マシンは、共有ディスク上にVMイメージファイルを作成し、仮想ディスクとして共有ディスク4を利用する。
図1に示す例では、ホスト1には3つの仮想マシンVM1、VM2、VM3が、ホスト2には2つの仮想マシンVM4、VM5が動作している。仮想マシンVM4は、ホスト1にて動作していたが、動作させたままホスト2に移動されている。すなわち、ライブマイグレーションにより仮想マシンVM4が移動されている。
図2はホスト1のハードウェア群を示すブロック図である。ここでは、ホスト1についてのみ説明するが、ホスト2についても同様な構成である。ホスト1は制御部としてのCPU11、RAM(Random Access Memory)12、記憶部13、及び通信部14等を含む。CPU11は、バスを介してハードウェア各部と接続されている。CPU11は記憶部13に記憶された制御プログラムに従いハードウェア各部を制御する。RAM12は例えばSRAM(Static RAM)、DRAM(Dynamic RAM)、フラッシュメモリ等である。RAM12は、記憶部としても機能し、CPU11による各種プログラムの実行時に発生する種々のデータを一時的に記憶する。
記憶部13は例えば、ハードディスクまたは大容量フラッシュメモリ等である。記憶部13にはハイパーバイザプログラム、VMイメージファイルが記憶されうる場所の一つである。ハイパーバイザプログラムは仮想化環境を実現するためのプログラムである。ハイパーバイザ上で仮想マシンが動作する。仮想マシン上でOS(Operating System)が動作し、さらにOS上でアプリケーションプログラムが動作し、ユーザにサービスを提供する。各仮想マシン上で動作するOSやアプリケーションプログラムはその各該当VMイメージファイル内に書き込まれて(インストールされて)存在している。VMイメージファイルはいわば仮想マシンに接続される仮想ディスクである。
通信部14は例えばLAN(Local Area Network)カード等であり、ユーザ端末、例えばホスト2などの他のホスト、管理ホスト等と通信を行う。
本実施の形態では、ホスト1は、拡張命令セットが動作可能なCPUを備えるが、ホスト2は、拡張命令セットが動作しないCPUを備えている。ホスト1からホスト2へライブマイグレーションされた仮想マシンVM4は、拡張命令セットが用いられるアプリケーションが動作しているため、ホスト2では未定義命令例外が発生する。図3は実施の形態1に係るホストの機能構成を示すための説明図である。図4は未定義命令例外が発生した場合のホスト2の処理手順を示すフローチャートである。
割り込みハンドラ25aは、未定義命令例外が発生した場合に起動され、例外処理を行う。図5はオペコードテーブル25bのレコードレイアウトの一例を示す説明図である。オペコードテーブル25bは、拡張命令列を含む。拡張命令列には、他ホストのCPUでは実行可能であるが、CPU21では実行できない無効な命令、すなわち、実行すると未定義命令例外が発生する命令のオペコードを記憶している。図5では一例として、OP1、OP2、…がオペコードとして記憶されている。オペコードマッチャー25cは、未定義命令例外を発生させた命令を取得し、取得した命令のオペコードが、オペコードテーブル25bに記憶されているかを調べる。
なお、オペコードはオペレーションコードとも記載するが、本明細書では主としてオペコードと記載する。
エミュレーション部25dは、CPU21では無効となる命令をエミュレーションする。図6はエミュレーションコードテーブル25eのレコードレイアウトの一例を示す説明図である。エミュレーションコードテーブル25eは、拡張命令列、引数列、代替コード列を含む。拡張命令列は、未定義命令例外が発生する拡張命令のオペコードが格納されている。引数列は、拡張命令に対する引数が格納されている。代替コード列は、拡張命令をエミュレーションするための代替コードが格納されている。図6では一例として、オペコードOP1の命令は、引数a、bを取り、その代替コードは、それぞれオペコードがOP11、OP12、OP13である3つの命令から構成されることが示されている。オペコードOP2の命令は、引数aを取り、その代替コードは、オペコードOP21、OP22である2つの命令から構成されることが示されている。
エミュレーション部25dは、代替コードをエミュレーションコードテーブル25eより取得し、それを基に、未定義命令例外を発生させた命令のエミュレーションを行う。
レジスタコンテキスト退避・復元領域25fは、未定義命令例外が発生時のレジスタの状態を退避させておくための領域である。例外発生時、まずCPU21は自動的にその時点の各種レジスタの状態をレジスタコンテキスト退避・復元領域25fに退避させる。そしてその後、ハイパーバイザ25に割込みをあげて、該当例外の担当としてハイパーバイザ25に登録されている割り込みハンドラ25aが例外処理を行う。例外処理が終わると、レジスタコンテキスト退避・復元領域25fに基づき、CPU21が自動的にレジスタの状態を復元して、割込み元のプログラムに制御を戻す。
図4に戻り、割り込みハンドラ25aによる処理について説明する。仮想マシンVM4により、CPU21は、自分が対応していない拡張命令を実行する。CPU21にて、未定義命令例外が発生する(ステップS1)。それに伴い、CPU21は、未定義命令例外の割り込みを発生する(ステップS2)。CPU21は、ハイパーバイザ25の設定に従い、予め未定義命令例外の割り込みハンドラとして登録されている割り込みハンドラ25aへ制御を移行する(ステップS3)。
CPU21は、オペコードマッチャー25cとして機能し、未定義命令例外を発生させた命令のオペコードを取得する。CPU21は、オペコードテーブル25bを検索し、取得したオペコードがオペコードテーブル25bに含まれているかを調べる(ステップS4)。CPU21は検索にヒットしたか否かを調べる(ステップS5)。検索にヒットした場合(ステップS5でYES)、CPU21は、エミュレーション部25dとして機能し、エミュレーションコードテーブル25eから未定義命令に対応した代替コードを取り出す。代替コードは、CPU21において有効な命令(オペコードと引数)から構成されている。CPU21は代替コードを基に、未定義命令をエミュレートするコードを生成し、未定義命令をエミュレートする(ステップS6)。CPU21は、エミュレートした命令に戻り値があるか否かを調べる(ステップS7)。戻り値がある場合(ステップS7でYES)、戻り値をレジスタコンテキスト退避・復元領域25fに反映させる(ステップS8)。CPU21は、制御を仮想マシンVM4に戻し(ステップS9)、割り込みハンドラとしての処理を終了する。戻り値がない場合(ステップS7でNO)、CPU21は、制御を仮想マシンVM4に戻し(ステップS9)、割り込みハンドラとしての処理を終了する。未定義命令例外を発生させた命令のオペコードを検索して、検索にヒットしなかった場合(ステップS5でNO)、拡張命令が実行されたことが原因ではないので、通常の例外処理(ステップS10)を行い、処理を終了する。
以上のように、実施の形態1では、拡張命令に対応していないホストにおいて、拡張命令に起因する未定義命令例外が発生した場合、例外を発生させた命令をエミュレートして実行する。それにより、異なるタイプの物理CPUが混在していても、命令セットを最下位CPUの命令セットに揃える必要が無いので、物理CPUの本来の性能や機能が無駄なく利用可能となる。
実施の形態2
実施の形態1では、未定義命令例外が発生した場合に、例外を発生させた命令をエミュレートして実行している。実施の形態2では、例外を発生させた命令をエミュレートする際に、仮想マシンVM4のメモリ上やディスク上の該当命令をエミュレートする命令に書き換えるものとする。それにより、一度未定義命令例外を発生させた命令は、すべてエミュレーションするための命令に書き換わるので、同一仮想マシンにおいて、再び同一の命令による未定義命令例外は発生しない。そのため、例外処理の発生回数が減るので、より効率的な処理が可能となる。
図7は実施の形態2に係るホストの機能構成を示すための説明図である。実施の形態2においては、割り込みハンドラ25aにバイナリパッチ部25gが追加されている。バイナリパッチ部25gは、仮想マシンで動作しているプログラムのバイナリコードを書き換える機能を持っている。このバイナリパッチ部25gにより、未定義命令例外を発生させる命令をエミュレーションコードに書き換える。
図8は未定義命令例外が発生した場合のホストの処理手順を示すフローチャートである。以下では、実施の形態1との相違点について主に説明する。CPU21は、オペコードマッチャー25cとして機能し、未定義命令例外を発生させた命令のオペコードがオペコードテーブル25bに含まれているかを調べる(ステップS4)。CPU21は検索にヒットしたか否かを調べる(ステップS5)。検索にヒットした場合(ステップS5でYES)、CPU21は、エミュレーション部25dとして機能し、エミュレーションコードテーブル25eから未定義命令に対応した代替コードを取り出す。CPU21は代替コードを基に、未定義命令をエミュレートするエミュレーションコードを生成する(ステップS11)。CPU21は、バイナリパッチ部25gとして機能し、未定義命令例外を発生させた仮想マシンVM4が管理するRAM12、記憶部13、共有ディスク4上のVMイメージファイルを検索し(ステップS12)、記憶されているプログラムコードに含まれる未定義命令例外を発生させた命令をすべて、それに対応したエミュレーションコードに書き換える(ステップS13)。具体的には、RAM12の空き領域にエミュレーションコードを書き込む。エミュレーションコードの最後にはリターン命令を設けておき、ジャンプ元に戻るようにする。未定義命令例外を発生させた命令をジャンプ命令に置き換え、RAM12の空き領域に書き込んだエミュレーションコードを実行するようにする。
次に、CPU21は未定義命令例外が発生した前の状態に戻す(ステップS14)。CPU21は仮想マシンに制御を戻す(ステップS9)。仮想マシンでは、未定義命令例外が発生する直前の状態に戻っている。次の命令が実行されるが、上述の処理により、コードが書き変わっているので、実行される命令は、未定義命令ではなく、例えばジャンプ命令となっている。ジャンプ命令により、未定義命令をエミュレートするコードが呼び出され、未定義命令がエミュレートされる。
なお、上述の説明では、未定義命令例外が発生した命令を書き換えた後に、CPU21の状態を戻して、仮想マシンの制御に戻しているが、実施の形態1と同様に、未定義命令例外が発生した命令のエミュレートを行い、処理を仮想マシンに戻した後に、バックエンドプロセスでコードの書き換えを行うこととしても良い。
上述したように、実施の形態2においては、未定義命令例外が発生した時点で、例外を発生させた仮想マシンが管理するRAM12、記憶部13、共有ディスク4上のVMイメージファイルを検索し、例外を発生させた命令を書き換える。それにより、一度、例外を発生させた命令については、エミュレーションコードが実行され、例外が発生しなくなるので、例外処理によるオーバーヘッドが少なくなり、より効率的に処理を行うことが可能となる。
本実施の形態2は以上の如きであり、その他は実施の形態1と同様であるので、対応する部分には同一の符号を付してその詳細な説明を省略する。
実施の形態3
実施の形態2では、未定義命令例外を発生させた命令のみに関して、プログラムコードの書き換えを行った。実施の形態3では、未定義命令例外を発せさせるすべての命令を対象とし、バックエンドで書き換え処理を行う。ここで言うバックエンドで処理を行うとは、バックグラウンドで処理を動作させ、ユーザとの対話する機能を持たないことを意味している。
バックエンド処理は、ハイパーバイザ25が備える機能である。ハイパーバイザはCPU21の負荷状況を監視し、アイドル時にバックエンド処理を起動する。図9は実施の形態3に係るバックエンド処理の処理手順を示すフローチャートである。
CPU21は、オペコードテーブルより未定義命令例外を発生させるオペコードを取得する(ステップS21)。ここで言うオペコードテーブルは図5に示すものと同様なものである。CPU21は、仮想マシンが管理するRAM12、記憶部13、共有ディスク4上のVMイメージファイルを検索し、記憶されているプログラムコードが取得したオペコードを含んでいないか否かを調べる(ステップS22)。CPU21は検索がヒットしたか否かを調べる(ステップS23)。検索がヒットした場合(ステップS23でYES)、CPU21は、取得したオペコードに対応した代替コードをエミュレーションコードテーブルより取得し、エミュレーションコードを生成する(ステップS24)。ここで言うエミュレーションコードテーブルとは図6に示すものと同様なものである。CPU21は、未定義命令例外が発生する命令を、エミュレーションコードに書き換える(ステップS25)。この書き換えは、実施の形態2と同様である。
CPU21は、すべてのオペコードについて検索したかを判定する(ステップS26)。すべてのオペコードについて検索が完了した場合(ステップS26でYES)、CPU21は処理を終了する。すべてのオペコードについて検索が完了していない場合(ステップS26でNO)、CPU21は処理をステップS21に戻し、未だ検索していない未定義命令例外を発生させる命令のオペコードを取得し、処理を行う。
上述のように、実施の形態3においては、未定義命令例外を発生させる命令をバックエンド処理にて書き換えを行うので、未定義命令例外を発生する頻度を低減され、例外処理によるオーバーヘッドが少なくなり、より効率的に処理を行うことが可能となる。
本実施の形態3は以上の如きであり、その他は実施の形態1及び実施の形態2と同様であるので、対応する部分には同一の符号を付してその詳細な説明を省略する。
図10は、実施の形態1から3に係るホスト2の構成を示すブロック図である。CPU21が制御プログラム等を実行することにより、ホスト2は以下のように動作する。仮想マシン実行部21aは、仮想マシンを動作させ、ユーザにサービスを提供する。例外検知部21bは、未定義命令例外などの例外の発生を検知する。オペコードマッチャー21c、エミュレーション部21d、バイナリパッチ部21gは上述した動作を行う。オペコードテーブル25b、エミュレーションコードテーブル25e、レジスタコンテキスト退避・復元領域25fの機能は、上述したとおりである。なお、ホスト1についても、ホスト2と同様な構成である。
実施の形態4
実施の形態1から3においては、仮想マシンがマイグレーション後に、未定義命令例外を発生させた命令のエミュレート、または未定義命令例外を発生させる命令の書き換えを行っている。本実施の形態においては、マイグレーションを行う際に、未定義命令例外を発生させる命令の書き換えを行う。
図11は実施の形態4に係る命令書き換え処理の処理手順を示すフローチャートである。ホスト1からホスト2へ仮想マシンVM4が移動する場合の処理である。
管理ホスト3は、仮想マシンVM4をホスト2にライブマイグレーションにより移動することをホスト1に通知する(ステップS31)。ホスト1のCPU11は、ホスト2では無効となる命令のオペコードの一覧を取得する(ステップS32)。該一覧は、図5に示したオペコードテーブル25bと同様なものである。該一覧は移動先のホスト2より取得する。CPU11は、一覧より処理対象とするオペコードを取得する(ステップS33)。CPU11は、仮想マシンVM4が管理するメモリイメージ内に、処理対象のオペコードが含まれていないか検索を行う(ステップS34)。CPU11は検索結果を検証する(ステップS35)。検索にヒットした場合(ステップS35でYES)、エミュレーションコードを生成する(ステップS36)。エミュレーションコードの生成については、上述した処理と同様であり、図6に示したエミュレーションコードテーブル25eと同様なテーブルを用いて生成する。該テーブルは移動先のホスト2より取得する。CPU11は、無効となる命令をエミュレーションコードに書き換える(ステップS37)。CPU11は無効となるすべての命令のオペコードについて検索したかを判定する(ステップS38)。すべてのオペコードについて検索をしている場合(ステップS38でYES)、仮想マシンVM4のメモリイメージを移動先のホスト2に転送する(ステップS39)。管理ホスト3は、ライブマイグレーションを実行し、仮想マシンVM4をホスト1からホスト2に移動する(ステップS40)。検索がヒットしなかった場合(ステップS35でNO)、CPU11は処理をステップS38に移す。すべてのオペコードについて検索していない場合(ステップS38でNO)、CPU11は処理をステップS33に移す。
本実施の形態では、ライブマイグレーションの際の仮想マシンイメージ送信時に移動先ホストで無効となる命令の書き換えを行うので、ライブマイグレーション後に、未定義命令例外を発生することを防ぐことが可能となる。
本実施の形態においては、仮想マシン移動元のホスト1が無効命令の書き換えを行ったが、移動先のホスト2が行なっても良い。その場合、ホスト2は、まず、ホスト1より送信された仮想マシンイメージを受信する。ホスト2は、受信した仮想マシンイメージに対して、図11で示したステップS32からS38までの処理と同様な処理を行い、無効命令の書き換えを行う。書き換えが終了したら、管理ホスト3に通知し、マイグレーションを実行すれば良い。
上述の実施の形態1から4において、オペコードテーブル25b、エミュレーションコードテーブル25eは、割り込みハンドラ25aのプログラム内に保持している。割り込みハンドラ25aがRAMにロードされる際にオペコードテーブル25b、エミュレーションコードテーブル25eがメモリにロードされる。オペコードテーブル25b、エミュレーションコードテーブル25eの内容を更新する場合には、割り込みハンドラ25aのプログラム自体の更新が必要となるので、メンテナンス性が低くなる。
変形例1
変形例1では、オペコードテーブル25b、エミュレーションコードテーブル25eをプログラムコードに埋め込むのではなく、各ホストが備えるハードディスク、フラッシュメモリなどの記憶装置に記憶することとする。割り込みハンドラ25aは必要に応じて、記憶装置に記憶したオペコードテーブル25b、エミュレーションコードテーブル25eを参照する。この場合、テーブルの更新は、記憶装置上のテーブルを置き換えるだけで済むので、メンテナンス性が高い。また、割り込みハンドラ25aが動作中であっても、更新が行えるという利点がある。
変形例2
変形例2では、オペコードテーブル25b、エミュレーションコードテーブル25eを、共有ディスク4に記憶することとする。テーブルを一元管理できるので、変形例1よりもさらにメンテナンス性が向上する。ただし、共有ディスクへのアクセスが増えると読み出し時間がオーバーヘッドとなるので、割り込みハンドラ25aをロードする際に、メモリ上にオペコードテーブル25b、エミュレーションコードテーブル25eをロードし、メモリ上で参照しても良い。
変形例3
変形例3では、オペコードテーブル25b、エミュレーションコードテーブル25eを、管理ホスト3の記憶装置に記憶して管理する。ライブマイグレーションは、主として各ホストの負荷状況に応じて動的に行なわれる。そのため、オペコードテーブル25b、エミュレーションコードテーブル25eは、情報システム内に存在する全タイプのCPUに対応している必要がある。そのため、CPUタイプの数に比例して、オペコードテーブル25bのレコード数が増加する。エミュレーションコードテーブル25eは、CPUタイプの数の増加に伴い、移動元CPUと移動先CPUとの組み合わせ数が増大するため、レコード数が増加する。テーブルのレコード数が増加すると、テーブルの検索効率、読み出し効率が低下する。そこで、管理ホスト3の記憶装置にオペコードテーブル25b、エミュレーションコードテーブル25eを記憶させる。ライブマイグレーション時に、移動元CPU及び移動先CPUのタイプに基づいて、オペコードテーブル25b、エミュレーションコードテーブル25eの必要なレコードを抽出し、移動先ホストの割り込みハンドラ25aに渡すようにする。そのようにすれば、移動先ホストが用いるオペコードテーブル25b、エミュレーションコードテーブル25eのレコード数は必要最小限となり、検索効率、読み出し効率の低下を防ぐことが可能となる。
実施の形態5
図12は実施の形態5に係るホスト2及び管理ホスト3の機能構成を示すための説明図である。上述の実施の形態1と同様、ライブマイグレーションにより、仮想マシンVM4がホスト1からホスト2に移動されている。図13は実施の形態5に係るホスト2及び管理ホスト3における例外処理の処理手順を示すフローチャートである。
実施の形態5では、図12に示すように、オペコードテーブル3b、オペコードマッチャー3c、及びエミュレーションコードテーブル3eは、管理・制御ミドルウェアが動作している管理ホスト3が備えている。なお、オペコードテーブル3b、オペコードマッチャー3c、及びエミュレーションコードテーブル3eを管理・制御ミドルウェアが備えていても良い。また、オペコードテーブル3b、又はエミュレーションコードテーブル3eを、共有ディスク4に記憶させても良い。
図13を参照して、ホスト2及び管理ホスト3の処理手順について説明する。仮想マシンVM4の動作により、CPU21にて、未定義命令例外が発生する(ステップS41)。CPU21は、未定義命令例外割り込みを発生する(ステップS42)。CPU21は、ハイパーバイザ25の設定に従い、割り込みハンドラ25aへ制御を移行する(ステップS43)。割り込みハンドラ25aは、管理ホスト3に未定義命令例外を発生させた命令のオペコードを通知する。管理ホスト3のCPU31は、オペコードマッチャー3cを実行し、オペコードテーブル3bを検索する(ステップS44)。CPU31は、検索がヒットしたか否かを調べる(ステップS45)。検索にヒットした場合(ステップS45でYES)、CPU31は、エミュレーションコードテーブル3eを参照して、未定義命令例外を発生させた命令に対応する、ホスト2のCPU21でエミュレート可能なコード(エミュレーションコード)を生成し、ホスト2に送信する(ステップS46)。
ホスト2のCPU21は、エミュレーション部25dとして機能し、管理ホスト3より送信されたエミュレーションコードを実行する(ステップS47)。CPU21は、エミュレーションコードに戻り値があるか判定する(ステップS48)。戻り値がある場合(ステップS48でYES)、戻り値をレジスタコンテキスト退避・復元領域25fに反映させる(ステップS49)。CPU21は、仮想マシンへ制御を戻す。戻り値がない場合(ステップS48でNO)、CPU21は、仮想マシンへ制御を戻す(ステップS50)。
未定義命令例外を発生させた命令のオペコードが、オペコードテーブルの検索にヒットしない場合(ステップS45でNO)、管理ホスト3のCPU31はその旨を、ホスト2に通知し、ホスト2のCPU21は、通常の例外処理を実行する(ステップS51)。CPU21は、仮想マシンへ制御を戻す(ステップS50)。
本実施の形態5では、オペコードテーブル3b、オペコードマッチャー3c、及びエミュレーションコードテーブル3eを、管理ホスト3が備えている。管理ホスト3は管理・制御ミドルウェアを備え、ライブマイグレーション時の移動元、移動先を履歴として管理している。従って、未定義命令例外を発生させた命令のオペコードの検索、該命令に対するエミュレーションコードの生成を効率的に行うことが可能である。
実施の形態6
図14は実施の形態6に係る例外処理装置5のハードウェア群を示すブロック図である。実施の形態6に係る例外処理装置5は、例外処理の中で、オペコードの検索、エミュレーションコードの生成を行う機能をホスト1、ホスト2、管理ホスト3とは異なるハードウェアで構成したものである。以下の説明では、コンピュータプログラムを汎用のコンピュータに読み取らせ、コンピュータの中央処理装置が所定の処理を実行することにより例外処理装置5を構成した場合について説明する。しかし、それに限られず、等価な働きをする専用のハードウェアを有する装置として、例外処理装置5を構成してもよい。
例外処理装置5は、CPU51、RAM52、記憶部53、通信部54を含む。CPU51は記憶部53に記憶された制御プログラム531に従いハードウェア各部を制御する。RAM52は例えばSRAM、DRAM、フラッシュメモリ等である。RAM52は記憶部としても機能し、CPU51による各種プログラムの実行時に発生する種々のデータを一時的に記憶する。
記憶部53は例えば、ハードディスクまたは大容量フラッシュメモリ等である。記憶部53には制御プログラム531、オペコードテーブル532、エミュレーションコードテーブル533が記憶されている。
通信部54は例えばLAN(Local Area Network)カード等であり、ホスト、管理ホスト等と通信を行う。
本実施の形態に係る例外処理装置5は、各ホストのCPUタイプを記憶部53に記憶しているものとする。また、管理ホスト3よりライブマイグレーションの情報、例えば、移動元のホスト名、移動先のホスト名、移動した仮想マシンの識別情報などを受信し、履歴情報として保持しているものとする。
例外処理装置5及び各ホストでの処理は、上述の図13と同様である。以下、簡単に説明する。各ホストは、仮想マシンの動作により未定義命令例外が発生した場合に、例外が発生した命令のオペコードを、例外処理装置5に送信する。例外処理装置5のCPU51は、送信元のCPUのタイプを取得する。CPU51は、オペコードテーブル532を検索し、ホストから受信したオペコードがオペコードテーブル3bに含まれ、かつ、取得したCPUタイプと対応付けられているかを調べる。検索にヒットした場合、CPU51は、エミュレーションコードテーブル533を基に、ホストのCPUタイプに適合したエミュレーションコードを生成し、ホストに送信する。検索にヒットしない場合、CPU51は、通常の例外処理をするよう、その旨をホストに送信する。
本実施の形態においては、オペコードの検索と、エミュレーションコードの生成を例外処理装置5で行うこととしたので、未定義命令例外処理を行う際に、各ホスト及び管理ホストの負荷を低減することが可能となる。
上述の説明では、オペコードテーブル532、エミュレーションコードテーブル533を、例外処理装置5が備えることとしたが、それに限られず、例えば、共有ディスク4に記憶しておいても良い。
また、上述の説明においては、例外処理装置5はネットワークNに接続されることを前提としたが、それに限られるものではない。各ホストの拡張カードスロットに装填可能な拡張カードとして例外処理装置5を構成しても良い。この場合、例外処理装置5は、主として装填されているホストの例外処理を担うこととなる。
上述の実施の形態1から6及び変形例1から3において、オペコードテーブルに、オペコードに加えて引数(オペランド)を含めることとしても良い。引数を含めることにより、より厳密にマッチングを行うことが可能となる。
また、オペコードテーブル、エミュレーションコードテーブルは一つのテーブルでも良い。
実施の形態7
図15は実施の形態7に係るホスト1のハードウェア群を示すブロック図である。上述の実施の形態1から5では、ホスト1を動作させるための制御プログラムは、ディスクドライブ等の読み取り部10AにCD-ROM、DVD(DigitalVersatile Disc)ディスク、メモリカード、またはUSB(Universal SerialBus)メモリ等の可搬型記録媒体1Aを読み取らせて記憶部13に記憶しても良い。また当該プログラムを記憶したフラッシュメモリ等の半導体メモリ1Bをホスト1内に実装しても良い。さらに、当該プログラムは、インターネット等の通信網を介して接続される他のサーバコンピュータ(図示せず)からダウンロードすることも可能である。以下に、その内容を説明する。
図15に示すホスト1は、上述した各種ソフトウェア処理を実行するプログラムを、可搬型記録媒体1Aまたは半導体メモリ1Bから読み取り、或いは、通信網を介して他のサーバコンピュータ(図示せず)からダウンロードする。当該プログラムは、制御プログラムとしてインストールされ、RAM12にロードして実行される。これにより、上述したホスト1として機能する。
本実施の形態7は以上の如きであり、その他は実施の形態1から5と同様であるので、対応する部分には同一の参照番号を付してその詳細な説明を省略する。
ホスト1と同様に、ホスト2を構成することも可能である。また、管理ホスト3又は実施の形態6における例外処理装置5についても、制御プログラムを可搬型記録媒体から読み取り記憶部に記憶したり、半導体メモリとして実装したりしても良い。
なお、制御プログラムにとどまらず、オペコードテーブルやエミュレーションコードテーブルを可搬型記録媒体から読み取り記憶部に記憶したり、半導体メモリとして実装したりしても良い。
なお、上述した実施の形態はすべての点で例示であって、制限的なものではないと考えられるべきである。本発明の範囲は、上述した意味ではなく、特許請求の範囲によって示され、特許請求の範囲と均等の意味及び範囲内でのすべての変更が含まれることが意図される。
以上の実施例1から7及び変形例1から3を含む実施の形態に関し、更に以下の付記を開示する。
(付記1)
仮想マシンが物理マシン間を移動したことにより無効となった命令を検出し、
検出した前記命令に含まれる無効なオペレーションコードに対応付けられた有効なオペレーションコードを取得し、
取得した前記有効なオペレーションコードに対応した命令を実行する
例外処理方法。
(付記2)
前記無効となった命令を検出した場合、
前記検出した命令を実行した仮想マシンを特定し、
特定した仮想マシンが確保している記憶領域を対象に前記無効なオペレーションコードを検索し、
検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
付記1に記載の例外処理方法。
(付記3)
前記特定した仮想マシンが確保している記憶領域を対象に、前記仮想マシンが動作する物理マシンにて無効なオペレーションコードを検索し、
検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
付記1又は2に記載の例外処理方法。
(付記4)
仮想マシンが物理マシン間を移動する時に、
仮想マシンに対応付けられたメモリイメージを対象に前記無効なオペレーションコードを検索し、
検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
付記1から3のいずれか1つに記載の例外処理方法。
(付記5)
前記有効なオペレーションコードを取得する際、無効なオペレーションコード及び有効なオペレーションコードを対応付けたテーブルを用いる
付記1から4のいずれか1つに記載の例外処理方法。
(付記6)
仮想マシンが物理マシン間を移動したことにより、仮想マシンが動作する物理マシンにて無効となった命令を検出し、
検出した命令に含まれる無効なオペレーションコードに対応付けられた有効なオペレーションコードを取得し、
取得した有効なオペレーションコードに対応した命令を実行する
処理を前記物理マシンに実行させるプログラム。
(付記7)
前記無効となった命令を検出した場合、
前記検出した命令を実行した仮想マシンを特定し、
特定した仮想マシンが確保している記憶領域を対象に前記無効なオペレーションコードを検索し、
検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
付記6に記載のプログラム。
(付記8)
前記特定した仮想マシンが確保している記憶領域を対象に、前記仮想マシンが動作する物理マシンにて無効なオペレーションコードを検索し、
検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
付記6又は7に記載のプログラム。
(付記9)
仮想マシンが物理マシン間を移動することを検出し、
移動を検出した仮想マシンに対応付けられたメモリイメージを対象に無効なオペレーションコードを検索し、
検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
付記6から8のいずれか1つに記載のプログラム。
(付記10)
前記有効なオペレーションコードを取得する際、無効なオペレーションコード及び有効なオペレーションコードを対応付けたテーブルを用いる
付記6から9のいずれか1つに記載のプログラム。
(付記11)
仮想マシンが物理マシン間を移動したことにより無効となった命令を検出する検出部、
検出した命令に含まれるオペレーションコードに対応付けられた有効なオペレーションコードを取得する取得部、
取得した有効なオペレーションコードを出力する出力部
を有する装置。
1、2 ホスト
21a 仮想マシン実行部
21b 例外検知部
25 ハイパーバイザ
25a 割り込みハンドラ
25b オペコードテーブル
25c オペコードマッチャー
25d エミュレーション部
25e エミュレーションコードテーブル
25f レジスタコンテキスト退避・復元領域
3 管理ホスト
4 共有ディスク
5 例外処理装置

Claims (6)

  1. 仮想マシンが物理マシン間を移動したことにより無効となった命令を検出し、
    検出した前記命令に含まれる無効なオペレーションコードに対応付けられた有効なオペレーションコードを取得し、
    取得した前記有効なオペレーションコードに対応した命令を実行し、
    前記無効となった命令を検出した場合、
    前記検出した命令を実行した仮想マシンを特定し、
    特定した仮想マシンが確保している記憶領域を対象に前記無効なオペレーションコードを検索し、
    検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
    例外処理方法。
  2. 前記特定した仮想マシンが確保している記憶領域を対象に、前記仮想マシンが動作する物理マシンにて無効なオペレーションコードを検索し、
    検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
    請求項1に記載の例外処理方法。
  3. 仮想マシンが物理マシン間を移動する時に、
    仮想マシンに対応付けられたメモリイメージを対象に前記無効なオペレーションコードを検索し、
    検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
    請求項1又は2に記載の例外処理方法。
  4. 前記有効なオペレーションコードを取得する際、無効なオペレーションコード及び有効なオペレーションコードを対応付けたテーブルを用いる
    請求項1からのいずれか1項に記載の例外処理方法。
  5. 仮想マシンが物理マシン間を移動したことにより、仮想マシンが動作する物理マシンにて無効となった命令を検出し、
    検出した命令に含まれる無効なオペレーションコードに対応付けられた有効なオペレーションコードを取得し、
    取得した有効なオペレーションコードに対応した命令を実行し、
    前記無効となった命令を検出した場合、
    前記検出した命令を実行した仮想マシンを特定し、
    特定した仮想マシンが確保している記憶領域を対象に前記無効なオペレーションコードを検索し、
    検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える
    処理を前記物理マシンに実行させるプログラム。
  6. 仮想マシンが物理マシン間を移動したことにより無効となった命令を検出する検出部、
    検出した命令に含まれるオペレーションコードに対応付けられた有効なオペレーションコードを取得する取得部、
    取得した有効なオペレーションコードを出力する出力部
    前記無効となった命令を検出した場合、前記検出した命令を実行した仮想マシンを特定する特定部、及び
    特定した仮想マシンが確保している記憶領域を対象に前記無効なオペレーションコードを検索し、検索結果に含まれる無効なオペレーションコードを、有効なオペレーションコードに書き換える書き換え部
    を有する装置。
JP2012057848A 2012-03-14 2012-03-14 例外処理方法、プログラム及び装置 Active JP5929353B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012057848A JP5929353B2 (ja) 2012-03-14 2012-03-14 例外処理方法、プログラム及び装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012057848A JP5929353B2 (ja) 2012-03-14 2012-03-14 例外処理方法、プログラム及び装置

Publications (2)

Publication Number Publication Date
JP2013191089A JP2013191089A (ja) 2013-09-26
JP5929353B2 true JP5929353B2 (ja) 2016-06-01

Family

ID=49391242

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012057848A Active JP5929353B2 (ja) 2012-03-14 2012-03-14 例外処理方法、プログラム及び装置

Country Status (1)

Country Link
JP (1) JP5929353B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9858058B2 (en) * 2014-03-31 2018-01-02 International Business Machines Corporation Partition mobility for partitions with extended code
CN106325819B (zh) * 2015-06-17 2019-08-02 华为技术有限公司 计算机指令处理方法、协处理器和系统
US11288086B2 (en) 2016-03-31 2022-03-29 Nec Corporation Network system, management method and apparatus thereof, and server

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH02231634A (ja) * 1989-03-03 1990-09-13 Nec Corp ソフトウェア互換性維持方法
JPH10133886A (ja) * 1996-10-31 1998-05-22 Fujitsu Ltd 情報処理装置
JP2002063031A (ja) * 2000-08-18 2002-02-28 Fainaaku Kk アーキテクチャ切替え・再構成対応プロセッサ
JP2008299648A (ja) * 2007-05-31 2008-12-11 Toshiba Corp プログラムおよび情報処理装置
JP2010272055A (ja) * 2009-05-25 2010-12-02 Sony Corp 情報処理装置および方法、並びにプログラム
JP2011123635A (ja) * 2009-12-10 2011-06-23 Nec Corp 情報処理装置、情報処理装置の制御方法、及び記録媒体

Also Published As

Publication number Publication date
JP2013191089A (ja) 2013-09-26

Similar Documents

Publication Publication Date Title
JP6018590B2 (ja) ライブラリーオペレーティングシステムによるアプリケーションの互換性
US7797507B2 (en) Virtual machine system and operating method thereof
JP7090657B2 (ja) アプリケーションをアップグレードするための方法、装置、デバイスならびに記憶媒体
JP5460430B2 (ja) 動的コンパイラプログラム、動的コンパイル方法及び動的コンパイル装置
US11487523B2 (en) Updating machine emulator
WO2012100535A1 (zh) 超级内核组件的升级方法和计算机系统
TWI715762B (zh) 虛擬機器創建方法和裝置
CN102165431A (zh) 使用仿真对物理硬件的运行时替换
KR20140118093A (ko) 메모리 가상화 기반 스냅샷 부트 장치 및 방법
US20130318528A1 (en) Information processing method
JP5778296B2 (ja) 仮想計算機システム、仮想化機構、及びデータ管理方法
US10705867B2 (en) Hypervisor exchange with virtual machines in memory
US11693722B2 (en) Fast memory mapped IO support by register switch
CN106648827A (zh) 一种在线添加虚拟机资源的方法
WO2020063432A1 (zh) 一种升级虚拟化模拟器的方法和装置
US7200705B2 (en) Method of checkpointing state of virtual memory for process
US20120240116A1 (en) Performance In A Virtualization Architecture With A Processor Abstraction Layer
JP5929353B2 (ja) 例外処理方法、プログラム及び装置
Kooburat et al. The Best of Both Worlds with {On-Demand} Virtualization
US20120144182A1 (en) Apparatus and method for fast booting based on virtualization technique
CN114090171A (zh) 虚拟机创建方法、迁移方法及计算机可读介质
CN113791873B (zh) 一种虚拟机创建方法、计算设备及存储介质
US20110314203A1 (en) Resource adjustment methods and systems for virtual machines
US20140149971A1 (en) Dynamic compiler program, dynamic compiling method and dynamic compiling device
US11188361B1 (en) Cross-architecture software distribution using a virtual instruction set architecture

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150203

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151116

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151215

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160129

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160405

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160418

R150 Certificate of patent or registration of utility model

Ref document number: 5929353

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150