《電子技術(shù)應用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設計應用 > 基于Nucleus Plus操作系統(tǒng)的多實例模式的實現(xiàn)
基于Nucleus Plus操作系統(tǒng)的多實例模式的實現(xiàn)
來源:電子技術(shù)應用2012年第9期
陳發(fā)堂,庹 勤
重慶郵電大學 重慶市移動通信技術(shù)重點實驗室,重慶400065
摘要: 在對TD_LTE射頻一致性測試儀表的開發(fā)中,針對同時建立多個承載的需求,引入了多實例管理模式。著重介紹了項目協(xié)議棧中基于Nucleus Plus操作系統(tǒng)多實例模式的實現(xiàn)機制。該機制中包含了系統(tǒng)的內(nèi)存池、隊列、任務等組件的初始化,其多實例管理模塊有效地完成了消息的路由,同時采用優(yōu)化后的分區(qū)內(nèi)存池對消息和各實例數(shù)據(jù)內(nèi)存進行分配和釋放,使內(nèi)存分配中產(chǎn)生的內(nèi)碎片降到最低。
中圖分類號: TN929
文獻標識碼: A
文章編號: 0258-7998(2012)09-0014-04
Implementation of multiple instances mode based on the Nucleus Plus operating system
Chen Fatang,Tuo Qin
Chongqing Key Laboratory of Mobile Communication, Chongqing University of Posts and Telecommunications, Chongqing 400065,China
Abstract: On the basis of the development of TD_LTE radio frequency consistency testing instrument, multiple instances mode is introduced in order to meet the establish of multiple radio bearers at the same time. This paper presents the realization mechanism of multiple instances pattern, which is based on the Nucleus Plus operating system. This mechanism includes system module initialization such as memory pool, queue, task and so on. The design of multiple instances management module accomplishes message routing. The memory of message and instances data are managed by optimized partition memory pool, which minimizes the inner fragment.
Key words : Nucleus Plus;multiple instances;partition memory pool

    TD_LTE技術(shù)標準從確定至今發(fā)展十分迅速。根據(jù)TD產(chǎn)業(yè)聯(lián)盟信息,TD_LTE產(chǎn)業(yè)鏈的發(fā)展得到了全球主流研發(fā)制造廠商的積極參與,而測試又是關系未來商用的關鍵點。其中測試儀表對測試結(jié)果的準確性和可信度影響很大,因此急需對測試儀在測試標準化、測試儀表的功能和性能等方面對測試儀進行改進[1]。

    本文在對TD_LTE射頻一致性測試儀表的開發(fā)中,需要建立多個承載來滿足同時發(fā)起的業(yè)務,因此引入了多實例模式。而如何保證消息正確到達對應的實例,解決各實例消息和數(shù)據(jù)的內(nèi)存區(qū)的分配和釋放是關鍵。在本設計過程中,結(jié)合了Nucleus Plus操作系統(tǒng)提供的內(nèi)存池、隊列、任務等組件功能,有效地解決了測試儀表中多實例模式的實現(xiàn)問題。
1 多實例模式
    TD_LTE射頻一致性測試儀表是依據(jù)3GPP標準、TD_LTE國家行業(yè)標準開發(fā)的TD_LTE基站和終端的測試儀表。在TD_LTE終端協(xié)議棧中,無線承載用于接入層向上提供的服務,包括了用于承載控制面信令的信令無線承載(SRB)和用于承載用戶面的數(shù)據(jù)業(yè)務的數(shù)據(jù)無線承載(DRB)。而默認承載和專用承載是非接入層向上提供的服務,以滿足不同業(yè)務的QoS。在實際測試中,可能同時激活建立多個承載去滿足不同的業(yè)務。非接入層與接入層承載的映射是根據(jù)承載建立情況動態(tài)配置的,并且是一一映射的關系。在設計過程中,建立的承載每個對應一個激活的實例,每個實例通過分配的唯一標識進行區(qū)分。根據(jù)LTE協(xié)議規(guī)范,在整個協(xié)議棧中同時存在多個實例的有ESM、RLC和PDCP三個子層[2]。
