《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于嵌入式系統的e_slab研究與實現
基于嵌入式系統的e_slab研究與實現
來源:微型機與應用2012年第12期
李 勇,任 宏,王志林
(中國人民解放軍91245部隊,遼寧 葫蘆島125000)
摘要: 為降低嵌入式系統的內存管理開銷,提升內存分配效率,詳細分析了slab分配器機制并指出其不足,給出相應的改進措施,提出了基于e_slab算法的內存分配器。實驗表明,e_slab算法不僅簡化了內存管理結構,而且提高了內存分配效率。
Abstract:
Key words :

摘  要: 為降低嵌入式系統的內存管理開銷,提升內存分配效率,詳細分析了slab分配器機制并指出其不足,給出相應的改進措施,提出了基于e_slab算法的內存分配器。實驗表明,e_slab算法不僅簡化了內存管理結構,而且提高了內存分配效率。
關鍵詞: slab;e_slab;嵌入式系統;cache

    隨著硬件技術的發展和內存容量的擴大,操作系統中內存管理技術日趨完善。但是在嵌入式領域中,硬件性能和內存容量遠遠落后于PC機,其內存管理受到多種因素制約,若直接采用操作系統中的內存管理技術,不僅難以達到預期效果,而且會影響嵌入式系統的性能。
    在嵌入式系統內存管理設計過程中,發現操作系統中的slab分配器雖然在PC機上有良好的性能,但是在嵌入式系統中不但不能發揮其優勢,還降低了系統的整體性能。本文通過分析,指出了slab分配器的不足,并給出相應的解決方案。實驗結果表明,slab分配器經過改進可適用于嵌入式系統。
1 slab分配器分析
    操作系統內核運行時會頻繁地為某些對象分配內存空間,而這些對象往往只需要幾十或幾百KB的空間,如果直接采用頁面管理器進行內存分配,將產生很多內存碎片,造成嚴重的內存浪費。slab分配器支持細粒度的內存分配,較好地解決了此問題。由于性能優越,slab被Linux、FreeBSD等操作系統采用,是目前應用最廣的內核內存管理器之一[1]。
1.1 slab分配器設計思想
    基于頁面分配器[2],將一頁或幾頁的內存組織起來,劃分成一定數量的小塊內存,這種連續的頁面稱之為slab。它為內核中使用頻繁的對象建立專門的緩沖區(cache),每種類型的對象都有自己專用的cache[2]。一個cache管理著多個slab,每個slab又管理著多個對象。slab的大小與所管理對象的大小有關。根據slab管理對象的分配情況,可將每個cache中的slab分為3類[3-4]:(1)slab管理的對象已經完全分配,沒有空閑的對象;(2)slab管理的對象部分分配,還有部分空閑對象;(3)slab中的對象都未分配,都是空閑對象。
    不同的slab分別放入不同的隊列中,即每個cache管理3個slab隊列,cache與cache之間的關系如圖1虛框①內所示,cache與slab的關系如圖1虛框②內所示。


    當slab分配器接收到內存申請時,根據所申請內存的大小找到合適的cache,從cache管理的第二類slab中分配對象,若失敗則從第三類slab中分配對象,若還不成功則說明cache中沒有空閑對象,須為cache創建一個新的slab,從新的slab中分配空閑對象。
    對象釋放過程中,不僅要清空對象占用的空間,而且還要調整對象所屬slab的狀態,判斷是否改變此slab在cache中的位置。
    slab分配器采用著色機制將不同slab中的對象放入不同的偏移處,利用硬件高速緩存的映射機制,將頁的不同偏移映射到硬件緩存的不同地址。而每個slab的開始部分訪問頻率最高,只要slab中起始對象的偏移不同則映射到硬件高速緩存的位置就不同,從而降低了頻繁換入換出的性能損失[4-5]。
