實時進程將得到優先調用,實時進程根據實時優先級決定調度權值,分時進程則通過nice和counter值決定權值,nice越小,counter越大,被調度的概率越大,也就是曾經使用了 cpu 最少的進程將會得到優先調度。(it外包)
1、SCHED_OTHER 分時調度策略;
2、SCHED_FIFO 實時調度策略,先到先服務;
3、SCHED_RR 實時調度策略,時間片輪轉 。
SHCED_RR 和 SCHED_FIFO 的不同:
當采用 SHCED_RR 策略的進程的時間片用完,系統將重新分配時間片,并置于就緒隊列尾。放在隊列尾保證了所有具有相同優先級的RR任務的調度公平。
SCHED_FIFO 一旦占用 cpu 則一直運行。一直運行直到有更高優先級任務到達或自己放棄。
如果有相同優先級的實時進程(根據優先級計算的調度權值是一樣的)已經準備好,FIFO時必須等待該進程主動放棄后才可以運行這個優先級相同的任務。而RR可以讓每個任務都執行一段時間。
相同點:
RR 和 FIFO 都只用于實時任務。
創建時優先級大于0(1-99)。
按照可搶占優先級調度算法進行。
就緒態的實時任務立即搶占非實時任務。
一、所有任務都采用Linux分時調度策略時,
-創建任務指定采用分時調度策略,并指定優先級nice值(-20~19)。
-將根據每個任務的nice值確定在cpu上的執行時間(counter)。
-如果沒有等待資源,則將該任務加入到就緒隊列中。
-調度程序遍歷就緒隊列中的任務,通過對每個任務動態優先級的計算(counter+20-nice)結果,選擇計算結果最大的一個去運行,當這 個時間片用完后(counter減至0)或者主動放棄cpu時,該任務將被放在就緒隊列末尾(時間片用完)或等待隊列(因等待資源而放棄cpu)中。
-此時調度程序重復上面計算過程,轉到第4步。
-當調度程序發現所有就緒任務計算所得的權值都為不大于0時,重復第2步。
二、所有任務都采用 FIFO 時
-創建進程時指定采用 FIFO,并設置實時優先級 rt_priority(1-99)。
-如果沒有等待資源,則將該任務加入到就緒隊列中。
-調度程序遍歷就緒隊列,根據實時優先級計算調度權值(1000+rt_priority),選擇權值最高的任務使用 cpu,該 FIFO 任務將一直占有 cpu 直到有優先級更高的任務就緒(即使優先級相同也不行)或者主動放棄(等待資源)。
-調度程序發現有優先級更高的任務到達(高優先級任務可能被中斷或定時器任務喚醒,再或被當前運行的任務喚醒,等等),則調度程序立即在當前任務 堆棧中保存當前cpu寄存器的所有數據,重新從高優先級任務的堆棧中加載寄存器數據到cpu,此時高優先級的任務開始運行。重復第3步。
-如果當前任務因等待資源而主動放棄cpu使用權,則該任務將從就緒隊列中刪除,加入等待隊列,此時重復第3步。
三、系統中既有分時調度,又有時間片輪轉調度和先進先出調度時
-RR 調度和 FIFO 調度的進程屬于實時進程,以分時調度的進程是非實時進程。(網絡維護公司)
-當實時進程準備就緒后,如果當前 cpu 正在運行非實時進程,則實時進程立即搶占非實時進程。
-RR 進程和 FIFO 進程都采用實時優先級做為調度的權值標準,RR是FIFO的一個延伸。FIFO時,如果兩個進程的優先級一樣,則這兩個優先 級一樣的進程具體執行哪一個是由其在隊列中的位置決定的,這樣導致一些不公正性(優先級是一樣的,為什么要讓你一直運行?),如果將兩個優先級一樣的任務 的調度策略都設為RR,則保證了這兩個任務可以循環執行,保證了公平。
所有任務都采用RR調度策略時
-創建任務時指定調度參數為 RR,并設置任務的實時優先級和nice值(nice值將會轉換為該任務的時間片的長度)。
-如果沒有等待資源,則將該任務加入到就緒隊列中。(it外包公司)
-調度程序遍歷就緒隊列,根據實時優先級計算調度權值 (1000+rt_priority) ,選擇權值最高的任務使用 cpu。
-如果就緒隊列中的 RR 任務時間片為0,則會根據 nice 值設置該任務的時間片,同時將該任務放入就緒隊列的末尾。重復步驟3。
-當前任務由于等待資源而主動退出 cpu,則其加入等待隊列中。重復步驟3。
艾銻無限是中國領先IT外包服務商,專業為企業提供IT運維外包、電腦維護、網絡維護、網絡布線、辦公設備維護、服務器維護、數據備份恢復、門禁監控、網站建設等多項IT服務外包,服務熱線:400-650-7820 聯系電話:010-62684652 咨詢QQ1548853602 地址:北京市海淀區北京科技會展2號樓16D,用心服務每一天,為企業的發展提升更高的效率,創造更大的價值。
更多的IT外包信息盡在艾銻無限http://www.richjn.cn
相關文章