2 Nucleus Plus
    Nucleus Plus是美國源代碼操作系統(tǒng)商ATI公司推出的嵌入式系統(tǒng),以其實時響應、搶先、多任務以及源代碼開放特性獲得在通信、國防、自動化控制、智能家電等領域的廣泛應用。同時Nucleus Plus初始化過程中提供的Application_Initialize是對用戶開放的子程序,用戶可以根據(jù)自己的需要在其中初始化Nucleus Plus提供的組件,如任務、內(nèi)存池、隊列等[3]。系統(tǒng)為協(xié)議棧每個子層設置一個對應的任務,并為每個任務分配了一個優(yōu)先級,數(shù)值范圍從0~255對應由高到低的256個優(yōu)先級別。同時也為每個任務分配一個隊列,隊列是Nucleus Plus中承載消息的載體之一。隊列提供了傳輸多個消息的機制,消息以數(shù)值形式發(fā)送和接收。發(fā)送消息時要求將消息拷貝進隊列;接收消息時要求將消息從隊列拷貝出消息。而內(nèi)存池組件又提供了分區(qū)內(nèi)存池分配和動態(tài)內(nèi)存池分配兩大類,為用戶提供了靈活的內(nèi)存管理模塊。
3 多實例模式實現(xiàn)方案
3.1 初始化模塊

    (1)在Application_Initialize中首先完成內(nèi)存池組件的初始化。在系統(tǒng)設計時,共創(chuàng)建了5個分區(qū)內(nèi)存池和2個動態(tài)內(nèi)存池。動態(tài)內(nèi)存池用于系統(tǒng)任務堆棧和隊列的創(chuàng)建內(nèi)存分配。分區(qū)內(nèi)存池用于消息、各實例數(shù)據(jù)等存儲區(qū)的內(nèi)存分配,本文即著重介紹了對分區(qū)內(nèi)存池的初始化進行。
    Nucleus系統(tǒng)低級初始化中,由系統(tǒng)堆棧之后分配一個可用內(nèi)存,用于分區(qū)內(nèi)存池的第一個可用地址;然后把連續(xù)的大塊內(nèi)存按分區(qū)池進行管理,每個池中包含整數(shù)大小相同的小分區(qū),但不同池之間的分區(qū)大小不同。根據(jù)實際需要,定義了不同密度的小分區(qū),分別為52 B、140 B、352 B、2 000 B、60 000 B。每個池都分配一個PM_PCB(分區(qū)池控制塊)和一個分區(qū)的內(nèi)存區(qū)指針。PM_PCB中包含了每個分區(qū)池的詳細信息包括:分區(qū)內(nèi)存池的名稱、起始池地址、總分區(qū)大小、分區(qū)大小、分區(qū)中第1個可用地址等。每個小分區(qū)都有一個占8 B的頭,包含2個地址(下一個可用的分區(qū)地址和分區(qū)池地址)。分區(qū)池之間通過一個雙向鏈表進行鏈接,而池中單個分區(qū)通過單向鏈表進行鏈接,如圖1所示。在動態(tài)申請內(nèi)存時,系統(tǒng)首先進行判斷,根據(jù)申請內(nèi)存的大小選擇一個與其大小最接近的分區(qū),然后在相應的分區(qū)池中劃去第1個可用地址對應的小分區(qū)。將劃分出的分區(qū)中的下一個可用分區(qū)地址置為NULL,同時更改PM_PCB中相應的消息,例如下一個可用分區(qū)地址、可用分區(qū)數(shù)等。釋放內(nèi)存時根據(jù)該小分區(qū)中保存的分區(qū)池地址,將其放回它以前所屬的分區(qū)池,并作為第一個可用分區(qū)地址。采用這種方式能有效解決碎片問題,同時執(zhí)行時間是固定的[4]。

    (2)任務和隊列的創(chuàng)建:與分區(qū)池的原理類似。系統(tǒng)為相應的任務和隊列分別分配一個TCB(任務控制塊)和QCB(隊列控制塊),并且各任務之間和各個隊列之間都通過動態(tài)的雙向鏈表進行鏈接。每個TCB中包含了任務優(yōu)先級、任務狀態(tài)、任務處理函數(shù)入口地址等相關信息。QCB包含了隊列的最大消息數(shù)、消息起始地址、消息的結(jié)束地址等信息。接著對存在多實例模式的三個子層進行初始化,將三個子層分別定義為一個多實例進程,并為其分配一個唯一進程標識(processID),同時定義可能存在的最大實例數(shù)。每個進程和各實例的信息采用結(jié)構(gòu)體數(shù)組的形式,初始信息包括每個進程的狀態(tài)機入口函數(shù)、各實例的初始狀態(tài)等。
    至此,與多實例相關的初始化已完成,系統(tǒng)其他組件初始化這里不再敘述。初始化完成之后,就進入Nucleus操作系統(tǒng)的主控程序調(diào)度。
