Thread(スレッド)そのものの管理もシンプルである(図3)。通常のThreadは、Ready State(レディ状態)に置かれ、CPUの割り当てを待っている。そして、イベント待ちなどの待機中には、Suspended State(サスペンド状態)に置かれ、イベントが来るとReady Stateに推移するという形だ。
さて、最小で2KBというだけのことはあり、ThreadXのカーネルそのものはThreadの制御に加えてBlock MemoryやByte Memory、Event Flag、Interrupt Control、Mutex、Queue、Semaphore、Time、Timerなどの各サービスが提供される「だけ」である。
ところでThreadXでは、いわゆるTask/Processに当たるものが存在しない。名前の通りThreadが実行単位となっている。このため、ThreadXで動く全てのプログラム(カーネル含む)は同一のメモリ空間を共有して動作することになる。これは、本格的な組み込みシステム(1つのプロセッサ上で多数のアプリケーションが共同して動くようなもの)では安全性やセキュリティの観点で物足りないものとなるが、ThreadXは省メモリのMCU上で動かすことを志向しているので、Threadのみの実装で十分と割り切られている。
ちなみに、Taskに相当する概念(要するに処理分割の際の名前をどうするかという話)に対応するものとして「Name Thread」というものが提供される。また、いわゆるTask的なものをどうしても利用したい、というケースに向けて「ThreadX Modules」という技術も提供している(図4)。
これを利用して、以下の機能が標準で利用可能となっている。
ちなみにこの他のもの、例えばUARTに関してはMCUベンダーがThreadX用のドライバを作成し、これ経由でアクセスすることになる。図5はThreadXを標準サポートする「Renesas Synergy」向けの場合の模式図だが、MCUごとに搭載される標準デバイスが異なるので、これらは個々のデバイス向けのBSPでのサポートという形になっている。
他にも、APIとしてOSEKやPOSIX、μITRON互換のものが提供されるとか、さまざまな開発ツールに対応している、あるいは多彩なプラットフォームのサポート(これは先述したTechFactoryの記事でも書いたので繰り返さない)などの特徴がある。
気になる料金体系だが、ThreadXは組み込むデバイスごとに一定の使用料が発生するロイヤリティーが存在せず、ライセンス料を支払うだけで利用できる。そのライセンス料としては以下の6種類がある。
ちなみに、一番安いSingle Product Licenseの価格は“price close to one month's salary of a single software engineer(1人のソフトウェアエンジニアの月収程度の金額)”とのことだ。
Copyright © ITmedia, Inc. All Rights Reserved.