組み込み分野では、リアルタイム性の保証が重要なテーマの1つとなる。Linuxでも、それを実現するための取り組みが行われている
組み込み機器に搭載する目的でLinuxが注目されるに従って、リアルタイム性能の不足が浮き彫りになってきた。本連載では、組み込み機器に求められるリアルタイム機能とは何か、そしてLinuxはどのような取り組みでその不足を克服しつつあるかを解説する。
まず、以降の解説の前提となる「リアルタイム機能」について簡単に説明する。
リアルタイム性が求められる処理は、大きく以下の2つに分類できる。
一定間隔で実行される処理は前者に当たり、特に「周期タスク」と呼ぶ。しかし、これらの開始時間はさまざまな要因で遅れ、想定した時刻に開始することができない。この遅れが「レイテンシ」(遅延)と呼ばれるものである。また、両者に共通して、開始された処理は予測可能な期間で終了することも求められる。ここで、想定した開始時刻から処理を終了すべき時刻(デッドライン)までの時間を「デッドライン時間」と呼ぶ。
周期タスクを例に、これらの用語を図1にまとめる。
次に、デッドラインの意味を考えてみよう。デッドライン時間内に処理が完了しないと何が起きるだろうか? 身近な例として自動車に当てはめてみると、以下のようなケースが考えられる。
(1)や(2)のように、時間内に処理が完了しないと多大な損害を与えるものは、時間を守ることが最優先事項となる。このような用途に適用する処理を、「ハードリアルタイム処理」と呼ぶ。
一方、(3)のように時間内に処理が完了しなくても、結果は有効なものとして処理を続行できるものもある。この場合、平均的にどれくらいの時間で処理を完了できるかが評価の基準となる。このような処理を「ソフトリアルタイム処理」と呼ぶ。
よく、「ハードリアルタイムはマイクロ秒(μs)、ソフトリアルタイムはミリ秒(ms)の精度で処理が可能」など、処理速度の比較で区別されることもあるが、これは誤りである。
次に、前出のレイテンシがどのような要因で発生するか、システム実装に近いイメージで説明する。
図2は、外部要因でイベントが発生してから、これを処理するタスクが始まるまでの流れを表している。イベントが発生すると、割り込みという形でOSに通知される。一般的なOSでは、割り込みを禁止して処理する部分があり、これが最初の遅延要因になる。また、走行しているタスクから割り込みハンドラに処理を移す際に、レジスタを退避するなどの時間がかかる。ここで、イベントが発生してから、実際に割り込みハンドラが呼び出されるまでの時間を「割り込みレイテンシ」と呼ぶことにする。通常、割り込みハンドラはイベントに関する必要最小限の処理を行うにとどめて、本格的な処理を行うタスクを起床する。その結果、イベントを処理するタスクが開始される。イベント発生から、ここまでの時間がレイテンシとなる。
レイテンシの要因をまとめると以下のとおりとなる。
OSのリアルタイム性能を語る場合、これらの要因による遅延時間が指標として用いられる。
Copyright © ITmedia, Inc. All Rights Reserved.