3.2 多實例管理模塊
    協(xié)議棧層間原語通信是通過Nucleus系統(tǒng)隊列來實現(xiàn)的。一旦主控程序檢測到某層任務被激活,系統(tǒng)將從任務棧中取出當前任務所包含的所有控制信息并跳轉(zhuǎn)至任務處理函數(shù)。在任務處理函數(shù)中,處理函數(shù)將從相應的任務隊列中取出消息。協(xié)議棧的開發(fā)也是基于有限狀態(tài)機的思想,每收到一條消息,就要進行消息處理。對于多實例模式,要進行消息的處理,就必須知道該消息所屬實例的狀態(tài)、該狀態(tài)下對應著這條消息的處理函數(shù)以及處理結(jié)束后躍遷到的狀態(tài)[5-6]。因此,在前期開發(fā)中定義了每個子層的狀態(tài)和接口原語,并為每條原語分配一個信令標識(signlingID),同時每個狀態(tài)對應一個消息分組。為保證消息傳遞到對應的進程實例中,為三個多實例模式的子層設計了一個多實例管理模塊,圖2為該模塊的處理流程。從隊列取出消息后,先從消息頭中獲得實例號InstID,將其作為入口函數(shù)的參數(shù)之一;然后調(diào)用多實例處理函數(shù)。在函數(shù)內(nèi)部,首先對入口函數(shù)中相應的InstID和processID進行有效性判斷,對于錯誤的InstID和processID直接轉(zhuǎn)入消息內(nèi)存釋放分支,并返回多實例處理不正常的標識。反之,通過有效的processID獲得相應進程的狀態(tài)入口函數(shù),有效的InstID獲得相應的實例狀態(tài)地址,接著轉(zhuǎn)入狀態(tài)機處理函數(shù)分支;最后對調(diào)用函數(shù)返回的狀態(tài)機處理標識進行判斷,對于正常標志,返回多實例處理正常的標識,否則返回多實例處理不正常的標識。這樣通過返回的處理流程標志,可容易地檢測和定位出錯的位置。

3.3 狀態(tài)機處理模塊
    以PDCP子層為例說明狀態(tài)機處理模塊的實現(xiàn)流程。如圖3所示,通過對入口函數(shù)中攜帶的狀態(tài)進行有效性驗證,如果沒有找到匹配的狀態(tài)就對該消息所占內(nèi)存進行釋放;反之,在匹配的狀態(tài)下通過消息頭指針獲得消息的signalID。同樣對signalID進行判斷,如果是無效消息標識,則轉(zhuǎn)入釋放消息內(nèi)存分支,并向多實例模塊返回狀態(tài)機處理不正常的標識;否則將消息轉(zhuǎn)入相應的消息處理函數(shù)。在消息處理函數(shù)中,各實例所用的數(shù)據(jù)緩存都通過分區(qū)內(nèi)存池進行申請,再由分區(qū)池對其內(nèi)存進行統(tǒng)一分配和釋放。消息處理完之后,返回當前實例的狀態(tài)賦給入口函數(shù)中的狀態(tài)指針,通過實例狀態(tài)指針的地址對其狀態(tài)進行更新。同樣,正常流程處理完之后,對消息所占內(nèi)存進行釋放,以免發(fā)生內(nèi)存泄露。最后向多實例模塊返回狀態(tài)機處理正常的標識。

 

 

