(57)【要約】  フロントエンドドライバＡ１２１がＩ／ＯデバイスＡ４０１に対する制御データを入力し、標準ドライバ呼出し機構（１）１３に出力する。フロントエンドドライバＢ１２２がＩ／ＯデバイスＢ４０２に対する制御データを入力し、標準ドライバ呼出し機構（１）１３に出力する。標準ドライバ呼出し機構（１）１３がＩ／ＯデバイスＡ４０１に対する制御データ及びＩ／ＯデバイスＢ４０２に対する制御データを入力し、標準ドライバ呼出し機構（２）３１に出力する。標準ドライバ呼出し機構（２）３１は、Ｉ／ＯデバイスＡ４０１に対する制御データを標準デバイスドライバＡ３２１に出力し、Ｉ／ＯデバイスＢ４０２に対する制御データを標準デバイスドライバＡ３２１に出力する。標準デバイスドライバＡ３２１は制御データに基づきＩ／ＯデバイスＡ４０１を制御し、標準デバイスドライバＢ３２２は制御データに基づきＩ／ＯデバイスＢ４０２を制御する。
2014076799.tif 000002
【特許請求の範囲】
【請求項１】
物理プロセッサと、物理メモリと、複数の物理Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）デバイスとを含むハードウェアと、
前記ハードウェア上で動作するホストＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）及び仮想マシンモニタと、
前記仮想マシンモニタ上で動作するゲストＯＳとを有する仮想計算機システムであって、
前記仮想マシンモニタは、
前記ゲストＯＳと前記ホストＯＳとの間でデータの中継を行い、
前記ゲストＯＳは、
各々が、前記複数の物理Ｉ／Ｏデバイスのうちのいずれかの物理Ｉ／Ｏデバイスに対応し、対応する物理Ｉ／Ｏデバイスの制御のための制御データを入力する複数のフロントエンドドライバと、
各フロントエンドドライバから制御データを入力し、入力した制御データを前記仮想マシンモニタに出力するゲストＯＳ側管理部とを有し、
前記ホストＯＳは、
各々が、前記複数の物理Ｉ／Ｏデバイスのうちのいずれかの物理Ｉ／Ｏデバイスに対応し、対応する物理Ｉ／Ｏデバイスが共通している、対応関係にあるフロントエンドドライバからの制御データを入力し、入力した制御データに基づいて、対応する物理Ｉ／Ｏデバイスを制御する複数の標準デバイスドライバと、
前記ゲストＯＳ側管理部から出力された制御データを前記仮想マシンモニタから入力し、入力した制御データを、入力した制御データの出力元のフロントエンドドライバと対応関係にある標準デバイスドライバに出力するホストＯＳ側管理部とを有することを特徴とする仮想計算機システム。
【請求項２】
各フロントエンドドライバは、
入力した制御データに前記ゲストＯＳに割り当てられているパラメータ値であるゲストＯＳパラメータ値が記述されているか否かを判断し、
前記制御データに前記ゲストＯＳパラメータ値が記述されている場合に、前記仮想マシンモニタ及び前記ゲストＯＳ側管理部を介して前記ホストＯＳ側管理部から、前記ゲストＯＳパラメータ値に対応する、前記ホストＯＳに割当てられているパラメータ値をホストＯＳパラメータ値として取得し、
前記制御データの前記ゲストＯＳパラメータ値の記述を前記ホストＯＳパラメータ値の記述に変更し、前記ホストＯＳパラメータ値が記述される制御データを前記ゲストＯＳ側管理部及び前記仮想マシンモニタ及び前記ホストＯＳ側管理部を介して、対応関係にある標準デバイスドライバに出力し、
各標準デバイスドライバは、
前記ゲストＯＳパラメータ値に代えて前記ホストＯＳパラメータ値が記述される制御データを前記ホストＯＳ側管理部から入力し、入力した制御データに基づいて、対応する物理Ｉ／Ｏデバイスを制御することを特徴とする請求項１に記載の仮想計算機システム。
【請求項３】
各フロントエンドドライバは、
前記制御データに前記ゲストＯＳパラメータ値が記述されている場合に、前記ゲストＯＳ側管理部及び前記仮想マシンモニタを介して前記ホストＯＳ側管理部に、前記ゲストＯＳパラメータ値を通知し、
前記ホストＯＳ側管理部は、
前記ゲストＯＳ側管理部及び前記仮想マシンモニタを介して、いずれかのフロントエンドドライバから前記ゲストＯＳパラメータ値が通知された場合に、
通知された前記ゲストＯＳパラメータ値に対応する、前記ホストＯＳに割当てられているパラメータ値をホストＯＳパラメータ値として前記仮想マシンモニタ及び前記ゲストＯＳ側管理部を介して、前記ゲストＯＳパラメータ値の通知元のフロントエンドドライバに通知し、
各フロントエンドドライバは、
前記仮想マシンモニタ及び前記ゲストＯＳ側管理部を介して、前記ホストＯＳ側管理部から前記ホストＯＳパラメータ値が通知された場合に、
前記制御データの前記ゲストＯＳパラメータ値の記述を前記ホストＯＳパラメータ値の記述に変更し、前記ホストＯＳパラメータ値が記述される制御データを前記ゲストＯＳ側管理部及び前記仮想マシンモニタ及び前記ホストＯＳ側管理部を介して、対応関係にある標準デバイスドライバに出力することを特徴とする請求項２に記載の仮想計算機システム。
【請求項４】
各フロントエンドドライバは、
前記ゲストＯＳパラメータ値として、入力した制御データに前記ゲストＯＳに割り当てられている論理アドレスであるゲストＯＳアドレスが記述されているか否かを判断し、
前記制御データに前記ゲストＯＳアドレスが記述されている場合に、前記ゲストＯＳアドレスの物理アドレスに対応する、前記ホストＯＳに割り当てられている論理アドレスをホストＯＳアドレスとして、前記仮想マシンモニタ及び前記ゲストＯＳ側管理部を介して前記ホストＯＳ側管理部から取得し、
前記制御データの前記ゲストＯＳアドレスの記述を前記ホストＯＳアドレスの記述に変更し、前記ホストＯＳアドレスが記述される制御データを前記ゲストＯＳ側管理部及び前記仮想マシンモニタ及び前記ホストＯＳ側管理部を介して、対応関係にある標準デバイスドライバに出力し、
各標準デバイスドライバは、
前記ゲストＯＳアドレスに代えて前記ホストＯＳアドレスが記述される制御データを前記ホストＯＳ側管理部から入力し、入力した制御データに基づいて、対応する物理Ｉ／Ｏデバイスを制御することを特徴とする請求項２又は３に記載の仮想計算機システム。
【請求項５】
各フロントエンドドライバは、
前記制御データに前記ゲストＯＳアドレスが記述されている場合に、前記ゲストＯＳ側管理部及び前記仮想マシンモニタを介して前記ホストＯＳ側管理部に、前記ゲストＯＳアドレスを通知し、
前記ホストＯＳ側管理部は、
前記ゲストＯＳ側管理部及び前記仮想マシンモニタを介して、いずれかのフロントエンドドライバから前記ゲストＯＳアドレスが通知された場合に、
前記ゲストＯＳアドレスの物理アドレスに対応する、前記ホストＯＳに割り当てられている論理アドレスをホストＯＳアドレスとして、前記仮想マシンモニタ及び前記ゲストＯＳ側管理部を介して、前記ゲストＯＳアドレスの通知元のフロントエンドドライバに通知し、
各フロントエンドドライバは、
前記仮想マシンモニタ及び前記ゲストＯＳ側管理部を介して、前記ホストＯＳ側管理部から前記ホストＯＳアドレスが通知された場合に、
前記制御データの前記ゲストＯＳアドレスの記述を前記ホストＯＳアドレスの記述に変更し、前記ホストＯＳアドレスが記述される制御データを前記ゲストＯＳ側管理部及び前記仮想マシンモニタ及び前記ホストＯＳ側管理部を介して、対応関係にある標準デバイスドライバに出力することを特徴とする請求項４に記載の仮想計算機システム。
【請求項６】
前記物理プロセッサは、
各フロントエンドドライバの処理を行うフロントエンドドライバ処理部と、
前記ゲストＯＳ側管理部の処理を行うゲストＯＳ側管理処理部と、
前記ホストＯＳ側管理部の処理を行うホストＯＳ側管理処理部と、
各標準デバイスドライバの処理を行う標準デバイスドライバ処理部とを有することを特徴とする請求項１〜５のいずれかに記載の仮想計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想計算機システムに関する。
【背景技術】
【０００２】
従来のＩ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）デバイスの仮想化方式においては、完全仮想化と準仮想化の手法によって、仮想化を行なっている（例えば、特許文献１、特許文献２）。
Ｉ／Ｏデバイスを仮想化することによって、ハードウェア（Ｈ／Ｗ）更新時にもゲストＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）側の環境を変更することなく、システムを更新できるメリットが享受できる。【０００３】
完全仮想化とは、実在する物理Ｉ／ＯデバイスをホストＯＳで完全にエミュレートして、ゲストＯＳが、エミュレートされたＩ／Ｏデバイスを利用する方式である。
ゲストＯＳからは、ゲストＯＳ上に設置した標準デバイスドライバで、エミュレートされたＩ／Ｏデバイスを制御し、エミュレートされたＩ／Ｏデバイスが、ホストＯＳ上に設置した標準デバイスドライバを利用して物理Ｉ／Ｏデバイスを制御する。【０００４】
準仮想化とは、ゲストＯＳとホストＯＳの双方に仮想化ソフトウェア（仮想マシンモニタ）とのインタフェースとなるデバイスドライバを組み込む方式である。
このゲストＯＳ側のデバイスドライバをフロントエンドドライバ、ホストＯＳ側のデバイスドライバをバックエンドドライバと呼ぶ。
ゲストＯＳからの物理Ｉ／Ｏデバイスの制御方法は、まず、フロントエンドドライバから、仮想化ソフトウェアの内部通信機構と共有メモリを利用して、バックエンドドライバに対してデバイスの制御データが渡される。
バックエンドドライバは、フロントエンドドライバから渡されたデバイスの制御データをホストＯＳ上に設置した標準デバイスドライバで利用可能なデータ構造に変換し、変換後の制御データを用いて、ホストＯＳ上の標準デバイスドライバを介して物理Ｉ／Ｏデバイスを制御する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−２０５１２４号公報
【特許文献２】特開２００９−１３４６０１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
従来の完全仮想化と準仮想化によるＩ／Ｏデバイスの仮想化には、仮想化の対象とする物理Ｉ／Ｏデバイスごとに仮想化ソフトウェアの内部構造に即した開発が必要であるという課題がある。【０００７】
従来の完全仮想化においては、物理Ｉ／Ｏデバイスを完全にエミュレートする機能を開発する必要があるが、これは、仮想化ソフトウェアの内部構造や対象の物理Ｉ／Ｏデバイスの詳細を把握した上での開発が必要である。
そのため、仮想化の対象とする物理Ｉ／Ｏデバイスごとに複雑なエミュレート機能を開発する必要があるという課題がある。【０００８】
また、従来の準仮想化においては、仮想化の対象とする物理Ｉ／Ｏデバイスごとに、フロントエンドドライバとバックエンドドライバの組の開発が必要である。
これは、フロントエンドドライバから仮想化ソフトウェアの内部通信機構を介してバックエンドドライバに渡された制御データを、バックエンドドライバが、標準デバイスドライバで利用可能なデータ構造に変換する必要があるためである。
このため、対象のＩ／Ｏデバイスに特化したフロントエンドドライバとバックエンドドライバの組の開発が必要となる。
つまり、完全仮想化と同じく、仮想化ソフトウェアの内部構造の詳細を把握した上でのフロントエンドドライバとバックエンドドライバの開発が、仮想化の対象となる物理Ｉ／Ｏデバイスごとに必要であるという課題がある。【０００９】
この発明は、上記のような課題を解決することを主な目的としており、物理Ｉ／Ｏデバイスごとのバックエンドドライバの開発を不要とし、Ｈ／Ｗ更新時にゲストＯＳ側の環境変更を実施することなくシステムが更新できる構成を実現することを主な目的とする。
【課題を解決するための手段】
【００１０】
本発明に係る仮想計算機システムは、
物理プロセッサと、物理メモリと、複数の物理Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）デバイスとを含むハードウェアと、
前記ハードウェア上で動作するホストＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）及び仮想マシンモニタと、
前記仮想マシンモニタ上で動作するゲストＯＳとを有する仮想計算機システムであって、
前記仮想マシンモニタは、
前記ゲストＯＳと前記ホストＯＳとの間でデータの中継を行い、
前記ゲストＯＳは、
各々が、前記複数の物理Ｉ／Ｏデバイスのうちのいずれかの物理Ｉ／Ｏデバイスに対応し、対応する物理Ｉ／Ｏデバイスの制御のための制御データを入力する複数のフロントエンドドライバと、
各フロントエンドドライバから制御データを入力し、入力した制御データを前記仮想マシンモニタに出力するゲストＯＳ側管理部とを有し、
前記ホストＯＳは、
各々が、前記複数の物理Ｉ／Ｏデバイスのうちのいずれかの物理Ｉ／Ｏデバイスに対応し、対応する物理Ｉ／Ｏデバイスが共通している、対応関係にあるフロントエンドドライバからの制御データを入力し、入力した制御データに基づいて、対応する物理Ｉ／Ｏデバイスを制御する複数のデバイスドライバと、
前記ゲストＯＳ側管理部から出力された制御データを前記仮想マシンモニタから入力し、入力した制御データを、入力した制御データの出力元のフロントエンドドライバと対応関係にあるデバイスドライバに出力するホストＯＳ側管理部とを有することを特徴とする。
【発明の効果】
【００１１】
本発明では、ゲストＯＳ側管理部が、複数のフロントエンドドライバからの制御データを入力し、複数のフロントエンドドライバからの制御データを仮想マシンモニタに出力し、ホストＯＳ側管理部が仮想マシンモニタから複数のフロントエンドドライバからの制御データを入力し、各制御データを対応するデバイスドライバに出力する。
このため、本発明によれば、物理Ｉ／Ｏデバイスごとにバックエンドドライバを開発する必要がなく、また、Ｈ／Ｗ更新時にゲストＯＳ側の環境変更を実施することなくシステムが更新できる。
【図面の簡単な説明】
【００１２】
【図１】実施の形態１に係る仮想計算機システムの構成例を示す図。
【図２】制御データの受け渡し時に生じる問題を説明する図。
【図３】実施の形態１に係る制御データの受け渡し方法を説明する図。
【図４】実施の形態１に係るアプリケーション処理を示すフローチャート図。
【図５】実施の形態１に係るフロントエンドドライバ処理を示すフローチャート図。
【図６】実施の形態１に係る標準ドライバ呼出し機構（１）のマッピング処理（１）を示すフローチャート図。
【図７】実施の形態１に係る標準ドライバ呼出し機構（２）のマッピング処理（２）を示すフローチャート図。
【図８】実施の形態１に係る標準ドライバ呼出し機構（１）の処理を示すフローチャート図。
【図９】実施の形態１に係る標準ドライバ呼出し機構（２）の処理を示すフローチャート図。
【図１０】実施の形態１に係る仮想計算機システムのハードウェア構成例を示す図。
【発明を実施するための形態】
【００１３】
実施の形態１．
本実施の形態では、個々の物理Ｉ／Ｏデバイスごとの仮想化ソフトウェアの内部構造を把握した開発を不要とし、Ｈ／Ｗ更新時にゲストＯＳ側の環境変更を実施することなくシステムが更新できる仮想化のメリットをそのまま享受できる構成を説明する。
【００１４】
図１は、本実施の形態に係る仮想計算機システム１００の構成例を示す。
【００１５】
仮想計算機システム１００は、ハードウェア４０を備え、ホストＯＳ３０および仮想化ソフトウェア２０がハードウェア４０を用いて動作する。
そして、仮想化ソフトウェア２０を用いてゲストＯＳ１０が動作する。
仮想化ソフトウェア２０は、仮想マシンモニタともいう。
仮想化ソフトウェア２０は、ゲストＯＳ１０とホストＯＳ３０の間でデータの中継を行う。
なお、仮想化ソフトウェア２０には、ホストＯＳ３０上で仮想化ソフトウェア２０がアプリケーションプログラムとして動作するホストＯＳ型と仮想化ソフトウェア２０そのものがホストＯＳ３０として動作するハイパーバイザ型がある。
【００１６】
ハードウェア４０には、Ｉ／ＯデバイスＡ４０１、Ｉ／ＯデバイスＢ４０２、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）４０３、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）４０４が含まれる。
Ｉ／ＯデバイスＡ４０１、Ｉ／ＯデバイスＢ４０２は、例えば、磁気ディスク装置等の二次記憶装置、通信ボード等である。
なお、図１では、Ｉ／ＯデバイスＡ４０１、Ｉ／ＯデバイスＢ４０２の２つのみを図示しているが、Ｉ／Ｏデバイスの個数は２つに限らない。
また、仮想計算機システム１００のハードウェア４０には、図１に示す以外のデバイスが含まれていてもよい。
【００１７】
ゲストＯＳ１０には、仮想化ソフトウェア２０専用のデバイスドライバとしてフロントエンドドライバＡ１２１、フロントエンドドライバＢ１２２が含まれる。
フロントエンドドライバＡ１２１はＩ／ＯデバイスＡ４０１に対応し、フロントエンドドライバＢ１２２はＩ／ＯデバイスＢ４０２に対応する。
さらに、ゲストＯＳ１０には、仮想化する対象のＩ／Ｏデバイスで共通となる標準ドライバ呼出し機構（１）１３が含まれる。
標準ドライバ呼出し機構（１）１３は、ゲストＯＳ１０側で仮想化ソフトウェア２０とのインタフェースとなる機構であり、全てのＩ／Ｏデバイスに対する制御データを受け付け、全てのＩ／Ｏデバイスに対する制御データを仮想化ソフトウェア２０に出力する。
標準ドライバ呼出し機構（１）１３は、ゲストＯＳ側管理部の例に相当する。
また、ゲストＯＳ１０には、アプリケーションプログラム１１が含まれる。
アプリケーションプログラム１１は、Ｉ／ＯデバイスＡ４０１又はＩ／ＯデバイスＢ４０２を制御するための制御データを発行する。
【００１８】
ホストＯＳ３０には、Ｉ／ＯデバイスＡ４０１の標準デバイスドライバＡ３２１、Ｉ／ＯデバイスＢ４０２の標準デバイスドライバＢ３２２が含まれる。
また、ホストＯＳ３０には、仮想化する対象のＩ／Ｏデバイスで共通となる標準ドライバ呼出し機構（２）３１が含まれる。
標準ドライバ呼出し機構（２）３１は、ホストＯＳ３０側で仮想化ソフトウェア２０とのインタフェースとなる機構であり、仮想化ソフトウェア２０から全てのＩ／Ｏデバイスに対する制御データを受け付ける。
標準ドライバ呼出し機構（２）３１は、ホストＯＳ側管理部の例に相当する。
【００１９】
ゲストＯＳ１０とホストＯＳ３０間の制御データの受け渡しは標準ドライバ呼出し機構（１）１３と標準ドライバ呼出し機構（２）３１が受け持ち、フロントエンドドライバＡ１２１、フロントエンドドライバＢ１２２と標準デバイスドライバＡ３２１、標準デバイスドライバＢ３２２からは仮想化ソフトウェア２０を隠蔽する。
標準ドライバ呼出し機構（１）１３と標準ドライバ呼出し機構（２）３１の間の制御データの受け渡しは、仮想化ソフトウェア２０の内部通信機構を利用して行われる。
【００２０】
次に動作について説明する。
Ｉ／ＯデバイスＡ４０１は、フロントエンドドライバＡ１２１、標準ドライバ呼出し機構（１）１３、標準ドライバ呼出し機構（２）３１、標準デバイスドライバＡ３２１が協調しながら制御する。
同様に、Ｉ／ＯデバイスＢ４０２は、フロントエンドドライバＢ１２２、標準ドライバ呼出し機構（１）１３、標準ドライバ呼出し機構（２）３１、標準デバイスドライバＢ３２２が協調しながら制御する。
【００２１】
まず、アプリケーションプログラム１１からＩ／ＯデバイスＡ４０１、Ｉ／ＯデバイスＢ４０２を制御するための制御データがフロントエンドドライバＡ１２１、フロントエンドドライバＢ１２２にそれぞれ渡される。
このとき、アプリケーションプログラム１１のＩ／Ｏデバイス制御処理ではアプリケーションプログラム１１に仮想化を意識させないために、アプリケーションプログラム１１からフロントエンドドライバＡ１２１、フロントエンドドライバＢ１２２に渡す制御データは、標準デバイスドライバＡ３２１、標準デバイスドライバＢ３２２のインタフェースと同じものとする。
次に、フロントエンドドライバＡ１２１、フロントエンドドライバＢ１２２から標準ドライバ呼出し機構（１）１３に制御データを渡す。
このとき、フロントエンドドライバＡ１２１、フロントエンドドライバＢ１２２に仮想化ソフトウェア２０の内部構造を意識させないために、フロントエンドドライバＡ１２１、フロントエンドドライバＢ１２２から標準ドライバ呼出し機構（１）１３に渡す制御データは、標準デバイスドライバＡ３２１、標準デバイスドライバＢ３２２のインタフェースと同じものとする。
続いて、標準ドライバ呼出し機構（１）１３は、仮想化ソフトウェア２０に制御データを出力する。
仮想化ソフトウェア２０は、制御データを標準ドライバ呼出し機構（２）３１に出力する。
標準ドライバ呼出し機構（２）３１は、入力した制御データを、対応する標準デバイスドライバＡ３２１、標準デバイスドライバＢ３２２に渡す。
標準デバイスドライバＡ３２１、標準デバイスドライバＢ３２２は受け取った制御データを基にしてＩ／ＯデバイスＡ４０１、Ｉ／ＯデバイスＢ４０２をそれぞれ制御する。
このとき、標準デバイスドライバＡ３２１、標準デバイスドライバＢ３２２が受け取る制御データは仮想化に特化しない通常の制御データであるため、標準デバイスドライバＡ３２１、標準デバイスドライバＢ３２２の仮想化向けの改変は必要としない。
【００２２】
図２にデータの受け渡しの詳細を図示する。
以下では、アプリケーションプログラム１１からＩ／ＯデバイスＡ４０１に対する制御データがフロントエンドドライバＡ１２１に発行された場合を例にして説明を行う。
【００２３】
Ｉ／Ｏデバイスの制御データ５０１には一般的にポインタ５０１３が含まれることがあるが、この場合、次の問題が発生する。
Ｉ／Ｏデバイスの制御データ５０１はゲストＯＳ１０上のデータであるため、ポインタ５０１３はゲストＯＳ１０に割り当てられた論理アドレス（以下、「ゲストＯＳアドレス」という）のデータ５０１４を参照している（６０１）。
制御データ５０１がゲストＯＳ１０上のフロントエンドドライバＡ１２１、標準ドライバ呼出し機構（１）１３に渡されたときは、問題なくデータ５０１４が参照できるが、ホストＯＳ３０上の標準ドライバ呼出し機構（２）３１に渡されたときには、ポインタ５０１３がゲストＯＳアドレスを指し示しているため、正常にデータを参照できない（６０２）。
このまま、標準デバイスドライバＡ３２１に制御データを渡しても、標準デバイスドライバＡ３２１ではＩ／ＯデバイスＡ４０１の制御が正常に行なえない。
【００２４】
本実施の形態では、この問題を解決するため、図３に示す動作を行う。
【００２５】
Ｉ／Ｏデバイスの制御データ５０１にポインタ５０１３が含まれる場合、フロントエンドドライバＡ１２１がポインタ５０１３を標準ドライバ呼出し機構（１）１３のマッピング処理部（１）１３１に渡す。
マッピング処理部（１）１３１は、標準ドライバ呼出し機構（２）３１のマッピング処理部（２）３１１を介して、ホストＯＳ３０に割り当てられたいずれかの論理アドレス（以下、「ホストＯＳアドレス」という）にデータ５０１４をマッピングする（６０３）。
フロントエンドドライバＡ１２１は、マッピング処理部（２）３１１とマッピング処理部（１）１３１を介して、ホストＯＳ３０から参照可能なホストＯＳアドレスを取得する。
そして、フロントエンドドライバＡ１２１は、制御データ５０１のポインタ５０１３を、取得したホストＯＳアドレスを指し示すポインタ５０１５に置き換えて、制御データ５０２を生成する（６０４）。
ポインタ５０１３からポインタ５０１５への置き換えにより、ホストＯＳ３０では、ホストＯＳアドレスにデータ５０１６が格納されていると認識することができる（６０５）。
なお、データ５０１４とデータ５０１６は同一の物理アドレス（ＲＡＭ４０４のアドレス）上に保持されているため同一のものである。
フロントエンドドライバＡ１２１は制御データ５０２を標準ドライバ呼出し機構（１）１３と仮想化ソフトウェア２０と標準ドライバ呼出し機構（２）３１を介して、標準デバイスドライバＡ３２１に渡す。
標準デバイスドライバＡ３２１は、渡された制御データ５０２を基にして、Ｉ／ＯデバイスＡ４０１を制御する。
このとき、制御データ５０２のポインタ５０１５はホストＯＳ３０から参照可能なホストＯＳアドレスを参照しているため、正常にＩ／ＯデバイスＡ４０１の制御が可能となる。
つまり、標準デバイスドライバＡ３２１は、ホストＯＳアドレスからデータ５０１６を読み出し、読み出したデータ５０１６を用いてＩ／ＯデバイスＡ４０１を制御することができる。
【００２６】
次に、本実施の形態に係る仮想計算機システム１００の動作を、図４〜９のフローチャートを用いて説明する。
【００２７】
アプリケーションプログラム１１は、図４に示すように、制御の対象とするＩ／Ｏデバイスに対応するフロントエンドドライバに制御データを渡す（Ｓ１０）。
なお、以下では、アプリケーションプログラム１１がＩ／ＯデバイスＡ４０１に対する制御データをフロントエンドドライバＡ１２１に発行した場合を例にして説明を行う。
【００２８】
フロントエンドドライバＡ１２１は、図５に示すように、アプリケーションプログラム１１からの制御データを入力した場合に、制御データにポインタが含まれるか否かを判断する（Ｓ２０）。
ポインタには、前述したように、ゲストＯＳアドレスが記述されている。
入力した制御データにポインタが含まれる場合（Ｓ２０でＹＥＳ）は、フロントエンドドライバＡ１２１は、標準ドライバ呼出し機構（１）１３のマッピング処理部（１）１３１に、ポインタを渡す（Ｓ２１）。
そして、フロントエンドドライバＡ１２１は、標準ドライバ呼出し機構（１）１３のマッピング処理部（１）１３１からホストＯＳアドレスを取得する（Ｓ２２）。
更に、フロントエンドドライバＡ１２１は、取得したホストＯＳアドレスを指し示すポインタで、制御データ内の元のポインタを書き換えて、新たな制御データを生成する（Ｓ２３）。
更に、フロントエンドドライバＡ１２１は、新たな制御データを標準ドライバ呼出し機構（１）１３に出力する（Ｓ２４）。
一方、入力した制御データにポインタが含まれない場合（Ｓ２０でＮＯ）は、フロントエンドドライバＡ１２１は、入力した制御データをそのまま標準ドライバ呼出し機構（１）１３に出力する（Ｓ２４）。
【００２９】
標準ドライバ呼出し機構（１）１３のマッピング処理部（１）１３１が、図５のＳ２１においてフロントエンドドライバＡ１２１から出力されたポインタを入力した場合は、図６に示すように、仮想化ソフトウェア２０を介して標準ドライバ呼出し機構（２）３１のマッピング処理部（２）３１１にポインタを出力する（Ｓ３０）。
次に、マッピング処理部（１）１３１は、標準ドライバ呼出し機構（２）３１のマッピング処理部（２）３１１からホストＯＳアドレスを取得し（Ｓ３１）、取得したホストＯＳアドレスをフロントエンドドライバＡ１２１に返す（Ｓ３２）。
フロントエンドドライバＡ１２１では、前述のＳ２２（図５）に示すとおり、マッピング処理部（１）１３１から出力されたホストＯＳアドレスを取得する。
【００３０】
標準ドライバ呼出し機構（２）３１のマッピング処理部（２）３１１が、図６のＳ３０においてマッピング処理部（１）１３１から出力されたポインタを入力した場合は、図７に示すように、ポインタの参照先のデータをホストＯＳ３０から参照可能ないずれかの論理アドレスにマッピングする（Ｓ４０）。
つまり、マッピング処理部（２）３１１は、ポインタに記述のゲストＯＳアドレスの物理アドレスに対応する、ホストＯＳ３０に割り当てられている論理アドレスをホストＯＳアドレスとして指定する。
次に、マッピング処理部（２）３１１は、指定したホストＯＳアドレスを仮想化ソフトウェア２０を介して標準ドライバ呼出し機構（１）１３のマッピング処理部（１）１３１に返す（Ｓ４１）。
マッピング処理部（１）１３１では、前述のＳ３１（図６）に示すとおり、マッピング処理部（２）３１１から出力されたホストＯＳアドレスを取得する。
【００３１】
標準ドライバ呼出し機構（１）１３が、図５のＳ２４においてフロントエンドドライバＡ１２１から出力された制御データを入力した場合は、図８に示すように、仮想化ソフトウェア２０を介して標準ドライバ呼出し機構（２）３１に制御データを出力する（Ｓ５０）。
【００３２】
標準ドライバ呼出し機構（２）３１が、図８のＳ５０において標準ドライバ呼出し機構（１）１３から出力された制御データを入力した場合は、図９に示すように、フロントエンドドライバＡ１２１に対応する標準デバイスドライバＡ３２１に制御データを出力する（Ｓ６０）。
その後、標準デバイスドライバＡ３２１では、制御データを用いてＩ／ＯデバイスＡ４０１を制御する。
【００３３】
以上のように、本実施の形態では、複数のＩ／Ｏデバイスに対する制御データの受け渡しを、フロントエンドドライバとバックエンドドライバの組の単位ではなく、標準ドライバ呼出し機構（１）１３と標準ドライバ呼出し機構（２）３１で行っている。
このため、仮想化する対象のＩ／ＯデバイスＡ４０１、Ｉ／ＯデバイスＢ４０２ごとに仮想化ソフトウェアの内部構造を意識した複雑な開発が不要となり、標準デバイスドライバＡ３２１、標準デバイスドライバＢ３２２のインタフェースを意識したフロントエンドドライバＡ１２１、フロントエンドドライバＢ１２２の開発のみでＩ／ＯデバイスＡ４０１、Ｉ／ＯデバイスＢ４０２を仮想化することができる。
つまり、バックエンドドライバを開発する必要がない。
また、Ｈ／Ｗ更新時にも標準デバイスドライバＡ３２１、標準デバイスドライバＢ３２２のインタフェースは変わらないため、ゲストＯＳ１０側のフロントエンドドライバＡ１２１、フロントエンドドライバＢ１２２と標準ドライバ呼出し機構（１）１３の再開発は不要である。
このため、Ｈ／Ｗ更新時のゲストＯＳ側の環境変更は不要である。
また、標準ドライバ呼出し機構（２）３１についてもホストＯＳ３０の仕様変更がない限り、再開発は不要である。
【００３４】
なお、以上では、ポインタの論理アドレスを置き換える例、すなわち、ゲストＯＳに割り当てられている論理アドレス（ゲストＯＳアドレス）をホストＯＳに割り当てられている論理アドレス（ホストＯＳアドレス）に置き換える例を説明した。
論理アドレス以外にも、制御データにゲストＯＳに割り当てられているパラメータ値（ゲストＯＳパラメータ値）が記述されており、ホストＯＳではゲストＯＳパラメータ値を参照できない場合には、本実施の形態で説明した手法により、制御データ内のゲストＯＳパラメータ値をホストＯＳに割り当てられているパラメータ値（ホストＯＳパラメータ値）に置き換えるようにしてもよい。
【００３５】
最後に、本実施の形態に示した仮想計算機システム１００のハードウェア構成例について説明する。
図１０は、本実施の形態に示す仮想計算機システム１００のハードウェア資源の一例を示す図である。
なお、図１０の構成は、あくまでも仮想計算機システム１００のハードウェア構成の一例を示すものであり、仮想計算機システム１００のハードウェア構成は図１０に記載の構成に限らず、他の構成であってもよい。
【００３６】
図１０において、仮想計算機システム１００は、プログラムを実行するＣＰＵ９１１（プロセッサ、中央処理装置、処理装置、演算装置、マイクロプロセッサ、マイクロコンピュータともいう）を備えている。
ＣＰＵ９１１は図１のＣＰＵ４０３に対応する。
ＣＰＵ９１１は、バス９１２を介して、例えば、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９１３、ＲＡＭ９１４、通信ボード９１５、表示装置９０１、キーボード９０２、マウス９０３、磁気ディスク装置９２０、スキャナ装置９０７と接続され、これらのハードウェアデバイスを制御する。
ＲＡＭ９１４は図１のＲＡＭ４０４に対応する。
また、通信ボード９１５及び磁気ディスク装置９２０は、図１のＩ／ＯデバイスＡ４０１及びＩ／ＯデバイスＢ４０２に対応する。
【００３７】
更に、ＣＰＵ９１１は、ＦＤＤ９０４（Ｆｌｅｘｉｂｌｅ  Ｄｉｓｋ  Ｄｒｉｖｅ）、コンパクトディスク装置９０５（ＣＤＤ）、プリンタ装置９０６と接続していてもよい。
また、磁気ディスク装置９２０の代わりに、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）を用いてもよい。
ＲＡＭ９１４は、揮発性メモリの一例である。
ＲＯＭ９１３、ＦＤＤ９０４、ＣＤＤ９０５、磁気ディスク装置９２０の記憶媒体は、不揮発性メモリの一例である。
これらは、記憶装置の一例である。
通信ボード９１５、キーボード９０２、マウス９０３、ＦＤＤ９０４、スキャナ装置９０７などは、入力装置の一例である。
また、通信ボード９１５、表示装置９０１、プリンタ装置９０６などは、出力装置の一例である。
【００３８】
通信ボード９１５は、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）に接続される。
通信ボード９１５は、ＬＡＮを介して、例えば、インターネット、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）などに接続することが可能である。
【００３９】
磁気ディスク装置９２０には、仮想化ソフトウェア９２１、ホストＯＳ９２２、ゲストＯＳ９２３、プログラム群９２４、ファイル群９２５が記憶されている。
仮想化ソフトウェア９２１は図１の仮想化ソフトウェア２０に対応し、ホストＯＳ９２２は図１のホストＯＳ３０に対応し、ゲストＯＳ９２３は図１のゲストＯＳ１０に対応する。
また、図１のアプリケーションプログラム１１は、プログラム群９２４に含まれる。
仮想化ソフトウェア９２１、ホストＯＳ９２２、ゲストＯＳ９２３、プログラム群９２４は、ＣＰＵ９１１により実行される。
この意味で、ＣＰＵ９１１（図１のＣＰＵ４０３）は、フロントエンドドライバＡ１２１、フロントエンドドライバＢ１２２の処理を行うフロントエンドドライバ処理部と、ゲストＯＳ側管理部（標準ドライバ呼出し機構（１）１３）の処理を行うゲストＯＳ側管理処理部と、ホストＯＳ側管理部（標準ドライバ呼出し機構（２）３１）の処理を行うホストＯＳ側管理処理部と、標準デバイスドライバＡ３２１、標準デバイスドライバＢ３２２の処理を行う標準デバイスドライバ処理部に相当する。
【００４０】
更に、ファイル群９２５には、本実施の形態の説明において、「〜の判断」、「〜の取得」、「〜の変更」、「〜の置き換え」、「〜の通知」、「〜の制御」、「〜の指定」、「〜の入力」、「〜の出力」等として説明している処理の結果を示す情報やデータや信号値や変数値やパラメータが、「〜ファイル」や「〜データベース」の各項目として記憶されている。
「〜ファイル」や「〜データベース」は、ディスクやメモリなどの記録媒体に記憶される。
ディスクやメモリなどの記憶媒体に記憶された情報やデータや信号値や変数値やパラメータは、読み書き回路を介してＣＰＵ９１１によりメインメモリやキャッシュメモリに読み出され、抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示などのＣＰＵの動作に用いられる。
抽出・検索・参照・比較・演算・計算・処理・編集・出力・印刷・表示のＣＰＵの動作の間、情報やデータや信号値や変数値やパラメータは、メインメモリ、レジスタ、キャッシュメモリ、バッファメモリ等に一時的に記憶される。
また、本実施の形態で説明しているフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ９１４のメモリ、ＦＤＤ９０４のフレキシブルディスク、ＣＤＤ９０５のコンパクトディスク、磁気ディスク装置９２０の磁気ディスク、その他光ディスク、ブルーレイ（登録商標）ディスク、ＤＶＤ等の記録媒体に記録される。また、データや信号は、バス９１２や信号線やケーブルその他の伝送媒体によりオンライン伝送される。
【００４１】
また、本実施の形態で説明した仮想計算機システム１００の動作を例えばデータ処理方法として把握することも可能である。
【００４２】
このように、本実施の形態に示す仮想計算機システム１００は、処理装置たるＣＰＵ、記憶装置たるメモリ、磁気ディスク等、入力装置たるキーボード、マウス、通信ボード等、出力装置たる表示装置、通信ボード等を備えるコンピュータであり、ゲストＯＳ１０、仮想化ソフトウェア２０、ホストＯＳ３０として示された機能をこれら処理装置、記憶装置、入力装置、出力装置を用いて実現するものである。
【符号の説明】
【００４３】
１０  ゲストＯＳ、１１  アプリケーションプログラム、１３  標準ドライバ呼出し機構（１）、２０  仮想化ソフトウェア、３０  ホストＯＳ、３１  標準ドライバ呼出し機構（２）、４０  ハードウェア、１００  仮想計算機システム、１２１  フロントエンドドライバＡ、１２２  フロントエンドドライバＢ、１３１  マッピング処理部（１）、３１１  マッピング処理部（２）、３２１  標準デバイスドライバＡ、３２２  標準デバイスドライバＢ、４０１  Ｉ／ＯデバイスＡ、４０２  Ｉ／ＯデバイスＢ、４０３  ＣＰＵ、４０４  ＲＡＭ。
【図１】
2014076799.tif 000003
【図２】
2014076799.tif 000004
【図３】
2014076799.tif 000005
【図４】
2014076799.tif 000006
【図５】
2014076799.tif 000007
【図６】
2014076799.tif 000008
【図７】
2014076799.tif 000009
【図８】
2014076799.tif 000010
【図９】
2014076799.tif 000011
【図１０】
2014076799.tif 000012
【手続補正書】
【提出日】平成26年9月25日(2014.9.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の物理Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）デバイスを含むハードウェアと、
前記ハードウェア上で動作するホストＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）及び仮想マシンモニタと、
前記仮想マシンモニタ上で動作するゲストＯＳとを有する仮想計算機システムであって、
前記仮想マシンモニタは、
前記ゲストＯＳと前記ホストＯＳとの間でデータの中継を行い、
前記ゲストＯＳは、
各々が、前記複数の物理Ｉ／Ｏデバイスのうちのいずれかの物理Ｉ／Ｏデバイスに対応し、対応する物理Ｉ／Ｏデバイスの制御のための制御データを入力する複数のフロントエンドドライバを有し、
前記ホストＯＳは、
各々が、前記複数の物理Ｉ／Ｏデバイスのうちのいずれかの物理Ｉ／Ｏデバイスに対応し、対応する物理Ｉ／Ｏデバイスを制御する複数の標準デバイスドライバを有し、
各フロントエンドドライバは、
入力した制御データに前記ゲストＯＳに割り当てられているパラメータ値であるゲストＯＳパラメータ値が記述されているか否かを判断し、
前記制御データに前記ゲストＯＳパラメータ値が記述されている場合に、前記仮想マシンモニタを介して前記ホストＯＳから、前記ゲストＯＳパラメータ値に対応する、前記ホストＯＳに割当てられているパラメータ値をホストＯＳパラメータ値として取得し、
前記制御データの前記ゲストＯＳパラメータ値の記述を前記ホストＯＳパラメータ値の記述に変更し、前記ホストＯＳパラメータ値が記述される制御データを前記仮想マシンモニタを介して、対応する物理Ｉ／Ｏデバイスが共通する標準デバイスドライバに出力し、
各標準デバイスドライバは、
前記ゲストＯＳパラメータ値に代えて前記ホストＯＳパラメータ値が記述される制御データを入力し、入力した制御データに基づいて、対応する物理Ｉ／Ｏデバイスを制御することを特徴とする仮想計算機システム。
【請求項２】
前記ゲストＯＳは、更に、
各フロントエンドドライバから制御データを入力し、入力した制御データを前記仮想マシンモニタに出力するゲストＯＳ側管理部とを有し、
前記ホストＯＳは、更に、
前記ゲストＯＳ側管理部から出力された制御データを前記仮想マシンモニタから入力し、入力した制御データを、入力した制御データの出力元のフロントエンドドライバと対応関係にある標準デバイスドライバに出力するホストＯＳ側管理部とを有し、
各フロントエンドドライバは、
前記制御データに前記ゲストＯＳパラメータ値が記述されている場合に、前記仮想マシンモニタ及び前記ゲストＯＳ側管理部を介して前記ホストＯＳ側管理部から、前記ホストＯＳパラメータ値を取得し、
前記制御データの前記ゲストＯＳパラメータ値の記述を前記ホストＯＳパラメータ値の記述に変更し、前記ホストＯＳパラメータ値が記述される制御データを前記ゲストＯＳ側管理部及び前記仮想マシンモニタ及び前記ホストＯＳ側管理部を介して、対応する物理Ｉ／Ｏデバイスが共通する標準デバイスドライバに出力し、
各標準デバイスドライバは、
前記ゲストＯＳパラメータ値に代えて前記ホストＯＳパラメータ値が記述される制御データを前記ホストＯＳ側管理部から入力し、入力した制御データに基づいて、対応する物理Ｉ／Ｏデバイスを制御することを特徴とする請求項１に記載の仮想計算機システム。
【請求項３】
各フロントエンドドライバは、
前記制御データに前記ゲストＯＳパラメータ値が記述されている場合に、前記ゲストＯＳ側管理部及び前記仮想マシンモニタを介して前記ホストＯＳ側管理部に、前記ゲストＯＳパラメータ値を通知し、
前記ホストＯＳ側管理部は、
前記ゲストＯＳ側管理部及び前記仮想マシンモニタを介して、いずれかのフロントエンドドライバから前記ゲストＯＳパラメータ値が通知された場合に、
通知された前記ゲストＯＳパラメータ値に対応する、前記ホストＯＳに割当てられているパラメータ値をホストＯＳパラメータ値として前記仮想マシンモニタ及び前記ゲストＯＳ側管理部を介して、前記ゲストＯＳパラメータ値の通知元のフロントエンドドライバに通知し、
各フロントエンドドライバは、
前記仮想マシンモニタ及び前記ゲストＯＳ側管理部を介して、前記ホストＯＳ側管理部から前記ホストＯＳパラメータ値が通知された場合に、
前記制御データの前記ゲストＯＳパラメータ値の記述を前記ホストＯＳパラメータ値の記述に変更し、前記ホストＯＳパラメータ値が記述される制御データを前記ゲストＯＳ側管理部及び前記仮想マシンモニタ及び前記ホストＯＳ側管理部を介して、対応する物理Ｉ／Ｏデバイスが共通する標準デバイスドライバに出力することを特徴とする請求項２に記載の仮想計算機システム。
【請求項４】
各フロントエンドドライバは、
前記ゲストＯＳパラメータ値として、入力した制御データに前記ゲストＯＳに割り当てられている論理アドレスであるゲストＯＳアドレスが記述されているか否かを判断し、
前記制御データに前記ゲストＯＳアドレスが記述されている場合に、前記ゲストＯＳアドレスの物理アドレスに対応する、前記ホストＯＳに割り当てられている論理アドレスをホストＯＳアドレスとして、前記仮想マシンモニタ及び前記ゲストＯＳ側管理部を介して前記ホストＯＳ側管理部から取得し、
前記制御データの前記ゲストＯＳアドレスの記述を前記ホストＯＳアドレスの記述に変更し、前記ホストＯＳアドレスが記述される制御データを前記ゲストＯＳ側管理部及び前記仮想マシンモニタ及び前記ホストＯＳ側管理部を介して、対応する物理Ｉ／Ｏデバイスが共通する標準デバイスドライバに出力し、
各標準デバイスドライバは、
前記ゲストＯＳアドレスに代えて前記ホストＯＳアドレスが記述される制御データを前記ホストＯＳ側管理部から入力し、入力した制御データに基づいて、対応する物理Ｉ／Ｏデバイスを制御することを特徴とする請求項２又は３に記載の仮想計算機システム。
【請求項５】
各フロントエンドドライバは、
前記制御データに前記ゲストＯＳアドレスが記述されている場合に、前記ゲストＯＳ側管理部及び前記仮想マシンモニタを介して前記ホストＯＳ側管理部に、前記ゲストＯＳアドレスを通知し、
前記ホストＯＳ側管理部は、
前記ゲストＯＳ側管理部及び前記仮想マシンモニタを介して、いずれかのフロントエンドドライバから前記ゲストＯＳアドレスが通知された場合に、
前記ゲストＯＳアドレスの物理アドレスに対応する、前記ホストＯＳに割り当てられている論理アドレスをホストＯＳアドレスとして、前記仮想マシンモニタ及び前記ゲストＯＳ側管理部を介して、前記ゲストＯＳアドレスの通知元のフロントエンドドライバに通知し、
各フロントエンドドライバは、
前記仮想マシンモニタ及び前記ゲストＯＳ側管理部を介して、前記ホストＯＳ側管理部から前記ホストＯＳアドレスが通知された場合に、
前記制御データの前記ゲストＯＳアドレスの記述を前記ホストＯＳアドレスの記述に変更し、前記ホストＯＳアドレスが記述される制御データを前記ゲストＯＳ側管理部及び前記仮想マシンモニタ及び前記ホストＯＳ側管理部を介して、対応する物理Ｉ／Ｏデバイスが共通する標準デバイスドライバに出力することを特徴とする請求項４に記載の仮想計算機システム。
【請求項６】
前記ハードウェアには、
物理プロセッサが含まれ、
前記物理プロセッサは、
各フロントエンドドライバの処理を行うフロントエンドドライバ処理部と、
前記ゲストＯＳ側管理部の処理を行うゲストＯＳ側管理処理部と、
前記ホストＯＳ側管理部の処理を行うホストＯＳ側管理処理部と、
各標準デバイスドライバの処理を行う標準デバイスドライバ処理部とを有することを特徴とする請求項２に記載の仮想計算機システム。
【国際調査報告】
2014076799.tif 000013
2014076799.tif 000014
2014076799.tif 000015