μT-Kernel 3.0は小規模組込みシステムを想定したOS仕様であり、実装を単一化せず、各プラットフォームに応じた最適化・適応化を行った実装を認めている。特に、FPU(Floating-Point Unit)などハードウェアに強く依存する機能や、デバッグサポートにおけるフック機能などの効率性に影響を及ぼす可能性のある機能に対し、仕様のサブセット化を許容しており、これによって効率の良いμT-Kernel 3.0仕様OSを実現することが可能になる。このようなサブセット化を許容した上で、なおかつミドルウェアやアプリケーションの流通性・移植性を維持するため、μT-Kernel 3.0では他のμT-Kernel 3.0の実装との間の差異を記述するための仕組みを導入する。この記述を、サービスプロファイルと呼ぶ。
μT-Kernel 3.0におけるサービスプロファイルは、μT-Kernel 3.0の実装に関する情報をC言語の定数マクロ定義として列挙したものとして実現される。たとえば、TA_USERBUFの指定が可能な実装では、対応するサービスプロファイル項目を以下のように定義し、TA_USERBUFが利用可能であることを示さなければならない。
#define TK_SUPPORT_USERBUF TRUE /* ユーザバッファ指定(TA_USERBUF)のサポート */
アプリケーションやミドルウェアではこのサービスプロファイル情報を利用して、TA_USERBUFに対するサポートの有無に応じたコード記述を行うことができる。たとえば、以下のような利用方法が考えられる。
T_CTSK ctsk = { .exinf = NULL, #if TK_SUPPORT_USERBUF .tskatr = TA_HLNG|TA_RNG0|TA_USERBUF, .bufptr = taskA_stack, #else .tskatr = TA_HLNG|TA_RNG0, #endif .task = task, .itskpri = 10, .stksz = 2048 }; tskid = tk_cre_tsk(&ctsk);
上記のコード例では、TA_USERBUFが利用可能か否かに応じて、tk_cre_tsk に引き渡すパケットパラメータctsk
の内容を設定している。これによって、TA_USERBUFをサポートする実装・そうでない実装の両者から利用可能なアプリケーションやミドルウェアを実現できる。このサービスプロファイルの仕組みを用いて、ミドルウェア開発者はサービスプロファイルを適切に利用し、ソフトウェアの流通性を向上させることが求められる。
μT-Kernel 3.0で規定される具体的なサービスプロファイルの項目については、サービスプロファイル項μT-Kernel共通規定章 を参照すること。