[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:102205] Re: 組込Linuxドライバの作成方法


川辺と申します。

# けっこうスレッドが深くなってきましたね。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.

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: References: