(57)【特許請求の範囲】
【請求項１】
ディスク・ドライブを搭載し、仮想化プログラムと仮想マシンで仮想化環境が形成されているコンピュータに、
前記仮想マシンがアクセスすることができる特定領域と前記仮想マシンがアクセスすることができない仮想化領域を前記ディスク・ドライブに、前記コンピュータの動作が前記仮想マシンと前記仮想化プログラムの間で遷移する際に、前記仮想マシンが動作している間は前記仮想マシンが前記特定領域だけにアクセス可能になるように設定し、前記仮想化プログラムが動作している間は前記特定領域と前記仮想化領域にアクセスが可能になるように設定するステップ、
前記仮想化領域に対するＩ／Ｏリクエストを開始するステップと、
前記Ｉ／Ｏリクエストが前記仮想化領域にデータを書き込むライト・アクセスか前記仮想化領域からデータを読み取るリード・アクセスかを判断するステップと、
前記ライト・アクセスであると判断したときに書き込みデータを前記特定領域に書き込むステップと
を有する処理を実行させるコンピュータ・プログラム。
【請求項２】
前記設定するステップが、前記仮想化プログラムがＡＴＡのSet max addressコマンドを実行するステップを含む請求項１に記載のコンピュータ・プログラム。
【請求項３】
ディスク・ドライブを搭載し、仮想化プログラムと仮想マシンで仮想化環境が形成されているコンピュータに、
複数の前記仮想マシンにそれぞれ専用に割り当てた複数の論理ブロックを含み前記仮想マシンがアクセスすることができる特定領域と、前記仮想マシンがアクセスすることができない仮想化領域を前記ディスク・ドライブに設定するステップと、
前記仮想化領域に対するＩ／Ｏリクエストを開始するステップと、
前記Ｉ／Ｏリクエストが前記仮想化領域にデータを書き込むライト・アクセスか前記仮想化領域からデータを読み取るリード・アクセスかを判断するステップと、
前記ライト・アクセスであると判断したときに書き込みデータを前記特定領域に書き込むステップと
を有する処理を実行させるコンピュータ・プログラム。
【請求項４】
ディスク・ドライブを搭載し、仮想化プログラムと仮想マシンで仮想化環境が形成されているコンピュータに、
前記仮想マシンがアクセスすることができる特定領域と前記仮想マシンがアクセスすることができない仮想化領域を前記ディスク・ドライブに設定するステップと、
前記仮想化領域に対するＩ／Ｏリクエストを開始するステップと、
前記Ｉ／Ｏリクエストが前記仮想化領域にデータを書き込むライト・アクセスか前記仮想化領域からデータを読み取るリード・アクセスかを判断するステップと、
前記ライト・アクセスであると判断したときに書き込みデータを前記特定領域に書き込むステップと、
前記ライト・アクセスと非同期で前記仮想化領域を前記特定領域に記録されたデータで更新するステップと
を有する処理を実行させるコンピュータ・プログラム。
【請求項５】
前記更新するステップを前記仮想化プログラムが実行する請求項４に記載のコンピュータ・プログラム。
【請求項６】
ディスク・ドライブを搭載し、仮想化プログラムと仮想マシンで仮想化環境が形成されているコンピュータに、
前記仮想マシンがアクセスすることができる特定領域と前記仮想マシンがアクセスすることができない仮想化領域を前記ディスク・ドライブに設定するステップと、
前記仮想化領域に対するＩ／Ｏリクエストを開始するステップと、
前記Ｉ／Ｏリクエストが前記仮想化領域にデータを書き込むライト・アクセスか前記仮想化領域からデータを読み取るリード・アクセスかを判断するステップと、
前記ライト・アクセスであると判断したときに書き込みデータを前記特定領域に書き込むステップと、
前記リード・アクセスであると判断したときに読み取りデータが前記特定領域に記録されているか否かを判断するステップと、
前記特定領域に記録されていると判断したときに、前記仮想マシンが前記特定領域からデータを読み取るステップと
を有する処理を実行させるコンピュータ・プログラム。
【請求項７】
特定領域に記録されていないと判断したときに、前記仮想マシンが前記仮想化領域からデータを読み取るステップを有する請求項６に記載のコンピュータ・プログラム。
【請求項８】
前記仮想化領域から読み取ったデータを前記リード・アクセスと非同期で前記特定領域に記録するステップを有する請求項６または請求項７に記載のコンピュータ・プログラム。
【請求項９】
仮想化レイヤの上で仮想マシンが動作する仮想化環境の実現が可能なコンピュータであって、
前記仮想マシンがアクセスすることができる特定領域と前記仮想マシンがアクセスすることができない仮想化領域が設定されたディスク・ドライブと、
前記ディスク・ドライブに対するインターフェースを構成するディスク・コントローラと、
前記ディスク・コントローラに対するＩ／Ｏリクエストを発行するリクエスト部と、
前記Ｉ／Ｏリクエストがライト・アクセスかリード・アクセスかを判断し、前記ライト・アクセスであると判断したときに、書き込みデータを前記特定領域に書き込むアクセス制御部と、
前記仮想マシンが動作している間は前記特定領域だけがアクセス可能になるように前記ディスク・コントローラを制御し、前記仮想化プログラムが動作している間は前記ディスク・コントローラに対するアクセス制限を解除するように制御する記憶領域制御部と
を有するコンピュータ。
【請求項１０】
仮想化レイヤの上で仮想マシンが動作する仮想化環境の実現が可能なコンピュータであって、
前記仮想マシンがアクセスすることができる特定領域と前記仮想マシンがアクセスすることができない仮想化領域が設定されたディスク・ドライブと、
前記ディスク・ドライブに対するインターフェースを構成するディスク・コントローラと、
前記ディスク・コントローラに対するＩ／Ｏリクエストを発行するリクエスト部と、
前記Ｉ／Ｏリクエストがライト・アクセスかリード・アクセスかを判断し、前記ライト・アクセスであると判断したときに、書き込みデータを前記特定領域に書き込むアクセス制御部と、
前記ライト・アクセスのタイミングとは異なるタイミングで前記仮想化領域を前記特定領域に書き込まれたデータで更新する更新処理部と
を有するコンピュータ。
【請求項１１】
仮想化レイヤの上で仮想マシンが動作する仮想化環境の実現が可能なコンピュータであって、
前記仮想マシンがアクセスすることができる特定領域と前記仮想マシンがアクセスすることができない仮想化領域が設定されたディスク・ドライブと、
前記ディスク・ドライブに対するインターフェースを構成するディスク・コントローラと、
前記ディスク・コントローラに対するＩ／Ｏリクエストを発行するリクエスト部と、
前記Ｉ／Ｏリクエストがライト・アクセスかリード・アクセスかを判断し、前記ライト・アクセスであると判断したときに書き込みデータを前記特定領域に書き込み、前記リード・アクセスであると判断したときに前記特定領域に読み取りにかかるデータが存在するか否かを判断しデータが存在すると判断した場合は前記特定領域から読み取るアクセス制御部と
を有するコンピュータ。
【請求項１２】
前記アクセス制御部は、前記特定領域にデータが存在しないと判断した場合は前記仮想化領域からデータを読み取る請求項１１に記載のコンピュータ。
【請求項１３】
前記アクセス制御部は、前記リード・アクセスのタイミングとは異なるタイミングで前記仮想化領域から読み取られたデータを前記特定領域に書き込む請求項１１または請求項１２に記載のコンピュータ。
【請求項１４】
仮想化レイヤの上で仮想マシンが動作する仮想化環境の実現が可能なコンピュータであって、
複数の前記仮想マシンにそれぞれ専用に割り当てた複数の論理ブロックを含み前記仮想マシンがアクセスすることができる特定領域と、前記仮想マシンがアクセスすることができない仮想化領域が設定されたディスク・ドライブと、
前記ディスク・ドライブに対するインターフェースを構成するディスク・コントローラと、
前記ディスク・コントローラに対するＩ／Ｏリクエストを発行するリクエスト部と、
前記Ｉ／Ｏリクエストがライト・アクセスかリード・アクセスかを判断し、前記ライト・アクセスであると判断したときに、書き込みデータを前記特定領域に書き込むアクセス制御部と
を有するコンピュータ。
【請求項１５】
仮想化環境が実現されているコンピュータにおいてディスク・ドライブにアクセスする方法であって、
仮想化プログラムが前記コンピュータに、ゲストＯＳが前記ディスク・ドライブにアクセスすることができる特定領域と前記ゲストＯＳが前記ディスク・ドライブにアクセスすることができない仮想化領域を、前記ゲストＯＳが動作する間は前記ディスク・ドライブの一部の記憶領域へのアクセスを制限し前記仮想化プログラムが動作する間は前記アクセス制限を解除するように設定する機能を実現させるステップと、
アプリケーション・プログラムが前記コンピュータに前記仮想化領域に対するアクセスを開始する機能を実現させるステップと、
前記ゲストＯＳが前記コンピュータに前記アクセスが前記仮想化領域にデータを書き込むライト・アクセスか前記仮想化領域からデータを読み取るリード・アクセスかを判断する機能を実現させるステップと、
前記ライト・アクセスであると判断したときに仮想化プログラムが前記コンピュータに書き込みデータを前記特定領域に書き込む機能を実現させるステップと
を有する方法。
【請求項１６】
前記書き込む機能を実現させるステップが、ゲストＯＳが決定した仮想ディスク・ドライブのアドレスと同じアドレスの前記特定領域に書き込ませる請求項１５に記載の方法。
【請求項１７】
仮想化環境が実現されているコンピュータにおいてディスク・ドライブにアクセスする方法であって、
仮想化プログラムが前記コンピュータにゲストＯＳが前記ディスク・ドライブにアクセスすることができる特定領域と前記ゲストＯＳが前記ディスク・ドライブにアクセスすることができない仮想化領域を設定する機能を実現させるステップと、
アプリケーション・プログラムが前記コンピュータに前記仮想化領域に対するアクセスを開始する機能を実現させるステップと、
前記ゲストＯＳが前記コンピュータに前記アクセスが前記仮想化領域にデータを書き込むライト・アクセスか前記仮想化領域からデータを読み取るリード・アクセスかを判断する機能を実現させるステップと、
前記ライト・アクセスであると判断したときに仮想化プログラムが前記コンピュータに書き込みデータを前記特定領域に書き込む機能を実現させるステップと、
前記ゲストＯＳが前記コンピュータに前記ライト・アクセスのタイミングとは異なるタイミングで前記特定領域に書き込まれたデータを前記仮想化領域に書き込む機能を実現させるステップと
を有する方法。
【請求項１８】
仮想化環境が実現されているコンピュータにおいてディスク・ドライブにアクセスする方法であって、
仮想化プログラムが前記コンピュータに、複数の前記仮想マシンにそれぞれ専用に割り当てた複数の論理ブロックを含みゲストＯＳが前記ディスク・ドライブにアクセスすることができる特定領域と前記ゲストＯＳが前記ディスク・ドライブにアクセスすることができない仮想化領域を設定する機能を実現させるステップと、
アプリケーション・プログラムが前記コンピュータに前記仮想化領域に対するアクセスを開始する機能を実現させるステップと、
前記ゲストＯＳが前記コンピュータに前記アクセスが前記仮想化領域にデータを書き込むライト・アクセスか前記仮想化領域からデータを読み取るリード・アクセスかを判断する機能を実現させるステップと、
前記ライト・アクセスであると判断したときに仮想化プログラムが前記コンピュータに書き込みデータを前記特定領域に書き込む機能を実現させるステップと
を有する方法。
【請求項１９】
仮想化環境が実現されているコンピュータにおいてディスク・ドライブにアクセスする方法であって、
仮想化プログラムが前記コンピュータにゲストＯＳが前記ディスク・ドライブにアクセスすることができる特定領域と前記ゲストＯＳが前記ディスク・ドライブにアクセスすることができない仮想化領域を設定する機能を実現させるステップと、
アプリケーション・プログラムが前記コンピュータに前記仮想化領域に対するアクセスを開始する機能を実現させるステップと、
前記ゲストＯＳが前記コンピュータに前記アクセスが前記仮想化領域にデータを書き込むライト・アクセスか前記仮想化領域からデータを読み取るリード・アクセスかを判断する機能を実現させるステップと、
前記ライト・アクセスであると判断したときに仮想化プログラムが前記コンピュータに書き込みデータを前記特定領域に書き込む機能を実現させるステップと、
前記リード・アクセスであると判断したときに前記仮想化プログラムが前記コンピュータに読み取りデータが前記特定領域に記録されているか否かを判断する機能を実現させるステップと、
前記特定領域に記録されていると判断したときに、前記仮想化プログラムが前記コンピュータに前記仮想マシンが前記特定領域からデータを読み取る機能を実現させるステップと
を有する方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マシンからディスク・ドライブにアクセスする際のオーバーヘッドを低減する技術に関し、さらに詳細にはディスク・ドライブに記録されたデータの安全性を確保しながらオーバーヘッドを低減する技術に関する。
【背景技術】
【０００２】
クライアントやサーバなどのコンピュータには、過去のオペレーティング・システム（ＯＳ）やアプリケーション・プログラム（アプリケーション）を、互換性のない新しいハードウエアの上で動作させたり、ハードウエア・リソースを有効に活用したり、あるいは複数のＯＳを同時に動作させたりすることを目的として仮想化技術を導入する場合がある。仮想化技術には、ＯＳの上で仮想化プログラムが動作するホストＯＳ型、あるいは仮想化プログラムがハードウエアの上で直接動作するハイパーバイザ型といわれるものがある。
【０００３】
いずれの場合も、仮想化プログラムの上では複数の仮想マシンが動作することができる。アプリケーション、ゲストＯＳ、デバイス・ドライバといったソフトウエアで構成された仮想マシンは、仮想化プログラムが提供する仮想ハードウエアに対してアクセスすることで実際のハードウエアから分離された状態で動作する。仮想マシンを構成するＯＳをゲストＯＳという。また、ハイパーバイザ型の中には、ゲストＯＳに対して完全なハードウエア仮想化環境を提供する完全仮想化と、ゲストＯＳに修正を加えて仮想化環境に適応させる準仮想化といった方法がある。
【０００４】
このように仮想化環境の実現モデルにはさまざまあるが、いずれの場合でも、ゲストＯＳがハードウエアにアクセスする際には、仮想化プログラムが介在する分だけ余分なオーバーヘッドが生ずる。オーバーヘッドの原因としては、中央演算装置（ＣＰＵ）、メイン・メモリ、ディスク・ドライブ、またはネットワーク・カードなどのハードウエアをソフトウエアでエミュレーションする処理や、ゲストＯＳと仮想化プログラムの間で動作を切り換える際に発生するコンテキスト・スイッチングなどを挙げることができる。ハードディスク・ディスク・ドライブ（ＨＤＤ）に対するＩ／Ｏリクエストの際には、仮想ドライブと実際のドライブのアドレスをマッピングするためにオーバーヘッドが発生する。
【０００５】
特許文献１は、ＶＭＭ（Virtual Machine Monitor）によりＩ／Ｏデバイスの動作をエミュレーションにより実現するエミュレーション方式と、仮想マシン上で動作するＯＳへ実際のＩ／Ｏデバイスを割り当てて直接的にアクセスさせる直接Ｉ／Ｏ方式とを切り換える技術を開示する。直接Ｉ／Ｏ方式では、ＯＳから直接的にＩ／Ｏデバイスへの入出力が行なえるので、高速で且つ信頼性の高い処理を行なうことができるが各ＯＳによってＩ／Ｏデバイスが占有されるので、仮想化技術により１つのホストマシンで複数のＯＳが実行可能であっても、その数に応じてＩ／Ｏデバイスが必要となり非効率的であることが記載されている。
【０００６】
特許文献２は、ハードディスク・ドライブと磁気テープ・ドライブからなる記憶装置において、ハードディスクの一部にキャッシュ領域を設けることで効率よくファイルを保存する技術を開示する。非特許文献１は、指定したゲストＯＳに対してデバイスの分離を実現し、分離されたデバイスを当該指定されたゲストＯＳだけが使用できるようにすることで仮想化環境のオーバーヘッドを低減するデバイス・パススルーという技術を開示する。デバイス・パススルーは、デバイスを複数のゲストＯＳおよび仮想化プログラムの間で共有する必要がない場合や、共有できないデバイスに適用することができる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００９−２２３７９３号公報
【特許文献２】特開２００３−１５０４１３号公報
【非特許文献】
【０００８】
【非特許文献１】M. Tim Jones、”Linux（登録商標）の仮想化とＰＣＩパススルー”、［online］、［平成２２年７月１３日検索］、インターネット〈URL：http://www.ibm.com/developerworks/jp/linux/library/l-pci-passthrough/?ca=drs-jp〉
【発明の概要】
【発明が解決しようとする課題】
【０００９】
仮想化環境においてゲストＯＳがＨＤＤやフラッシュＳＳＤ（Flash Solid State Drive）にアクセスする際には上述のようにオーバーヘッドが生ずる。また、パーソナル・コンピュータで仮想化環境を実現する際には、１台のハードウエアを仮想化プログラムおよび複数のゲストＯＳで共有することが一般的である。仮想化環境では、ゲストＯＳが仮想化プログラムに対して、非仮想化環境におけるＯＳ上のアプリケーションのように動作する。ＣＰＵには、リング・プロテクション機構により特権レベルを設定することができる。
【００１０】
仮想化プログラムの上で複数のゲストＯＳが動作するような場合には、各ゲストＯＳは対等な関係になるので特定のゲストＯＳに自由にハードウエアを専有させることはできない。また、特定のゲストＯＳが直接ＨＤＤにアクセスできるようにした場合には、ゲストＯＳ間の分離が行われなくなってしまうので安全上の問題が生ずる。したがって仮想化環境では、基本的に仮想化プログラムに最大の特権レベルを与えてハードウエアへのアクセスを許可し、ゲストＯＳは仮想化プログラムを介してハードウエアにアクセスするようにしている。したがって、複数の仮想マシンのプログラムを記録したＨＤＤには、特許文献１の直接Ｉ／Ｏ方式や非特許文献１のデバイス・パススルーを適用してゲストＯＳが直接アクセスすることはできない。
【００１１】
そこで、本発明の目的は、仮想化環境からディスク・ドライブにアクセス際のオーバーヘッドを低減することができるコンピュータを提供することにある。さらに本発明の目的は、仮想化プログラムとゲストＯＳを格納するディスク・ドライブに安全性を確保しながらアクセスすることができるコンピュータを提供することにある。さらに本発明の目的は、そのようなコンピュータを実現するコンピュータ・プログラムおよびディスク・ドライブへのアクセス方法を提供することにある。
【課題を解決するための手段】
【００１２】
仮想化環境では、ディスク・ドライブに対するアクセスは、仮想化プログラムが仮想マシンに提供する仮想ディスク・ドライブに対して行われる。仮想化プログラムは、仮想ディスク・ドライブのアドレスを実際のディスク・ドライブのアドレスにマッピングする。よってディスク・ドライブへのアクセスには仮想プログラムの動作が伴うため、仮想マシンから仮想化プログラムへのコンテキスト・スイッチングおよびアドレス・マッピングのオーバーヘッドが発生する。
【００１３】
本発明にかかるコンピュータは、仮想マシンがディスク・ドライブに直接アクセスすることができるようにして、仮想化環境のもとでディスク・ドライブに対してアクセスする際に固有に発生するオーバーヘッドを排除する。ディスク・ドライブは、コンピュータとネットワークを経由して接続されていてもよい。また、本発明におけるディスク・ドライブの形式は特に限定する必要はなく一例ではＨＤＤまたはＳＳＤとすることができる。
【００１４】
本発明では、ディスク・ドライブに仮想マシンがアクセスすることができる特定領域と仮想マシンがアクセスすることができない仮想化領域を設定する。特定領域は、ＣＰＵやメイン・メモリなどのようなハードウエアの動作速度の差を吸収するキャッシュとは異なり、ソフトウエアのレイヤにおけるオーバーヘッドを除去する目的で設定する。仮想化領域は、ディスク・ドライブが仮想化環境のために提供する記憶領域で仮想マシンや仮想化プログラムが記録される。アプリケーションまたはゲストＯＳのプロセスが仮想化領域に対するＩ／Ｏリクエストを開始する。ゲストＯＳはＩ／Ｏリクエストが仮想化領域にデータを書き込むライト・アクセスであると判断したときに書き込みデータを特定領域に書き込む。
【００１５】
よって、ディスク・ドライブに対するライト・アクセスの際に仮想化プログラムの動作により発生するオーバーヘッドを排除することができる。コンピュータはゲストＯＳがディスク・ドライブにＩ／Ｏリクエストをする際に、仮想マシンの動作と仮想化プログラムの動作の間で遷移する。仮想マシンが動作している間は仮想マシンが特定領域だけにアクセス可能になるように設定し、仮想化プログラムが動作している間は特定領域と仮想化領域にアクセスが可能になるようにダイナミックに設定することができる。
【００１６】
特定領域は、仮想化プログラムがＡＴＡのSet max addressコマンドを実行してディスク・コントローラのレジスタに設定することができる。Set max addressコマンドのパラメータはコンテキスト・スイッチングのタイミングでダイナミックに変更することができる。このように特定領域を設定することで、仮想マシンによるディスク・ドライブに対するＩ／Ｏリクエストを許容し、仮想マシンはアクセスの許可された特定領域にデータを書き込むことができるようになる。しかも、仮想マシンは仮想化領域にはアクセスすることができないので、仮想化領域に記録されたデータの安全性は保証される。
【００１７】
このとき、仮想化プログラムがみずからパスワードを生成してSet max addressコマンドの設定変更にパスワードを要求することも可能である。複数の仮想マシンが時分割で動作する場合には、特定領域を複数の論理ブロックに分割して複数の仮想マシンにそれぞれ専用に割り当てることもできる。特定領域を使用する仮想マシンを交換したり、特定領域の記憶容量が不足してきたりした場合には、ライト・アクセスと非同期で仮想化領域を特定領域に記録されたデータで更新し、特定領域に記憶容量を確保することができる。更新をアイドル時間やシャット・ダウンのタイミングで行えば、ユーザに更新のオーバーヘッドをほとんど感じさせないようにすることができる。更新を仮想化プログラムが実行すれば、更新処理に発生するコンテキスト・スイッチングによるオーバーヘッドを低減することができる。
【００１８】
リード・アクセスの場合に、読み取りデータがすでに特定領域に記録されていると判断したときには仮想マシンは特定領域からデータを読み取ることができる。よって、リード・アクセス時も仮想化プログラムの動作によるオーバーヘッドを低減することができる。また読み取りデータが特定領域に記録されていないと判断したときには、仮想マシンは通常の手順で仮想化領域から読み取ることができる。
【００１９】
仮想化領域からの読み取りにはオーバーヘッドが発生する。しかも読み取ったデータは近い将来に再度読み取られる可能性が高い。一度読み取ったデータに対するリード・アクセスが再度行われたときのために、読み取りのアクセスとは非同期で読み取ったデータを特定領域に記録することができる。ディスク・ドライブの台数は１台に限定するものではなく、本発明はＲＡＩＤのような複数のディスク・ドライブで１台の仮想的なディスク・ドライブを構成するような場合にも適用することができる。
【発明の効果】
【００２０】
本発明により、仮想化環境からディスク・ドライブにアクセス際のオーバーヘッドを低減することができるコンピュータを提供することができた。さらに本発明により、仮想化プログラムとゲストＯＳを格納するディスク・ドライブに安全性を確保しながらアクセスすることができるコンピュータを提供することができた。さらに本発明により、そのようなコンピュータを実現するコンピュータ・プログラムおよびディスク・ドライブへのアクセス方法を提供することができた。
【図面の簡単な説明】
【００２１】
【図１】仮想化環境が実現されたコンピュータのソフトウエアおよびハードウエアの構成を示す図である。
【図２】ＨＤＤにアクセスする際のオーバーヘッドを低減する原理を説明する図である。
【図３】仮想化領域をゲストＯＳのアクセスから保護する方法を説明する図である。
【図４】ファイル転送方式でＨＤＤにアクセスするディスク・アクセス制御システムを構成するソフトウエアおよびハードウエアの機能ブロック図である。
【図５】アドレス・マッピング・テーブルのデータ構造を示す図である。
【図６】ファイル転送方式で仮想マシンがＨＤＤにファイルを記録するときの手順を示すフローチャートである。
【図７】ファイル転送方式で仮想マシンがＨＤＤからファイルを読み出すときの手順を示すフローチャートである。
【図８】ミラーリング方式でＨＤＤにアクセスするディスク・アクセス制御システムを構成するソフトウエアおよびハードウエアの機能ブロック図である。
【図９】ミラーリング方式における特定領域と仮想ＨＤＤのアドレス関係を示す図である。
【図１０】ミラーリング方式で仮想マシンがＨＤＤにファイルを記録するときの手順を示すフローチャートである。
【発明を実施するための形態】
【００２２】
［仮想化環境］
図１は、所定のプログラムが実行されて仮想化環境が実現されているコンピュータ１０のソフトウエアおよびハードウエアの構成を示す図である。図１では、いわゆるタイプ１といわれるハイパーバイザ型の仮想化モデルを例示して説明するが、本発明は、ホストＯＳ型の仮想化モデルに適用することもできる。コンピュータ１０は、ハードウエア１９として代表的にＣＰＵ２１、メイン・メモリ２３、ＨＤＤ２５およびシステムとＨＤＤ２５の間のインターフェースとなるＩＤＥコントローラ２６を含んでいる。本発明におけるハードウエアの構成は周知である。ハードウエア１９上では直接ハイパーバイザまたはＶＭＭといわれる仮想化プログラム１７が動作する。
【００２３】
仮想化プログラム１７のレイヤの上では、複数の仮想マシン１１、１３、１５が時分割で動作することができる。あるいは、選択したいずれか１つの仮想マシンだけが、動作することができる。各仮想マシン１１、１３、１５は、アプリケーション７３、７５、７７、ゲストＯＳ６７、６９、７１、および仮想ハードウエア６１、６３、６５といったソフトウエアで構成されている。仮想化プログラム１７は、ＣＰＵ２１、メイン・メモリ２３、ＨＤＤ２５およびＩＤＥコントローラ２６などのハードウエアをエミュレートして、各仮想マシン１１、１３、１５に各ハードウエアに対応した仮想ハードウエア６１、６３、６５を提供する。
【００２４】
この例では仮想ハードウエア６１、６３、６５はそれぞれハードウエア１９の構成要素に対応して、仮想ＣＰＵ、仮想メイン・メモリ、仮想ＨＤＤ、および仮想ＩＤＥコントローラを含むことになる。ゲストＯＳ６７、６９、７１および仮想化プログラム１７は、各仮想マシン１１、１３、１５がＨＤＤ２５にアクセスする際に、仮想化プログラム１７が介在することにより発生するオーバーヘッドを低減するためのモジュールを含んでいる。なお、仮想マシン１１、１３、１５を構成するプログラムおよび仮想化プログラム１７はＣＰＵ２１およびメイン・メモリ２３などで実行されることにより、コンピュータ１０に所定の機能を発揮させるハードウエアの要素として捕らえることもできる。
【００２５】
［オーバーヘッド低減の基本原理］
図２は、本実施の形態により仮想マシン１１、１３、１５がＨＤＤ２５にアクセスする際のオーバーヘッドを低減する原理を説明する図である。ゲストＯＳ６７、６９、７１は、仮想ＨＤＤ６１、６３、６５が提供するファイル・パスを仮想インターフェースとしてＨＤＤ２５にアクセスする。ハイパーバイザ方式には完全仮想化（Full-Virtualization）と準仮想化（Para-Virtualization）という２つの方式がある。完全仮想化方式では、仮想化プログラム１７が完全な仮想化環境を構築するためゲストＯＳ６７、６９、７１は仮想化環境に対応するための修正をする必要がない。そして仮想プログラム１７が最大の特権レベルで動作し各ゲストＯＳはそれよりも低い特権レベルで動作する。
【００２６】
しかし、各ゲストＯＳは、自らが仮想化環境で動作していることを認識しないので、仮想ＨＤＤ６１、６３、６５に対して、最大の特権レベルで動作するプログラムにしか許容されないＨＤＤ２５へのアクセスをする。ゲストＯＳがＨＤＤ２５にアクセスするとＣＰＵ２１に特権命令違反の例外が発生し、それをトラップした仮想化プログラム１７に制御が移ってＨＤＤ２５へのアクセスを処理する。
【００２７】
準仮想化方式では、ゲストＯＳ６７、６９、７１がＨＤＤ２５にアクセスする際にハイパーバイザ・コールを発行して仮想化プログラム１７の内部関数を呼び出し、仮想マシン１１、１３、１５に変更を加えたり仮想化プログラム１７に処理を要求したりする。準仮想化方式は完全仮想化方式に比べて高速処理が可能であるがゲストＯＳに修正が必要になる。完全仮想化方式および準仮想化方式のいずれの場合にもゲストＯＳ６７、６９、７１がＨＤＤ２５にアクセスする際には、仮想化プログラム１７に制御が移る際のコンテキスト・スイッチングと、仮想ＨＤＤ６１、６３、６５とＨＤＤ２５とのアドレスをマッピングするためにオーバーヘッドが発生する。
【００２８】
本実施の形態においては、ＨＤＤ２５の記憶領域を仮想化プログラム１７が特定領域５１と仮想化領域５３に論理的に分割する。特定領域５１は、ゲストＯＳ６７、６９、７１の中から選択されたいずれかのゲストＯＳ（ここでは、ゲストＯＳ６７とする。）が仮想化プログラム１７を経由しないで直接アクセスできる記憶領域である。仮想化領域５３は、仮想化プログラム１７と仮想マシン１１、１３、１５を構成するプログラムおよびファイルなどのデータを記録しており、ゲストＯＳ６７が仮想化プログラム１７を経由してアクセスする記憶領域である。
【００２９】
各仮想マシン１１、１３、１５に対応するデータはデータ領域５５、５７、５９に記録される。データ領域５５、５７、５９にはそれぞれ、各仮想マシン１１、１３、１５に関連するアプリケーション、ＯＳ、デバイス・ドライバ、およびユーザ・データなどが記録される。仮想化プログラム１７はＨＤＤ２５を仮想ＨＤＤ６１、６３、６５としてエミュレートするに当たり、仮想化領域５３を仮想ＨＤＤ６１、６３、６５ごとに論理的に区分してデータ領域５５、５７、５９を確保してもよいし、仮想化領域５３の全体を使用して仮想ＨＤＤ６１、６３、６５のアドレスと仮想化領域５３のアドレスをマッピングしてもよい。
【００３０】
仮想マシン１１、１３、１５は、アクセス対象のデータについてＨＤＤ２５のアドレスを認識する必要はなく、仮想ＨＤＤ６１、６３、６５のアドレスだけを認識してＨＤＤ２５の仮想化領域５３にアクセスする。特定領域５１を使用するゲストＯＳ６７は、所定のアドレスに当該特定領域５１を自らが使用していたことを示すゲストＯＳ識別子を記録する。そして、ゲストＯＳ６７はＨＤＤ２５にファイルを書き込むライト・アクセスの際にはすべての書き込みデータを特定領域５１に書き込む。仮想化領域５３は仮想マシン１１、１３、１５に対して本来のデータ格納場所としての役割を担う。また、特定領域５１は他のゲストＯＳ６９、７１が使用することもある。ゲストＯＳ６７は仮想化プログラム１７に指示して、特定領域５１にだけ記録されているデータをライト・アクセスとは非同期で仮想化領域５３に書き込む。
【００３１】
また、ＨＤＤ２５からファイルを読み取るリード・アクセスの際には、ゲストＯＳ６７は特定領域５１に読み取りデータが記録されている場合は特定領域５１から読み取り、読み取りデータが記録されていない場合は仮想化領域５３から読み取る。特定領域５１からの読み取りの機会を増大するために、一旦読み取られたファイルは、ゲストＯＳ６７がリード・アクセスとは非同期で特定領域５１に書き込むことができる。このように仮想化されたＨＤＤ２５にゲストＯＳ６７がアクセスするために、以下のようにしてゲストＯＳ６７によるＨＤＤ２５へのアクセスを許可しながら仮想化領域５３のデータを保護する。
【００３２】
仮想化プログラム１７はリング０で動作し、ゲストＯＳ６７がリング１、２、３で動作すると、ゲストＯＳ６７のＨＤＤ２５へのアクセスは特権命令違反になって仮想化プログラム１７によりトラップされＣＰＵ２１の制御が仮想化プログラム１７に移行する。インテル社のＶＴ（Virtualization Technology）という仮想化支援機構やＸ８６仮想化では、I/O-bitmapというオブジェクトによりハードウエアへのアクセスをＩ／Ｏポートごとに制御して、ゲストＯＳ６７がＨＤＤ２５にアクセスしても仮想化プログラム１７に制御を移行させないようにする手法を提供する。
【００３３】
仮想化プログラム１７は、I/O-bitmap のオブジェクトにパラメータを記述して、ゲストＯＳ６７によるＩＤＥコントローラ２６のＩ／Ｏポートに対するＩ／Ｏリクエストを制御する。仮想化プログラム１７はゲストＯＳ６７によるＨＤＤ２５へのアクセスを、仮想化プログラム１７が特定領域５１を利用する場合はトラップせず、特定領域５１を利用しない場合はトラップするようにI/O-bitmapに記述する。
【００３４】
このようにしてゲストＯＳ６７による特定領域５１へのアクセスが可能になるが、I/O-bitmapによる制御はＩ／Ｏポートのアドレス単位であるため、Ｉ／Ｏポートが開放されるとゲストＯＳ６７は特定領域５１だけでなく仮想化領域５３にもアクセスできる。このため、本実施の形態ではI/O-bitmapによる制御方式を採用しながら、以下のようにしてゲストＯＳ６７が仮想化領域５３にアクセスできないようにしている。なお、インテル社のＶＴやＡＭＤ社の  Pacificaという仮想化支援機構では、リング・プロテクションによる特権レベルの制御とは異なってコンテキスト・ベースで特権を付与する方式を採用する。この場合は、仮想化プログラム１７への動作の移行をI/O-bitmapで制御する必要はない。
【００３５】
［仮想化領域の保護方法］
図３は、仮想化領域５３をゲストＯＳ６７のアクセスから保護する方法を説明する図である。ＡＴＡ（Advanced Technology Attachment）のインターフェース規格では、ディスクの記憶領域に特別なプログラム以外はアクセスすることができないＨＰＡ（Host Protected Area）を設定することができる。本実施の形態では、ＨＰＡの設定をゲストＯＳ６７の動作と仮想化プログラム１７の動作の遷移にリンクさせてダイナミックに変更し、ゲストＯＳ６７が動作している間はゲストＯＳ６７が特定領域５１にはアクセスできるが仮想化領域５３にはアクセスできないようにしている。
【００３６】
ＨＤＤ２５にＨＰＡを設定するために、仮想化プログラム１７がSet max addressコマンドを発行してＩＤＥコントローラ２６のレジスタにＨＤＤ２５の有効なアドレス範囲を設定する。設定値がＨＤＤ２５の最大記憶容量よりも小さい場合はゲストＯＳ６７または仮想化プログラム１７が利用できる記憶容量が低減する。図３（Ａ）は、Set max addressコマンドを最大記憶容量のＸ（％）に設定した様子を示している。この場合、ＨＤＤ２５の記憶容量のうち０％からＸ％までは特定領域５１に対応し、Ｘ％を越えて１００％まではＨＰＡが設定されてアクセスが制限された仮想化領域５３に対応する。
【００３７】
ＨＰＡには、ゲストＯＳ６７も仮想化プログラム１７もアクセスすることができない。したがって、ＣＰＵ２１の動作がゲストＯＳ６７の実行に遷移したときにＨＰＡを設定すれば、ゲストＯＳ６７は特定領域５１にはアクセスできるが仮想化領域５３にアクセスすることができなくなる。図３（Ｂ）は、Set max addressコマンドで有効なアドレス範囲を１００％に設定した様子を示している。この状態ではＨＰＡは設定されていないことになるので、ゲストＯＳ６７および仮想化プログラム１７は特定領域５１にも仮想化領域５３にもアクセスすることができる。
【００３８】
ここで仮想化プログラム１７は、ＣＰＵ２１の動作が仮想化プログラム１７の実行に遷移したときだけ、パラメータが１００％のSet max addressコマンドを発行することで、自らだけが特定領域５１と仮想化領域５３にアクセスできるようにしている。このように、I/O-bitmapによりゲストＯＳ６７に対してＩＤＥコントローラ２６のＩ／Ｏポートを開放しても、ゲストＯＳ６７と仮想化プログラム１７との間でのＣＰＵ２１の遷移に応じてダイナミックにＨＰＡを設定することで、ゲストＯＳ６７の仮想化領域５３に対するアクセスを制限し、かつ仮想化プログラム１７にはアクセス制限を解除することができる。
【００３９】
ゲストＯＳ６７がSet max addressコマンドを発行してＨＰＡを変更できるとすれば、仮想化領域５３に記録されたデータの安全を確保することができなくなる。データの安全を確保するためにSet max addressコマンドの発行に、パスワードを要求することができる。すなわち、仮想化プログラム１７が一旦設定したＨＰＡは、パスワードを取得しない限りゲストＯＳ６７が変更できないようにすることができる。パスワードはユーザが設定しないで、仮想化プログラム１７が独自に乱数を発生して生成することができる。
【００４０】
［ファイル転送方式］
図４は、ファイル転送方式でＨＤＤ２５にアクセスするディスク・アクセス制御システム１００を構成するソフトウエアおよびハードウエアの機能ブロック図である。ディスク・アクセス制御システム１００はコンピュータ１０に搭載される。仮想マシン１１は、本実施の形態に関連する要素としてアプリケーション７３、ゲストＯＳ６７、仮想ＨＤＤ６１、およびアドレス・マッピング・テーブル（ＡＭＰ）９３を含んでいる。ゲストＯＳ６７は、Ｗｉｎｄｏｗｓ（登録商標）を例示して説明するが、本発明には他のＯＳを適用することも可能である。アプリケーション７３はユーザー・モードで動作する。アプリケーション７３はサブシステムＤＬＬ（Dynamic Link Library）を経由してＡＰＩ関数を呼び出し、仮想ＨＤＤ６１に対してデータを書き込んだり読み取ったりすることができるプログラムである。
【００４１】
アプリケーション７３は、プログラムを仮想ＨＤＤ６１にインストールするインストーラであってもよい。システム・サービス・ディスパッチャ（ＳＳＤ）８３は、ユーザー・モードとカーネル・モードの切り替えを担当する。ＳＳＤ８３はユーザー・モードで動作するアプリケーション７３から呼び出されたシステム・コール・サービスの際に発生した割り込みのコール番号を確認して、ＡＰＩ関数をカーネル・モードで動作する内部サポート関数に切り替える。
【００４２】
Ｉ／Ｏマネージャ８５は、スタック構造の入出力に関連するデバイス・ドライバの階層間の通信を行うためにＩＲＰ（I/O Request Packet）を作成して所定のデバイス・ドライバにディスパッチする。ＩＲＰは、各デバイス・ドライバとＩ／Ｏマネージャ８５との間の通信に使用される。ＨＤＤ２５へのアクセスに関連するデバイス・ドライバは、ファイル・システム・ドライバ８７、アクセス・コントロール・ドライバ８９、およびディスク・ドライバ９１で構成されている。ファイル・システム・ドライバ８７は、ＦＡＴ（File Allocation Table）やＮＴＦＳ（NT File System）といったファイル・システムを形成して仮想ＨＤＤ６１に関するファイルの記録、読み取り、削除、または移動などのＩ／Ｏリクエストを管理する。
【００４３】
ファイル・システム・ドライバ８７は、アプリケーション７３に対して仮想ＨＤＤ６１に対するファイル・パスを提供する。ファイル・システム・ドライバ８７は、Ｉ／Ｏマネージャ８５から受け取ったＡＰＩ関数に指定されたファイル・パスを仮想ＨＤＤ６１のＬＢＡ（logical block address）に変換して、アクセス・コントロール・ドライバ８９に送る。アクセス・コントロール・ドライバ８９は、仮想ＨＤＤ６１に対するＩ／ＯリクエストをＨＤＤ２５の特定領域５１を利用して処理するプログラムである。アクセス・コントロール・ドライバ８９は、ＡＭＰ９３を参照したり更新したりすることができる。アクセス・コントロール・ドライバ８９はさらに特定領域５１または仮想化領域５３を更新するタイミングを決定する。
【００４４】
ディスク・ドライバ９１は階層構造になっており、アクセス・コントロール・ドライバ８９から受け取った仮想ＨＤＤ６１の所定のＬＢＡに対する読み取りまたは書き込みなどをするためのＩ／Ｏリクエストを、ＨＤＤ２５を制御するプロトコルに変換して仮想ＨＤＤ６１に送る。仮想ＨＤＤ６１は仮想化プログラム１７により提供され、ＨＤＤ２５の仮想化領域５３を抽象化して仮想マシン１１に仮想化されたインターフェースを提供する。仮想ＨＤＤ６１はディスク・ドライバ９１からのＩ／Ｏリクエストに対してファイル・パスのインターフェースを提供するだけで直接応答することはない。
【００４５】
仮想化プログラム１７は、本実施の形態に関連する要素としてアクセス・マネージャ１０１、ＨＰＡマネージャ１０２、ファイル・システム・ドライバ１０３、およびディスク・ドライバ１０５を含んでいる。アクセス・マネージャ１０１は、アクセス・コントロール・ドライバ８９から仮想化領域５３を更新する要求があったときに、特定領域５１のデータで仮想化領域５３を更新するプログラムである。
【００４６】
アクセス・マネージャ１０１は、ディスク・ドライバ９１から受け取ったＩ／Ｏリクエストに対しては、なんら処理を加えないでファイル・システム・ドライバ１０３に渡す。ＨＰＡマネージャ１０２は、ゲストＯＳ６１のＩ／Ｏリクエストが発行されてゲストＯＳ６７から仮想化プログラム１７に制御が移行するときにＨＰＡを解除し、仮想化プログラム１７からゲストＯＳ６７に制御が移行するときにＨＰＡを設定するようにパラメータを設定してSet max addressコマンドを発行するプログラムである。
【００４７】
アクセス・マネージャ１０１は、ファイル・システム・ドライバ１０３から受け取った仮想化領域５３からの読み取りデータに対しては何ら処理を加えないで、ディスク・ドライバ９１に渡す。ファイル・システム・ドライバ１０３は、仮想化領域５３のファイル・パスを管理する。ファイル・システム・ドライバ１０３は、所定のファイルが記録される仮想ＨＤＤ６１の仮想的なＬＢＡを、実際に記録する仮想化領域５３のＬＢＡに変換する。ディスク・ドライバ１０５は、ＨＤＤ２５に対して受け取ったＩ／Ｏリクエストを所定のプロトコルに変換して実行する。
【００４８】
図５はＡＭＰ９３のデータ構造を示す図である。図５（Ａ）に示すＡＭＰ９３は、特定の３つのファイルについて、仮想ＨＤＤ６１がゲストＯＳ６７に提供するＬＢＡと実際にデータが記録されている特定領域５１のＬＢＡを関連付けている。ここでは説明を簡単にするために１つのファイルをＬＢＡ単位で対応付けているが、実際には、複数のＬＢＡの集合であるクラスタの単位で関連付けることができる。
【００４９】
ＨＤＤ２５には、特定領域５１から仮想化領域５３に渡ってディスクのすべてのセクタにアドレスが順番にＬＢＡ００１からＬＢＡｎｎｎまで割り当てられているものとする。ＬＢＡ００１からＬＢＡ１００までは特定領域５１に対応し、ＬＢＡ１０１からＬＢＡｎｎｎまでは仮想化領域５３に対応するものとする。また、仮想ＨＤＤ６１には、仮想化プログラム１７によりアドレスがＬＢＡ００１からＬＢＡｍｍｍまで割り当てられているものとする。
【００５０】
更新フラグは、仮想化領域５３を特定領域５１のデータで更新する必要があることを示す情報である。アクセス・コントロール・ドライバ８９は、仮想ＨＤＤ６１と特定領域５３の対応するＬＢＡに記録されているデータが一致しない場合は更新フラグをリセット（０）し、一致する場合はセット（１）する。更新フラグがセットされている場合は仮想化領域５３を更新しないでも特定領域５１からデータを削除することができる。更新フラグの設定方法は後に説明する。登録日時は、特定領域５１の記憶容量が少なくなったときに、仮想化領域５３を更新してから消去するときの順番を決める情報である。アクセス・コントロール・ドライバ８９は、登録日時の欄にＡＭＰ９３にエントリを登録した日時を書き込む。
【００５１】
つぎに、ディスク・アクセス制御システム１００の動作を図６、図７のフローチャートに基づいて説明する。図６は、仮想マシン１１がＨＤＤ２５にファイルを記録するときの手順を示すフローチャートである。仮想マシン１３、１５は、仮想マシン１１とともにコンピュータ１０において時分割動作をしていてもよいが、ここでの手順では仮想マシン１３、１５は特定領域５１を利用しないので説明から除外する。
【００５２】
ブロック２０１では、コンピュータ１０が動作して図１の仮想化プログラム１７および仮想マシン１１が動作する仮想化環境が実現されている。コンピュータ１０の起動ルーチンのなかで、または仮想プログラム１７が動作したあとに仮想マシン１１がロードされる際に、アクセス・コントロール・ドライバ８９は、特定領域５１の所定のアドレスからゲストＯＳ識別子を読み取って、特定領域５１を自らが使用していたか否かを判断する。
【００５３】
特定領域５１を自らが使用していたと判断した場合は、アクセス・コントロール・ドライバ８９は特定領域５１に記録されたデータおよびＡＭＰ９３のエントリを継続して使用する。特定領域５１を他の仮想マシン１３、１５が使用していたと判断した場合は、アクセス・コントロール・ドライバ８９は特定領域５１およびＡＭＰ９３を初期化する。仮想化プログラム１７は、I/O-bitmapにパラメータを記述してゲストＯＳ６７がＨＤＤ２５にアクセスしてもＣＰＵ２１の動作が仮想化プログラム１７に移行しないようにする。
【００５４】
ＨＰＡマネージャ１０２は、仮想マシン１１が動作するときはパラメータがＸ（％）のSet max addressコマンドを発行して図３（Ａ）のように仮想化領域５３をＨＰＡに設定し、仮想化プログラム１７が動作するときはパラメータが１００％のSet max addressコマンドを発行して図３（Ｂ）のようにＨＰＡを解除する。仮想化プログラム１７は特定領域５１に、仮想マシン１１が新たなアプリケーションをインストールしたり、アプリケーション７３がファイルを記録したり、あるいは仮想化領域５３から読み取ったファイルを記録したりするのに十分な記憶容量を確保することが望ましい。ただし、それらのデータを一度に記録するだけの記憶容量を特定領域５１に確保できない場合であっても、本実施の形態では特定領域５１のデータを入れ替えることで対応できるようにしている。
【００５５】
ブロック２０３でアプリケーション７３は、ＡＰＩ関数を呼び出してゲストＯＳ６７に新しいファイルを記録するためのプロセスまたは仮想化領域５１から読み取ったファイルを更新するプロセスを生成するように要求する。プロセスは、ファイル保存場所としての仮想ＨＤＤ６１のＬＢＡを認識しておらず、ファイルの記録場所に関するパラメータとして、ファイル・システム・ドライバ８７が提供する仮想ＨＤＤ６１におけるファイル・パスをＡＰＩ関数に設定する。ＳＳＤ８３はＡＰＩ関数を内部サポート関数に変換してＩ／Ｏマネージャ８５に送る。
【００５６】
Ｉ／Ｏマネージャ８５は、ＩＲＰに内部サポート関数の要求を記述して各デバイス・ドライバと通信をする。各デバイス・ドライバもＩ／Ｏマネージャ８５から受け取ったＩＲＰに記述してＩ／Ｏマネージャ８５に返送することにより、他のデバイス・ドライバと通信する。ファイル・システム・ドライバ８７は、ＡＰＩ関数で指定されたファイル・パスを仮想ＨＤＤ６１のＬＢＡに変換してアクセス・コントロール・ドライバ８９に送る。
【００５７】
ここでは、ファイル・システム・ドライバ８７はアプリケーション７３が指定したファイル名およびファイル・パスに対して仮想ＨＤＤ６１のＬＢＡ００７を割り当てるものとする。ブロック２０５でアクセス・コントロール・ドライバ８９は、Ｉ／Ｏリクエストがライト・アクセスかリード・アクセスかを判断する。リード・アクセスの場合はブロック２０９に移行する。リード・アクセスの処理は、図７に基づいて説明する。なお、Ｉ／Ｏリクエストには、ファイルの削除やファイルの移動に関するものもあるが、本実施の形態にかかるライト・アクセスの処理とリード・アクセスの処理について説明すれば当業者にとってそれらの処理方法も明らかになるのでその説明は省略する。
【００５８】
ＨＤＤ２５に対する書き込みデータはこれまでの処理では、仮想ＨＤＤ６１がインターフェースになって仮想化領域５３に書き込まれるが、本実施の形態ではすべての書き込みデータを一旦は特定領域５１に書き込む。そのために、ブロック２０７でアクセス・コントロール・ドライバ８９は、ＡＭＰ９３を参照して、特定領域５１の空いているＬＢＡを探して、ファイル・システム・ドライバ８７が割り当てたＬＢＡ００７に対して特定領域５１のＬＢＡ００１を割り当てる。
【００５９】
ブロック２１１でアクセス・コントロール・ドライバ８９は、特定領域５１のＬＢＡ００１にファイルを書き込むようにディスク・ドライバ９１に要求する。ディスク・ドライバ９１は特定領域５１のＬＢＡ００１にファイルを記録するようにＨＤＤ２５に要求する。仮想化プログラム１７は、ゲストＯＳ６７のＨＤＤ２５に対するアクセスをトラップしないようにI/O-bitmapにパラメータを設定しているため、ディスク・ドライバ９１は仮想化プログラム１７を呼び出すことなくＩＤＥコントローラ２６を通じて直接特定領域５１にファイルを書き込むことができる。よって、本実施の形態ではライト・アクセスの際のすべての書き込みデータに対して、仮想化プログラム１７の処理により発生するオーバーヘッドを除去することができる。
【００６０】
ＨＤＤ２５から書き込み完了の通知を受け取ったディスク・ドライバ９１は、ブロック２１３でアクセス・コントロール・ドライバ８９にその旨を通知する。通知を受け取ったアクセス・コントロール・ドライバ８９は、ブロック２１５でＡＭＰ９３を更新する。すなわち、アクセス・コントロール・ドライバ８９は特定領域５１に新規にファイルが記録されたので、対応する仮想ＨＤＤ６１のＬＢＡ００７と特定領域５１のＬＢＡ００１をＡＭＰ９３に登録しさらに登録日時を書き込む。この時点では、特定領域５１のＬＢＡ００７のファイルは仮想化領域５３に記録されていないので更新フラグはリセットする。
【００６１】
特定領域５１は、ライト・リクエストがあったときの書き込みデータを仮想化領域５３に代わってすべて記録する領域であり、その記憶容量が小さい場合はゲストＯＳ６７に関連するアプリケーションやユーザ・データを書き込めない事態が生ずる。しかし、特定領域５１は、ＣＰＵやメイン・メモリなどのようなキャッシュとは異なり、電源が喪失しても内容が消えることはないため、データを追加的に記録していく限り残りの記憶容量は少なくなる。
【００６２】
したがって、特定領域５１の記憶容量が仮想ＨＤＤ６１に設定された記憶容量よりも小さい場合は、データを書き込めない事態が生ずる可能性がある。ブロック２１７では、アクセス・コントロール・ドライバ８９がＡＭＰ９３を参照して、特定領域５１の残りの記憶容量が所定値以下か否かを判断する。残りの記憶容量が所定以下の場合は仮想化領域５３の更新が必要であると判断してブロック２１９に移行する。残りの記憶容量が所定値を越える場合は、更新の必要がないのでブロック２２３に移行する。
【００６３】
ブロック２１９では、アクセス・コントロール・ドライバ８９が、ＡＭＰ９３を参照して更新フラグがリセットされている仮想ＨＤＤ６１と特定領域５１のＬＢＡの対を取得する。図５（Ａ）の例では、更新フラグがリセットされている特定領域のＬＢＡ００１、００２に記録されているデータが対象になる。さらにアクセス・コントロール・ドライバ８９は、仮想化プログラム１７に動作を移すためのシステム・コールを発行し、特定領域５１のＬＢＡ００１、００２のデータで、仮想ＨＤＤ６１のＬＢＡ００７、００９に対応する仮想化領域５３を更新するようにアクセス・マネージャ１０１に要求する。
【００６４】
仮想化プログラム１７がシステム・コールをトラップすることでＣＰＵ２１の動作が仮想化プログラム１７に移行する。ＨＰＡマネージャ１０２は、自らが動作するときはＨＰＡを設定しないので、ディスク・ドライバ１０５はＨＤＤ２５の全体にアクセスすることができる。更新の要求を受けたアクセス・マネージャ１０１は、ディスク・ドライバ１０５に特定領域５１のＬＢＡ００１、００２からデータを読み取るように要求する。
【００６５】
さらにアクセス・マネージャ１０１は、ファイル・システム・ドライバ１０３に仮想ＨＤＤ６１のＬＢＡ００７、００９に読み取ったデータを書き込むように要求する。ファイル・システム・ドライバ１０３は、受け取った仮想ＨＤＤ６１のＬＢＡ００７、００９を仮想化領域５３のたとえばＬＢＡ１０１、１０２といった所定のＬＢＡにマッピングしてディスク・ドライバ１０５に書き込み要求をする。
【００６６】
ＬＢＡ１０１、１０２は、図２のデータ領域５５の一部である。仮想化領域５３の更新は、仮想化プログラム１７だけで行うので、複数のＬＢＡを更新してもコンテキスト・スイッチングに伴うオーバーヘッドが発生しない。特定領域５１に記録されたデータは他の仮想マシンがそこを使用することにより消去されない限り、後にアプリケーション７３が仮想ＨＤＤ６１のＬＢＡ００７、００９に対してリード・アクセスをする場合には、読み取りデータを仮想化領域５３のＬＢＡ１０１、１０２から読み出すことができる。
【００６７】
ブロック２２１では、ディスク・ドライバ１０５から更新の終了通知を受け取ったアクセス・マネージャ１０１は、アクセス・コントロール・ドライバ８９に更新が終わった仮想ＨＤＤのＬＢＡ００７、００９または特定領域５１のＬＢＡ００１、００２を通知する。通知を受け取ったアクセス・コントロール・ドライバ８９は、ＡＭＰ９３に更新が終わったＬＢＡに対応する更新フラグをセットする。
【００６８】
それ以後は、新たなデータを特定領域５１に書き込む際に特定領域５１の記憶容量が不足する場合は、更新フラグがセットされている特定領域５１のＬＢＡの中で最も過去に更新されたＬＢＡに上書きして特定領域５１を使用することができる。上記の手順ではブロック２１７で、仮想化領域５３の更新の要否を特定領域５１の残りの記憶容量に基づいて判断したが、前述のように特定領域５１は、コンピュータ１０の電源喪失に対して安全であるため更新フラグがリセットされた状態が長時間継続しても支障がない。したがって、ブロック２１７の手順は、特定領域５１の残りの記憶容量が不足しない限り、ゲストＯＳ６７が発行するコンピュータ１０のシャット・ダウン・イベント、ＣＰＵ２１のアイドル・イベント、またはゲストＯＳ６７の定期的なタイマー・イベントに基づいて実行してもよい。
【００６９】
ただし、特定領域５１にデータを新規に書き込んだり特定領域５１のデータを更新したりするタイミングで仮想化領域５３を更新すると、仮想化プログラム１７でのオーバーヘッドが大きくなるので好ましくない。仮想化領域５３の更新は、特定領域５１にある程度の量のデータが記録されてからライト・アクセスとは非同期で行うことが望ましい。データをまとめて更新することで、仮想マシン１１と仮想化プログラム１７との間のコンテキスト・スイッチングに伴うオーバーヘッドを軽減することができる。
【００７０】
図７は、仮想マシン１１がＨＤＤ２５からファイルを読み出すときの手順を示すフローチャートである。ＡＭＰ９３には、図５（Ａ）のような３つのエントリが登録されているものとする。ブロック３０１では図６のブロック２０９につづいて、ファイル・システム・ドライバ８７は、プロセスが指定したファイル・パスを仮想ＨＤＤ６１のＬＢＡに変換してアクセス・コントロール・ドライバ８９に送る。アクセス・コントロール・ドライバ８９は、リード・アクセスにおいて指定されている仮想ＨＤＤ６１のＬＢＡがＡＭＰ９３に登録されているか否かを判断する。
【００７１】
リード・リクエストにかかる仮想ＨＤＤ６１のＬＢＡがたとえばＬＢＡ００９であって、ＡＭＰ９３に登録されている場合は、ブロック３０３に移行する。ブロック３０３では、アクセス・コントロール・ドライバ８９は、ファイル・システム・ドライバ８７から受け取った仮想ＨＤＤ６１のＬＢＡ００９に対応する特定領域のＬＢＡ００２をＡＭＰ９３から取得する。ブロック３０５でアクセス・コントロール・ドライバ８９は、特定領域５１のＬＢＡ００２からファイルを読み取るようにディスク・ドライバ９１に要求する。ゲストＯＳ６７は特定領域５１に直接アクセスしてファイルを読み取り仮想化プログラム１７に制御が移行しないためオーバーヘッドを除去することができる。
【００７２】
ブロック３０１でリード・リクエストにかかる仮想ＨＤＤ６１のＬＢＡがたとえばＬＢＡ０１１でＡＭＰ９３に登録されていない場合は、ブロック３０７に移行する。ブロック３０７では、アクセス・コントロール・ドライバ８９は、ファイル・システム・ドライバ８７から受け取ったＩ／Ｏリクエストに含まれているＬＢＡ０１１を変更しないでディスク・ドライバ９１に送り、仮想化プログラム１７に移行するためのシステム・コールを発行するとＣＰＵ２１の動作が仮想化プログラム１７に移行する。
【００７３】
リード・リクエストに含まれるＬＢＡ０１１は、ファイル・システム・ドライバ１０３によりたとえば仮想化領域５３のＬＢＡ１０５にマッピングされているものとする。ファイル・システム・ドライバ１０３は、受け取ったリード・リクエストのＬＢＡ０１１をＬＢＡ１０５に変換してディスク・ドライバ１０５に送る。ディスク・ドライバ１０５は、仮想化領域５３のＬＢＡ１０５から読み取ったファイルを、アクセス・マネージャ１０１およびディスク・ドライバ９１を経由してアクセス・コントロール・ドライバ８９に送る。
【００７４】
リード・リクエストにかかるファイルを受け取ったアクセス・コントロール・ドライバ８９はブロック３０９で、ＡＭＰ９３に図５（Ｂ）に示すように仮想ＨＤＤ６１のＬＢＡ０１１を登録する。ただし、この時点では、特定領域５１には、仮想化領域５３のＬＢＡ１０５のファイルが記録されていないので、仮想ＨＤＤ６１のＬＢＡ０１１に対応する特定領域５１のＬＢＡのエントリは空白である。読み取ったファイルの仮想ＨＤＤ６１のエントリだけをＡＭＰ９３に登録してから、アクセス・コントロール・ドライバ８９は受け取ったファイルをアプリケーション７３に渡す。
【００７５】
ブロック３０９までの手順によれば、仮想化領域５３から読み出されてかつ特定領域５１に書き込まれていないデータが存在する。直近にアクセスをされたデータは近いうちに再度アクセスされる可能性が高い。よって、本実施の形態では、一旦仮想化領域５３から読み取ったデータを特定領域５１に記録して、次回以降のリード・アクセスに対しては、特定領域５１からの読み取りを可能にする。ただし、読み取りのたびに特定領域５１を更新したのではオーバーヘッドが大きくなるので、仮想化領域５３からの読み取り処理と特定領域５１への書き込み処理は非同期または異なるタイミングで行う。
【００７６】
ブロック３１１では、アクセス・コントロール・ドライバ８９が、特定領域５１のデータを更新する必要があるか否かを判断する。判断は、ゲストＯＳ６７が発行する、一定の時間インターバルが経過したことを示すイベント、シャット・ダウンを示すイベント、またはＣＰＵ２１のアイドル状態を示すイベントなどに基づいて行うことができる。ブロック３１３では、特定領域５１の更新の必要性を示すイベントをゲストＯＳ６７の所定のモジュールから受け取ったアクセス・コントロール・ドライバ８９は、ＡＭＰ９３を参照して特定領域５１が空のエントリを検索し、仮想ＨＤＤ６１のＬＢＡ０１１を取得する。
【００７７】
アクセス・コントロール・ドライバ８９は、仮想ＨＤＤ６１のＬＢＡ０１１に特定領域５１の空いているアドレスであるＬＢＡ００４を割り当てる。アクセス・コントロール・ドライバ８９は、ＨＤＤ２５にアクセスするための内部サポート関数を呼んで、仮想ＨＤＤ６１のＬＢＡ０１１を経由して仮想化領域のＬＢＡ１０５からファイルを読み取り、さらに読み取ったファイルを特定領域５１のＬＢＡ００４に記録するようにディスク・ドライバ９１に要求する。ディスク・ドライバ９１は、仮想化プログラム１７を経由して仮想化領域５３からファイルを読み取り、直接特定領域５１に書き込む。その結果、特定領域５１の前回の更新から今回の更新までの間に仮想化領域５３から読み取られたＬＢＡ１０５のデータは、特定領域５１のＬＢＡ００４に書き込まれる。
【００７８】
ブロック３１５では、ディスク・ドライバ９１が特定領域５１への書き込みが終了したことをアクセス・コントロール・ドライバ８９に通知する。通知を受け取ったアクセス・コントロール・ドライバ８９は、図５（Ｃ）に示すようにＡＭＰ９３に仮想ＨＤＤ６１のＬＢＡ０１１に対応させて特定領域５１のＬＢＡ００４を登録し、かつ、更新フラグをセットする。アクセス・コントロール・ドライバ８９は、同時にＡＭＰ９３に登録日時を書き込む。
【００７９】
［ミラーリング方式］
図８は、ミラーリング方式でＨＤＤ２５にアクセスするディスク・アクセス制御システム３００を構成するソフトウエアおよびハードウエアの機能ブロック図である。ディスク・アクセス制御システム３００が図４のディスク・アクセス制御システム１００と異なる点は、アクセス・コントロール・ドライバ３０１およびアクセス・マネージャ３０５の機能、ＡＭＰ３０３のデータ構造、および特定領域３０７の容量である。以下、この相違点を中心に説明する。
【００８０】
図９（Ａ）は、ミラーリング方式による特定領域３０７と仮想ＨＤＤ６１のアドレス関係を示す図である。ミラーリング方式では、特定領域３０７に仮想ＨＤＤ６１のディスク・イメージをコピーする。したがって仮想化プログラム１７は、特定領域３０７の記憶容量が仮想化領域３０９のなかで仮想マシン１１に割り当てられたデータ領域５５の記憶容量以上になるようにパラメータを設定してSet max addressコマンドを発行する。ここでは、特定領域３０７がＨＤＤ２５のＬＢＡ０００〜ＬＢＡｘｘｘに設定されるものとする。
【００８１】
そして、仮想化プログラム１７は、仮想ＨＤＤ６１を通じてファイル・システム・ドライバ８７に特定領域３０７と同じアドレス範囲のＬＢＡ０００〜ＬＢＡｘｘｘのインターフェースを提供する。また図９（Ｂ）に示すように、ＡＭＰ３０３には仮想ＨＤＤ６１のＬＢＡと特定領域３０７のＬＢＡが同じアドレスでマッピングされるので、共通のＬＢＡだけが登録される。アクセス・コントロール・ドライバ３０１とアクセス・マネージャ３０５の機能については、図１０、図１１の手順に基づいて説明する。登録日時は、ＡＭＰ３０３にエントリを登録したタイミングでアクセス・コントロール・ドライバ３０１が記録する。
【００８２】
図１０は、アプリケーション７３がＨＤＤ２５にファイルを記録するときの手順を示すフローチャートである。ブロック４０１〜４０５およびブロック４０９は、図６のブロック２０１〜２０５およびブロック２０９の手順と同じである。ミラーリング方式では、所定のファイルの記録場所としてファイル・システム・ドライバ８７が提供する仮想ＨＤＤ６１のＬＢＡは、特定領域３０７のＬＢＡに一致する。ブロック４０７では、アクセス・コントロール・ドライバ３０１は、ファイル・システム・ドライバ８７から受け取ったＬＢＡ００７を変更しないで、ディスク・ドライバ９１に特定領域３０７のＬＢＡ００７に記録するように要求する。このときアクセス・コントロール・ドライバ３０１は、仮想化ドライバ１７に遷移するためのシステム・コールを発行しない。
【００８３】
ファイルを記録する特定領域３０７のＬＢＡと仮想ＨＤＤ６１のＬＢＡは一致しているので、アクセス・コントロール・ドライバ３０１はファイル転送方式のようにＡＭＰ９３を参照して特定領域３０７の空いているＬＢＡを探す必要はない。要求を受け取ったディスク・ドライバ９１はＨＤＤ２５に、特定領域３０７のＬＢＡ００７にファイルを書き込む要求をする。仮想マシン１１が動作する間は、ＨＰＡマネージャ１０２は仮想化領域３０９だけをＨＰＡに設定するので、ディスク・ドライバ９１は特定領域３０７にファイルを書き込むことができる。
【００８４】
ブロック４０７ではアクセス・コントロール・ドライバ３０１が、ディスク・ドライバ６１から書き込み完了の通知を受け取り、ブロック４１１でＡＭＰ３０３にＬＢＡ００７を登録する。さらにアクセス・コントロール・ドライバ３０１は仮想化領域３０９には仮想ＨＤＤ６１のＬＢＡ００７に対応する場所にファイルが記録されていないので、ＬＢＡ００７の更新フラグをセットしないか、もしセットされていればリセットする。
【００８５】
ブロック４１３では、アクセス・コントロール・ドライバ３０１が仮想化領域３０９の更新が必要か否かを判断する。特定領域３０７には仮想マシン１１に割り当てられた仮想化領域３０９のすべてのデータを記憶できる記憶容量が設定されているので、特定領域３０７を仮想マシン１１が専有する限りは、仮想化領域３０９を更新する必要はない。しかし、特定領域３０７は他の仮想マシン１３、１５も使用することがあるので、アクセス・コントロール・ドライバ３０１はゲストＯＳ６７のモジュールからシャット・ダウンの通知または仮想マシン１１を停止する通知を受け取ったときに更新が必要であると判断する。
【００８６】
更新が必要な場合は、ブロック４１５に移行してアクセス・コントロール・ドライバ３０１は、ＡＭＰ３０３から更新フラグがリセットされているＬＢＡを取得して、特定領域３０７のデータで仮想化領域３０９を更新する要求をアクセス・マネージャ３０５に送る。アクセス・マネージャ３０５は、図６のブロック２１９と同じ手順で仮想化領域３０９を更新する。
【００８７】
ブロック４１７では、ディスク・ドライバ１０５から更新の終了通知を受け取ったアクセス・マネージャ３０５は、アクセス・コントロール・ドライバ８９に更新が終わったＬＢＡを通知する。通知を受け取ったアクセス・コントロール・ドライバ８９は、更新が終わったデータに対応するＬＢＡの更新フラグをセットする。ブロック４０９におけるリード・アクセスの処理手順は、図７に示したファイル転送方式におけるリード・アクセスの処理手順に準じて行うことができる。
【００８８】
［その他の特徴］
これまで、特定領域５１、３０７はいずれか一つの仮想マシンだけが専有することを前提にして説明した。この場合、仮想化プログラム１７上で仮想マシン１１、１３、１５が時分割で動作する場合には、特定領域５１、３０７を専有するいずれか１つの仮想マシンだけがＨＤＤ２５に高速にアクセスすることができる。本発明では、特定領域５１、３０７を複数の論理ブロックに分割して、それぞれを各仮想マシンに割り当てることにより時分割で動作している複数の仮想マシンが特定領域５１を利用することができる。また、分割した特定領域５１、３０７を各仮想マシン１１、１３、１５に割り当てることで、特定領域５１、３０７を初期化する必要をなくして、リード・アクセスに対するデータ・ヒット率を高めることができる。
【００８９】
本発明では、ＨＤＤ２５が仮想化プログラムと複数の仮想マシンを構成するプログラムを格納する場合にも、ＨＰＡを設定することで仮想化領域５３、３０９のデータの安全を確保することができる。このような特徴は、１台のＨＤＤに設けられた仮想化領域５３、３０９にデータを格納する場合に限定されない。たとえば、ファイル・サーバやワーク・ステーションなどにはＲＡＩＤ（Redundant Arrays of Independent Disks）というシステムが採用されている。
【００９０】
ＲＡＩＤでは、複数のＨＤＤを仮想化して一つの論理ディスクを構築し、仮想化プログラムはそれらを１台のＨＤＤとして認識してアクセスすることができる。ＲＡＩＤを実現する方法には、ハードウエアによる方法とソフトウエアによる方法がある。ハードウエアによる方法に採用する場合は仮想化プログラムが各ＨＤＤにＨＰＡを設定するコマンドを送るように変更することで、本発明を適用することができる。また、ソフトウエアによる方法に採用する場合は、特定領域については冗長記録ができなくなる場合も生ずるが、非同期的に特定領域から冗長記録が行われる仮想化領域にデータを転送することにより、高速アクセスを優先する用途には有利である。
【００９１】
これまで本発明について図面に示した特定の実施の形態をもって説明してきたが、本発明は図面に示した実施の形態に限定されるものではなく、本発明の効果を奏する限り、これまで知られたいかなる構成であっても採用することができることはいうまでもないことである。
【符号の説明】
【００９２】
１０…コンピュータ
１１、１３、１５…仮想マシン
１７…仮想化プログラム
１９…ハードウエア
５１、３０７…特定領域
５３、３０９…仮想化領域
６１、６３、６５…仮想ＨＤＤ
６７、６９、７１…ゲストＯＳ
９３、３０３…アドレス・マッピング・テーブル（ＡＭＰ）
１００、３００…ディスク・アクセス制御システム
【図１】
0005468490.tif 000002
【図２】
0005468490.tif 000003
【図３】
0005468490.tif 000004
【図４】
0005468490.tif 000005
【図５】
0005468490.tif 000006
【図６】
0005468490.tif 000007
【図７】
0005468490.tif 000008
【図８】
0005468490.tif 000009
【図９】
0005468490.tif 000010
【図１０】
0005468490.tif 000011