PR

組み込みシステムでは処理時間の制約が厳しいなか,センサーやスイッチからの情報をもとに,モーターなどを適切なタイミングで的確に制御しなければならない。その中核を担うのがリアルタイムOSである。高い応答性能が求められるので“軽い”ことが必須だ。

(本誌)

 前回は,リアルタイムOSを知る上で前提となる,「組み込みシステム」について述べた。組み込みシステムには,(1)専用化されている,(2)リソースの制約が厳しい,(3)高い信頼性,(4)リアルタイム性が求められる,という特徴がある。そのソフトウェアの中核をなすのが,本稿の主題であるリアルタイムOS*1である。

 リアルタイムOSとは,文字通り,リアルタイム処理を行うシステムに使うOSを指す。ここで言うリアルタイム処理を研究者の間では,「処理結果の正しさが,出力される結果の値の正しさに加え,結果を出す時刻にも依存するような処理」と定義することが多い。つまり,何らかの時間要件(時間制約)に従わなければならないシステムで用いられるOSを意味する。

 ここでリアルタイム処理が,速い処理速度や短い応答時間を意味しているわけではない点に注意してほしい。“リアルタイム”という言葉のイメージが先行しているせいか,こうした誤解が少なくないのは残念である。本稿では,こうした誤解を解きたいと思っている。

 なおリアルタイム・システムのなかには,時間要件を満たさなかった場合に,重大な事態を引き起こす可能性をもつものがある。筆者が取り組む自動車制御もその一つだが,こうしたシステムを「ハード・リアルタイム・システム」と呼ぶ。ハード・リアルタイム・システムでは,設計時に時間要件を満たすことを保証しなければならない。時間的な振る舞いが動かすまでわからない状態では,時間要件を満たすことを保証できない。これが自動車なら,危なくて世の中に出せないことになる。システムを動作させる前に時間的な振る舞いを予測できる性質を「予測可能性」と呼ぶ。

リアルタイムOSに不可欠な二つの特徴

 さて,リアルタイムOSとはリアルタイム・システムを構築するためのOSと述べたが,OSだけではどうしようもない。重要なのは,アプリケーション・ソフトウェアが,必要な機能を所望の時間内に実現できて,はじめて製品として成立する。この観点からすると,アプリケーション・ソフトウェアが時間要件を満たせるようにするOSが,リアルタイムOSと言い換えることもできる。そのためにリアルタイムOSは,少なくとも二つの特徴をもたなければならない*2

 第1の特徴は,アプリケーション・ソフトウェアが時間要件を満たして動作できるようなスケジューリング・アルゴリズムを用いること。時間要件に留意しながらアプリケーションを開発しても,スケジューリングが不適切で所望の時間内に処理が終わらないようでは話にならない。アルゴリズムについては,後で詳しく述べたい。

 もう一つの特徴は,予測可能性を持つことだ。OSが予測可能性を持つとは,OSのシステムコールの処理時間や割り込みに対する応答時間などを予測できることを意味する。前述のように,リアルタイム・システムは予測可能性を持つことが不可欠であり,要素部品としてのリアルタイムOSにも同じ条件が求められる。

 実際,リアルタイムOSのマニュアルには,システムコールの処理時間や割り込みに対する応答時間の最大値が掲載されていることが多かった。筆者も,そうしたマニュアルを読んできた。

 ただし,ここで「多かった」と過去形で書いたのには理由がある。最近のプロセッサはキャッシュを搭載し,プログラムの実行時間を見積もりにくくなっている。例えば最大時間を算定するために,すべてのメモリ・アクセスでキャッシュ・ミスが起こると仮定すると,最大実行時間はかなり長くなる。そのままマニュアルに載せると,性能の悪いリアルタイムOSだと誤解されかねない。しかも,すべてのメモリ・アクセスでキャッシュ・ミスが発生するようなことは,実際のシステムでは起こり得ない。メーカーとしては,そのような最大実行時間を記述するのを躊躇することになる。

 OSの最大処理時間や最大応答時間の有用性が低くなっていることも,過去形にした理由の一つである。アプリケーション・ソフトウェアの規模が小さければ,クロック数を数えて最大処理時間を評価することができた。しかしアプリケーションの大規模化と複雑化に伴い,とてもじゃないが最大処理時間の算出は不可能になったし,その意義はいまや小さい。

 そこで,入力を変更しながら処理時間を求め,その最大値に安全係数をかけて最大処理時間と見なす方法が現実には採用されている。この方法を前提に考えると,リアルタイムOSに求められる予測可能性とは,計測から最大処理時間が正しく見積もれ,特殊な条件でも性能が急激に落ちないことだと,筆者は考えている。