linux內核的三種 調度策略 :
SCHED_OTHER 分時調度策略,(默認的)
SCHED_FIFO實時調度策略,先到先服務
SCHED_RR實時調度策略,時間片輪轉
實時進程將得到優先調用,實時進程根據實時優先級決定調度權值,分時進程則通過nice和counter值決定權值,nice越小,counter越大,被調度的概率越大,也就是曾經使用了cpu最少的進程將會得到優先調度。
SHCED_RR和SCHED_FIFO的不同:
當采用SHCED_RR策略的進程的時間片用完,系統將重新分配時間片,並置於就緒隊列尾。放在隊列尾保證了所有具有相同優先級的RR任務的調度公平。
SCHED_FIFO一旦占用cpu則一直運行。一直運行直到有
更高優先級任務到達或自己放棄 。
如果有相同優先級的實時進程(根據優先級計算的調度權值是一樣的)已經准備好,FIFO時必須等待該進程主動放棄后才可以運行這個優先級相同的任務。而RR可以讓每個任務都執行一段時間。
相同點:
RR和FIFO都只用於實時任務。
創建時優先級大於0(1-99)。
按照可搶占優先級調度算法進行。
就緒態的實時任務立即搶占非實時任務。
當所有任務都采用分時調度策略時(SCHED_OTHER):
1.創建任務指定采用分時調度策略,並指定優先級nice值(-20~19)。
2.將根據每個任務的nice值確定在cpu上的執行時間( counter )。
3.如果沒有等待資源,則將該任務加入到就緒隊列中。
4.調度程序遍歷就緒隊列中的任務,通過對每個任務動態