RTOSの構造、という形で言えば図3のようになる。アプリケーションからどう見えるかはともかく、Nodeごとにスケジューラーがあり、またHub機能にはタスク間通信を行うための機能(とMemoryPool)が存在している。つまり、同一Node内のタスクであっても、実際はHub経由で通信を行っているわけだ。
ここまで見ると結構重そうな実装に見えるかもしれないが、OpenComRTOSのメモリフットプリントの一例として、MLX16とXilinxのMicroBlazeを利用した場合の数字があり、以下の表1のようになっている。
Service | MLX16 | MicroBlaze |
---|---|---|
L1 Hub shared | 400 | 668 |
L1 Port | 4 | 8 |
L1 Event | 70 | 88 |
L1 Semaphore | 54 | 92 |
L1 Resource | 104 | 96 |
L1 FIFO | 232 | 356 |
Total L1 services | 1048 | 1308 |
Grand Total | 2104 | 5500 |
表1 OpenComRTOSのメモリフットプリントの例(単位:バイト) |
プロセッサアーキテクチャにもよるが(MicroBlazeは一応32ビット)、カーネル(L1 servicesで1KB前後、その他もろもろ合わせても2K〜5KBというのはそう大きなものではない。ちなみにMicroBlazeを利用して、「XMK(Xilinx MicroBlaze Kernel)」とOpenComRTOSとのメモリフットプリントを比較したのが表2になるが、かなり省フットプリントと考えていいと思う。
XMK | OpenComRTOS | |
---|---|---|
.text | 12496 | 6016 |
.data | 348 | 1008 |
.bss | 7304 | 6320 |
total | 20148 | 13344 |
表2 XMKとOpenComRTOSとのメモリフットプリント比較(単位:バイト) |
さて、2015年頃まではこのOpenComRTOSを販売していたAltreonicであるが、2016年頃にその後継として「VirtuosoNext」なる製品を投入している。APIそのものはOpenComRTOSと互換性があるが、よりコンパクトにまとまり、性能も向上したとしている。同社のブローシャによるコードサイズとパフォーマンスの数字が図4である。
OpenComRTOSのMLX16やMicroBlazeメモリフットプリントと比べるとコードサイズはそれなりに増えているが、SRAM 64KB/フラッシュ 256KB程度のMCUであれば十分収まる範囲だし、PowerPC(PPC)-e600やArmのCortex-A9ベースならこの程度苦にもならない数字だ。パフォーマンスも、例えばCortex-M3が50MHz駆動ならCycle timeは20nsで、Semaphore loopはおおむね60μs、IRQ→ISRが1μs、Taskまでが15μ〜17μsと考えると、十分ハードリアルタイムに耐えるとしていいかと思う。
ということでかなり面白いRTOSなわけだが、止めを刺すのがライセンス形態だ。Altreonicは、VirtuosoNextをOpen Technology Licenseとして提供している。Altreonicはライセンスフィーおよび若干のロイヤルティー(これはテクニカルサポートの原資のためだそうだ)と引き換えに、全てのソフトウェアのソースコードと形式モデル、デザインドキュメント、ビルドシステム、ユーザーマニュアル、サンプル、シミュレーター、ビジュアルエディター、デバッグツールなどを全て提供する。そしてこれらは顧客が自由に利用したり改変したり、何なら改変したものを別ブランドで提供することも可能となっている(顧客が勝手にバイナリーライセンスを提供する事も可能)。いろいろと異色なRTOSで、手軽に試すという感じではないのだが、分散システム向けRTOSという他に見当たらない特徴を必要とするユーザーに現在も利用されている。
Copyright © ITmedia, Inc. All Rights Reserved.