AMDが,最新の「Rev. F」と呼ぶプロセッサに実装した「AMD Virtualization(AMD-V)」は,本来の目的である仮想化支援だけでなく,仮想化システムに必要となる高度なセキュリティを提供する。ここでは,AMD-Vの主な仮想化支援技術と仮想化システムを支えるセキュリティ強化技術について解説する。

仮想化システムと現状のギャップ

 元々,x86アーキテクチャは,同時稼働OSは1つだけであることが前提となっている。そのようなアーキテクチャ上で,仮想化システムは複数のOSを同時稼働させる。この2つは全く異なったパラダイムであり,仮想化ソフトウエアは,このパラダイム間のギャップを埋めるために多数の課題を克服して,仮想化システムを実現している。現在,x86の世界では,VMware製品を始めとするソフトウエアで実現する仮想化が主流だが,そこには,次のようなソフトウエアだけでは解決困難な課題も垣間見える。

 まず,仮想化ソフトが複雑になる。「VMM(Virtual Machine Monitor)」あるいは「Hypervisor」と呼ばれる仮想化ソフトは,高度で複雑な処理を実行している。この複雑な処理は,プロセッサへの負荷を増大させ,システムのパフォーマンス,安定性,そして信頼性に影響を与える。

 ゲストOSの改変も必要である。仮想化ソフトウエアは,ゲストとなる複数のOSを同時に正しく動作させるため,各ゲストOSの動作を把握し,調整する。そのためには,各ゲストOSが,システム状態を変更するような命令(レジスタ設定や特権命令など)を発行する前に,仮想化ソフトウエアがそれらを横取りし,適切な処理を実行する必要がある。

 x86プロセッサには,プログラムの特権レベルを「リング0」から「リング3」の4段階に分ける「リング機構」と呼ぶ仕組みがある。この仕組みによって,より高い特権レベルのプログラムは低い特権レベルのプログラムが実行しようとした特権命令を横取りできるようになっている。だが,x86プロセッサでは,システム状態を変更するような命令なのに特権命令でない命令が存在する。そのためそのままでは,ゲストOSが実行するシステム状態を変更する命令のすべてを,仮想化ソフトウエアが横取りすることはできないのである。

 そこで,x86アーキテクチャの世界では,ゲストとして動かすOSを改変する(パッチを当てる)ことで解決している。つまりゲストOSは,仮想化環境で動作するように何らかの変更が加えられているのである。その方法は,予めゲストOSにパッチを当てておく方法と,実行時に動的にパッチを当てる方法がある。前者の場合は,あらかじめ改変できるOSしかゲスト環境で動かせない。後者の場合は,処理性能の低下につながる。さらに,いずれの場合も,パッチを当てることで,ゲストOSの信頼性や保守性を損なう恐れも否定できない。

 上記の課題は,x86プロセッサ自身が,複数のOSを同時稼働できることを前提としたアーキテクチャになることで解決すべきである。これが,AMD-Vである。今までのような「無理してシステムを構築する」のではなく,無理のない自然なシステムとなる。結果として,安定性や信頼性が高く,より処理性能が向上するシステムになる(図1)。

図1●従来のソフトウエアのみによる仮想化と,AMD-Vを利用した仮想化の仕組みの違い
図1●従来のソフトウエアのみによる仮想化と,AMD-Vを利用した仮想化の仕組みの違い

プロセッサに仮想環境用モードを作る

図2●AMD-Vでは,従来のリング機構とは別に,ゲストを動かすモードを追加した
図2●AMD-Vでは,従来のリング機構とは別に,ゲストを動かすモードを追加した

 AMD-Vでは,1つのプロセッサで複数のOSを同時稼働できるよう,「ゲスト・モード」を新たに追加した。複数のゲストOSを管理する「ホスト」と,ホストによって管理・運用される「ゲスト」の2つの動作モードがある(図2)。正確には,AMD-Vには「ホスト・モード」は存在せず,ゲスト・モードでないモードを,便宜上ホスト・モードと呼んでいる。ホスト・モードは仮想化ソフトが動作するモード,ゲスト・モードはOSが動作するモードである。

 なお,「AMD-Vではホストのために,リング-1のようなより高い特権レベルを追加したのか」と聞かれることがある。これは正しくない。AMD-Vが実装されても,リング機構は従来通りである。新たに追加されたゲスト・モードは,従来のリング機構とは全く異なる動作モードだ。ゲスト・モードとホスト・モードのそれぞれに,リング0からリング3までの特権レベルがある。つまり,仮想化ソフトウエアとゲストOSの双方がリング0で動作する。