《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于Nucleus Plus操作系統的多實例模式的實現
基于Nucleus Plus操作系統的多實例模式的實現
來源:電子技術應用2012年第9期
陳發堂,庹 勤
重慶郵電大學 重慶市移動通信技術重點實驗室,重慶400065
摘要: 在對TD_LTE射頻一致性測試儀表的開發中,針對同時建立多個承載的需求,引入了多實例管理模式。著重介紹了項目協議棧中基于Nucleus Plus操作系統多實例模式的實現機制。該機制中包含了系統的內存池、隊列、任務等組件的初始化,其多實例管理模塊有效地完成了消息的路由,同時采用優化后的分區內存池對消息和各實例數據內存進行分配和釋放,使內存分配中產生的內碎片降到最低。
中圖分類號: 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技術標準從確定至今發展十分迅速。根據TD產業聯盟信息,TD_LTE產業鏈的發展得到了全球主流研發制造廠商的積極參與,而測試又是關系未來商用的關鍵點。其中測試儀表對測試結果的準確性和可信度影響很大,因此急需對測試儀在測試標準化、測試儀表的功能和性能等方面對測試儀進行改進[1]。

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

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

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

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

 

 

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

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

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲欧洲av一区二区| 欧美大片在线看免费观看| 欧美中文在线免费| 亚洲一区亚洲| 亚洲一区二区三区免费观看 | 久久精品国产综合| 香蕉久久夜色精品| 亚洲欧美日韩精品久久| 亚洲一区二区在线| 午夜精彩国产免费不卡不顿大片| 亚洲综合视频网| 午夜精品久久久久久久白皮肤| 欧美亚洲一区| 国产午夜久久| 国产午夜精品麻豆| 国色天香一区二区| 黄色av一区| 伊人激情综合| 亚洲高清在线观看| 亚洲激情在线激情| 亚洲国产人成综合网站| 亚洲国产精品久久人人爱蜜臀| 亚洲丶国产丶欧美一区二区三区| 亚洲第一黄色| 亚洲精品国产精品乱码不99| 一区二区三区日韩| 亚洲在线第一页| 欧美在线观看天堂一区二区三区| 久久激情综合| 亚洲精品色图| 亚洲一级电影| 久久成人精品| 久久综合一区二区| 欧美激情精品久久久久久免费印度 | 欧美成人一二三| 欧美成人精品1314www| 欧美激情第8页| 欧美三级午夜理伦三级中文幕| 国产精品久久77777| 国产日韩一区在线| 亚洲高清不卡av| 一区二区三区欧美成人| 欧美一级久久久久久久大片| 亚洲国产美国国产综合一区二区| 日韩一区二区精品在线观看| 午夜久久久久| 巨乳诱惑日韩免费av| 欧美连裤袜在线视频| 国产精品福利久久久| 国产亚洲精品美女| 亚洲精品久久久久| 午夜欧美大尺度福利影院在线看| 亚洲国产一区二区三区青草影视| 在线综合+亚洲+欧美中文字幕| 欧美尤物一区| 你懂的国产精品| 国产精品久久久久秋霞鲁丝 | 欧美午夜不卡视频| 国内精品免费午夜毛片| 日韩一区二区免费高清| 欧美一区二区视频在线观看| 99精品视频免费| 欧美在线网站| 欧美国产一区二区在线观看 | 欧美一区二区高清在线观看| 亚洲精品久久视频| 性欧美精品高清| 欧美黑人在线播放| 国产亚洲毛片在线| 亚洲开发第一视频在线播放| 欧美一区2区三区4区公司二百 | 欧美日韩一区二区三区| 国产自产v一区二区三区c| 日韩亚洲欧美一区二区三区| 欧美一区国产二区| 亚洲一级黄色片| 欧美+日本+国产+在线a∨观看| 国产精品久久久久久久久久三级| 亚洲大片精品永久免费| 亚洲综合第一| 一区二区久久| 欧美a级一区二区| 国产一区二区三区四区在线观看| aa级大片欧美三级| 亚洲欧洲另类国产综合| 久久成人免费视频| 国产精品啊v在线| 亚洲第一视频网站| 欧美在线黄色| 性亚洲最疯狂xxxx高清| 欧美日韩系列| 在线免费不卡视频| 欧美影视一区| 欧美亚洲综合网| 欧美日韩一区在线播放| 亚洲国产福利在线| 久久av红桃一区二区小说| 欧美亚洲尤物久久| 欧美午夜视频一区二区| 91久久久久久久久| 亚洲国产精品久久久久婷婷884| 欧美在线一区二区| 国产精品红桃| 99re国产精品| 9色porny自拍视频一区二区| 你懂的国产精品永久在线| 国语自产偷拍精品视频偷 | 欧美在线视频不卡| 午夜精品影院| 国产精品卡一卡二卡三| 日韩西西人体444www| 亚洲精品永久免费精品| 欧美成人免费全部| 尤物yw午夜国产精品视频明星| 欧美一级专区| 久久精品国产一区二区电影| 国产美女在线精品免费观看| 亚洲一区二区三区激情| 亚洲欧美高清| 国产精品青草综合久久久久99| 一本久久青青| 亚洲线精品一区二区三区八戒| 欧美日韩精品在线播放| 亚洲精品一区二区三区av| av成人福利| 欧美人与性动交cc0o| 最近看过的日韩成人| 亚洲毛片在线观看.| 欧美精品色综合| 亚洲日本欧美日韩高观看| 日韩视频永久免费观看| 欧美日韩精品一区二区天天拍小说| 亚洲精品久久久久久久久久久久| 亚洲日本va午夜在线影院| 欧美大片专区| 亚洲精品日韩在线观看| 一区二区欧美日韩| 欧美日韩情趣电影| 一区二区欧美在线| 欧美亚洲视频在线观看| 国产欧美日韩专区发布| 欧美一区二区视频在线| 久久夜色精品国产欧美乱| 在线成人中文字幕| 亚洲三级色网| 欧美日韩国产美女| 亚洲一区久久| 久久精品免费| 依依成人综合视频| 亚洲美女毛片| 欧美视频一区二| 亚洲欧美一区二区三区极速播放| 久久人人超碰| 91久久精品国产91久久性色| 一区二区欧美在线| 欧美色图天堂网| 午夜天堂精品久久久久| 久久综合伊人77777麻豆| 亚洲高清在线精品| 亚洲午夜视频在线观看| 国产日韩专区| 最新国产成人在线观看| 欧美伦理91i| 亚洲欧美国产毛片在线| 乱人伦精品视频在线观看| 亚洲肉体裸体xxxx137| 性做久久久久久免费观看欧美| 久久夜精品va视频免费观看| 亚洲精品国产精品乱码不99按摩| 正在播放亚洲一区| 国产精品网站在线观看| 亚洲国产日韩欧美综合久久| 欧美日韩性生活视频| 先锋资源久久| 欧美女人交a| 亚洲男人的天堂在线aⅴ视频| 老司机午夜精品视频在线观看| 亚洲精品1区2区| 午夜精品久久久久久久男人的天堂| 国内精品美女在线观看| 一本久久a久久免费精品不卡| 国产视频精品网| 亚洲巨乳在线| 国产日韩专区在线| 一区二区日本视频| 国产一区二区三区四区老人| 一本色道久久综合亚洲91| 狠狠操狠狠色综合网| 亚洲一区二区av电影| 精品动漫3d一区二区三区免费| 亚洲午夜日本在线观看| 在线播放不卡| 午夜视黄欧洲亚洲| 亚洲国产成人久久综合一区| 久久精品成人| a91a精品视频在线观看| 免费高清在线视频一区·| 亚洲免费一在线| 欧美日韩国产成人高清视频| 欧美中文在线观看国产|