ホーム > APS ACADEMY連携 リアルタイムOS講座「RTOS入門編」 | 講習会・シンポジウムのご案内 > 第1回 RTOS概論

第1回 RTOS概論

RTOSとは?

コンピュータという言葉から何を想像しますか?パーソナルコンピュータ、サーバ、スーパーコンピュータなどは、まさにコンピュータらしいコンピュータと言えるでしょう。これらは、汎用な目的に使用できる情報処理型のコンピュータです。しかし、コンピュータはこのようなものばかりではありません。

例えば、携帯電話、ビデオカメラ、デジタルカメラ、コピー機、ファックス、自動車、カーナビ、携帯音楽プレーヤ、HDD レコーダ、自動販売機など、身の回りの多くのものにコンピュータが入っています。これらのコンピュータは、実世界の動きに合わせてセンサやアクチュエータなど他の機械システム等と協調して動作し、目的に応じたサービスを提供します。このようなコンピュータシステムは組込みシステムと呼ばれています。

組込みシステムは特定の機能を実現するための専用化されたシステムです。いまや私達の生活には欠かせません。一方、システムによっては誤動作が発生すると重大な問題を引き起こしかねないものもあります。自動車の制御システムなどは人命に関わることが容易に考えられます。そのため、正常に機能することが重要であり、組込みシステムには非常に高い信頼性が求められます。また、身の回りのあらゆるモノにコンピュータが組み込まれるようになったことで、低コスト化が一つの重要な課題になっています。コストを極限まで下げたため、組込みシステムは一般的に処理速度が遅かったりメモリサイズが小さかったり、利用できる資源(リソース)に厳しい制約があります。さらに、システムの改修にも多大なコストがかかるため、長期間安定して動作できることも求められます。

そして何より、組込みシステムは実世界に合わせて動作することが求められます。情報処理型のコンピュータとは異なり、単なる計算処理を行うのでなく機器を制御するための入出力処理や通信処理が中心となります。実世界は常に状況が変化し続けているので、実世界の動きに合わせて処理を行うためには、高い応答性能が求められます。

さて、組込みシステムが求める高い応答性能を実現するには、コンピュータが速ければ十分でしょうか?実はそれだけでは不十分です。たとえ処理を短時間に完了できたとしても、常にその処理を短時間で完了できない限り、期待した機能を提供することはできません。例えば、パソコンを使っている時に、突然何かの処理が動いて、キーボードを受け付けなくなったことを経験したことがある人も少なくはないと思います。これは、音楽プレーヤであれば音が途切れることになりますし、自動車であれば突然パワステが効かなくなるということです。高い応答性を実現するためには、常に処理を短時間で完了できるように、時間制約を守ることが重要となります。

時間制約を守るためには、処理時間を予測できることが不可欠であり、これをリアルタイム性といいます。処理時間が予測できれば、処理の順番を調整することで、時間制約を守る戦略(アルゴリズム)が立てられます。このようなリアルタイム性の実現に役立つ機能を提供するオペレーティングシステムを、リアルタイムオペレーティングシステム(Real Time Operating System、以下RTOS)といいます。
実際にRTOSが利用されている製品の例については、こちらをご覧ください。

情報系OS とRTOSの違い

RTOS は、タスクと呼ばれる処理のまとまりを切り替えるための時間や、RTOS が提供する機能に要する時間があらかじめ予測できたり、発生したイベントに対して高速に応答できたりします。リアルタイム性が必要な処理を実現するには、処理を実行する時の優先度を高くすることができるなど、他の処理に邪魔されないようにできることが必要です。こうすることで実行時間が予測しやすくなります。他の処理に邪魔されると、いつ処理が終わるか予測が困難となります。そのため、RTOS のタスクを実行する順序の決め方(タスクスケジューリング)には以下のような特徴があります。

  • 処理(タスク)に優先度が付けられること
  • 優先度の高い処理(タスク)は、より優先度の低い処理(タスク)には邪魔されないこと
  • 優先度の高い処理(タスク)は、低い優先度の処理(タスク)の実行権を横取りできること(preemption)

このような優先度ベーススケジューリングのおかげで、リアルタイム性が要求される処理に対して高い優先度を割り当てることができ、システムの応答性を向上させることが可能になっています。

