Linuxの割り込み処理

マイコンを使った電子工作の趨勢はPICなど単体部品の組み合わせからArduinoなどのマイコンボードへ、そしていまRaspberry PiやBeaglebone BlackなどLinux搭載ボードへと切り替わりつつあるらしい。PICからArduinoにかけて割り込みの腕を磨いた人が、同じやり方でLinuxを動かそうとして思い悩む姿が想像される。このブログも「Linux 割り込み」で検索をかけた人がたくさん来てくれる。そうやって来てくれた人をがっかりさせることになるかもしれないが、やはり真実をいうべきだろう。

Linuxで割り込みはできない。ついでにいうとレジスタの操作もできない。インターネットで「Linux 割り込み」を検索するとそれなりの記事が見つかるが、どれも知りたいことの回答ではないはずだ。何しろ無理なんだから。

PICやArduinoでやる割り込みは、Linuxだとメッセージを発効する(同時に最低限の処理をする)ために使われ、ユーザーが関与できない。ユーザー側の処理は、割り込みが終了したあと、メッセージを捉えて実行することになっている。だから、少し時間差が生じる。たとえば、WiringPiを使うとArduinoの割り込みのような設定ができるが、その実態は、新しいプロセスを生成してバックグラウンドでメッセージを監視し、捉えところで指定の関数を呼び出す仕組みになっている。ソースの見た目は割り込みのように記述できても、それでリアルタイムの処理ができるわけではない。

レジスタの操作も似たようなもの。ファイル/dev/memを関数mmapで開けばソースの見た目はレジスタを直接操作するように記述できる。これをレジスタの直接操作と説明する記事さえある。しかし、実態はファイルをメモリに展開して操作しているだけで、ファイルを関数openで開いて操作するのと大差ない。操作した内容は、Linuxが読み取って本物のレジスタに反映するから、やはり時間差が生じる。

多少の時間差があってもよければ、割り込みっぽい処理やレジスタの操作っぽい処理でいい。時間差があるとまずい場合、本当にそうか、必要な作業を根本的に見直してみると案外そうでもない場合が多い。実際、Linuxのたいていのアプリケーションは与えられた環境のもとで目的の働きを実現している。そういうわけにいかなければドライバを作ったりカーネルを再構築したりする。それが面倒くさければ、Linuxを諦めてリアルタイムOSを選ぶ。

PICやArduinoで培った技術は大切にしたいと思うだろうが、それをそのままLinuxに持ち込もうとしてはいけない。郷に入っては郷に従えということ。あるいは、割り込みやレジスタの操作のほうが好きだとすれば、OSが介在しないマイコンで実力を発揮してもらいたい。ボクはRaspberry PiとBeagleBone BlackでLinuxを十分に堪能したので、今後はLPC810とかLPC1114をきわめてみようと思っている(土日はZ8とMC6809とi2716に夢中です)。

広告
カテゴリー: ARM, BeagleBoneBlack, Linux, RaspBerryPi タグ: パーマリンク

Linuxの割り込み処理 への4件のフィードバック

  1. 大王怒 より:

    (Linux等)OS操作はモニタ画面出力同期作業等があり、OS作業にはそれなりの割り込み処理が必須だから、数GHz CPU(のLinux)でも出来ない典型は1kHz程度のソフトウエア矩形波連続発振器。
    これをLinuxカーネルソースから書き直すとLinuxでは無くなってしまう。しかも、コンパイルに10時間も必要な時があり、デバッグでメゲる(もちろん、OSをフリーズさせたり、サウンド機能のハードを載せてその設定をOSから行えば可能)。
    そんなプログラムしていると、今のPC構成のやり直しすれば簡単と感じる。
    (’70年あたりから、PCの普及化(=コストダウン)が始まっているが、)新たなプログラム開発用PCを考えたいが、CPUの高速化で組み直しはもうできない。
    ’60年台の8008 Intelのマニュアルのように基板図からの説明が懐かしい(実はP4あたりまでは基板図は公開されている)。
    次世代コンピュータ構成は、’70年代に戻るのが早道に感じる。

  2. 大王怒 より:

    大王怒 “ダイオード”

  3. vintagechips より:

    コメント有難うございます。70年代のCPUを語るといいながらLinuxの割り込みについて述べている状況をうまくまとめていただきました。

  4. 大王怒 より:

    誤:’60年台の8008 Intel
    正:8008は’72/04発表でした。私はもう認知症だと思います。
     その前にIntel CPUが東京ゲームショー(だったかな?)で機械的に金属ボールが釘ピンにぶつかるピンボールゲームに内蔵されていたり、日立の研究所内で4004の詳細マニュアルを見ました。
     当時、私はMOSテック社の256bitメモリ(@5k円)を使って(Instruction decorderを自分勝手に設計して)自作コンピュータを作ってました。勝手な命令をハードで実現できた古き良き時代でした。
     足し算ができるとMSBの0か1を使って引き算を行い、2進法の面白さを感じた時代です。
     足し算ができると、それを繰り返すのが掛け算。引き算ができると何回引けるかで割り算。かけ算を2回繰り返すと2乗計算(それを値から引き算して平方根)。かけ算を3回繰り返すと3乗計算と3乗根できた。
     そんな具合で数学への見方が一変しました。対数などを含めて、こんな教育が今は必要と思います。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中