リアルタイムオペレーティングシステム(RTOS)とは

概要

このドキュメントでは、リアルタイムオペレーティングシステム(RTOS)とは何かについて説明するとともに、計測/制御アプリケーションに使用した場合のメリットや、Windowsといった標準の汎用オペレーティングシステムとの違いについて解説します。

内容

リアルタイムオペレーティングシステム概要

以降のセクションでは、リアルタイムオペレーティングシステムの基本概念と用語について概略を解説します。その後のステップとして、NIハードウェアとソフトウェアでリアルタイムシステムを構築をお読みいただくことをお勧めします。このページでは、短時間で優れたリアルタイムシステムを構築する方法を解説しています。

リアルタイムOSとは

一般に、オペレーティングシステム(OS)の役割は、コンピュータのハードウェアリソースの管理と、コンピュータ上で実行するアプリケーションのホストです。RTOSは、そうしたタスクを実行するだけでなく、高精度のタイミングで確実にアプリケーションを実行するよう特別に設計されています。ダウンタイムによってコストが高くついたり、プログラムの遅延によって安全面に問題が生じる計測/オートメーションシステムでは、特に重要なことです。

「リアルタイム」と言えるのは、実行するそれぞれの重要処理に対し、既知の最大時間がある(あるいは少なくともほとんどの場合最大時間を保証できる)オペレーティングシステムです。そのような処理には、OS呼び出しや割り込み処理などがあります。そうした処理に対し最大時間を絶対的に保証できるオペレーティングシステムを一般に「ハードリアルタイム」と呼び、ほとんどの場合にのみ最大時間を保証できるオペレーティングシステムを「ソフトリアルタイム」と呼びます。現実には、このような分類は十分ではありません。各RTOSソリューションはそれぞれ固有の性能特性があり、ユーザはそういった特性を個々に注意深く見極める必要があります。

そういった概念を正しく理解するため、1つの例について考えてみます。例えば新車のエアバッグシステムを設計しているとします。この場合、タイミングにわずかでも誤差が生じる(エアバッグの開くのが早すぎる/遅すぎる)と、重大な事故となり負傷につながる可能性があります。したがってハードリアルタイムシステムが不可欠です。いかなる操作も特定のタイミング制限を超えることは許されません。一方、ストリーミングビデオを受信する携帯電話の場合は、もちろん抜けることなくビデオをストリーミングできるに越したことはないものの、たまに多少のデータが落ちることは許容範囲でしょう。このアプリケーションでは、おそらくソフトリアルタイムオペレーティングシステムで十分です。

つまり要約すると、正しくプログラミングすれば、RTOSは極めて一貫性の高いタイミングでプログラムを実行することが保証されているということです。リアルタイムオペレーティングシステムがそのような信頼性を実現できるのは、タスクの優先順位付けに関してプログラマの自由度が高く、重要な期限が守られていることを確認することも可能だからです。

リアルタイムオペレーティングシステムと異なり、ほとんどの一般向けオペレーティングシステム(Windowsなど)は、汎用オペレーティングシステムと呼ばれます。リアルタイムオペレーティングシステムと汎用オペレーティングシステムの違いについては以降のセクションで詳しく説明しますが、どちらのOSにもそれぞれ長所と短所があることを覚えておく必要があります。Windowsなどのオペレーティングシステムは、多くのプログラムやサービスが走る中でユーザ入力への応答性を維持できるように設計されているのに対し(「公平性」を重視)、リアルタイムオペレーティングシステムは、重要なアプリケーションを高精度なタイミングで確実に実行するよう設計されています(プログラマの優先順位を重視)。

重要用語概念

確定性: ハードリアルタイムオペレーティングシステムで実行するアプリケーション(あるいはアプリケーションの重要部分)で、特定の誤差内での実行が保証されている場合、確定性があるということになります。

ソフトリアルタイム vs ハードリアルタイム処理にかかる絶対的最長時間を保証できるOSは、ハードリアルタイムと呼ばれます。逆に、通常ある程度の時間をかけて処理を実行するOSは、ソフトリアルタイムと呼ばれます。

ジッタ:プログラムまたはループの以降の反復処理におけるタイミングの誤差をジッタといいます。リアルタイムオペレーティングシステムは、正しくプログラミングすればジッタを少なくできるよう設計されています。タスクは何度実行してもほぼ同じ時間で実行できるようになっています。

図1.ジッタは、以降の反復処理でタスクの実行時間がどれだけ違うかを示すものです。リアルタイムオペレーティングシステムでは、ジッタが少なくなっています。

 

リアルタイムアプリケーションの例

リアルタイムオペレーティングシステムは、イベント応答と閉ループ制御という2つのアプリケーションクラス向けに開発されたものです。アセンブリライン部品の自動視覚検査などのイベント応答アプリケーションでは、スティミュラスに対し一定時間内に応答することが求められます。例えば視覚検査の場合、アセンブリラインが移動する前に各部品を撮影し分析する必要があります。

