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