プロセスがwake_up_process関数などにより走行可能となったとき、RUNキューにリンクされる。ただし、RUNキューにリンクしただけでは、そのプロセスのプライオリティが幾ら高くてもCPUの実行権を与えられることはない。
このプロセスが現在走行中のプロセスよりプライオリティが高い時、スケジューラに対してCPUの明け渡し要求(プリエンプト要求)を出さねばならない(reschedule_idle関数*1)。プリエンプト要求は、カレントプロセスのtask_structのneed_reschedメンバに印を付けることで実現している。*2
プリエンプト要求を受けたスケジューラは、Linuxカーネルの処理が一区切りついたところで再スケジューリングを行う(schedule関数)。再スケジューリングを行うのは、以下のポイントである。
また、これはLinuxカーネルのコード実行中にはプリエンプションが発生しないことを意味している。Linuxカーネル内走行中のプロセスは明示的にスケジューラを呼び出さない限り、他のプロセスにCPUを奪われることはない。これはLinuxカーネル内の資源排他を単純化することに役立っている。*3
(NIS)HirokazuTakahashi
2000年12月09日 (土) 23時55分06秒 JST1