最新T-Kernelの活用テクニック(1) ―― 小規模システム向けμT-Kernelとは何か
● 動的ロードを前提としない
T-Kernelでは,ミドルウェアやアプリケーションなどの上位のソフトウェアは動的なロードを前提としています.このため,OSとは別のロード・モジュールとして用意され,ソフトウェア割り込みを利用してOSとインターフェースします(図8).
図8 ロード・モジュールの構成
一方,μT-Kernelは,上位のソフトウェアの動的なロードを前提としていないため,OSとアプリケーションを静的にリンクして一つのロード・モジュールにすることが可能です.OSのインターフェースをT-Kernelのようなソフトウェア割り込みから,単純な関数呼び出しに変更することで,ソフトウェア割り込みのためのコードを省略,またソフトウェア割り込みのためのコードを省略できるだけでなく,ソフトウェア割り込みの処理にかかるオーバヘッドも軽減できます.さらに,ロード・モジュールをビルドするとき,実際にそのシステムで利用されるμT-Kernelの機能が確定するので,未使用の機能(関数や変数)についてはビルド時に省略できます.
μT-Kernelでは未使用の変数や関数を自動的に削除する機能を追加することで,OSによる資源の利用量を最小限に抑えるようにしました.
これに対してT-Kernelでは,OS側にすべての機能を実装しておく必要があり,ROMやRAMのサイズが大きくなってしまいます注4 .
注4;プログラムが動的にロードされるとした場合,あるプログラムにおいてどの機能が利用されるかは実行されるまで分からない.このため,OS側では仕様書にある全機能を用意しておく必要がある.
・コンフィギュレーション
T-Kernelではカーネル・オブジェクト注5 の最大数などは別ロード・モジュールとして用意して起動時に動的に決定していましたが,μT-Kernelではこれらをマクロを利用した即値に変更しています.この変更により,起動時の処理の軽減と省資源を実現しています.また,デフォルトの最大オブジェクト数などのコンフィギュレーションについても大幅な見直しを行っています(表2).
注5;T-Kernelではカーネルが操作対象とする資源を「オブジェクト」と総称している.具体的にはタスクやセマフォなどをオブジェクトと呼んでいる(表2).
オブジェクト | μT-Kernel | T-Kernel |
タスク | 32 | 150 |
同期・通信 セマフォ イベント・フラグ メールボックス | 16 16 8 | 100 100 20 |
拡張同期・通信 ミューテックス メッセージ・バッファ ランデブ・ポート | 2 8 4 | 100 20 50 |
メモリ・プール管理 固定長メモリ・プール 可変長メモリ・プール | 8 2 | 10 10 |
時間管理 周期ハンドラ アラーム・ハンドラ | 4 8 | 20 40 |
サブシステム | 4 | 50 |
デバイス | 8 | 32 |
T-Kernelは大規模システムを前提としているため,デフォルトでは余裕をもった設定になっています.一方,μT-Kernelは小規模なシステムを前提としているため,デフォルト値そのものを見直しました.これにより各オブジェクトの管理領域を大幅に減らせました 注6.
注6;T-Kernelでも当然同じ対応が可能.ただし,プログラムは動的なロードが前提となるので,あまりにもオブジェクト数を減らしすぎるとプログラムを正常に実行できなくなる場合があるので注意が必要.
μT-Kernelでは,デフォルトの状態で小規模システムに合わせた調整を施してありますが,それでも開発用に多少余裕をもった設定にしてあります.このため,実際の開発時にはシステムに合わせて必要となるオブジェクト数を再度調整する必要があります.