連載
» 2005年01月12日 00時00分 公開

LinuxによるRTOSの実現(1):リアルタイム機能とLinuxでの実現方法 (1/2)

組み込み分野では、リアルタイム性の保証が重要なテーマの1つとなる。Linuxでも、それを実現するための取り組みが行われている

[近藤 純司 富士通プライムソフトテクノロジ,@IT MONOist]

 組み込み機器に搭載する目的でLinuxが注目されるに従って、リアルタイム性能の不足が浮き彫りになってきた。本連載では、組み込み機器に求められるリアルタイム機能とは何か、そしてLinuxはどのような取り組みでその不足を克服しつつあるかを解説する。

リアルタイム機能とは?

 まず、以降の解説の前提となる「リアルタイム機能」について簡単に説明する。

 リアルタイム性が求められる処理は、大きく以下の2つに分類できる。

  • あらかじめ決められた時間に処理(タスク)が開始できる
  • 何らかのイベント(事象)が発生してから、決められた時間内に処理が開始できる

 一定間隔で実行される処理は前者に当たり、特に「周期タスク」と呼ぶ。しかし、これらの開始時間はさまざまな要因で遅れ、想定した時刻に開始することができない。この遅れが「レイテンシ」(遅延)と呼ばれるものである。また、両者に共通して、開始された処理は予測可能な期間で終了することも求められる。ここで、想定した開始時刻から処理を終了すべき時刻(デッドライン)までの時間を「デッドライン時間」と呼ぶ。

 周期タスクを例に、これらの用語を図1にまとめる。

周期タスクに見るリアルタイム処理の流れ 図1 周期タスクに見るリアルタイム処理の流れ

デッドラインとハード/ソフトリアルタイム処理

 次に、デッドラインの意味を考えてみよう。デッドライン時間内に処理が完了しないと何が起きるだろうか? 身近な例として自動車に当てはめてみると、以下のようなケースが考えられる。

  • (1)ブレーキペダルを踏んだ後、一定の時間内にブレーキが利かず、追突事故が起きた
  • (2)衝突事故の発生時に、一定の時間内にエアバッグが作動せず、人命に多大な影響を与えた
  • (3)FM波による渋滞情報の取得が決められた時刻から少し遅れて完了したが、有効な情報として処理を続行した

 (1)(2)のように、時間内に処理が完了しないと多大な損害を与えるものは、時間を守ることが最優先事項となる。このような用途に適用する処理を、「ハードリアルタイム処理」と呼ぶ。

 一方、(3)のように時間内に処理が完了しなくても、結果は有効なものとして処理を続行できるものもある。この場合、平均的にどれくらいの時間で処理を完了できるかが評価の基準となる。このような処理を「ソフトリアルタイム処理」と呼ぶ。

 よく、「ハードリアルタイムはマイクロ秒(μs)、ソフトリアルタイムはミリ秒(ms)の精度で処理が可能」など、処理速度の比較で区別されることもあるが、これは誤りである。

レイテンシの要因

 次に、前出のレイテンシがどのような要因で発生するか、システム実装に近いイメージで説明する。

イベント発生からタスクの開始まで 図2 イベント発生からタスクの開始まで

 図2は、外部要因でイベントが発生してから、これを処理するタスクが始まるまでの流れを表している。イベントが発生すると、割り込みという形でOSに通知される。一般的なOSでは、割り込みを禁止して処理する部分があり、これが最初の遅延要因になる。また、走行しているタスクから割り込みハンドラに処理を移す際に、レジスタを退避するなどの時間がかかる。ここで、イベントが発生してから、実際に割り込みハンドラが呼び出されるまでの時間を「割り込みレイテンシ」と呼ぶことにする。通常、割り込みハンドラはイベントに関する必要最小限の処理を行うにとどめて、本格的な処理を行うタスクを起床する。その結果、イベントを処理するタスクが開始される。イベント発生から、ここまでの時間がレイテンシとなる。

 レイテンシの要因をまとめると以下のとおりとなる。

  • OSの割り込み禁止区間による遅延
  • レジスタ退避などのコンテキストスイッチによる遅延
  • スケジューラによるディスパッチ時間による遅延

 OSのリアルタイム性能を語る場合、これらの要因による遅延時間が指標として用いられる。

       1|2 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.