
192
|
第六章
行程—優先權較低的行程只須等待優先較高的行程用完它們的時段或者受到阻擋。此行
為明確描述了一個重要但心照不宣的 Unix 排班規則:所有的行程都必須前進。
完全公平排班器
完全公平排班器(Completely Fair Scheduler,簡稱 CFS)從根本上違背了傳統的 Unix
行程排班器。在大部分的 Unix 系統中,包括 CFS 導入之前的 Linux,行程排班機制會
用到兩個重要的每行程(per-process)變數:優先權(priority)及時段(timeslice)。 正
如上一節所討論的,在傳統的行程排班器中,行程會被分配到一個時段(代表處理器分
配給該行程的時間片段)。行程會運行到該時段用完為止。同樣的,行程會被分配到一
個優先權。行程排班器在運行優先權較低的行程之前,會先運行優先權較高的行程。該
演算法非常簡單,而且非常適合早期的分時 Unix 系統。如果系統需要良好的互動效能
及公平性,像是今日的現代桌上型電腦及行動裝置,那麼它的表現就令人不敢領教了。
CFS 導入了一個相當不同的演算法,稱為
公平排班
(
fair scheduling
):每個行程所分配
到的不再是時段,而是處理器時間的
比例
(
proportion
)。該演算法很簡單:若系統中有
N
個行程,則每個行程將會分配到處理器時間的
1/N
。然後 CFS 會使用
nice
值,替每個
行程所獲得的處理器時間比例加上權重。具有預設 nice 值(零)的行程所得到的權重是
1,所以它們的比例不會發生變化。具有較小 nice ...