【コア#1】 RTEMS(RTOS)概論

# 【コア#1】 RTEMS(RTOS)概論

## はじめに
本記事は、Space ROS Advent Calendar 2024の１つです。

Space ROS Advent Calendar 2024の概要については、下記の記事をご参照ください。

* [Space ROS Advent Calendar 2024について](https://qiita.com/YukiIkeda_robot/items/876fbfe976ab71c9a53e)

本稿では、一般的なRTOS（Real Time Operating System ）の概論について説明し、航空宇宙産業において広く利用される[RTEMS（Real-Time Executive for Multiprocessing Systems）](https://www.rtems.org/)についても概説します。

## RTOSとは
RTOSは、リアルタイム性が求められるアプリケーションに向けて設計されたオペレーティングシステムです。これには以下のような特徴があります：

1. リアルタイム性:
タスクのスケジューリングや割り込み処理において高い精度と確定性を持ちます。
一般的なOS（WindowsやLinux）との比較すると、一般的なOSでは複数のタスクを要求された順番に沿って並列で処理を行います。
一方でRTOSは要求された複数のタスクについて優先度に従い、処理を行います。また、タスクの実行中にさらに高い優先度のタスクが要求（割り込み）された場合にはタスクを中断し、実行順番を入れ替えて高い優先度のタスクを処理します。
1. 優先度制御
ROTSはタスクの優先度に基づいたスケジューリングを行い、優先度の低いタスクを実行待ちの状態にして処理順を制御します。
またこのスケジューリングの機能を提供するプログラムのことをカーネルと呼びます。前述の高い優先度のタスクが他のタスクの実行中に要求された場合の順番の入れ替えについてもカーネルが提供する機能の一つです。
1. 小リソース
汎用的なOSと比較してRTOSは必要最低限の機能に絞って設計されています。そのためOSが利用するメモリサイズが汎用的なOSよりも小さく済むため、メモリやCPU資源が限られている環境でも利用できるというメリットがあります。

これらの特徴からRTOSは、産業用ロボット、組み込みシステム、医療機器など、リアルタイム性が重要な分野で幅広く使用されています。

## RTEMSについて
RTEMSは組み込まれたシステム向けに設計されたRTOSの一種であり、さまざまなオープンAPIおよびインターフェース標準をサポートしています。
RTEMSプロジェクトは[OAR Corporation](https://www.oarcorp.com/)によって管理されていますが、主要な開発は[RTEMS community](https://www.rtems.org/)から提供されています。
RTEMSには主に以下の特徴があります。

* マルチスレッド対応
RTEMSは複数のタスクが同時に実行されるマルチスレッド環境で動作します。これにより、並列処理や分散処理が可能になります。
* 単一アドレス空間
システム全体が一つの統一されたアドレス空間を使用するため、メモリ管理が簡素化され、効率的なリソース利用が可能です。
* オープンソース
RTEMSはGPL 2.0またはそれ以降の修正版ライセンスの下で提供されており、ユーザーは自由にソフトウェアを利用、変更、再配布することができます。
* POSIX準拠
RTEMSはPOSIX（Portable Operating System Interface）標準に準拠しているため、異なるOS間でのコードの移植性があります。また既存のC/C++プログラムやライブラリ、開発ツール（コンパイラ、デバッガ、ライブラリなど）をそのまま使用できます。


## RTEMSのアーキテクチャ
RTEMSの特徴としてはシンプルかつモジュラーな構造という特徴があります。
RTEMSはそもそも組み込みシステムを対象として設計されています。そのためメモリなどのリソースが限られる場合でも対応できるように、各種システムコンポーネントは独立したモジュールに分割されています。そのため特定の機能を追加・変更する際、システム全体に与える影響を最小限に抑えることができます。
これらのモジュールは必要に応じてアプリケーションとリンクされます。さらに、システムは特定のアプリケーションのニーズに合わせて適切な設定パラメータを選択することでカスタマイズが可能です。


RTEMSアーキテクチャは、RTEMSがサポートするプロセッサアーキテクチャのクラスまたはファミリを指します。RTEMSアーキテクチャモデルはGCC（GNU Compiler Collection）のアーキテクチャモデルに従います。GCCのアーキテクチャは特定のRTEMS GCCコンパイラとなります。このコンパイラは、異なる命令セット、浮動小数点サポートなどの差異があるプロセッサファミリー全体をサポートすることができます。

RTEMSはGCCを構成して、各種サポートされる命令セット、浮動小数点ユニット、ベクトルユニット、ワードサイズ（例えば32ビットと64ビット）、エンディアン、コードモデル、ABI（Application Binary Interface）、プロセッサのエラーワークアラウンドなどのために個別のランタイムライブラリを作成します。このような設定は「multilib」と呼ばれます。 multilibはGCCが特定のマシン・オプションのセットを選択することで自動的に選択されます。

## RTEMS以外のRTOSについて
1. [VxWorks](https://www.windriver.com/japan/products/vxworks)
1980年代後半にWind River Systems社によって開発されたRTOS。RTEMSと同様に航空宇宙産業に利用されるRTOSとして実績があり、[マーズ・パスファインダー](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%BC%E3%82%BA%E3%83%BB%E3%83%91%E3%82%B9%E3%83%95%E3%82%A1%E3%82%A4%E3%83%B3%E3%83%80%E3%83%BC)や[マーズ・エクスプロレーション・ローバー](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%BC%E3%82%BA%E3%83%BB%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%97%E3%83%AD%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%BB%E3%83%AD%E3%83%BC%E3%83%90%E3%83%BC)に採用されているが有償である。
1. [FreeRTOS](https://www.freertos.org/)
FreeRTOSは、40を超えるプロセッサアーキテクチャをサポートし、小さなメモリフットプリントと高速な実行時間を特徴とする組み込みシステム向けのRTOSでこちらも名前の通りフリーのRTOSである。
1. [QNX Neutrino](https://blackberry.qnx.com/en/products/foundation-software/qnx-rtos)
こちらもVxWorksと同様に有償のRTOSである。元々はカナダの企業QNXソフトウェアシステムズが開発していたが、[BlackBerry Limited](https://www.blackberry.com/ja/jp)が後に取得した。RTEMSと同様にPOSIXに準拠して作られており、移植性の高さや一般的なプログラムや開発ツールが利用できるというメリットがある。

## まとめ
RTOSはリアルタイム性が要求されるシステムに適用されるオペレーティングシステムであることを説明しました。またRTEMSはROTSの一種であり、搭載系のシステムに採用される実績のあるリアルタイムOSであることを説明しました。
宇宙機においてなぜRealTimeOSでなければならないのかという観点については次回の [【コア#2】RealTimeOSでなきゃいけないの？](https://qiita.com/yuyuqq/items/b8baa23e28cbb0ca0aba)を参照ください。