• 公開日:2018年02月26日
  • | 更新日:2022年11月21日
RTOS

TI-RTOSを題材にRTOSについて学ぶ ~入門編~

はじめに

OS(オペレーティング・システム)というと、パソコンで使用されているWindowsやLinux、Mac OSを始め、スマートフォンではiOSやAndroidなど、多くのOSが存在します。それではリアルタイムOS(以降、RTOS)とはなんでしょうか?RTOSと普段私たちが使っているOSとの違いは何なのでしょうか?

本記事ではTexas Instruments社(以降、TI社)のTI-RTOSをもとにRTOSの仕組みや一般的なOSとの違いなどの基礎的な説明をしていきます。

そもそもOSとは?

RTOSもOSであることには変わりません。では、OSとは何なのでしょうか?何をしているものなのでしょうか?まずはこれについて学びましょう。

OSとはパソコンやスマートフォン、その他の装置、機械などが動作するためにハードウェアやソフトウェアを管理、制御してくれるソフトウェアです。テレビなどでは「基本ソフトウェア」と呼ばれることもあります。

パソコンでファイルをダウンロードしながら表計算ソフトで作業したり、音楽を聴きながらブラウザで検索したりすることがあると思います。このように同時に複数のアプリケーションを立ち上げて動作させることができるのも、そして、それぞれのアプリケーションがちゃんと動作できるのも、OSがプロセス管理(またはタスク管理)をしてくれているおかげです。

パソコンやスマートフォンだけでなく、最近の家電製品や産業機械では高度で複雑な処理を行うことが多いため、こういったものにもOSは搭載されています。

RTOSはリアルタイムなOSのこと

RTOSはその名の通り、リアルタイム性のあるOSのことです。リアルタイム性とは、ある処理の応答に対して、時間的な制約が求められるような性質のことを言います。

例えば車の場合、ブレーキを踏むと即座に車が反応してブレーキが効く。このような処理にはリアルタイム性が不可欠になります。ブレーキを踏んでから実際にブレーキが効き始め、停止するまでの時間が、遅かったり一定でなかったりしたらとても危なくて運転できないでしょう。

リアルタイム性

つまり、RTOSはあるイベント(上記の例ではブレーキ)が発生し、それに対する応答時間が早く、なるべく一定となるような機能をもったOSと言えます。

とはいえ、一般的なOSが駄目という話ではありません。上述のようなリアルタイム性が求められないケースであれば、もちろんRTOSである必要性はありません。ほとんどの人は10ミリ秒以下の時間的な差を認識できないといわれています。つまり、パソコンやスマートフォンなどであれば、応答時間にある程度のばらつきがあっても特に問題はないと言えます。

しかし、リアルタイム性を重視したシステムにおいて応答時間が大きくばらついてしまうと動作が安定しなかったり、精密な動きができなかったり・・・とさまざまな問題が起こるかもしれません。これらが致命的な問題となってしまう時はRTOSを搭載することを検討したほうがよいでしょう。

RTOSの重要な機能「タスク管理」

OSは多くの機能持っていますが、本記事ではそのうちのタスク管理機能に絞り、TI-RTOSの例と絡めて説明していきます。(※タスクはコンピュータで処理される仕事の最小単位のことを指し、タスク管理機能は複数のタスクを同時並行的に処理できるように管理する機能のことを指しています。)

TI-RTOSはTI社が提供しているRTOSです。TI-RTOSはプリエンプティブなスケジューラを持つRTOSで、TI社のマイコン、プロセッサのほぼすべてに搭載させることができます。もともとはSYS/BIOSという名前でしたが、サポートするデバイスの増加とバージョンアップに伴い、現在ではTI-RTOSという名前に変わっています。

「プリエンプティブ」ってなに?

タスクを実行させるには、どのタスクにCPUの使用権限を割り当てるか制御する必要があります。このCPUの使用権限の割り当てを行うのがスケジューラです。これは数あるOSの機能のうちの一部で、この割り当ての方法にもさまざまな種類があります。

「プリエンプティブ」とは、このCPUの使用権限の割り当てをOS側が行う仕組みのことで、現在実行しているタスクより優先度が高いタスクが実行待ち状態になった時、OSが現在実行中のタスクを強制的に一時停止し、優先度の高いタスクにCPUの使用権限を割り当て、そのタスクを実行させます。

プリエンプティブなマルチタスク
現在実行中のタスクAより優先度が高いタスクBが実行待ちになった場合、タスクAを一時停止してタスクBにCPUを割り当て実行させる。CPUの割り当てをOS主導で行う方式

一方、タスク側でCPUの使用権限の解放を行う仕組みもあり、こちらは「ノンプリエンプティブ」と呼ばれます。こちらにはタスク間の優先度という考え方はありません。

ノンプリエンプティブの場合はタスク側がいつまでもCPUの使用権限を解放しないと他のタスクの実行も妨げられてしまうため、そのようなシステムの設計ミスが含まれていると、結果としてシステム全体の動作が止まってしまう、といった問題が起こる可能性があります。プリエンプティブの場合はそのような心配がなくて済みます。

