《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > Nucleus操作系統內存池模塊移植的研究與應用
Nucleus操作系統內存池模塊移植的研究與應用
來源:電子技術應用2012年第11期
陳安地,李小文
重慶郵電大學 計算機科學與技術學院,重慶400065
摘要: 基于對Nucleus操作系統內核的研究與分析,在三星ARM1176JZF芯片S3C6410上將Nucleus內存池模塊移植并合理應用。根據TD-LTE無線綜合測試儀中的設計要求,介紹了Nucleus內存池的靜態分配和動態分配方式,并根據不同應用環境采用對應的內存池分配優化措施,在實現操作系統基本內存管理功能的同時,滿足了TD-LTE無線綜合測試儀對系統內存資源分配和調度時間的設計要求。
中圖分類號: TP319
文獻標識碼: A
文章編號: 0258-7998(2012)11-0034-03
Research and application of the memory pool module of Nucleus in transplant process
Chen Andi,Li Xiaowen
Academe of Computer Science and Technique, Chongqing University of Posts and Telecommunications,Chongqing 400065,China
Abstract: Based on the research and analysis of kernel of Nucleus operating system, this paper transplants and applies the module of memory pool of Nucleus operating system effectively on S3C6410. According to the requirements of TD-LTE wireless comprehensive tester, the static allocation and dynamic allocation of memory pool are detailed and optimized on the basis of specific environment. The base function of memory management of operating system are realized as well as the requirements of TD-LTE wireless comprehensive tester in resource allocation of memory and scheduling of time are satisfied.
Key words : Nucleus operating system;memory pool;static allocation;dynamic allocation

    內存池方式的內存管理是一種可計量、高效的內存管理方式,它具有減少內存碎片、提高分配速度、防止內存泄漏等優勢[1]。目前在國內基于內核的內存池大多基于Linux內核[2]。本文主要基于Nucleus操作系統內核來介紹內存池靜態與動態分配在TD-LTE無線綜合測試儀移植中的研究與應用,闡述了在不同分配方式中的內存池結構、分配算法以及適用環境。

1 靜態方式分配內存池
    靜態內存池管理方式中內存池分為池(pool)和塊(partition)。之所以稱之為靜態管理方式,是因為在使用過程中塊的大小是固定的(即在創建過程中塊大小是確定的)。靜態內存池的整體結構如圖1所示,池和塊都有自己的頭,池是由雙向循環鏈表鏈接而成,塊是由單向鏈表鏈接而成,每一塊的頭中還包含了自己屬于哪一個池的屬性。可用塊的信息以單向鏈表的形式存儲于池頭中,并且可用塊與已經分配的塊的個數都在池頭中有記錄。

1.1 靜態內存池的創建
    池頭中的主要參數包括內存池控制塊指針、內存池名(只取8個字符)、起始地址、內存池總大?。ㄗ止潪閱挝唬?、內存池分塊大小(字節為單位)、掛起方式(先進先出或按優先級)等,圖2是仿真器上運行過程中靜態內存池結構體截圖。
    對圖2中兩個結構體鏈表參數說明如下:(1)pm_created:當前已經創建的內存池,采用雙向循環鏈表連接,插入方式是在最后一個節點和首節點間填充;(2)pm_available_list:存儲當前還可用partition的鏈表,結構與塊的頭部結構header_ptr相同(PM_OVERHEAD=8 B小塊的頭header_ptr:單向鏈表,內部有指向下一小塊的指針和所屬大塊的控制塊地址)。

    在Nucleus內核中,內存池的創建主要由函數PMC_Create_Partition_Pool負責,創建流程如下:調用過程中首先進行參數合法性檢測;然后在池頭(控制塊)中寫入各個參數,創建鏈表;之后是一個重要的循環體,負責初始化partition鏈表,分配所有的partition,每個partition的大小在分配時需要在函數傳入參數值的基礎上加8 B,用來存儲header_ptr;最后在內存池線程保護后將新的內存池插入內存池鏈表并計數。
