??? 摘? 要: 在闡述了硬件實時操作系統(tǒng)" title="實時操作系統(tǒng)">實時操作系統(tǒng)的結(jié)構(gòu)和運行機制的基礎(chǔ)上,,著重論述了基于FPGA設(shè)計實現(xiàn)的硬件實時操作系統(tǒng)" title="硬件實時操作系統(tǒng)">硬件實時操作系統(tǒng),并在Actel公司的APA075上實現(xiàn)了任務(wù)調(diào)度" title="任務(wù)調(diào)度">任務(wù)調(diào)度,、中斷管理,、定時器管理" title="定時器管理">定時器管理等實時操作系統(tǒng)基本功能。該硬件實時操作系統(tǒng)具有強實時性,、高確定性和低系統(tǒng)開銷等優(yōu)點,。?
??? 關(guān)鍵詞: FPGA;硬件實時操作系統(tǒng),;系統(tǒng)開銷?
?
??? 隨著嵌入式技術(shù)的發(fā)展,,實時操作系統(tǒng)RTOS(Real Time Operating System)被越來越多地應(yīng)用在嵌入式系統(tǒng)中,如:航空航天,、工業(yè)控制,、汽車電子和核電站建設(shè)等眾多領(lǐng)域。對于現(xiàn)有基于軟件實現(xiàn)的實時操作系統(tǒng),,單純依靠改進調(diào)度算法已不能使其實時性有更大的提高,。如果采用硬件邏輯實現(xiàn)RTOS中的任務(wù)調(diào)度、中斷處理和定時器管理等功能,,則可使其實時性和確定性顯著提高,。因為硬件邏輯獨立于處理器運行,不占用處理器的處理時間,,所節(jié)省的時間用于執(zhí)行任務(wù)程序,,從而提高了任務(wù)集合的可調(diào)度性和實時性。本文基于“外部處理器+FPGA”的硬件平臺結(jié)構(gòu)[1],,在FPGA上設(shè)計和實現(xiàn)了硬件實時操作系統(tǒng),。?
1 硬件實時操作系統(tǒng)的結(jié)構(gòu)和運行原理?
??? 硬件實時操作系統(tǒng)能實現(xiàn)典型實時操作系統(tǒng)的各種功能模塊,包括:任務(wù)調(diào)度內(nèi)核,、中斷管理模塊,、定時器模塊、資源管理模塊和內(nèi)存管理模塊等[2],。為了實現(xiàn)穩(wěn)定可靠的系統(tǒng),,本文采用逐步演進的方法,。首先實現(xiàn)由任務(wù)調(diào)度內(nèi)核(也稱作硬件調(diào)度內(nèi)核)、中斷管理,、定時器管理和接口軟件構(gòu)成的最小系統(tǒng),,然后逐步增加其他功能模塊。?
??? 硬件RTOS的結(jié)構(gòu)如圖1所示,。調(diào)度內(nèi)核是系統(tǒng)的核心,,負責(zé)任務(wù)的調(diào)度管理;中斷管理模塊負責(zé)管理外部中斷" title="外部中斷">外部中斷,;定時器模塊負責(zé)任務(wù)延時和周期執(zhí)行,。硬件RTOS的數(shù)據(jù)通過接口總線與外部系統(tǒng)通信[3]。
?
?
??? 任務(wù)調(diào)度內(nèi)核使用FPGA的片內(nèi)寄存器實現(xiàn)任務(wù)控制塊TCB(Task Control Block)隊列(簡稱任務(wù)隊列),。所有未執(zhí)行任務(wù)放在等待隊列和就緒隊列中,。等待隊列中的任務(wù)在條件滿足時將變?yōu)榫途w任務(wù)。本文中,,等待任務(wù)主要等待定時器時間和中斷到達,。任務(wù)調(diào)度內(nèi)核能在每個調(diào)度時機計算出優(yōu)先級最高的就緒任務(wù)。調(diào)度內(nèi)核采用搶占式調(diào)度機制,,每個調(diào)度時機輸出優(yōu)先級最高的就緒任務(wù),。?
??? 中斷模塊接管處理器除通知中斷以外的所有外部中斷,中斷服務(wù)程序稱作“中斷處理任務(wù)”,,與普通任務(wù)一樣被硬件內(nèi)核調(diào)度,。外部中斷到來時,觸發(fā)硬件內(nèi)核的調(diào)度時機,,保證中斷任務(wù)的實時執(zhí)行,。此時,軟件實時操作系統(tǒng)的中斷嵌套已經(jīng)轉(zhuǎn)換為處理器中任務(wù)的搶占,,高優(yōu)先級的中斷任務(wù)可以搶占低優(yōu)先級任務(wù),。?
??? 定時器管理模塊實現(xiàn)任務(wù)的延時和周期運行,在設(shè)定任務(wù)周期或延時時間后,,每當(dāng)設(shè)定時間到時便會使對應(yīng)任務(wù)就緒,,并觸發(fā)硬件內(nèi)核的調(diào)度時機,由后者執(zhí)行一次任務(wù)調(diào)度,。?
??? 接口總線硬件實現(xiàn)處理器與硬件RTOS之間的數(shù)據(jù)傳輸和事件通知,。接口軟件從功能上分為兩類:(1)系統(tǒng)API。被應(yīng)用程序調(diào)用,,能通過接口總線向硬件RTOS發(fā)送命令,。硬件RTOS收到命令后,解析數(shù)據(jù),,執(zhí)行相應(yīng)操作,。(2)通知中斷服務(wù)程序,。硬件RTOS進行一次任務(wù)調(diào)度后,如果發(fā)現(xiàn)新“選出”的最高優(yōu)先級就緒任務(wù)與當(dāng)前處理器正在執(zhí)行的任務(wù)不同,,則需要進行現(xiàn)場切換,。硬件調(diào)度內(nèi)核將利用通知中斷告知處理器該就緒任務(wù)的ID和堆棧地址,觸發(fā)后者執(zhí)行中斷服務(wù)程序,,以執(zhí)行現(xiàn)場切換,。?
??? 任務(wù)存在阻塞(S0)、就緒(S1)和運行(S2)三個狀態(tài),,定時器存在停止(T0)、運行(T1)兩個狀態(tài),,中斷模塊存在無效(I0),、有效(I1)兩個狀態(tài)。圖2描述了最小系統(tǒng)各模塊的運行狀態(tài),。?
?
?
2 系統(tǒng)設(shè)計與實現(xiàn)?
??? 本文選用ARM9系列的處理器S3C2410和Actel公司的FPGA芯片APA075,,用后者實現(xiàn)硬件實時操作系統(tǒng),調(diào)度在處理器上執(zhí)行的任務(wù),。?
2.1 任務(wù)調(diào)度內(nèi)核的設(shè)計實現(xiàn)?
??? 實時操作系統(tǒng)的核心是任務(wù)調(diào)度內(nèi)核,,其主要功能是根據(jù)調(diào)度算法,在每個調(diào)度時機確定下一個將要執(zhí)行的任務(wù),,并適時進行現(xiàn)場切換,。為此,調(diào)度內(nèi)核需要維護一系列的任務(wù)隊列(如就緒任務(wù)隊列和等待任務(wù)隊列),,并在每個調(diào)度時機,,根據(jù)優(yōu)先級重新排列就緒隊列,以計算出優(yōu)先級最高的就緒任務(wù),。?
??? 合理的任務(wù)控制塊是實現(xiàn)硬件調(diào)度內(nèi)核的關(guān)鍵,,應(yīng)能根據(jù)調(diào)度算法分配優(yōu)先級,并利于優(yōu)先級比較,,而且能夠索引最終結(jié)果,。根據(jù)上述需求,設(shè)計了如圖3所示的任務(wù)控制塊結(jié)構(gòu),。其中ID為任務(wù)號,,State為任務(wù)狀態(tài),Prio為任務(wù)優(yōu)先級,,SP_End為任務(wù)堆棧終止地址,,Run_Time 為任務(wù)起始運行時間,End_Time為任務(wù)結(jié)束運行時間,。起始和截止時間能根據(jù)特定算法分配任務(wù)的優(yōu)先級,。Delay_Counter為任務(wù)延時計數(shù)器,,Timer_Counter為周期任務(wù)分頻計數(shù)器,Int_Number為中斷號,。?
?
?
??? 硬件調(diào)度內(nèi)核使用多級比較器,,能確定當(dāng)前時刻優(yōu)先級最高的就緒任務(wù),并將其信息通過接口總線發(fā)送到處理器,。比較器采用相鄰任務(wù)兩兩比較的方式,。所以,2n個任務(wù)需要n級比較器,,構(gòu)成2n-1個比較單元,。多級比較器的結(jié)構(gòu)示例如圖4。?
?
?
??? 一個比較單元的實現(xiàn)代碼如下:?
process(Ready_TASK0_pro,,?Ready_TASK1_pro)?
????? begin?
????????? if (Ready_TASK0_pro
??????????????? cmp_level3_01_pro<=?Ready_TASK0_pro,;?
?????????????? cmp_level3_01_id<=?Ready_TASK0_id;?
????????? else?
?????????????? cmp_level3_01_pro<=Ready_TASK1_pro,;?
?????????????? cmp_level3_01_id<=Ready_TASK1_id,;?
???????? end if;?
??? end process,;?
??? 每個比較單元以任務(wù)ID為索引,,以優(yōu)先級為比較內(nèi)容,每次比較都將優(yōu)先級高的任務(wù)送入下一級比較,,經(jīng)過2n-1次比較,,可以把2n個任務(wù)中優(yōu)先級最高的任務(wù)選出。硬件邏輯是物理并行執(zhí)行的,,所以與軟件實現(xiàn)的實時操作系統(tǒng)調(diào)度內(nèi)核相比,,硬件調(diào)度內(nèi)核的執(zhí)行速度快,而且這種優(yōu)勢在多任務(wù)虛擬并行和高時鐘節(jié)拍的情況下將更加明顯,。?
??? 硬件調(diào)度內(nèi)核邏輯結(jié)構(gòu)如圖5所示,,處理器和硬件調(diào)度內(nèi)核之間通過接口總線通信。硬件調(diào)度內(nèi)核在調(diào)度時機進行任務(wù)調(diào)度,,調(diào)度時機在以下幾種情況產(chǎn)生:(1)周期任務(wù)周期時間到達,,任務(wù)狀態(tài)由等待變?yōu)榫途w。(2)延時時間到達,,等待任務(wù)狀態(tài)由等待變?yōu)榫途w,。(3)外部中斷到達,中斷任務(wù)狀態(tài)由等待變?yōu)榫途w,。(4)應(yīng)用程序調(diào)用由硬件RTOS提供的系統(tǒng)API改變了任務(wù)狀態(tài)或優(yōu)先級,。?
?
?
??? 以上述第4種情況為例,描述調(diào)度執(zhí)行過程如下:處理器在執(zhí)行到應(yīng)用程序調(diào)用的系統(tǒng)API時,將其轉(zhuǎn)換成對應(yīng)的命令和數(shù)據(jù),,經(jīng)編碼后傳遞到調(diào)度內(nèi)核,,觸發(fā)硬件調(diào)度內(nèi)核的一次調(diào)度時機。后者解析收到的數(shù)據(jù),,并執(zhí)行調(diào)度操作,,通過比較各任務(wù)優(yōu)先級,計算出優(yōu)先級最高的就緒任務(wù),。若該任務(wù)與當(dāng)前處理器中正在運行的任務(wù)不同,,則將該任務(wù)的ID號和堆棧終止地址利用通知中斷回送給處理器。?
2.2 中斷管理模塊的設(shè)計實現(xiàn)?
??? 普通任務(wù)控制塊的中斷號為0,,而中斷任務(wù)的中斷號為大于0的整數(shù)值,,并與中斷號對應(yīng)的外部中斷相關(guān)。中斷管理模塊使用FPGA的I/O(輸入/輸出)管腳,,每個管腳對應(yīng)一個外部中斷,,一個或者多個外部中斷對應(yīng)一個中斷處理任務(wù)。應(yīng)用程序初始化階段設(shè)定任務(wù)控制塊中斷號字段Int_Number,,能注冊中斷處理任務(wù)。在FPGA中建立以外部中斷為敏感信號的守護進程,,當(dāng)外部中斷到達時,,該進程將中斷任務(wù)置于就緒狀態(tài),其偽代碼如下:?
??? process(Task_Int_Number)//外部中斷為敏感信號?
??? ??? begin?
??????? ? if (Task_Int_Number’event and Task_Int_Number=0) then//下降沿觸發(fā)?
??????? ? ? ??Task_State <=1,;//任務(wù)置于就緒態(tài)?
??????? ? else?
??????????? ? Task_State<=0,;?
??????? ? end if;?
??? end process,;?
??? 硬件調(diào)度內(nèi)核以任務(wù)狀態(tài)為敏感信號,,當(dāng)外部中斷通過中斷管理模塊使中斷任務(wù)就緒時,會觸發(fā)調(diào)度內(nèi)核執(zhí)行一次任務(wù)調(diào)度,。中斷管理模塊的邏輯結(jié)構(gòu)如圖6所示,。為了保證外部事件的實時處理,應(yīng)用程序可為中斷任務(wù)設(shè)置高于普通任務(wù)的優(yōu)先級,。?
?
?
2.3 定時器管理模塊的設(shè)計實現(xiàn)?
定時器管理模塊以FPGA外部晶振為基準進行分頻,,創(chuàng)建多個定時器以設(shè)定任務(wù)周期。與定時器關(guān)聯(lián)的任務(wù)稱作周期任務(wù),。定時器管理模塊在每個定時器的周期到達后,,使對應(yīng)的周期任務(wù)就緒,觸發(fā)調(diào)度內(nèi)核進行任務(wù)調(diào)度,。?
設(shè)定任務(wù)控制塊中的Timer_Number注冊周期任務(wù),。如圖7所示,定時器管理模塊實現(xiàn):(1)任務(wù)周期運行,。在應(yīng)用程序設(shè)置并使能周期計數(shù)器Timer_Counter后,,每當(dāng)系統(tǒng)時鐘到達,,計數(shù)器減1。當(dāng)計數(shù)器為0時,,觸發(fā)對應(yīng)的守護進程,,使任務(wù)進入就緒態(tài)并重置周期計數(shù)器。任務(wù)狀態(tài)的改變觸發(fā)FPGA中的調(diào)度進程,,執(zhí)行一次任務(wù)調(diào)度,。(2)任務(wù)延時。在應(yīng)用程序設(shè)置并使能延時計數(shù)器Delay_Counter后,,模塊使任務(wù)變?yōu)榈却隣顟B(tài),。每次系統(tǒng)時鐘到達,計數(shù)器減1,。當(dāng)計數(shù)器為0時,,觸發(fā)對應(yīng)守護進程,使任務(wù)進入就緒態(tài),,并執(zhí)行一次任務(wù)調(diào)度,。?
?
?
2.4 接口設(shè)計?
??? 接口總線的硬件由32位數(shù)據(jù)總線、5位地址總線,、1個片選引線和1個通知中斷引線構(gòu)成,。接口軟件包括系統(tǒng)API和通知中斷處理程序。?
2.4.1 系統(tǒng)API的設(shè)計?
??? 系統(tǒng)API實現(xiàn)處理器中應(yīng)用程序與硬件RTOS的交互,。首先為任務(wù)調(diào)度內(nèi)核,、中斷管理和定時器管理等各硬件模塊分配處理器訪問地址;然后,,定義各模塊使用的API,,確定其功能和轉(zhuǎn)換后向硬件RTOS發(fā)出的數(shù)據(jù)格式及內(nèi)容。?
??? 任務(wù)管理API包括:創(chuàng)建任務(wù)(Task_Creat),、阻塞任務(wù)(Task_Block),、改變?nèi)蝿?wù)優(yōu)先級(Task_Change_Prio)和改變?nèi)蝿?wù)狀態(tài)(Task_Change_State)。?
??? 定時器管理API包括:設(shè)定分頻值(Set_Timer_Fre),、使能周期任務(wù)(Set_Timer_Task)和延時(Delay),。?
??? 中斷管理API包括:設(shè)定中斷任務(wù)(Set_Int_Task)和等待中斷(Wait_IRQ)。?
??? 下面以創(chuàng)建任務(wù)API為例,,描述其偽代碼和功能注釋:?
??? Task_Creat(ID,PRO,STATE)//創(chuàng)建任務(wù),,ID為任務(wù)索引,?//PRO為優(yōu)先級,,STATE為起始狀態(tài)?
??? {?
??? ??? Senddata=0001∷ID:PRO:STATE,;//拼裝數(shù)據(jù),?//變成發(fā)送數(shù)據(jù)格式?
??? ??? &TASKADD=Senddata;//將數(shù)據(jù)發(fā)送給硬件RTOS?
??? }?
2.4.2 通知中斷服務(wù)程序的設(shè)計?
??? 實時操作系統(tǒng)中,,每個任務(wù)都有堆??臻g,用于現(xiàn)場切換時保存各寄存器值和棧指針,。其中,,棧指針指向的堆棧起始地址和保存現(xiàn)場后的終止地址最為重要。保存當(dāng)前運行任務(wù)的現(xiàn)場時,,從其堆棧的起始地址開始執(zhí)行入棧操作,;而恢復(fù)將運行任務(wù)的現(xiàn)場時,從其堆棧的終止地址開始執(zhí)行出棧操作,。?
??? 任務(wù)堆棧在處理器使用的內(nèi)存中分配,。應(yīng)用程序初始化時,將任務(wù)堆棧終止地址利用接口總線寫入硬件調(diào)度內(nèi)核維護的任務(wù)控制塊中,。每次調(diào)度結(jié)束后,,若需要現(xiàn)場切換,硬件調(diào)度內(nèi)核會將下一運行任務(wù)的ID和堆棧終止地址利用通知中斷發(fā)送給處理器,。通知中斷處理程序首先將當(dāng)前任務(wù)的寄存器保存在該任務(wù)以SP_START為起始地址的堆棧中,,然后從接口總線讀取下一運行任務(wù)的ID和堆棧終止地址,恢復(fù)該任務(wù)的現(xiàn)場并開始運行,。圖8顯示了通知中斷服務(wù)程序的執(zhí)行過程,。?
?
?
3 實驗與結(jié)果分析?
??? 對本文實現(xiàn)的硬件RTOS,在時鐘節(jié)拍為10μs時,,分別測試在4、8,、16,、32和64個任務(wù)下、由定時器中斷觸發(fā)調(diào)度時機引起現(xiàn)場切換,,所占處理器時間(系統(tǒng)開銷)的情況,。其結(jié)果與軟件實時操作系統(tǒng)μC/OS進行比較,如表1所示,。?
?
?
??? 測試結(jié)果表明,,硬件RTOS中,由定時器中斷引起的系統(tǒng)開銷不隨任務(wù)個數(shù)的增加而顯著變化,,但與μC/OS相比,,差值越來越大。?
??? 表2列出了任務(wù)32時,,在10μs,、20μs、40μs、80μs和100μs的時鐘節(jié)拍下,,硬件RTOS和μC/OS由定時器中斷引起現(xiàn)場切換所占處理器時間的情況,。?
?
?
??? 測試結(jié)果表明,隨著時鐘節(jié)拍降低,,硬件RTOS的系統(tǒng)開銷變化不明顯,,而與μC/OS相比,差值越來越大,。時鐘節(jié)拍很小時,,硬件RTOS比μC/OS的系統(tǒng)開銷低許多。?
??? 目前,,硬件RTOS實現(xiàn)了任務(wù)調(diào)度內(nèi)核等基本模塊,。今后的工作中,將進一步擴展其功能,,增加以下幾個部分:(1)任務(wù)間通信和同步,。(2)內(nèi)存管理。(3)支持更多的調(diào)度算法,,實現(xiàn)調(diào)度算法可配置,。(4)針對可在FPGA中實現(xiàn)的可配置處理器,用硬件實現(xiàn)上下文切換邏輯,。?
??? 實時操作系統(tǒng)是嵌入式應(yīng)用的核心,,本文采用FPGA實現(xiàn)硬件實時操作系統(tǒng),包括任務(wù)調(diào)度內(nèi)核,、中斷管理和定時器管理等基本功能,。硬件RTOS能降低處理器系統(tǒng)開銷,提高其利用率,,從而提高實時系統(tǒng)任務(wù)集合的可調(diào)度性,,具有一定的研究和使用價值。?
參考文獻?
[1] ADOMAT J,,F(xiàn)URUNAS J,,LINDH L,et al.Real-Time Kernel in Hardware RTU:A step towards deterministic and high performance real-time systems.In Proceedings of Eighth Euromicro Workshop on Real-Time Systems,,1996.?
[2] LABROSSE J J.嵌入式實時操作系統(tǒng)μC/OS-II.北京:北京航空航天大學(xué)出版社,,2003.?
[3] MOONEY V,BLOUGH D M.A Hardware-Software realtime operating system framework for SOCs.IEEE Design and Test of Computers,,2002.?