1.2 slab分配器在嵌入式系統中的缺陷
    slab分配器雖然能解決系統對小塊內存的頻繁需求,但是管理結構復雜,內存分配策略開銷較大。在內存受限的嵌入式系統中,slab的缺陷大大影響了系統的整體性能??傊?,slab分配器存在以下三方面的缺陷:
    (1)slab管理結構和存儲開銷較大
    每個slab由slab描述結構、管理空閑對象的整型數組和對象三部分組成,整型數組把slab中空閑對象組成一個順序隊列,數組大小與對象數有關,每個對象對應一個整數,如圖2所示。當對象較小時,整型數組將造成較大的內存開銷。

    (2)cache結構復雜而且數量較多
    系統中存在著專用對象和通用對象。專用對象專門存儲特定用途的數據結構,例如CPU、文件系統等,其數量與系統密切相關;通用對象用來存儲一般的數據結構,大小在幾十KB到幾千KB之間(一般為2的整次冪字節),有十多種。不管是專用對象還是通用對象,slab分配器都為其建立了一個cache結構,眾多cache組織和管理的較大開銷是嵌入式系統難以承受的。
    (3)復雜的隊列管理
    如圖1所示,slab分配器中存在較多的隊列,每個cache管理著3個slab隊列,每個slab隊列與cache組成循環隊列。所有的cache組成雙向循環隊列。面對眾多的隊列,如何有效地管理是很困難的。
1.3 slab在嵌入式系統中的改進
    針對上節中slab分配器的三點缺陷,給出相應的改進方案。
    (1)改進slab結構
    針對slab中對象管理數組開銷過大的問題,可以將多個不同的slab合并成一個slab,從而減少slab的數量,即一個slab管理對象的大小可在一個小范圍內浮動。由于slab中對象大小不同,無法確定slab中對象的大小、數量和位置,所以必須重新設置slab結構。
    (2)限制slab分配器管理的內存粒度范圍
    由于內核內存管理器主要負責細粒度的內存管理,所以限制所管理對象的大小。對于大塊內存的申請,直接由頁面分配器處理。
    (3)精簡隊列管理
    簡化cache中繁雜的隊列,將cache中的前兩個slab隊列合并成一個隊列。
  本文將經過上述三方面改進的分配器稱之為e_slab分配器。
2 e_slab分配器設計
2.1 基本管理結構

    e_slab分配器有3個重要的基本結構,下面分別對其作相關介紹。
    (1)object_t結構
    typedef  struct object {
            unsigned long size;
            unsigned long offset;
    } object_t;
    object_t是描述對象的基本結構,每個對象對應一個object_t結構,它描述了對象的大小和下一個空閑對象的地址。
    (2)e_slab_t結構
    typedef struct e_slab _s {
            struct list_head    list;
            void                *s_mem;
            unsigned int        units;
            unsigned int        free;
    } e_slab _t;
    e_slab _t是管理對象的基本結構,它不僅描述了本結構的頁塊起始地址,而且存儲了空閑對象的數量和地址等信息。
    object_t、e_slab _t和對象結構如圖3虛框②內所示。
    (3)cache結構
    typedef struct cache_s {
            struct list_head    next;
            struct list_head    slab_list;
            unsigned int        objsize;
            unsigned int        gfporder;
            unsigned int        num;
            …
    } cache_t;
    cache的描述結構為cache_t,它主要描述了所管e_slab的基本信息。由于cache_t結構大小相同,可把cache_t看做一個專用對象,所有的cache組織在一起。
    cache管理的所有e_slab被加入到list隊列。把管理所有cache的結構稱之為cache_cache。cache_cache與cache之間有兩種關系:一種是雙向隊列關系,如圖3虛框①內所示,cache_cache利用雙向鏈表將系統中所有的cache(包括專用cache和通用cache)組成循環隊列;一種是cache與對象之間的關系。

 

 

2.2 e_slab分配器初始化
    e_slab分配器初始化主要完成cache、e_slab_t等結構的創建,為對象的分配做好準備。