1.2 靜態內存池的分配
    在TD-LTE無線綜合測試儀中分配前由協議棧提供所需要分配的大小,這里主要是放置協議內部配置信息與層間交互原語。由于這些信息的大小固定,只是有幾種不同大小的固定模式,所以很適合采用靜態分配的方式來分配內存,只需要根據數據大小選擇密度合適的內存池即可。移植過程中使用了不同大小的partition構建不同密度的內存池,因此,可根據申請partition的大小來判定用那種密度的內存池,以減少內部碎片的大小。這種方法可以有效避免空間浪費[3],同時又可提高分配效率。
    在Nucleus內核中靜態內存池的分配主要由函數PMC_Allocate_Partition負責,其主要參數為內存池指針(指向調用的內存指針,不能為NULL,設置為可用內存地址即可)、分配大小和掛起標志位。函數中主要判斷內存池指針是否合法、內存池與partition是否匹配、指向調用的內存指針是否合法、任務掛起標志位是否有效。其分配流程如圖3所示。過程如下:調用內核函數TCT_System_Protect(TCT_Protect)保護內存池同步互斥通道。判斷是否還有可用partition,若有,則將可用數量減1、分配數量加1并更新pm_available_list以及將指向調用內存指針賦值為當前分配的partition地址(partition地址要+8 B刪去頭);若沒有,則將任務掛起直至有可用Partition才恢復。最后解保護并返回。

1.3 靜態內存池的釋放
    系統采用PMC_Deallocate_Partition函數來完成釋放。流程如下:調用內核函數保護內存池同步互斥通道。判斷是否有等待任務,若有,則分配給這個任務當前partition,再判斷當前任務是否允許被搶占,允許就調用TCT_Control_To_System搶占當前任務、激活等待內存的任務;若沒有,則等待任務,將當前partition重新接入到可用partition列表的頭部。最后調用TCT_Unprotect解保護。
2 動態方式分配內存池
    動態內存池也分為池和塊兩個部分,動態池直接由雙向循環鏈表實現連接。內部塊是動態分配的,由最小可分配空間來限制塊的最小值。與靜態分配不同,動態分配塊也由雙向循環鏈表來鏈接。創建時的初始結構為兩個塊,在申請時動態分割。圖4是仿真器上運行過程中動態內存池與塊的結構體截圖。

    池控制塊結構中dm_memory_list與塊頭結構體相同,池通過dm_memory_list來完成塊搜索;塊頭結構中dm_memory_pool與大塊頭結構相同,通過它來比配大塊。
2.1 動態內存池的創建
    初始化完成時的內存結構:初始化創建完成時內存池中有2個塊,1個大小為總大小減去32 B,包含自己的頭DM_OVERHEAD=16 B,設置為可以狀態free=‘0x01’;1個大小為16 B,只有自己的頭,沒有空間,設置為不可以狀態free=‘0x00’。因此,此時的可用空間為除去池的控制塊外的總大小減去32 B。初始化結構如圖5所示(沒有將池控制塊表示出來)。

 

 

    創建時,首先為控制塊指針賦值,內存池大小與最小分區大小進行字對齊校正;判斷控制塊指針、起始地址、最小分配空間、掛起標志是否合法。創建過程如下:初始化控制塊中的各個參數,并按圖5初始化小塊、創建小塊雙向循環鏈表,與靜態分配相同需要先進行線程保護再加入到池動態內存池鏈表。
2.2 動態內存池的申請
    動態申請主要用于操作系統內模塊(如任務、隊列等)的堆棧分配與模塊占用空間的分配。由于在TD-LTE無線綜合測試儀中這些分配的空間大小浮動不定,因此需要使用動態分配內存。Nucleus中動態分配采用首次匹配原則,每一次申請內存時動態分配申請大小加16 B(這個16 B的頭對應剩下的可用空間)的內存池空間,并把分配過的部分設置為不可用狀態free=‘0x00’。
    負責實現的函數是DMC_Allocate_Memory。首先進行各種參數的合法性檢測,然后將分配空間size小于最小分配空間的分配空間大小賦值為最小空間,對size進行字對齊處理,調用線程保護后采用首先匹配法來找適用空間,即:在循環體中先判斷free標志,是空閑塊(free=‘0x01’),則算出減去本次分配的頭后所剩的空間,當此空間大于本次請求size時進行分配,小于時則移動到下一個塊;若不是空閑塊,則直接把剩余空間設置為0進行后面小于size時移動到下一個塊的判斷。注意:這里用到了控制塊中的dm_search_ptr屬性(結構與小塊的頭相同),該屬性用于記錄開始匹配的起始位置,作為判斷循環體結束的條件之一,如果循環到此處,就表示沒有找到可分配空間。圖6是動態分配的流程圖。

    循環結束后判斷是否找到可用于分配的塊,若找到則進行是否需要分割該可用塊的判斷。條件是這個可用塊的大小大于或等于本次所需空間size+頭大小+最小分配空間的值,若滿足此條件則分割出一個新塊并對其加頭初始化,再計算出剩余可用空間;不滿足此條件則直接計算剩余可用空間。分配的空間標志為非空閑后,把所分配空間的地址賦給指向調用的內存指針(注意去頭)。為提高效率,還需要進行一個簡單處理,即判斷如果在搜索塊時一次性匹配成功,則將dm_search_ptr移向下一個塊。
    如果沒有找到可用塊則將任務掛起等待,沒有采用掛起模式則直接返回NULL給指向調用的內存指針,最后調用TCT_Unprotect解保護。圖7是分配第一塊內存后動態內存池的結構。