ハードリアルタイムオペレーティングシステム上で実行するアプリケーションを注意深くプログラミングすることで、確定的に(一定の最大時間内で)応答するイベント応答アプリケーションを開発することができます。部品検査の例では、汎用OSを使用した場合検査漏れが出る可能性があります。そのためアセンブリラインの速度を下げたり、部品を破棄することになるか、あるいは欠陥品の可能性のある部品が出荷される危険もあります。

一方自動車のクルーズコントロールシステムなどの閉ループ制御システムでは、フィードバックデータを連続的に処理して、1つまたは複数の出力を調整します。各出力値は決められた時間内に入力データを処理することにかかっているので、正しい出力を生成するためには、ループ期限が守られることが極めて重要です。クルーズコントロールシステムが一定の時間内にスロットル設定を決められなかったら、どうなるでしょうか。繰り返しますが、ハードリアルタイムオペレーティングシステムでは、制御システムの入力データを一定の時間内(決められた最悪ケースの最長時間)に処理することが保証されています。

長期間にわたり実行する必要のあるアプリケーションにも、信頼性の高いRTOSが求められます。リアルタイムオペレーティングシステムは通常、多くのアプリケーションやプロセスを同時に実行するのではなく、最少限のソフトウェアを実行します。そのため24時間365日稼動する必要のあるシステムや、ダウンタイムが許されなかったり大きなコストにつながるようなシステムに最適です。

次回のプロジェクトでRTOSを検討しようとお考えの方は、こちらもご覧ください:リアルタイムシステムを採用するメリット

リアルタイムOS汎用OS違い技術解説

Microsoft WindowsやMac OSといったオペレーティングシステムは、重要性の高くない計測/制御アプリケーションの開発と実行には非常に優れたプラットフォームです。ただしリアルタイムオペレーティングシステムとは異なる使用状況を想定しており、高精度なタイミングや長期の稼動時間が求められるアプリケーションの実行には適していません。このセクションでは、この2つのオペレーティングシステムの技術的な違いについて説明するとともに、リアルタイムアプリケーションをプログラミングする際の注意点について解説します。

優先順位設定

アプリケーションをプログラミングする際、その種類に関わらずほとんどのアプリケーションでは、アプリケーション全体や、場合によってはアプリケーション内の様々なタスクについても、プログラマが優先順位(スレッド)を指定することができます。そうした優先順位は、開発者がどの処理を最も重要と考えているかをOSに伝える役割を果たします。複数のタスクが同時に実行可能となった場合、OSは優先順位の高いタスクを先に実行します。

汎用オペレーティングシステムは、このようにプログラムされた優先順位を必ずしも厳密に守るわけではありません。汎用オペレーティングシステムは、様々なアプリケーションやプロセスを同時に実行するよう開発されているため、全てのタスクが少なくともいくらかの処理時間を与えられることが最も重視されます。その結果、低優先タスクでも、高優先タスクより先に実行されることも場合によってはあり得ます。そのように、どのタスクもいくらかの実行時間は割り当てられますが、それは必ずしも開発者が望む実行順位ではないということです。

一方リアルタイムオペレーティングシステムは、プログラマの優先順位をより厳密に守ります。ほとんどのリアルタイムオペレーティングシステムでは、高優先タスクがプロセッサを100%使っている場合、より優先度の低い他のタスクは高優先タスクの実行が終わるまで実行されません。そのためリアルタイムシステムの開発者は、優先度を考慮しながら慎重にアプリケーションをプログラムする必要があります。一般的なリアルタイムアプリケーションの場合、開発者はタイムクリティカルコード(イベント応答や制御コードなど)を高優先の1つのセクションに配置します。そしてディスクへのログやネットワーク通信など、優先度の低い他のタスクは低優先セクションに集められることがあります。

割り込み遅延

割り込み遅延とは、デバイスが割り込みを要求してから、そのデバイスがサービスを受けられるまでの時間をいいます。汎用オペレーティングシステムでは、ある特定の割り込みに対する応答までの時間は様々ですが、リアルタイムオペレーティングシステムでは、全ての割り込みが指定の最大時間内に確実に実行されなくてはなりません。つまり、リアルタイムオペレーティングシステムの割り込み遅延には制限があるということです。

性能

一般的に誤解されていることの1つに、リアルタイムシステムは汎用のオペレーティングシステムより優れた性能を持っているとの認識があります。リアルタイムオペレーティングシステムは、アプリケーション間やサービス間のマルチタスクが少ないため、場合によっては性能が優れていると言えなくはありません。しかし実際のアプリケーションの性能は、CPU速度、メモリアーキテクチャ、プログラム特性などによって決まります。

リアルタイムオペレーティングシステムの実行速度自体は速い場合もそうでない場合もありますが、汎用オペレーティングシステムに比べ、はるかに正確で予測可能なタイミング特性を持っていることは確かです。

ステップ

以下の資料では、NIのソフトウェアとハードウェアを使用して極力短時間で優れたリアルタイムシステムを構築する方法をご覧いただけます。