uCOS-II任務(wù)調(diào)度在PowerPC的移植
4 改進(jìn)擴(kuò)展任務(wù)數(shù)的優(yōu)先級(jí)調(diào)度性能
當(dāng)對(duì)μC/OSII支持的任務(wù)數(shù)進(jìn)行擴(kuò)展時(shí),按照μC/OSII原有的做法,需要按照高低字節(jié)分別查找OSUnMapTbl對(duì)照表。任務(wù)數(shù)為256時(shí),尋找最高優(yōu)先級(jí)就緒任務(wù)的函數(shù)將需要運(yùn)行約35條指令。數(shù)出前導(dǎo)零數(shù)目的指令在這種情況下的作用將更加顯著,對(duì)于32位PowerPC處理器,精心設(shè)計(jì)的代碼可以做到僅需10條指令就將任務(wù)數(shù)擴(kuò)展到1024個(gè)。
此時(shí)OSRdyGrp擴(kuò)展為32位,OSrdyTbl擴(kuò)展成32個(gè)32位的數(shù)組。從OSRdyGrp得到的前導(dǎo)零數(shù)目,就是任務(wù)優(yōu)先級(jí)高5位的值,乘以4可以得到該字的相對(duì)偏移地址;在OSRdyTbl中,定義高位對(duì)應(yīng)高優(yōu)先級(jí)任務(wù),低位對(duì)應(yīng)低優(yōu)先級(jí)任務(wù),則其前導(dǎo)零數(shù)目就是任務(wù)優(yōu)先級(jí)低5位的值,和高5位的值移位相加就得到完整的任務(wù)優(yōu)先級(jí)。通過(guò)將OSRdyGrp和OSRdyTbl定義成結(jié)構(gòu)體,利用結(jié)構(gòu)體首地址的相對(duì)尋址來(lái)分別讀取其數(shù)值,可以減少一次取地址的操作。
尋找最高優(yōu)先級(jí)就緒態(tài)的最終代碼如下:
在64位的PowerPC 更有cntlzd(Count Leading Zero Double word)指令,一次就可以找出64個(gè)任務(wù)中優(yōu)先級(jí)最高的那個(gè),就更沒有必要使用μC/OSII中的算法了。
5 總結(jié)
RTOS實(shí)時(shí)內(nèi)核μC/OS和μC/OSII中,任務(wù)調(diào)度算法巧妙,性能優(yōu)異,在嵌入式應(yīng)用領(lǐng)域很有影響力,被移植到各種CPU上。然而由于是為8位CPU設(shè)計(jì)的,對(duì)于那些具有優(yōu)先級(jí)硬件算法指令的16/32/64位CPU,μC/OSII的軟件算法就完全失去了優(yōu)勢(shì)。應(yīng)該利用這類CPU的特有指令,優(yōu)化任務(wù)調(diào)度算法,使RTOS的實(shí)時(shí)性達(dá)到最佳。對(duì)于這類處理器,僅移植μC/OSII軟件算法是很不夠的,應(yīng)該利用相關(guān)硬件算法指令。
評(píng)論