The Linux CPU scheduler & runqueue

转载自:http://ccu-cs-os2009s-495410059.blogspot.nl/2009/06/linux-cpu-scheduler-runqueue.html 


The Linux CPU scheduler & runqueue_第1张图片


在Linux 2.6,每個CPU有屬於自己的一個runqueue,而runqueue又分成兩個結構,active跟expired。這2個queue是根據每個process的priority來由高到低依序排列(範圍:0~139)。

active代表process的quantum尚未使用完畢的。
expire則代表quantum已經使用完畢的process。

The Linux CPU scheduler & runqueue_第2张图片

現在有1、2、3三個Task在active這個結構等待被執行。

Priority: Task1>Task2=Task3
Time quantum:Task1>Task2=Task3
(Time quantum ≒ 1/Priority)

The Linux CPU scheduler & runqueue_第3张图片


由Task1開始執行(因為Priority最高),當Task1將自己的Time quantum使用完畢後,就移動到expired。

The Linux CPU scheduler & runqueue_第4张图片


Task2和Task3的priority是相同的,所以用linked list將兩個串聯起來,而兩者的執行是採用round-robin演算法。

The Linux CPU scheduler & runqueue_第5张图片


每個Task有一個時間片段(time slice),因為Task2無法在time slice內執行完畢,就要移動到該linked list的最後面去排隊重新等待執行。

The Linux CPU scheduler & runqueue_第6张图片

Task2在經由round-robin演算法,排隊了幾次之後結束了他的執行Time quantum,也會移動到expired去。

The Linux CPU scheduler & runqueue_第7张图片


因為有動態優先權(dynamic priority)。動態優先權會以「上一個cycle中,該Task的averge sleep time值的大小」為依據給予該Task一個bouns值。所以Task3移動到expired時,priority比Task2高。

The Linux CPU scheduler & runqueue_第8张图片

3個Task都到了expired

The Linux CPU scheduler & runqueue_第9张图片

當active結構裡已經沒有Task在等待被執行,而expired有Task,兩者的指標就會做交換的動作

你可能感兴趣的:(linux,cpu,scheduler,runqueue)