T-Kernel 2.0の概要

T-Kernel 2.0の位置付けと基本方針

T-Engineフォーラム発足時に公開されたT-Kernel(T-Kernel 1.0)の実績や採用製品の着実な増加にともない、より高性能化、高機能化するハードウェアを活かせるような機能追加の要求が出てきた。このような要求に応える形で、新たな展開へのステップとして策定されたリアルタイムオペレーティングシステムの仕様がT-Kernel 2.0である。

T-Kernel 2.0の仕様は、これまでのT-Kernelの実績をそのまま活かしつつ、機能強化されたカーネルへの移行をスムーズに進められるように、T-Kernel 1.0の仕様に対して上位互換の関係になっている。ソース互換のみならずバイナリ互換も可能であり、たとえばT-Kernel 1.0をT-Kernel 2.0にバージョンアップした場合にも、T-Kernel 1.0上で動いていたデバイスドライバ、ミドルウェア、アプリケーション等は再コンパイル不要でそのまま動く。

またT-Kernel 2.0では、仕様書の記述をXMLベースとして閲覧性や検索性を高めたほか、表現や説明などについても、分かりにくい部分や古い部分の見直しを行っている。

T-Kernel 2.0の追加機能

  1. マイクロ秒単位の時間管理機能

    周期ハンドラやアラームハンドラなどの時間管理機能、タイムアウトなどの時間関係の機能において、T-Kernel 1.0で扱える時間の単位はミリ秒であったが、T-Kernel 2.0ではマイクロ秒単位の時間を扱うAPIを追加する。

    マイクロ秒単位の時間を扱うにあたり、32ビット幅のデータでは扱える時間の長さが短くなってしまうため、時間関係のパラメータとして64ビット幅のデータを導入する(以下の「64ビット整数のデータタイプの導入」を参照)。

    64ビットでマイクロ秒単位のパラメータを持つAPIの名称は、対応するT-Kernel 1.0のAPI名称の後ろに"_u"を付けた名称とする。u はμの意味である。また、64ビットでマイクロ秒単位となったパラメータには、パラメータ名称の後ろにも"_u"を付ける。

    例 1. 64ビットマイクロ秒単位のAPIの例

    /* T-Kernel 1.0の32ビットミリ秒単位のAPI */
    tk_sta_alm( ID almid, RELTIM almtim )
    
    /* T-Kernel 2.0の64ビットマイクロ秒単位のAPI */
    tk_sta_alm_u( ID almid, RELTIM_U almtim_u )

    なお、T-Kernel 2.0でも、時間を扱うAPIがマイクロ秒単位に一本化されるわけではない。上位互換の基本方針により、T-Kernel 1.0のミリ秒単位のAPIはT-Kernel 2.0でもそのまま使うことができ、両者が併存する形となる。

    T-Kernelの時間管理機能における実際の時間分解能は、「標準システム構成情報T-Kernel/SMの機能」の「タイマ割込み間隔」(TTimPeriod)によって指定される。したがって、時間管理機能のパラメータにおけるマイクロ秒単位の指定を正確に実現するには、「タイマ割込み間隔」(TTimPeriod)を十分短い時間に設定する必要がある。詳細は「標準システム構成情報T-Kernel/SMの機能」を参照のこと。

    ちなみに、32ビット符号付き整数で扱える最長時間は、ミリ秒単位とすると約24日間であるが、マイクロ秒単位とすると約35分間になる。これを64ビット幅のデータとすることにより、実用上の制限のない時間を扱うことができる。

  2. 大容量デバイスへの対応

    ハードディスクなど大容量デバイスへの対応を考慮し、デバイス管理機能のパラメータの一部についても64ビット幅のデータを扱えるようにする。

    64ビットのパラメータを持つAPIの名称は、対応するT-Kernel 1.0のAPI名称の後ろに"_d"を付けた名称とする。dは double integer の意味である。また、64ビットとなったパラメータには、パラメータ名称の後ろにも"_d"を付ける。

    例 2. 64ビットパラメータを持つAPIの例

    /* T-Kernel 1.0のAPI */
    tk_swri_dev( ID dd, W start, VP buf, W size, W *asize )
    
    /* T-Kernel 2.0の64ビットパラメータを持つAPI */
    tk_swri_dev_d( ID dd, D start_d, void *buf, W size, W *asize )

    たとえば、ブロックサイズ512バイトの一般的なハードディスクの場合、データ幅が32ビットのT-Kernel 1.0で扱える最大容量は約1TB(=512バイト×(2^31))であった('^'はべき乗を表す)。T-Kernel 2.0では、データ幅を64ビットとしたAPIを追加することにより、この制限を解消する。

  3. 64ビット整数のデータタイプの導入

    前2項を実現するため、データタイプやAPIのパラメータの一部に64ビットの整数を導入する。このため、C言語の規格として正式に仕様化(C99)されたlong long型をT-Kernelの仕様にも採用する。

    64ビット整数を表すデータタイプの名称は、符号付きをD、符号無しをUDとする。'D'は Double integer の意味である。

  4. その他の機能追加

    キャッシュ関連の機能、物理タイマ機能、ユーティリティ機能の追加などを行う。