一種實時操作系統(tǒng)RTOS的硬件加速設(shè)計
1.1 任務(wù)管理和時間管理
任務(wù)管理和時間管理的設(shè)計框圖如圖1所示。
每個任務(wù)都有4個域:TaskValid、OSTCBStat、OSTCBDly和OSTCBStatPend。每個任務(wù)都有一個任務(wù)就緒標(biāo)志TaskReady,RTA通過PrioBitmapToBinary模塊找到最高的優(yōu)先級并送給HighestPrio。在CPU響應(yīng)外部中斷或者給調(diào)度器上鎖時,可以通過OSIntNesting和OSLockNesting寄存器關(guān)閉RTA的中斷。
μC/OS-II實時系統(tǒng)內(nèi)核中,任務(wù)調(diào)度基于TimeTick完成,由于程序只能順序執(zhí)行,任務(wù)的timedly域更新也是順序執(zhí)行的,從而使得調(diào)度函數(shù)的執(zhí)行時間與運行的任務(wù)數(shù)量有關(guān)。在RTA模塊中,基于TimeTick的調(diào)度機(jī)制并沒有改變,只是原型中順序執(zhí)行的timedly更新,在硬件中可以同時執(zhí)行。在使用RTA模塊的系統(tǒng)中,移去了軟件中的用于任務(wù)調(diào)度的數(shù)據(jù)結(jié)構(gòu),相應(yīng)地在硬件中予以實現(xiàn)。
當(dāng)有更高優(yōu)先級的任務(wù)進(jìn)入就緒態(tài)時,就會產(chǎn)生RTA中斷。硬件實現(xiàn)上,當(dāng)進(jìn)入就緒態(tài)的上個時鐘周期的最高優(yōu)先級和本時刻的最高優(yōu)先級不同時,便產(chǎn)生中斷信號。在μC/OS-II中,每個TimeTick時刻都會發(fā)生中斷,這就需要更頻繁地保存CPU寄存器,相比本文提出的方法,浪費了更多的CPU時間。
1.2 TimeTick信號的產(chǎn)生
RTA的運行需要一個可配置的Timer來為其產(chǎn)生TimeTick信號。在本文中,通過對OR1200進(jìn)行改造,利用其內(nèi)部的Timer產(chǎn)生中斷信號作為RTA任務(wù)調(diào)度的標(biāo)準(zhǔn)時鐘節(jié)拍,而將RTA的中斷信號連接到原來Timer在CPU的接口處。這樣,CPU通過Wishbone總線可對Timer進(jìn)行讀寫,且RTA產(chǎn)生的中斷不會占用可編程中斷控制器PIC(Programmable Interrupt Controller)。改造后的框圖如圖2所示。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論