• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    一種基于機(jī)載嵌入式系統(tǒng)內(nèi)存動(dòng)態(tài)管理方式

    2019-07-16 03:14:59薛楠李斌王曉華楊明偉杜建華
    電腦知識(shí)與技術(shù) 2019年15期
    關(guān)鍵詞:嵌入式系統(tǒng)

    薛楠 李斌 王曉華 楊明偉 杜建華

    摘要:在嵌入式軟件開發(fā)和設(shè)計(jì)中,軟件的安全性和穩(wěn)定性是非常重要的,一個(gè)大型的嵌入式軟件是由各個(gè)不同功能的軟件子系統(tǒng)構(gòu)成的[1]。在眾多不同功能的軟件子系統(tǒng)中,內(nèi)存管理功能模塊是最重要的子功能模塊,也是其他子功能模塊的基礎(chǔ)[2]。該文提出了一種基于動(dòng)態(tài)內(nèi)存管理和分配的雙向鏈表管理方式,在動(dòng)態(tài)給定存儲(chǔ)地址和空間大小基礎(chǔ)上,根據(jù)實(shí)際需要,將存儲(chǔ)空間作為內(nèi)存池進(jìn)行動(dòng)態(tài)管理,實(shí)現(xiàn)功能包括動(dòng)態(tài)的內(nèi)存申請(qǐng)和釋放,以及給定地址內(nèi)存塊的查詢,高效、動(dòng)態(tài)地對(duì)內(nèi)存空間進(jìn)行操作。

    關(guān)鍵詞:嵌入式系統(tǒng);內(nèi)存管理;雙向鏈表

    中圖分類號(hào):TP309 ? ? ? ?文獻(xiàn)標(biāo)識(shí)碼:A

    文章編號(hào):1009-3044(2019)15-0281-02

    1 引言

    在嵌入式系統(tǒng)軟件開發(fā)過(guò)程中,由于嵌入式系統(tǒng)的特殊性,系統(tǒng)擁有的資源是十分有限的,但是又要滿足各個(gè)子系統(tǒng)功能的使用要求,這就要求對(duì)嵌入式系統(tǒng)資源進(jìn)行最高效、合理的使用[3]。內(nèi)存管理是嵌入式系統(tǒng)軟件開發(fā)中非常重要的子功能,由于資源的限制,內(nèi)存資源是否被合理利用并且高效利用已經(jīng)成為嵌入式軟件開發(fā)的核心[4]。

    在一般的靜態(tài)內(nèi)存管理中,嵌入式系統(tǒng)軟件可以使用操作系統(tǒng)封裝的內(nèi)存分配和內(nèi)存釋放接口,而其管理是經(jīng)過(guò)操作系統(tǒng)進(jìn)行的,并且內(nèi)存空間的首地址和大小一般也是固定的。開發(fā)者只可看到內(nèi)存空間是否分配成功、是否釋放成功和是否引起內(nèi)存泄露等[5]。動(dòng)態(tài)分配是根據(jù)實(shí)時(shí)需要,將一段動(dòng)態(tài)給定的地址空間作為一個(gè)內(nèi)存池,根據(jù)內(nèi)存池的首地址和長(zhǎng)度對(duì)內(nèi)存空間進(jìn)行合理化的動(dòng)態(tài)分段管理和使用。因此,內(nèi)存動(dòng)態(tài)管理方式相比內(nèi)存靜態(tài)管理方式更加靈活,內(nèi)存使用率也更高。本文提出一種機(jī)載嵌入式系統(tǒng)內(nèi)存動(dòng)態(tài)管理方式,使用雙向鏈表方式動(dòng)態(tài)對(duì)內(nèi)存空間進(jìn)行管理和操控,在內(nèi)存空間資源有限的前提下高效利用空間資源,并且極大程度減少內(nèi)存泄露的發(fā)生[6]。

    2 動(dòng)態(tài)內(nèi)存管理方案與設(shè)計(jì)

    2.1 內(nèi)存池初始化

    一般情況下,動(dòng)態(tài)內(nèi)存管理的方式是在系統(tǒng)需要時(shí),實(shí)時(shí)的根據(jù)給定的一段可用物理內(nèi)存空間的首地址和內(nèi)存空間長(zhǎng)度,通過(guò)一定的方式將物理內(nèi)存空間轉(zhuǎn)化成軟件可直接操控的空間,提供給軟件各個(gè)功能模塊使用[7]。本文提出的內(nèi)存管理方式,首先根據(jù)提供的可用內(nèi)存首地址和內(nèi)存長(zhǎng)度,根據(jù)字節(jié)對(duì)齊將這段內(nèi)存空間分配為一個(gè)分段連續(xù)的內(nèi)存池空間,可看作連續(xù)的內(nèi)存塊組。根據(jù)多少字節(jié)對(duì)齊可以由需求動(dòng)態(tài)決定,對(duì)齊的字節(jié)個(gè)數(shù)保持和每次需要申請(qǐng)空間的大小一致,或可將需要的內(nèi)存空間大小整除,可將內(nèi)存充分使用,避免內(nèi)存碎片的產(chǎn)生。使用過(guò)程中也可以根據(jù)需要針對(duì)同一個(gè)內(nèi)存空間,使用不同的對(duì)齊字節(jié)分配多個(gè)子內(nèi)存池來(lái)滿足使用。

    定義一個(gè)雙向鏈表結(jié)構(gòu)體變量指針,作為第一個(gè)結(jié)構(gòu)體變量,其中的內(nèi)存空間變量指針指向內(nèi)存池內(nèi)存塊組的第一個(gè)內(nèi)存塊,結(jié)構(gòu)體變量中保存了直接前驅(qū)和直接后繼兩個(gè)結(jié)構(gòu)體的指針(初始都為NULL),以及當(dāng)前結(jié)構(gòu)體變量指針?biāo)竷?nèi)存塊和當(dāng)前結(jié)構(gòu)體的直接后繼結(jié)構(gòu)體變量所指向內(nèi)存塊之間的內(nèi)存塊使用與否的標(biāo)志變量(初始為未使用)以及內(nèi)存塊個(gè)數(shù)(初始為所有內(nèi)存塊) 。

    2.2 給定大小內(nèi)存空間申請(qǐng)

    當(dāng)需要申請(qǐng)內(nèi)存空間時(shí),首先找到當(dāng)前結(jié)構(gòu)體變量,并計(jì)算需申請(qǐng)的內(nèi)存空間需要使用多少個(gè)內(nèi)存塊。先判斷當(dāng)前結(jié)構(gòu)體變量指向的內(nèi)存中剩余的內(nèi)存塊個(gè)數(shù)是否大于需要申請(qǐng)的內(nèi)存空間所使用的內(nèi)存塊個(gè)數(shù)并且剩余內(nèi)存塊組使用標(biāo)志位是否為未使用,然后申請(qǐng)一個(gè)新的雙向鏈表結(jié)構(gòu)體變量指針,新結(jié)構(gòu)體變量指針的內(nèi)存空間變量指針指向的地址空間為當(dāng)前的結(jié)構(gòu)體變量指向的內(nèi)存塊地址向后偏移一段長(zhǎng)度,此長(zhǎng)度為需要申請(qǐng)的內(nèi)存空間所使用的內(nèi)存塊個(gè)數(shù),其直接前驅(qū)指針指向當(dāng)前的結(jié)構(gòu)體變量,直接后繼指針指向當(dāng)前結(jié)構(gòu)體變量的直接后繼結(jié)構(gòu)體變量,其當(dāng)前可用內(nèi)存塊個(gè)數(shù)為當(dāng)前結(jié)構(gòu)體變量中保存的內(nèi)存塊個(gè)數(shù)減去需要申請(qǐng)的內(nèi)存空間所使用的內(nèi)存塊個(gè)數(shù)后余下的內(nèi)存塊個(gè)數(shù),并將當(dāng)前結(jié)構(gòu)體變量中的內(nèi)存塊使用與否標(biāo)記為使用,將新的結(jié)構(gòu)體變量中的內(nèi)存塊使用與否標(biāo)記為未使用。最后將當(dāng)前結(jié)構(gòu)體變量指向的內(nèi)存塊地址傳出給外部使用,并將新的結(jié)構(gòu)體變量當(dāng)作當(dāng)前的結(jié)構(gòu)體變量;若剛開始當(dāng)前結(jié)構(gòu)體變量指向的內(nèi)存塊使用標(biāo)志為已使用或可用內(nèi)存塊個(gè)數(shù)不夠,則繼續(xù)尋找下一個(gè)結(jié)構(gòu)體變量,若為空則當(dāng)前結(jié)構(gòu)體變量取值為指向第一個(gè)內(nèi)存塊的結(jié)構(gòu)體變量,實(shí)現(xiàn)內(nèi)存空間的環(huán)形尋址使用。

    作為舉例,根據(jù)系統(tǒng)需要對(duì)齊的字節(jié)長(zhǎng)度為a。假設(shè)當(dāng)前分配好的內(nèi)存池大小為a*n,總共可分配n個(gè)內(nèi)存塊?,F(xiàn)在已申請(qǐng)3a大小內(nèi)存塊基礎(chǔ)上需再申請(qǐng)2a大小的內(nèi)存塊,具體流程圖如圖1所示,灰色內(nèi)存塊標(biāo)注已使用。

    若后面需申請(qǐng)的內(nèi)存空間大小所需內(nèi)存塊個(gè)數(shù)超過(guò)n-5,當(dāng)前結(jié)構(gòu)體變量指針中標(biāo)記的剩余內(nèi)存塊個(gè)數(shù)不夠,且當(dāng)前結(jié)構(gòu)體變量指針的直接后繼指針為空,則將第一個(gè)結(jié)構(gòu)體變量First標(biāo)記為當(dāng)前結(jié)構(gòu)體變量指針,繼續(xù)之前操作。

    2.3 釋放給定地址內(nèi)存塊

    當(dāng)需要釋放內(nèi)存空間時(shí),首先根據(jù)內(nèi)存地址尋找其在內(nèi)存池中所對(duì)應(yīng)的內(nèi)存塊,并找到保存這個(gè)內(nèi)存塊首地址的目標(biāo)結(jié)構(gòu)體變量。將目標(biāo)結(jié)構(gòu)體變量使用標(biāo)志設(shè)為未使用,然后取目標(biāo)結(jié)構(gòu)體變量的直接前驅(qū)和直接后繼兩個(gè)結(jié)構(gòu)體變量指針,若前后兩個(gè)結(jié)構(gòu)體變量所指向的內(nèi)存塊組均不為空,并且使用標(biāo)志位和目標(biāo)結(jié)構(gòu)體指向的內(nèi)存塊一致,則將此三個(gè)結(jié)構(gòu)體變量合成為一個(gè),并將其中的所有內(nèi)存塊合并為一整個(gè)內(nèi)存塊,指針指向此內(nèi)存塊的結(jié)構(gòu)體變量設(shè)置為當(dāng)前結(jié)構(gòu)體變量;若目標(biāo)結(jié)構(gòu)體變量的直接前驅(qū)或直接后繼結(jié)構(gòu)體變量所指向內(nèi)存塊組的使用標(biāo)志位和目標(biāo)結(jié)構(gòu)體變量不一致,則不對(duì)使用標(biāo)志位不一致的結(jié)構(gòu)體變量以及對(duì)應(yīng)的內(nèi)存塊組進(jìn)行合并。作為舉例,要釋放第二個(gè)結(jié)構(gòu)體變量指針指向的內(nèi)存塊組,內(nèi)存塊組有兩個(gè)內(nèi)存塊,如圖2所示:

    首先將目標(biāo)結(jié)構(gòu)體變量標(biāo)記的內(nèi)存塊組使用標(biāo)記設(shè)置為未使用,然后修改其直接前驅(qū)和直接后繼的頭尾指針,將目標(biāo)結(jié)構(gòu)體變量中包含的可用內(nèi)存塊組個(gè)數(shù)疊加到其直接前驅(qū)結(jié)構(gòu)體變量中,將目標(biāo)結(jié)構(gòu)體變量和其直接前驅(qū)結(jié)構(gòu)體變量合稱為一個(gè)結(jié)構(gòu)體變量,描述為當(dāng)前結(jié)構(gòu)體變量。最后用同樣方式,將當(dāng)前結(jié)構(gòu)體變量和直接后繼結(jié)構(gòu)體變量合成為一個(gè)結(jié)構(gòu)體變量,描述為當(dāng)前結(jié)構(gòu)體變量。具體流程圖如圖3所示:

    釋放指定內(nèi)存塊,就是將指向其地址的結(jié)構(gòu)體變量和其直接前驅(qū)以及直接后繼三個(gè)結(jié)構(gòu)體變量進(jìn)行合成,疊加其可用內(nèi)存塊個(gè)數(shù),并釋放其所指內(nèi)存塊組。

    3 結(jié)束語(yǔ)

    本文提出了一種基于嵌入式系統(tǒng)的動(dòng)態(tài)內(nèi)存管理方式,該方法可以實(shí)現(xiàn)內(nèi)存的動(dòng)態(tài)管理,和內(nèi)存高效、高速申請(qǐng)和釋放,通過(guò)實(shí)時(shí)傳入的空間地址、空間大小以及實(shí)時(shí)需要,動(dòng)態(tài)申請(qǐng)分配內(nèi)存池,并且使用雙向鏈表結(jié)構(gòu)體指針來(lái)動(dòng)態(tài)管理內(nèi)存池,保證了內(nèi)存空間使用的合理性以及連續(xù)性,很大程度上避免了內(nèi)存碎片的產(chǎn)生,并且保證了內(nèi)存管理功能模塊的穩(wěn)定性和整個(gè)嵌入式軟件的安全性。經(jīng)過(guò)測(cè)試本文提出的動(dòng)態(tài)內(nèi)存管理方式是一種高效、綜合性能好內(nèi)存管理方式,可作為一種內(nèi)存管理方案滿足嵌入式系統(tǒng)軟件使用要求。

    參考文獻(xiàn):

    [1] 田令平.嵌入式操作系統(tǒng)內(nèi)存管理研究[J].電腦知識(shí)與技術(shù), 2006(4):169-171.

    [2] 符麗枚,陳世航.嵌入式軟件運(yùn)行內(nèi)存余量測(cè)試方法[J].自動(dòng)化應(yīng)用,2014(11):6-8.

    [3] 陸小雙,帥建梅,吳慶響.一種新的面向?qū)ο蟪绦虻膬?nèi)存管理器[J].計(jì)算機(jī)工程,2012,38(9):21-23.

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

    [5] 楊磊,汪仁煌,劉洪江,黃穎怡.使用Visual Leak Detector檢測(cè)C/C++程序內(nèi)存泄漏[J].電腦與電信,2008(07).

    [6] 陳力軍,魏永軍,迮超.一種內(nèi)存管理系統(tǒng)及其分配方法[P].中國(guó)專利號(hào):01139150.2,2001.

    [7] 魏海濤,姜昱明,李建武等.內(nèi)存管理機(jī)制的高效實(shí)現(xiàn)研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(16):3708-3712.

    【通聯(lián)編輯:代影】

    猜你喜歡
    嵌入式系統(tǒng)
    Teaching Research on IoT and—Embedded System of Software Engineering
    基于Xilinx口袋實(shí)驗(yàn)室的組合邏輯電路設(shè)計(jì)實(shí)驗(yàn)
    面向應(yīng)用的智能專業(yè)嵌入式系統(tǒng)教學(xué)
    基于物聯(lián)網(wǎng)的遠(yuǎn)程紅外控制器
    嵌入式系統(tǒng)軟件開發(fā)技術(shù)探析
    基于AVR單片機(jī)的SPI接口設(shè)計(jì)與實(shí)現(xiàn)
    辦公自動(dòng)化系統(tǒng)的設(shè)計(jì)
    嵌入式系統(tǒng)在醫(yī)療器械中的應(yīng)用分析
    基于物聯(lián)網(wǎng)項(xiàng)目驅(qū)動(dòng)的嵌入式系統(tǒng)教學(xué)改革的研究與實(shí)踐
    嵌入式系統(tǒng)課程“中斷、異常與事件”教學(xué)實(shí)踐及啟示
    綦江县| 稷山县| 察隅县| 衡东县| 吴川市| 凤城市| 太白县| 峡江县| 和龙市| 尖扎县| 榕江县| 牡丹江市| 海口市| SHOW| 泗洪县| 华容县| 科尔| 读书| 城市| 平乡县| 金坛市| 乳山市| 海南省| 大丰市| 淳安县| 曲阜市| 金堂县| 乌兰县| 米脂县| 晴隆县| 大足县| 敖汉旗| 客服| 普定县| 沐川县| 濮阳市| 利津县| 敦化市| 崇义县| 太仆寺旗| 宜兰市|