3.4 多實例模式實現(xiàn)流程
    在Nucleus操作系統(tǒng)完成所有與目標硬件相關的低級初始化和相關組件的高級初始化子程序后,調(diào)用對用戶開放的子程序Application_Initialize模塊。在其中完成分區(qū)內(nèi)存池和動態(tài)內(nèi)存池的分配、為每個子層創(chuàng)建隊列和任務、三個多實例子層的相關信息的初始化以及其他系統(tǒng)組件的初始化。Application_Initialize完成后,Nucleus的初始化完畢,開始進入主控調(diào)度程序TCT_Schedule,圖4所示為多實例模式實現(xiàn)流程。 Nucleus主控程序采用等待檢測機制,不斷循環(huán)檢測當前執(zhí)行任務[7]。當向某個多實例子層的隊列發(fā)送消息時,將激活掛起在此隊列的任務。一旦主控程序檢測到某個多實例子層任務被激活,則轉(zhuǎn)入相應子層的任務處理函數(shù)。在任務處理函數(shù)中,處理函數(shù)將從相應的任務隊列中取出消息,然后將消息遞交給多實例管理模塊,通過一些異常情況的檢測后,調(diào)用相應多實例進程的狀態(tài)機處理函數(shù)。在狀態(tài)機處理函數(shù)中將消息遞交給當前實例狀態(tài)下的消息處理函數(shù)。在實現(xiàn)過程中,為了避免內(nèi)存泄露,每次處理完消息之后都及時回收所占內(nèi)存。同樣如果要釋放某個承載,對應的實例中所開辟的數(shù)據(jù)存儲區(qū)也要進行釋放,釋放后的內(nèi)存可被再次使用。處理完某個隊列的消息后,又將此隊列的任務掛起,并返回系統(tǒng)的循環(huán)檢測控制塊中。

    本文給出了項目協(xié)議棧中基于Nucleus操作系統(tǒng)的多實例模式實現(xiàn)機制。Nucleus為用戶提供了靈活的內(nèi)存管理機制,通過自定義池的大小和不同密度的分區(qū)大小,以滿足不同內(nèi)存的需要。同時增加了一個判斷模塊,將申請任務指定到適應它的最小分區(qū),從而有效地減小了分區(qū)內(nèi)碎片問題。本文設計的多實例管理模塊,能完成異常情況的處理,保證消息順利到達相應進程的狀態(tài)機處理函數(shù)。結(jié)合Nucleus提供的其他任務、隊列等組件功能,該設計方案能實現(xiàn)多實例模式的功能。
參考文獻
[1] 蔣遠.移動通信新技術(shù)—LTE快速發(fā)展[J].電信工程技術(shù)與標準化,2011,24(9):1-4.
[2] 沈嘉.3GPP長期演進(LTE)技術(shù)原理與系統(tǒng)設計[M].北京:人民郵電出版社,2008.
[3] 管武.基于ARM的嵌入式測控平臺的設計及實現(xiàn)[D].上海:上海大學,2008.
[4] 左利云,吳良海.基于內(nèi)存管理的多重查詢調(diào)度算法[J].計算機研究與發(fā)展,2010,20(7):121-124.
[5] 李小文,陳賢亮.TD-SCDMA第三代移動通信系統(tǒng)、信令及實現(xiàn)[M].北京:人民郵電出版社,2003.
[6] 宋茂強.通信軟件設計基礎(第2版)[M].北京:北京郵電大學出版社,2008.
[7] 魏振華.嵌入式實時操作系統(tǒng)Nucleus中線程控制部件的實現(xiàn)方法[J].計算機應用研究,2003,20(4):97-99.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。