150年間使い続けられるRTOS「RODOS」はドイツの人工衛星に欠かせない:リアルタイムOS列伝(33)(2/2 ページ)
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第33回は、ドイツの人工衛星に欠かせないRTOS「RODOS」を紹介する。
「RODOS」の設計目標は引き続き“Simplicity”
さて、そんなわけでRODOSはBOSSの特徴を引き継いで、より機能を引き上げたものとなっている(図2)。RODOSの設計目標は引き続き“Simplicity”である。ただし、Simplicityを実装するに当たり、「機能を削って簡素化するわけではない」としている。具体的には、リアルタイムスケジューリング、リソース管理、同期メカニズム、ミドルウェア、スレッド間通信といった機能が全てマイクロカーネルにより「可能な限りシンプルな形で」提供される。RODOSのコアの特徴は以下の通りだ。
- オブジェクト指向のC++インタフェース
- 超高速ブート
- リアルタイム優先制御のプリミティブなマルチスレッディング
- 時間管理
- スレッドセーフな通信/同期メカニズム
- イベントプロパゲーション
アプリケーションはターゲットハードウェアないし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となっているが、ここでは以下のようなターゲットが挙げられている。
- Linux上での動作
- POSIX環境での動作
- STMicroelectronics STM32F4
- Microchip SmartFusion 2
- Raspberry Pi 3
また、過去にはベアメタルで以下のプロセッサをサポートしている。
- arm_cortex(Armv8-A汎用)
- arm-cortexA8(Cortex-A8汎用)
- arm-cortexA9(Cortex-A9汎用)
- arm-cortexA9_zinq(Cortex-A9コア内蔵のXilinx Zynq)
- arm_v4(Armv4汎用)
- avr32(AtmelのAVR32)
- bf561(ADIのBlackfin BF501)
- imx(NXP Semiconductosのi.MX)
- leon(SPARCv8ベースのLEONプロセッサ)
- microblaze(XilinxのMicroBlaze)
- raspberrypi(Raspberry Pi)
- smatfusion(Microchip SmartFusion)
- virtex4(Xilinx Virtex-II搭載のPowerPC 405)
これらの他、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.
関連記事
- 連載記事「リアルタイムOS列伝」バックナンバー
- アマゾン買収から2年半、「Amazon FreeRTOS」は最も手頃なRTOSに
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第2回は、アマゾンの買収によってRTOSのメインストリームに躍り出た「Amazon FreeRTOS」について紹介する。 - かつて米軍に重用されたRTOS「RTEMS」、今や航空宇宙分野で揺るぎない地位に
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第11回は、かつて米国の軍需向けで重用されてきたRTOS「RTEMS」を紹介する。現在は軍需ではなく、航空宇宙分野向けフリーRTOSの座を射止めている。 - 「ThreadX/Azure RTOS」の悔恨から生まれた「PX5 RTOS」はできたてほやほや
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第32回は、2023年1月にリリースされたばかりのRTOS「PX5 RTOS」を紹介する。 - AVRマイコンで動作する軽量RTOS「FunkOS/Mark3」は勉強や遊びに最適!?
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第31回は、ほぼ独力で開発された軽量RTOS「FunkOS/Mark3」を紹介する。 - F-35戦闘機も採用する「LynxOS」はRTOSを超えたRTOSを目指す
IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第30回は、軍用や航空宇宙向けを中心に一定のシェアを確保しているRTOS「LynxOS」を紹介する。