さて、そんなわけでRODOSはBOSSの特徴を引き継いで、より機能を引き上げたものとなっている(図2)。RODOSの設計目標は引き続き“Simplicity”である。ただし、Simplicityを実装するに当たり、「機能を削って簡素化するわけではない」としている。具体的には、リアルタイムスケジューリング、リソース管理、同期メカニズム、ミドルウェア、スレッド間通信といった機能が全てマイクロカーネルにより「可能な限りシンプルな形で」提供される。RODOSのコアの特徴は以下の通りだ。
アプリケーションはターゲットハードウェアないしLinux上のアプリケーションとして開発可能なので、例えばある程度までLinux上で開発を進め、実機検証が必要になった段階でターゲットに移すことも容易である(再コンパイルだけで移行可能な場合もある)。
アプリケーションは、Active Object/Passive Objectを利用できる。Active Objectはタイマー/割り込み/メッセージなどのイベントを受け取ることができ、またObjectから逆にイベントを発生させることも可能である。一方、Passive Objectは単にデータとMethodをActive Objectに提供するだけの存在である。このため、アプリケーションは通常、スレッドやイベント、あるいはInstantiate Subscriber objects(これはミドルウェアへのAPIである)を継承する形でActive Objectを生成して実行をスタートする形となる。
ちょっと独特なのは時間管理だろうか。RODOSではコアがシステムの時間を制御するが、これは0からスタートし、150年後のEnd-of-Timeまでの間、ns単位の時間を提供する。150年、というのは衛星の運用寿命を考えると納得いく数字である。例えば、ボイジャー1号と同2号はどちらも1977年に打ち上げられ、機能停止(搭載する原子力電池を使い切る予定時期)は2025年ごろとされているから、50年弱動作することを想定している。一般的な組み込み機器よりも想定寿命が長く、しかも何かあっても簡単にはリセットすらできない(ボイジャーは既に1号と2号とも太陽系を脱出している)から、このくらいの設計寿命が必要なのは当然だろう。
ちなみにコアそのものには多くの機能はない。周辺回路へのアクセスなどは全てミドルウェア経由となっており、これは移植性の向上につながっている。RODOSの最新バージョンは202となっているが、ここでは以下のようなターゲットが挙げられている。
また、過去にはベアメタルで以下のプロセッサをサポートしている。
これらの他、FreeRTOS、RTEMS、Windowsなどの環境上でも動作するとしている。
RODOSで「Hello, World」を記述するとリスト1のようになる。
#include "rodos.h" static Application appHW("HelloWorld"); class HelloWorld : public Thread { public: HelloWorld() : Thread("HelloWorld") { } void init() { PRINTF("Printing Hello World"); } void run(){ PRINTF("Hello World!\n"); } } static HelloWorld helloworld;
スレッドを作るHelloWorld()と、初期化のinit()、実際にHello, Worldを出力するrun()の2つのメソッドを生成し、あとは一番下でHelloWorldを呼び出すことで実行されるというわけだ。C++としてはごく標準的な記述でコーディングできているのが分かる。
RODOSは現在もKamaro EngineeringやWuSpaceなどで人工衛星のシステム構築に利用されている。日本ではあまりなじみがないが、主にドイツの人工衛星構築では欠かせないRTOSである。
Copyright © ITmedia, Inc. All Rights Reserved.