2.3 動態內存池的釋放
    釋放過程與靜態類似,需要注意的是,如果相鄰塊有空閑塊需要合并,則合并后把dm_search_ptr指向當前合并的空閑塊。
    動態分配內存的算法復雜度要高于靜態分配,從時間復雜度來看,靜態分配是O(1)、動態是O(n)。但是動態分配的內存利用率要高于靜態分配內存[5],在實際應用中要結合具體情況決定采用何種分配方式。在本設計中合理使用了兩種分配方式:在靜態分配中進行密度的動態判斷,在動態分配中進行靜態的最小分配大小匹配。動、靜相結合,使操作系統在分配中盡可能地節約內存的同時,有效減少了內存碎片。本分配方式已經運用于TD-LTE無線綜合測試儀中,在實現操作系統基本內存管理功能的同時,滿足了TD-LTE無線綜合測試儀對系統內存資源和調度時間的設計要求。
參考文獻
[1] 馮寶祥,王桂棠.嵌入式實時操作系統Nucleus PLUS在S3C2410A上移植的實現[J].電子設計應用,2007(5):104-106.
[2] 王小銀,陳莉君.Linux內核中內存池的實現及應用[J]. 西安郵電學院學報,2001,16(4):40-43.
[3] 張磊,王忠仁.嵌入式系統中一種池式內存管理中應用 [J].實驗科學與技術,2007,5(2):150-152
[4] LMAS S H.An application-level memory management service[C].ICTTA 2008.3rd International Conference on.7-11 April 2008:1-4.
[5] MUTSCHLER D W.Enhancement of memory pools toward a  multi-threaded implementation of the Joint integrated mission  model(JIMM)[C].WSC 06.Proceedings of the Winter.3-6 Dec.2006:856-862.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          欧美国产日韩在线观看| 美国三级日本三级久久99| 亚洲风情在线资源站| 亚洲午夜影视影院在线观看| 在线不卡中文字幕| 久久亚洲国产精品一区二区| 在线综合+亚洲+欧美中文字幕| 日韩一区二区电影网| 欧美日韩亚洲综合| 亚洲综合国产精品| 狠狠色狠狠色综合| 亚洲国产cao| 亚洲精品女av网站| 欧美三级中文字幕在线观看| 久久精品一本久久99精品| 欧美亚洲第一区| 欧美日韩不卡合集视频| 在线观看日韩av| 乱中年女人伦av一区二区| 久久精品最新地址| 亚洲精品国偷自产在线99热| 国产欧美日本| 国产午夜精品美女视频明星a级| 亚洲国产欧美日韩| 国产欧美一区二区在线观看| 久久久久久久91| 欧美视频免费在线观看| 午夜精品福利视频| 免费久久99精品国产自| 美脚丝袜一区二区三区在线观看| 国产欧美日韩视频一区二区| 亚洲欧美中文另类| 在线播放不卡| 免费视频最近日韩| 国产一区二区三区在线播放免费观看| 亚洲成在人线av| 一区二区三区精密机械公司| 国内外成人免费激情在线视频| 亚洲国产精品毛片| 国产精品一区在线观看你懂的| 久久一二三国产| 国产午夜精品全部视频在线播放| 美女被久久久| 亚洲国产天堂久久综合网| 免费观看不卡av| 亚洲综合精品一区二区| 国产伦精品一区二区三区高清版| 亚洲精品国精品久久99热| 一本久道久久久| 欧美精品久久久久久久免费观看| 亚洲精品日韩在线观看| 新片速递亚洲合集欧美合集| 国产精品啊v在线| 久久尤物电影视频在线观看| 亚洲免费中文字幕| 亚洲午夜精品| 久久久久久国产精品mv| 欧美另类在线观看| 国产精品99免视看9| 国产精品伦一区| 在线观看亚洲a| 国内免费精品永久在线视频| 亚洲国产精品黑人久久久| 欧美日韩一区精品| 亚洲精美视频| 亚洲精品1区2区| 欧美成人资源| 国产精品日韩| 亚洲美女在线视频| 久久一区二区三区四区| 久久亚洲欧美| 男人的天堂亚洲在线| 欧美亚洲视频| 久久午夜精品| 亚洲精品在线一区二区| 欧美日韩视频第一区| 久久久久久网站| 一区二区免费看| 国产一区二区三区日韩欧美| 久久久蜜桃一区二区人| 亚洲三级视频在线观看| 欧美日韩一区二区免费视频| 欧美中文字幕久久| 国产精品毛片高清在线完整版| 国产精品国产自产拍高清av王其| 亚洲国产欧美日韩另类综合| 国产精品久久久对白| 性色av一区二区三区| 韩国欧美一区| 国产精品美女在线观看| 久久伊人亚洲| 久久在线视频| 国产欧美日韩综合| 国产免费亚洲高清| 亚洲乱码国产乱码精品精天堂| 国产精品黄色在线观看| 国产精品日日摸夜夜添夜夜av| 国产日本欧美一区二区三区| 国产精品毛片在线| 国产情人综合久久777777| 久久久女女女女999久久| 国产精品爽黄69| 欧美综合二区| 国产精品久久久久久户外露出| 久久电影一区| 久久久精品一区| 欧美四级电影网站| 欧美小视频在线观看| 欧美在线视频一区二区三区| 欧美在线一二三四区| 麻豆乱码国产一区二区三区| 欧美精品在线播放| 亚洲无线一线二线三线区别av| 欧美精品一区二区三区高清aⅴ| 欧美华人在线视频| 国产精品久久国产三级国电话系列| 欧美日韩国语| 国产欧美一区二区三区久久人妖| 国产日韩精品一区二区三区在线| 一区二区三区高清视频在线观看| 老鸭窝亚洲一区二区三区| 激情国产一区二区| 欧美专区第一页| 欧美不卡视频| 美女任你摸久久| 国产日韩欧美综合| 欧美18av| 老**午夜毛片一区二区三区| 午夜一区二区三区在线观看| 亚洲精品欧洲| 亚洲国产国产亚洲一二三| 久久久综合精品| 欧美一区=区| 久久精品国产69国产精品亚洲| 亚洲精品免费在线观看| 欧美呦呦网站| 日韩视频免费大全中文字幕| 久久综合伊人77777麻豆| 日韩视频在线观看一区二区| 亚洲国产人成综合网站| 欧美日本一区二区三区| 亚洲精品一二三| 久久免费国产| 亚洲影视在线播放| 欧美在线播放高清精品| 欧美91精品| 国产一区二区三区四区| 久久精品亚洲精品| 亚洲欧洲日本国产| 在线成人国产| 国产精品影片在线观看| 在线观看日韩国产| 国内精品美女在线观看| 亚洲精品国产精品乱码不99| 亚洲美女性视频| 欧美激情性爽国产精品17p| 亚洲国产精品一区二区www在线| 欧美日韩一二三四五区| 亚洲精品黄色| 欧美激情第8页| 久久久午夜电影| 夜夜爽99久久国产综合精品女不卡| 在线中文字幕日韩| 欧美天天影院| 国产精品欧美风情| 国产欧美在线观看| 欧美www视频| 日韩午夜电影在线观看| 欧美aa在线视频| 亚洲综合视频1区| 国产伦精品一区二区三区四区免费| 欧美精品 日韩| 麻豆精品视频在线| 欧美日韩的一区二区| 久久九九免费视频| 欧美成年网站| 欧美视频四区| 亚洲一区二区三区四区在线观看| 欧美偷拍一区二区| 日韩午夜三级在线| 性欧美暴力猛交69hd| 韩国三级电影一区二区| 国产精品激情偷乱一区二区∴| 亚洲精品小视频在线观看| 欧美日韩精品免费在线观看视频| 欧美寡妇偷汉性猛交| 欧美一区二区网站| 久久av二区| 亚洲国产日韩一区二区| 欧美激情精品久久久久久| 国产三级精品三级| 国产精品人人做人人爽人人添| 欧美片第1页综合| 欧美jizz19性欧美| 国产欧美日韩高清| 亚洲自拍偷拍一区| 亚洲欧美视频在线| 国产色综合久久| 亚洲免费大片| 久久青草福利网站| 欧美三级不卡| 欧美日韩一区二区三区在线视频| 欧美激情亚洲自拍| 国产日韩欧美一区二区三区四区| 好吊妞**欧美| 欧美啪啪成人vr| 久久免费偷拍视频| 久久亚洲高清| 一区二区高清| 国产午夜精品一区二区三区视频| 国产一区二区三区在线观看免费视频| 欧美日韩播放| 亚洲国产精品成人va在线观看| 亚洲成人资源网| 欧美一区二区视频观看视频| 伊人蜜桃色噜噜激情综合| 国产视频精品免费播放| 国产一区二区精品久久| 欧美午夜电影在线观看| 久久精品一区二区三区中文字幕| 国产欧美成人| 国产精品扒开腿做爽爽爽视频| 国产精品久久久久久久久久尿| 欧美丝袜一区二区三区| 久久精品国产v日韩v亚洲| 午夜精品国产精品大乳美女| 午夜老司机精品| 亚洲综合三区| 久久国产精品99精品国产| 国产精品国产三级国产专播品爱网| 国产精品99久久久久久www| 91久久在线观看| 一区二区三区精品视频在线观看| 欧美国产日韩一区二区在线观看| 亚洲裸体俱乐部裸体舞表演av| 亚洲人成在线观看一区二区| 亚洲愉拍自拍另类高清精品| 亚洲淫性视频| 亚洲国产精品va在线看黑人| 亚洲欧美一级二级三级| 欧美日韩妖精视频| 一本综合久久| 亚洲国产天堂网精品网站| 欧美日韩亚洲91| 欧美日韩国产色站一区二区三区| 在线亚洲一区观看| 国产精品swag| 欧美成人精品在线播放| 尤物九九久久国产精品的分类| 久久爱91午夜羞羞| 国产日韩高清一区二区三区在线| 亚洲伊人伊色伊影伊综合网| 日韩视频在线观看国产| 亚洲承认在线| 好看的亚洲午夜视频在线| 国产精品久久久久999| 亚洲电影网站| 欧美在线免费一级片| 亚洲男人的天堂在线观看| 亚洲日本无吗高清不卡| 欧美日韩亚洲一区二区三区四区| 欧美日本国产一区| 久久精品亚洲乱码伦伦中文| 妖精成人www高清在线观看| 午夜影视日本亚洲欧洲精品| 欧美激情亚洲视频| 美女爽到呻吟久久久久| 亚洲一区二区三区777| 欧美尤物巨大精品爽| 欧美专区18| 欧美日韩免费高清| 日韩手机在线导航| 国产精品美女久久久久av超清| 国产精品对白刺激久久久| 一区二区久久久久| 日韩午夜在线观看视频| 国产精品久久久久久久久搜平片| 在线视频国产日韩| 欧美女激情福利| 欧美视频1区| 欧美日韩亚洲一区| 亚洲国产精品热久久| 99国产精品久久久久老师| 快she精品国产999| 黄色一区二区在线| 欧美日韩一区二区在线| 欧美一级在线播放| 欧美福利小视频| 国产伪娘ts一区| 亚洲国产精品悠悠久久琪琪| 国产精品女人久久久久久| 国产丝袜美腿一区二区三区| 国产欧美日韩高清| 亚洲第一精品久久忘忧草社区| 欧美人交a欧美精品| 欧美午夜www高清视频| 亚洲欧美日韩综合一区| 在线亚洲欧美视频| 在线国产精品一区| 亚洲视频axxx| 国产精品成人一区二区网站软件| 亚洲国产成人在线| 一本大道av伊人久久综合| 国产在线精品二区| 欧美片第一页| 久久精品免费观看| 欧美日韩另类在线| 国产精品欧美一区二区三区奶水| 狠狠综合久久av一区二区小说| 久久男人资源视频| 欧美午夜视频在线观看| 久久久精品国产99久久精品芒果| 国产女精品视频网站免费| 午夜日韩在线观看| 在线亚洲一区二区| 免费欧美电影| 亚洲欧洲一区二区在线观看| 国产精品xxx在线观看www| 欧美精品在线视频观看| 亚洲区欧美区| 欧美一区二区三区视频在线观看| 亚洲美女诱惑| 亚洲第一精品夜夜躁人人躁| 伊人久久久大香线蕉综合直播| 99re在线精品| 在线一区二区三区四区五区| 国产一区二区三区在线观看精品| 国产精品毛片a∨一区二区三区|国|