摘 要:本文介紹了面向高性能數(shù)字信號處理器BWDSP100的操作系統(tǒng)內(nèi)核原型。該原型系統(tǒng)包括任務(wù)管理、通信管理、內(nèi)存管理、中斷管理、時(shí)鐘管理等5個(gè)主要功能,能夠?yàn)槎嗳蝿?wù)應(yīng)用提供良好的運(yùn)行環(huán)境,可有效提高DSP的使用效率。
關(guān)鍵詞:數(shù)字信號處理器;操作系統(tǒng)內(nèi)核;多任務(wù)
中圖分類號:TP368.12
BWDSP100是中國電子科技集團(tuán)公司第三十八研究所研制的一款32位高性能浮點(diǎn)通用數(shù)字信號處理器(DSP),是國家“核高基”科技重大專項(xiàng)研究成果。
BWDSP100采用超長指令字和單指令多數(shù)據(jù)的并行結(jié)構(gòu),處理器內(nèi)核工作在500MHz時(shí),運(yùn)算性能達(dá)到每秒鐘300億次浮點(diǎn)運(yùn)算操作(30GFLOPS)或每秒鐘80億次浮點(diǎn)乘法累加操作(8GMAC),特別適合于實(shí)時(shí)和大數(shù)據(jù)量的計(jì)算環(huán)境。
BWDSP100是單核DSP,現(xiàn)階段應(yīng)用時(shí)一般按照單任務(wù)方式運(yùn)行。然而,某些應(yīng)用場景可能會(huì)要求DSP同時(shí)執(zhí)行多個(gè)任務(wù),即多任務(wù)的應(yīng)用方式。在這種方式下,通常需要引入一個(gè)實(shí)時(shí)操作系統(tǒng)內(nèi)核,管理系統(tǒng)中同時(shí)存在的多個(gè)任務(wù),依據(jù)預(yù)先指定的策略或當(dāng)前系統(tǒng)的運(yùn)行狀況進(jìn)行調(diào)度,滿足多任務(wù)運(yùn)行環(huán)境的需求[1]。目前已有一些面向DSP的商用操作系統(tǒng)內(nèi)核,有代表性的包括TI的DSP/BIOS[2]、Freescale的SmartDSP[3]和ENEA的OSEck[4]。
本文討論了一種為BWDSP100設(shè)計(jì)的操作系統(tǒng)內(nèi)核原型。該原型包含任務(wù)管理、通信管理、內(nèi)存管理、中斷管理和時(shí)鐘管理等5個(gè)主要功能,允許用戶創(chuàng)建、刪除、運(yùn)行、掛起、調(diào)度多個(gè)任務(wù),提供了任務(wù)內(nèi)分配和釋放內(nèi)存、任務(wù)間通信和同步功能,提供了中斷服務(wù)程序的掛接和響應(yīng)能力,提供了運(yùn)行中系統(tǒng)時(shí)間維護(hù)的能力。該原型系統(tǒng)為BWDSP100提供了多任務(wù)運(yùn)行能力,提升了DSP的易用性,拓展了BWDSP100的應(yīng)用范圍。
1 設(shè)計(jì)實(shí)現(xiàn)
1.1 總體設(shè)計(jì)
該操作系統(tǒng)內(nèi)核原型采用模塊化和層次化的思想構(gòu)造。該原型自下而上分為三層:硬件抽象層、功能實(shí)現(xiàn)層和用戶接口層,如圖1所示。
硬件抽象層負(fù)責(zé)對BWDSP100硬件平臺(tái)進(jìn)行抽象,支持各個(gè)功能模塊的運(yùn)行,為兼容后續(xù)同系列其它型號處理器提供必要的支撐條件。功能實(shí)現(xiàn)層負(fù)責(zé)完成操作系統(tǒng)內(nèi)核提供的各項(xiàng)功能的實(shí)現(xiàn),在該原型系統(tǒng)中主要由5個(gè)功能模塊組成,分別實(shí)現(xiàn)任務(wù)管理、通信管理、內(nèi)存管理、中斷管理和時(shí)鐘管理功能。用戶接口層對功能實(shí)現(xiàn)層進(jìn)行封裝,向用戶提供編程接口。
該操作系統(tǒng)內(nèi)核原型以源代碼形式發(fā)布給用戶使用。用戶利用該原型系統(tǒng)提供的編程接口編寫程序。用戶需要使用的內(nèi)核資源及其配置情況寫在Cfg.h文件中。任務(wù)的劃分方案、內(nèi)核數(shù)據(jù)劃分方案、用戶數(shù)據(jù)的劃分方案均依據(jù)此文件確定。Cfg.h與用戶應(yīng)用程序源碼、操作系統(tǒng)內(nèi)核源碼一起在Makefile和Linkcmd文件的指導(dǎo)下編譯和鏈接,產(chǎn)生可執(zhí)行的系統(tǒng)鏡像文件。系統(tǒng)鏡像文件可以通過BWDSP100的集成開發(fā)環(huán)境下載至硬件平臺(tái)上運(yùn)行和調(diào)試。操作系統(tǒng)內(nèi)核原型的應(yīng)用過程如圖2所示。
該原型系統(tǒng)分為三個(gè)狀態(tài):初始化狀態(tài)、多任務(wù)運(yùn)行狀態(tài)和出錯(cuò)狀態(tài),如圖3所示。操作系統(tǒng)內(nèi)核原型啟動(dòng)時(shí)進(jìn)入初始化狀態(tài),完成對硬件的初始化、各個(gè)功能模塊的初始化、初始任務(wù)的建立、初始資源的分配等工作。初始化完畢后進(jìn)入多任務(wù)運(yùn)行狀態(tài),在該狀態(tài)下操作系統(tǒng)內(nèi)核正常工作,進(jìn)行諸如任務(wù)調(diào)度、中斷管理、內(nèi)存分配和釋放、時(shí)鐘管理等各種內(nèi)核活動(dòng),用戶應(yīng)用程序在此狀態(tài)下正常執(zhí)行。無論操作系統(tǒng)內(nèi)核處于何種狀態(tài),如果發(fā)生致命錯(cuò)誤,則進(jìn)入出錯(cuò)狀態(tài)。在出錯(cuò)狀態(tài)下,系統(tǒng)停機(jī)。
1.2 任務(wù)管理功能設(shè)計(jì)
任務(wù)管理是多任務(wù)操作系統(tǒng)的基本能力。程序運(yùn)行的實(shí)例抽象成任務(wù)。為完成一項(xiàng)指定的應(yīng)用,可能需要一個(gè)或多個(gè)任務(wù)協(xié)同工作。在該原型系統(tǒng)中,每個(gè)任務(wù)擁有一個(gè)固定大小的任務(wù)描述符作為唯一的標(biāo)識,在該描述符中標(biāo)記了任務(wù)號、屬性、當(dāng)前任務(wù)執(zhí)行狀態(tài)等內(nèi)容。操作系統(tǒng)內(nèi)核依據(jù)描述符的內(nèi)容對任務(wù)進(jìn)行管理和調(diào)度。該原型系統(tǒng)中采用鏈表結(jié)構(gòu)管理所有的任務(wù)描述符。
該原型系統(tǒng)采用三狀態(tài)的任務(wù)狀態(tài)設(shè)計(jì),其狀態(tài)轉(zhuǎn)換圖如圖4所示。
用戶程序可以創(chuàng)建新任務(wù)。新任務(wù)進(jìn)入就緒狀態(tài),之后由調(diào)度系統(tǒng)負(fù)責(zé)將其分派到DSP上執(zhí)行。正在執(zhí)行的任務(wù)處于運(yùn)行狀態(tài)。在運(yùn)行中,任務(wù)可以因執(zhí)行完畢主動(dòng)退出,進(jìn)而結(jié)束該任務(wù)的執(zhí)行,并刪除相關(guān)的任務(wù)描述符結(jié)構(gòu),釋放占用的存儲(chǔ)空間。正在執(zhí)行的任務(wù)可以主動(dòng)放棄DSP,或者被其它更高優(yōu)先級的任務(wù)搶占(如果該任務(wù)允許被搶占)而轉(zhuǎn)入休眠狀態(tài)。處于就緒狀態(tài)的任務(wù)也可以被掛起而轉(zhuǎn)入休眠狀態(tài)。處于休眠狀態(tài)的任務(wù)可以由中斷、調(diào)度等機(jī)制將其恢復(fù)至休眠前的狀態(tài)。三狀態(tài)的設(shè)計(jì)可以滿足應(yīng)用的需求。
該原型系統(tǒng)中定義了16個(gè)任務(wù)優(yōu)先級,允許多個(gè)任務(wù)分配相同的優(yōu)先級。在調(diào)度時(shí),不同優(yōu)先級的任務(wù)按照搶占方式調(diào)度,即高優(yōu)先級任務(wù)可以立即搶占低優(yōu)先級任務(wù)執(zhí)行;對于同一優(yōu)先級的任務(wù),按照時(shí)間片輪轉(zhuǎn)方式調(diào)度。這種調(diào)度設(shè)計(jì)可以滿足大部分應(yīng)用需求。
1.3 通信管理功能設(shè)計(jì)
任務(wù)間通信和同步是多任務(wù)操作系統(tǒng)的基本功能,是多個(gè)任務(wù)協(xié)同工作的必要條件。該原型系統(tǒng)提供了二進(jìn)制信號量機(jī)制和消息隊(duì)列機(jī)制。
二進(jìn)制信號量用于提供任務(wù)間的同步能力。二進(jìn)制信號量又稱為互斥鎖,僅包含鎖定和空閑兩種狀態(tài)。二進(jìn)制信號量由用戶程序創(chuàng)建,在任務(wù)中執(zhí)行請求和釋放操作。在任意時(shí)刻,一個(gè)二進(jìn)制信號量至多有一個(gè)持有者。請求和釋放信號量操作在關(guān)中斷條件下執(zhí)行,保證操作的原子性。
該原型系統(tǒng)提供阻塞和非阻塞兩種獲取二進(jìn)制信號量的方式。在阻塞式中,如果信號量處于鎖定狀態(tài),當(dāng)前任務(wù)將進(jìn)入休眠狀態(tài),并且掛載到該信號量的等待隊(duì)列中。使用非阻塞方式時(shí),如果信號量處于鎖定狀態(tài),用戶接口會(huì)返回一個(gè)錯(cuò)誤碼,任務(wù)可以繼續(xù)執(zhí)行。
當(dāng)信號量釋放時(shí),如果等待隊(duì)列非空,操作系統(tǒng)內(nèi)核將隊(duì)列中的任務(wù)喚醒并加入到就緒隊(duì)列中執(zhí)行。為避免死鎖,該原型系統(tǒng)采用優(yōu)先級天花板協(xié)議,即任務(wù)按照優(yōu)先級高低順序獲得信號量,并且信號量的持有者總是處于信號量的置頂優(yōu)先級運(yùn)行。
消息隊(duì)列用于提供任務(wù)間數(shù)據(jù)傳遞的能力。該原型系統(tǒng)在內(nèi)核空間中維護(hù)一個(gè)消息的鏈表結(jié)構(gòu)。發(fā)送任務(wù)調(diào)用發(fā)消息接口將消息傳遞給消息隊(duì)列,內(nèi)核負(fù)責(zé)將新消息添加至消息隊(duì)列的隊(duì)尾。接收任務(wù)調(diào)用收消息接口從消息隊(duì)列中按照消息的類型字段取出消息。當(dāng)一個(gè)任務(wù)向不同的任務(wù)發(fā)送相同內(nèi)容的消息時(shí),只需發(fā)送一個(gè)消息,并且將該消息的訪問計(jì)數(shù)字段置為重復(fù)次數(shù)。每當(dāng)有任務(wù)取此消息時(shí),訪問計(jì)數(shù)字段減1。當(dāng)訪問計(jì)數(shù)字段減至0時(shí),該消息將從消息隊(duì)列中移除。
對于發(fā)消息操作,僅提供非阻塞式接口。發(fā)送者在發(fā)消息時(shí),如果消息隊(duì)列已滿,則返回錯(cuò)誤信息,發(fā)送者任務(wù)繼續(xù)執(zhí)行。對于收消息操作,提供阻塞式和非阻塞式兩種接口。接收者在接收操作執(zhí)行時(shí),若有待取的消息存儲(chǔ)在消息隊(duì)列上,則接收者將立即獲得消息;若當(dāng)前沒有待取消息存儲(chǔ)在消息隊(duì)列上,那么接收者可以選擇阻塞或者不阻塞。在使用阻塞接口的情況下,接收者被插入到消息隊(duì)列的等待隊(duì)列上之后陷入休眠狀態(tài),等待下一個(gè)消息的到來;在使用非阻塞接口的情況下,接收者任務(wù)在獲得一個(gè)錯(cuò)誤碼后可以繼續(xù)執(zhí)行。
1.4 內(nèi)存管理能力設(shè)計(jì)
操作系統(tǒng)內(nèi)核需要為用戶程序提供分配和釋放內(nèi)存塊的能力。BWDSP100采用指令存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器獨(dú)立的哈佛結(jié)構(gòu)。該原型系統(tǒng)中僅管理內(nèi)部數(shù)據(jù)存儲(chǔ)器。內(nèi)部數(shù)據(jù)存儲(chǔ)器劃分為四部分:靜態(tài)數(shù)據(jù)區(qū)、內(nèi)核數(shù)據(jù)區(qū)、用戶棧數(shù)據(jù)區(qū)、用戶堆數(shù)據(jù)區(qū),如圖5所示。
靜態(tài)數(shù)據(jù)區(qū)用于存放全局?jǐn)?shù)據(jù)和靜態(tài)數(shù)據(jù)。內(nèi)核數(shù)據(jù)區(qū)存放操作系統(tǒng)內(nèi)核運(yùn)行時(shí)所需的全部數(shù)據(jù)結(jié)構(gòu),包括任務(wù)描述符、信號量、消息隊(duì)列等。用戶棧管理區(qū)為每個(gè)用戶任務(wù)劃分可配置大小的用戶棧,為用戶應(yīng)用程序的執(zhí)行提供支持。用戶堆管理區(qū)為用戶任務(wù)使用大量數(shù)據(jù)存儲(chǔ)空間提供支持,用戶任務(wù)可以調(diào)用該原型系統(tǒng)提供的分配函數(shù)接口從用戶堆管理區(qū)中獲取內(nèi)存塊,使用釋放接口將已獲得的內(nèi)存塊返回到用戶堆管理區(qū)中。
1.5 中斷管理能力設(shè)計(jì)
中斷是操作系統(tǒng)內(nèi)核接收外部信息的重要途徑。中斷管理器模塊負(fù)責(zé)封裝底層的設(shè)備接口操作,向操作系統(tǒng)其他部分提供與體系結(jié)構(gòu)無關(guān)的中斷抽象接口,允許用戶編寫中斷服務(wù)程序掛接到中斷上。中斷管理器提供統(tǒng)一的中斷向量表,表中記錄每個(gè)中斷向量所對應(yīng)的中斷處理例程。中斷管理器允許發(fā)生中斷嵌套。該原型系統(tǒng)維護(hù)統(tǒng)一的中斷處理?xiàng)?,所有的中斷處理操作在同一個(gè)中斷處理?xiàng)V羞M(jìn)行。
1.6 時(shí)鐘管理能力設(shè)計(jì)
操作系統(tǒng)內(nèi)核的正常運(yùn)行需要系統(tǒng)時(shí)間的支持。該原型系統(tǒng)提供時(shí)鐘管理模塊用于維護(hù)唯一的系統(tǒng)時(shí)間。系統(tǒng)時(shí)間以滴答為單位記錄,表示從開機(jī)以來到現(xiàn)在的相對時(shí)間。時(shí)鐘的更新由定時(shí)器中斷服務(wù)程序負(fù)責(zé),在操作系統(tǒng)內(nèi)核初始化時(shí)配置硬件定時(shí)器按照固定時(shí)間間隔發(fā)出中斷,每一個(gè)定時(shí)器中斷的到來都會(huì)引起時(shí)鐘滴答更新。內(nèi)核和用戶任務(wù)均可以讀取當(dāng)前時(shí)間計(jì)數(shù)。利用時(shí)鐘管理能力可以實(shí)現(xiàn)時(shí)間片輪轉(zhuǎn)調(diào)度和性能分析等功能。
2 實(shí)驗(yàn)和結(jié)果分析
通過操作系統(tǒng)內(nèi)核原型的引入,BWDSP100具備了多任務(wù)處理的能力。通過一些實(shí)驗(yàn)測試該原型系統(tǒng)的能力。實(shí)驗(yàn)時(shí)編寫用戶應(yīng)用程序,將應(yīng)用程序與操作系統(tǒng)內(nèi)核源碼在命令行下利用BWDSP100的開發(fā)工具進(jìn)行編譯和鏈接,生成可執(zhí)行的系統(tǒng)鏡像文件,在集成開發(fā)環(huán)境中加載和執(zhí)行該鏡像文件。在內(nèi)核和用戶應(yīng)用程序中調(diào)用打印函數(shù)輸出當(dāng)前執(zhí)行的信息,這些信息顯示在集成開發(fā)環(huán)境的輸出窗口中。
2.1 時(shí)間片輪轉(zhuǎn)調(diào)度實(shí)驗(yàn)
在該實(shí)驗(yàn)中,創(chuàng)建3個(gè)任務(wù)Task1、Task2和Task3,這三個(gè)任務(wù)處于同一優(yōu)先級,每個(gè)任務(wù)執(zhí)行一個(gè)無限循環(huán),在循環(huán)體中打印文本。這三個(gè)任務(wù)按照時(shí)間片輪轉(zhuǎn)方式調(diào)度。這個(gè)實(shí)驗(yàn)可以驗(yàn)證中斷管理、時(shí)間管理、任務(wù)管理和內(nèi)存管理能力。該實(shí)驗(yàn)執(zhí)行后,集成開發(fā)環(huán)境的輸出窗口如圖6所示。
從實(shí)驗(yàn)結(jié)果中可以看出,操作系統(tǒng)內(nèi)核可以按照時(shí)間片輪轉(zhuǎn)的方式依次調(diào)度3個(gè)任務(wù)運(yùn)行,表明中斷管理、時(shí)間管理、任務(wù)管理和內(nèi)存管理能力均可以正常工作。
2.2 信號量管理實(shí)驗(yàn)
在該實(shí)驗(yàn)中,創(chuàng)建2個(gè)信號量和2個(gè)用戶任務(wù),任務(wù)TA1先獲取信號量SM1,在不釋放的情況下,調(diào)度任務(wù)TA2執(zhí)行,任務(wù)TA2嘗試獲取信號量SM1。獲取信號量均采用非阻塞方式。該實(shí)驗(yàn)可以驗(yàn)證任務(wù)管理和通信管理能力。該實(shí)驗(yàn)執(zhí)行后,集成開發(fā)環(huán)境的輸出窗口如圖7所示。
從實(shí)驗(yàn)結(jié)果可以看出,在任務(wù)TA1持有信號量的情況下,操作系統(tǒng)內(nèi)核組織其他任務(wù)獲取同一信號量,表明該原型系統(tǒng)提供的信號量機(jī)制的正確性。
2.3 消息隊(duì)列管理實(shí)驗(yàn)
在該實(shí)驗(yàn)中,創(chuàng)建2個(gè)任務(wù)TA1和TA2,TA1發(fā)送消息,TA2接收消息,檢查TA2收到的消息與TA1發(fā)送的消息是否一致。該實(shí)驗(yàn)可以驗(yàn)證任務(wù)管理能力和通信管理能力。該實(shí)驗(yàn)執(zhí)行后,集成開發(fā)環(huán)境的輸出窗口如圖8所示。
從實(shí)驗(yàn)結(jié)果可以看出,TA1任務(wù)發(fā)送了內(nèi)容為“USTC”的消息,TA2獲取的消息內(nèi)容與TA1發(fā)送的內(nèi)容完全一致,表明該原型系統(tǒng)提供的消息隊(duì)列機(jī)制的正確性。
以上實(shí)驗(yàn)表明,該原型系統(tǒng)的功能基本正確,能夠?yàn)锽WDSP100和用戶應(yīng)用程序提供多任務(wù)運(yùn)行能力。
3 結(jié)束語
本文介紹的操作系統(tǒng)內(nèi)核原型針對BWDSP100設(shè)計(jì),包含了多任務(wù)操作系統(tǒng)的基本功能,能夠?yàn)橛脩舫绦蛱峁┒嗳蝿?wù)運(yùn)行環(huán)境。該原型的功能基本正確,效果良好。未來將開展多核化和優(yōu)化改進(jìn)工作,在博微系列DSP產(chǎn)品中得到進(jìn)一步的應(yīng)用。
參考文獻(xiàn):
[1]Tanenbaum A.S(著),陳向群(譯).現(xiàn)代操作系統(tǒng)(原書第三版)[M].北京:機(jī)械工業(yè)出版社,2009.
[2]TI SYS/BIOS Real-time Operating System v6.x User’s Guide, TI Inc.,2010.
[3]The Architectural Advantages of OSE in Telecom, Enea Inc.,2010.
[4]SmartDSP OS Fact Sheet,F(xiàn)reescale Inc.,2004.
作者簡介:馬宏星,工程師,主要研究方向:導(dǎo)航、SoC芯片設(shè)計(jì)、嵌入式軟件設(shè)計(jì);耿銳,高級工程師,主要研究方向:數(shù)字信號處理器、基礎(chǔ)軟件。
作者單位:中國電子科技集團(tuán)公司第38研究所,合肥 230031