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

LinuxによるRTOSの実現(2):マイクロカーネル方式とリアルタイム性能 (1/3)

シンプルなリアルタイムカーネル上でLinuxを動作させるマイクロカーネル方式。その具体的な実装やリアルタイム性能を検証する

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

 第1回では、リアルタイムLinuxのさまざまな実現方法について述べた。今回は、マイクロカーネル方式を中心に性能比較なども交えて説明する。

マイクロカーネル方式とは

 マイクロカーネル方式の実装としては、RTLinuxとRTAIが有名であり活用例も多い。

 RTLinuxは、FSMLabs(http://www.fsmlabs.com/)が提供しているハードリアルタイムLinuxシステムである。商用版のRTLinuxProとオープンソース版のRTLinux/GPLがあるが、今回は広く入手可能なオープンソース版を評価する。

 一方、RTAI(Real-Time Application Interface)は、DIAPM(Department of Aerospace Engineering of Politecnico di Milano)で開発され、オープンソースプロジェクトとして進化を続けている(http://www.rtai.org/)。現在は、Adeosと呼ばれるナノカーネル上にLinuxカーネルが実装されている。将来的には、「fusion」と呼ばれるプロジェクトで以下のような機能が統合されていく。

  • ユーザー空間のアプリケーションとしてハードリアルタイムを実現
  • 既存のRTOSのAPIをスキンと呼ばれる仕組みで統合

 特に後者については、RTAI独自のAPIおよびPOSIX APIに加えて、μITRONやVxWorksなどの互換APIへの取り組みも散見される(注)。このように、fusionは非常に興味深いが実験的なリリースであるため、今回はRTAIの最新開発版を評価する。

※注:
fusion 0.6.9(本稿執筆時点における最新版)現在。


マイクロカーネルの役割

 RTLinux、RTAIともに、Linuxカーネルはマイクロカーネル(またはナノカーネル)の上で動作する。このマイクロカーネルを、RTLinuxは「Realtime executive」、RTAIは「Adeos」と呼んでいる。

 マイクロカーネルの主な機能は以下の3つである。

タスクのスケジューリング
タスクスケジューリングはマイクロカーネルで行う。Linuxカーネルでさえもマイクロカーネル上の1つのタスクとして振る舞い、最も低い優先度が割り当てられている。よって、Linuxカーネルがいかなる処理をしていても、リアルタイムタスクが走行可能な状態になれば、即座に処理を移すことができる。

ハードウェア割り込みの調停
ハードウェア割り込みは、すべてマイクロカーネルが管理する。ハードウェアから割り込みが通知されると、マイクロカーネル内のハンドラによって処理される。その後、Linuxカーネルが通知された割り込みに対してハンドラを登録している場合は、適切なタイミングでLinuxカーネルに対して割り込みを伝播する。これによりLinuxカーネルは、あたかも割り込みを直接通知されたかのように処理を行うことができる。

割り込み資源の調停 図1 割り込み資源の調停(第1回からの再掲)

タスクスケジューリングとハードウェア割り込みの調停機能により、Linuxカーネルの振る舞いに干渉されることなくハードリアルタイム処理を行うことができる。

タスク間通信
タスク間通信としては、FIFOや共有メモリといった機構が提供されている。特に、Linuxタスクに対しては、Linuxプロセスとリアルタイムタスク間で通信するAPIを定義している。

Linuxとリアルタイムタスク間の通信 図2 Linuxとリアルタイムタスク間の通信(第1回からの再掲)

 以上のように、ハードリアルタイムな制御はマイクロカーネルの管理下で行い、ネットワークやマルチメディアなどの機能はLinuxカーネル(タスク)の管理下で実現する。これにより、リアルタイム性と豊富な機能を兼ね備えたシステムを構築できる。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.