塩崎です。 From: Naoto Shimazaki <igy@xxxxxxxx> Subject: [linux-users:102289] Re: 組込Linuxドライバの作成方法 Date: Thu, 25 Mar 2004 00:16:31 +0900 Message-ID: <87d672mg2f.wl@xxxxxxxxxxxxxxxxxx> > > 4.3renoの頃にVM周りがごそっと変わったり、アーキ関係が見通しがよくなっ > > たりしましたね。MachのVMっぽい(と言うかそのもの)って感じが良さげでした > > ね。それをついで、4.4は綺麗になったんでしょうね。 ちなみに、デバイスドライバまわりの抽象化は NetBSD の成果を待つ 必要があります。 > > Naoto> 上にも書きましたが、幅広いコンテキストで呼ばれるルーチンが > > Naoto> 割り込み状態の保存and禁止と復帰を対で扱うのは必然です。 > > > > ですよね。なぜ、その常識だと思っていた(少なくとも、Linux誕生以前、80年 > > 代後半に私が観たいくつかのカーネルでは)ことが無視されているのか、興味 > > が持てたりしますが。やはり、行き当たりばったり的なものなのでしょうか? > > なぜかは知りません。 ... > 私には理由は分かりません。 たぶん、単に Linus がそこに思い至らなかっただけでしょう。 ちゃんとした設計をしないで ad hoc にプログラムを書いていくという スタイルが初期の Linux だったと思います。 あるいは、save 用の変数を一つケチったか。 でも、それでは話にならず結局は save_flags() を使って入れ子に してるわけですが。 今に至るまでこれがそのままなのは、まあ面倒くさいから放置してある だけなのかもしれませんな。 > 余談ですが、多重割り込みをサポートしようとすると、割り込み > コントローラを操作せざるを得なくなります。しかし、優先度 > (splXX) の操作のたびに割り込みコントローラのレジスタに > アクセスするとはっきりと性能に影響します。そこで、「本当に > 割り込まれるまでは割り込みをマスクしたフリをする。割り込まれて > から改めて割り込みコントローラを操作してちゃんとマスクする。」 > なんてことをやります。非常に I/O の忙しい環境下では 20% 位 > 性能に影響したりしますから侮れません。 まあそれは x86 の話ですね。他の多くのアーキテクチャでは CPU 自体が割り込みレベルの判別機能を持っていて、 この場合には CPU の制御レジスタの割り込みレベルを上げたり 下げたりするだけですから大したコストにはなりません: http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/arch/vax/include/intr.h?rev=1.14&content-type=text/x-cvsweb-markup そもそも spl という仕組み自体が x86 向きではないんですね。 x86 そのものには割り込みレベルが 2 つしかないですから(許可と不許可)。 実際のところ、Linux には spl がないようにみえて、 実は 386BSD よりも素直に spl が実装されてると言えます。 CPU アーキテクチャを反映して、単に spl1 と spl0 の二つに 相当するものしかないだけです。もちろん、BSD カーネルはこれでは まともに動かないと思いますが(動いても遅い)、Linux は逆にそれに 合わせて割り込みまわりを組み立ててあるわけですね。 x86 以外のところに持っていくと、せっかくの高級な割り込みレベル機能が 使われず、ちょっと勿体ないことになります。 インターフェースとしてこれが入れ子構造になってないのは、 上で書いた通り ad hoc なだけでしょう。 では。 -- Takuya SHIOZAKI / ASTEC, Inc.
Follow-Ups:
- [linux-users:102306] Re: 組込Linuxドライバの作成方法Yoshihiro Kawabe
- [linux-users:102325] Re: 組込Linuxドライバの作成方法Naoto Shimazaki
- [linux-users:102241] Re: 組込Linuxドライバの作成方法Naoto Shimazaki
- [linux-users:102250] Re: 組込Linuxドライバの作成方法Yoshihiro Kawabe
- [linux-users:102289] Re: 組込Linuxドライバの作成方法Naoto Shimazaki
- Prev by Subject: [linux-users:102297] Re: vsftpdでユーザーID入力後パスワードを入力した後にエラーが出る
- Next by Subject: [linux-users:102299] Re:突然印刷出来なくなりました。
- Previous by thread: [linux-users:102289] Re: 組込Linuxドライバの作成方法
- Next by thread: [linux-users:102306] Re: 組込Linuxドライバの作成方法
- Indexes:[Main][Thread]