2.2.1 cache的創建
    cache_cache是系統中所有cache的管理者,它的創建優先于所有的cache。系統會為每種對象創建一個cache,創建流程如下:
    (1)申請一個cache空間。從cache_cache中分配一個專用對象,即cache。設置cache中的各個域,包括管理的對象大小的上限和e_slab大小,其中e_slab大小與對象大小有關。
    (2)將此cache加入管理隊列。將cache加入cache_
cache組成的雙向隊列中,雙向隊列采用通用鏈表鏈接所有的cache。
    (3)將cache加入分配隊列。用一個全局的cache指針指向生成的cache。
2.2.2 e_slab的創建
    在cache的創建過程中,需為每個cache創建一個e_slab。e_slab中的對象全部空閑,可供分配,其流程如下:
    (1)借助頁面分配器申請連續物理頁面。根據e_slab申請的大小和是否有DMA請求,在相應的內存區申請連續頁塊。
    (2)設置頁面屬性。主要設置該頁面的e_slab標志,并將該頁塊與cache和e_slab關聯。
    (3)設置e_slab描述結構,初始化對象結構。
2.3 對象的分配與釋放
    對象的分配與釋放是內存管理模塊提供的兩個基本接口。
2.3.1 對象的分配
    當系統需要小內存塊或者專用對象時,系統會調用對象分配操作,完成對對象的分配,具體流程如圖4所示。

    (1)找到對應的cache。根據申請對象的大小定位相應的cache。
    (2)確定對應的e_slab。檢查cache中的e_slab,找到滿足本次請求的e_slab,如果所有的e_slab均不能滿足,則創建一個新的e_slab并添加到cache管理的隊列中。
    (3)從e_slab中分配一個空閑對象。從e_slab為系統分配一個空閑對象和object_t結構,將對象返還給系統,調整e_slab中對象,管理數組結構。
2.3.2 對象的釋放
    系統使用完對象后,應及時釋放對象,否則內存會越用越少。對象釋放流程如圖5所示。

    (1)確定對象對應的cache與e_slab。根據對象的地址可以獲得所在頁面的描述符結構,從而獲得對應的cache和e_slab。
    (2)釋放對象。獲得對象在e_slab中的偏移,采用頭插法將對象加入空閑對象隊列,并使e_slab中空閑內存增加釋放值。
    (3)e_slab的調整。檢查e_slab中空閑內存大小,若等于e_slab中所有對象都釋放,則清除頁面的e_slab標志,并把e_slab占用頁塊歸還給物理內存管理器。
2.4 e_slab分配器的回收
    在系統退出、內存回收等不再需要e_slab分配器時,需進行e_slab分配器的回收,主要完成e_slab的釋放和cache的釋放。
2.4.1 e_slab的釋放
    在對象釋放過程中,若發現某個e_slab已經全部空閑,沒有分配的對象,則將其釋放,流程如下:
    (1)將e_slab從cache結構中刪除。e_slab從cache的list隊列中摘掉。
    (2)清除頁面標志。將e_slab所在物理頁面的e_slab標志清除,并清除頁面與e_slab和cache的關聯,使頁面回到初始狀態。
2.4.2 cache的釋放
    當系統不再使用某種對象時,系統要銷毀管理對象的cache。cache銷毀流程如下:
    (1)將cache從管理隊列摘掉。將cache從cache_cache組成的雙向隊列中刪除。
    (2)確定cache中沒有e_slab。在cache銷毀前,必須確定所管理的對象都已釋放,檢查cache的list隊列,為空則cache中沒有e_slab,否則進行e_slab釋放。
    (3)釋放cache結構占用的內存。由于cache是cache_
cache管理的對象,cache結構的釋放過程就是對象的釋放過程。
3 性能測試
    在嵌入式系統內存管理設計過程中,分別采用頁面分配器與slab分配器相結合的方案和頁面分配器與e_slab分配器相結合的方案,比較兩種方案中slab和e_slab管理結構的內存占用量和內存分配釋放中的性能。
    在管理結構內存占用方面,e_slab比slab節省了43%的空間;在對象的內存申請過程中,e_slab的速度比slab快8%;內存釋放過程中,e_slab比slab快5%。可見,不管在時間上還是空間上,e_slab性能都比slab優越。
