エンジニアなら知っておきたい仮想マシンのしくみ

第5回 x86プロセッサの仮想化支援機能Intel VT & AMD-V

この記事を読むのに必要な時間:およそ 4.5 分

前回は,システム仮想マシンを実現するための条件,その古典的な実装方法を紹介しました。また,それらのアプローチをx86システムに適用する場合,どのような障壁があるかについて説明しました。

今回は,従来のx86プロセッサにおける仮想化の問題点を解決するために追加された⁠仮想化支援機能⁠がどのようなものであるかを紹介します。

仮想化支援機能の概要

x86プロセッサの仮想マシンソフトウェアの実装が困難だった中,プロセッサを供給するインテルおよびAMDは,プロセッサ自体に仮想化支援機能を追加しました。それが,インテル製のプロセッサに搭載されたIntel VT-x,およびAMD製のプロセッサに搭載されたSVMです。

リング0で動作するOSをも支配するVMM専用モード

前回解説したtrap-and-emulateによるシステム仮想マシンを実装するためには,仮想マシンモニタ(VMM)が,ゲストOSのカーネルによる都合の悪い処理を全てトラップできる必要があります。

しかし,これまでx86プロセッサのために設計・開発されたオペレーティングシステムは,プロセッサの特権レベルであるリング0を占有するように作られてきました。

このため,ゲストOSをリング0から他のリングに移し実行する⁠ソフトウェアVMM⁠が作られました。プロセッサの開発元であるインテルおよびAMDは,根本的な解決策として,プロセッサに「リング0で動作するオペレーティングシステムのカーネルをも支配できる」新たなモードを追加したのです。

これにより,ゲストOSをこれまでと同じリング0で実行していても,仮想マシンモニタがゲストOSの動作を制御できるようになりました。このため,ソフトウェアVMMが行っていた⁠ゲストOSのカーネルをリング1に移して実行させる処理⁠自体が不要となりました。また,ソフトウェアを動作させるリングレベルに変更が生じないため,リング0とリング1で異なった動作をするような命令に対する配慮もいりません。

図1 仮想化支援機能を利用した仮想マシンの実装

図1 仮想化支援機能を利用した仮想マシンの実装

すべてのセンシティブ命令のトラップが可能に

Intel VTやAMD-Vでは,従来のリングプロテクションではトラップできなかったセンシティブ命令も,全てトラップできるようになっています。このため,従来のx86プロセッサ用ソフトウェアVMMが行っていた,バイナリ・トランスレーションなどの回避処理が不要になりました。このためtrap-and-emulateによる仮想マシンモニタの実装が比較的容易となっています。

Goldbergらが論じた「仮想化可能なアーキテクチャ」

これらの仮想化支援機能は,既存のx86プロセッサの機能をそのまま継承しつつ,Goldbergらによる⁠仮想マシンモニタのあるべき姿⁠を実現できるよう,プロセッサ自体に仮想マシン実行用モードを追加したものである,ととらえることができます。

x86プロセッサで初めてリングプロテクションの機能が実装されたのは,1985年にリリースされたIntel 80386でした。Intel 80386以後,x86プロセッサで動作するオペレーティングシステムは,リング0~3の4段階の保護を前提として設計・開発されてきました。x86プロセッサのリングプロテクションが実装されてから20年近くが経っていましたが,仮想化支援機能の登場によって,久々に特権にかかわる機構にメスが入ったことになります。

著者プロフィール

長谷川猛(はせがわたけし)

(株)SRAで7年間のシステム構築&提案を経験したのち,Fusion-ioのセールスエンジニアを経て,フリーランスエンジニアとして活動中。『LDAP Super Expert』(技術評論社)に寄稿したほか,『Xen 徹底入門』(翔泳社)および『萌え萌えうにっくす!UNIX ネットワーク管理ガイド』(毎日コミュニケーションズ)の共著者のひとりである。

スノーボード,ごまラーメン,飼い犬のミニチュアシュナウザー「ラピス君」が大好き。

コメント

コメントの記入