プロセッサ間割り込み

この機能はハードウェアサポートがあることを前提である。一方のCPUで発生したイベントを他のCPUに通知するために利用される。現在利用されているCPU間割り込みには以下のようなものがある。

  • 再スケジューリング要求(smp_send_reschedule関数)
    • 指定されたCPUへ、プロセスの再スケジューリング要求を出す (send_IPI_single関数)。
    • 割り込み受信CPU側では、smp_reschedule_interrupt関数が 呼び出される。この関数では特に何もせずに即リターンする。 しかし、その割り込み処理からの戻りでプリエンプション処理が 自動的に動作するため目的は達成される。
  • TLBフラッシュ要求(smp_flush_tlb関数)
    • 他のCPUへ、TLBのフラッシュ要求を出す。 (send_IPI_allbutself関数)。あるCPU上で仮想空間の状態を 変更したとき、他のCPUでも同じ空間を参照している場合、 その状態変更を通知する必要がある。メモリ上のPTEを 変更しても、CPU内のTLBの情報は更新されない。
    • 割り込み受信CPU側では、smp_invalidate_interrupt関数が 呼び出される。この関数は自CPUのTLBのフラッシュを行う。
  • CPU停止要求(smp_send_stop関数)
    • 他のCPU全てへ、CPU停止の要求を行う(send_IPI_allbutself関数)。
    • 割り込み受信CPU側では、stop_this_cpu関数が呼び出される。 そのCPUに対する割り込みを禁止し、CPUを停止させる。
  • CPU起動要求
    • IntelCPUの場合、二つ目以降のCPUの起動にプロセッサ間割り込みを 利用している。

 

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