PR
図3  IIMPカーネルとコンフィギュレーション処理の流れ<BR>コンフィギュレータとリンカーで,メモリー保護のための情報を静的に決定する手順。
図3 IIMPカーネルとコンフィギュレーション処理の流れ<BR>コンフィギュレータとリンカーで,メモリー保護のための情報を静的に決定する手順。
[画像のクリックで拡大表示]

メモリー保護も静的に

 μITRON4.0仕様に保護機能を追加した拡張仕様がμITRON4.0/PX(以下,PX仕様)である。PX仕様では,静的OSの考え方をメモリー保護にまで適用している。

 汎用OSにおけるメモリー保護は,保護の単位となるプロセスごとに独立したメモリー空間を与え(多重メモリー空間),他のプロセスのメモリー空間を見えなくすることで実現している。それに対してPX仕様では,メモリー空間は一つのままである。どのタスクからも同じメモリー空間が見えるが,アクセスできるアドレス範囲をタスクごとに別々に設定して,メモリー保護を実現する。こういった方式をとるのは,組み込みシステムにおける制約を考慮したからである。ここでいう制約とは冒頭で示したリソース制約やリアルタイム制約を指している。

 すなわちメモリー空間が一つなら,論理アドレスと物理アドレスを一致させることでアドレス変換が不要になる。これによって,アドレス変換のオーバーヘッドを回避し,変換テーブルのためのメモリー領域を節約できる。つまりリソース制約がクリアしやすくなる。また,ほとんどのマイクロプロセッサのメモリー管理ユニット(MMU)は,アドレス変換の結果をキャッシュすることで高速化を図っている。キャッシュにヒットした場合は高速だが,キャッシュミス時は大幅に処理時間が長くなる。これは,リアルタイム性を確保する上では大きな障害である。アドレス変換が不要で,メモリー保護のみを実現するMMU*2なら,キャッシュの仕組みを使わずに実装できる。厳しいリアルタイム制約もクリアすることが可能になる。

 では,なぜメモリー空間が一つでよいのか。それは「組み込みシステムは専用化されている」という特性を生かしているからである。実行するプログラムがあらかじめ決まっているなら,プログラムやデータをどの番地に置くかを設計時に完全に決めてしまえる。これらがあらかじめ決まれば,メモリー保護のための情報も静的に決定することが可能である。

 PX仕様では,何をどの番地に置くかの決定と,メモリーを保護するための情報の生成を,ツール(コンフィギュレータとリンカー)が行えるようにしている。(図3[拡大表示])は,IIMPカーネルにおけるコンフィギュレーション処理の流れである。ここでIIMPは,TOPPERS/JSPカーネル(第3回で紹介)をベースに,PX仕様に準拠する形で保護機能を追加したリアルタイム・カーネルである。

 コンフィギュレータはまず,静的APIを記述したシステム・コンフィギュレーション・ファイルを読み,オブジェクトの初期化情報などを入れたカーネル構成ファイルと,リンカーに対してメモリー配置方法を指示するリンクスクリプトを生成する(パス1)。ただし,何をどの番地に置くかを決めるのはリンカーの仕事である。コンフィギュレータは,何がどの番地に置かれるかをこの段階では知らないので,メモリー保護のための情報を生成できない。そこで,カーネル構成ファイルに生成するメモリー保護のためのテーブルには,ダミーデータを入れておく。

 次に,生成したカーネル構成ファイルとリンクスクリプトを用いて,リンカーを起動する。リンカーは,何をどの番地に置くかを決め,その情報を格納したマップファイルを作る。コンフィギュレータは,このマップファイルを読み込んで,再度カーネル構成ファイルとリンクスクリプトを作る(パス2)。今度は,何がどの番地に置かれるかがわかっているので,カーネル構成ファイル中にメモリー保護のためのテーブルを作成することができる。最後に,パス2で生成されたカーネル構成ファイルとリンクスクリプトを用いてリンカーを起動し,最終的なロードモジュールを作る。図には示していないが,リンカーの2回目の起動でもマップファイルを生成させ,コンフィギュレータが想定した通りのメモリー配置になっていることを確認するほうが安全である。

 ちなみにOSEK/VDX OS仕様でも,保護機能を導入しようという検討がなされている。ここでもプロセスごとに独立したメモリー空間を持たせるという考え方ではなく,PX仕様に近いアプローチをとることになりそうだ。

 こう見てくると,日本と欧州で独立して開発されたμITRONとOSEK/VDX OSの仕様に,共通点が多いことに驚かされる。独立に開発された仕様が共通点をもつということは,リソース制約が厳しく,高い信頼性とリアルタイム性が求められる組み込みシステム向けには,以上で紹介した静的OSの考え方が有効であることの証拠だと言えるだろう*3


高田 広章 Takada Hiroaki/名古屋大学大学院情報科学研究科 情報システム学専攻

東京大学の坂村健教授の研究室に在籍中からITRONプロジェクトに参画し,ITRON仕様のリアルタイムOSの開発と普及に務める。その後,豊橋技術科学大学を経て,現在は名古屋大学に在籍。研究テーマは,当初のリアルタイムOSから,徐々に組み込みシステム設計開発技術一般に広げている。最近では,ソフトとハードの境界分野に最も興味を持っている。自動車メーカとの共同研究を数年にわたって継続しており,組み込みシステムの適用分野の中では,自動車の制御システムが一番詳しい。