割込み処理
マルチプロセッサ対応
HW割込みコンテキスト
遅延割込み処理
プロセッサ間割込み

 割込み処理自体を応答性が必要な部分と必要でない部分に分ける方式
 ・応答性が必要な部分は、HW割込みパンドラで行う。
最低限の処理を短時間に行う。
割込み処理例
 ・応答性が必要でない部分は、SW割込み(ソフトIRQ)パンドラで行う。
遅延処理として、まとめて後から行う。
比較的重い処理で、大きなスタック(後入れ先出し構造)を使う。
順次処理の設計を行い、スタックの無制限消費を防ぐ
 ・HW割込みとSW割込み処理例

 マルチプロセッサ対応
 ・全てのCPUは対等
 ・同じIRQで無い限り、複数のCPUで、同時にそれぞれのHW割込みパンドラが動作できる。
 ・複数のCPUで、同時にSW割込みパンドラを実行できる
同種の要因によるSW割込みパンドラでも並行処理可能
 ・SW割込みパンドラは、その要因を作ったHW割込みパンドラと同じCPU上で動作する。
キャッシュメモリ上のデータ構造の共有が可能
 ・特定の割込みパンドラの実行を明示的に1つのCPUへ任せられる。
キャッシュメモリの利用効率が上がる。
HWの構造上、効率が良い場合がある。
負荷は偏る。
/proc/irq/<IRQ番号>/smp_affinity
割込みを発生させるCPUを指定するビットマスクを与える。

 HW割込みコンテキスト
 ・割込みが発生したとき、カレントプロセスのカーネルスタックを利用して動作
割込みスタックを用意していなく、カーネルスタックへを利用して動作
2.6.6から、専用の割込みスタックを用意できる。
 ・割込みとして扱うもの
 ・HW割込み処理例
 ・HW割込み管理データ構造
カーネルはHW割込みをデバイスドライバへの通知手段として利用
発生した割込み種別(IRQ)を判明
IRQ毎に起動する割込みパンドラを登録
1つのIRQを複数のデバイスで共有できる(irq_descテーブル)
目的のデバイスドライバが用意している割込みパンドラを呼び出す。
 ・HW割込みパンドラの登録
起動時
ホットプラグ時
 ・割込み禁止の状態を利用して、システムコールと割込みパンドラの競合を排他
CPUレベルで割込み禁止
2.6で、システムグローバル(global_irq_cli())廃止
オーバヘッドを少なくするため、スピンロック利用へ書き直し
割込みコントローラレベルで割込み禁止
レガシー、APIC(Advanced Programmable Interrupts Controller)
指定したIRQに対する割込み要求は割込みコントローラ内に保留
 ・割込みパンドラの起動
割込みエントリ関数(do_IRQ関数)呼出し
事前に、テーブルジャンプ用テーブルが適切に初期化されていることが必要
プロテクトモード(レジスタ幅32bit)ではIDT(Interrupt Descriptor Table)
事前に、テーブルジャンプ用テーブルが適切に初期化されていることが必要
割込みペクタ番号をインデックスとして、IDTを参照して割込みパンドラへ制御を移す。
 ・HW割込み発生状況
# cat /proc/interrupts

 遅延割込み処理対応(SW割込みパンドラ又は、tasklet)
 ・SW割込みコンテキストを事項する。
割込み種別
割込みパンドラの起動
割込みエントリ関数(do_softirq関数)呼出し
SW割込みの実装
 ・tasklet
任意の関数を、SW割込みパンドラとして登録、実行

 プロセッサ間割込み
 ・APIC(x86搭載機)がHWでサポート
 ・プロセッサ間割込み要求関数を準備
 ・プロセッサ間割込み利用関数を準備
割込み要因に対応した割込みパンドラ起動