統(tǒng)一優(yōu)先級(jí)軟/硬件任務(wù)協(xié)同調(diào)度下的任務(wù)問(wèn)通信機(jī)制
摘 要 在片上可重構(gòu)系統(tǒng)(Reconfigurable System 0n Programmable Chip)上,通過(guò)分析軟/硬件任務(wù)的特點(diǎn),擴(kuò)展μC/OS—II對(duì)硬件任務(wù)的支持,提出一種基于統(tǒng)一優(yōu)先級(jí)調(diào)度的分層的軟/硬件任務(wù)通信結(jié)構(gòu),并在此結(jié)構(gòu)上實(shí)現(xiàn)軟/硬件任務(wù)間的消息隊(duì)列通信。最后,通過(guò)模擬實(shí)驗(yàn)證明其有效性。
關(guān)鍵詞 可重構(gòu)系統(tǒng) μC/0S—II 消息隊(duì)列 軟/硬任務(wù)間通信
引 言
目前,在面向應(yīng)用的嵌入式體系結(jié)構(gòu)的研究中,為了能同時(shí)利用通用處理器(CPU)的靈活性和專用集成電路(ASIC)的高效性,一些研究者將系統(tǒng)中性能要求較高的模塊用FPGA等可編程器件實(shí)現(xiàn),與通用處理器集成可重構(gòu)片上系統(tǒng)。隨著現(xiàn)場(chǎng)可編程門陣列(FPGA)技術(shù)的.快速發(fā)展,可重構(gòu)技術(shù)開始受到研究者們?cè)絹?lái)越多的關(guān)注。但是可重構(gòu)計(jì)算的發(fā)展現(xiàn)狀是硬件遠(yuǎn)遠(yuǎn)領(lǐng)先于軟件,在可重構(gòu)計(jì)算中需要一個(gè)操作系統(tǒng)來(lái)管理新的可重構(gòu)硬件資源,屏蔽硬件細(xì)節(jié),并向開發(fā)人員提供高層次的編程模型。因此一些研究者將由可編程器件實(shí)現(xiàn)的任務(wù)模塊抽象為硬件任務(wù),并納入可重構(gòu)實(shí)時(shí)操作系統(tǒng)的統(tǒng)一管理,由可重構(gòu)實(shí)時(shí)操作系統(tǒng)負(fù)責(zé)任務(wù)調(diào)度、系統(tǒng)資源管理以及任務(wù)間的通信和同步等工作。
迄今,對(duì)可重構(gòu)系統(tǒng)任務(wù)間通信的研究取得了一些成果。例如,Miljan Vuletic等人在參考文獻(xiàn)中將純軟件任務(wù)環(huán)境的虛擬存儲(chǔ)訪問(wèn)向可重構(gòu)環(huán)境進(jìn)行了擴(kuò)展,以方便應(yīng)用編程和移植;Philip Garcia等人在參考文獻(xiàn)中對(duì)硬件任務(wù)接口進(jìn)行了研究,以實(shí)現(xiàn)對(duì)硬件任務(wù)的統(tǒng)一封裝。但這些研究?jī)H著眼于底層數(shù)據(jù)的交互,而沒(méi)有考慮通信中伴隨的上層任務(wù)間的同步和互斥邏輯;另外,張磊等人在參考文獻(xiàn)中對(duì)軟/硬件任務(wù)互斥進(jìn)行了研究,但沒(méi)有考慮大量數(shù)據(jù)跨越CPU和FPGA邊界的情況。因此,本文在這些研究成果的基礎(chǔ)上,結(jié)合底層實(shí)現(xiàn)和上層邏輯對(duì)基于統(tǒng)一優(yōu)先級(jí)調(diào)度的可重構(gòu)系統(tǒng)中軟/硬件任務(wù)間通信進(jìn)行探討。
1 可重構(gòu)系統(tǒng)中軟/硬件任務(wù)間通信分析
1.1 相關(guān)概念
硬件任務(wù),是指由可重構(gòu)硬件資源實(shí)現(xiàn)的功能模塊,相對(duì)于軟件任務(wù)具有以下特點(diǎn):
①硬件任務(wù)的數(shù)量受限于可重構(gòu)資源的數(shù)量;
②硬件任務(wù)可以實(shí)現(xiàn)微觀并行;
③硬件任務(wù)通過(guò)配置可重構(gòu)資源來(lái)建立,建立時(shí)間長(zhǎng),不可以忽略不計(jì);
④由于硬件任務(wù)在運(yùn)行的切換開銷較大,因此不必像軟件任務(wù)那樣進(jìn)行切換來(lái)分享CPU,而是可以獨(dú)享相應(yīng)的資源。
為了支持統(tǒng)一優(yōu)先級(jí)調(diào)度,軟/硬件任務(wù)可統(tǒng)一表示為Ti(ai,ei,di,ci,wi,hi)。其中,ai表示任務(wù)到達(dá)時(shí)間,ei表示任務(wù)最壞運(yùn)行時(shí)間,di表示任務(wù)完成截止時(shí)間,ci表示任務(wù)配置時(shí)間,wi和hi表示硬件任務(wù)的寬度和高度。由于硬件任務(wù)和軟件任務(wù)具有不同的特點(diǎn),從而可將其中任務(wù)間的通信和同步分為3類,即軟件任務(wù)(SWT)之間、軟/硬件任務(wù)之間以及硬件任務(wù)(HWT)之間。
1.2 分層的通信模型
對(duì)于任何一個(gè)操作系統(tǒng)來(lái)說(shuō),任務(wù)間的通信和同步都是必不可少的。系統(tǒng)中各任務(wù)的運(yùn)行不僅與任務(wù)的應(yīng)用邏輯相關(guān)還與系統(tǒng)的狀態(tài)相關(guān),而系統(tǒng)的狀態(tài)又由系統(tǒng)中運(yùn)行的多個(gè)任務(wù)決定,因此任務(wù)間的通信往往伴隨著同步和互斥的實(shí)現(xiàn)。為了便于任務(wù)間的通信,從傳統(tǒng)純軟件任務(wù)環(huán)境向可重構(gòu)環(huán)境的擴(kuò)展,將其分為邏輯機(jī)制和物理實(shí)現(xiàn)兩個(gè)層次。其中邏輯層主要負(fù)責(zé)多個(gè)任務(wù)間同步控制以及數(shù)據(jù)的保護(hù),與底層的數(shù)據(jù)交互無(wú)關(guān);而物理層則負(fù)責(zé)底層數(shù)據(jù)交互的實(shí)現(xiàn),即邏輯層和物理層以松耦合的方式組合,從而方便了系統(tǒng)的移植和通信機(jī)制的擴(kuò)展。
就邏輯機(jī)制層而言,在傳統(tǒng)的純軟件任務(wù)的環(huán)境中,運(yùn)行于CPU上的多個(gè)軟件任務(wù)具有宏觀上并行微觀上串行的特點(diǎn),操作系統(tǒng)在對(duì)這些任務(wù)的資源共享和數(shù)據(jù)交互的管理上已有信號(hào)量、互斥量、消息隊(duì)列等成熟的通信機(jī)制。但在可重構(gòu)系統(tǒng)中,軟件任務(wù)和硬件任務(wù)分別運(yùn)行于CPU和FPGA上,軟/硬件任務(wù)間及硬件任務(wù)間具有微觀并行性,因此需要擴(kuò)展這些通信機(jī)制對(duì)硬件任務(wù)的支持,以實(shí)現(xiàn)跨越CPU和FPGA邊界的軟/硬件任務(wù)間通信。這主要表現(xiàn)在針對(duì)不同類型的任務(wù)采取不同的后續(xù)措施上,同時(shí)向上層應(yīng)用提供統(tǒng)一的通信接口。
而對(duì)于物理層的實(shí)現(xiàn),考慮到分布式存儲(chǔ)中消息傳遞方式實(shí)現(xiàn)的通信開銷較大且實(shí)現(xiàn)復(fù)雜,采用圖1所示的系統(tǒng)結(jié)構(gòu)。CPU、FPGA以及系統(tǒng)主存掛接到總線上組成RSOPC。CPU除運(yùn)行一定的用戶軟件任務(wù)之外,還負(fù)責(zé)提供操作系統(tǒng)服務(wù),包括任務(wù)調(diào)度、資源管理、通信和同步管理等。操作系統(tǒng)通過(guò)統(tǒng)一的軟/硬件任務(wù)視圖——任務(wù)控制塊來(lái)對(duì)各個(gè)任務(wù)進(jìn)行管理。硬件任務(wù)(HWT)運(yùn)行于FPGA上,并由FPGA給每個(gè)硬件任務(wù)提供一個(gè)統(tǒng)一的硬件任務(wù)接口(HTI)供操作系統(tǒng)和硬件任務(wù)的交互,同時(shí)每個(gè)硬件任務(wù)在CPU上有代理任務(wù)與其對(duì)應(yīng)。而軟件任務(wù)的代碼和數(shù)據(jù)以及硬件任務(wù)的配置數(shù)據(jù)都存放于系統(tǒng)內(nèi)存中,CPU通過(guò)片上總線讀取存儲(chǔ)器中的硬件任務(wù)配置數(shù)據(jù)對(duì)FPGA進(jìn)行配置。
[!--empirenews.page--]
為了方便應(yīng)用編程和移植,系統(tǒng)主存和FPGA的局部存儲(chǔ)器統(tǒng)一編址,且該地址由基址和偏移兩部分組成。基址以頁(yè)為單位,而偏移不超過(guò)頁(yè)的大小,即設(shè)系統(tǒng)的地址空間為2n,頁(yè)大小為2k,則基址的取值范圍為[O,2n/2k],而偏移的取值范圍為[O,2k]。Main_Memory和Local_Memory分配有不同的基址,在編譯器的支持下,全局?jǐn)?shù)據(jù)和軟件任務(wù)的局部數(shù)據(jù)存放于Main_Memory,而硬件任務(wù)的局部數(shù)據(jù)存放于Local_Memory。在應(yīng)用層,任務(wù)可通過(guò)統(tǒng)一的全局地址訪問(wèn)數(shù)據(jù),在物理實(shí)現(xiàn)上硬件任務(wù)只能直接訪問(wèn)Local_Memory的數(shù)據(jù);而當(dāng)其數(shù)據(jù)需跨越CPU和FPGA邊界時(shí),則通過(guò)如消息隊(duì)列服務(wù)等固定的幾種方式向OS發(fā)出申請(qǐng),并由0S控制數(shù)據(jù)的遷移以及遷移前后被遷移數(shù)據(jù)地址在Main_Memory范圍和Local_Memmory范圍的映射,地址的映射主要通過(guò)設(shè)置HWTI中的地址寄存器來(lái)實(shí)現(xiàn),詳見2.2.2節(jié)。在這種設(shè)計(jì)前提下,進(jìn)行應(yīng)用設(shè)計(jì)時(shí)不必關(guān)心任務(wù)的實(shí)現(xiàn)方式。
2 可重構(gòu)系統(tǒng)中消息隊(duì)列通信機(jī)制
消息隊(duì)列是一種靈活的通信機(jī)制,它允許一個(gè)任務(wù)或中斷服務(wù)子程序向另一個(gè)任務(wù)發(fā)送以指針?lè)绞蕉x的變量或其他任務(wù)。
2.1 μC/OS—II簡(jiǎn)介
μC/OS—II是一個(gè)專門為計(jì)算機(jī)嵌入式應(yīng)用設(shè)計(jì)的源碼開放的可移植、可固化、多任務(wù)的占先式實(shí)時(shí)內(nèi)核,提供基于靜態(tài)優(yōu)先級(jí)的搶占式調(diào)度,且具有執(zhí)行效率高、占用空間小、實(shí)時(shí)性能優(yōu)良和可擴(kuò)展性強(qiáng)等特點(diǎn)。在任務(wù)通信方面,μC/OS—II提供了信號(hào)量、互斥量、消息隊(duì)列、消息郵箱和事件標(biāo)志組五種通信機(jī)制。
2.2 消息隊(duì)列通信實(shí)現(xiàn)的支持機(jī)制
2.2.1 硬件任務(wù)接口與硬件任務(wù)代理
軟/硬件任務(wù)問(wèn)消息隊(duì)列通信的邏輯框圖如圖2所示。軟/硬件任務(wù)分別通過(guò)自身和代理調(diào)用0SQ_Request向0S申請(qǐng)消息隊(duì)列服務(wù),使得在通信邏輯層OS可將軟/硬件任務(wù)同等看待。這方便了現(xiàn)有通信邏輯向可重構(gòu)系統(tǒng)的擴(kuò)展,同時(shí)OS提供的通信服務(wù)由軟件實(shí)現(xiàn)相對(duì)于硬件實(shí)現(xiàn)更具靈活性。
由圖2可見,硬件任務(wù)在申請(qǐng)消息隊(duì)列服務(wù)時(shí)需要硬件任務(wù)接口(HWTI)、硬件任務(wù)代理(HWTAgent)和中斷的支持。一次典型的消息申請(qǐng)消息服務(wù)的執(zhí)行過(guò)程可描述為:
①硬件任務(wù)將申請(qǐng)的服務(wù)類型及參數(shù)等放入HWTI中的相應(yīng)寄存器;
②硬件任務(wù)向CPU發(fā)送中斷;
③CPU響應(yīng)中斷,在中斷服務(wù)程序里喚醒硬件任務(wù)代理;
④硬件任務(wù)代理獲得調(diào)度,調(diào)用系統(tǒng)調(diào)用以取得消息,將消息在Local Memory的地址存入HWTI中的地址寄存器中并喚醒硬件任務(wù);
⑤硬件任務(wù)繼續(xù)執(zhí)行。
HWTI是用戶硬件任務(wù)和操作系統(tǒng)之間的橋梁,由一組寄存器組成,主要包括控制寄存器、狀態(tài)寄存器、參數(shù)寄存器、地址寄存器等。
HWTAgent本質(zhì)上是一個(gè)運(yùn)行于CPU上的軟件任務(wù),它充當(dāng)了OS與運(yùn)行于FPGA上的硬件任務(wù)的橋梁。HWTAgent的存在使得在通信邏輯層OS可以將硬件任務(wù)和軟件任務(wù)同等看待,從而方便了軟/硬件任務(wù)統(tǒng)一優(yōu)先級(jí)的調(diào)度,而HWTAgent對(duì)應(yīng)代碼段的執(zhí)行則實(shí)現(xiàn)通信物理層功能。HWTAgent,的設(shè)置同時(shí)也是出于這樣一種考慮:中斷服務(wù)程序應(yīng)執(zhí)行盡可能少的代碼,否則將影響系統(tǒng)的實(shí)時(shí)性。由于在消息隊(duì)列通信中需要設(shè)置HW—TI中的寄存器,同時(shí)可能涉及大量數(shù)據(jù)的遷移,若將這部分工作由中斷服務(wù)來(lái)完成,將會(huì)影響對(duì)后續(xù)高優(yōu)先級(jí)硬件任務(wù)請(qǐng)求的響應(yīng)。而設(shè)置HWTAgent后,中斷服務(wù)程序只需將請(qǐng)求類型放入TCB然后激活HWTAgent即可,而將其他的任務(wù)交由軟件任務(wù)HWTAgent來(lái)完成,從而能盡快響應(yīng)后續(xù)高優(yōu)先級(jí)硬件任務(wù)的請(qǐng)求。
2.2.2 硬件任務(wù)對(duì)全局?jǐn)?shù)據(jù)的訪問(wèn)
由前所述,數(shù)據(jù)訪問(wèn)的同步和保護(hù)等服務(wù)由運(yùn)行于CPU上的0S提供。當(dāng)硬件任務(wù)向OS申請(qǐng)消息時(shí),若分配得的消息存在于Main_Memory上,則HWTAgent會(huì)把消息從Main_Memory遷移到Local_Memory;而當(dāng)數(shù)據(jù)遷移完成后HWTAgent還需完成消息地址的轉(zhuǎn)換,即將硬件任務(wù)當(dāng)前可用的消息在Local_Memory中的地址存入HWTI中的地址寄存器中。由于Main_Memory和Local_Memory統(tǒng)一編址,0S控制著系統(tǒng)的存儲(chǔ)布局信息,因此地址的轉(zhuǎn)換是可以實(shí)現(xiàn)的。
2.3 可重構(gòu)系統(tǒng)中消息隊(duì)列通信的實(shí)現(xiàn)
針對(duì)消息隊(duì)列的操作主要有4種,即創(chuàng)建消息隊(duì)列、刪除消息隊(duì)列、申請(qǐng)消息和發(fā)送消息。這里規(guī)定消息的申請(qǐng)不能由中斷服務(wù)子程序調(diào)用,主要是因?yàn)橄⒌纳暾?qǐng)可能引起任務(wù)的阻塞,而消息隊(duì)列的創(chuàng)建和刪除只能由軟件任務(wù)調(diào)用。這也是可以理解的,因?yàn)橛布蝿?wù)一般作為大數(shù)據(jù)處理的加速器使用,而應(yīng)用的控制邏輯仍由軟件任務(wù)實(shí)現(xiàn)。
由1.2的敘述可知,需擴(kuò)展消息隊(duì)列通信對(duì)硬件任務(wù)的支持,同時(shí)為了維護(hù)邏輯層與物理層的松耦合性,有關(guān)數(shù)據(jù)遷移和地址轉(zhuǎn)換的部分均由HWTAgent完成。采取如下具體措施,以實(shí)現(xiàn)基于統(tǒng)一優(yōu)先級(jí)的軟/硬件任務(wù)間消息隊(duì)列通信:[!--empirenews.page--]
①在有關(guān)消息隊(duì)列的內(nèi)核部分增加一個(gè)查找被阻塞任務(wù)中最高優(yōu)先級(jí)的系統(tǒng)調(diào)用0SQFindHighPrio(),若消息隊(duì)列當(dāng)前有被阻塞任務(wù)則返回其中具有最高優(yōu)先級(jí)任務(wù)的優(yōu)先級(jí),否則返回一1;
②針對(duì)硬件任務(wù)服務(wù)申請(qǐng)的中斷服務(wù)程序只需調(diào)用OSAgentRdy()喚醒請(qǐng)求任務(wù)對(duì)應(yīng)的代理任務(wù),OSAgent—Rdy()定義為OSAgentRdy(INT8U reqType,INT8U tid,void*param),其中reqType為請(qǐng)求類型,tid為請(qǐng)求任務(wù)的id,param為請(qǐng)求附帶的參數(shù);
③HWTAgent獲得調(diào)用后根據(jù)情況執(zhí)行后續(xù)操作(針對(duì)因申請(qǐng)消息隊(duì)列服務(wù)而喚醒的部分),其執(zhí)行偽代碼如下(記當(dāng)前操作的消息隊(duì)列為Q,發(fā)出申請(qǐng)的任務(wù)為T,具有最高優(yōu)先級(jí)的被阻塞任務(wù)為T1):
以上執(zhí)行過(guò)程可描述如下:①判斷申請(qǐng)的服務(wù)類型;②若是發(fā)送消息請(qǐng)求則調(diào)用OSQFindHighPrio()查找被阻塞的最高優(yōu)先級(jí);③若Q中沒(méi)有被阻塞的任務(wù)或被阻塞任務(wù)中具有最高優(yōu)先級(jí)的任務(wù)是SWT,則需進(jìn)行數(shù)據(jù)遷移;④利用遷移后的消息地址調(diào)用OSQPost;⑤否則Q中具有最高優(yōu)先級(jí)的被阻塞任務(wù)為HWT,不需數(shù)據(jù)遷移而直接激活該任務(wù);⑥否則若是獲取消息請(qǐng)求則調(diào)用OSQPend()以獲取消息;⑦若獲得的消息存放于Main_Memory,則需進(jìn)行數(shù)據(jù)遷移;⑧由于獲得消息而激活發(fā)送請(qǐng)求的硬件任務(wù)T。
3 模擬實(shí)驗(yàn)及分析
本文針對(duì)由CPU和FPGA組成的可重構(gòu)系統(tǒng)提出了一種分層的軟/硬件任務(wù)間通信方式,并在其上實(shí)現(xiàn)了消息隊(duì)列通信??紤]到CPU具有更高的靈活性而FPGA具有更高的數(shù)據(jù)量處理效率,將硬件任務(wù)作為大數(shù)據(jù)處理的加速器使用,而通信的系統(tǒng)控制部分由運(yùn)行于CPU上的0S負(fù)責(zé)。這一實(shí)現(xiàn)具有以下優(yōu)點(diǎn):
①由軟件實(shí)現(xiàn)系統(tǒng)控制更具靈活性,分層的通信結(jié)構(gòu)使系統(tǒng)層次更加清晰,方便移植;
②向上層應(yīng)用程序員屏蔽軟硬件底層差異,使得應(yīng)用程序員可以將注意力集中于應(yīng)用邏輯的處理上;
③硬件任務(wù)代理的設(shè)置減輕了中斷服務(wù)程序的壓力,保證了對(duì)后續(xù)高優(yōu)先級(jí)硬件任務(wù)請(qǐng)求的響應(yīng)能力。
為了證明HWTAgent能保證后續(xù)高優(yōu)先級(jí)硬件任務(wù)的請(qǐng)求能得到及時(shí)響應(yīng),現(xiàn)對(duì)有HwTAgent和無(wú)HWTAgent兩種情況下同級(jí)中斷的響應(yīng)時(shí)間進(jìn)行比較。記消息長(zhǎng)度為L(zhǎng),使用和不使用HWTAgent時(shí)響應(yīng)時(shí)間分別為t1和t2,單位為CPU時(shí)鐘周期數(shù)。
圖3為使用與不使用HWAgent下對(duì)后續(xù)硬件任務(wù)請(qǐng)求的響應(yīng)時(shí)間隨消息長(zhǎng)度改變的情況。
由圖3可知,不采用HWTAgent時(shí)最壞情況下的響應(yīng)時(shí)間會(huì)隨消息長(zhǎng)度的增加而延長(zhǎng);而使用HWTAgent后,響應(yīng)時(shí)間為一固定值,且接近最好情況的響應(yīng)時(shí)間??梢姡琀WTAgent可有效地保證對(duì)后續(xù)高優(yōu)先級(jí)硬件任務(wù)請(qǐng)求的響應(yīng)能力。
結(jié) 語(yǔ)
本文對(duì)可重構(gòu)系統(tǒng)中任務(wù)間的通信機(jī)制進(jìn)行了探討,提出了一種分層的通信機(jī)制,方便了通信邏輯層的擴(kuò)展以及通信物理層的移植,并在其上實(shí)現(xiàn)了消息隊(duì)列通信,且用模擬實(shí)驗(yàn)證明了其有效性。