[[PageNavi(internal24-navi)]]
{{{ comment
h2w-title:プロセッサ間割り込み
}}}
= プロセッサ間割り込み = #SECTION07210000000000000000
この機能はハードウェアサポートがあることを前提である。一方のCPUで発生したイベントを他のCPUに通知するために利用される。現在利用されているCPU間割り込みには以下のようなものがある。
* 再スケジューリング要求(smp_send_reschedule関数)
* 指定されたCPUへ、プロセスの再スケジューリング要求を出す (send_IPI_mask関数)。
* 割り込み受信CPU側では、smp_reschedule_interrupt関数が 呼び出される。この関数では特に何もせずに即リターンする。 しかし、その割り込み処理からの戻りでプリエンプション処理が 自動的に動作するため目的は達成される。
* TLBフラッシュ要求(flush_tlb_others関数)
* 指定されたCPUへ、指定されたTLBのフラッシュ要求を出す。 (send_IPI_mask関数)。あるCPU上で仮想空間の状態を変更したとき、 他のCPUでも同じ空間を参照している場合、その状態変更を 通知する必要がある。メモリ上のPTEを変更しても、CPU内の TLBの情報は更新されない。
* 割り込み受信CPU側では、smp_invalidate_interrupt関数が 呼び出される。この関数では指定された領域に対応するTLBの フラッシュを行う。
* CPU間割り込みを利用したTLBフラッシュ処理は非常に重いため、 無駄に呼び出さないようにしている。 空間管理構造体struct_mmのcpu_vm_maskメンバに、この空間が どのCPUから参照されているかを保持し、そのCPU(CPU群)に 対してのみ割り込みを送る。
* TLBフラッシュ要求(flush_tlb_all関数)
* 他のCPU全てへ、TLBフラッシュ要求を出す(smp_call_function関数)。 送信先のCPU上でTLBフラッシュが完了するまでビジーウェイトする。
* 割り込み受信CPU側では、flush_tlb_all_ipi関数が呼び出され、 TLBのフラッシュを行う。
* CPU停止要求(smp_send_stop関数)
* 他のCPU全てへ、CPU停止の要求を行う(smp_call_function関数)。
* 割り込み受信CPU側では、stop_this_cpu関数が呼び出される。 そのCPUに対する割り込みを禁止し、CPUを停止させる。
* CPU起動要求
* IntelCPUの場合、二つ目以降のCPUの起動にプロセッサ間割り込みを 利用している。
----
{{{ html
<A NAME="CHILD_LINKS"> </A>
}}}
* [internal24-288-その他の関数説明#SECTION07211000000000000000 その他の関数説明]
----
''(NIS)HirokazuTakahashi [[BR]]2000年12月09日 (土) 23時55分06秒 JST''1
[[PageNavi(internal24-navi)]]