程序可以分為io消耗型和處理器消耗型
在每個程序的程序控制塊中都有乙個域policy,用來指明該程序為何種程序,應該使用何種排程策略
linux採用了兩種不同的優先順序範圍,一種是nice值,一種是實時優先順序
linux程序的時間片,表明程序在被搶占前所能持續執行的時間
cfs的做法是允許每個程序執行一段時間,迴圈輪轉,選擇執行最少的程序作為下乙個程序,而不再採用分配給每個程序時間片的做法了,cfs在所有可執行總數的基礎上計算出乙個程序該執行多久,而不是依靠nice值來計算時間片。nice值只是作為程序獲得處理器的執行比的權重。cfs排程器類的搶占時機取決於新的可執行程式消耗了多少處理器使用比,如果消耗的使用比比當前程序小,則新的程序立刻投入執行,否則,推遲其執行。
乙個程序在乙個排程週期中的執行時間為:
分配給程序的執行時間 = 排程週期 * 程序權重 / 所有程序權重之和
每乙個程序擁有乙個vruntime,每次需要排程的時候就選執行佇列中擁有最小vruntime的那個程序來執行
乙個程序的實際執行時間和虛擬執行時間之間的關係為:
vruntime = 實際執行時間 * nice_0_load / 程序權重
= 實際執行時間 * 1024 / 程序權重
nice_0_load = 1024, 表示nice值為0的程序權重
程序權重越大, 執行同樣的實際時間, vruntime增長的越慢,
乙個程序在乙個排程週期內的虛擬執行時間大小為:
vruntime = 程序在乙個排程週期內的實際執行時間 * 1024 / 程序權重
= (排程週期 * 程序權重 / 所有程序總權重) * 1024 / 程序權重
= 排程週期 * 1024 / 所有程序總權重
可以看到, 乙個程序在乙個排程週期內的vruntime值大小是不和該程序自己的權重相關的,所以所有程序的vruntime值大小都是一樣的
cfs利用紅黑樹來組織可執行佇列,並利用其迅速找到vruntime值得程序,作為下乙個執行程序。
對於我們的實時程序linux一般使用實時排程演算法
按照優先順序查詢就緒程序佇列,當發現佇列中有就緒程序時,就執行佇列頭位置的程序,其後,他會一直執行,除非出現下述情況
排程器按照優先順序查詢就緒程序佇列,當發現就緒程序佇列時,也是執行佇列頭的程序,當程序把自己的時間片消耗完後,排程器把這個程序放在佇列尾,並且再選擇儲再佇列頭的程序來執行,當然前提條件是這時沒有更高優先順序的實時程序就緒
程序排程的時機與引起程序排程的原因和程序排程的方式有關。linux程序排程的時機主要有:
linux程序排程
排程 從就緒的程序選出最適合的乙個來執行。知識點 1 排程策略 2 排程時機 3 排程步驟 排程策略 sched normal sched other 普通的分時程序 sched fifo 先入先出的實時程序 sched rr 時間片輪轉的實時程序 sched batch 批處理程序 sched i...
linux程序排程
搶占就是程序排程,使用者程序搶占發生在以下情況 1 從系統呼叫返回使用者空間的時候 2 從中斷處理程式返回使用者空間時。在時鐘中斷中會呼叫scheduler tick 函式,該函式在程序時間片用完的時候會設定need resched標誌,當從時鐘中斷或者其他中斷返回後檢查need resched,核...
linux 程序排程
linux程序優先順序 1.nice值 20 19 預設0 nice值越大,程序優先順序越低 2.實時優先順序 0 99 實時優先順序越高,程序優先順序越高 任何實時程序的優先順序都高於普通的程序,也就是說實時優先順序和nice優先順序處於互補相交的兩個範疇 linux預設的程序排程模型是時間迴圈共...