At Sun, 7 Mar 2004 17:53:15 +0900, Yoshihiro Kawabe wrote: > それって、schedule()の中でspin_lock_irq()/spin_unlock_irq()してるとこ > ろをspin_lock_irqsave()/spin_unlock_irqrestore()に変えて、コンテキスト > スイッチの前後(same taskでも)save_flags()とrestore_flags()をする様に改 > 造する必要があるわけですよね。 なんとなくちゃんと動かない気がする… > なんで、Linuxって抽象化されてる気がしない生のsti()やらcli()なのかしら > と疑問に思うところがありました。 その形のまま、CPU independent に抽象化されてます。 他にも、ISA とか PCI の切口がアーキテクチャ抽象化レイヤとして 使われてます。ちょっとクラっときますね。ここは。 > 昔のBSD(最近の観てないので ....)やUnixって、割り込みの制御って splXX() > とsplx()でしたよね。 今でもそうですよ。 > x86にはCPUの中での割り込みレベルなんて無かったとは言え、以降に多種のアー > キに移植された際に割り込みレベルの概念は入れる必要が無いと思われたんで > すかねぇ。 割り込みレベルが一つか二つしかない CPU の方が最近は優勢です。 割り込みコントローラは CPU アーキテクチャとしばしば独立で、 ものによってハードで多重レベルを直接サポートしてくれるものも あれば、マスクするだけのものあります。BSD ではそういうのを ソフトで頑張って splxx な世界へ落しこんでますね。それが きれいな抽象化のしかたなのかどうかは良く分からないですが。 > でも、2.2.x/2.4.x/2.6.xで schedule() 辺りってかなり変わっている(まぁ、 > O(1)スケジューラやら、SMP対応やら当たり前ですけど)気がします。 2.4 -> 2.6 では preemptible kernel が一番大きいのではないかと。 -- Naoto Shimazaki
Follow-Ups:
- [linux-users:102205] Re: 組込Linuxドライバの作成方法Yoshihiro Kawabe
- [linux-users:102119] Re: 組込Linuxドライバの作成方法Naoto Shimazaki
- [linux-users:102125] Re: 組込Linuxドライバの作成方法Yoshihiro Kawabe
- [linux-users:102129] Re: 組込Linuxドライバの作成方法Naoto Shimazaki
- [linux-users:102136] Re: 組込Linuxドライバの作成方法Yoshihiro Kawabe
- Prev by Subject: [linux-users:102184] linuxマルチブート
- Next by Subject: [linux-users:102186] Re: rsyncのパスワードについてお尋ねします。
- Previous by thread: [linux-users:102187] Re: 組込Linuxドライバの作成方法
- Next by thread: [linux-users:102205] Re: 組込Linuxドライバの作成方法
- Indexes:[Main][Thread]