ソフト割り込みハンドラ

Linuxカーネルは割り込みの遅延実行メカニズムとしてソフト割り込みメカニズムを提供しているが、これはマルチプロセッサ時には各CPU上で並列動作可能な作りとなっている。(旧BHハンドラでは並列動作ができないため書き換えられた)同じレベルのソフト割り込みハンドラが複数のCPU上で同時に動作することも可能である。

  • TASKLET_SOFTIRQ、HI_SOFTIRQソフト割り込みレベル
    • 各CPU別にそれぞれハンドラを登録可能となっている。 CPU毎に分類されtask_letvecテーブルに登録される。
    • ハードウェア割り込みが発生したCPUと同じCPU上でソフト割り込みを 動かすことができるため、処理の効率は高そうである。
  • NET_TX_SOFTIRQ、NET_RX_SOFTIRQソフト割り込みレベル
    • TCP/IPプロトコルスタック送受信処理。各々のCPU上で 並列動作可能である。
  • BHハンドラ
    • TASKLET_SOFTIRQソフト割り込み(tasklet_action関数) の延長で呼び出される。旧システムとの互換性のため BHハンドラはシステム上に同時に一つしか存在できないよう ロック(global_bh_lock変数)を行っている。
    • BHハンドラ実行前に、他CPU上でBHハンドラが実行されている か調べ(上記ロックglobal_bh_lock変数のチェック)、ロックされて いる場合は処理そのものをスキップする。スキップした処理は 次にこのCPUにTASKLET_SOFTIRQソフト割り込みが発生した ときに処理される。
img123.gif

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