「ソフテックだより」では、ソフトウェア開発に関する情報や開発現場における社員の取り組みなどを定期的にお知らせしています。
さまざまなテーマを取り上げていますので、他のソフテックだよりも、ぜひご覧下さい。
ソフテックだより(発行日順)のページへ
ソフテックだより 技術レポート(技術分野別)のページへ
ソフテックだより 現場の声(シーン別)のページへ
数年前までは、組み込みソフトに求められる機能は多くありませんでしたが、CPUの高性能化、メモリの大容量化によりソフトに求められる機能が大規模化、複雑化してきています。このような要件に対応する手法として“RTOS(Real Time Operating System)”を用いることがあります。
今回はRTOSの概要から機能についてのレポートです。
RTOSとはReal Time Operating Systemの略で、リアルタイム性を持ったOSのことです。 リアルタイムOSと呼ばれるものは、応答時間が一定の範囲内であることが保証されているという特徴があります。
RTOSもOSであるため、Windows等のPC用OSと同様にマルチタスク機能(タスクのスケジューリング)、タスク間同期・通信機能、メモリ管理等の機能を有しています。
RTOSの代表的なものとして、ITRON仕様準拠OSがあります。(株式会社MISPOのNortiやルネサステクノロジのHIシリーズ等)
ITRON以外として、Wind River社のVxWORKs、組み込み用Linux、Microsoft社のWindows CE、Windows Embeddedなどがあります。
今回のレポートでは、ITRON仕様準拠OSを例に説明します。
タスクとは、OSがCPU時間を割り当てる単位(実行処理単位)になります。OSは決められたスケジューリング方法に基づいて、タスクの実行を管理(スケジューリング)します。
スケジューリング方法としては、以下の2つがあります。
“プリエンプティブ”とは、CPU時間をOSが管理する方式のことです。
この方式では、OSはタスクに設定された優先度を元に、実行管理を行います。
この方式では、同優先度のタスクに対して均一にCPU時間を割り当てます。
それだけではシステムとしてリアルタイム性が低くなってしまうため、優先度ベースのプリエンプティブと絡めて実装されます。
マルチタスク環境で1つのシステム(機能)を実現する場合、他タスクの処理を待つことや、排他制御を行う必要が出てきます。
このような場合に、イベントフラグ、セマフォなどの同期オブジェクトが使用されます。
1つの事象を1ビットに割り当てておき、タスクはその事象を待つことができます。
セマフォとはタスク同期に用いられるオブジェクトのことで、和訳は手旗信号、信号機の意味です。
セマフォに設定されたカウンタ数までのアクセスが可能であるため、マルチタスク環境でリソース(I/Oやメモリなどの資源)の排他制御を行うことができます。
アプリケーション実装時には、タスク間で同期オブジェクトを用いて処理順の制御や、リソースの使用管理を行います。
タスク間同期で注意する点として“デッドロック”があります。
これは複数タスクがリソース獲得待ちなどで永久に待ち状態になる状態のことです。
デッドロックは組み込みシステムではシステム停止という致命的な問題になるため、発生させない設計、実装を行うことや復帰手段を持たせることになります。
実際の開発時には資源の排他制御用オブジェクトへアクセスするタスクが複数になる場合や繰り返し処理を行うような場合には注意して設計、実装を行うようにしています。
タスク間同期と同様に、システム実現には複数タスク間でのデータ受け渡しや実行指示を行う必要があります。
このような場合にメールボックス、メッセージバッファなどの通信機能が使用されます。
タスク間通信の処理で、データアドレスの受け渡しを行う方式であり、処理データサイズが固定長になるため、OSの処理時間を予測することができます。
メールボックスと同様の通信機能ですが、データそのものを受け渡す方式のため、処理データサイズが可変になり処理時間を予測することが難しくなります。
RTOSを使用したソフトウェア開発では、これらのOS機能を組み合わせることによりソフトウェアに要求される機能を実現することになります。
RTOSは一概に載せたほうがよいというものでもありません。
対象となるシステム(ソフトウェア)により、RTOSあり/なしの選択を行うことになります。
さまざまな通信,入出力を並列で動作させる必要があり、それに対する処理も行うようなソフトウェアを開発しようとした場合、以下のような状態が想定されます。
このようなソフトウェアでは、RTOSを使用することにより、開発効率のアップや、メンテナンス性を保つことができるようになります。
例1とは反対に単一機能のみで、その機能だけを行うようなソフトウェアの場合、以下の状態が想定されます。
このようなソフトウェアでは、RTOSを使用する利点が無い(もしくは利用できない)ことになり、使用しないで開発を行うことになります。
上記2例とは別に、RTOSを使用できるような構成でもマイクロ秒での処理が必要なソフトウェアではRTOSを使用することで、タスク切り替え時間などのOS処理時間が入りソフト要件を満たせない場合も出てきます。
このような場合はRTOSを使用しない(使用できない)ことになります。
RTOSあり/なしの選択とも関連しますが、RTOSを使用することによるメリット/デメリットは以下のようになります。
システム設計段階では、ソフトウェアへの要求、ハード構成、開発規模と上記のメリット/デメリットを考慮してRTOS使用の有無を判断することになります。
(Y.S.)
関連ページへのリンク
関連するソフテックだより