特集
» 2008年11月14日 00時00分 UPDATE

組み込み仮想化技術解説:組み込みシステムに吹く“仮想化”の風 (1/2)

リアルタイム処理への応用を例に、組み込み分野における『仮想化技術』の適用イメージと、そのメリット・デメリットについて解説する

[加藤 秀一 株式会社ウェルビーン,@IT MONOist]

 「仮想化技術」という言葉を聞くと、ほとんどの方はデスクトップPCやサーバでの利用を頭に思い描くことでしょう。しかし、仮想化技術はデスクトップPCやサーバ用途だけでなく、組み込み分野でも“十分期待されるもの”として注目されつつあります。

 仮想化技術とは、“ハードウェアが1つであることをソフトウェア的に隠ぺいし、論理上複数あるかのように見せ掛けることで、それぞれで異なるOSやアプリケーションを動かすことを可能にする技術”です。

 本稿ではいくつかの仮想化技術の実装方法を説明した後、組み込みに適したシステム構成を紹介しつつ、“組み込み分野の視点から見た仮想化技術によって得られるメリット”について考えていきたいと思います。

仮想化技術の実装形態

 仮想化技術の実装でよく利用されている形態には、「HostOS型」と「ハイパーバイザー型」の2種類があります。これらは、仮想化技術の実装レイヤに違いがあります。

 HostOS型は、HostOSの中に「仮想マシン(Virtual Machine)」を実装しており、その仮想マシン上で実行されるOSを「GuestOS」と呼びます(図1)。

HostOS型 図1 HostOS型

 ハイパーバイザー型は、ハードウェアの上に仮想化技術を実現する「ハイパーバイザー(Hypervisor)」と呼ばれるレイヤが存在し、すべてのGuestOSはハイパーバイザー上で実行されます(図2)。

ハイパーバイザー型 図2 ハイパーバイザー型

 このように、仮想化技術は実装方式にかかわらず、複数のGuestOSを動作させることが可能です。各GuestOSは仮想マシンやハイパーバイザーから割り当てられた論理的なハードウェア資源を使い、独立したOSのように実行されます。なお、GuestOSに割り当てられる論理的なハードウェア資源のことを「仮想デバイス」と呼びます。

完全仮想化型と準仮想化型

 また、仮想化技術はGuestOSによる仮想デバイスの操作方法により、「完全仮想化型(Full-Virtualization)」と「準仮想化型(Para-Virtualization)」の2種類に分類されます。

 完全仮想化型は、GuestOSを修正せずに実行する方式です。完全仮想化型ではハードウェアのエミュレーション機能の提供や、GuestOSを実行時にバイナリ・レベルで変換する方法などで実現されます。一番の特長はGuestOSを無修正で実行可能なことですが、その半面、仮想化技術を実装するソフトウェア側の負担が大きくなります。

 一方の準仮想化型は、GuestOSに対して仮想環境に合わせたカスタマイズを行うことで実行します。主なカスタマイズの方法は、仮想デバイス用のデバイスドライバを用意することです。通常のデバイスドライバはレジスタを直接操作してハードウェアの制御を行いますが、準仮想化方式ではレジスタ操作の代わりに、仮想マシンやハイパーバイザーに対してハードウェアの制御を要求します。よくある実装方法として、「ハイパーバイザーコール」と呼ばれる手段をGuestOSに用意し、GuestOSはこの機能を使ってハードウェアを制御します。この方式はGuestOSの修正というコストが発生しますが、ハードウェアのエミュレーションを行う完全仮想化に比べると、高速に実行できる利点があります。

組み込み分野への応用

 さて、ここまで仮想化技術の概要について説明してきましたが、ここからが本題です。これまで説明したいくつかの仮想化技術を組み込み分野へ応用する方法について実際に考えていきましょう。

 組み込みシステムの機能要件はさまざまですが、本稿では1つの例として“リアルタイム処理への応用”をテーマに解説していきます。

 ここでは、リアルタイム処理への応用を以下のようなシステム構成で構築することにします。

