本システムではLinuxをGuestOSとして実行することにより、RTOSに不足しているLinuxならではのメリットが享受できます。
最近ではRTOSでもTCP/IPへの対応は当たり前になっていますが、より上位で動作するプロトコルに関しては、対応が十分とはいえません。Linuxは最初から豊富なプロトコルに対応していますので、システム設計の可能性が広がります。
これもプロトコル同様、Linuxでは最初から多くのファイルシステムが利用可能です。
Linuxには、すでに多くのデバイスドライバが存在しています。リアルタイム性能が要求されないデバイスであれば、Linuxで用意されたドライバを使用することにより、作業工数を減らすことができます。既存ドライバの利用は、後述する「パススルー方式」によって実現されます。
最近のアプリケーションは開発規模が大きくなる傾向がありますが、RTOSで大規模なマルチタスクシステムを構築すると、メモリ破壊などの原因追究が困難な場合があります。これは、RTOSが本格的なメモリ保護機能を用意していないことによる、デバッグの困難さに起因します。この点についてはLinuxの方が作りやすいといえます。大規模アプリケーションをLinux上で実装することにより、開発効率を上げることが期待できます。また、Linuxに関する情報がWebや書籍など豊富に存在することは、開発者にとって非常にありがたいことです。
仮想マシンの実装をシンプルにするために、準仮想化方式を採用し動作可能なGuestOSは1つとします。完全仮想化による「デバイスエミュレーション」などの技術は、実装が複雑でソフトウェアの負担も大きくなります。よりシンプルな実装方式を採用することにより、低負荷で安定した仮想マシンを構築します。
これも準仮想化方式と同様に仮想マシンの実装をシンプルにする目的で採用します。ハイパーバイザー方式はすでに説明済みですので、パススルー方式についてのみ説明します。ここでのパススルー方式とは、“HostOSがGuestOSに対して、限定したハードウェアへのアクセスを可能にする方式”です。GuestOSがハードウェアを直接操作できますので、既存のデバイスドライバが使用可能になります。本システムではパススルー方式を採用することで、Linuxの豊富なデバイスドライバを使用可能にしています。
ここまでで、RTOSとLinuxの同時利用と実装方式に関するメリットについて説明しましたが、そのほかにも仮想化システムならではの利点もあります。
Linuxを使用した開発では、GPLへの準拠について考慮する必要があります。GPLへの準拠に関して真っ先に思い浮かぶのは、ソースコードの公開手段を用意することです。しかし、製品開発においてはセキュリティ関連の処理など、公開しにくい部分が存在することがあります。このような場合では、RTOSとLinuxでうまく役割分担を行うことで対応が可能です。例えば、暗号関連の処理などは、暗号キーの保存/操作や暗号通信の部分をRTOS側に処理を実装します。LinuxとRTOSがシステム構成上、明確に分離されていればRTOSの処理はGPLの適用範囲外として扱えます。
開発プラットフォームをRTOSからLinuxへ変更する計画がある開発現場では、本システムを利用することで、いきなりすべてをLinuxで開発する必要はありません。最初は過去の資産を有効利用して開発を行い、再利用の比率を徐々に減らすことで、開発プラットフォームの移行を緩やかに行えます。
これまでRTOSとLinuxの「いいとこ取り」について説明してきましたが、仮想化技術にも当然のようにデメリットが存在します。
RTOSのみで構成されるシステムと比較すると、CPU性能やメモリ容量に対する要求条件が大きくなります。これは仮想化システムを使用するためというより、Linuxを使用するために必要とされるものです。仮想化に関しては基本的な機能だけなら数Mbytes程度で実装可能です。Linuxを搭載可能なハードウェア条件を満たしていれば、特に問題はありません。
単一のOSで動作させる場合と比較すれば、HostOS/GuestOSともにオーバーヘッドが発生することは否めません。機能面ではRTOSに対して発生するオーバーヘッドが特に気になるところではないでしょうか。RTOSに対しは、GuestOSとHostOSのタスク間でのタスク切り替え処理にて、多少のオーバーヘッドが発生します。割り込みイベントに関しても、HostOS/GuestOSのどちらで扱うか判断する必要からオーバーヘッドが発生します。この点については、システムとして許容範囲内であるか否かを最初に判断する必要があります。
仮想化技術を利用するうえでは、無視できないデメリットです。仮想化技術にかかわらず、複数のOSを扱う時点で工程が煩雑になるのは明確です。本問題の解とまではいえませんが、仮想化技術を使用するシステム設計において、注意するべきことがあります。それは、“RTOSとLinuxの各OSで実装する機能を明確に割り振り、なるべく機能上の依存性をなくすこと”です。両OS間での依存性が少ないほど、開発作業において個別に作業を進めることが可能です。またRTOSとLinuxを同時利用すると、RTOS側でのバグがLinux側に影響を及ぼす問題や、その逆の問題が必ず発生します。このような問題を避けるためにも、相互依存性はなるべく排除した方が懸命です。
最後に、今回考えた仮想化システムを有効利用できる分野について考えてみたいと思います。本稿で考えた仮想化システムの特長は、RTOSとLinuxの「いいとこ取り」です。「リアルタイム処理」と「多機能」をキーワードにして応用分野を考えてみましょう。
FC(Fibre Channel)/Gigabit Ethernetなどの高速な通信I/Fを使ったリアルタイム処理を実行する必要があり、なおかつユーザーに対して管理用のUIを提供する必要がある場合が想定されます。このような条件下では、リアルタイム処理をRTOS、UI部分をLinuxで実装することが可能です。UIに関してはGUIを使うか、Webサーバ形式で提供するかを選択することも可能です。
障害発生時に迅速なシステム制御や情報収集を行う必要があり、主にLinuxがメインで動作しているシステムに対して有効です。Linux上で障害が発生したときにRTOS側でシステム情報の収集/退避を実行します。RTOS側に通信機能やファイルシステムを用意しておけば実現可能です。
本稿では組み込み分野における、仮想化技術の応用について考えてみました。仮想化技術を使うことにより、多機能なリアルタイムシステムを実現する可能性が示せたと思います。仮想化技術の組み合わせによっては、ほかの機能要件にも対応することが期待できます。組み込みシステムの要素技術として、仮想化技術を選択肢に入れるのも面白いかもしれません。
Copyright © ITmedia, Inc. All Rights Reserved.