進程調度程序
進程調度程序負責決定將哪個進程投入運行,何時運行以及運行多長時間。
在運行態進程之間分配有限的處理器時間資源。
多任務系統分爲搶佔式和非搶佔式。
Linux使用搶佔式。(大部分現代系統都是搶佔式)
策略
IO消耗型進程:進程大部分時間在提交IO請求或者等待IO請求,比如GUI、網絡相關進程等。
處理器消耗型進程:把大多時間用於執行代碼的進程。
進程優先級:
nice值:-20~+19,值越大優先級越低;(Linux系統中nice值表示時間片的比例)
實時優先級:0~99,值越大優先級越高;
時間片:一個數值,它表明進程在搶佔前所能持續運行的時間。
IO消耗型不需要長的時間片,而處理器消耗型的進程則希望越長越好。
時間片過長將導致系統對交互的響應表現欠佳。
Linux的CFS(完全公平調度算法)調度器並沒有直接分配時間片到進程,它是將處理器使用按比劃分給進程。
所以進程所獲得的處理器時間其實跟系統負載相關。
且這個比例受nice值影響,nice值作爲權重將調整進程所使用的處理器時間使用比。
實現
Linux調度器以模塊方式提供。
這種模塊化結構成爲調度器類。
CFS是針對普通進程的調度類(SCHED_NORMAL),位於kernel\sched_fair.c。
Linux還提供了兩種實時調度策略:SCHED_FIFO和SCHED_RR。
/*
* Scheduling policies
*/
#define SCHED_NORMAL 0
#define SCHED_FIFO 1
#define SCHED_RR 2