組み込み向けリアルタイムOSの基礎知識 ―― プログラムの実行およびコンピュータ資源を管理するOSの種類や機能を整理する
● コンピュータ資源の仮想化
コンピュータ資源の仮想化とは,「資源の技術的詳細を隠ぺいして別の見え方(モデル)を提供し,そのモデルで資源を扱えるようにする」ことです.
一つのケースは仮想化により異なる対象が同じものであるかのように見せる場合です(図5).
図5 コンピュータ資源の仮想化(ファイル・システムの例)
データやデバイスといった異なる対象をファイルという同じ対象に見せることで,データやデバイスの違いを気にせず扱える.
もう一つのケースは,一つの対象が複数存在しているように見せる場合です(図6).例として次のものが挙げられます.
図6 コンピュータ資源の仮想化(メモリ仮想化の例)
利用可能なメモリの範囲やサイズはシステムごとにまちまちであるが,プログラムからは同じアドレス範囲で同じサイズのメモリを利用しているように見える.資源の仮想化によってプログラム上でその違いを気にすることなくプログラムを作成できる.
- データや周辺装置を抽象化するためのファイル
- 割り込みを抽象化するための割り込み管理機能
- メモリを仮想化するためのメモリ管理機能
仮想化されたモデルは,それぞれのソフトウェアやハードウェアなどの違いを気にすることなく,対象を扱う際に便利な機能を提供します.その代わり,対象の装置がいくら独自の優れた機能を持っていても,十分にそれを利用できなくなるかもしれません.当然ながら仮想化の機能を提供しているOSは,仮想化されたモデルと実際の資源との間の変換を行うことになりますから,処理のための負荷がかかることになります.
3.組み込みシステム向けOSに求められること
ここからは組み込みシステムのOSを考えます.組み込みシステムの特徴は,ハードウェアやアプリケーション・ソフトウェアだけでなくOSも目的向けに特化されるということです.例えば以下のような特徴は多くの組み込みシステム用OSが持っています注3.
注3;組み込みシステムは多岐にわたっており,前提が成り立たない場合もある.
● 単一のアドレス空間をすべてのプログラムで共通使用
組み込みシステムのソフトウェアはデバイスの性能を最大限引き出すような制御を行うことが主な目的となります.従って過度な仮想化は必要ありません.例えば,メモリの仮想化は通常行われません.単一のアドレス空間をすべてのプログラム単位で共通に使用します.
● 動的なメモリ割り付けは必要ない
システム上で動作するプログラムや利用するライブラリは,システム設計時点で決定し,動作中に構成が変わることはありません.そのため動的なメモリ割り付け注4の仕組みが必要なく,静的(固定的)な割り付けで十分となります.そしてシステム上で動作するすべてのプログラム,ライブラリ,OSなどは一つのモジュールとして静的にリンクされます.
注4;タスクやライブラリなどの配置先アドレスをシステム稼動中に決定し割り当てること.
● 余分な機能は省く
リアルタイム性(後述)を重視するため,余分な機能は省かれる傾向にあります.例えば資源の保護機能注5は相対的に優先順位が低くなります注6.
注5;あるプログラムで使用する資源が別のプログラムから不正に利用されることを防ぐ機能のこと.
注6;近年,開発の分業化が進み,ソフトウェア・パッケージを外部から調達するケースが増加していることから,保護機能が必要とされるようになっている.また,組み込みシステム向けに適した保護機能を持つリアルタイムOSの開発も進められている(19).
● 用途に特化したOSがある
用途に特化したOSがシステムに採用される場合もあります.そのようなOSとして例えば,車載機器向けのOSEK/VDX OS仕様(11),携帯電話向けのSymbian OS(8)などを挙げることができます.
● リアルタイム処理
OSはシステム外部の環境に依存したタイミングで制御を行う必要があります.なぜなら組み込みシステムは,センサからの信号入力やモータ駆動などの物理現象を制御することが多いからです.そのためOSには,重要な処理を即座に実行可能な仕組みが用意されている必要があります.この種の要求を満足させるためにリアルタイムOSという種類のOSが利用されることがあります.