組み込みハイパーバイザとは、組み込みシステムの要件をサポートするハイパーバイザのことです。
組み込みハイパーバイザの要件は、サーバーやデスクトップアプリケーション向けのハイパーバイザとは異なります。組み込みハイパーバイザは、デバイスの展開後にロードされるのではなく、組み込みデバイスに最初から組み込まれています。デスクトップ環境やエンタープライズ環境では、ハイパーバイザを使用してハードウェアを統合し、コンピューティング環境を互いに分離しますが、組み込みシステムでは、通常、さまざまなコンポーネントが連携してデバイスの機能を提供します。モバイル仮想化は組み込みシステム仮想化と重複する部分があり、いくつかのユースケースを共有しています。
組み込み仮想化の典型的な特性には、効率性、セキュリティ、通信、分離、リアルタイム機能などがある。[ 1 ]
ソフトウェア仮想化は1960年代後半から企業分野で主要なテーマとなってきましたが、組み込みシステムでの利用が始まったのは2000年代初頭になってからです。組み込みシステムにおける仮想化の利用、特にハイパーバイザとしての実装は、企業向けアプリケーションとは大きく異なります。組み込みハイパーバイザを効果的に実装するには、組み込みシステム特有の多くの課題に対処する必要があります。これらの課題には、組み込みシステムの高度な統合性、システム内の独立した機能ブロックが迅速に通信する必要性、リアルタイムかつ決定論的なパフォーマンスの必要性、リソース制約のあるターゲット環境、そして幅広いセキュリティと信頼性の要件などが含まれます。
ハイパーバイザは、オペレーティングシステムを含む他のソフトウェアが、基盤となるシステムハードウェアへの完全なアクセス権を持っているかのように動作できる、1つ以上のソフトウェア仮想化環境を提供します。実際には、そのようなアクセスはハイパーバイザによって完全に制御されています。これらの仮想環境は仮想マシン(VM)と呼ばれ、ハイパーバイザは通常、複数のVMを同時に管理することをサポートします。
ハイパーバイザーは、一般的に、スーパーバイザーモードまたは特権モードでのみ実行されるか(タイプ1)、あるいはオペレーティングシステムによって通常のアプリケーションとしてホストされるか(タイプ2)に応じて、タイプ1またはタイプ2に分類されます。
タイプ1ハイパーバイザは、仮想マシンの制御を維持するために必要な主要なシステムリソースを管理し、最小限の信頼できるコンピューティングベース(TCB)を提供します。タイプ2ハイパーバイザは通常、より汎用的なオペレーティングシステム内でアプリケーションとして実行され、システムリソースの管理にはOSのサービスを利用します。近年では、仮想化をサポートするハードウェアを活用するために、カーネル拡張機能がロードされることが多くなっています。
組み込みハイパーバイザは、多くの場合、組み込みシステム開発の要件をサポートするタイプ1ハイパーバイザです。詳細については、参考文献[ 2 ]および[ 3 ]を参照してください。
これらの要件は以下にまとめられています。
組み込みハイパーバイザは通常、複数の仮想マシン(VM)を提供し、それぞれのVMは仮想化されたソフトウェアが実行されるハードウェアプラットフォームをエミュレートします。VMは基盤となるネイティブハードウェアをエミュレートすることも可能で、その場合、実機で実行される組み込みコードは仮想マシン上で実行され、その逆も同様です。ネイティブハードウェアのエミュレーションは常に可能または望ましいとは限らず、代わりに仮想プラットフォームが定義される場合もあります。
VMが仮想プラットフォームを提供する場合、ゲストソフトウェアはこの環境で動作するように移植する必要がありますが、仮想プラットフォームはネイティブハードウェアに依存せずに定義できるため、仮想プラットフォームをサポートするゲストソフトウェアは、ハイパーバイザがサポートするさまざまな異なるハードウェアプラットフォーム上で変更せずに実行できます。
組み込みハイパーバイザは、準仮想化を用いるか、基盤となるCPUの仮想化機能を利用します。ハードウェアが仮想化をサポートしない場合は準仮想化が必要となり、多くの場合、コアアーキテクチャやゲストカーネルのコア部分に大規模な変更が加えられます。レジスタレベルでのハードウェアエミュレーションは、非常に複雑で処理速度が遅いため、組み込みハイパーバイザではほとんど見られません。組み込みシステムはカスタム設計であるため、これらの技術を必要とする、変更されていないバイナリのみのゲストソフトウェアをサポートする必要性は稀です。
組み込みハイパーバイザの場合、実装の規模と効率も重要な課題となります。組み込みシステムは、デスクトップやサーバープラットフォームに比べてリソース制約がはるかに厳しい場合が多いからです。また、ハイパーバイザは、基盤となるハードウェアプラットフォームのネイティブな速度、リアルタイム応答性、決定性、電力効率を可能な限り維持することが望ましいと言えます。
組み込みシステムアプリケーションの実装は、仮想化を不可欠な機能として組み込んだ、小型のマイクロカーネルと分離カーネルの設計に基づいていることが一般的です。これは、 2005 年にPikeOSで導入されました。 [ 4 ]これらのアプローチの例は、Open Kernel Labs (マイクロカーネルに続いて分離カーネル) やLynuxWorks (分離カーネル) などの企業によって作成されています。VirtualLogix は、専用の仮想マシンモニタ (VMM)に基づくアプローチの方がさらに小さく効率的であるという立場を取っているようです。この問題は現在も議論の対象となっています。[ 5 ] [ 6 ] [ 7 ] しかし、議論のどの側でも、主な論点は共通しています。つまり、(特定の機能レベルの場合) 実装の速度とサイズが非常に重要であるということです。たとえば、「...組み込み用途のハイパーバイザは、リアルタイムに対応できるだけでなく、リソースを節約できる必要があります。」
組み込みシステムは、ハードウェアのコストと技術的な制約により、一般的にリソースが非常に限られています。そのため、組み込みハイパーバイザは可能な限り効率的であることが重要です。マイクロカーネルと分離カーネルに基づく設計により、小型で効率的なハイパーバイザを実現できます。したがって、組み込みハイパーバイザのメモリ使用量は、実装の効率と提供される機能レベルに応じて、通常数十キロバイトから数百キロバイト程度です。数メガバイト(またはそれ以上)のメモリを必要とする実装は、一般的に受け入れられません。
タイプ 1 組み込みハイパーバイザの小さな TCB により、システムを非常に安全かつ信頼性の高いものにすることができます。[ 8 ]コード検査や体系的なテストなどの標準的なソフトウェアエンジニアリング技術を使用することで、このような小さなコードベースのバグの数を、合計 100,000~300,000 行にもなるハイパーバイザとゲスト OS の組み合わせで想定される欠陥のごく一部にまで減らすことができます。[ 9 ]
組み込みハイパーバイザに求められる最も重要な機能の一つは、プロセス間のリアルタイム通信をサポートするために不可欠な、セキュアなメッセージパッシング機構です。組み込み環境では、システムは通常、密接に結合した複数のタスクで構成され、その中には互いにセキュアな分離を必要とするものもあります。仮想化環境では、組み込みハイパーバイザが複数の仮想マシン(VM)間の分離をサポートし、強制します。そのため、これらのVMは、タスク間で低遅延通信を提供する機構へのアクセスを必要とします。
これらの機能を提供するとともに、すべてのシステムサービスを呼び出すために、プロセス間通信(IPC)メカニズムを使用することができ、望ましいレベルのVM分離が維持されるように実装する必要があります。また、システムパフォーマンスに大きな影響を与えるため、このようなIPCメカニズムはレイテンシを最小限に抑えるように高度に最適化する必要があります。[ 10 ]
組み込みハイパーバイザは、ソフトウェアが仮想マシンから抜け出せないように、メモリアクセスを含むシステムリソースを完全に制御する必要があります。そのため、ハイパーバイザはターゲットCPUにメモリ管理サポート(通常はMMUを使用)を提供する必要があります。ARM 、MIPS、PowerPCなどの多くの組み込みプロセッサは、デスクトップおよびサーバーチップベンダーに倣い、仮想化のためのハードウェアサポートを追加しています。しかし、依然として多くの組み込みプロセッサはこのようなサポートを提供しておらず、準仮想化をサポートするハイパーバイザが必要とされています。
ARMプロセッサの特徴は、そのアプリケーションクラスのプロセッサ設計のほとんどがARM TrustZoneと呼ばれる技術をサポートしている点にあります。これは、特権を持つ仮想マシンと特権を持たない仮想マシンをそれぞれ1つずつハードウェアでサポートするものです。通常、セキュアワールドでは最小限のTrusted Execution Environment(TEE)OSが実行され、非セキュアワールドではネイティブカーネルが実行されます。
組み込みハイパーバイザの最も一般的な使用例には、次のものがあります。[ 11 ] [ 12 ]
1. OS非依存性
組み込みシステムの設計者は、対象プラットフォーム固有のハードウェアドライバやシステムサービスを多数抱えている場合があります。共通のハードウェア設計を用いて、プラットフォーム上で複数のOSを同時に、あるいは連続的にサポートする必要がある場合、組み込みハイパーバイザを使用することで作業を大幅に簡素化できます。このようなドライバやシステムサービスは、仮想化環境向けに一度実装するだけで済み、その後はどのホストOSでも利用可能になります。また、このレベルの抽象化により、組み込み開発者は、ホストOSに意識されることなく、ハードウェアまたはソフトウェアのドライバやサービスをいつでも実装または変更することができます。
2. 単一プロセッサ上での複数オペレーティングシステムのサポート
通常、これはリアルタイムオペレーティングシステム(RTOS)を低レベルのリアルタイム機能(通信スタックなど)のために実行しつつ、同時に汎用OS (GPO) ( LinuxやWindowsなど)を実行してWebブラウザやカレンダーといったユーザーアプリケーションをサポートするために使用されます。その目的は、2つ目のプロセッサを追加する複雑さを伴わずに既存の設計をアップグレードすること、あるいは単に部品表(BoM)を最小限に抑えることかもしれません。
3. システムセキュリティ
組み込みハイパーバイザは、開発者が定義したあらゆるサブシステムに対して安全なカプセル化を提供できるため、侵害されたサブシステムが他のサブシステムに干渉することを防ぎます。例えば、暗号化サブシステムは、暗号化によって保護されるはずの情報が漏洩しないように、攻撃から強力に保護される必要があります。組み込みハイパーバイザはサブシステムを仮想マシン(VM)にカプセル化できるため、そのサブシステムとの間の通信に必要なセキュリティポリシーを適用できます。
4. システムの信頼性
サブシステムコンポーネントを仮想マシン(VM)にカプセル化することで、いずれかのサブシステムの障害が他のサブシステムに影響を与えないことが保証されます。このカプセル化により、あるVM内のサブシステムから別のVM内のサブシステムへの障害の伝播を防ぎ、信頼性が向上します。また、障害検出時にサブシステムを自動的にシャットダウンして再起動することも可能です。これは、組み込みデバイスドライバにとって特に重要です。組み込みデバイスドライバは、障害状態が最も多く発生する場所であり、OS障害やシステム不安定性の最も一般的な原因となるからです。さらに、新しいシステム設計で求められる信頼性基準に必ずしも準拠して構築されていないオペレーティングシステムをカプセル化することも可能です。
5. システムソフトウェアの動的更新
サブシステムソフトウェアやアプリケーションは、実行中のシステムで稼働させる前に、安全な仮想マシンにダウンロードすることで、安全にアップデートおよび整合性テストを行うことができます。万が一このプロセスが失敗した場合でも、システムの動作を停止することなく、元のソフトウェアサブシステム/アプリケーションを再起動することで、システムを以前の状態に戻すことができます。
6. 既存コードの再利用
仮想化により、開発および検証済みのOS環境で既存の組み込みコードをそのまま使用できる一方、開発者は新しいサービスやアプリケーションのために別の仮想マシンで異なるOS環境を使用できるようになります。特定のシステム構成向けに作成された既存の組み込みコードは、メモリ、I/O、プロセッサといったシステムリソースを独占的に制御する場合があります。しかし、仮想マシンを使用することで、元のシステム構成と整合性のあるリソースマップと機能を提供し、既存のコードを新しいハードウェア設計や変更されたハードウェア設計の具体的な仕様から効果的に切り離すことができるため、I/Oやメモリの異なるシステム構成でも、このコードベースをそのまま再利用できます。
オペレーティングシステムのソースコードにアクセスできる場合、準仮想化は、ハードウェア仮想化をサポートしていないプロセッサ上でOSを仮想化するためによく使用されます。これにより、OSがサポートするアプリケーションは、新しいハードウェアプラットフォーム設計においても、変更や再コンパイルなしで実行できます。
ソースコードへのアクセスがなくても、レガシーバイナリコードは、 AMD-V、Intel VTテクノロジー、仮想化をサポートする最新のARMプロセッサなど、ハードウェア仮想化をサポートするプロセッサ上で動作するシステムで実行できます。[ 13 ] システムハードウェアが同等の機能を提供すると仮定すると、レガシーバイナリコードは、組み込みハイパーバイザによってすべてのリソースマッピングが処理されるVMで完全に変更されずに実行できます。
7. 知的財産権の保護
貴重な独自IPは、例えばOEM顧客によるさらなる開発作業のために組み込みプラットフォームが出荷される際に、盗難や不正使用から保護される必要がある場合があります。組み込みハイパーバイザを使用することで、保護が必要なIPを含むシステム内の特定の部分への他のシステムソフトウェアコンポーネントのアクセスを制限することが可能になります。
8. ソフトウェアライセンスの分離
あるライセンス体系の下で動作するソフトウェアIPは、別の体系の下で動作する他のソフトウェアIPから分離することができます。たとえば、組み込みハイパーバイザは、GPLの対象となるオープンソースソフトウェアとプロセッサを共有するプロプライエタリソフトウェアに対して、分離された実行環境を提供できます。[ 14 ]
9. アプリケーションのユニコアシステムからマルチコアシステムへの移行
新しいプロセッサがマルチコアアーキテクチャを利用して性能を向上させるにつれて、組み込みハイパーバイザは基盤となるアーキテクチャを管理し、新しいマルチプロセッサシステム設計を効率的に活用しながら、従来のアプリケーションやオペレーティングシステムにはシングルプロセッサ環境を提供することができます。このようにして、ハードウェア環境の変更があっても、既存のソフトウェアを変更する必要はありません。