ソフト割り込み
Rev.2を表示中。最新版はこちら。
ソフト割り込み関連 BH ### 2.6では削除された ### マルチプロセッサでも複数実行は不可 登録数は32まで。 (2.4の実装としては高優先度タスクレットとして登録され実行される) タスクキュー ### 2.6では削除された ### BHの拡張。 一つのBHに複数のハンドラを登録できる。 以下のタスクキューはBHの中で処理される。 tq_immediate 即実行用タスクキュー tq_timer タイマ用タスクキュー 他にもタスクキューは存在する。 ソフト割り込み マルチプロセッサの場合、各プロセッサで同じ割り込みが動作可能 タスクレット ソフト割り込みの一つ。 複数のハンドラを登録できる。 複数のCPUで同時実行できるが同じタスクレットは同時実行できない。 softirq_vec[] +--------------+ | | HI_SOFTIRQ:tasklet_hi_action() +--------------+ | | NET_TX_SOFTIRQ +--------------+ | | NET_RX_SOFTIRQ +--------------+ | | TASKLET_SOFTIRQ:tasklet_action() +--------------+ : +--------------+ | | +--------------+ ソフト割り込みのハンドラが登録される。 open_softirq()で登録する。 raise_softirq()でスケジュールする (pendingフラグを立ててksoftirqd()をWakeupする) tasklet_vec[] (HI_SOFTIRQ用にtasklet_hi_vec[]もある) +--------------+ | CPU#0 | --> tasklet_struct -> tasklet_struct -> +--------------+ | CPU#1 | +--------------+ : タスクレットのハンドラを登録する。 tasklet_init()でtasklet_structを初期化して、 tasklet_schedule()によってtasklet_structをチェーンして、 TASKLET_SOFTIRQをスケジュールする Kernel2.6ではソフト割り込みとタスクレットのみとなった。 また、新規の割り込みはタスクレットとして実装するように linux/interrupt.hに記されている。