組み込み向け ハイパーバイザ技術の全体像
tag: 組み込み
2011年2月18日
●ハイパーバイザの定義
ハイパーバイザ(Hypervisor)とは,単一コンピューター上で二つ以上のOSを実行させるための仮想化ソフトウェアを指します.ハイパーバイザを使用すると,ハードウェア上でOSがそのまま稼働するのではなく,仮想的なハードウェアいわゆるバーチャル・マシン(以下VM)上でゲストOS が,稼働します.この VM とは,ハイパーバイザが提供する仮想的な実行環境のことです.
ハイパーバイザはこうしたVM を作成したり管理したりするので, バーチャル・マシン・マネージャ(Virtual Machine Manager:VMM)とも呼ばれます.
●ハイパーバイザの分類
■ホストOS 型ハイパーバイザ
図1 に示すように,ゲストOS は,ホストOSの中で稼働します.ユーザ視点から見ると,通常通りコンピューターのOS(ホストOS)を起動し,後から必要に応じてバーチャル・マシンの追加OS(ゲストOS)を起動することができます.ホストOSはバーチャル・マシンとしてではなく,ハードウェア上で直接稼働しているため,OS に何か手を加える必要がありません.この方式は,家庭用PC やデスクトップPCでの使用に適しています.
■ベアメタル型ハイパーバイザ
もう一つの仮想化ソリューションとしてベアメタル・ハイパーバイザがあります.図2に示すように,ホストOSを必要とせず,ハイパーバイザがハードウェア上で直接稼動します.この方式はIT サーバ分野で普及しています.
組み込みシステムに求められる仮想化への技術要求は,サーバ分野と似ており,双方ともホストOS型ハイパーバイザに明確なデメリットが二つ存在します.第一にセキュリティ・リスクが挙げられます.第二に,ホストOSがコンピュータ・リソースを消費してしまい,ゲストOSのパフォーマンスに影響が出ます.
●仮想化の種類
■準仮想化
準仮想化とはゲストOSのソース・コードに修正を加える仮想化手法です.これは簡単に言うと,仮想化に不都合な箇所を回避するためにリバース・エンジニアリングにより修正を加えるという意味です.回避が不可能だった場合は,ハイパーバイザへ処理を渡す命令に置き換えられます.ハイパーバイザへ処理が渡ると,ハイパーバイザはゲストOSが実行しようとした命令を仮想化します.準仮想化を利用する場合,ゲストOSにこうした修正が加える必要があるため,OSのソース・コードが開示されていなければなりません.もしソース・コードが開示されていない場合は,OSの重要な部分にバイナリ・パッチを当てることで実現できることもあります. MicrosoftのようなOSベンダは,コードの修正やリバース・エンジニアリングを認めていないことがありますので,この点も注意が必要です.
■完全仮想化
完全仮想化とはゲストOSを修正せずに仮想化する手法です.この場合,ゲストOSは大抵の処理をプロセッサ上で実行できますが,システム・レベルの命令を実行しようとするとハイパーバイザが介入します.別の言い方をすると,ゲストOSがハイパーバイザや他のOS に影響を与えうる命令を実行しようとすると,ハイパーバイザがこれをキャッチし,バーチャル・マシン上で仮想化します.
ゲストOSが特権命令をコールするたびにハイパーバイザが介入するため,仮想化のオーバーヘッドが生じます.つまりOSを修正する必要がない分,準仮想化に比べてシステムの負荷が大きくなります.
●Intel VT などのVirtualization Technology(仮想化支援機能) とは?
最近のプロセッサは,ハードウェア・ベースの仮想化支援機能VT(Virtualization Technology)を内蔵しています.例えばAtomなどIntel系のCPU には「Intel VT-x」,AMD系には「AMD-V」という名称で搭載されています.
技術的な観点から見ると,VT とは仮想化機能を使用するためのプロセッサモードと命令セットを指します.例えばハイパーバイザ上でゲストOS が動作しているとき,このゲストOS上においてあるプロセッサの特権命令や割り込み処理のような特定の命令が呼び出されると,プロセッサモードが切り変わり,ハイパーバイザに処理が遷移します.これを「VM Exit」と呼びます.ハイパーバイザでは,どの命令・どのイベントがExitされるべきかを定義しています.Exitの管理,すなわち仮想化そのものは,VT ではなく仮想化ソフトウエア(VMM ソフトウエア)によって実行されます.つまりVT は,仮想化を容易にしたり,セキュアにしたり,あるいは高速化したりするなど,ハイパーバイザを支援する機能といえます.このVT 機能は,完全仮想化・準仮想化の場合を問わず,どちらの場合でも利用可能です.
●組み込み向け仮想化システムのセキュリティ
汎用OSとRTOSを同居させる場合はセキュリティ面に注意してください.組み込みシステムや産業用装置では,大抵の場合RTOSを保護する必要があります.
RTOS は,外部へのインターフェースをあまり持たず,セキュリティ面での配慮からエンドユーザによって修正ができないようになっています.
一方,Windowsのような汎用OS は,コンセプトが異なります.もちろん安全であるべきなのですが,例えばエンドユーザが任意のアプリケーションやデバイス・ドライバをインストールしたり,OSをアップデートしたり,あるいは外部のネットワークにアクセスするといった危険性を持っています.この場合,デバイス・ドライバに含まれるバグや,マルウェアのような悪意のあるソフトに感染する可能性がゼロとは言えません.
こうした理由により,同一PCで動作している汎用OSからRTOSを保護する必要性が出てきます.ひとつのアイディアとしては,汎用OSを完全仮想化することで,セキュリティを強化することができます.完全仮想化により,ハイパーバイザは完全に汎用OSを掌握し,ハードウェア・リソースに対するあらゆるアクセスを監視することができます.つまりRTOSから切り離すことができるため,システムのセキュリティ・リスクを最小限に抑えることができます.
●リアルタイム性とマルチコアによる仮想化
伝統的に仮想化技術は,様々な創意工夫で実現されてきました.例えばシングル・コアの環境では,タイム・スライス方式で,一定時間ごとにOSを順番に切り替えて実行し,仮想化を実現する方法がとられました.ところがRTOS の割込み処理は余計な遅延時間なしに直ちに実行されなくてはなりません.そのためタイム・スライス方式では厳密なリアルタイム性の実現が難しい状況でした.
マルチコア・プロセッサの並列処理でこの問題は解決します.マルチコアの各CPU 上で別々のOSが並列して実行されることで,タイム・スライスの必要がなくなり,ハード・リアルタイム性を実現できる環境が整います.
●組み込みシステムの仮想化
組み込みシステムで注意すべき点はRTOS の存在です.リアルタイム性を保証するためには,RTOS がハードウェアへ直接アクセスできることが必須条件になります.そこで,ドイツのReal-Time Systems社が開発したReal-Time Hypervisor(以下RTH)を例に,組み込み向けハイパーバイザについて解説します.RTH はx86マルチコア・プロセッサの各コア上で複数OSを並列に稼働させるためのベアメタル型ハイパーバイザです.システム起動時にRTHが物理パーティショニングにより,CPU,メモリ,IRQ(Interrupt ReQuest::割り込み要求)などのハードウェア・リソースを各OSに割り振ります.起動後,Windowsなどの汎用OSはセキュリティ保証のため,Intel VT-xを利用し完全仮想化されます. 一方,RTOS は部分的に準仮想化され,ハードウェアへ直接アクセスします.部分的な準仮想化であるため,デバイス・ドライバの修正が必要なく,既存のソフトウェア資産をそのまま流用できす.
むらかみ・けい
(株)リンクス 代表取締役