Linux-rt

投稿日:
2009年10月05日
カテゴリー:
雑多な事

Ubuntu Studio 9.04(Real Time カーネル。以降はRTカーネルと呼びます。)をベースに、Genericカーネルも導入して、作業内容に応じて切り替えながら使っている。というのも、RTカーネルはたくさんのアプリケーションを細かく切り替えながら進める作業に向いていないようで(例えば文書をまとめているときとか)、最近だと音楽CDをCDドライブから読み込んで、それをオーディオ・インターフェースに出力しながら、一方でペンタブからの入力をGIMPに出力して、ディスプレイを描画して…といった使い方をしてたら、固まった。

でも、Genericカーネルと使用感を比べると、明らかに違う。例えばgimp-painter-で導入した補正ペンを使ってみると分かる。Genericカーネルだとバックグラウンドでの計算処理がすぐには終わらないので描画に時間がかかるが、RTカーネルだとすぐに描画される。

RTカーネルはほんと、かわいい子です。

リアルタイムシステムをWikipediaから引用すると、「リアルタイムシステム(Real-time System)とは、使える資源(リソース)に限りがある状態で、ジョブの実行が命令された時、その処理を決められた時刻(デッドライン)までに終了することに着目した制御工学における概念の一つであり、「リアルタイム処理」とも呼ばれている。」だそうだ。

Linuxでこの「リアルタイム処理」を実現するのが、RTカーネルと理解している。

RTカーネルはGenericカーネルにパッチを当てたもの、という記憶があるけれど、実態を知らなかったので、ちょい調べてみた。Real-Time Linux Wikiというウェブサイトがあって、どうやらこれがRTカーネルのコミュニティサイトみたいだ。それによると、RTカーネルと呼んでいるものは、Linuxの普通のカーネル(Genericカーネル)にパッチ「CONFIG_PREEMPT_RT」を当てたものらしい。

「プリエンプション(preemption)」と聞きなれない単語が出てきた。「先取権」とかいう訳語が当たっている。またWikipediaにご登場願うと「コンピュータが実行中のタスクを一時的に中断する動作であり、基本的にそのタスク自体の協力は不要で、後でそのタスクを再実行するという意味も含む。このような動作をコンテキストスイッチと呼ぶ。通常、保護されたタスクか、システムの一部であるプリエンプティブスケジューラが行う。それらは、システム内の他のタスクに割り込み、後でそれらタスクを再開させることができる。"preempt" とは「先取りする、差し替える」の意。」だそうだ。

う〜ん、分かったようなわからないような。マルチ・ユーザ、マルチ・タスクで、カーネルのスケジューリング機能(ジョブ、プロセスをどういう順番で実行するか)とかに関係してくるってことかな。先のWikipediaの記事だと、WindowsはXPやVISTAを含むNT系が実装しているみたい。へぇ〜、やるなMicrosoft。

Linuxカーネルだと、バージョン2.6から実装しているみたい。ユーザモードとカーネルモードという用語が新規に出てきたんだけど、通常は前者のみプリエンプティブで、後者はオプションを有効にしないとノンプリエンプティブらしい。が、その場合も先のパッチ「CONFIG_PREEMPT_RT」を当てないと、カーネルモードでは自分から明示的にSleepしてCPUを手放さない限り変わらないらしい。ううむ、解説本が欲しくなってきた。

これらに加えて、PAM(Pluggable Authentication Modules)の設定も必要らしい。PAMというのは要はユーザ認証の統括的手段みたい。各アプリケーションが個別にユーザ認証の方法を実装する代わりに、それらアプリケーションにユーザ認証のためのAPIを準備するためのモジュールというように理解してみた。どうしてこのモジュールの設定が必要なのかというと、アプリケーションにリアルタイムスレッドを作成する許可を出すためだ。

で、リアルタイムスレッドとは何だということになるのだけれど…ここらで力尽きてしまったので、また後日。予想だと、プリエンプティブなジョブをアプリケーションに作成させるために、アプリケーションの実行者=ユーザに対して、システムが、リアルタイム・スレッドを作成する許可を与えるということなんだと思う。う〜ん、やっぱり書籍が欲しい。

あ、小難しい話になったけど、でUbuntu Studio 9.04はここら辺の設定が完了した状態インストール終了するので、すぐに使い始めることができます。これって実はすごいことかも!!

コメント