プロセススケジューラ

マルチプロセッサマシン上でLinuxを動作させた場合、RUNキューにリンクされているプロセスのうちCPU数分のプロセスが同時に実行されることになる。カレントプロセスはCPUの数だけ存在する。

スケジューラは全てのCPU上で動作し、それぞれが勝手にプロセスを選びだし、実行権を与える。スケジューラは、実行可能なプロセスでまだ他のCPUに割り当てられていないもののうち、 最も高いプライオリティを持つものを選択する。

Linuxでは、CPUが割り当てられているプロセスもRUNキューにつながれたままの状態で実行されるため、他のCPUから誤って二重にスケジューリングされないよう、現在CPUが割り当てられていることを示すフラグ(has_cpu)を立てるようにしている。 スケジューラはRUNキューを検索する時、このフラグの立っているプロセスをスキップする。

そのCPU上で実行するプロセスが存在しないときは、スケジューラはそのCPU専用に用意されたidleプロセスに実行権を与える。このidleプロセスは、RUNキューにはリンクされていない。

img120.gif

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