《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于嵌入式系統的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網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
国产亚洲亚洲| 亚洲第一福利在线观看| 另类亚洲自拍| 欧美怡红院视频一区二区三区| 在线视频一区二区| 日韩一级在线观看| 亚洲人成网站精品片在线观看 | 女主播福利一区| 久久综合色一综合色88| 亚洲性线免费观看视频成熟| 欧美成人自拍视频| 久久这里只精品最新地址| 久久久久综合| 久久午夜av| 老牛国产精品一区的观看方式| 久久噜噜噜精品国产亚洲综合| 久久久久久欧美| 久色婷婷小香蕉久久| 免费不卡欧美自拍视频| 男女av一区三区二区色多| 欧美成年人网| 欧美人妖另类| 欧美午夜免费| 国产精品一区一区三区| 国产日韩精品一区二区三区| 国产主播一区二区三区| 影音先锋在线一区| 亚洲人妖在线| 国产精品99久久久久久久久| 亚洲女性裸体视频| 欧美在线中文字幕| 最新国产成人av网站网址麻豆| 日韩视频在线一区二区三区| 亚洲少妇在线| 香蕉久久夜色精品国产| 国产精品日本欧美一区二区三区| 欧美三日本三级少妇三2023| 国产精品久久国产愉拍| 国产免费观看久久| 国产香蕉97碰碰久久人人| 激情久久久久久| 亚洲精品乱码久久久久久久久| 在线天堂一区av电影| 午夜精品久久久久久久99樱桃| 久久gogo国模啪啪人体图| 亚洲精品在线视频| 亚洲欧美一区二区原创| 久久久欧美一区二区| 欧美激情精品久久久久久久变态 | 欧美精品一卡二卡| 国产精品海角社区在线观看| 国产日韩一区二区| 亚洲激情成人网| 亚洲精品影院| 欧美日韩裸体免费视频| 国产精品女主播| 狠狠干狠狠久久| 日韩午夜激情| 久久成人精品一区二区三区| 一本高清dvd不卡在线观看| 欧美在线视频观看| 欧美国产日本韩| 国产欧美91| 91久久精品www人人做人人爽| 亚洲一区www| 亚洲日本aⅴ片在线观看香蕉| 亚洲欧美日韩精品综合在线观看| 欧美777四色影视在线| 国产精品日韩精品欧美精品| 亚洲国产成人在线视频| 亚洲免费影视第一页| 99re6热在线精品视频播放速度| 久久aⅴ乱码一区二区三区| 欧美—级高清免费播放| 国产精品入口| 亚洲日产国产精品| 久久av红桃一区二区小说| 亚洲一区二区三区免费在线观看| 麻豆精品视频在线观看| 国产精品视频自拍| 亚洲日本中文字幕| 久久精品一区四区| 午夜精品国产| 欧美日韩网址| 亚洲激情av| 久久精彩免费视频| 午夜视频一区| 欧美三区不卡| 亚洲欧洲视频在线| 亚洲国产成人久久| 亚洲欧美日韩专区| 午夜国产不卡在线观看视频| 日韩视频精品| 欧美中文字幕第一页| 国产精品99久久99久久久二8| 久久全国免费视频| 国产毛片一区| 在线亚洲欧美视频| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 亚洲一区二区三区高清 | 亚洲美女中文字幕| 久久一区二区三区av| 国产欧美 在线欧美| 日韩视频一区二区三区| 亚洲精品国产视频| 久久久久中文| 国产日韩在线一区二区三区| 亚洲天堂免费观看| 中文国产成人精品| 欧美精品1区2区| 亚洲福利视频一区| 亚洲国产成人午夜在线一区| 久久久999精品免费| 国产深夜精品| 媚黑女一区二区| 国产精品看片资源| 在线亚洲一区二区| 亚洲一区二区三区欧美| 欧美日韩精品一区二区三区四区| 亚洲国产毛片完整版 | 日韩写真在线| 欧美精品一区二区蜜臀亚洲| 亚洲黑丝在线| 亚洲精品欧美激情| 欧美激情亚洲自拍| 亚洲三级色网| 亚洲少妇一区| 国产精品你懂的| 亚洲欧美成人| 久久成人免费电影| 国产亚洲一二三区| 久久动漫亚洲| 欧美.www| 亚洲人成77777在线观看网| 99精品欧美一区二区三区综合在线| 欧美高清在线视频| 亚洲美女视频在线免费观看| 中文高清一区| 国产精品一区二区在线观看不卡| 亚洲欧美精品一区| 久久精品女人的天堂av| 韩国av一区二区三区四区| 亚洲欧洲精品一区| 欧美区亚洲区| 亚洲在线第一页| 久久久噜噜噜久久人人看| 影音先锋中文字幕一区| 99国内精品久久| 国产精品初高中精品久久| 亚洲免费影视| 美日韩丰满少妇在线观看| 亚洲欧洲在线看| 亚洲欧美日韩精品综合在线观看| 国产亚洲人成网站在线观看| 亚洲精品日韩久久| 欧美网站在线| 欧美一区二区三区在线观看视频| 美女福利精品视频| 亚洲精品国产品国语在线app| 亚洲综合欧美| 久久亚洲综合网| 亚洲乱码国产乱码精品精98午夜 | 欧美日韩亚洲在线| 亚洲欧美日韩国产综合精品二区| 久久蜜臀精品av| 亚洲三级免费电影| 欧美一区二区三区四区夜夜大片| 激情视频亚洲| 亚洲伊人网站| 狠色狠色综合久久| 一区二区三区www| 国产农村妇女精品一区二区| 亚洲欧洲日韩综合二区| 国产精品草草| 亚洲国产高清自拍| 国产精品久久久久999| 久久国产一区二区三区| 欧美久久综合| 性欧美暴力猛交69hd| 欧美韩国在线| 午夜一区二区三视频在线观看| 欧美va亚洲va国产综合| 亚洲一区二区伦理| 老司机午夜精品| 亚洲一区二区三区午夜| 欧美激情第4页| 性欧美video另类hd性玩具| 欧美了一区在线观看| 欧美在线视频免费播放| 欧美日本精品| 欧美一区激情| 国产精品乱码人人做人人爱| 亚洲日本电影| 国产欧美综合在线| 亚洲图片欧美日产| 在线欧美一区| 久久精品一二三区| 亚洲夜晚福利在线观看| 欧美风情在线| 久久激五月天综合精品|