一方、従来の情報系OS は、一定時間ごとに処理を切り替えるような方式(ラウンドロビンスケジューリング)を採用していました。ラウンドロビンスケジューリングでは、すぐに処理をしたい場合でも、他の処理の時間が完了するまで待たなければならず、RTOS のタスクスケジューリングのように、高い優先度の処理が優先的に実行されることはありません。最近の情報系OS では優先度を扱えるスケジューリングを採用するようになってきましたが、処理の実行時間などに従い自動的に優先度が変更されることがあります。そのため、依然として処理時間を予測することは困難です。ユーザインタフェースを中心とした数ミリ秒の応答を扱う世界であれば情報系OS を利用していても問題はありませんが、機械制御や通信制御を目的としたマイクロ秒を争う応答性能が要求される世界では情報系OSには技術的限界があり、RTOSが必要となります。


図: 情報系OS とRTOSのスケジューリングの違い

RTOSを利用するメリットとデメリット

RTOS を利用することで、リアルタイム性をもつプログラムの作成が容易になります。機器に要求される機能ごとにタスクとして実装し、それぞれが意図したタイミングで実行されるように優先度を割り当てます。実際には、複数タスクを並行処理する場合、タスク間でタイミングを合わせて動作させるための機能(同期)やタスク間で情報交換するための機能(タスク間通信)も必要になります。それらは、以下のようなRTOS が提供する機能を利用することで、容易に実現することができます。

  • タスク管理機能
  • タスク同期管理機能
  • 同期・通信機能
  • メモリ管理機能
  • 時間管理機能
  • 割込み管理機能

また、プログラムの再利用性も高くなります。例えば、ハードウェアA で動作していたアプリケーションをハードウェアBに移植するものとします。この時、ハードウェアB でハードウェアA と同じRTOS が動くのであれば、アプリケーション本体はほとんど修正することなく、動作させることができます。万が一ハードウェアBで動作するRTOSがない場合でも、RTOSさえ移植すれば同じアプリケーションを動作させることができます。RTOS の移植は一見大変そうに思えるかもしれませんが、RTOS 全体を改修する必要はなく、ハードウェアに依存する部分のみを移植すれば動作させることができます。

さらに、RTOSを利用することで保守性・拡張性も向上します。システム全体のモジュール性が向上してモジュール単位で保守できるようになるので、アプリケーション開発者はアプリケーションにのみ集中することができます。さらに、ミドルウェアや各種ソフトウェア資産、開発支援ツールなどの関連製品も利用できます。ところがRTOSを用いない場合は、タスク管理やハードウェア制御などRTOSが担当する箇所もアプリケーション開発者が責任を持たなければなりません。一方、RTOS を利用することでメモリ消費量が増加するという欠点もあります。非常に単純なアプリケーションならばRTOSがなくても問題ないかもしれません。しかし、組込みシステムは複数の処理を並行して実行することが多く、各処理が決められた時間内で正常に処理できるように実装しなければなりません。例えば、音楽プレーヤは、記憶媒体から音楽データを読み込むこと、読み込んだ音楽データをサウンドデバイスに出力すること、ユーザの操作の入力を受け付けること、画面の表示を切り替えることなど、他にもいろいろな処理が必要となります。結局、各処理を管理する機能が必要になり、RTOS と同等の機能を自作で追加することになります。それでは元も子もありません。また、元々RTOS はリソースが限られている環境で動作することを前提に設計されているので、非常にコンパクトです。そのため、RTOS によるメモリ消費は、構築するシステム全体で考えると、それほど気にする必要はありません。

組込みシステムの未来とRTOS

ここまでの説明で、組込み機器においてRTOS が非常に重要な意味を持っていることをご理解いただけたと思います。一方で、最近の組込み機器を見てみると、大幅にシステムの情報化・大規模化が進んでいるという事情も抱えています。例を挙げればきりがないですが、例えば以下のような例が挙げられるでしょう:

  • テレビ
    • PC と同じようなウェブブラウザを備えていたり、YouTube の動画を再生したりする機能を持っている製品もあります。
  • 調理機器(電子レンジや冷蔵庫)
    • レシピを提案して表示する機能や、そのレシピに従って自動的に調理時間や温度等の設定を行うことで、調理をある程度自動化してくれる製品もあります。
  • ヘルスケア機器
    • 体重や体脂肪の情報などをクラウドサービスへアップロードし、記録してくれるものもあります。

