沼津高専 電子制御工学科
技術調査 報告
リアルタイム処理とRT-Linux
MIRS0104-TECH-0012
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2001.12.13 前原 森元 初版

調査報告:リアルタイム処理とRT-Linux

目次

  1. RTLinuxとは
  2. RTLinuxの処理の流れ
  3. 提供されるAPI関数
  4. 実行方法

1.RTLinuxとは

RTLinux(RealTimeLinux)は、Linuxが動作しているコンピュータにインストールすることで作成される、リアルタイム処理用のOSであり、Linuxの持つ各種のソフトウェアツールや開発環境、各種のアプリケーションソフトウェアをそのまま使用することができる。
しかし、RTLinuxは厳密な意味ではリアルタイムOSではなく、RTLinuxが提供するのはスケジューラとプロセス間通信のみである。RTLinuxは仮想マシンをLinuxに提供し、Linuxを優先順位の低い1つのリアルタイムプロセスとして実行することでリアルタイム処理と従来のLinuxの処理の共存を実現している。

リアルタイム処理

他のデバイスからの入力信号や、プログラムからの要求に対してほぼ同時とみなせる許容時間の範囲内で、コンピュータが何らかの処理を行う方式。
制御システム等では一定時間内に処理を確実に終了しなければならない場合があり、このようなリアルタイム性を保証し、許容される時間内に処理の完了を保証する。

リアルタイムOS

リアルタイムOSとは、リアルタイム処理を行うために使われるオペレーティングシステムであり、例えば割り込みイベントが発生してから1msec以内に必ず割り込み処理プログラムを起動したり、50msec以内に必ずタイマ割り込み処理プログラムを呼び出したり、ということが求められる。
もしこれが遅れてしまうと、データの取りこぼしやモータの停止が間に合わなかったりするなど、致命的な結果を招く可能性があるため、このようなリアルタイム処理を実現するために、ある一定時間以内のタスクの起動を保証するなどの機能を持っている。

2.RTLinuxの処理の流れ

3.提供されるAPI関数

POSIXスタイルインターフェイス関数
API関数機能
Pthread_createスレッドの生成
Pthread_exitスレッドの終了
Pthread_killスレッドへのシグナル送信
Pthread_selfスレッドIDの取得
Pthread_attr_initスレッドアトリビュートオブジェクトの初期化
Pthread_attr_getstacksizeスタックサイズ属性の取得
Pthread_attr_setstacksizeスタックサイズ属性の設定
Pthread_yieldスレッドのCPU明け渡し指示
Pthread_setschedparamスケジューリング属性の変更
Pthread_attr_getschedparamスケジューリングプライオリティ属性の取得
Pthread_getschedparamスケジューリング属性の取得
Pthread_attr_setschedparam スケジューリングプライオリティ属性の設定
clock_gettimeタイマー値の取得
clock_settimeタイマー値の設定
clock_getresタイマー分解能の取得
sched_get_priority_maxスケジューリングポリシー毎のプライオリティの最大値の取得
sched_get_priority_minスケジューリングポリシー毎のプライオリティの最小値の取得
pthread_mutexattr_getpshared(3) Mutex属性オブジェクトのプロセス間共有設定の取得
pthread_mutexattr_setpshared(3) Mutex属性オブジェクトのプロセス間共有設定の設定
pthread_mutexattr_init(3)Mutex属性オブジェクトの生成、初期化
pthread_mutexattr_destroy(3)Mutex属性オブジェクトの破棄
pthread_mutexattr_settype(3)Mutexタイプ属性の設定
pthread_mutexattr_gettype(3)Mutexタイプ属性の取得
pthread_mutex_init(3)Mutexの初期化
pthread_mutex_destroy(3)Mutex破棄
pthread_mutex_lock(3)Mutexのロック
pthread_mutex_trylock(3)Mutexのロック
pthread_mutex_unlock(3)Mutexのアンロック
*相互排除用のフラグをMutexという。

非POSIXスタイル関数
API関数機能
pthread_attr_setcpu_npCPU IDのスレッド属性オブジェクトの設定
pthread_attr_getcpu_npCPU IDのスレッド属性オブジェクトの取得
pthread_wait_npスレッドの周期実行の抑制(wait)
pthread_delete_npスレッドの削除
pthread_setfp_npスレッドの浮動小数・演算の使用許可
pthread_make_periodic_np スレッドのリアルタイム実行条件を指示
pthread_suspend_npスレッドをサスペンド
pthread_wakeup_npサスペンド中のスレッドを再開

スレッド

スレッドとは、複数のCPUを持つコンピュータシステム上で共有メモリを使用して並列処理を行うOS機能である。スレッドプログラミングを行うことで、1つのプログラム(プロセス)の中で、複数のスレッドがアドレス空間を共有して、情報の交換を高速で効率的に行うことができる。RTLinux V2.xでは、スレッドの生成や終了、サスペンド、リアルタイム周期動作の設定を次のように行います。

4.実行方法

ユーザプロセス、モジュールの作成

モジュールとは、Linuxカーネルに機能を追加するためのものである。RTLinuxではリアルタイム処理のプログラムはモジュールの形で作成する。

モジュールの簡単な構成を以下に示す。
  1. モジュールを組み込む時に呼び出される初期化処理(init_module)
  2. モジュールを外す際に呼び出される終了処理(cleanup_module)
  3. リアルタイムFIFOや割り込みの発生時のリアルタイムタスクの処理(my_handler)
  4. リアルタイム処理する内容(任意のコールバック関数)

ユーザプロセスとは、リアルタイム性がないLinux上で処理を行うものである。
  1. リアルタイムFIFOとの情報交換は通常のファイル操作とほぼ同様のやり方で行える
  2. その他特に変わった点は無い。

モジュールの操作

モジュールの組み込み、削除はスーパユーザのみ可能である。

ユーザプロセスの実行

通常のLinuxでの使用と変わらない。

関連文書