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

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

[近藤 純司 富士通プライムソフトテクノロジ,@IT MONOist]
前のページへ 1|2       

リアルタイムLinuxの実現

 話をLinuxの世界に移すと、組み込みLinux業界動向で述べたとおり、The Linux Kernel Archives(http://www.kernel.org/)で公開されているupstreamカーネル(オリジナルカーネル)では、組み込みシステムに必要なリアルタイム性能が不足している。これを克服するさまざまな取り組みが行われている。ここでは、各種の取り組みを以下の3種に分類して説明する。

  • マイクロカーネル方式
  • ハイブリッド方式
  • スタンドアロン方式

マイクロカーネル方式

 マイクロカーネル方式は、Linuxとハードウェアの間に、Linuxから独立して動作するシンプルなカーネルを配置する手法である。提唱者により呼び方はさまざまではあるが、本連載では以降、このシンプルなカーネルを「マイクロカーネル」と呼ぶ。

 マイクロカーネルの管理下では、Linuxおよびリアルタイムタスクが同格で動作する。マイクロカーネルの主な機能は以下のとおり。

  • Linuxとリアルタイムタスク間での割り込み資源の調停(図3)
  • Linuxとリアルタイムタスクのスケジューリング
  • Linuxとリアルタイムタスク間の通信(図4)
  • メモリ資源の管理
割り込み資源の調停 図3 割り込み資源の調停

Linuxとリアルタイムタスク間の通信 図4 Linuxとリアルタイムタスク間の通信

 この方式のメリットとしては、マイクロカーネル上にLinux以外のOSや複数のOSを同時に配置できるなど、柔軟性が高い点が挙げられる。また、リアルタイムタスクを開発する際のAPIもPOSIX規格に準拠したものが多く、UNIX系の開発者にとってなじみやすい。逆に、リアルタイムタスクが障害による異常終了や暴走などで設計どおりに動作しない場合、システム障害に直結するといったデメリットがある。

 この方式の主な実装例は以下のとおり。

RTLinux

RTAI

Adeos

Jaluna-2

ハイブリッド方式

 ハイブリッド方式はマイクロカーネル方式に構成は近いが、既存のリアルタイムOSを活用する点で異なる。

 日本国内では、Linuxと組み合わせるリアルタイムOSとしてITRONまたはT-Engineを採用するケースが多い。これらは、「Linux on ITRON」と呼称されている。Linux on ITRONの場合、LinuxはITRONの1つのタスクとして最も低優先度で動作する。この方式の実装方法については、Emblix(日本エンベデッド・リナックス・コンソーシアム:http://www.emblix.org/)のハイブリッドアーキテクチャワーキング・グループで検討され、第1版の仕様が公開されている。

Linux on ITRONの構成例 図5 Linux on ITRONの構成例

 T-Engine(注)の場合、「T-Linux」というミドルウェアを用いてハイブリッド方式を実現することができる。これはモンタビスタソフトウェアによって開発され、パーソナルメディアから2005年第1四半期に販売が予定されている。

※注:
話はそれるが、T-Engine上でWindows CEとのハイブリッド方式を実現する「TWister」といったミドルウェアも存在する。


 この方式のメリットとして、リアルタイムOS上でリアルタイム処理を従来方法で設計できる点が挙げられる。そのほかの処理については、追加する汎用OSのよく知られた方法で実現できる。ただし、1つのシステムを作り上げるのにリアルタイムOSと汎用OS双方の知識が必要となり、開発者の調達・育成にコストが掛かるというデメリットもある。

 この方式の主な実装例を以下にまとめる。

T-Linux

NEWRAL NR Bi-OS
Emblix策定の仕様に準拠

スタンドアロン方式

 upstreamカーネルでも、カーネル2.6でリアルタイム性能を向上させるさまざまな機能が統合された(注)が、より高性能なリアルタイム機能を求める声も多い。これを背景にして、前出の2方式とは異なりLinux単体でリアルタイム機能を向上させる取り組みもある。以降、これを「スタンドアロン方式」と呼ぶことにする。

※注:
詳しくは、全貌を現したLinuxカーネル2.6[第4章]「カーネルレベルプリエンプションの仕組みと効果」を参照。


 この方式のメリットは、Linux単体での取り組みであることと、POSIX規格に準拠した機能拡張が多いことから、UNIX系の開発者にとってなじみやすいことである。また、比較的upstreamカーネルに統合されやすい点も大きい。一方、汎用OSであるが故にさまざまなオーバーヘッドがあることや、移植性が重視されてプロセッサに依存したハードウェア機構(割り込み処理など)を生かしにくいという面がある。これにより、ITRONなどのリアルタイムOSと比較して性能が発揮できないというデメリットとなる。

 この方式での、主な取り組みを以下にまとめる。

(1)The Open Source Real-Time Linux Project
MontaVista Softwareがホスティングしているプロジェクト。カーネル2.6にさまざまなパッチを統合して、ソフトリアルタイム性能を向上

(2)R2Linux
カーネル2.4で、tasklet機能を活用してレイテンシを改善

(3)ART-Linux
カーネル2.4にプロセスをハードリアルタイム化するシステムコールを追加

(4)CELF:Interrupt Threads + SoftIRQ Threads
TimeSysからの提案

(5)CELF:Interrupt Priorities + Interrupt Threads + SoftIRQ Threads
富士通からの提案

 カーネル2.6をベースにした取り組みのトレンドは、割り込みハンドラの処理をISR(Interrupt Service Routine:割り込み処理ルーチン)からIST(Interrupt Service Thread:割り込み処理スレッド)に移すことをベースにして、レイテンシを改善することである。これは、上記の(1)(2)(4)および(5)で実装されている。

 これらとは別に、Linuxの割り込み管理機構の枠外で特定の割り込みを処理することで、割り込みレイテンシの改善を行う取り組みもある。例えば、割り込みレイテンシの最悪ケース時間を10マイクロ秒以下に抑える実装(注)が、富士通からCE Linux Forumに寄与されている。

※注:
CE Linux Patch Archive(http://tree.celinuxforum.org/CelfPubWiki/PatchArchive)のpriority based interrupt patch。




 以上、今回はリアルタイム機能と組み込みLinuxでの取り組みの概要を説明した。後半の実装方式については、本連載で詳しく紹介していく予定だ。(次回に続く)


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.