• 
    <ul id="o6k0g"></ul>
    <ul id="o6k0g"></ul>

    一種針對嵌入式系統(tǒng)的內(nèi)存分配方法技術方案

    技術編號:24251285 閱讀:73 留言:0更新日期:2020-05-22 23:26
    本發(fā)明專利技術提供了一種針對嵌入式系統(tǒng)的內(nèi)存分配方法,在TLSF算法的基礎上進行了改進,加入了內(nèi)存分塊和參數(shù)自適應調(diào)節(jié),能夠根據(jù)申請大小來自適應調(diào)節(jié)每個內(nèi)存塊的內(nèi)存分配結構,碎片率低。本發(fā)明專利技術在TLSF算法的基礎上進行了改進,加入了內(nèi)存分塊和參數(shù)自適應調(diào)節(jié),提高了內(nèi)存利用率。其中,將內(nèi)存區(qū)間進行分塊,得到兩個內(nèi)存子區(qū)間,根據(jù)申請大小來自適應調(diào)節(jié)每個內(nèi)存子區(qū)間的內(nèi)存分配結構,從而在保證實時性的同時有效地降低碎片率。

    A memory allocation method for embedded system

    【技術實現(xiàn)步驟摘要】
    一種針對嵌入式系統(tǒng)的內(nèi)存分配方法
    本專利技術屬于內(nèi)存分配
    ,具體涉及一種針對嵌入式系統(tǒng)的內(nèi)存分配方法。
    技術介紹
    隨著物聯(lián)網(wǎng)技術的發(fā)展,嵌入式實時操作系統(tǒng)得到越來越廣泛的應用。嵌入式實時操作系統(tǒng)對動態(tài)內(nèi)存分配的實時性、碎片率、可靠性有更高的要求,因此,動態(tài)內(nèi)存分配已成為嵌入式實時操作系統(tǒng)的一個重要研究內(nèi)容。嵌入式實時系統(tǒng)中,內(nèi)存分配具有重要的意義,它是操作系統(tǒng)的一個重要模塊,包括內(nèi)存的分配和釋放。內(nèi)存分配的好壞直接關系著嵌入式系統(tǒng)的可靠性和穩(wěn)定性。從時間分配上,內(nèi)存分配的分配策略可分為靜態(tài)內(nèi)存分配和動態(tài)內(nèi)存分配。動態(tài)內(nèi)存分配中存儲空間是按需分配,并且被釋放的內(nèi)存塊可以再次參與分配,因此動態(tài)內(nèi)存分配內(nèi)存資源利用率比靜態(tài)內(nèi)存分配高。靜態(tài)內(nèi)存分配是在棧上進行的,在棧上進行大量靜態(tài)分配是很危險的,若棧溢出時,多出的數(shù)據(jù)會覆蓋掉相鄰堆棧的數(shù)據(jù),甚至會破壞內(nèi)核造成系統(tǒng)崩潰。動態(tài)分配可避免這一狀況,大塊內(nèi)存的分配必須采取動態(tài)內(nèi)存分配。因此,為了實時嵌入式系統(tǒng)開發(fā)中更好的使用動態(tài)內(nèi)存分配策略,越來越多的研究人員開始關注內(nèi)存分配的實時性及內(nèi)存碎片問題。頻繁的動態(tài)內(nèi)存分配操作會產(chǎn)生大量內(nèi)存碎片的產(chǎn)生,影響系統(tǒng)性能,所以在不同的系統(tǒng)中,對于內(nèi)存分配管理,開發(fā)了許多不同的內(nèi)存分配算法,典型的實時系統(tǒng)動態(tài)內(nèi)存分配算法有順序查找算法、伙伴算法、Half-Fit算法、位示圖算法以及TLSF算法。從實時性、內(nèi)存碎片率這兩方面考慮,TLSF(Two-levelSegregatedFit)算法是最合適的動態(tài)內(nèi)存分配算法。TLSF(Two-levelSegregatedFit)算法即二級間隔表動態(tài)內(nèi)存分配算法。算法通過二級索引將空閑內(nèi)存塊組織起來。第1級索引按2的冪次將內(nèi)存分為多個區(qū)域;第2級索引在第1級索引劃分的內(nèi)存區(qū)域里再進行線性分割。第2級索引的每一位都對應一條空閑內(nèi)存鏈表。為了提高實時性,TLSF通過雙擊位圖快速索引到大小合適的空閑內(nèi)存塊。為了減少內(nèi)存碎片,TLSF算法在內(nèi)存分配和釋放時采用了切割和合并技術,當算法返回的空閑內(nèi)存大小大于所請求的空閑內(nèi)存大小時,將空閑內(nèi)存塊切割為兩部分,一部分用于分配,另一部分作為新的空閑塊插入到空閑鏈表中;在內(nèi)存釋放時,判斷相鄰物理空間上的內(nèi)存塊是否空閑塊,若都為空閑內(nèi)存塊,則兩個空閑塊合并成一個更大的空閑塊。TLSF算法的切割與合并策略降低了內(nèi)存碎片率。TLSF(Two-levelSegregatedFit)是一種二級隔離適應算法,使用位圖(Bitmaps)與分組空閑鏈表(SegregatedList)相結合的方式對內(nèi)存進行管理。通過兩級隔離鏈表組織空閑隊列,并且對于每一級鏈表都使用位圖法標記其是否含有空閑塊。第一級鏈表按照2的冪次方劃分,第二級鏈表在由第一級鏈表劃分的范圍之內(nèi)進行再次劃分,第二級鏈表的每一級別都對應一條空閑鏈表。查找時,先根據(jù)請求的內(nèi)存大小計算出最合適的一級,二級鏈表的索引值,直接查看對應的位圖標記,如果標記該級鏈表上有空閑塊,則直接從該級鏈表上??;如果由計算所得的兩級索引值指定的鏈表上沒有空閑塊,則需要進行二次查找,通過位操作查找操作,尋找大于當前請求的最小大小空閑鏈表進行分配。在分配和釋放過程中,需要適當?shù)恼{(diào)整位圖和鏈表管理信息。TLSF算法實現(xiàn)過程中的三個參數(shù)(MAX_FLI、MAX_SLI、MBS):(1)一級索引MAX_FLI(不超過32):該索引標識一級鏈表長度,內(nèi)存區(qū)共被劃分成REAL_FLI(MAX_FLI-FLI_OFFSET)個大的內(nèi)存塊區(qū)間,一級索引值為fl的內(nèi)存區(qū)間為[2fl,2fl+1)。參數(shù)FLI_OFFSET定義了最小一級索引的內(nèi)存大小[0,2FLI_OFFSET+1),低于此內(nèi)存的所用內(nèi)存塊在此區(qū)間分配。(2)二級索引MAX_SLI(不超過5):MAX_SLI等于2的MAX_LOG2_SLI次方(MAX_LOG2_SLI為程序中計算方便定義的),二級索引將一級索引劃分的內(nèi)存區(qū)域按照線性再次劃分。MAX_SLI的值可人為設定,若MAX_SLI=3,則一級索引劃分的內(nèi)存區(qū)被平均劃分成8段。MAX_SLI的值越大,則將內(nèi)存區(qū)劃分得越細,但一般而言,MAX_SLI不超過5。若MAX_SLI的值超過5,則2的MAX_SLI次冪超過32,無法用位圖表示。(3)最小塊大小MBS(MBS=2FLI_OFFSET+1):這個參數(shù)是定義最小塊的大小,最小塊的大小一般定義為16Bytes,塊大小也可根據(jù)用戶的實際需求而更改。當MAX_FLI=31、MAX_SLI=3、MBS=32時,TLSF數(shù)據(jù)結構如圖1所示。其中,fl為一級索引值,s1為二級索引值。FL_Bitmap和SL_Bitmap表示位圖。該結構圖中的每一個方框為一條空閑鏈表,每條鏈表可鏈接多個空閑內(nèi)存塊,如104這個鏈表存儲空閑內(nèi)存大小為104~111之間的所有空閑內(nèi)存塊地址。TLSF算法的過程理論上為:初始化內(nèi)存函數(shù)init_memory_pool初始整個內(nèi)存池,并將總的空閑內(nèi)存塊存入二級鏈表中,即init_memory_pool之前,該內(nèi)存分配結構全空,沒有可用空閑內(nèi)存,init_memory_pool之后,在該結構中插入一個最大的可用空閑內(nèi)存,后面的申請過程中,將該大內(nèi)存塊不斷切割,插入鏈表中相應位置。TLSF算法結構圖如圖1所示。利用下述公式(1)確定所申請空閑內(nèi)存處于的鏈表位置:TLSF算法雖實時性好、內(nèi)存碎片率相對較小,但其三個參數(shù)(MAX_FLI、MAX_SLI、MBS)一旦設定好,其算法數(shù)據(jù)結構就固定不變了,無法根據(jù)實際的任務申請內(nèi)存大小情況做出調(diào)節(jié),從而造成了一定了內(nèi)存碎片和實時性的降低。例如當某個任務需要申請一系列小內(nèi)存時,若TLSF算法MAX_SLI設置較小(即劃分不夠精細),就會造成很多的內(nèi)存碎片,碎片率會很高。
    技術實現(xiàn)思路
    有鑒于此,本專利技術提供了一種針對嵌入式系統(tǒng)的內(nèi)存分配方法,在TLSF算法的基礎上進行了改進,加入了內(nèi)存分塊和參數(shù)自適應調(diào)節(jié),能夠根據(jù)申請大小來自適應調(diào)節(jié)每個內(nèi)存塊的內(nèi)存分配結構,碎片率低。為實現(xiàn)上述目的,本專利技術的一種針對嵌入式系統(tǒng)的內(nèi)存分配方法,包括如下步驟:首先進行內(nèi)存區(qū)間初始化:將整個內(nèi)存區(qū)間平均分為兩塊子區(qū)間,對每塊內(nèi)存子區(qū)間的MAX_FLI、MAX_SLI以及MBS參數(shù)值進行初始化;然后開始在第一塊內(nèi)存子區(qū)間內(nèi)進行內(nèi)存分配,并記錄每次內(nèi)存分配大?。划?shù)谝粔K內(nèi)存子區(qū)間分配完畢后,根據(jù)記錄的第一塊內(nèi)存子區(qū)間每次內(nèi)存分配大小,計算出即將到來的內(nèi)存分配大小預測值,根據(jù)預測值調(diào)節(jié)第二塊內(nèi)存子區(qū)間的MAX_SLI以及MBS參數(shù)值,并開始在第二塊內(nèi)存子區(qū)間中進行分配;當?shù)诙K內(nèi)存子區(qū)間分配完畢后,若第一塊內(nèi)存子區(qū)間全部釋放完畢,則根據(jù)記錄的第二塊內(nèi)存子區(qū)間每次內(nèi)存分配大小,計算出即將到來的內(nèi)存分配大小預測值,根據(jù)當前預測值調(diào)節(jié)第一塊內(nèi)存子區(qū)間的MAX_SLI以及MBS參數(shù)值,開始在第一塊內(nèi)存子區(qū)間中進行分配;若第一塊內(nèi)存本文檔來自技高網(wǎng)
    ...

    【技術保護點】
    1.一種針對嵌入式系統(tǒng)的內(nèi)存分配方法,其特征在于,包括如下步驟:/n首先進行內(nèi)存區(qū)間初始化:將整個內(nèi)存區(qū)間平均分為兩塊子區(qū)間,對每塊內(nèi)存子區(qū)間的MAX_FLI、MAX_SLI以及MBS參數(shù)值進行初始化;/n然后開始在第一塊內(nèi)存子區(qū)間內(nèi)進行內(nèi)存分配,并記錄每次內(nèi)存分配大?。?n當?shù)谝粔K內(nèi)存子區(qū)間分配完畢后,根據(jù)記錄的第一塊內(nèi)存子區(qū)間每次內(nèi)存分配大小,計算出即將到來的內(nèi)存分配大小預測值,根據(jù)預測值調(diào)節(jié)第二塊內(nèi)存子區(qū)間的MAX_SLI以及MBS參數(shù)值,并開始在第二塊內(nèi)存子區(qū)間中進行分配;/n當?shù)诙K內(nèi)存子區(qū)間分配完畢后,若第一塊內(nèi)存子區(qū)間全部釋放完畢,則根據(jù)記錄的第二塊內(nèi)存子區(qū)間每次內(nèi)存分配大小,計算出即將到來的內(nèi)存分配大小預測值,根據(jù)當前預測值調(diào)節(jié)第一塊內(nèi)存子區(qū)間的MAX_SLI以及MBS參數(shù)值,開始在第一塊內(nèi)存子區(qū)間中進行分配;若第一塊內(nèi)存子區(qū)間沒有完全釋放完畢,則不作調(diào)節(jié),直接開始在第一塊內(nèi)存子區(qū)間中進行分配。/n

    【技術特征摘要】
    1.一種針對嵌入式系統(tǒng)的內(nèi)存分配方法,其特征在于,包括如下步驟:
    首先進行內(nèi)存區(qū)間初始化:將整個內(nèi)存區(qū)間平均分為兩塊子區(qū)間,對每塊內(nèi)存子區(qū)間的MAX_FLI、MAX_SLI以及MBS參數(shù)值進行初始化;
    然后開始在第一塊內(nèi)存子區(qū)間內(nèi)進行內(nèi)存分配,并記錄每次內(nèi)存分配大??;
    當?shù)谝粔K內(nèi)存子區(qū)間分配完畢后,根據(jù)記錄的第一塊內(nèi)存子區(qū)間每次內(nèi)存分配大小,計算出即將到來的內(nèi)存分配大小預測值,根據(jù)預測值調(diào)節(jié)第二塊內(nèi)存子區(qū)間的MAX_SLI以及MBS參數(shù)值,并開始在第二塊內(nèi)存子區(qū)間中進行分配;
    當?shù)诙K內(nèi)存子區(qū)間分配完畢后,若第一塊內(nèi)存子區(qū)間全部釋放完畢,則根據(jù)記錄的第二塊內(nèi)存子區(qū)間每次內(nèi)存分配大小,計算出即將到來的內(nèi)存分配大小預測值,根據(jù)當前預測值調(diào)節(jié)第一塊內(nèi)存子區(qū)間的MAX_SLI以及MBS參數(shù)值,開始在第一塊內(nèi)存子區(qū)間中進行分配;若第一塊內(nèi)存子區(qū)間沒有完全釋放完畢,則不作調(diào)節(jié),直接開始在第一塊內(nèi)存子區(qū)間中進行分配。


    2.如權利要求1所述的針對嵌入式系統(tǒng)的內(nèi)存分配方法,其特征在于,采用加權移動平均濾波法計算出即將到來的分配內(nèi)存大小預測...

    【專利技術屬性】
    技術研發(fā)人員:高明晉,姚亞芬,周一青,石晶林
    申請(專利權)人:中科晶上蘇州信息技術有限公司
    類型:發(fā)明
    國別省市:江蘇;32

    網(wǎng)友詢問留言 已有0條評論
    • 還沒有人留言評論。發(fā)表了對其他瀏覽者有用的留言會獲得科技券。

    1
    主站蜘蛛池模板: 国产精品久久久久无码av| 高潮潮喷奶水飞溅视频无码| 国产AV巨作情欲放纵无码| 久久久亚洲精品无码| 91久久九九无码成人网站 | 色综合久久久久无码专区| 乱色精品无码一区二区国产盗| 少妇中文无码高清| 久久青草亚洲AV无码麻豆| 日韩av片无码一区二区三区不卡| 无码国产精成人午夜视频一区二区| 丰满爆乳无码一区二区三区| 人妻无码久久一区二区三区免费| 国产精品一区二区久久精品无码| 亚洲av无码一区二区三区天堂| 亚洲精品无码永久在线观看你懂的| 亚洲人成人无码.www石榴| 亚洲AV永久无码精品成人| 少妇性饥渴无码A区免费| 免费无码不卡视频在线观看| 人妻无码视频一区二区三区| 国产成人无码AV在线播放无广告| 亚洲AV无码久久精品色欲| 无码毛片内射白浆视频| 久久久无码精品亚洲日韩蜜臀浪潮| 成人无码视频97免费| 亚洲精品人成无码中文毛片 | 日韩AV无码久久一区二区| 狠狠噜天天噜日日噜无码| 国产乱人伦中文无无码视频试看| 免费无码一区二区三区| 无码丰满少妇2在线观看| 亚洲国产精品成人精品无码区在线| 国产成年无码v片在线| 日本精品人妻无码免费大全| 久久久久久久久免费看无码| 免费无码肉片在线观看| 黄色成人网站免费无码av| 国产精品无码免费播放| 少妇人妻av无码专区| 深夜a级毛片免费无码|