參考文獻
[1] GORMAN M.Understanding the Linux virtual memory  manager[M].北京:北京航空航天大學出版社,2006.
[2] 陳燕暉.頁面分配器的研究與實現[D].長沙:國防科技大學,2006.
[3] 李毅.Slab內存分配策略與移植[D].成都:電子科技大學,2007.
[4] 李勇.虛擬機監控器內存管理機制研究與實現[D].鄭州:信息工程大學,2010.
[5] 史成偉.多核系統中的內存管理系統優化研究[D].成都:電子科技大學,2009.

此內容為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>
          欧美日本韩国一区二区三区| 亚洲综合视频在线| 国产九色精品成人porny| 激情一区二区| 欧美日韩一二三区| 国产一区在线看| 久久久噜噜噜久噜久久| 亚洲日本欧美日韩高观看| 国户精品久久久久久久久久久不卡| 国产一区二区三区黄视频| 欧美日韩 国产精品| 亚洲国产精品t66y| 精品成人一区二区| 国产区日韩欧美| 国产精品三级视频| 久久久久成人精品免费播放动漫| 老色鬼精品视频在线观看播放| 日韩视频中午一区| 午夜视频在线观看一区二区| 欧美尤物巨大精品爽| 欧美欧美在线| 日韩一区二区久久| 欧美日韩精品一区二区天天拍小说| 国产精品成人一区二区| 在线看无码的免费网站| 久久综合伊人| 亚洲精品久久久久久久久| 亚洲国产精品高清久久久| 伊人久久大香线蕉av超碰演员| 国产精品国产馆在线真实露脸| 性娇小13――14欧美| 国产精品午夜av在线| 久久久www| 欲香欲色天天天综合和网| 在线观看91精品国产入口| 99视频精品| 亚洲第一精品久久忘忧草社区| 91久久精品日日躁夜夜躁国产| 老司机免费视频一区二区| 一区二区日韩精品| 在线亚洲激情| 激情成人综合网| 国模套图日韩精品一区二区| 99国产麻豆精品| 国产麻豆综合| 久久精品女人| 亚洲一区二区免费视频| 新片速递亚洲合集欧美合集| 国产精品久久999| 久久er99精品| 欧美日韩精品一区二区三区四区| 久久婷婷蜜乳一本欲蜜臀| 欧美一区二区三区视频在线| 9人人澡人人爽人人精品| 久久激情综合| 亚洲伊人伊色伊影伊综合网| 在线观看中文字幕不卡| 欧美精品黄色| 久久中文字幕一区二区三区| 亚洲网站视频福利| 亚洲欧美综合网| 亚洲国产婷婷香蕉久久久久久99| 一区在线播放视频| 国产亚洲欧美一区二区三区| 女同性一区二区三区人了人一| 国产一区二区三区高清播放| 亚洲三级色网| 国产一区再线| 国产一区观看| 欧美sm视频| 夜夜嗨av一区二区三区免费区| 欧美中文在线视频| 免费久久99精品国产自在现线| 欧美国产日韩亚洲一区| 亚洲精品在线免费观看视频| 欧美日本免费一区二区三区| 狠狠爱www人成狠狠爱综合网| 蜜臀av性久久久久蜜臀aⅴ四虎| 狠狠色丁香婷婷综合影院| 一区二区三区视频在线看| 欧美视频国产精品| 亚洲一区二区三区四区中文| 亚洲一区精品电影| 欧美日韩成人免费| 国产欧美精品日韩区二区麻豆天美| 亚欧成人精品| 欧美一站二站| 久久久人人人| 在线 亚洲欧美在线综合一区| 久久九九国产精品怡红院| 看片网站欧美日韩| 国产精品影院在线观看| 午夜精品久久久久| 亚洲福利视频在线| 欧美新色视频| 亚洲精品中文字幕女同| 在线精品国产成人综合| 欧美大片va欧美在线播放| 欧美色播在线播放| 午夜久久久久久久久久一区二区| 亚洲国产欧美另类丝袜| 欧美视频日韩视频在线观看| 欧美视频在线一区| 亚洲精品一区二区三区福利| 欧美日韩国产页| 国产精品一区二区久久精品| 亚洲一二三区精品| 麻豆精品国产91久久久久久| 欧美性色综合| 欧美高清视频在线播放| 国产欧美亚洲一区| 午夜精品影院在线观看| 亚洲精品日本| 亚洲精品国产精品乱码不99| 欧美sm重口味系列视频在线观看| 亚洲在线网站| 久久久亚洲综合| 欧美日韩综合久久| 亚洲国产精品久久久久婷婷884| 男人插女人欧美| 激情婷婷亚洲| 日韩一级欧洲| 欧美日韩国产精品一卡| 欧美va亚洲va香蕉在线| 欧美日韩国产在线播放| 亚洲精品日日夜夜| 久久亚洲精品网站| 久久狠狠婷婷| 亚洲国产第一页| 欧美中文字幕在线| 亚洲人成在线播放| 亚洲在线视频一区| 亚洲经典在线| 欧美成人国产va精品日本一级| 国产视频丨精品|在线观看| 日韩午夜一区| 欧美视频你懂的| 国产网站欧美日韩免费精品在线观看| 亚洲一区二区高清| 欧美色大人视频| 欧美日韩在线一区二区| 久久大香伊蕉在人线观看热2| 久久久久国产一区二区三区四区| 国产婷婷色一区二区三区| 久久久福利视频| 亚洲风情亚aⅴ在线发布| 999在线观看精品免费不卡网站| 日韩一区二区久久| 欧美日韩ab| 国产亚洲精品久久飘花| 欧美日韩国产123| 午夜欧美大尺度福利影院在线看| 亚洲午夜激情网页| 久久精品观看| 亚洲精品美女久久7777777| 亚洲精品国产品国语在线app| 亚洲欧美日韩一区在线观看| 国产精品国产自产拍高清av王其| 亚洲一区美女视频在线观看免费| 亚洲视频一区二区在线观看| 国产精品裸体一区二区三区| 欧美一级片一区| 欧美福利一区| 欧美与黑人午夜性猛交久久久| 久久久久欧美精品| 欧美日韩午夜在线视频| 蜜臀av一级做a爰片久久| 国产精品自拍小视频| 亚洲夜晚福利在线观看| 欧美亚洲动漫精品| 亚洲欧美日韩国产综合| av成人福利| 欧美日韩午夜| 欧美成人激情在线| 欧美成人在线免费视频| 欧美在线观看一区二区三区| 欧美涩涩视频| 国内一区二区在线视频观看| 一区二区三区四区五区在线| 一本一本久久a久久精品综合妖精| 国产精品欧美风情| 午夜精品福利在线观看| 亚洲精品免费在线播放| 欧美freesex8一10精品| 国产一区二区黄色| 欧美一级播放| 欧美交受高潮1| 久久夜色精品国产| 欧美日韩在线播放三区| 欧美性猛交xxxx乱大交退制版| 在线欧美小视频| 久久九九国产精品怡红院| 久久婷婷国产综合尤物精品| 精品99一区二区三区| 久久久久久成人| 亚洲二区三区四区| 国精产品99永久一区一区| 久久久噜噜噜久噜久久| 久久av二区| 亚欧美中日韩视频| 亚洲黑丝一区二区| 国产在线一区二区三区四区| 亚洲日本精品国产第一区| 欧美ab在线视频| 99精品福利视频| 久热国产精品视频| 99国内精品久久久久久久软件| 国产精品久久久久久久久婷婷| 久久国产一区二区| 欧美香蕉大胸在线视频观看| 中文精品视频| 欧美在线亚洲综合一区| 99视频在线观看一区三区| 久久精品国产清高在天天线| 欧美丰满高潮xxxx喷水动漫| 亚洲免费av网站| 99精品国产在热久久下载| 国产一区二区三区电影在线观看| 欧美亚洲一区| 一本色道久久综合亚洲精品不| 亚洲福利国产精品| 欧美一区二区三区免费观看| 欧美一区二区在线观看| 欧美一区二区在线观看| 亚洲第一精品影视| 亚洲国产一区视频| 亚洲尤物视频在线| 亚洲精品女人| 国产精品视频网站| 久热re这里精品视频在线6| 性色一区二区三区| 欧美激情一区二区三级高清视频| 久久国产精品久久国产精品| 亚洲美女毛片| 欧美在线观看视频一区二区| 久久综合久久综合久久综合| 国产精品爱久久久久久久| av成人免费在线| 亚洲综合欧美日韩| 美日韩精品免费观看视频| 欧美日韩一区二区三区在线观看免| 一本一道久久综合狠狠老精东影业| 国产视频在线观看一区| 国产一区二区中文字幕免费看| 欧美三级电影精品| 久久免费精品视频| 欧美中文字幕视频在线观看| 亚洲伦理在线观看| 国产精品二区在线观看| 欧美激情在线观看| 欧美精品在线看| 欧美日韩国产区| 亚洲午夜成aⅴ人片| 欧美一区二区在线免费观看| 中文成人激情娱乐网| 欧美性大战久久久久久久| 亚洲午夜未删减在线观看| 免费一级欧美片在线观看| 蜜臀a∨国产成人精品| 国产亚洲va综合人人澡精品| 欧美美女福利视频| 久热精品视频在线观看一区| 亚洲婷婷国产精品电影人久久| 国产精品成人一区二区艾草| 老司机67194精品线观看| 国产精品免费电影| 免费一级欧美在线大片| 亚洲婷婷国产精品电影人久久| 欧美伊人久久| 美女露胸一区二区三区| 欧美成人精品在线视频| 99精品国产在热久久| 欧美日韩久久精品| 夜色激情一区二区| 欧美精品在线观看| 欧美精品久久久久久久免费观看| 裸体女人亚洲精品一区| 欧美精品 国产精品| 久久亚洲国产精品日日av夜夜| 亚洲视频在线一区| 久久影音先锋| 欧美成年人网| 一区二区不卡在线视频 午夜欧美不卡在| 女生裸体视频一区二区三区| 欧美乱人伦中文字幕在线| 欧美亚洲动漫精品| 狠狠干综合网| 欧美激情视频一区二区三区不卡| 亚洲第一久久影院| 午夜伦欧美伦电影理论片| 欧美午夜女人视频在线| 国产精品国产三级国产普通话三级| 噜噜噜91成人网| 蜜桃久久精品一区二区| 午夜激情一区| 欧美黑人国产人伦爽爽爽| 欧美激情性爽国产精品17p| 亚洲夜晚福利在线观看| 亚洲精品久久7777| 国产日韩欧美另类| 在线播放日韩专区| 亚洲影音先锋| 欧美韩日高清| 亚洲伦理在线观看| 欧美日韩人人澡狠狠躁视频| 性欧美暴力猛交69hd| 久久精品视频99| 欧美一级视频| 欧美日韩一区在线观看视频| 久久综合国产精品| 最近中文字幕日韩精品| 国产欧美日韩不卡免费| 欧美精品国产一区二区| 久久久一区二区| 国产一区二区在线观看免费播放| 亚洲无人区一区| 91久久极品少妇xxxxⅹ软件| 一区二区三区高清视频在线观看| 欧美.www| 欧美大片在线影院| 在线观看不卡| 欧美视频不卡中文| 亚洲一级一区| 国产精品成av人在线视午夜片| 99热精品在线观看| 在线综合亚洲欧美在线视频| 欧美视频在线观看| 韩日视频一区|