點擊看原圖
圖2 引入中級調度的進程調度的調度隊列模型
4 VxWorks 實時內核Wind 調度分析Wind 內核缺省調度機制為基于優先級的搶占式調度。采用這種機制時,系統把處理機分配給優先級最高的進程,使之執行。一旦出現了另一個優先級更高的進程時,進程調度程序剝奪當前任務的執行,將處理機分配給高優先級任務。而在相同優先級的多個任務之間,采用時間片輪
轉調度機制。采用這種機制時,當一個任務到達時,它被排在輪轉隊列的后面,等待分配給自己的間片的到來,如果在時間片內沒有結束,則再等待屬于自己的時間片的到來,直到任務完成。
4. 1 基于優先級的搶占式調度
采用基于優先級的搶占式調度,系統中每個任務都有一個介于最高0 到最低255 之間的優先級。任一時刻,系統內核一旦發現一個優先級更高的任務轉變為就緒態,內核就保存當前任務的上下文并把當前任務狀態轉換為阻塞態,同時切換到這個高優先級任務的上下文執行。如圖3 ,低優先級的task1 被中優先級的task2 搶占,task2又被高優先級的task3 搶占。
點擊看原圖
圖3 基于優先級的搶占式調度
4. 2 輪轉調度算法
采用輪轉調度算法,系統讓處于就緒態的優先級相同的一組任務依次輪流執行預先確定長度的時間片。這是一種處理機平均分配的方法。如果不使用輪轉調度算法,優先級相同的一組任務中第一個獲得處理機的任務將不會被阻塞而獨占處理機,如果沒有阻塞或其他情況發生,它不會放棄處理機的使用權。如圖4 , 相同優先級的task1 、task2 和task3 平均分配預先確定的處理機時間片。
點擊看原圖
圖4 優先級相同輪轉調度
4. 3 基于優先級的搶占式調度與輪轉調度相結合有時,基于優先級的搶占式調度可與輪轉調度相結合。當優先級相同的一組任務依次輪流平均分配處理機時,若有高優先級的任務轉變為就緒態則可搶占該組任務。直到再一次符合執行條件時,該組任務才可再次共享處理機。如圖5 ,相同優先級的task1 、task2 和task3 輪流占有處理機時,高于該組優先級的task4 搶占處理機,等task4執行結束,該組任務再次共享處理機。