メディア

「RTOSとは何か」を理解できる7つの特徴超速解説 RTOS

組み込み機器をどう動かすかを考える際、選択肢として浮上するのが「RTOS(Real Time Operating System)」である。このRTOSとは何であり、なぜ必要か、どのような特長を持つのか、組み込み向けLinuxとはどう違うのか、解説する。

» 2017年05月17日 09時00分 公開
[大原 雄介TechFactory]

RTOSの存在意義

 組み込み機器と一口で言ってもどのあたりをターゲットにするのかで議論は変わるが、8bit〜32bit程度のマイコンを利用した比較的スタンドアロンに近い組み込みシステムを議論の対象とした際、頻出する言葉が、「RTOS(Real Time Operating System)」である。

 それぞれのマイコンベンダーが開発環境に合わせ、最低限のデバイス用ライブラリや標準的なランタイム(文字列操作など)を提供してくれるのが通例であり、これだけでもシステムは構築できる。であるからして、こうしたシステムでは必ずしもOSが必要とは限らないのだが、OSなしで全く問題ないかと言われれば、そうとはいえない。ざっと挙げてみるだけでも、

  • マルチタスク処理はライブラリレベルでサポートされる事はないので、必要なら自分で作り込む必要がある
  • 用途によっては通信が必要で、各種シリアルのみならずイーサネットやCANなどを使い、さらにはプロトコル実装まで要求される場合がある
  • 同じCortex-Mベースのマイコンであっても、ベンダー別にハードウェア構成などが違うから、プログラムの可搬性は低い。なので、複数機種への実装が要求されるようなケースでは、メーカー毎のライブラリをそのまま使うのはコストが増える

 といった問題がある。こうした用途に向けて、マイコンベンダーのみならず複数のOSベンダーがRTOSをリリースしているのである。


RTOS、7つの特徴

 RTOSは、上に挙げたような問題を解決するための手段であり、具体的には以下のような特長を持つ。

  • 複数スレッド(タスク)の並行動作が可能

 RTOSはOperating Systemであり、複数スレッド(RTOS業界ではタスクと称することが多いが、実質的には同じものである)を並行して動作させることが可能だ。また、この際にそれぞれのスレッドをどう管理して、動かすかを選択できる(一般的なOSによくあるタイムシェアリングの他にプライオリティベース、イベントドリブンなど細かく選ぶことが可能なものが多い。

  • 最悪応答時間が決まっている

 “Real Time”の意味は「最悪応答時間が決まっている」である。具体的には、割り込みが入ってから、ISR(Interuppt Service Routine)経由で当該ルーティン(を実施しているタスク)が実行可能状態になり、処理を開始するまでの所要時間の最悪値が保証されている。これにより、実時間処理が必要な作業を実装することが可能である。

  • 最悪応答時間を保証する設計となっている

 この最悪応答時間を保証するために、OSあるいはスケジューラで提供される機能は最低限に絞られており、なるべく軽く動くように設計されている。

  • 仮想メモリは原則的にサポートされない

 RTOSにおいて仮想メモリは原則として非サポートである。これはリアルタイム性を損なうためである(例えばリアルタイム処理が必要なタスクがスワップアウトされたりすると、最悪応答時間を守る事ができなくなる。またページングそのものが決して軽い処理ではないので、このオーバーヘッドは無視できない)。また、メモリアロケーションの仕組みも、リアルタイム性の確保のために動的な仕組みが提供されるケースは少なく、大抵は固定サイズのメモリブロックを割り当てる方式である。メモリ保護そのものはMMUベースのものが提供される。

  • 複数のタスク間通信が用意される

 タスク間通信に関しては、イベントベース(割り込みなど)のものやポーリングベース(セマフォなど)、メッセージベース(共有メモリなど)のもの、あるいは複数を合体させたもの(Mailboxなど)、さらにはRPCベースのものなど、複数用意されるのが一般的だ。クリティカルセクションなども用意される場合もある。ただこれらの機能は、マイコンがハードウェア的にどこまでそれぞれの機能を実装しているかで性能差があるため、一概に「これが最速」とは言いにくい部分もある。


  • マルチプロセッサ対応は必須ではない

 マルチプロセッサについては、対応しているものもある。ただしこうした構成では、対称型のマルチプロセッサというケースは珍しく、例えばCortex-M0とCortex-M4といった、異なるマイコンの場合もあり、こうしたケースでは両方のマイコンにそれぞれ別のRTOSが載る(もしくは、片方にはRTOSが載らない)なんてケースもあるため、必ずしもマルチプロセッサ対応は必須では無い。

  • 機能の取捨選択が可能

 カーネルと一部のコア機能は固定であるが、それ以外の機能は利用する/しないに応じてカスタマイズできるようになっているのが一般的である。例えばTCP/IPのスタックは非常に重いので、IPのみとかIP+UDPとか、IP+TCP(ただし一部)、あるいはそもそも搭載しないといった選択が可能だ。これにより、不要な機能をロードしないことでメモリ利用量を最小に抑えることができる。

一般的なOSとRTOSのイメージの違い 一般的なOSとRTOSのイメージの違い

 左の図1が一般的なOSのイメージであるが、基本的にハードウェアは全てOSの管理下にあり、そのハードウェアを利用するためのドライバが提供され、さらにミドルウェア(Windows OSで言うなら.NET Frameworkとか)がきちんと用意され、その上で複数のアプリケーションとユーザーインタフェースが動作する。

 ではRTOS(右の図2)は?というと、まずHALやOSは必要最小限のハードウェアしかカバーしないし、その機能もここまで説明した通り最小限である。ドライバは一応OS管理下のハードウェアに関しては存在するが、こちらも最小限である。その上のミドルウェアやネットワークスタックはオプション扱いになっており、後は全部アプリケーションでカバーする、という感じだと考えればいい。

主なRTOS、組み込み向けLinuxとの違い

 国内で言えばμITRONやその延長でTOPPERSが広く使われているが、海外ではAVIX(AVIX-RT)、LynxOS(LynuxWorks)、Micrium OS(Micrium)、Nucleus RTOS(Mentor Graphics)、QNX(BlackBerry)、Thread X(expresslogic)、VxWorks(WindRiver)などが利用されている。フリーのRTOS(eCosやFreeRTOSなど)も存在している。

 ちなみに同種のものとして、Linuxをベースにリアルタイム性を付加したRealtime Linux(RTLinuxなど)と、組み込み向けのLinuxであるEmbedded Linuxがある。前者はLinuxのタイマー管理部を利用し、リアルタイムスケジューラを動かすことで特定アプリケーションだけをリアルタイムで動かせるようにしただけのもの。全体としてはLinuxそのものなので、要求されるハードウェア資源はマイコンというよりはPCのレベルに近い。

 後者のEmbedded Linuxは、携帯電話や情報機器向けにLinuxを流用しようという目的で開発されたもので、必要とする機能以外を省けるあたりはRTOSに近く、機器の価格を下げるためもあって、なるべく省メモリで動作するように工夫されている(とはいえRTOSより必要なメモリ量は多い)。しかし、リアルタイム性などでは著しく劣っている。

 このため、Linuxカーネルのみをリアルタイム性の高いマイクロカーネルに置き換えたものも幾つかある。ただそうなると、LinuxのAPIだけを提供すれば良く、Linuxそのものである必要はないという議論も成立するわけで、実際LynxOSやNucleus RTOS、QNXなどはいずれもPOSIX互換のAPIを提供している。そんな訳でEmbedded LinuxとRTOSの境界はやや曖昧になっているのが現状である。

Copyright © ITmedia, Inc. All Rights Reserved.