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

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

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

ユーザーアプリケーションによるリアルタイム処理

 一般的にリアルタイムタスクは、カーネルモジュールの形式で実装される。しかし、カーネルモジュールとして組み込まれたコードは特権モードで動作するため、メモリ保護が行われない。従って、リアルタイムタスクの障害が、システムダウンにつながるケースが多い。

 メモリ保護が行われるユーザーアプリケーション空間でリアルタイム処理を行うことができれば、これらの問題を回避できる。前述の2つのシステムでも、このような取り組みが行われている。RTLinuxの場合、RTLinuxProではPSDD(Process Space Development Domain)、RTLinux/GPLではPSC(Programmable Signal Control)が提供されている。また、RTAIにはLXRT(LinuX Real-Time)が用意されている。

 カーネルモジュールの形式でシステムを構築する情報および事例は、インターネットで広く収集できる。よって本稿では、RTLinux/GPLおよびRTAIにおいて、ユーザーアプリケーション形式によるリアルタイム処理を中心に紹介する。

PSC(Programmable Signal Control)

 RTLinux/GPLのPSCは、ハードウェア割り込みをユーザーアプリケーションに「シグナル」という形で通知する仕組みである。まず、RTLinuxで独自に追加されたrtlinux_sigactionシステムコールを用いて、IRQ番号とシグナルハンドラ関数を登録する。その後、該当する割り込みが発生すると、ハンドラ関数が呼び出される。

 割り込み発生から、ハンドラ関数が呼び出されるまでの流れを図3に示す。

PSCの仕組み 図3 PSCの仕組み

USI(User Space Interrupts)

 RTAIのLXRTでは、User Space Interrupts(USI)という機構が提供されている。USIは、ユーザースレッドがハードウェア割り込みを待つことを可能にする。まず、RTAIで追加されたシステムコールを用いて、IRQ番号とシグナルハンドラ関数を登録する。その後、割り込み待ちを行うシステムコールを発行してスリープする。該当する割り込みが発生すると、スレッドは起床されて処理を行うことができる。

 割り込み発生から、スレッドが起床されるまでの流れを図4に示す。

USIの仕組み 図4 USIの仕組み

Copyright © ITmedia, Inc. All Rights Reserved.