このような例を考えると、組込み機器においてRTOSから情報系OSへの移行がどんどん進んでいくのではないか、と思えてきます。ハイエンドな情報家電や情報機器については、実際にそのような方向性でこれからも発展が続いていくことは間違いありません。ただ、ここで注意しなければならないのが、これらの組込み機器は単純な情報システムではなく、組込みシステムでもあるため、機器制御においてはRTOS の考え方を無視する事はできません。例えば、洗濯機を例に考えてみると、機能を高度化する目的で情報系OS を用いたためにモータの制御がリアルタイムに行えず、結果として本来の用途を実現できないようでは本末転倒です。つまり、ここで求められるのは情報系OS とRTOS の「いいとこ取り」を出来るようなプラットフォームであるということが分かります。

一方で、全ての組込み機器が上記のような高度化の方向性をたどるということはないでしょう。近年、ユビキタス・コンピューティングやM2M(machine-to machine)、IoT Internet of Things)といった新しいパラダイムが次々と登場していますが、これらの根本的なアイディアとなっているのは、機器間の機能分散です。つまり、一つの機器をどんどんパワフルにして何でも出来るようにする代わりに、複数の機器がそれぞれ別の仕事を協調してこなすことで、全体としてよりよいサービスを提供しよう、ということです。

具体的な例として、スマートハウス(電脳住宅)を考えると分かりやすいと思います。例えば、コンロで調理を行っている時に換気を行うために窓や換気扇を自動で開いたり、外気温が寒くなったり暑くなったりした時に窓を自動で閉めて空調をつけてくれたりするようなシステムを考えてみましょう。この例では、少なくとも窓や換気扇と、空調、コンロといった調理機器が何らかの形でお互いに連携して動作する必要があります。当然、一つの機器だけですべてをこなす、という今までのタイプの機器とは大きく異なっています。

このように組込み機器の機能分散が進んでいくと、何でもかんでも出来るように機器を高性能化するということは必ずしも必要ではなくなってきます。高度な処理は、高性能な機械に任せてしまって、その機器が行うべき仕事だけをしっかりこなすようにすれば良いわけです。例えば、先程の窓の開閉の例についても、開閉の判断ロジックは例えばクラウド上のサーバに置いてしまって、窓側は要求に従って単純に開閉を行うだけにしてしまうこともできます。全ての機器を高性能化してしまうより、このように適切に機能分散を行うほうが、機器の消費電力を抑える観点からも機器のコストを安くする観点からも有利になります。つまり、機能分散を前提としたシステムでは個々の機器を高機能化するのとは正反対の方向性で発展が進むことになります。

組込み機器は現在も発展し続けており、それに伴いRTOS においても高機能化・高性能化・機能分散化といった、新たな要求への対応が求められています。


図: スマートハウス(TRONプロジェクト)
こちらにスマートハウスに関する動画がございます。

T-EngineプロジェクトとT-Kernelのシリーズ

T-Engine プロジェクトは、21 世紀に現れた新しい応用に対応するために2002 年に開始されました。TRON の生みの親である坂村健・東京大学教授により、組込み分野で20 年以上の実績を持つTRON プロジェクトの実績をベースとし、これまでの成果を集大成するプロジェクトになっています。T-Engine プロジェクトは、主に組込み分野のためのオペレーティングシステムを中心としたプラットフォームの実現を進めるプロジェクトであり、以下のような特徴を持っています。

●オープンアーキテクチャとオープンソース
 ・技術情報やソースコードを公開(オープン)しています。
 ・これにより、多くの企業が自由に参加できるため、
  新しい技術を創造する速度が速くなります。
●商業利用に適したライセンス
 ・組込みシステムでは、製品のハードウェアの詳細に関する情報を
  秘密としたい場合や、商用ミドルウェアとの組み合わせが必要となる
  ケースが多数みられます。そこでT-Engine プロジェクトでは、
  T-License というライセンス規約を策定し、自由な複製・改変を認めながら、
  改変部分を秘密にすることができるライセンスを用意しました。
●国際標準化
 ・T-Engine プロジェクトでは、ITUやISOなどの国際標準化団体に積極的に
  標準仕様を提案し、基盤技術の国際標準化に貢献しています。
 ・2012年には、ucode※を中心としたユビキタス・コンピューティングに関する
  標準仕様がITU の国際標準規格(H.642)として成立しました。