ノンプリエンプティブなマルチタスク
タスクBが実行待ちになった場合、現在実行中のタスクAの自発的なCPU解放の後にタスクBにCPU割り当てを行う。タスクAがCPUを解放しないとタスクBは実行することができない

このタスクの実行切り替えのことをスケジューリングといいます。スケジューリングにはいろいろな方式がありますが、TI-RTOSでは優先度にもとづくスケジューリングが行われています。

TI-RTOSの優先度

TI-RTOSではHwi、Swi、Task、Idleの4種類のスレッドが用意されており、それぞれで優先度が決まっています。

TI-RTOS実行中は常にこの4種類のスレッドの何れかの処理をCPUが実行していることになります。

TI-RTOSの優先度

Hwi:ハードウェア割り込み

Hwiはデバイス固有のハードウェア割り込み処理のことを指します。マイコンの基本的な割り込み処理と同じ働きをします。例えば、GPIOによる割り込信号や、シリアルポートの送受信割り込み信号などもHwiのスレッドとして扱われます。優先度の高い、タイミングクリティカルな処理をHwiスレッドで行い、それ以外の処理はSwiやTaskスレッドに任せます。

優先度としては4つのスレッドのなかで最も高いです。

Swi:ソフトウェア割り込み

ソフトウェアで定義する割り込み処理のことを指します。ハードウェア割り込みと違って、Swiはソフトウェアによってポストされ、Hwiスレッドの続きの処理を行うイメージで用いられます。

Swiスレッドの優先度は自由に決められ、最大で32段階の優先順位付けが可能です。優先度はHwiに次いで高くなっています。

Task:タスク

TI-RTOSにおけるTaskはプログラム中に常駐している処理の単位のことを指します。機能としてはSwiスレッドと似ていますが、Taskスレッドはセマフォ(タスクシグナリングメカニズム)というものを使って、タスクの停止、実行、優先度の変更等を行うことができます。

Swiスレッドと同様に優先度は自由に決められ、最大で32段階の優先順位付けが可能です。優先度はSwiに次いで高くなっています。

Idle:バックグラウンド処理

Hwi、Swi、Taskの各スレッドが実行していない間は、このIdleスレッドに遷移しています。

最も優先度が低い処理になり、メイン関数のwhileループと同じ働きをします。ユーザーはこのIdleスレッド内で何かの演算処理などを行う関数コールすることも可能です。

リアルタイム性の実現方法と優先順位の管理

OSを実装しないケースの場合、割り込みが発生するとCPUがその割り込み信号を受け付けて、インターラプト・サービス・ルーチン(ISR)をコールします。通常、このISRの処理中は割り込みが禁止されているため、現在実行中の割り込み処理が終了してからでないと新たに発生した割り込みに対して応答できません。

たとえば、この間に他の重要な割り込み信号が発生してしまった場合、それに対して即座に応答することができません。そして、割り込み禁止期間が長ければ長いほど、リアルタイム性が失われていくことになります。

Hwiのみで処理
Hwiの中で緊急でない処理までやってしまうと割り込み禁止期間(他の割り込みを受け付けられない期間)が長くなってしまい、リアルタイム性が損なわれてしまう

もちろん多重割り込みを用いて重要な割り込み処理を実行することも可能でしょう。しかし、ISR処理中に割り込みが複数個発生したとしたら・・・ これらの割り込み処理の優先順位も開発者は考慮しなくてはなりません。ただ、多くの割り込みを多用するようなシステムでは、割り込み優先順位の考慮も容易ではありません。

このリアルタイム性の担保と、優先順位付けに基づいたスレッド処理がRTOSの肝と呼べます。

TI-RTOSでは、HwiとSwi、そしてTaskスレッドを使い分けることによって、リアルタイム性を実現しています。入力されたデータのバッファリングなど、ISR中に実行しなければならない重要な処理(緊急な処理)は、Hwiスレッドで実行します。それ以外の緊急度の低い処理は、SwiやTaskスレッドにて実行させます。

HwiとSwiで処理
緊急な処理のみHwiで処理し、緊急でない処理をSwiで処理することで、割り込みを受け付けられない期間を短くする

SwiやTaskスレッドは割り込み禁止されていないため、Hwiや他の優先度の高いスレッドを実行することができ、重要な割り込み処理に応答することができます。割り込み禁止期間を完全に無くすことはできませんが、割り込み禁止期間を短くすることによってリアルタイム性を高めることができます。

まとめ

RTOSの仕組みと、TI-RTOSの基本的な機能について説明しました。

モーターの制御を行うようなアプリケーションなど、リアルタイム性が必要となるアプリケーションは数多くあります。

TI-RTOSはTI社のマイコンであればほぼすべてで使用でき、無償で使用できるRTOSです。今回ご紹介した機能以外にも様々な機能が実装されていますので、詳しく知りたい方は下記のURLからユーザーガイドや、トレーニング資料をご覧ください。

参考情報