μC/OS2Ⅱ中優(yōu)先級調(diào)度算法的改進及實現(xiàn)
引 言
實時系統(tǒng)是對時間有特殊要求的系統(tǒng),系統(tǒng)運行結果的正確性不僅要求系統(tǒng)的邏輯正確,而且依賴于運行結果產(chǎn)生的時間。尤其是硬實時系統(tǒng),具有明確的實時參數(shù),如果在某個限定的時刻前不能完成任務將導致整個應用的失敗。μC/OS2 Ⅱ是一個為實時嵌入式應用而設計的搶占式多任務的實時操作系統(tǒng),全部μC/OS2Ⅱ的函數(shù)調(diào)用與服務執(zhí)行時間是可知的。在μC/OS2Ⅱ中,涉及到的重要概念有實時內(nèi)核、任務間的通信、任務切換與調(diào)度、任務優(yōu)先級分配、任務間的競爭、死鎖等。其中,內(nèi)核負責管理各個任務,為每個任務分配CPU時間,并負責任務之間的通信。μC/OS2Ⅱ內(nèi)核最多可以管理64個任務,其中系統(tǒng)保留了8個任務,用戶最多可以有56個應用任務。因此,當工程的復雜性增大,在μC /OS2Ⅱ操作系統(tǒng)上運行的任務數(shù)目不斷增加時,如果任務數(shù)目超過64個,就必須換用其他的開發(fā)平臺,這樣就可能造成大量的前期開發(fā)工作作廢。我們考慮到這種情況,根據(jù)μC/OS2Ⅱ本身的任務可擴展性,在原有的優(yōu)先級調(diào)度算法基礎上,提出了兩種可行的大量增加可管理任務的算法。
基于優(yōu)先級的搶占式調(diào)度算法
當系統(tǒng)響應時間很重要時,要使用占先式內(nèi)核。μC/OS2Ⅱ的實時內(nèi)核就是占先式內(nèi)核。其特點是能夠確定最高優(yōu)先級的就緒任務什么時候可以執(zhí)行,可以得到CPU的控制權,從而使任務級響應時間得以最優(yōu)化。相應地,μC/OS2Ⅱ內(nèi)核采用的是基于優(yōu)先級的搶占式調(diào)度策略。系統(tǒng)為每個任務分配一個優(yōu)先級,最高優(yōu)先級的任務一旦就緒,總能得到CPU的控制權。當一個運行著的任務使一個比它優(yōu)先級高的任務進入了就緒態(tài),當前任務的CPU使用權就被剝奪了,或者說被掛起了,那個高優(yōu)先級的任務立刻得到了CPU的控制權。
μC/OS2Ⅱ中優(yōu)先級調(diào)度算法的第一種改進方法
為增加μC/OS2Ⅱ內(nèi)核可管理任務的數(shù)目,該算法利用μC/OS2Ⅱ原有的優(yōu)先級判定表格,重新定義了存放任務優(yōu)先級的字節(jié),并重新建立任務就緒表,把64個任務擴充到256個任務,最后給出了新的最高就緒任務的查找算法。
對優(yōu)先級字節(jié)的改動和規(guī)定
在 μC/OS2Ⅱ中,原有的基于64個任務調(diào)度的優(yōu)先級調(diào)度算法分別用3個比特位來定位任務優(yōu)先級在就緒表(readylist) 中的行和列,即0~2位標識該任務在總就緒表中的列信息,3~5位標識該任務在就緒表中的行信息。因此,存放任務優(yōu)先級的字節(jié)中8個比特位只會用到6位,而有兩個比特位空閑。該算法直接擴展定位就緒任務優(yōu)先級在就緒表中位置的行和列信息的比特位,使其能夠區(qū)分256個不同的任務優(yōu)先級。擴展后的算法規(guī)定任務優(yōu)先級字節(jié)的定義如圖1所示。
評論