T-Engine プロジェクトでは組込み向けRTOSのみならず、ユビキタス・コンピューティングを含む幅広い活動を進めていますが、本稿ではT-Engine プロジェクトの目玉であるRTOS シリーズ「T-Kernel」を中心に紹介していきます。T-Kernel は、TRONプロジェクトにおける組込みRTOS「ITRON」の成果をベースに、組込みシステムにおける新しい応用に対応するために作られたRTOS のシリーズです。T-Kernel ファミリでは、多様な応用に適した構成のT-Kernel がそれぞれ提供され、多くの要求に応えることができるようになっています。ARM コアのプロセッサでも多くの種類が存在し、それぞれ適切な応用が想定されています。CPU との対応としては、下図のようなイメージでT-Kernel ファミリ
とARM プロセッサとを対応付けると分かりやすいでしょう。

今回は、T-Kernel ファミリのうち、μT-Kernel、T-Kernel 2.0、そしてT2EXを紹介したいと思います。(T-Kernel Standard Extension やMP T-Kernel を含むT-Kernelファミリの詳細情報については、T-Engine フォーラムのウェブサイトをご覧ください。)

※ ucode は現実世界のさまざまな「モノ」や「場所」などを識別するための固有識別番号です。
 詳細については uID Centerの説明を参照してください。
 uID Center → http://www.uidcenter.org/ja/

図: T-Kernelファミリ


図: CPU に対応するターゲットレンジ

μT-Kernel

μT-Kernel は、小規模組込みシステムをターゲットとしたリアルタイムOS です。ARM のプロセッサで言えば、Cortex-M がターゲットとする応用分野に適したOSです。非常にコンパクトなOS であり、たとえばROM が8KB、RAM が4KB 程度しかないハードウェアでも動作するように作られています。一般的に組込みLinuxと呼ばれているものでは、どんなに小さく設定しても数MB 以上のRAM を使用しますが、これと比較してもいかにコンパクトなOSであるかがよく解ると思います。

