リアルタイムOSの内部構造を見てみよう!

第01回 ITRON仕様と,TOPPERS/ASPカーネルの概要

連載初回である今回は,TOPPERS/ASPカーネルの概要についてお話します.その前に,ASPカーネルがどんな位置づけのものかをご理解いただくために,ITRONの仕様にも少し触れていきたいと思います.
ITRON仕様は,組込みシステム向けのリアルタイムOSのAPIの標準仕様です.つまり,仕様であって特定の製品ではないので,ITRONカーネルというものは存在しません.ITRONという仕様があって,その仕様に準拠したOSをITRON仕様に準拠したカーネルといいます.

ITRON仕様は1984年から標準化活動が行われ,1987年にITRON1,1989年にITRON2とμITRON2,1993年にμITRON3.0,1999年にμITRON4.0の仕様がトロン協会によって公開されてきました.μITRON4.0仕様は4世代目であり,完成度の高い仕様といわれています.

以下が,ITRONカーネル仕様の特徴です.
・OSの小型軽量化が可能
・仕様の理解が容易
読みやすくすることで,技術者教育のための標準化に一役かっています.(この連載もこの恩恵をこうむっています.)
・完全にオープンな標準仕様
・多種多様なプロセッサ用に実装できる,されている
・多くの機器で使用実績がある
・多くのメータ/ベンダーがサポート
このような特徴を持ち,国内で組込みソフトウェアに一番多く使われているOS仕様です.
ITRON仕様は,多様な組込みシステムに広く適用できるように,「弱い標準化」のコンセプトに基づいて標準化されています.「弱い標準化」とは,OSの持つ機能やその仕様を厳密に標準化するのではなく,アプリケーションからの要求やハードウェアの性質に合わせて最適化する余地を残すアプローチです.この設計方針により,8bitから64bitにわたる多種多様なプロセッサに適用でき,組込みシステムのあらゆる分野で広くつかわれているのです.
 TOPPERSプロジェクトでは,ITRON仕様の技術開発成果を出発点として,組込みシステム構築の基盤となる各種の高品質なオープンソースソフトウェアを開発するとともに,その利用技術を提供しています.
 そのTOPPERSプロジェクトでの開発成果の1つに,TOPPERS/JSPカーネルがあります.μITRON4.0仕様のスタンダードプロファイルに準拠したリアルタイムカーネルです.
今回とりあげるのは,このJSPカーネルの拡張,改良版であるTOPPERS/ASPカーネルです.
 ASP = Advanced Standard Profile
まず,TOPPERS/ASPカーネル(以後,ASPカーネルと略す)の位置づけから見ていきましょう.
先ほども出てきましたが,TOPPERSプロジェクトの成果物の1つに,TOPPERS/JSPカーネル(以後,JSPカーネルと略す)があります.こちらは,μITRON4.0仕様 スタンダードプロファイル準拠のリアルタイムカーネルです.μITRON4.0仕様は策定から8年(2007年現在)が経過しています.その間,ソフトウェアまわりの環境も変わり,仕様から見直した方がいい部分も出てきています.そういった背景から, JSPカーネルを拡張,改良したものという位置づけで,ASPカーネルが開発されました.(参照 図1)

【 図1,TOPPERS新世代カーネルの位置づけ 】

ASPカーネルは,JSPカーネルを1段階パワーアップしたものというイメージです. JSPカーネルを元に,さまざまなカーネルが派生したように,今後は,ASPカーネルに,保護機能を付けたカーネル,マルチプロセッサ用のカーネルなどが開発される予定です.
まず,すでに多くの実績のある,μITRON4.0仕様をベースに拡張・改良が加えられています.μITRON4.0仕様の不十分な点は積極的に拡張・改良されました.

2点目に,ソフトウェアの再利用性が重視されています.プロセッサ性能の向上に伴い,少々のオーバヘッドは許される状況になってきました.そこで,少々オーバーヘッドがあっても,ターゲット依存項目を減らせるなら減らすことで,再利用性を重視する方針にしています.
言い換えると,できるだけ,どのプロセッサでも同じようにつかえるように,という方針で作成されました.(JSPカーネルと若干違うところです.)

3点目に,高信頼性・安全なシステム構築を支援する,ということが挙げられます.
μITRONおよび,JSPカーネルでは,アプリケーションが約束事を守らなければ,動作の保証はしません.というスタンスでした.それに対して,ASPカーネルでは,アプリケーションに誤用されにくい仕様としています.万が一,アプリケーションが約束事に反する処理をしても,妥当なオーバーヘッドで救済できる誤用は救済する.という方針にしています.たとえば,割込みハンドラ中で,割込み禁止にしたなら,割込み処理からreturnする前に,アプリケーションが割込み許可としなければならないという約束事があります.ASPカーネルでは,この約束事をアプリケーションが守っていなければ,カーネルが割込み許可にする.という救済措置をとっています.

メモリ不足への対処が難しいため,カーネル内での動的なメモリ管理は行いません.カーネルオブジェクトは静的に生成します.JSPカーネルから引き継いでいる方針です.
「今後の拡張のもととなるカーネル」という位置づけで作成されましたASPカーネルですので,完成度の高いリアルタイムカーネルを目指すため,枯れた技術で実装できる範囲の仕様に留めています.つまり,必要性が高まっている,保護機能やマルチプロセッサ対応は,ASPカーネルには取り込まず,ASPカーネルを拡張する形で実現します.
おもな適用対象は,高い信頼性・安全性・リアルタイム性を要求される組込みシステムとしています.また,プログラムサイズが数十KB〜1MB程度の規模のものを対象としています.このサイズは,これ以上プログラムサイズが大きくなると,メモリ保護機能が必要になるひとつの目安です.
1.ITRON4.0仕様 スタンダードプロファイルをベースに拡張,改良
2.ITRON4.0仕様 保護拡張機能(ITRON4.0/PX仕様)も一部参考
3.TOPPERS標準割込み処理モデルに準拠
ITRON仕様では,標準化によるオーバーヘッドを避けるために,割込み処理機能は弱く標準化するにとどめていました.しかし,μITRON4.0仕様が策定されてから,8年が経過し,ソフトウェア生産性のためには,多少のオーバーヘッドは許される状況になってきました.
そこで,TOPPERS標準割込み処理モデルを策定し,割込み処理に関わるソフトウェア再利用性の向上を目指しました.これに準拠することによって,プロセッサの割込みアーキテクチャの詳細を知らなくても,ASPカーネル上で割込みを用いたアプリケーションの構築が可能になりました.詳細は後日解説します.