川辺と申します。 # けっこうスレッドが深くなってきましたね。Reference減らした方がいいん # だろうか。 >>>>> "Naoto" == Naoto Shimazaki <igy@xxxxxxxx> writes: Naoto> なんとなくちゃんと動かない気がする… いや、実際には、他にも sti()で済まされているところがいくつかある (sleep_on_interruptible()の中で使っているマクロの中)とかあって、割り込 み制御の対応関係をきちんと洗い出さないといけないんですよね。 まぁ、小手先で済ませるには影響範囲の確認が広すぎる感じがしますが。 Naoto> その形のまま、CPU independent に抽象化されてます。 まぁ抽象化されているとも言えるんですが。 Naoto> 他にも、ISA とか PCI の切口がアーキテクチャ抽象化レイヤとして Naoto> 使われてます。ちょっとクラっときますね。ここは。 そうなんですよね。感覚的には抽象化されていると言うよりは直接見えている 様な印象を受けてしまいます。 最近のPCが全てだと考えるのならこれでも抽象的なんでしょうけどね。 Naoto> 今でもそうですよ。 あっ、やっぱりそうですか。たまには、BSDのソースも眺めた方がいいんだろ うなぁ。正直、4.3reno以降は、NetBSD発足当時しか観てないもので .... Naoto> 割り込みレベルが一つか二つしかない CPU の方が最近は優勢です。 Power PC、ARM、R4x00などなど、そうですね。 Naoto> あれば、マスクするだけのものあります。BSD ではそういうのを Naoto> ソフトで頑張って splxx な世界へ落しこんでますね。それが Naoto> きれいな抽象化のしかたなのかどうかは良く分からないですが。 綺麗かどうかと言われると最大公約数的な interrupt_disabel/enable なんか の方がいいんでしょうね。ただ、実用的かと言われると。 で、Linuxの場合一番気になるのは、 save_flags(s); cli(); … restore_flags(s); 以外の使い方を sti()やcli() を使うことで出来てしまうことかと思います。 つまり、呼び出された時の状態を無視して、割り込みを解除してしまえる、っ てことです。 splXX()の場合、特別な事情が無い場合、 s = splXX(); … splx(x); としますよね。こうなっていれば、少なくとも、呼び出された時に割り込み禁 止状態ならそれは、splx(s)以降でも継続します。でも、Linuxの場合には、 spin_unlock_irq()などの様な状態復元を行わない関数が用意されていて多用 されているので、問答無用に割り込みが解除されてしまいますね。 これっていかがなものか、って思います。 # splXX でバカな実装をすると酷いことになることもあるのですが。 Naoto> 2.4 -> 2.6 では preemptible kernel が一番大きいのではないかと。 そうですね。スケジューラのみならず、このための改造が色々なところに入っ てますね。 -------- Kawabe,Yoshihiro <ripula@xxxxxxxxxxxxxxx> Who is calling me from where? Knock on my shell and my mind? from Pearl song.
Follow-Ups:
- [linux-users:102223] Re: 組込Linuxドライバの作成方法Naoto Shimazaki
- [linux-users:102129] Re: 組込Linuxドライバの作成方法Naoto Shimazaki
- [linux-users:102136] Re: 組込Linuxドライバの作成方法Yoshihiro Kawabe
- [linux-users:102185] Re: 組込Linuxドライバの作成方法Naoto Shimazaki
- Prev by Subject: [linux-users:102204] floppyがマウントできません
- Next by Subject: [linux-users:102206] linuxマルチブートの件
- Previous by thread: [linux-users:102185] Re: 組込Linuxドライバの作成方法
- Next by thread: [linux-users:102223] Re: 組込Linuxドライバの作成方法
- Indexes:[Main][Thread]