Linux Kernel Developmentを読み直す(その1)

第八章の「Bottom Halves and Deferring Work」。
最初の8ページを読んだので、次にソースを読むときに備えて内容をまとめておこう。

Linuxには2.6.34現在Bottom Halfの仕組みとして3つの仕組みがある。
○SoftIRQ
○Tasklet
○Work queues

SoftIRQは利用者がコンパイル時に静的に決まる。最大32個利用できる。(2.6.34では9個の利用者が存在する。)
性能的には一番優れている。
SoftIRQが実行されるタイミングは
○ハードウェアの割り込みから戻るパス
○ksoftirqdというカーネルスレッド
○ネットワークモジュールのように、明示的にsoftirqのチェックをしている箇所

肝となるアルゴリズムは139ページ参照。単純に32bitのpending変数のビットを見て、立っていたらそれに対応したハンドラを実行するというもの。

もし、SoftIRQを使ってみたい場合、
linux/interrupt.hにインデックスを追加する。
○open_softirqでハンドラとインデックスを紐づけつつ、ハンドラを登録する
ということをやる。
○raise_softirqでペンディングビットを立てて、ハンドラの実行タイミング時にハンドラが実行できるようにする。
が必要になる。

今度はソースを読んでみるとしますか。