次のページ 前のページ 目次へ

3. なぜ RTLinux なのか

標準の Linux カーネルの動作を調べれば、RTLinux を設計した理由が分かります。 Linux カーネルはハードウェアをユーザレベルのタスクから切り離します。 カーネルはスケジューリングアルゴリズムを用い、平均的に優れた性能、 スループットを提供するよう各タスクに優先度を割り当てます。従って、 どのユーザレベルのタスクであっても、そのタスクが CPU により割り当てられているタイムスライスを超過したら、 Linux カーネルはタスクを停止できます。このスケジューリングアルゴリズム に加え、デバイスドライバ、割り込み不可能なシステムコール、 割り込み無効化や仮想メモリ操作などが予測不可能性(unpredictability) の原因になります。つまり、以上の要素がタスクのリアルタイム性能の 障害になっています。

Linux がリアルタイムな性能を保証しないことは、例えば 'mpg123' などのプレイヤーで音楽を聴いているなら、既にご承知のことかもしれません。 予め決められたタイムスライスでプロセスを実行した後で、標準の Linux カーネルはタスクを中断して CPU に別のタスク(例えば、X サーバや Netscape の立ち上げを行うタスク)を割り当てることが可能です。 結果として、音楽の連続性が失われてしまいます。このように、 CPU 時間をすべてのプロセスに公平に分配しようと試みることにより、 カーネルは他のイベントが起こらないようにできるのです。

リアルタイムカーネルならば、そのカーネルの元で動くプロセスが要求する タイミングを保証することが可能なはずです。RTLinux カーネルは、 上で議論した予測不可能性の原因となるものを除去することにより リアルタイム性能を実現しています。RTLinux カーネルは、標準の Linux カーネルとハードウェアの間に位置すると考えることができます。 Linux カーネルは、リアルタイム層を事実上のハードウェアとみなします。 つまりユーザは、一つ一つのタスクの導入とその優先度の設定の両方が行えます。 ユーザはスケジューリングアルゴリズム、優先度、 実行頻度などを決めることでプロセスの正確な実行タイミングを実現できます。 RTLinux カーネルは、標準の Linux カーネルに最低の優先度を割り当てます。 こうすることでユーザタスクがリアルタイムに実行されることになります。

実際のリアルタイム性能は、すべてのハードウェア割り込みを遮断 することにより達成されます。RTLinux に関連する割り込みに対してのみ、 適切な割り込みサービスルーチンが動作します。それ以外の割り込みは 全て一旦保留され、RTLinux カーネルがアイドル状態になり標準の Linux カーネルが稼働したときにソフトウェア割り込みとしてカーネルにわたります。 RTLinux の実行部そのものはノンプリエンプティブです。

リアルタイムタスクは優先され(つまりそれらはハードウェアに直接アクセスする)、 仮想メモリは利用しません。リアルタイムタスクは、 メモリに動的にロード可能な、特殊な Linux モジュールとして書かれます。 リアルタイムタスクの初期化コードは、リアルタイムタスク構造体を初期化し、 RTLinux カーネルにその期限、周期、そして解放時間制限を通知します。

Linux カーネルには手を加えないので、RTLinux は Linux カーネルと共存します。比較的単純な修正を一通り行えば、将来の Linux 開発の妨げになることなく、既存の Linux カーネルをハードリアルタイム環境に うまく変えることができます。


次のページ 前のページ 目次へ