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状態になるとクリアされる。


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


最終更新 2006/07/01 18:58:17 - kztomita
(2006/06/26 00:49:28 作成)
添付ファイル
runqueue.png - kztomita
prio_array.png - kztomita


リンク
最近更新したページ
検索