ソフト割り込みハンドラ

linuxではハードウェア割り込みハンドラを応答性の必要な部分とそうでない部分の二段階で処理している。クロック処理、TCP/IPプロトコル処理などはソフト割り込みハンドラで実現されている。このハンドラはlinuxカーネルが行う処理が一区切りついたタイミング(システムコール出口、割り込みハンドラ出口、スケジューラ)で実行される。

もともとLinuxにはBHハンドラと呼ばれる遅延処理用のソフト割り込みハンドラとしてBHハンドラメカニズムが実装されていた。ただし、このメカニズムはマルチプロセッサシステムでは性能が発揮できないため、SMP対応強化のため旧型のBHハンドラに代わり設計された。UNIプロセッサで利用する範囲では恩恵にあずかれないが、旧BHハンドラとことなりSMPではソフト割り込みハンドラがマルチスレッド動作できるため、性能向上が期待できる。ネットワーク処理ハンドラなどがBHハンドラからこちらハンドラに書き換えられている。詳しくはマルチプロセッサの章で説明する。

img13.gif

現時点では、4種類のソフト割り込みレベルが定義されている。ソフト割り込みの要求(__cpu_raise_softirq関数)を行うと、しばらく後にdo_softirqが呼び出され、その中から各レベルに登録されたソフト割り込みハンドラが起動される。

  • TASKLET_SOFTIRQ
    • 汎用的なハンドラ登録実行メカニズム。今まであったタスクキュー(後述) に相当する。複数登録可能。登録数に上限はない。
    • 汎用的なハンドラは、task_let_schechedule関数により、task_letvec[] テーブルにキューイング登録される。
    • 登録されたハンドラ群は、tasklet_action関数により実行される。
    • 各CPU別に登録可能(マルチプロセッサの章で再度説明する)
  • HI_SOFTIRQ
    • 構造はTASKLET_SOFTIRQと同じ。 TASKLET_SOFTIRQより優先的に動作させることを考えているようだ。 現時点ではBHハンドラ(後述)のみが利用している。
  • NET_TX_SOFTIRQ
    • TCP/IPプロトコルスタック送信処理
  • NET_RX_SOFTIRQ
    • TCP/IPプロトコルスタック受信処理

 

(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST
1