Linuxカーネルに関する技術情報を集めていくプロジェクトです。現在、Linuxカーネル2.6解読室の第2章までを公開中。
プロセスが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年06月11日 (日) 22時29分57秒 JST1
[ページ情報]
更新日時: 2008-08-27 14:45:06, 更新者: hiromichi-m
[権限]
表示:無制限, 編集:ログインユーザ, 削除/設定:メンバー