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