割り込みエントリ

割り込みが発生するとCPUは自動的にカーネルモードに移行し、割り込みエントリの先頭に処理を移す。その後IRQに対応した割り込みハンドラを呼び出す(do_IRQ関数)。割り込みハンドラの実行により、遅延処理要求が発生もしくは割り込まれたプロセスの状態に影響が出ている場合があり、その場合それに対応した処理を行う。

  1. ソフト割り込み要求があるなら、ソフト割り込み実行(do_softirq関数)
  2. 割り込みからの復帰先がユーザモードで、かつこのプロセスに対し 再スケジーリング(プリエンプト要求)が発生していたら、CPUを明け渡す (schedule関数)。
  3. 割り込みからの復帰先がユーザモードで、かつこのプロセスが シグナルを受けている場合、シグナル処理の準備を行う(do_signal関数)。

カレントプロセスに対し、再スケジューリング要求やシグナルが発生している場合であっても、割り込み復帰先がカーネルモード…システムコール処理中、割り込み中(割り込みがネストしている)…の場合は、処理をスキップする。このイベントはプロセスがユーザモードに復帰する時点で処理される。(このタイミングでは処理を行うと、カーネルデータに矛盾を生じる)

     common_interrupt()
          レジスタのセーブ
          割り込みハンドラ実行(do_IRQ関数)
          if(ユーザモードへの復帰)
              goto ret_with_reschedule (system_callの戻りの途中へジャンプ)
          レジスタのリカバ

     do_IRQ()
          割り込み種別に対応した割り込みハンドラの呼び出し
          if(ソフト割り込み要求がある) ソフト割り込み実行(do_softirq関数)

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