ハイブリッドOS
|
割り込み処理の応答性を最優先に
|
リアルタイムOSと汎用OSのそれぞれの長所を生かしハイブリッド化するときに問題になるのが処理性能の低下である。リアルタイムOSに比べて極端に性能が低いようでは使い物にならない。つまり複数のOSが協調動作することによるリアルタイム処理性能の低下を避ける必要が出てくる。
そこで,割り込み処理*2の応答性を優先するハイブリッド化の手法として,(1)リアルタイムOSと汎用OSで割り込みを分割管理する,(2)リアルタイムOSが割り込み処理を担い,拡張性のある汎用OSをリアルタイムOSのタスクとして併用する,の大きく二つが考えられている(図2[拡大表示])。
(1)の手法では,リアルタイム処理が必要なハードウェアをリアルタイムOSが担当し,ユーザー・インタフェースやインターネット接続機能などリアルタイム性が必須ではないハードウェアを汎用OSで制御する。例えばモーターを制御するマイコンをリアルタイムOSの管理下に,タッチパネルを制御するマイコンを汎用OSの配下に置く。リアルタイムOSと汎用OSの間でデータをやり取りしたいときは,プロセス(ここではタスク)間通信機構を用いる。
(2)の手法では,リアルタイムOSが原則としてすべてのハードウェアを管理する。こうすればリアルタイム性の問題は表面化しない。しかも,リアルタイム処理のノウハウが引き継げる利点がある。組み込み機器の開発者は,タスクの実行時間を数学的・経験的に予測し,所望の処理がなるべく時間内に終わるようにする。その上で,実際にハードウェアに組み込んだ状態で検証を重ねる。プログラム資産とノウハウを流用できなければ,検証に関する資産の再構築が必要になる。
(2)の手法で汎用OSは,応答時間が長いのでハードウェア管理を担わない。リアルタイムOSのタスクの一つとして追加する。ただしリアルタイムOSのタスクとして汎用OSを実装する場合は,汎用OSのカーネルを改変しなくてはならない。具体的には,本来ハードウェアを制御するための汎用OSのカーネルを,リアルタイムOSが用意するAPI向けに書き換える必要がある。
ちなみに汎用OSのタスクの応答時間が遅いのは,ソフトウェアを複数の層で仮想化・抽象化することで,ハードウェアに依存したプログラミングの必要性をなるべく少なくし互換性を維持していることに起因する(図3[拡大表示])。
具体的には,互換性を維持するために,システム・サービスやデバイス・ドライバは階層構造を採ることが多い。階層ごとにメモリー内容(バッファやメッセージ)のコピーが発生するため,リアルタイム処理性能はそれほど高くない。応答時間はミリ秒単位であることが普通。応答時間の保証も難しい。
一方の組み込みOSは,リアルタイム処理の妨げとなる階層構造は最小限に抑えている。タスクによっては,OSやデバイスドライバを経由せずにハードウェアに直接アクセスするほどだ。オーバーヘッドを嫌い,CPUに仮想メモリーの管理機構(MMU)が存在しても利用しないケースがほとんどである。MMUを使わずOSとタスクが同じ物理アドレスを共有することで,アドレス変換にかかる時間を省く。特にリソースの限られた組み込み機器では,OSやアプリケーションを構成するファイル自体を一つのモジュールにまとめてから機器に組み込むのが一般的である。
カーネルの機能を抑えて高速化
ハイブリッドOSでリアルタイム処理を担当する組み込みOSのカーネルは,プログラム・サイズが小さければ小さいほどよい。応答速度を決めるのは,詰まるところ処理を実行する際の命令数だからだ。このため,組み込みOSの中には,カーネルの機能を最小限に抑えた「マイクロカーネル」を採用する製品がある。
具体的には,割り込み処理とプロセス(ここではタスク)間通信のみをカーネルで実行し,システム・サービスはタスクとして実装する(図4[拡大表示])。このときカーネルは特権モードで,タスクはユーザーモ
ードで動く。アプリケーションやシステム・サービスのバグによってカーネル自体が停止してしまうことを避けられるというメリットがある。半面,システム・サービスをユーザーモードで実行するマイクロカーネルは,オーバーヘッドが大きい。特権モードとユーザーモードの切り替え(コンテキスト・スイッチ)に時間がかかるからだ。確かに,各種システム・サービスを特権モードで動かす「モノリシック・カーネル」なら,カーネルとシステム・サービスが特権モードで動作し,同じメモリー空間で動作するためオーバーヘッドは小さい。しかし組み込みOSでは,カーネルやシステム・サービスのプログラム・サイズそのものが汎用OSのそれよりも小さいため,モノリシック・カーネルと大差ない処理速度を実現できる*3。
用途特化の極小カーネルが登場
具体的な製品を見ると,例えば英Symbian社のSymbian OSはハイブリッドOSの形態にカーネルを改変した(図5[拡大表示])。携帯電話機に特化したOSとして,欧州やアジアで広く使われている携帯電話の無線通信方式「GSM(Global System for Mobile Commu-nications)」の通信制御に必要な機能のみをカーネルに実装している(同社はEKA2*4ナノカーネルと呼ぶ)。
具体的には,EKA2ナノカーネルではタスクのスケジューリング機構のみを特権モードで実行する。以前の「EKA1」カーネルで備えていた,メモリー管理の機構をカーネルから取り除いた。そのほかの機能は,EKA2ナノカーネル上で動くリアルタイムOSのタスクとして実装する。
携帯電話機は,通信制御用と,各種アプリケーション用の二つのCPUを備えるのが普通であるため,ハイブリッドOSが向く組み込み機器の代表格だ。一般にSymbian OS搭載機では,アプリケーション用のCPUをSymbian OSに充て,通信制御は別のリアルタイムOSで実装している。これを一つのCPUと一つのハイブリッドOSの組み合わせで動かせれば,部品点数や開発コストを減らせる。
次期バージョンでは,EKA2ナノカーネルのAPIを,μITRONなど既存のリアルタイムOSのAPIと互換にする「Real Time Compatibility Layer」を「オプションとして追加する」(シンビアンの梶原史雄プログラムマネージャー)。2CPUのシステムを1CPUのシステムに移植する手間を軽減できる。
セキュリティ優先で仮想マシンの導入も
ここにきて,組み込み機器のセキュリティ確保に,ハイブリッドOSの特徴を生かそうという動きが急浮上している。「インターネットに公開する機能をユーザー・インタフェースなど他の機能と隔離したいというニーズがある」(筑波大学大学院システム情報工学研究科コンピュータサイエンス専攻の追川修一助教授)からだ。
複数のOSやタスクが利用するメモリー空間を分割して,アクセス制御機構を組み込む。具体的には,CPUやOSが備えるメモリー管理機構を利用して,メモリーを単純にいくつかのブロックに分割してアクセス制御する。
なお,セキュリティ保護を優先する実装として,仮想マシンの概念を組み込みOSに取り入れようとする動きもある。マルチコアCPUを搭載するなどリソースに余裕のある組み込み機器で,マルチコアCPUを仮想マシンで論理的に分割して使う。仮想マシンによってメモリー空間を分割利用することで,タスクの実行領域(ドメイン)を保護する(図6[拡大表示])。例えば,インターネットに接続するタスク,ユーザー・インタフェースを提供するタスク,機械制御のタスク,といった具合に,バグの脅威の程度に応じてドメインを設ける。