目錄
1.時鐘驅動排程方法
2.加權輪轉排程方法
2.1應用場景
2.2加權輪轉排程的缺點及優點
3.優先順序驅動排程方法
本文簡要介紹最近學習的三種常用實時系統的系統排程方法:時鐘驅動(clock-driven/time-driven)排程、加權輪轉(weighted round-robin)排程、優先順序驅動(priority-driven)排程。先了解這幾個方法的原理,後續部落格將深入對這三種方法進行展開。
clock-driven schdule是指系統在開始執行之前,選擇一些特定時刻,在這些時刻決定哪乙個作業在何時執行。在乙個典型的使用時鐘驅動的排程方法系統裡,所有的強實時作業的引數都是固定的並且是已知的。作業的排程表離線計算並儲存,然後在執行時使用。
通常選擇在有規律的空白時刻做出排程決策,一種方法是用硬體定時器來實現週期性做出排程的決策。
此排程方法常常用於排程分時應用。所有被排程的作業加入fifo佇列,位於佇列頭的作業將最多執行乙個時間片,時間片結束,該作業就被搶占然後放置佇列尾部,等待下一輪排程。佇列裡n個作業,每個作業在n個時間片上都能獲得乙個時間片,這就是一輪。
加權輪轉排程演算法曾被用於高速交換網中的實時通訊排程。這個演算法不是讓所有的就緒作業平等地共享處理器,而是給不同的作業以乙個不同的權值。特別地,乙個權值為wt的作業每輪獲得wt個時間片。一輪的長度是所有就緒作業的權值之和。通過調整作業的權值,能夠加速或者延遲每個作業完成的進度。
由於輪轉排程程式給每個作業以一段處理器時間,因此它延遲了每個作業的完成時間。如果用它來排程受優先約束的作業,對作業鏈的執行時間和實時性將受到很大的影響。因此輪轉排程是不適合排程此類作業的,另一方面,繼任的作業可能會遞增地消費前任所產生的結果(例如unix系統中的管道)。要想在這種情況下使用加權輪轉排程就必須考慮排程順序以及處理器的分配。如圖(j1,1是j1,2的前驅,j2,1是j2,2的前驅。),圖(a)是作業可以在4時刻完成,圖(b)對圖(a)做了進一步調整,使得所有作業在時刻3完成。
實際上,交換機是以管道方式實現每乙個訊息傳輸的。一旦接收到訊息的前一部分,那麼下游交換機就可以開始該訊息的處理和傳輸,不必等到訊息的下一部分到達才開始計算。加權輪轉排程只需要乙個輪轉佇列,不需要按照優先順序排序的佇列。對於超高速網路訊息傳輸,這是乙個優點。
優先順序驅動演算法是指不會有意使資源處於空閒狀態的一大類排程演算法。也即是說,資源只在需要該資源的作業沒有就緒可執行時才能處於空閒狀態。在作業釋放和完成等事件發生時,才做出排程決策。因此優先順序驅動演算法是事件驅動演算法。
在這裡明確一下概念,一下幾個概念可以認為等同:優先順序驅動排程演算法(priority-driven scheduling) = 列表排程演算法(list scheduling)= 貪心排程演算法(greedy scheduling)= 保持工作排程演算法(work-conserving scheduling)。為什麼說優先順序驅動排程演算法是貪心的呢?是因為,它總是盡力做出區域性最優的決策,這種最優不會讓作業等待。當然,貪心有時候並不總是合算的,稍後會加以說明。
非實時系統中所用的大部分排程演算法都是優先順序驅動的。例如,fifo,lifo,setf(shortest execution time first),letf(longest execution time first)。因為可以改變作業的優先順序,所以甚至可以將輪轉排程看作是優先順序驅動的。
如下圖是乙個典型的優先順序驅動的排程,這個例子中包含前驅關係,所有邊代表優先次序約束,作業名之後的數字代表執行時間,其中j5的釋放時刻是4,其他作業釋放時間是0。括號裡面表示優先順序次序,1-8優先順序依次降低。a、b圖分別畫出了搶占模式和非搶占模式下的排程時序圖情況。
一般來說,搶占的排程優於非搶占的排程。乙個基本的問題是什麼時候搶占排程優於非搶占的排程?什麼時候又相反?遺憾的是,這個問題沒有答案。
在作業具有相同的施放時間這種特殊情況下,當搶占的開銷可以忽略,搶占排程優於非搶占排程。
關於實時排程器的了解
deadline排程器的原理 很簡單,就是要保證在規定的時間內完成任務。而且,我們不僅要保證結果的重要性,還要保證時序的重要性。實時任務排程器 rt scheduler 負責實時任務對cpu的訪問。要了解一些實時排程中的基本概念 我們如果對實時任務進行抽象分為三個部分 deadline,period...
Linux核心執行緒實時獲取排程狀態的方法
最近在做專案中,需要執行緒實時的知道自身被sched out 和sched in.檢視了schedule 函式實現,發現核心提供了對應的notifier機制.schedule schedule context switch prepare task switch fire sched out pre...
提公升實時系統實時指標的乙個方法
isolcpus可以使選定的幾個cpu核不參與負載均衡的排程,這樣的話,我們可以在系統啟動的時候,在cmdline中增加如下引數 isolcpus 4,5,6,7 假如我們想保留這四個cpu核的話 這樣的話,系統通常的負載都會跑到系統其他的cpu核,我們保留了這四個核給實時任務。然後,我們可以使用c...