割り込みエントリ

割り込みが発生するとCPUは自動的にカーネルモードに移行し、割り込みエントリの先頭に処理を移す。割り込み種別に応じた割り込みハンドラの実行により、割り込まれたプロセスの状態に影響が出ている場合があり、その場合、それに対応した処理を行う。

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

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

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

     do_IRQ()
          割り込み種別に対応した割り込みハンドラの呼び出し
          if(BHハンドラがある) BHハンドラ実行(do_bottom_half関数)

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