(57)【要約】【課題】  仮想マシンモニタを複雑化することなく、しかもセキュリティの高い情報処理システムを提供する。【解決手段】  クライアント装置２は、１つのゲストオペレーティングシステムＯＳと複数のデバイスＤを備えたハードウェアＨＷとの間に１つの仮想マシンモニタＶＭを備えている。仮想マシンモニタＶＭは、ゲストオペレーティングシステムＯＳからのアクセスを受け入れるが、セキュリティ機能を実現するために必要なアクセスだけを捕捉し、セキュリティ機能の実現に必要のないアクセスはハードウェアＨＷに対して素通しとするように構成されている。【選択図】図１
2009223776.tif 000002
【特許請求の範囲】
【請求項１】
クライアント装置とウエブサーバ装置とが通信網で接続された情報処理システムであって、
前記クライアント装置は、１つのゲストオペレーティングシステムと複数のデバイスを備えたハードウェアとの間に１つの仮想マシンモニタを備えており、
前記仮想マシンモニタが、前記ゲストオペレーティングシステムからのアクセスを受け入れるが、セキュリティ機能を実現するために必要なアクセスだけを捕捉し、前記セキュリティ機能の実現に必要のないアクセスは前記ハードウェアに対して素通しとするように構成されていることを特徴とする情報処理システム。
【請求項２】
前記仮想マシンモニタは、前記セキュリティ機能を実現するために必要な制御及び暗号化を行うために必要なアクセスだけを捕捉するように構成されている請求項１に記載の情報処理システム。
【請求項３】
前記仮想マシンモニタは、前記ゲストオペレーティングシステムからのアクセスを監視し、前記セキュリティ機能を実現するために必要なアクセスか否かを判断する監視部と、
前記監視部が捕捉の必要性がないと判断したアクセスを前記ハードウェアの１以上の前記デバイスに素通しさせる素通しパスと、
前記監視部が捕捉の必要性があると判断したアクセスを捕捉して前記セキュリティ機能を実現するために必要な内容に改変する処理を実行して前記ハードウェアの１以上の前記デバイスに渡す捕捉改変部とを備えている請求項１または２に記載の情報処理システム。
【請求項４】
１つのゲストオペレーティングシステムと複数のデバイスを備えたハードウェアとの間に１つの仮想マシンモニタを備え且つウエブサーバ装置と通信網で接続されたクライアント装置のアクセス制御方法であって、
前記仮想マシンモニタを用いて、前記ゲストオペレーティングシステムからのアクセスを受け入れ、セキュリティ機能を実現するために必要なアクセスだけを捕捉し、前記セキュリティ機能の実現に必要のないアクセスは前記ハードウェアに対して素通しとするようにアクセスを制御することを特徴とするクライアント装置のアクセス制御方法。
【請求項５】
前記仮想マシンモニタは、前記セキュリティ機能を実現するために必要な制御及び暗号化を行うために必要なアクセスだけを捕捉することを特徴とする請求項４に記載のクライアント装置のアクセス制御方法。
【請求項６】
コンピュータを備えたクライアント装置において、１つのゲストオペレーティングシステムと複数のデバイスを備えたハードウェアとの間に１つの仮想マシンモニタを構築する手順と、
前記仮想マシンモニタに、前記ゲストオペレーティングシステムからのアクセスを受け入れるが、セキュリティ機能を実現するために必要なアクセスだけを捕捉し、前記セキュリティ機能の実現に必要のないアクセスは前記ハードウェアに対して素通しとする機能を実行させる手順とを前記コンピュータに実行させるための情報処理システム用プログラム。
【請求項７】
前記仮想マシンモニタを、前記セキュリティ機能を実現するために必要な制御及び暗号化を行うために必要なアクセスだけを捕捉するように構築する請求項６に記載の情報処理システム用プログラム。
【請求項８】
前記ゲストオペレーティングシステムからのアクセスを監視し、前記セキュリティ機能を実現するために必要なアクセスか否かを判断する監視部と、
前記監視部が捕捉の必要性がないと判断したアクセスを前記ハードウェアの１以上の前記デバイスに素通しさせる素通しパスと、
前記監視部が捕捉の必要性があると判断したアクセスを捕捉して前記セキュリティ機能を実現するために必要な内容に改変する処理を実行して前記ハードウェアの１以上の前記デバイスに渡す捕捉改変部とを前記仮想マシンモニタ内に構築する請求項６または７に記載の情報処理システム用プログラム。
【請求項９】
前記請求項６乃至８のいずれか１項に記載の情報処理システム用プログラムが記憶されたコンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、仮想マシンモニタを用いて一定のセキュリティを保つことができる情報処理システム及び情報処理システム用プログラム並びにクライアント装置のアクセス制御方法に関するものである。
【背景技術】
【０００２】
仮想マシン技術はメインフレームなどで古くから使われてきた技術であるが、近年のコンピュータ性能の向上により、安価なパーソナルコンピュータ上でも利用可能になってきている。これに伴い、従来のように高価なコンピュータを共有利用して有効活用するという目的だけでなく、コンピュータにセキュリティ機能などを追加する目的で仮想マシン技術が使われることが増えつつある［非特許文献１及び非特許文献２］。仮想マシンによりセキュリティ機能を実現する背景としては、近年のオペレーティングシステム（以下ＯＳと言う場合がある）の複雑化がある。例えば、Linux（登録商標）の2．4．1では１，０００行あたり６個以上のバグが含まれていることが知られている［非特許文献３］。そのためＯＳ自身にバグがないことを保証することは極めて困難になってきている。仮想マシンでは、ハードウェアの機能を活用することで比較的強固な保護機構を実現することが可能であり、例えＯＳにバグがあったとしても一定のセキュリティを保つことができるという利点がある。
【０００３】
このような利点を利用した技術の一つとして、特開２００８−３３５８４号公報［特許文献１］に示された情報処理システムに関する技術がある。この情報処理システムでは、プログラムを起動する前及び起動した後のいずれにおいても、クライアント装置内のオペレーティングシステムとプログラムとの間にセキュリティ仮想マシンを配置する。そしてセキュリティ仮想マシンは、プログラムが発行するファイルアクセスに関するシステムコールの内容を暗号化する等のセキュアな内容に改変してオペレーティングシステムに渡している。
【非特許文献１】「A Virtual Machine-Based Platform for Trusted Computing」 Proc. 19th ACM Symposium on Operating Systems Principles(SOSP ’03)、pp. 193−206 (2003).
【非特許文献２】「A Tiny Hypervisor to Provide Lifetime Kernel Code Integrity for Commodity OSes」Proc.21st ACM Symposium on Operating Systems Principles(SOSP ’07), pp. 335−350 (2007).
【非特許文献３】「An Empirical Study of Operating Systems Errors」,Proc.18th ACM Symposium on Operating Systems Principles(SOSP ’01), pp. 73−88 (2001).
【特許文献１】特開２００８−３３５８４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
仮想マシンモニタ（virtual machine monitor）でセキュリティ機能を実現する場合、仮想マシンモニタ自身にバグがないことが重要となる。一般にバグの数はコードの行数に比例するといわれており、仮想マシンモニタ自身をシンプルかつ小さく保つことが必要である。しかし従来の仮想マシンモニタでは、仮想マシンモニタ自身を小さくすることは容易ではない。例えばＴｙｐｅＩＩ型の仮想マシンモニタでは、ホストＯＳの上に仮想マシンモニタを構築するため、ホストＯＳにバグがあるとセキュリティ上の問題が生じる。一方ＴｙｐｅＩ型、もしくはハイパーバイザ型と呼ばれる方式の仮想マシンモニタでは、ハードウェアを直接制御するためホストＯＳは不要になるものの、複数の仮想マシンモニタを動作させるためには依然として複雑な機能が必要となる。例えば、複数仮想マシンモニタＶＭ間のスケジューリングやメモリ等の資源管理、各種Ｉ／Ｏデバイスの仮想化などが必要となり、ＯＳに匹敵するほど複雑になる傾向がある。
【０００５】
また特許文献３に示された情報処理システムのように、仮想マシンモニタをＯＳの上位に置いた場合には、ＯＳ自身にバグが存在している場合に生じるセキュリティ上の問題を解消することができない。
【０００６】
本発明の目的は、仮想マシンモニタを複雑化することなく、しかもセキュリティの高い情報処理システムを提供することにある。
【０００７】
本発明の目的は、仮想マシンモニタを複雑化することなく、しかもシステムのセキュリティを高めた情報処理システムを構築するために使用できるクライアント装置のための情報処理システム用プログラムを提供することにある。
【０００８】
本発明の目的は、仮想マシンモニタを複雑化することなく、しかもシステムのセキュリティを高めることができるクライアント装置のアクセス制御方法を提供することにある。
【課題を解決するための手段】
【０００９】
本発明は、クライアント装置とウエブサーバ装置とが通信網で接続された情報処理システムを対象とする。本発明では、クライアント装置が、１つのゲストオペレーティングシステムと複数のデバイスを備えたハードウェアとの間に１つの仮想マシンモニタを備えている。そして仮想マシンモニタは、ゲストオペレーティングシステムからのアクセスを受け入れるが、セキュリティ機能を実現するために必要なアクセスだけを捕捉し、セキュリティ機能の実現に必要のないアクセスはハードウェアに対して素通しとするように構成されている。
【００１０】
このように、仮想マシンモニタが、セキュリティ機能を実現するために必要なアクセスだけを捕捉し、セキュリティ機能の実現に必要のないアクセスはハードウェアに対して素通しとすると、仮想マシンモニタを小さく保ちつつセキュリティ機能を実現することができる。本発明で用いる仮想マシンモニタでは、ゲストオペレーティングシステムからハードウェアへのアクセスは基本的には素通しとして、直接アクセス可能とする。一方セキュリティ機能の実現に必要なアクセス制御や暗号化等を行うために最小限必要なアクセスだけを仮想マシンモニタで監視・捕捉する。これにより、仮想マシンモニタがハードウェア資源を完全に管理する必要がなくなる。また複数のオペレーティングシステムを同時に動かすためのスケジューリングやデバイスの多重化等の処理が不要となり、仮想マシンモニタを大幅にシンプルな構造にすることができる。
【００１１】
特に、仮想マシンモニタを、セキュリティ機能を実現するために必要な制御及び暗号化を行うために必要なアクセスだけを捕捉するように構成すると、ゲストオペレーティングシステムには依存しない形でアクセス制御を行って、しかも確実・強制的に暗号化を行うことができる。
【００１２】
なお仮想マシンモニタは、ゲストオペレーティングシステムからのアクセスを監視し、セキュリティ機能を実現するために必要なアクセスか否かを判断する監視部と、監視部が捕捉の必要性がないと判断したアクセスをハードウェアの１以上のデバイスに素通しさせる素通しパスと、監視部が捕捉の必要性があると判断したアクセスを捕捉してセキュリティ機能を実現するために必要な内容に改変する処理を実行してハードウェアの１以上のデバイスに渡す捕捉改変部とを備えた構成とすることができる。仮想マシンモニタをこのような構成要素で構成すると、仮想マシンモニタは非常にシンプルなものとなる。
【００１３】
本発明は、１つのゲストオペレーティングシステムと複数のデバイスを備えたハードウェアとの間に１つの仮想マシンモニタを備え且つウエブサーバ装置と通信網で接続されたクライアント装置のアクセス制御方法としても把握することができる。本発明のアクセス制御方法では、仮想マシンモニタを用いて、ゲストオペレーティングシステムからのアクセスを受け入れ、セキュリティ機能を実現するために必要なアクセスだけを捕捉し、セキュリティ機能の実現に必要のないアクセスはハードウェアに対して素通しとするようにアクセスを制御する。
【００１４】
また本発明を、コンピュータを備えたクライアント装置において実施するためのプログラムは、１つのゲストオペレーティングシステムと複数のデバイスを備えたハードウェアとの間に１つの仮想マシンモニタを構築する手順と、仮想マシンモニタに、ゲストオペレーティングシステムからのアクセスを受け入れるが、セキュリティ機能を実現するために必要なアクセスだけを捕捉し、セキュリティ機能の実現に必要のないアクセスはハードウェアに対して素通しとする機能を実行させる手順とをコンピュータに実行させる。
【００１５】
そしてこのプログラムは、前述の監視部と、素通しパスと、捕捉改変部とを前記仮想マシンモニタ内に構築する。
【００１６】
なお本発明の情報処理システム用プログラムがコンピュータ読み取り可能な記憶媒体に記憶されていてもよいのは勿論である。
【発明の効果】
【００１７】
本発明によれば、仮想マシンモニタを複雑化することなく、しかもセキュリティの高い情報処理システム、情報処理システム用プログラム及びクライアント装置のアクセス制御方法を提供することができる。
【発明を実施するための最良の形態】
【００１８】
以下、図面を参照して本発明を実施するための最良の形態の一例を説明する。図１は、本発明を実施した情報処理システムの構成の概略を示す図である。図１において、符号１で示したものはウエブサーバ装置であり、符号２で示したものはインターネット等の通信網３を介してウエブサーバ装置１に接続されたクライアント装置である。クライアント装置２は、ゲストオペレーティングシステムＯＳと、仮想マシンモニタＶＭと、複数のデバイスＤを含むハードウェアＨＷとから構成されている。クライアント装置２は、１つのゲストオペレーティングシステムＯＳと複数のデバイスＤを備えたハードウェアＨＷとの間に１つの仮想マシンモニタＶＭを備えている。この例では、ゲストオペレーティングシステムＯＳは、カーネル（オペレーティングシステムの基本機能を受け持つプログラム）によってデバイスドライバを構成しているものとする。そして仮想マシンモニタＶＭは、ゲストオペレーティングシステムＯＳからのアクセスを受け入れるが、セキュリティ機能を実現するために必要なアクセスだけを捕捉し、セキュリティ機能の実現に必要のないアクセスはハードウェアＨＷに対して素通しとするように構成されている。発明者は、このような機能を有する仮想マシンモニタＶＭを、準透過型仮想マシンモニタと命名している。特に、本実施の形態で用いる仮想マシンモニタＶＭは、セキュリティ機能を実現するために必要なアクセス制御及び暗号化を行うために必要なアクセスだけを捕捉するように構成されている。そのため、ゲストオペレーティングシステムＯＳには依存しない形でアクセス制御を行って、しかも確実・強制的に暗号化を行うことができる。本発明で用いる仮想マシンモニタＶＭは、図２に示すように、ハードウェア的に見た場合には、監視部Ｍと、素通しパスＰＴと、捕捉改変部Ｃとから構成されているものと考えることができる。監視部Ｍは、ゲストオペレーティングシステムＯＳからのアクセスを監視して、セキュリティ機能を実現するために必要なアクセスか否かを判断する。素通しパスＰＴは、監視部Ｍが捕捉の必要性がないと判断したアクセスをハードウェアＨＷの１以上のデバイスＤに素通しさせる。そして捕捉改変部Ｃは、監視部Ｍが捕捉の必要性があると判断したアクセスを捕捉してセキュリティ機能を実現するために必要な内容に改変する処理を実行し、改変したアクセスの内容をハードウェアＨＷの１以上のデバイスＤに渡す。
【００１９】
図３は、本発明のクライアント装置のアクセス制御を実行するプログラムのアルゴリズムを示すフローチャートである。まずステップＳＴ１では、仮想マシンモニタＶＭを用いて、ゲストオペレーティングシステムＯＳからのアクセスを受け入れる。次にステップＳＴ２で、セキュリティ機能を実現するために必要なアクセスか否かの判定を行う。そしてステップＳＴ２で、セキュリティ機能を実現するために必要なアクセスであると判定した場合には、そのアクセスを捕捉し、ステップＳＴ３へと進む。ステップＳＴ２で、セキュリティ機能を実現するために必要なアクセスではないと判定した場合には、ステップＳＴ４へと進んで、そのアクセスを対応するデバイスＤにそのまま渡す。ステップＳＴ３では、捕捉したアクセスをセキュリティ機能を実現するために必要な内容に改変する処理を実行する。その後ステップＳＴ４で、改変したアクセスの内容をハードウェアの１以上のデバイスＤに渡す。このアルゴリズムでは、ステップＳＴ１及びステップＳＴ２により監視部Ｍが構成され、ステップＳＴ２乃至ステップＳＴ４により捕捉改変部Ｃが構成され、ステップＳＴ２及びステップＳＴ４により素通しパスが構成されている。
【００２０】
次に、本実施の形態で用いる仮想マシンモニタＶＭで採用する準透過型方式の概要を説明する。準透過型の仮想マシンモニタＶＭでは、ゲストオペレーティングシステムＯＳからハードウェアＨＷへのアクセスは基本的には素通しとする。一方、セキュリティ機能を実現するために最低限必要なアクセスだけを仮想マシンモニタＶＭで捕捉する。例えば図１では、ゲストオペレーティングシステムＯＳのカーネル内で動作しているデバイスドライバが、ハードウェアＨＷのデバイスＤに対する各種入出力要求（Ｉ／Ｏ要求）を出している様子を表している。アクセスの多くは仮想マシンモニタＶＭで捕捉されることなくデバイスＤに直接アクセスしている。一方、セキュリティ機能を実現するためには、主に制御入出力（以下制御Ｉ／Ｏと言う）とデータ入出力（以下データＩ／Ｏと言う）の２種類が仮想マシンモニタＶＭによって捕らえる必要がある。
【００２１】
ここで制御Ｉ／Ｏとは、アクセスの対象となるデバイスＤの場所やアクセスの方法などを指定するためＩ／Ｏである。例えばディスクであれば、セクタのアドレスやセクタ数、読み込みと書き込みのどちらか等の情報がある。制御Ｉ／Ｏを仮想マシンモニタＶＭで捕捉する目的は、主に２つある。まず１つ目は、ゲストオペレーティングシステムＯＳから仮想マシンモニタＶＭが使用するメモリやディスクなどの資源に対する不正アクセスを防止するために、ゲストオペレーティングシステムＯＳが発行する制御Ｉ／Ｏに対してアクセス制御を行うことである。２つ目は、デバイスＤへのデータの読み書きの内容やタイミングを確実に捕らえて、漏れなく暗号化などの処理を行うために、ゲストオペレーティングシステムＯＳが発行した制御Ｉ／Ｏを記録することである。制御Ｉ／Ｏの捕捉は、アクセス制御やデバイスＤの状態把握が目的であるため、基本的にはＩ／Ｏの内容は改変されることなくそのままデバイスＤに送られる。
【００２２】
またデータＩ／Ｏとは、実際にデバイスＤに読み書きされるデータをやり取りするためのＩ／Ｏである。例えば、ディスクであれば読み書きするセクタの内容であり、ネットワークであればイーサネット（登録商標）のパケットなどが相当する。データＩ／Ｏについては、内容のバイト列を暗号化するなど内容を書き換える処理が必要となるため、仮想マシンモニタＶＭでいったん受け取ってから暗号化／復号化を施すという操作を行う。また、必要に応じてデバイスＤへのアクセスをエミュレーションする。
【００２３】
準透過型方式では、ゲストオペレーティングシステムＯＳは基本的にハードウェアＨＷの名前空間をそのまま使用する。例えば、ゲストオペレーティングシステムＯＳから見えるメモリの物理アドレス（ゲスト物理アドレス）は、ハードウェアＨＷの物理アドレス（マシン物理アドレス）と同じである。通常の仮想マシンモニタＶＭでは、複数のゲストオペレーティングシステムＯＳを同時に動かすために、ゲスト物理アドレスとマシン物理アドレスは異なるものを使用し、仮想マシンモニタＶＭによってアドレスの変換を行う。しかし準透過型方式では、ゲスト物理アドレスはマシン物理アドレスと原則として一致しているため、変換のオーバーヘッドを削減できる。ハードウェアＨＷの名前空間をそのまま使用するものとしては、物理アドレス、Ｉ／Ｏアドレス、ストレージの論理ブロックアドレス、各種バス（PCI バスやUSB バスなど）のアドレスなどがある。
【００２４】
次に各種Ｉ／Ｏアクセスの方法に対して、準透過型を実現する手法を説明する。ソフトウェアからＩ／Ｏ要求をデバイスＤに出す方法としては、主にＩ／Ｏ命令、メモリマップドＩ／Ｏ、DMA（Direct Memory Access）の３つが挙げられる。準透過型方式では、この３つのそれぞれの方法に対して、必要に応じてアクセスを捕らえて、アクセス制御や暗号化を行う。以下、それぞれの方式について、仮想マシンモニタＶＭでアクセスを捕捉する方式について述べる。
【００２５】
まずＩ／Ｏ命令は、Ｉ／Ｏアクセス専用のCPU 命令である。例えば、インテル社の３２ビットのマイクロプロセッサで用いられているマイクロアーキテクチャーであるIA-32ではIN 命令やOUT 命令によってＩ／Ｏ命令が行われる。IN 命令やOUT 命令では、Ｉ／Ｏ命令を行うＩ／Ｏ空間のアドレスを指定して、１命令毎に１〜４バイトの単位でデバイスＤへのアクセスを行う。多くの仮想マシンモニタＶＭでは、通常ゲストオペレーティングシステムＯＳから発行されたＩ／Ｏ命令を捕捉する機能を実現している。これはＩ／Ｏ命令は特権命令であるため、セキュリティやデバイスＤの仮想化を実現するためは仮想マシンモニタＶＭで捕捉することが必須であるためである。準透過型仮想マシンモニタＶＭでも、セキュリティ機能を実現するために必要な制御Ｉ／ＯやデータＩ／Ｏの捕捉を行う。一方、その他のＩ／Ｏに関しては仮想化の必要がないため、デバイスＤに対してそのままＩ／Ｏ要求を送る。これは仮想マシンモニタＶＭがゲストオペレーティングシステムＯＳの代わりにＩ／Ｏ命令を代行したり、可能であればハードウェアＨＷの仮想化機能を活用して、仮想マシンモニタＶＭを経由せずに直接デバイスＤに送られるように設定する。Ｉ／Ｏ命令によるアクセスの場合、同じＩ／Ｏアドレスへのアクセスであっても、読み込み時と書き込み時で実際にアクセスするレジスタが異なる場合がある。このため、必要に応じてゲストオペレーティングシステムＯＳからレジスタへの書き込みを捕捉して、その値を仮想マシンモニタＶＭのメモリ領域に保存しておく必要がある。Ｉ／Ｏ命令がデータＩ／Ｏであった場合、その内容は暗号化などの変換処理をする必要がある。しかし暗号化は一般にバイト単位ではなく、セクタ単位などある程度まとまった単位で行う必要がある。そこで、複数の連続するＩ／Ｏを仮想マシンモニタＶＭでバッファリングしてから暗号化／復号化などの変換を行い、その後Ｉ／Ｏをエミュレーションする必要がある。
【００２６】
メモリマップドＩ／Ｏは、専用のＩ／Ｏ命令を使わずに、通常のメモリアクセス命令によってＩ／Ｏを行う仕組みである。メモリマップドＩ／Ｏは、後述するシャドウページテーブルの仕組みを用いて、アクセスを捉える。すなわちメモリマップドＩ／Ｏとして設定されている物理アドレスに対しては、ページテーブルのエントリにおいて必要に応じて読み込み及び書き込みのいずれか、または両方を禁止する。これにより、ゲストオペレーティングシステムＯＳがメモリマップドＩ／Ｏの物理アドレス領域にアクセスを行うと、仮想マシンモニタＶＭに制御が渡される。仮想マシンモニタＶＭはアクセスしようとしてるアドレスと内容を命令エミュレーション等によって判別し、必要なアクセス制御や暗号化などの処理を行う。メモリマップドＩ／Ｏの捕捉はシャドウページテーブルによって行うため、アクセスの単位はページ単位となる。従って、仮想マシンモニタＶＭで捕捉する必要のないアクセスも捕捉されてしまう可能性がある。すなわち１つのデバイスＤの中でも捕捉が必要な場合とそうでない場合がある。２つのデバイスＤのMMIOが１つのページに載ってしまうこともある。これは性能低下を招く可能性があるが、セキュリティ上は問題はない。性能については、メモリマップドＩ／Ｏで用いるアドレスの配置を工夫するなどによって最適化できる場合がある。
【００２７】
DMA （Direct Memory Access ）は、CPU が介在することなく直接デバイスＤとメモリ間でデータのやり取りをするための仕組みである。すなわちDMA とは、機械語の命令群によらず、メモリとメモリまたはメモリとＩ／Ｏデバイスの間で直接データを転送することである。そのためDMA は、デバイスＤ及びメモリバスと接続されており、CPU から予め転送元と転送先の内容を設定したうえで、DMA の動作を開始すると、デバイスＤとメモリ間で自動的にデータ転送を行う。最近のDMA 転送では、メモリ上に置かれたディスクリプタの内容に従って自動的にDMA を繰り返し行う機能を持っているものが多い。図４にディスクリプタを用いたDMA 転送の例を示す。デバイスＤを制御するホストコントローラは、メモリ上におかれたDMA ディスクリプタの内容を参照して、転送先のメモリのアドレスや転送サイズを取得し、デバイスＤからのデータ転送をDMA ハードウェアＨＷで行う。ディスクリプタには複数のエントリがあり、１つのエントリ分の転送が終わるとホストコントローラは自動的に次のエントリに進むようになっている。転送の終了は割り込みやポーリングによってＯＳに通知される。準透過型仮想マシンモニタＶＭでは、アクセス制御やディスクの暗号化などを行うために、DMAによって転送されるデータの中身を捕捉・変換する必要がある。しかし、DMA 転送はハードウェアＨＷによって行われてしまうため、純粋な透過型では仮想マシンモニタＶＭで内容を捕捉することができない。
【００２８】
そこで準透過型では、図５に示すような、シャドウDMAディスクリプタという仕組みを用いる。シャドウDMAディスクリプタは、仮想マシンモニタＶＭが管理するDMAディスクリプタで、ゲストオペレーティングシステムＯＳが作成したDMAディスクリプタ（ゲストDMAディスクリプタ）の代わりとしてホストコントローラに設定する。シャドウDMAディスクリプタには、仮想マシンモニタＶＭ内部のメモリ領域がアドレスとして設定されており、デバイスＤとのデータ転送は、実際には仮想マシンモニタＶＭが管理するメモリ領域との間で行われる。仮想マシンモニタＶＭはゲストオペレーティングシステムＯＳが設定したDMAディスクリプタを適宜参照して、仮想的にホストコントローラの機能を実現する。すなわち、ゲストDMAディスクリプタの内容を解釈して、仮想マシンモニタＶＭのメモリ領域とゲストオペレーティングシステムＯＳのメモリ領域との間でデータのコピーを行う。このとき、データ転送はソフトウェア的に行うため、暗号化・復号化などの処理を行うことができる。仮想マシンモニタＶＭによる転送を行うためには、何らかのタイミングでゲストオペレーティングシステムＯＳから仮想マシンモニタＶＭに制御が移る必要があるが、これは読み込みと書き込みでタイミングが異なる。読み込み時には、デバイスＤから仮想マシンモニタＶＭのメモリへのデータ転送が先であるため、仮想マシンモニタＶＭではゲストオペレーティングシステムＯＳによるDMA 転送開始を支持する制御Ｉ／Ｏを捕捉する。このとき仮想マシンモニタＶＭは転送サイズを調べてシャドウDMA ディスクリプタの内容を適切に設定した後で、DMA 転送開始のＩ／ＯをハードウェアＨＷに渡す。DMA 転送が終わると、ゲストオペレーティングシステムＯＳは割り込みやステータスレジスタの参照などの方法で転送が正常に終了したことを確認する必要があるため、これを仮想マシンモニタＶＭで捕捉して、ゲストDMAディスクリプタに従ってデータを変換・転送する。書き込み時には、データの変換・転送が先であるため、DMAの開始を仮想マシンモニタＶＭで捕捉したときに、ゲストDMAディスクリプタを参照してゲストオペレーティングシステムＯＳのメモリ領域から仮想マシンモニタＶＭのメモリ領域にデータを転送・変換する。また、同時にシャドウDMAディスクリプタの内容も適切に設定する。その後DMA 転送の開始をハードウェアＨＷに通知する。DMA 転送の終了時には特に処理を行う必要はない。準透過型では、制御Ｉ／Ｏは監視するだけで基本的にはハードウェアＨＷに素通しとなるため、DMA におけるタイミングなどのパラメータ設定や転送開始などの制御は、基本的にはゲストオペレーティングシステムＯＳによって行われる。従って、仮想マシンモニタＶＭではDMA の制御をすべて行う必要はないため、仮想マシンモニタＶＭを簡略化できる。また、シャドウDMAディスクリプタは仮想マシンモニタＶＭのメモリ内に存在するため、ゲストオペレーティングシステムＯＳが不正に内容を書き換えることは出来ない。
【００２９】
準透過型仮想マシンモニタＶＭでは、メモリの仮想化を行うために、他の仮想マシンモニタＶＭでも用いられているシャドウページテーブルという方式を用いる。このシャドウページテーブルについては、「Xen and the Art of Virtualization」［Proc． 19th  ACM Symposium on Operating Systems Principles  (SOSP ’03)、 New York、 NY、 USA、 ACM、 pp． 164−177 (2003)］に詳しく説明されている。シャドウページテーブルでは、ゲストオペレーティングシステムＯＳが管理しているページテーブルに対して、シャドウと呼ばれるコピーを作成して仮想マシンモニタＶＭのメモリ領域内に保持する。プロセッサのハードウェアＨＷが用いるページテーブルは実際にはこのシャドウページテーブルを参照する。仮想マシンモニタＶＭは、必要に応じてゲストオペレーティングシステムＯＳのページテーブルの内容をシャドウページテーブルに反映させることにより、メモリの仮想化を行う。複数のゲストオペレーティングシステムＯＳをサポートする仮想マシンモニタＶＭでは、１つの物理アドレス空間を共有するために、ゲストオペレーティングシステムＯＳが使用する物理アドレス空間を実際のハードウェアＨＷの物理アドレス空間に変換する処理を行う必要がある。しかし準透過型の仮想マシンモニタＶＭでは、ゲストオペレーティングシステムＯＳが使用する物理アドレス空間は基本的には実際の物理アドレス空間と一致するため、この変換を行うオーバーヘッドを削減することができる。準透過型で仮想マシンモニタＶＭ自身が使用している物理メモリ領域へのアクセスを禁止するために、ゲストオペレーティングシステムＯＳのページテーブルの内容をシャドウページテーブルに反映する際にアクセス制御を行う。具体的には、ページテーブルのエントリに書かれている物理アドレスの値を検査して、仮想マシンモニタＶＭが使用している領域であったら、他の未使用領域のアドレスに変換してページフォルトが発生するようにする。また、起動時にＯＳに対して利用可能な物理アドレス領域を通知する仕組みを用いて、仮想マシンモニタＶＭが使用している領域は使用できないことを通知しておくことにより、意図的に仮想マシンモニタＶＭの領域にアクセスしようとしない限りは、従来のＯＳを改変なしにそのまま動作させることができる。
【００３０】
準透過型仮想マシンモニタＶＭでは、１つのゲストオペレーティングシステムＯＳと仮想マシンモニタＶＭがそれぞれ独立して動作している。そこでゲストオペレーティングシステムＯＳが行ったアクセスが仮想マシンモニタＶＭによって捉えられる場合や、その後に、仮想マシンモニタＶＭを動作させるためにはメモリやプロセッサなどの仮想化も必要となる。なおこの点は、本発明の要旨とは直接関係がないため説明を省略する。
【図面の簡単な説明】
【００３１】
【図１】本発明を実施した情報処理システムの構成の概略を示す図である。
【図２】仮想マシンモニタ内に構成される手段を示す図である。
【図３】本発明のクライアント装置のアクセス制御を実行するプログラムのアルゴリズムを示すフローチャートである。
【図４】ＤＭＡによるデータ伝送の様子を示す図である。
【図５】シャドウＤＭＡディスクリプタによるデータ伝送の様子を示す図である。
【符号の説明】
【００３２】
１  ウエブサーバ装置
２  クライアント装置
３  通信網
ＯＳ  ゲストオペレーティングシステム
ＶＭ  仮想マシンモニタ
ＨＷ  ハードウェア
Ｄ  デバイス
Ｍ  監視部
Ｃ  捕捉改変部
ＰＴ  素通しパス
【図１】
2009223776.tif 000003
【図２】
2009223776.tif 000004
【図３】
2009223776.tif 000005
【図４】
2009223776.tif 000006
【図５】
2009223776.tif 000007