CPUレベルでの割り込み制御

割り込みハンドラとの間で競合する資源を操作する時は、CPUへの割り込みを禁止にしておく必要がある。Linuxでは割り込み禁止解除のための関数、cli(), sti()が用意されている。Intel CPUでは、eflagsレジスタの割り込み禁止ビットを操作することにより実現されている。(シングルプロセッサ版の場合)

また、現在の割り込み禁止状態を取り出す関数save_flags(), 取り出した状態に戻す関数、restore_flags()も用意されている。

割り込み排他(禁止)区間がネストしても大丈夫なように、一般に以下のような使い方をする。

       save_flags();
       cli();
           (割り込みクリテイィカルなコード)
       restore_flags();

cli(), sti()の代わりに、それぞれ local_irq_disable(),local_irq_enable() が利用されることもある。

シングルプロセッサの場合、spin_lock_irq()もspin_unlock_irq()もそれぞれ cli(), sti() と同等である。


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