色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

適用于嵌入式系統的slab分配器的設計與實現

電子設計 ? 來源:郭婷 ? 作者:電子設計 ? 2018-12-04 08:50 ? 次閱讀

隨著硬件技術的發展和內存容量的擴大,操作系統中內存管理技術日趨完善。但是在嵌入式領域中,硬件性能和內存容量遠遠落后于PC機,其內存管理受到多種因素制約,若直接采用操作系統中的內存管理技術,不僅難以達到預期效果,而且會影響嵌入式系統的性能。

在嵌入式系統內存管理設計過程中,發現操作系統中的slab分配器雖然在PC機上有良好的性能,但是在嵌入式系統中不但不能發揮其優勢,還降低了系統的整體性能。本文通過分析,指出了slab分配器的不足,并給出相應的解決方案。實驗結果表明,slab分配器經過改進可適用于嵌入式系統。

1 slab分配器分析

操作系統內核運行時會頻繁地為某些對象分配內存空間,而這些對象往往只需要幾十或幾百KB的空間,如果直接采用頁面管理器進行內存分配,將產生很多內存碎片,造成嚴重的內存浪費。slab分配器支持細粒度的內存分配,較好地解決了此問題。由于性能優越,slab被Linux、FreeBSD等操作系統采用,是目前應用最廣的內核內存管理器之一.

1.1 slab分配器設計思想

基于頁面分配器,將一頁或幾頁的內存組織起來,劃分成一定數量的小塊內存,這種連續的頁面稱之為slab.它為內核中使用頻繁的對象建立專門的緩沖區(cache),每種類型的對象都有自己專用的cache一個cache管理著多個slab,每個slab又管理著多個對象。slab的大小與所管理對象的大小有關。根據slab管理對象的分配情況,可將每個cache中的slab分為3類:(1)slab管理的對象已經完全分配,沒有空閑的對象;(2)slab管理的對象部分分配,還有部分空閑對象;(3)slab中的對象都未分配,都是空閑對象。

不同的slab分別放入不同的隊列中,即每個cache管理3個slab隊列,cache與cache之間的關系如圖1虛框①內所示,cache與slab的關系如圖1虛框②內所示。

適用于嵌入式系統的slab分配器的設計與實現

當slab分配器接收到內存申請時,根據所申請內存的大小找到合適的cache,從cache管理的第二類slab中分配對象,若失敗則從第三類slab中分配對象,若還不成功則說明cache中沒有空閑對象,須為cache創建一個新的slab,從新的slab中分配空閑對象。

對象釋放過程中,不僅要清空對象占用的空間,而且還要調整對象所屬slab的狀態,判斷是否改變此slab在cache中的位置。

slab分配器采用著色機制將不同slab中的對象放入不同的偏移處,利用硬件高速緩存的映射機制,將頁的不同偏移映射到硬件緩存的不同地址。而每個slab的開始部分訪問頻率最高,只要slab中起始對象的偏移不同則映射到硬件高速緩存的位置就不同,從而降低了頻繁換入換出的性能損失.

1.2 slab分配器在嵌入式系統中的缺陷

slab分配器雖然能解決系統對小塊內存的頻繁需求,但是管理結構復雜,內存分配策略開銷較大。在內存受限的嵌入式系統中,slab的缺陷大大影響了系統的整體性能。總之,slab分配器存在以下三方面的缺陷:

(1)slab管理結構和存儲開銷較大

每個slab由slab描述結構、管理空閑對象的整型數組和對象三部分組成,整型數組把slab中空閑對象組成一個順序隊列,數組大小與對象數有關,每個對象對應一個整數,如圖2所示。當對象較小時,整型數組將造成較大的內存開銷。

適用于嵌入式系統的slab分配器的設計與實現

