文獻(xiàn)標(biāo)識碼: A
實(shí)時操作系統(tǒng)RTOS(Real Time Operating System)由于具有調(diào)度的實(shí)時性,、響應(yīng)時間的可確定性、系統(tǒng)高度的可靠性等特點(diǎn),,被越來越多地應(yīng)用在嵌入式系統(tǒng)中,,如:航空航天、工業(yè)控制,、汽車電子和核電站建設(shè)等眾多領(lǐng)域,。
傳統(tǒng)上,RTOS內(nèi)核是加在應(yīng)用程序中的軟件,,它不僅增加了ROM(代碼空間)和RAM(數(shù)據(jù)空間)的開銷,,而且增加了應(yīng)用程序的額外負(fù)荷,,即使在設(shè)計較好的應(yīng)用系統(tǒng)中內(nèi)核仍占用2%~5%的CPU負(fù)荷[1]。在實(shí)時性較強(qiáng)的場合,,若無法得到及時的響應(yīng),,將會引起嚴(yán)重后果。因此,,降低RTOS內(nèi)核的系統(tǒng)開銷及提高其實(shí)時性非常重要,。
對于降低RTOS占用應(yīng)用程序處理器開銷的研究,大多數(shù)集中在改進(jìn)調(diào)度算法[2]和提高處理器的處理能力[3],,但是依靠改進(jìn)調(diào)度算法已不能使其實(shí)時性有更大的提高,,通過提高處理器速度也達(dá)不到理想的效果。隨著EDA技術(shù)的發(fā)展及硬件芯片造價的降低,,“軟件硬件化”的趨勢正在成為一個研究的新熱點(diǎn),。采用硬件芯片實(shí)現(xiàn)RTOS的功能模塊極大地發(fā)揮了系統(tǒng)處理的并行特性,使硬件RTOS的處理速度達(dá)到了傳統(tǒng)軟件RTOS的6~50倍[4],。然而,,RTOS的硬件化非常復(fù)雜、繁瑣,,大多由軟件實(shí)現(xiàn)的數(shù)據(jù)結(jié)構(gòu)不適合硬件的并行實(shí)現(xiàn),,需要重新修改、設(shè)計,。
本文就具體的實(shí)時操作系統(tǒng)μC/OS-II的任務(wù)管理進(jìn)行了硬件設(shè)計,,實(shí)現(xiàn)了任務(wù)管理模塊系統(tǒng)調(diào)用的硬件電路和基于組合電路的硬件任務(wù)調(diào)度器。
1 硬件RTOS總體設(shè)計
硬件RTOS由軟件和硬件兩部分組成,,如圖1所示,。軟件部分負(fù)責(zé)應(yīng)用程序與硬件RTOS的交互,主要實(shí)現(xiàn)2點(diǎn)功能:向應(yīng)用程序提供訪問硬件函數(shù)的接口,;向硬件邏輯提供返回處理結(jié)果的中斷處理函數(shù)和任務(wù)切換的中斷處理函數(shù),。硬件部分將以往由底層軟件函數(shù)完成的工作,采用硬件函數(shù)完成,。
硬件RTOS仍然是以系統(tǒng)調(diào)用的形式為應(yīng)用程序服務(wù),,所不同的是由調(diào)用硬件函數(shù)替代了以往的軟件函數(shù)。軟件函數(shù)和硬件函數(shù)的區(qū)別[5]在于:它們被處理時所在的器件不同,,軟件函數(shù)編譯成一條條指令在處理器上執(zhí)行,,硬件函數(shù)把參數(shù)通過數(shù)據(jù)總線發(fā)送到了指定硬件單元電路的寄存器中,再由硬件邏輯電路進(jìn)行相應(yīng)的處理,。硬件電路與處理器可以并行工作,,節(jié)省的處理器時間用于執(zhí)行別的任務(wù),提高了系統(tǒng)的可調(diào)度性,。
圖1中,,硬件部分由輸入輸出寄存器、中斷控制器,、控制器和RTOS主要功能模塊等組成,。
(1)輸入輸出寄存器。輸入寄存器接收由接口函數(shù)傳遞的功能代碼和參數(shù),,輸出寄存器將執(zhí)行結(jié)果返回給接口函數(shù),。
(2)中斷控制器。接收外部事件中斷,,中斷控制器使用FPGA的I/O(輸入/輸出)管腳,,每個管腳對應(yīng)一個外部中斷,一個或者多個外部中斷對應(yīng)一個中斷處理任務(wù)[6],。當(dāng)外部中斷到來時,,相應(yīng)的事件標(biāo)志位被置位,中斷任務(wù)被置為就緒態(tài),。
(3)控制器,。從事件控制塊和信號量控制塊獲知任務(wù)的狀態(tài),結(jié)合系統(tǒng)調(diào)用的功能代碼和參數(shù)信息,,確定將要執(zhí)行的操作并發(fā)出控制信號,。每個硬件單元都通過CPU發(fā)出的控制信號進(jìn)行工作。
RTOS主要功能模塊包括:事件標(biāo)志組管理,、信號量管理,、任務(wù)管理及時鐘管理。
(1)事件標(biāo)志組管理,。事件標(biāo)志組是一個數(shù)據(jù)結(jié)構(gòu),,采用FPGA的片內(nèi)寄存器實(shí)現(xiàn),每個事件占1 bit,。任務(wù)或中斷服務(wù)可以將某一位置位或復(fù)位,。當(dāng)任務(wù)所需要的事件發(fā)生時,則將相應(yīng)的事件位置位,;當(dāng)任務(wù)所等待的事件都發(fā)生時,,則應(yīng)向控制器提出改變?nèi)蝿?wù)狀態(tài)的相應(yīng)申請,同時將任務(wù)的ID號送給任務(wù)管理模塊,。
(2)信號量管理,。信號量由2部分組成:16 bit的無符號整型的計數(shù)值(0~65535);等待該信號量的任務(wù)組成的等待任務(wù)表,。采用可預(yù)置的雙向計數(shù)器(up/down)實(shí)現(xiàn)計數(shù)值部分,,采用FPGA片內(nèi)的寄存器實(shí)現(xiàn)該信號量的等待任務(wù)表。寄存器的位數(shù)對應(yīng)系統(tǒng)中的任務(wù)數(shù),,每個任務(wù)占1 bit,,且初始值為0(表示沒有任務(wù)等待該信號量),。等待該信號量的任務(wù)將寄存器的相應(yīng)位置1,釋放該信號量的任務(wù)喚醒優(yōu)先級較高的等待任務(wù),,將寄存器的相應(yīng)位置0,。每發(fā)生一次置位或復(fù)位操作,也必須向控制器提出改變?nèi)蝿?wù)狀態(tài)的相應(yīng)申請,,同時將相應(yīng)任務(wù)的ID號送給任務(wù)管理模塊,。
(3)任務(wù)管理。負(fù)責(zé)各種任務(wù)狀態(tài)的切換和任務(wù)調(diào)度,。任務(wù)管理模塊接收從輸入寄存器,、事件標(biāo)志組管理模塊或信號量管理模塊傳遞來的任務(wù)ID號,在控制器的相應(yīng)控制信號作用下,,執(zhí)行任務(wù)狀態(tài)的切換,。調(diào)度器以任務(wù)的狀態(tài)為敏感信號,當(dāng)任務(wù)的狀態(tài)發(fā)生改變時,,觸發(fā)調(diào)度器執(zhí)行一次任務(wù)調(diào)度,,找出當(dāng)前優(yōu)先級最高的就緒態(tài)任務(wù)。若其優(yōu)先級高于當(dāng)前正在運(yùn)行的任務(wù)的優(yōu)先級,,則向CPU發(fā)出硬件中斷處理信號,。
(4)定時器管理。主要實(shí)現(xiàn)任務(wù)的延時,,當(dāng)設(shè)置的延時時間到且任務(wù)沒有等待別的資源時,,將任務(wù)的狀態(tài)置為就緒。
由圖1可知,,硬件RTOS的工作過程如下:
(1)在應(yīng)用程序中調(diào)用系統(tǒng)服務(wù),。
(2)系統(tǒng)調(diào)用的接口函數(shù)將功能代碼和參數(shù)傳給硬件部分的輸入寄存器。
(3)硬件部分執(zhí)行系統(tǒng)調(diào)用,。
(4)在硬件邏輯執(zhí)行系統(tǒng)調(diào)用的過程中,,可以接收外部事件的異步請求,因此,,硬件部分執(zhí)行系統(tǒng)調(diào)用過程中可能轉(zhuǎn)向以下不同的處理過程:
①若外部事件請求使中斷任務(wù)就緒,,則向處理器發(fā)出要求任務(wù)切換的硬件中斷請求。
②若系統(tǒng)調(diào)用使高優(yōu)先級的任務(wù)就緒,,則硬件部分向處理器發(fā)出要求任務(wù)切換的硬件中斷請求,。
③硬件部分完成系統(tǒng)調(diào)用功能,則采用中斷形式通知處理器并回送處理結(jié)果,。
(5)中斷處理函數(shù)完成任務(wù)切換,。
(6)處理器執(zhí)行新任務(wù)。
2 μC/OS-II任務(wù)管理硬件設(shè)計
任務(wù)管理是RTOS的核心,本文首先對μC/OS-II任務(wù)管理模塊進(jìn)行了硬件設(shè)計,,其他的模塊可以依托任務(wù)管理展開,。μC/OS-II任務(wù)管理主要包括建立任務(wù)、刪除任務(wù),、掛起任務(wù),、恢復(fù)任務(wù)、查詢?nèi)蝿?wù)和任務(wù)調(diào)度等,。其中建立任務(wù),、刪除任務(wù),、掛起任務(wù),、恢復(fù)任務(wù)和查詢?nèi)蝿?wù)是通過系統(tǒng)調(diào)用形式交給用戶調(diào)用的;而任務(wù)調(diào)度是交給系統(tǒng)函數(shù)調(diào)用的,,用戶不能直接調(diào)用它,。因此,本文將任務(wù)管理分成系統(tǒng)調(diào)用函數(shù)的硬件實(shí)現(xiàn)和任務(wù)調(diào)度器硬件實(shí)現(xiàn)2部分,。
2.1 任務(wù)管理系統(tǒng)調(diào)用函數(shù)的硬件設(shè)計
μC/OS-II的任務(wù)由3部分組成:即任務(wù)程序代碼,、任務(wù)堆棧、任務(wù)控制塊TCB(Task Control Block),。TCB把任務(wù)代碼和任務(wù)堆棧進(jìn)行關(guān)聯(lián)而使三者成為一個整體,。
任務(wù)管理系統(tǒng)調(diào)用的硬件實(shí)現(xiàn)電路如圖2所示。參數(shù)1是建立任務(wù)時,,寫入TCB的任務(wù)代碼段地址,、任務(wù)優(yōu)先級、任務(wù)的參數(shù)指針和分配給任務(wù)的堆棧棧頂指針等任務(wù)運(yùn)行和管理的信息,;參數(shù)2是分配給任務(wù)的ID號,。每個任務(wù)依據(jù)任務(wù)的ID號對應(yīng)一個TCB。
在圖2中,,任務(wù)管理系統(tǒng)調(diào)用的硬件實(shí)現(xiàn)電路主要由分配器,、選擇器和TCB寄存器組成。
(1)分配器,。建立任務(wù)和刪除任務(wù)時,,分配器根據(jù)任務(wù)的ID號選擇建立任務(wù)的信息送到對應(yīng)的輸出通道上,分配器的輸出端與多路選擇器的一路輸入端直連,,即參數(shù)1被送到了選擇器的輸入端,,作為一路輸入。掛起任務(wù)和恢復(fù)任務(wù)時,,分配器根據(jù)任務(wù)的ID號,,將任務(wù)的狀態(tài)送到對應(yīng)TCB的狀態(tài)寄存器中。
(2)選擇器。選擇器的輸入端分別是建立任務(wù)時要送給 TCB的數(shù)據(jù)(參數(shù)1)和刪除任務(wù)時要送給TCB的數(shù)據(jù)(系統(tǒng)初始值),,數(shù)據(jù)輸出端與一個TCB塊直連,。建立信號有效時,選擇參數(shù)1寫入TCB,,建立任務(wù)完成,;否則,寫入系統(tǒng)的初始值覆蓋TCB信息,,即任務(wù)被刪除,。掛起和恢復(fù)任務(wù)只需根據(jù)任務(wù)的ID號找到相應(yīng)的TCB并修改其狀態(tài)寄存器的值。二值選擇器的輸入端是0和1,,可以分別表示任務(wù)的等待和就緒狀態(tài),。
(3)TCB寄存器。在軟件實(shí)現(xiàn)的RTOS中,,空閑TCB塊和已占用的TCB塊分別以空閑任務(wù)鏈表和任務(wù)鏈表的形式常駐內(nèi)存,。但是基于鏈表的軟件算法并不適合直接采用硬件高效實(shí)現(xiàn),因?yàn)橹挥凶x取鏈表的前一個表項(xiàng)的內(nèi)容后,,才能獲得后續(xù)表項(xiàng)的地址,,限制了硬件并行的開發(fā)。因此,,本文將TCB的數(shù)據(jù)結(jié)構(gòu)全部采用片內(nèi)的寄存器資源實(shí)現(xiàn),,從而節(jié)省了鏈表的查找時間,提高了系統(tǒng)調(diào)用的執(zhí)行效率,。
2.2 任務(wù)調(diào)度器的硬件設(shè)計
μC/OS-II進(jìn)行任務(wù)調(diào)度的思想是,,每時每刻總是讓優(yōu)先級最高的就緒任務(wù)處于運(yùn)行狀態(tài)。為了實(shí)現(xiàn)高效的調(diào)度算法,,采用組合電路實(shí)現(xiàn)硬件調(diào)度器,,如圖3所示。以優(yōu)先級為選擇條件,,將TCB中的狀態(tài)寄存器直接與調(diào)度器相連接,。這樣,只要任務(wù)的優(yōu)先級或任務(wù)的狀態(tài)有一個發(fā)生改變,,就會立刻引發(fā)一次任務(wù)的的重新調(diào)度,。
圖3中,數(shù)據(jù)分配器與TCB寄存器中的狀態(tài)寄存器RDY輸出端直連,,使用優(yōu)先級PRI作為選擇條件,,將RDY的就緒態(tài)(RDY=‘1’)分配到不同的輸出通道上。寄存器REG_X接收數(shù)據(jù)分配器輸出通道的輸出值并按位存儲,。將所有的REG_X寄存器按位進(jìn)行或運(yùn)算,,結(jié)果送寄存器PRI_REG。如圖4所示,優(yōu)先級寄存器PRI_REG的位數(shù)對應(yīng)系統(tǒng)中任務(wù)的個數(shù),,寄存器PRI_REG某位為1就表示相應(yīng)優(yōu)先級的任務(wù)處于就緒態(tài),,且低位的優(yōu)先級依次高于高位的優(yōu)先級。譯碼器從寄存器讀取PRI_REG的值進(jìn)行譯碼,,送出處于就緒態(tài)且優(yōu)先級最高的任務(wù),。比較器PRI_COMP以任務(wù)的ID號為索引,任務(wù)的優(yōu)先級PRI為比較內(nèi)容,。將每個任務(wù)的優(yōu)先級與譯碼找到的就緒態(tài)的最高優(yōu)先級相比較,,若相同,則輸出任務(wù)的ID號,,否則輸出0,。最后將所有比較器PRI_COMP的輸出做或運(yùn)算,即得到處于就緒態(tài)的優(yōu)先級最高任務(wù)的ID號,。
假設(shè)在某一時刻,,系統(tǒng)中優(yōu)先級PRI為1,、2,、3、6和7的任務(wù)處于就緒態(tài),,對應(yīng)任務(wù)的ID號分別是010,、100、001,、110和111,,則調(diào)度器中的數(shù)據(jù)處理流程如圖5所示。
2.3 仿真及實(shí)驗(yàn)結(jié)果
整個設(shè)計采用VHDL硬件語言描述,。為了驗(yàn)證該硬件實(shí)現(xiàn)的正確性和高效性,,使用 ISE 8.2軟件進(jìn)行時序仿真驗(yàn)證。任務(wù)管理硬件實(shí)現(xiàn)的功能仿真如圖6所示,。
(1)建立任務(wù),。依次建立3個任務(wù),優(yōu)先級與ID號相同分別為7,、1和6,。若系統(tǒng)中只有優(yōu)先級為7的任務(wù)處于就緒態(tài),則Next_task_id為7,;當(dāng)建立了優(yōu)先級為1的任務(wù)時,,高優(yōu)先級任務(wù)剝奪低優(yōu)先級任務(wù)的CPU使用權(quán),Next_task_id為1,,直到有更高優(yōu)先級的任務(wù)到來,,或任務(wù)自身刪除,優(yōu)先級為1的任務(wù)將一直執(zhí)行。
(2)查詢?nèi)蝿?wù),。處理器通過查詢?nèi)蝿?wù)這個系統(tǒng)調(diào)用獲得任務(wù)自身或其他應(yīng)用任務(wù)的信息,,查詢即將TCB的內(nèi)容輸出。
(3)掛起任務(wù),。掛起優(yōu)先級為1的任務(wù),,則優(yōu)先級為6的任務(wù)開始執(zhí)行。掛起的任務(wù)處于等待狀態(tài),,只有通過調(diào)用任務(wù)恢復(fù)函數(shù)才能恢復(fù),。
(4)建立任務(wù)。建立優(yōu)先級分別為5,、2和4的3個任務(wù),。優(yōu)先級為5的任務(wù)剝奪優(yōu)先級為6的任務(wù)的CPU使用權(quán),優(yōu)先級為2的任務(wù)又剝奪優(yōu)先級為5的任務(wù)的CPU使用權(quán)開始執(zhí)行,,優(yōu)先級為4的任務(wù)等待,。
(5)刪除任務(wù)。刪除了優(yōu)先級為2的任務(wù),,此刻系統(tǒng)中優(yōu)先級為4的任務(wù)開始執(zhí)行,。
(6)恢復(fù)任務(wù)?;謴?fù)優(yōu)先級為1的任務(wù),,優(yōu)先級為1的任務(wù)剝奪優(yōu)先級為4的任務(wù)的CPU使用權(quán)又重新開始執(zhí)行。
從圖6可以看出,,硬件實(shí)現(xiàn)可以高效完成操作系統(tǒng)任務(wù)管理的系統(tǒng)調(diào)用的功能,。建立任務(wù)和刪除任務(wù)需要3個時鐘節(jié)拍,掛起任務(wù),、恢復(fù)任務(wù)和查詢?nèi)蝿?wù)的狀態(tài)需要1個時鐘節(jié)拍,。任務(wù)調(diào)度是實(shí)時的,只要任務(wù)的狀態(tài)或優(yōu)先級有一個發(fā)生改變,,就立刻重新調(diào)度,。該設(shè)計所消耗的邏輯資源較少,降低了開發(fā)成本,,使其集成組件成為可能,。
本文針對傳統(tǒng)實(shí)時操作系統(tǒng)內(nèi)核占用系統(tǒng)資源、影響系統(tǒng)實(shí)時性的問題,,提出了用單獨(dú)的硬件電路實(shí)現(xiàn)實(shí)時操作系統(tǒng)中的系統(tǒng)調(diào)用和任務(wù)調(diào)度器的方案,。重點(diǎn)給出了采用FPGA實(shí)現(xiàn)μC/OS-Ⅱ任務(wù)管理模塊的過程。仿真結(jié)果表明,,任務(wù)管理的硬件實(shí)現(xiàn)保持了系統(tǒng)調(diào)用的正確性,,同時減少了系統(tǒng)調(diào)用的執(zhí)行時間,、降低了處理器系統(tǒng)開銷。因此,,硬件RTOS的實(shí)現(xiàn),,具有一定研究和使用價值。
參考文獻(xiàn)
[1] LABROSSE J J.嵌入式實(shí)時操作系統(tǒng)μC/OS-Ⅱ[M].邵貝貝譯.北京:北京航空航天大學(xué)出版社,,2001:178-185.
[2] MOON S,,REXFORD J,SHIN K.Scalable hardware priority queue architectures for high-speed packet switch[J].IEEE Transactions on Computer,,2000,,49(11).
[3] MORI S.The present and future of the TRON-specification CHIP-promoting open archeitecture and standardization[J]. Journal of formation Processing Society of Japan,1994,,35(10).
[4] NAKANO T,,ANDY U,ITABASHI M,,et al.Hardware implementation of a real-time operating system[J].Proceedings of the Twelfth TRON Project International Symposium,,IEEE Computer Society Press,1995(11):34-42.
[5] 周博,,王石記,,邱衛(wèi)東,等.SHUM2UCOS:基于統(tǒng)一多任務(wù)模型可重構(gòu)系統(tǒng)的實(shí)時操作系統(tǒng)[J].計算機(jī)學(xué)報,,2006(2):208-218.
[6] 崔建華,,孫紅勝,,王保進(jìn).硬件實(shí)時操作系統(tǒng)的設(shè)計與實(shí)現(xiàn)[J].計算機(jī)技術(shù)應(yīng)用,,2008(5):34-37.