(57)【特許請求の範囲】
【請求項１】
仮想マシンのアプリケーションからのデバイス操作要求に対応する、仮想デバイスに対するデバイス操作命令を出力するゲストデバイスドライバを含むゲストオペレーティングシステムと、
前記ゲストデバイスドライバから出力される一連のデバイス操作命令の完結を検知する、プログラマブルロジックデバイスを用いて構成されたコマンド解釈部と、
前記コマンド解釈部で検知された、完結状態の一連のデバイス操作命令を、実デバイスに対する入出力コマンドに変換して発行するデバイス制御部と、このデバイス制御部からの入出力コマンドに応じた実デバイスに対するデバイス操作コマンドを出力するホストデバイスドライバとを含むホストオペレーティングシステムと、
前記ゲストオペレーティングシステムと前記ホストオペレーティングシステムとの間に介在し、前記コマンド解釈部で検知された、一連のデバイス操作命令の完結を前記ホストオペレーティングシステムのデバイス制御部に通知する通知部を含む仮想マシンモニタとを含む仮想マシンの入出力エミュレーション機構。
【発明の詳細な説明】
【技術分野】
【０００１】
本案は、計算機システムにおける仮想マシン(ＶＭ)環境において、各ゲストＶＭに対する入出力(ＩＯ)エミュレーション機構に関する。
【背景技術】
【０００２】
従来、計算機システム上で、ゲストＯＳ(ゲストＶＭ)による仮想マシン(ＶＭ)環境を提供するものがある。即ち、コンピュータ上での仮想マシンのエミュレーション処理によって、そのコンピュータが仮想マシンを備えた場合と同様の環境を提供するものがある。そのような計算機システムにおいて、ゲストＶＭのＩ／Ｏエミュレーションは、ＭＭＩＯ(Memory Mapped Input/Output)領域に対するメモリアクセス命令(仮想デバイスに対するデ
バイス操作命令)を、ハイパーバイザによりインターセプトしてエミュレーションを行う
仕組みとなっている。
【０００３】
図４は、従来におけるデバイスエミュレーションの概要説明図である。図４に示すように、コンピュータ上には、ホストＯＳ(Operating System)５１と、ゲストＯＳ５２とが備えられている。ホストＯＳ５１とゲストＯＳ５２との間には、ハイパーバイザ(仮想マシ
ンモニタ)５３が介在している。ゲストＯＳ５２は、仮想マシンを実現するための１以上
のアプリケーション５４を備えており、このアプリケーション５４が実デバイスに対してアクセスする場合には、以下のような処理が実行される。
【０００４】
即ち、ゲストＯＳ５２のアプリケーション５４からのデバイスアクセス要求が発行されると、ゲストＯＳ５２に備えられたネイティブのデバイスドライバ５５が、デバイスアクセス要求に応じた仮想デバイスに対する低レベルのデバイス操作命令を出力する。すると、ハイパーバイザ５３がデバイスドライバ５５から出力される低レベルのデバイス操作命令を総て捕捉(インターセプト)し、ホストＯＳ５１が備えるデバイスハードウェアのエミュレータ５６(デバイスモデルと呼ばれる)へ転送する。この転送は、アクセス例外処理として実行される。
【０００５】
エミュレータ５６では、ハイパーバイザ５３から転送された低レベルのデバイス操作命令を、実デバイスに対するデバイス操作命令(コマンド)に変換し、ホストＯＳ５１のネイティブのデバイスドライバ５７に与える。デバイスドライバ５７は、コマンドに従って実デバイスにアクセスすることができる。
【０００６】
図５は、図４に示した従来のエミュレータ５６を示す。エミュレータ５６は、ＭＭＩＯエミュレーションを実行するために、コマンド解釈オートマトン６１と、デバイス状態保持記憶部６２と、デバイス制御部(コマンド発行部)６３とを備える。
【０００７】
コマンド解釈オートマトン６１は、プロセッサ(ゲストＯＳ)からのロード命令やストア命令のような粒度の小さいデバイス操作命令の解釈を行う。このような粒度の小さいデバイス操作命令が、一塊りの大きな粒度を持つデバイス操作命令として完結した(エミュレ
ーションコードとして解釈できた)場合には、このエミュレーションコードに対応するコ
マンドの発行をデバイス制御部６３に依頼する。
【０００８】
デバイス状態保持記憶部６２は、コマンド解釈オートマトン６１によるデバイス操作命令解釈の途中状態や、これまでのハードウェア(実デバイス)に対してゲストＯＳ５２から指示された内容や、実デバイスに対するアクセスの結果を保持する。
【０００９】
デバイス制御部６３は、デバイス操作命令として完結したコマンドをデバイスドライバ５７に対して実際に発行し、その結果をデバイスドライバ５７から得る。デバイス制御部６３は、実際の操作結果をデバイス状態保持記憶部６２に反映することができる。
【特許文献１】特開平７−３３４３７２号公報
【発明の開示】
【発明が解決しようとする課題】
【００１０】
上述した従来技術では、ゲストＯＳ５２のデバイスドライバ５５から出力される粒度の小さいデバイス操作命令を総てインターセプトしてエミュレータ５６に送り、エミュレータ５６でエミュレーションコードを呼び出す方式が採用されている。このような方式は、通常のメモリアクセス命令による動作(ホストＯＳによる実デバイスアクセス動作)に比べて、多大な時間を必要とする。これは、ゲストＯＳ５２による仮想マシンの高性能化を阻む要因となっていた。
【００１１】
本案の目的は、仮想マシンの実デバイスアクセスに要する時間を短縮可能な技術を提供することである。
【課題を解決するための手段】
【００１２】
本案は、仮想マシンのアプリケーションからのデバイス操作要求に対応する、仮想デバイスに対するデバイス操作命令を出力するゲストデバイスドライバを含むゲストオペレーティングシステムと、
前記ゲストデバイスドライバから出力される一連のデバイス操作命令の完結を検知する、プログラマブルロジックデバイスを用いて構成されたコマンド解釈部と、
前記コマンド解釈部で検知された、完結状態の一連のデバイス操作命令を、実デバイスに対する入出力コマンドに変換して発行するデバイス制御部と、このデバイス制御部からの入出力コマンドに応じた実デバイスに対するデバイス操作コマンドを出力するホストデバイスドライバとを含むホストオペレーティングシステムと、
前記ゲストオペレーティングシステムと前記ホストオペレーティングシステムとの間に介在し、前記コマンド解釈部で検知された、一連のデバイス操作命令の完結を前記ホストオペレーティングシステムのデバイス制御部に通知する通知部を含む仮想マシンモニタとを含む仮想マシンの入出力エミュレーション機構である。
【発明の効果】
【００１３】
本案によれば、ゲストＯＳ(仮想マシン)の実デバイスアクセスに要する時間を短縮することができる。
【発明を実施するための最良の形態】
【００１４】
以下、本案の実施形態について、図面を用いて説明する。以下の実施形態の構成は例示であり、本案は実施形態の構成に限定されない。
【００１５】
〈課題の解決方法〉
本案では、ゲストＯＳによるＶＭ機構において、ＦＰＧＡ(Field Programmable Gate Array)のようなプログラマブルロジックデバイスを利用したＭＭＩＯエミュレーションデ
バイスを設ける。
【００１６】
即ち、本案では、ＭＭＩＯエミュレーションにおけるコマンド解釈オートマトン部分(
図５の６１)を、ＦＰＧＡのようなプログラミング可能な論理回路(プログラマブルロジックデバイス：ＰＬＤ)によって実現する。コマンド解釈オートマトンは、ＦＰＧＡの他、
メモリ・ベースド・ロジック(Memory Based Logic)と呼ばれるハードウェアで実現することができる。
【００１７】
本案では、ＰＬＤによるコマンド解釈オートマトン(ＭＭＩＯエミュレーションデバイ
ス)が、ゲストＯＳのデバイスドライバ(ゲストデバイスドライバ)から出力される粒度の
低い一連のデバイス操作命令の完結(一つの入出力コマンド(Ｉ／Ｏコマンド)に相当する)を検知すると、それをＭＭＩＯエミュレーションソフトウェアに通知する。この通知は、割込処理やポーリングのような様々な方式を用いて実行することができる。
【００１８】
但し、ＭＭＩＯエミュレーションデバイス(コマンド解釈オートマトン)の内部状態を変更するだけの処理の場合には、その変更をＭＭＩＯエミュレーションソフトウェア側には通知しない。
【００１９】
ＭＭＩＯエミュレーションデバイス(コマンド解釈オートマトン)は、一連のデバイス操作命令の完結を検知し、その通知処理が終了すると、ＭＭＩＯエミュレーションデバイスの内部状態とメモリの状態を終了状態に移行させた後、ＭＭＩＯエミュレーションを終了する。
【００２０】
図１は、実施形態に係る仮想マシンの入出力エミュレーション機構(ＭＭＩＯエミュレ
ーション機構)の構成例を示す図である。図１において、エミュレーション機構は、ホス
トＯＳ１１と、仮想マシン(ＶＭ)を実現するためのゲストＯＳ１２と、ホストＯＳ１１とゲストＯＳ１２との間に介在するハイパーバイザ１３(仮想マシンモニタ)と、ＭＭＩＯエミュレーションデバイスとしてのコマンド解釈オートマトン１４(コマンド解釈部)とを備える。
【００２１】
ゲストＯＳ１２は、１以上のアプリケーション５４と、ネイティブカーネル５８と、デバイスドライバ５５(ゲストデバイスドライバ)とを備えており、デバイスドライバ５５からのメモリアクセス命令(粒度の小さいデバイス操作命令)は、コマンド解釈オートマトン１４に入力される。
【００２２】
ハイパーバイザ１３は、コマンド解釈オートマトン１４に接続されたコマンド完結通知部１５を備えている。ホストＯＳ１１は、コマンド完結通知部１５に接続されたデバイス制御部１６(ＭＭＩＯエミュレーションソフトウェア)と、パラカーネル５９と、デバイスドライバ５７(ホストデバイスドライバ)とを備えている。
【００２３】
ここに、コマンド解釈オートマトン１４は、ＦＰＧＡや、ＭＢＬを用いて作成される。また、コマンド解釈オードマトン１４は、デバイス状態保持記憶部２１を備えることができる。デバイス状態保持記憶部２１は、図５に示したデバイス状態保持記憶部６２に相当し、コマンド解釈オートマトン１４によるデバイス操作命令解釈の途中状態や、これまでのハードウェア(実デバイス)に対してゲストＯＳ１２から指示された内容や、実デバイスに対するアクセスの結果を保持することができる。
【００２４】
図２は、図１に示したＭＭＩＯエミュレーション機構の動作説明図である。図２において、ゲストＯＳ１２から、デバイスアクセス要求が発行されると、そのデバイスアクセス要求は、カーネル５８を介してデバイスドライバ５５に与えられ、デバイスドライバ５５は、デバイスアクセス要求に応じたデバイス操作命令(メモリアクセス命令)が出力される。デバイスドライバ５５からのデバイス操作命令は、コマンド解釈オートマトン１４に入力される。ここまでの動作は、ネイティブのハードウェアと同様の動作である(図２(１))
コマンド解釈オートマトン１４は、デバイスドライバ５５からの一連のデバイス操作命令が完結すると、その旨をコマンド完結通知部１５に通知する(図２(２))。例えば、コマンド解釈オートマトン１４は、デバイスドライバ５５からの連続したデバイス操作命令の出力が完結すると、この完結した一連のデバイス操作命令を一つの入出力コマンドとして
解釈し、デバイス操作コマンドの完結をハイパーバイザ１３のコマンド完結通知部１５に通知する。このとき、コマンド解釈オートマトン１４が備える状態保持記憶部２１は、解釈の途中結果等のデータを保持することができる。
【００２５】
コマンド完結通知部１５は、例えば割込処理によって、デバイス操作命令が完結したこと、及び一連のデバイス操作命令を、ホストＯＳ１１のデバイス制御部１６に通知する。このとき、コマンド解釈オートマトン１４は、一連のデバイス操作命令から一つの入出力コマンドを解釈し、その入出力コマンドの発行依頼をコマンド完結通知部１５を介してデバイス制御部１６に通知することもできる。
【００２６】
デバイス制御部１６は、従来におけるエミュレータ５６のデバイス制御部６３と同じものであり、コマンド完結通知部１５から得られた一連のデバイス操作命令を、実デバイスに応じた入出力コマンド(Ｉ／Ｏコマンド(エミュレーションコード))に変換して出力する。
【００２７】
入出力コマンドは、カーネル５９を介してデバイスドライバ５７に与えられ、デバイスドライバ５７は、入出力コマンドに応じたデバイス操作命令を出力する(実デバイスにア
クセスする)。このようにして、アプリケーション５４からのデバイスアクセス命令に応
じた実デバイスアクセスが行われる。
【００２８】
その後、デバイスドライバ５７は、実デバイスのアクセス結果を受け取り、そのアクセス結果は、デバイス制御部１６で、ゲストＯＳ１２のアプリケーション５４(が認識して
いる仮想デバイス)に応じた形式に変換され、ハイパーバイザ１３を介してデバイスドラ
イバ５５に与えられる。デバイスドライバ５７からカーネル５８を介してアクセス結果がアプリケーション５４に与えられる。このような過程において、コマンド解釈オートマトン１４内のデバイス状態保持記憶部２１には、アクセス結果のデータが格納される。
【００２９】
このような入出力エミュレーション機構によれば、ＦＰＧＡやＭＢＬを用いたハードウェアによるコマンド解釈オートマトン１４が、デバイスドライバ５５から出力される一連のデバイス操作命令の完結を検知する。このため、従来技術のような、ハイパーバイザ５３がデバイスドライバからのデバイス操作命令を通知し、エミュレータ５６内のコマンド解釈オートマトン６１がソフトウェア処理によってデバイス操作命令を解釈する場合に比べて、大幅な時間短縮を図ることができる。よって、入出力エミュレーション処理、ひいてはゲストＯＳ１２(アプリケーション５４)が実デバイスにアクセスするために必要な時間の短縮化が図られ、仮想マシン(ＶＭ)の高速化(性能向上)が図られる。
【００３０】
即ち、実施形態によれば、ＶＭ機構において、ゲストＶＭ(ゲストＯＳ１２)のＭＭＩＯエミュレーションにかかるオーバヘッドが削減され、処理の高速化を図ることができる。通常、ＭＭＩＯエミュレーションでは、ＶＭ機構専用のデバイスドライバを実装することで高速化を図っている。このような専用のデバイスドライバを実装することなく、デバイスドライバ５５のような汎用のデバイスドライバの適用下で、デバイスアクセスを高速化することができる。
【００３１】
さらに、ＦＰＧＡのようなＰＬＤを適用することで、あらゆる種類のＭＭＩＯエミュレーションデバイスを作成することが可能で、拡張性、汎用性が高い。
【００３２】
また、図１に示した例では、デバイス状態保持記憶部２１をコマンド解釈オートマトン１４中に設けた例を示したが、このようなデバイス状態保持記憶部２１を、図示しない主記憶(メインメモリ)上に配置することが可能である(図３、デバイス状態保持記憶部２１
Ａ参照)。
【００３３】
上述した実施形態の構成は、本案の目的を逸脱しない範囲で適宜組み合わせることができる。
【図面の簡単な説明】
【００３４】
【図１】仮想マシンにおける入出力エミュレーション機構の構成例を示す図。
【図２】図１に示した入出力エミュレーション機構の動作例を示す図。
【図３】図１に示した入出力エミュレーション機構の変形例を示す図。
【図４】従来における入出力エミュレーション機構を示す図。
【図５】図４に示したエミュレータの構成を示す図。
【符号の説明】
【００３５】
１１・・・ホストＯＳ
１２・・・ゲストＯＳ
１３・・・ハイパーバイザ
１４・・・コマンド解釈オートマトン
１５・・・コマンド完結通知部
１６・・・デバイス制御部
２１，２１Ａ・・・デバイス状態保持記憶部
５４・・・アプリケーション
５５，５７・・・ネイティブデバイスドライバ
５８・・・ネイティブカーネル
５９・・・パラカーネル
【図１】
0005245539.tif 000002
【図２】
0005245539.tif 000003
【図３】
0005245539.tif 000004
【図４】
0005245539.tif 000005
【図５】
0005245539.tif 000006