(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與對象之間的關系。

適用于嵌入式系統的slab分配器的設計與實現

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所示。

適用于嵌入式系統的slab分配器的設計與實現

(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所示。

適用于嵌入式系統的slab分配器的設計與實現

(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%的空間;在對象的c過程中,e_slab的速度比slab快8%;內存釋放過程中,e_slab比slab快5%.可見,不管在時間上還是空間上,e_slab性能都比slab優越。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5087

    文章

    19149

    瀏覽量

    306230
  • PC
    PC
    +關注

    關注

    9

    文章

    2093

    瀏覽量

    154364
  • 操作系統
    +關注

    關注

    37

    文章

    6856

    瀏覽量

    123459
收藏 人收藏

    評論

    相關推薦

    Linux內核內存管理之slab分配器

    本文在行文的過程中,會多次提到cache或緩存的概念。如果沒有特殊在前面添加硬件的限定詞,就說明cache指的是slab分配器使用的軟件緩存的意思。如果添加了硬件限定詞,則指的是處理器的硬件緩存,比如L1-DCache、L1-ICache之類的。
    的頭像 發表于 02-22 09:25 ?1288次閱讀
    Linux內核內存管理之<b class='flag-5'>slab</b><b class='flag-5'>分配器</b>

    一種能同時適用于ISM兩頻段的功率分配器設計

    ,ISM射頻段2.45 GHz和5.8 GHz的有很大的比例。因此,本文提出了一種能同時適用于該兩頻段的功率分配器,通過嚴格的電路設計得出了其具體的理想設計參數,通過電磁仿真AWR-MWO和SONNET驗證了該類功率分配器的正確
    發表于 07-02 07:55

    適用于自主機器的嵌入式系統是什么

    課程名字:Jetson:適用于自主機器的嵌入式系統課程地址:
    發表于 12-20 06:06

    一種適用于嵌入式系統的模塊動態加載技術

    嵌入式系統中的模塊動態加載技術摘要提出一種適用于嵌入式系統的模塊動態加載技術,設計實現簡單,占用
    發表于 12-20 06:32

    分配器

    分配器分配器是有線電視傳輸系統分配網絡里最常用的部件,用來分配信號的部件。它的功能是將一路輸入信號均等地分成幾路輸出,通常
    發表于 10-19 12:27 ?2032次閱讀

    數據分配器

    數據分配器   數據分配是將一個數據源來的數據根據需要送到多個不同的通道上去,實現數據分配功能的邏輯電路稱為數據分配器。它的作用
    發表于 04-07 10:24 ?1w次閱讀
    數據<b class='flag-5'>分配器</b>

    音視頻/信號分配器,音視頻/信號分配器是什么意思

    音視頻/信號分配器,音視頻/信號分配器是什么意思     音視分配器專為音視頻信號在傳播中進行分配而設計,適用于
    發表于 03-26 09:51 ?2736次閱讀

    VGA分配器,VGA分配器是什么意思

    VGA分配器,VGA分配器是什么意思 VGA分配器的概念:   VGA分配器是將計算機或其它VGA輸出信號分配至多個VGA顯示設備或投影顯
    發表于 03-26 09:59 ?2535次閱讀

    分配器,什么是分配器

    分配器,什么是分配器 將一路微波功率按一定比例分成n路輸出的功率元件稱為功率分配器。按輸出功率比例不同, 可分為等功率分配器和不等功率
    發表于 04-02 13:48 ?3441次閱讀
    <b class='flag-5'>分配器</b>,什么是<b class='flag-5'>分配器</b>

    linux內存管理中的SLAB分配器詳解

    大小的內存,頁框分配器也不得不分配一個4KB的頁框給申請者,這樣就會有3KB被白白浪費掉了。為了應對這種情況,在頁框分配器上一層又做了一層SLAB層,
    發表于 05-17 15:01 ?2214次閱讀
    linux內存管理中的<b class='flag-5'>SLAB</b><b class='flag-5'>分配器</b>詳解

    深入剖析SLUB分配器SLAB分配器的區別

    首先為什么要說slub分配器,內核里小內存分配一共有三種,SLAB/SLUB/SLOB,slub分配器slab
    發表于 05-17 16:05 ?1117次閱讀
    深入剖析SLUB<b class='flag-5'>分配器</b>和<b class='flag-5'>SLAB</b><b class='flag-5'>分配器</b>的區別

    Linux內核之塊分配器

    為了解決小塊內存的分配問題,Linux 內核提供了塊分配器,最早實現的塊分配器SLAB 分配器
    的頭像 發表于 07-27 09:35 ?1683次閱讀

    單線分配器與雙線分配器的區別是什么

    單線分配器與雙線分配器是兩種不同類型的電子設備,它們在通信、廣播、電視等領域中有著廣泛的應用。本文將介紹單線分配器與雙線分配器的區別。 一、定義 單線
    的頭像 發表于 07-10 10:44 ?956次閱讀

    液壓分配器工作原理是什么

    液壓分配器,又稱液壓多路閥,是液壓系統中的關鍵部件之一。它的作用是將液壓泵輸出的油液分配到各個執行機構,實現液壓系統的控制和調節。 一、液壓
    的頭像 發表于 07-10 10:55 ?1951次閱讀

    液壓分配器起什么作用的

    液壓分配器是一種用于控制液壓系統中液體流量和壓力的設備。它在許多工業和工程應用中發揮著重要作用,例如在液壓升降機、液壓挖掘機、液壓起重機等設備中。以下是液壓分配器的主要功能和原理: 流
    的頭像 發表于 07-10 10:56 ?1027次閱讀
    主站蜘蛛池模板: 小小水蜜桃3视频在线观看| 亚洲2023无矿砖码砖区| 精彩国产萝视频在线| 国产精品一区二区欧美视频| 俄罗斯bbbbbbbbb大片| xxx88中国| 扒开她的黑森林让我添动态图| 92看看福利午夜影院| 直插下身完整的欧美版| 中国bdsmchinesehd| 最近中文字幕免费高清MV视频6 | 欧美zzo交| 男男h开荤粗肉h文1v1| 男人插女人动态图| 欧美大jiji| 青青娱乐网| 十分钟免费观看大全视频| 外国三级片名| 亚洲国产精品一区二区久久第| 亚洲精品国产一区二区贰佰信息网| 亚洲AV久久无码精品九号软件 | V8成品人视频| 岛国精品在线观看| 国产高清在线观看| 国产亚洲精品久久久久久久软件| 国产亚洲精品视频在线网| 精品国产精品人妻久久无码五月天| 九九热在线观看| 美女gif趴跪式动态图| 欧美日韩中文字幕综合图区| 三级黄色a| 亚欧成人毛片一区二区三区四区| 亚洲欧美无码2017在线| 伊人AV一区二区三区夜色撩人| 18亚洲男同gay1069| 9亚洲欧洲免费无码在线| 成人在线视频观看| 国产剧情麻豆mv| 久久青草影院| 青草久久精品亚洲综合专区| 翁用力的抽插|