Linux Kernel(2.6)の実装に関するメモ書き
リンク
最近更新したページ
検索

RunQueue の差分
Rev.5→最新版  追加箇所 削除箇所


RUNNING状態のプロセスがつながれる。

RunQueueはCPU毎に存在する。さらに、RunQueueはプロセスの優先度毎(0-139)にリストを持ち、プロセスは自分の動的優先度に該当するキューにつながれる。優先度毎にリストを持つことで最高優先度のプロセスを高速に取りだせる。

またRunQueueにはActiveリストExpireリストがある(上記優先度毎リストActive,Expireリストにそれぞれ収容されている)

ActiveリストまだCPU時間っているプロセスチェーンされスケジューラActiveリストプロセススケジューリングCPU時間使いきったプロセスExpireリスト移動されスケジューリング対象外となる

ActiveリストプロセスCPU時間使いきってActiveリストになるとActive,ExpireリストえられててられたCPU時間使っていく



表1 struct runqueueのフィールド(一部)
フィールド
意味
nr_running
RUNNINGプロセス数(active,expireにつながれている総プロセス数)
active
CPU時間が残っているRUNNINGプロセスが保持される。優先度毎にリストがある。
expire
CPU時間を使い切ったRUNNINGプロセスが保持される。優先度毎にリストがある。

CPU時間っているプロセス使いきったプロセス区別くするために用意されたLinux2.2ではチェーンつだったので毎回なめてばしていた
expired_timestamp
expireに初めてプロセスを移動した時間。
active<->expireの入れ換えをしたり、IDLE状態になるとクリアされる。


Active,Expireリスト

RunQueueにはActiveリストExpireリストがある(上記優先度毎リストActive,Expireリストにそれぞれ収容されている)

ActiveリストまだCPU時間っているプロセスチェーンされExpireリストにはCPU時間使ったプロセスチェーンされるスケジューラActiveリストプロセススケジューリング

CPU時間使ったプロセスExpireリスト移動されスケジューリング対象外となりここでRUNNINGプロセスCPU時間使るのを

ActiveリストプロセスCPU時間使いきってActiveリストになるとActive,ExpireリストえてたにCPU時間てられ(*1)スケジューリング再開される

(*1) 正確にはExpireに移動した時に、次のCPU時間が設定されている。


Linux2.2ではActive,ExpireリストはなくリストつだったのでスケジューリングCPU時間使ったRUNNINGプロセス毎回読ばしていたCPU時間っているプロセス使いきったプロセス区別くするために用意された


[関連ページ]
スケジューラ