[[PageNavi(internal24-navi)]]
{{{ comment
h2w-title:割り込みハンドラの起動
}}}
= 割り込みハンドラの起動 = #SECTION02430000000000000000
割込みハンドラの起動は以下のようにして行われる。
割込みエントリ関数do_IRQ関数(後述)から、割込み制御コントローラに対し、発生した割り込みレベルのマスク(割り込み処理中に同じIRQレベルの割り込みが発生しないようにする)と割り込みに対するACKを返す(割り込みを受け付けたことを通知し、次の割り込みが発生するようにする)。処理方式は、各割込み制御コントローラ(IOAPICや8259など)毎に各々固有の方法で制御しなければならない。
その後、handle_IRQ_event()関数により、発生した割り込みレベルに対応したドライバの割り込みハンドラが実際に起動される。
全てのドライバの割り込みハンドラ実行終了後、割込み制御コントローラに対し、発生した割り込みレベルに対するマスク解除を要求する。
[[Embed(internal24-images:img18.gif)]]
{{{
do_IRQ(割り込み番号IRQ、...)
同種の割り込みが入らないように、割込みのマスクを行う。
割込みに対するACKを割り込みコントローラに返す。
handle_IRQ_event(割り込み番号IRQ、irq_desc[]に登録されているハンドラのリスト)
割込みマスクの解除
handle_IRQ_event(割り込み番号IRQ、ハンドラリスト)
割り込みハンドラ開始宣言(irq_enter関数)
if(割り込みのネストを許すハンドラなら)
CPUの割り込み許可
登録されている場合は、全てのハンドラを呼ぶ。
CPUの割り込み禁止
割り込みハンドラ終了宣言(irq_exit関数)
}}}
----
{{{ html
<A NAME="CHILD_LINKS"> </A>
}}}
* [internal24-46-問題点#SECTION02431000000000000000 問題点]
----
''(NIS)HirokazuTakahashi [[BR]]2000年12月09日 (土) 23時55分06秒 JST''1
[[PageNavi(internal24-navi)]]