(1)HostOS型を採用
(2)HostOSとしてRTOS(Real-time operating system)を使用
(3)GuestOSとしてLinuxを実行する
(4)準仮想化方式による仮想マシンの実装
(5)パススルー方式とハイパーバイザー方式によるハードウェア制御

 この構成は、RTOSの利点を最大限活用することと、RTOSに不足する機能をLinuxで補完することを目的としています。要するにRTOSとLinuxの「いいとこ取り」を目指したシステムです。

 この構成を取るメリットについて以降で説明していきます。

(1)HostOS型を採用/(2)HostOSとしてRTOSを使用

 HostOS型では、システム全体の制御をHostOSが担います。システムの中核となるHostOSをRTOSで実装することにより、RTOSの利点を最大限活用します。

 また、RTOSを使用するメリットは何といってもリアルタイム処理能力の高さにあります。リアルタイム処理では、「タスクスケジューリング」と「割り込みイベントの扱い」が重要な技術要素になります。以降で、これらの技術についてHostOS型での扱いを説明します。

タスクスケジューリング

 HostOS型の場合、Linuxや仮想マシンはRTOSの1タスクとして動作します。多くのRTOSでは優先度ベースによる「タスクスケジューリング方式」が採用されていますが、本システムではこれを利用してGuestOSを“最低優先度のタスク”として実行します。Linuxを最低優先度に設定することにより、リアルタイム処理を行うほかのタスクを優先的に実行可能にします。つまり、Linuxはリアルタイム処理を行う必要がないときのみ実行されることになります。

 図3を例にタスクスケジューリングを説明します。

タスクスケジューリング 図3 タスクスケジューリング

 図3では、以下の流れでタスクスケジューリングが行われています。

  1. [RTOS Task-2]を実行中に割り込みイベントが発生し、割り込みハンドラが呼び出される
  2. 割り込みハンドラを実行した結果、優先度の高い[RTOS Task-1]がアクティブ状態になる
  3. [RTOS Task-1]の処理が終わり、[RTOS Task-2]が1.での中断点から再開される
  4. [RTOS Task-2]の処理が終わり、RTOSで実行するタスクがなくなったので、[Linux Task]がアクティブとなる

割り込みイベントの扱い

 割り込みイベントはすべてHostOSで最初に受け付けることとします。GuestOSが動作中であっても、最初にHostOSが割り込みイベントを受けた後、HostOSとGuestOSのどちらで処理をするかを判断します。本システムでは、RTOSが必ず最初に割り込みイベントを受け付けることになりますので、応答速度が要求される割り込みイベントへの対応が実現可能です。

 図4に割り込みイベント処理の例を説明します。

割り込みイベント処理 図4 割り込みイベント処理

 ここでは以下の流れで割り込みイベントを処理します。

  1. [Linux Task]を実行中に割り込みイベントが発生し、RTOSの割り込みハンドラが呼び出される
  2. ROTSの割り込みハンドラで処理した結果、[RTOS Task-1]がアクティブとなる
  3. [RTOS Task-1]の処理が終了したので、1.での中断点から[Linux Task]を再開する
  4. 割り込みイベントが発生し、再度RTOSの割り込みハンドラが呼び出される
  5. Linuxで扱う割り込みイベントのため、[Linux Task]に対して割り込みの通知が実行され、Linuxの中で割り込み処理が実行される

 RTOSでの処理中にLinuxの割り込みイベントを受け付けると、リアルタイム処理に関係ない原因で処理の遅延が発生してしまいます。このような遅延を避けるために、RTOSのタスクが実行されている間はLinuxの割り込みイベントをマスクします。つまり、Linuxの割り込みイベントは、Linuxが実行されている間だけ受け付け可能とします。

 Linuxの割り込み処理に遅延が発生してしまいますが『リアルタイム処理はRTOSで行うこと』と、割り切ることによりRTOSの処理を優先します。

       1|2 次のページへ

Copyright© 2017 ITmedia, Inc. All Rights Reserved.