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