(轉)Windows的任務調度機制


Windows是一款微內核、搶占式多任務、軟實時的操作系統。Windows的任務調度主要以線程為單位進行,線程擁有33個優先級,數值為0~32,其中0為最低優先級,32為最高優先級,最高和最低優先級均保留給系統使用。用戶可以使用的優先級為1~31。

Windows按照優先級高低順序來進行任務的調度,當調度發生時,內核首先檢查高優先級的線程是否 就緒,如果有發現有高優先級的線程就緒則立刻將高優先級的線程發往CPU執行。如果有高優先級的線程就緒,就不會執行低優先級的任務。不 過,windows使用成為“飢渴”的時間片分配策略,如果有線程一直渴望得到時間片但是很長時間都沒有獲得時間片,windows就會臨時將這個線程的 優先級提高,並一次分配給2倍的時間片來執行,但是windows絕不會將這個線程的優先級提高到實時優先級范圍(16~31為實時優先級范圍),如果不 希望windows進行飢渴分配策略,也可以通過特定的API將該策略關閉(SetThreadPriorityBoost)。

Windows同時采用時間片策略來執行相同優先級的任務。相同優先級的線程會獲得同樣的時間片(一 般為2個系統Tick,在單CPU系統上一個系統Tick一般為10ms,多CPU系統上一般為15ms,可以通過 GetSystemTimeAdjustment查詢)。一個線程的時間片用完后,Windows會將另外一個已經就緒的同優先級的線程發往CPU進行執 行。正在執行的線程將在線程主動放棄時間片(比如調用Sleep函數),時間片用完或Windows發現有更高優先級的線程就緒后暫停執行。

另外,Windows還存在不受優先級策略控制的線程,如DPC的處理線程,Windows中每個CPU上都有一個DPC隊列,只要DPC中有等待處理的任務,Windows總是會立刻對DPC中的任務進行處理。

Windows和硬實時操作系統的區別在於,硬實時操作系統一般擁有256或更多的優先級,硬實時操 作系統的最重要特性在於中斷的處理方式方面,Windows使用DPC隊列方式來延時處理中斷請求,在ISR中僅能執行時間非常關鍵的硬件寄存器操作(如 恢復清除設備中斷寄存器使得設備能進行下一次中斷),DPC隊列按照先入先出的方式執行,這樣如果系統在短時間發生大量中斷而使得DPC隊列中存在大量待 處理的中斷請求時,時間關鍵的中斷請求可能會在很長時間后才得到處理,使得系統喪失實時響應能力。硬實時操作系統的ISR同樣一般僅能執行時間關鍵的硬件 寄存器操作,也必須通過任務調度切換至相關的任務上下文環境,才能訪問更多的資源來進行相關的處理,但是硬實時操作系統可以根據優先級來處理中斷的請求, 后發生的高優先級中斷請求可以搶占低優先級中斷或低優先級任務的時間片,而使得時間關鍵的中斷請求總是能得到最優先的處理。

對各種操作系統的任務調度策略進行深入的理解之后,才能對一套應用系統的設計進行精確的把握。 Windows的調度策略很適合處理各種非事件性的數據,比如大量的流數據,可以達到很高的數據吞吐量。如果你設計的系統是需要實時響應的中斷事件式的處 理,那么你可能需要考慮使用一款硬實時的操作系統,如Windows CE 5.0以上版本,或vxWorks,WindowsCE有很好的硬實時的處理能力,價格低廉,開發容易,缺點是可用軟件少。而vxWorks功能強大,有 龐大的gnu軟件陣容做后盾,唯一美中不足的是價格昂貴。其他免費的操作系統只會令你的項目陷入困境,如果做的是有的是時間沒有錢的項目,才值得考慮。

原文:http://hi.baidu.com/dufangst/blog/item/64e796d962ae2ae077c638c2.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM