割り込みハンドラの起動

割込みハンドラの起動は以下のようにして行われる。割込みエントリ関数do_IRQ関数(後述)から、割り込みが発生した割込み制御ハードウェアに対応した関数が呼び出される。(下の例では、do_foo_IRQ関数)この関数では、各割込み制御ハードウェア(IOAPICや8259割り込みコントローラなど)固有の方法で割込みマスクを制御し、割込みハンドラ起動関数 handle_IRQ_event()を呼び出す。handle_IRQ_event関数は、ドライバが登録したハンドラを実際に起動する。

img16.gif
    do_foo_IRQ(割り込み番号IRQ、...)
         同種の割り込みが入らないように、割込みのマスクを行う。
         割込みに対するACKを返す。
         handle_IRQ_event(割り込み番号IRQ、irq_desc[]に登録されているハンドラのリスト)
         割込みマスクの解除

    handle_IRQ_event(割り込み番号IRQ、ハンドラリスト)
         割り込みハンドラ開始宣言(irq_enter関数)
         if(割り込みのネストを許すハンドラなら)
                 CPUの割り込み許可

             登録されている場合は、全てのハンドラを呼ぶ)
         CPUの割り込み禁止
         割り込みハンドラ終了宣言(irq_exit関数)

 

(NIS)HirokazuTakahashi
2000年06月11日 (日) 22時29分57秒 JST
1