これだけコンパクトなOS ではありますが、他のRTOS と比較してもかなり充実したAPI を備えています。特に、タスク関連のAPI や、タスク間同期・通信関連のAPI については、他のRTOS(例えばFreeRTOS やμC/OS-II)と比べてもかなり充実しています。これは、RTOS の本質がCPU の計算時間を実行したい処理に最適に割り当てることにあるために非常に重要なことです。μT-Kernel を動作させるような小規模な組込みシステムでは、一般的に省電力・省コストのローエンドなプロセッサが用いられる想定ですが、この時間の割り当てに関する制御が効率良くプログラムから行えるようにするためには、それ相応のAPI 群が必要だからです。(この点についての詳細な議論は、第三者が論文で客観的に示していますので、興味のある方はhttp://dx.doi.org/10.1109/MM.2009.86 をご覧ください。)

具体的に、μT-Kernel では以下のような機能を提供しています。使わない機能については、ROM およびRAM の節約のために、機能を個別に取り外すことも可能になっています。

  • タスク管理機能
  • タスク付属同期機能
  • 同期・通信機能
  • 拡張同期・通信機能
  • メモリプール管理機能
  • 時間管理機能
  • 割込み管理機能
  • サブシステム管理機能
  • デバイス管理機能
  • デバッガサポート機能

これらの機能の具体的な利用方法については、次回以降の記事で順次紹介していきたいと思います。

T-Kernel 2.0

T-Kernel 2.0 を一言で表すと、高性能・高機能な組込みシステムのためのRTOSといって良いでしょう。ARM のプロセッサで言えば、Cortex-A がターゲットとする応用分野に適しています。ちょうど、RTOS と情報系OS の「いいとこ取り」をしたような設計となっており、μT-Kernelと同様なRTOSの機能を基本とした上で、情報系OS の機能をサポートできるように設計・実装がなされたものです。

情報系OSとの「いいとこ取り」という観点から重要なのが「サブシステム管理機能」です。これは、T-Kernel 2.0 というRTOS の上にOS の機能を追加するためのメカニズムで、これを用いることでRTOS をベースとして、例えばファイル管理機能やネットワーク通信機能といった情報系の機能を、OS 機能として追加することが可能となります。さらには完全な情報系OS の機能をOS 機能として追加することすら可能で、実際にT-Kernel Standard Extension は完全な情報系OS の機能を実現したOS 拡張ですし、その他にも会員企業によってPOSIX 拡張等が開発された例もあります。

なお、前節で説明したμT-Kernel にも実は「サブシステム管理」という機能が列挙されていますが、T-Kernel 2.0 とは異なりこれはあくまで簡易的なもので、互換性のために提供されるものです。このように、T-Kernel ファミリでは、実現方法や内部的な動作、構成等がいずれも大幅に異なっていますが、それぞれの間でのAPI の互換性が考慮されて設計されています。これにより、「T-Kernel」という共通のAPI を、小さな組込みシステムから大規模なものにまで、スケーラブルに利用することができるようになっています。

現在のμT-Kernel は、T-Kernel 2.0 の前身であるT-Kernel 1.0 を、互換性を保ちながら軽量かつ簡易な構成とする形で設計されたもので、ほぼT-Kernel と共通になっています。ただし、T-Kernel 2.0 は情報系OS の機能を必要とするような比較的大きな構成での利用を想定しているため、μT-Kernel に対して以下のような機能を追加したものとなっています。

  • マイクロ秒単位の時間管理
    • 組込みシステムにおけるデバイスの制御においては、マイクロ秒単位のきめ細かい時間管理が必要となることも多く、これを実現するためにマイクロ秒単位の時間管理をサポートした。
    • Cortex-A 系のCPU にみられるような処理の高速化に伴い、マイクロ秒単位の制御が実用化できる環境が整った。
  • 大容量デバイスのサポート
    • SD カード等を始めとして、組込み機器においても大容量のデバイスを利用するケースが増えており、これらの大容量デバイスを扱うための機能を追加した。
  • 標準化範囲の拡大
    • 物理タイマやキャッシュ制御等、T-Kernel 2.0 の仕様で規定される機能範囲を拡張した。
    • これにより、これらの機能を利用する際のAPI が共通化され、ミドルウェアの流通性が向上する。

T2EX

T2EX はT-Kernel 2.0 Extension の略で、直訳すると「T-Kernel 2.0(の)拡張」です。その名が示す通り、T2EX はT-Kernel 2.0 のためのOS 拡張機能であり、RTOSに情報系OSのいいところを持ってこられるようにするための、OSのアドオン(拡張機能)のコレクションです。

「T-Engine プロジェクトとT-Kernel のシリーズ」の節では、組込みシステムが高機能化・高性能化、あるいは機能分散化しているという話に触れましたが、ちょうどそのあたりを狙った設計となっています。高度なOS 機能を情報系OS よりも軽量な形で追加することで組込みシステムの高機能化・高性能化をサポートしつつ、ネットワーク通信機能により機能分散化をOS レベルからサポートできるようになっています。

T2EXの主な特徴は以下のとおりです。

  • 高度な組込みシステムのための情報系OS機能の追加
    • ファイル管理機能やネットワーク通信機能といった、情報系OSの機能を追加。これによって、高機能な組込みシステムの開発を強力にサポートする。
  • アドオン・アーキテクチャ
    • 限られたROM/RAM の中で高度な組込みシステムを実現するため、OS機能を独立させる。
    • ビルド時のコンフィギュレーションにより、必要なものだけを取捨選択して開発可能。たとえば、T-Kernel 2.0にネットワーク通信機能だけ追加した構成で開発したい、といったように、拡張機能をそれぞれ独立して付け加えたり取り外したりしてシステムを構築し、コンパクトな組込みシステムを効率的に開発することが可能である。
  • メモリ保護機能のサポート
    • 高機能な組込みシステムの開発では、OSをアプリケーションから保護する機能が不可欠となる。
    • 情報系OSとは異なる単一空間上のメモリ保護を実現し、効率的かつ安全なシステムの開発を可能にした。
  • コンパクト
    • 情報系OSの機能を実現しながらも、非常にコンパクトな組込みシステムが開発可能である。
    • 例えば、100KB以内のRAM でファイルシステムを含む機器(デジタルカメラなど)を開発することも可能である。Linux 等では少なくとも数MB は消費するため、同じ処理を実現する上で極めてコンパクト性が高いと言える。

T2EXの主な機能を列挙すると以下の通りです。これらはT-Kernel 2.0のAPI と混在させて利用することが可能であり、高いリアルタイム性を実現しながらも高度な処理を実現できます。

なお、T2EX のアーキテクチャは以下に示す通りで、図に示される機能間の依存関係を満たす範囲で前述の各機能を付け加えたり取り外したりといったことが可能になっています。


図: T2EX アーキテクチャ

T2EXについてはこちらも参照してください。

> 第2回 タスクとは

ホーム > APS ACADEMY連携 リアルタイムOS講座「RTOS入門編」 | 講習会・シンポジウムのご案内 > 第1回 RTOS概論

ページの上部に戻る