• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      Z—Stack內(nèi)存管理算法的改進(jìn)研究

      2017-04-18 18:15:39鄧慧郭改枝
      軟件導(dǎo)刊 2017年2期

      鄧慧 郭改枝

      摘要 研究了ZigBee協(xié)議棧中的內(nèi)存管理算法,并結(jié)合典型內(nèi)存管理算法TLSF(Two-level Segregated Fit)兩位標(biāo)志位管理內(nèi)存思想,對(duì)Z-Stack內(nèi)存管理算法進(jìn)行了改進(jìn),該改進(jìn)算法同時(shí)又對(duì)內(nèi)存分配和釋放時(shí)的指針進(jìn)行動(dòng)態(tài)修改。IAR調(diào)試驗(yàn)證分析表明,該改進(jìn)算法提高了內(nèi)存分配速度和內(nèi)存利用率。

      關(guān)鍵詞 ZigBee;內(nèi)存管理;內(nèi)存利用率;內(nèi)存分配速度

      DOI DOI: 10.11907/rjdk.162529

      中圖分類(lèi)號(hào): TP311

      文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào) 文章編號(hào): 16727800(2017)002005103

      0 引言

      國(guó)內(nèi)外對(duì)Z-Stack內(nèi)存管理算法研究較少,現(xiàn)有的文獻(xiàn)[12]只是原理闡述,并沒(méi)有作出改進(jìn)。然而,Z-Stack內(nèi)存管理算法又存在內(nèi)存資源有限、內(nèi)存分配速度慢等問(wèn)題。本文針對(duì)上述問(wèn)題對(duì)Z-Stack內(nèi)存管理算法進(jìn)行了改進(jìn)。通過(guò)動(dòng)態(tài)修改指針和使用多位標(biāo)志位,優(yōu)化Z-Stack內(nèi)存管理算法,部分解決了低成本、內(nèi)存資源有限的ZigBee嵌入式系統(tǒng)內(nèi)存利用率和分配速度問(wèn)題。

      1 Z-Stack內(nèi)存管理算法分析

      1.1 內(nèi)存初始化

      實(shí)際應(yīng)用中,通常根據(jù)ZigBee設(shè)備功能不同而分配不同大小的內(nèi)存空間,本文以協(xié)調(diào)器(MAXMEMHEAP =3072B)為例進(jìn)行算法分析。

      在算法中,每次申請(qǐng)內(nèi)存將第一個(gè)2字節(jié)(2B)設(shè)置為內(nèi)存控制頭。其中最高位為標(biāo)志位,標(biāo)識(shí)以此內(nèi)存分配控制頭開(kāi)始的內(nèi)存區(qū)域是否被使用。根據(jù)Z-Stack的配置,小塊內(nèi)存大小設(shè)置為232B,大塊和小塊之間的分界區(qū)為2B,還有避免內(nèi)存泄漏2B,剩余字節(jié)數(shù)為大塊內(nèi)存2836字節(jié)。Z-Stack內(nèi)存初始化具體步驟如下:①將指針移動(dòng)到內(nèi)存塊的最后2B位置,數(shù)值設(shè)置為0以避免內(nèi)存溢出;②將頭指針移動(dòng)到內(nèi)存塊的起始位置,設(shè)置小塊內(nèi)存大小為232;③將指針移動(dòng)到小塊內(nèi)存結(jié)束處,設(shè)置大塊內(nèi)存大小為2838;④在大塊內(nèi)存起始處,申請(qǐng)只有控制頭的2B空間,為了避免小塊內(nèi)存與大塊內(nèi)存合并分界區(qū),將大塊內(nèi)存大小修改為2836。

      內(nèi)存初始化完成之后如圖1所示。用箭頭標(biāo)出內(nèi)存塊的標(biāo)志位為1,其它部分內(nèi)存塊標(biāo)志位都為0,內(nèi)存具體大小為條形框中的數(shù)值。

      1.2 動(dòng)態(tài)內(nèi)存分配和釋放

      內(nèi)存分配主要分為兩個(gè)階段:①空閑內(nèi)存區(qū)間查找階段[3];②修改內(nèi)存控制頭信息。

      動(dòng)態(tài)內(nèi)存分配步驟如下: ①檢查申請(qǐng)內(nèi)存的大?。╯ize):如果size小于等于16,則從小塊內(nèi)存開(kāi)始查找;否則,從大塊內(nèi)存開(kāi)始查找;②如果查找到的內(nèi)存塊正在使用,則累加標(biāo)志位coal置0(不累加),繼續(xù)查找下一塊;否則判斷當(dāng)前內(nèi)存是否大于等于size。如果大于等于size,則跳出循環(huán);否則,記錄當(dāng)前指針,繼續(xù)尋找下一塊空閑內(nèi)存并進(jìn)行合并,直到當(dāng)前內(nèi)存大于等于size或查找到避免內(nèi)存溢出塊才跳出循環(huán);③如果該塊空閑內(nèi)存比size大4B或更多,則進(jìn)行內(nèi)存分割;④如果申請(qǐng)內(nèi)存成功,則將新申請(qǐng)到的內(nèi)存標(biāo)志位置1,返回可用內(nèi)存空間指針;否則,指針?lè)祷豊ULL。

      動(dòng)態(tài)內(nèi)存釋放步驟如下:①內(nèi)存指針向上移動(dòng)一個(gè)單位;②將標(biāo)志位置0;③判斷指向小塊內(nèi)存的指針是否大于當(dāng)前指針:如果大于當(dāng)前小塊指針,則將該指針調(diào)整到當(dāng)前指針位置。

      2 Z-Stack內(nèi)存管理算法改進(jìn)與實(shí)現(xiàn)

      2.1 動(dòng)態(tài)修改指針

      在Z-Stack內(nèi)存管理算法中,每一次內(nèi)存分配都是從小塊或大塊內(nèi)存的開(kāi)始處查找,而不是從第一個(gè)可分配內(nèi)存空間開(kāi)始查找,嚴(yán)重影響了查找速度。本文基于此,在內(nèi)存分配和釋放時(shí),將起始查找指針進(jìn)行動(dòng)態(tài)修改,避免申請(qǐng)小塊或大塊靠下部分內(nèi)存時(shí),多次查找小塊或大塊靠上部分已使用內(nèi)存塊而浪費(fèi)時(shí)間。

      內(nèi)存申請(qǐng)時(shí),如果size≤16,則從小塊內(nèi)存開(kāi)始查找;否則,從大塊內(nèi)存開(kāi)始查找。當(dāng)查找到合適的內(nèi)存塊時(shí),判斷該內(nèi)存塊是否大于等于size。當(dāng)該塊內(nèi)存比size大4B或更多時(shí),進(jìn)行內(nèi)存分割。內(nèi)存分割后,如果size≤16,則小塊指針修改為分割后未使用內(nèi)存起始處;否則,則修改大塊指針為分割后未使用內(nèi)存起始處。

      當(dāng)內(nèi)存釋放時(shí),如果是分界區(qū)和避免內(nèi)存溢出塊,則指針不修改。否則,如果小塊指針大于當(dāng)前指針,則將小塊指針修改到當(dāng)前指針處;否則,大塊指針大于當(dāng)前指針,則將大塊指針修改到當(dāng)前指針處。

      申請(qǐng)內(nèi)存時(shí),向下修改指針;釋放內(nèi)存時(shí),向上修改指針。這樣對(duì)大塊和小塊內(nèi)存指針進(jìn)行動(dòng)態(tài)修改,可以使得下次申請(qǐng)內(nèi)存時(shí)從第一塊未使用的內(nèi)存開(kāi)始查找,避免了原算法從大塊或小塊開(kāi)始處查找。動(dòng)態(tài)修改指針?lè)譃閮?nèi)存分配和釋放兩部分,如圖2和圖3所示。

      按照上述內(nèi)存分配程序流程執(zhí)行,在IAR調(diào)試程序時(shí)得到圖4和圖5結(jié)果。綠色代碼行表示下步執(zhí)行到該行。圖4表明內(nèi)存分割后,向下修改小塊指針。圖5表明內(nèi)存分割后,向下修改大塊指針。結(jié)果表明指針向下修改成功。

      按照上述內(nèi)存釋放的程序流程執(zhí)行,在IAR調(diào)試程序時(shí)得到圖6和圖7結(jié)果。圖6和圖7下一步都會(huì)執(zhí)行綠色代碼行。圖6表明小塊指針大于當(dāng)前指針,將小塊指針修改到當(dāng)前指針處;圖7表明大塊指針大于當(dāng)前指針,將大塊指針修改到當(dāng)前指針處。

      2.2 多位標(biāo)志位

      內(nèi)存分配時(shí),如果申請(qǐng)1B大小,先查看分界區(qū)和避免內(nèi)存溢出塊中后一個(gè)字節(jié)是否使用。如果沒(méi)有使用,則返回分界區(qū)或避免內(nèi)存溢出的指針;否則,按照原算法查找。按照改進(jìn)算法,可以節(jié)省4B節(jié)空間,提高內(nèi)存利用率0.13%。本文以3072B為例,如果內(nèi)存空間更小,則內(nèi)存利用率會(huì)更高。

      在內(nèi)存管理中,原算法只用到了一位標(biāo)志位,不能很好利用有限的內(nèi)存空間。借鑒TLSF算法[45]的兩位標(biāo)志位思想,使用多位標(biāo)志位實(shí)現(xiàn)對(duì)內(nèi)存空間的管理,以提高內(nèi)存空間利用率,減少內(nèi)存碎片。改進(jìn)后的算法用控制頭2B中最高3位表示標(biāo)志位,具體方法如下:①普通塊(除了分界區(qū)和避免內(nèi)存泄露的兩塊內(nèi)存):未使用的用000表示,使用的用100表示;②分界區(qū):未使用的用101表示,使用的用111表示;③避免內(nèi)存泄露塊:未使用的用001表示,使用的用011表示。

      改進(jìn)算法的內(nèi)存初始化完成后,控制頭后13位表示內(nèi)存大小的具體數(shù)值如圖8條形框中所示,3位標(biāo)志位為圖8箭頭右邊所示。

      先判斷分界區(qū)和避免內(nèi)存溢出塊是否使用,如果使用,則按照原算法基本思想執(zhí)行。如果第一位標(biāo)志位為0并且第三位標(biāo)志位為1,則返回空,說(shuō)明沒(méi)有查找到合適空間用來(lái)分配;如果查找到分界區(qū),按照原算法思想跳過(guò)該內(nèi)存區(qū),在大塊內(nèi)存繼續(xù)查找。多位標(biāo)志位程序流程如圖9所示。

      3 結(jié)語(yǔ)

      本文對(duì)Z-Stack內(nèi)存管理算法進(jìn)行了改進(jìn),在調(diào)試(debugger)模式下選擇Auto查看變量的變化值。分析了變量值的正確性,證明改進(jìn)算法在保證原算法正常使用的基礎(chǔ)上,Z-Stack能夠穩(wěn)定工作,沒(méi)有出現(xiàn)內(nèi)存溢出現(xiàn)象,減少了內(nèi)存空間的浪費(fèi),提高了協(xié)議棧的處理速度,有效解決了Z-Stack內(nèi)存利用率和內(nèi)存分配速度兩大重要問(wèn)題。

      參考文獻(xiàn):

      [1] 吳瑛.ZigBee通信協(xié)議棧中的內(nèi)存和時(shí)間管理技術(shù)研究[J].計(jì)算機(jī)時(shí)代,2008(9):6062.

      [2] FORTINO G,GALZARANO S,GIANNANTONIO R,et al.Spinebased application development on heterogeneous wireless body sensor networks[EB/OL].http://xueshu.baidu.com/s?wd=paperuri:(2f7ac6f1d337f00f9c1ac3389b808d15)&filter,2010.

      [3] 王冬慧,韓建民,莊嘉琪.基于線段樹(shù)的高效內(nèi)存管理算法及其空間優(yōu)化[J].計(jì)算機(jī)應(yīng)用,2015,35(12):33683373.

      [4] 吳文峰.嵌入式實(shí)時(shí)系統(tǒng)動(dòng)態(tài)內(nèi)存分配管理器的設(shè)計(jì)與實(shí)現(xiàn)[D].重慶: 重慶大學(xué),2013.

      [5] 陳君,樊皓,吳京洪.基于TLSF算法改進(jìn)的動(dòng)態(tài)內(nèi)存管理算法研究[J].網(wǎng)絡(luò)新媒體技術(shù),2016(3):4649.

      (責(zé)任編輯:杜能鋼)

      莆田市| 元朗区| 方城县| 威宁| 句容市| 邵阳县| 石嘴山市| 浑源县| 二手房| 江都市| 石城县| 西华县| 江陵县| 固始县| 吉首市| 望奎县| 乌海市| 武义县| 北票市| 海兴县| 大洼县| 关岭| 竹山县| 长泰县| 五大连池市| 龙南县| 安平县| 秦安县| 东安县| 怀宁县| 五台县| 博乐市| 恩施市| 宁城县| 金塔县| 保靖县| 隆德县| 凤台县| 平陆县| 揭东县| 万荣县|