0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

嵌入式RTOS的內(nèi)存管理機(jī)制的實(shí)現(xiàn)方案和進(jìn)行改善設(shè)計(jì)

電子設(shè)計(jì) ? 來源:單片機(jī)與嵌入式系統(tǒng)應(yīng)用 ? 作者:葉新棟 , 唐志強(qiáng) ? 2020-08-12 09:03 ? 次閱讀

引 言

嵌入式領(lǐng)域中,嵌入式實(shí)時(shí)操作系統(tǒng)RTOS)正得到越來越廣泛的應(yīng)用。采用嵌入式實(shí)時(shí)操作系統(tǒng)可以更合理、更有效地利用CPU的資源,簡化應(yīng)用軟件的設(shè)計(jì),縮短系統(tǒng)開發(fā)時(shí)間,更好地保證系統(tǒng)的實(shí)時(shí)性和可靠性。內(nèi)存資源作為嵌入式系統(tǒng)中極為重要的資源之一,其管理機(jī)制歷來是嵌入式系統(tǒng)設(shè)計(jì)的重點(diǎn)和難點(diǎn)。內(nèi)存管理機(jī)制的優(yōu)劣程度極大地影響著嵌入式系統(tǒng)的整體性能,因此在嵌入式RTOS的內(nèi)存管理機(jī)制中必須滿足以下3個(gè)要求:

①實(shí)時(shí)性。在嵌入式RTOS中不僅要求調(diào)度機(jī)制的實(shí)時(shí)性,資源的分配和回收的實(shí)時(shí)性也十分重要。

②可靠性。嵌入式系統(tǒng)的應(yīng)用領(lǐng)域決定了嵌入式RTOS必須具有高可靠性,而內(nèi)存管理的可靠程度直接影響RTOS的可靠性,因此內(nèi)存管理的可靠性也必不可少。

③高效性。由于嵌入式系統(tǒng)資源的稀缺性,因而高效的資源管理機(jī)制也同等重要。

1 動(dòng)態(tài)分區(qū)內(nèi)存管理機(jī)制

1.1 動(dòng)態(tài)分區(qū)內(nèi)存管理概述

在許多小型嵌入式系統(tǒng)中并未實(shí)現(xiàn)虛擬內(nèi)存機(jī)制,動(dòng)態(tài)分區(qū)內(nèi)存管理機(jī)制仍然是首選。分區(qū)存儲(chǔ)管理是滿足多道程序設(shè)計(jì)的最簡單的存儲(chǔ)管理方法,它允許多個(gè)用戶程序同時(shí)存在系統(tǒng)內(nèi)存中,即共享內(nèi)存空間。早期的分區(qū)存儲(chǔ)管理采用固定分區(qū)的方法,把內(nèi)存空間分成若干個(gè)大小不等的區(qū)域,稱為分區(qū)。每個(gè)用戶程序(作業(yè)、進(jìn)程)調(diào)入內(nèi)存后,占用其中1個(gè)分區(qū),程序運(yùn)行完成后釋放該分區(qū)。這種存儲(chǔ)管理方法的主要問題是內(nèi)存使用效率極低,很快就被淘汰了。取而代之的是動(dòng)態(tài)分區(qū)存儲(chǔ)管理技術(shù)。圖1顯示的是動(dòng)態(tài)內(nèi)存管理的數(shù)據(jù)結(jié)構(gòu)。

嵌入式RTOS的內(nèi)存管理機(jī)制的實(shí)現(xiàn)方案和進(jìn)行改善設(shè)計(jì)

1.2 動(dòng)態(tài)分區(qū)內(nèi)存分收算法及其性能分析

在動(dòng)態(tài)內(nèi)存分配機(jī)制中一般采用兩種設(shè)計(jì)方案:最佳適應(yīng)算法和首次適應(yīng)算法。最佳適應(yīng)算法要求所有的空閑內(nèi)存塊按照內(nèi)存塊的大小,由小到大鏈接在一起。首次適應(yīng)算法中所有的空閑內(nèi)存塊都是按地址由小到大鏈接的。圖2顯示了這2種算法的流程(假設(shè)系統(tǒng)申請(qǐng)的內(nèi)存塊大小為n)。

最佳適應(yīng)算法和首次適應(yīng)算法在分配內(nèi)存的流程上是一致的,然而由于空閑內(nèi)存塊的組織形式不同,其分配的性能也不盡相同。最佳適應(yīng)算法由于每次分配都是首先分配與所要求的內(nèi)存塊大小最接近的空閑內(nèi)存塊,因而其內(nèi)存利用率相對(duì)較高。然而由于在內(nèi)存回收過程中需要合并那些地址相鄰的空閑塊,最佳適應(yīng)算法往往需要遍歷整個(gè)空閑區(qū)鏈表以尋找符合條件的內(nèi)存塊。而首次適應(yīng)算法由于是按照地址的順序相連,因而在內(nèi)存回收方面有著最佳適應(yīng)算法無法比擬的性能。

圖3顯示了在幾種不同情況下,動(dòng)態(tài)分區(qū)內(nèi)存回收機(jī)制所采取的策略。

在A中,釋放區(qū)回收后合并成新內(nèi)存塊f,其首地址為f1內(nèi)存塊的首地址,大小為f1和R內(nèi)存塊的大小之和。在B中,釋放區(qū)回收后合并成新內(nèi)存塊f,其首地址為R內(nèi)存塊的首地址,大小為f1和R內(nèi)存塊的大小之和。在C中,釋放區(qū)回收后合并成新內(nèi)存塊f,其首地址為f1內(nèi)存塊的首地址,大小為f1和R以及f2內(nèi)存塊的大小之和。在D中,釋放區(qū)回收后不進(jìn)行合并,直接插入空閑區(qū)鏈表并返回。

動(dòng)態(tài)分區(qū)內(nèi)存的分配機(jī)制有效地避免了內(nèi)存內(nèi)部碎片的存在,同時(shí)在內(nèi)存回收策略中使用合并算法也極大地減少了內(nèi)存外部碎片存在的可能性。然而,當(dāng)系統(tǒng)需要分配大量的小塊內(nèi)存時(shí),動(dòng)態(tài)分區(qū)內(nèi)存管理機(jī)制的性能卻并不令人滿意。其不足之處主要存在以下2個(gè)方面:

①當(dāng)系統(tǒng)分配大量的小塊內(nèi)存后,其空閑區(qū)表或空閑區(qū)隊(duì)列將會(huì)變得異常龐大。無論是首次適配算法還是最佳適應(yīng)算法都需要遍歷空閑區(qū)搜索合適的內(nèi)存塊,因此過于龐大的空閑區(qū)結(jié)構(gòu)使搜索算法變得低效。

②系統(tǒng)在某些特定的時(shí)刻往往會(huì)對(duì)大量的小塊內(nèi)存進(jìn)行頻繁分配和回收。頻繁地對(duì)小塊內(nèi)存進(jìn)行分割分配和合并回收,其實(shí)時(shí)性表現(xiàn)得并不令人滿意。

基于以上2點(diǎn),如何在動(dòng)態(tài)分區(qū)內(nèi)存管理機(jī)制的基礎(chǔ)上優(yōu)化小塊內(nèi)存的管理機(jī)制,成為提高動(dòng)態(tài)分區(qū)內(nèi)存管理性能的關(guān)鍵因素之一。

2 小塊內(nèi)存動(dòng)態(tài)緩存分配機(jī)制

大部分實(shí)時(shí)操作系統(tǒng)內(nèi)存分配機(jī)制并未對(duì)大塊內(nèi)存和小塊內(nèi)存的分配做出不同的算法設(shè)計(jì),然而在實(shí)際分配過程中,很難用一種分配算法兼顧大小內(nèi)存的高效分配。針對(duì)動(dòng)態(tài)分區(qū)內(nèi)存管理機(jī)制中對(duì)小塊內(nèi)存分配的局限性,提出了小塊內(nèi)存動(dòng)態(tài)緩存機(jī)制。該機(jī)制在繼承了動(dòng)態(tài)分區(qū)管理機(jī)制優(yōu)良性能的同時(shí),優(yōu)化了小塊內(nèi)存的管理,對(duì)內(nèi)存管理的實(shí)時(shí)性和高效性都有一定提高。系統(tǒng)中同時(shí)存在2種內(nèi)存數(shù)據(jù)結(jié)構(gòu),分別為小塊內(nèi)存和大塊內(nèi)存設(shè)計(jì)。大塊內(nèi)存依舊采取動(dòng)態(tài)分區(qū)內(nèi)存管理機(jī)制,而小塊內(nèi)存采取動(dòng)態(tài)緩存分配。小塊內(nèi)存數(shù)據(jù)結(jié)構(gòu)如圖4所示。

假設(shè)小塊內(nèi)存最小為1字節(jié),并以2的指數(shù)遞增,最大為512字節(jié)。這也就意味著當(dāng)系統(tǒng)需要分配或釋放小于或等于512字節(jié)的內(nèi)存時(shí),會(huì)執(zhí)行小塊內(nèi)存操作。圖5和圖6分別是小塊內(nèi)存的分配和回收流程(圖中j代表需操作的小塊內(nèi)存對(duì)應(yīng)的緩存號(hào),若申請(qǐng)120字節(jié)則j對(duì)應(yīng)為8;min代表小塊內(nèi)存最大的緩存號(hào),如圖中min=9)。

圖7是對(duì)小塊內(nèi)存操作算法的簡單模擬。小塊內(nèi)存緩存區(qū)從上到下依次緩存512~64字節(jié)的內(nèi)存塊。有4個(gè)操作過程:分配64字節(jié)→分配128字節(jié)→回收64字節(jié)→回收128字節(jié)。

①分配64字節(jié)。初始狀態(tài)小塊內(nèi)存緩存區(qū)為空,此時(shí)將會(huì)執(zhí)行大塊內(nèi)存分配操作并將1 KB內(nèi)存分割緩存到小塊內(nèi)存緩存區(qū)。在分配64字節(jié)內(nèi)存時(shí),系統(tǒng)自動(dòng)探測(cè)到了128字節(jié)、256字節(jié)和512字節(jié)處的緩存區(qū)已經(jīng)處于饑餓狀態(tài),因此也將會(huì)分配其緩存區(qū)1塊內(nèi)存。

②分配128字節(jié)。由于系統(tǒng)存在該大小的緩存,因此直接獲取并返回。

③回收64字節(jié)。由于釋放后,系統(tǒng)中64字節(jié)大小的內(nèi)存塊可以合并,因此合并后鏈入上一級(jí)緩存區(qū)。

④回收128字節(jié)。內(nèi)存塊再次進(jìn)行合并操作,最終調(diào)用大塊內(nèi)存釋放操作,從而回到原始態(tài)。

圖7所示的內(nèi)存操作只是一個(gè)非常簡單的模擬,實(shí)際系統(tǒng)內(nèi)存的分配和回收是非常復(fù)雜和不確定的,而小塊內(nèi)存動(dòng)態(tài)緩存分配機(jī)制的性能在這種情況下表現(xiàn)得尤為突出??傮w而言其具有以下幾點(diǎn)優(yōu)勢(shì):

①快速性。因?yàn)槭褂昧司彺鏅C(jī)制,所以在大部分情況下,小塊內(nèi)存釋放后依舊在緩存區(qū)中,當(dāng)系統(tǒng)再次分配該大小的內(nèi)存塊時(shí)就極為快速。

②自適應(yīng)性。在分配小塊內(nèi)存的過程中,算法能檢測(cè)出處于饑餓狀態(tài)的內(nèi)存塊大小,并依次為它們所在的緩存區(qū)分配1塊相應(yīng)大小的內(nèi)存塊。

③動(dòng)態(tài)性。在小塊內(nèi)存的回收過程中,該算法將對(duì)內(nèi)存塊進(jìn)行合并重組。假若某時(shí)刻先前從大塊內(nèi)存中分配的1 KB內(nèi)存塊全部被小內(nèi)存塊釋放,其經(jīng)過重組后必定能重新添加到大內(nèi)存塊存儲(chǔ)區(qū)。

3 優(yōu)化后的系統(tǒng)內(nèi)存管理機(jī)制

圖8和圖9分別是優(yōu)化后系統(tǒng)分配和回收內(nèi)存的算法,圖中的max代表的是小塊內(nèi)存的最大值。當(dāng)不能得到所需的小塊內(nèi)存,或者釋放小塊內(nèi)存最終合并成大塊內(nèi)存時(shí),分別調(diào)用大塊內(nèi)存分配和釋放操作,從而保證小塊內(nèi)存和大塊內(nèi)存操作能很好地協(xié)作,增強(qiáng)了系統(tǒng)的穩(wěn)定性。

結(jié) 語

盡管在引入小塊內(nèi)存動(dòng)態(tài)緩存分配機(jī)制后,系統(tǒng)在分配小塊內(nèi)存時(shí)會(huì)存在一定的內(nèi)存內(nèi)部碎片,但由于小塊內(nèi)存本身很小以及大塊內(nèi)存的動(dòng)態(tài)分區(qū)管理機(jī)制,很好地降低了系統(tǒng)中由于存在內(nèi)存碎片而帶來的風(fēng)險(xiǎn)。在實(shí)際模擬測(cè)驗(yàn)1中,經(jīng)優(yōu)化過的動(dòng)態(tài)分區(qū)內(nèi)存管理機(jī)制能在一定程度上提高系統(tǒng)的實(shí)時(shí)性及可靠性,在嵌入式RTOS的設(shè)計(jì)中具有實(shí)際的意義。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5059

    文章

    18975

    瀏覽量

    302090
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10807

    瀏覽量

    210853
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6689

    瀏覽量

    123142
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    嵌入式系統(tǒng)內(nèi)存管理

    不同的系統(tǒng),有不同的策略,對(duì)于有些系統(tǒng)支持的虛擬內(nèi)存管理機(jī)制,對(duì)于另外一些系統(tǒng),可能只有flat的簡單內(nèi)存管理機(jī)制。 2、
    發(fā)表于 09-17 19:40

    【案例分享】FreeRTOS的嵌入式實(shí)時(shí)操作系統(tǒng)的實(shí)現(xiàn)

    FreeRTOS是一個(gè)源碼公開的免費(fèi)的嵌入式實(shí)時(shí)操作系統(tǒng),通過研究其內(nèi)核可以更好地理解嵌入式操作系統(tǒng)的實(shí)現(xiàn)原理.本文主要闡述FreeRTOS系統(tǒng)中的任務(wù)調(diào)度機(jī)制、時(shí)間
    發(fā)表于 07-23 04:30

    嵌入式實(shí)時(shí)操作系統(tǒng)如何簡化應(yīng)用軟件的設(shè)計(jì)

    嵌入式領(lǐng)域中,嵌入式實(shí)時(shí)操作系統(tǒng)(RTOS)正得到越來越廣泛的應(yīng)用。采用嵌入式實(shí)時(shí)操作系統(tǒng)可以更合理、更有效地利用CPU的資源,簡化應(yīng)用軟件的設(shè)計(jì),縮短系統(tǒng)開發(fā)時(shí)間,更好地保證系統(tǒng)的
    發(fā)表于 11-25 06:48

    怎么給RTOS動(dòng)態(tài)分區(qū)內(nèi)存管理機(jī)制進(jìn)行優(yōu)化?

    怎么給RTOS動(dòng)態(tài)分區(qū)內(nèi)存管理機(jī)制進(jìn)行優(yōu)化?
    發(fā)表于 04-28 06:17

    基于嵌入式裸機(jī)或RTOS系統(tǒng)下內(nèi)存管理方法的探究

    嵌入式內(nèi)存管理探究-基于FreeRTOS文章封面本文基于嵌入式裸機(jī)或RTOS系統(tǒng)下內(nèi)存
    發(fā)表于 12-17 07:40

    嵌入式系統(tǒng)所用到的內(nèi)存管理機(jī)制主要有哪幾種

    嵌入式系統(tǒng)所用到的內(nèi)存管理機(jī)制主要有以下兩種: 1、虛擬內(nèi)存管理機(jī)制: 有一些嵌入式處理器提供了
    發(fā)表于 12-17 06:34

    闡述FreeRTOS系統(tǒng)中機(jī)制實(shí)現(xiàn)原理

    2--嵌入式操作系統(tǒng)FreeRTOS的原理與實(shí)現(xiàn)摘自::FreeRTOS是一個(gè)源碼公開的免費(fèi)的嵌入式實(shí)時(shí)操作系統(tǒng),通過研究其內(nèi)核可以更好地理解嵌入式操作系統(tǒng)的
    發(fā)表于 12-22 07:15

    VxWorks內(nèi)存管理機(jī)制的分析與研究

    實(shí)時(shí)性、可靠性是嵌入式開發(fā)對(duì)內(nèi)存管理的基本要求,本文探討了操作系統(tǒng)內(nèi)存管理的主要問題,對(duì)嵌入式
    發(fā)表于 01-07 12:35 ?23次下載

    嵌入式系統(tǒng)內(nèi)存管理方案研究

    摘要:嵌入式系統(tǒng)的內(nèi)存管理機(jī)制必須滿足實(shí)時(shí)性和可靠性的要求。本文以開源的的操作系統(tǒng)RTEMS為例,介紹嵌入式系統(tǒng)中內(nèi)存
    發(fā)表于 05-24 23:57 ?1142次閱讀
    <b class='flag-5'>嵌入式</b>系統(tǒng)<b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理</b><b class='flag-5'>方案</b>研究

    linux內(nèi)存管理機(jī)制淺析

    本內(nèi)容介紹了arm linux內(nèi)存管理機(jī)制,詳細(xì)說明了linux內(nèi)核內(nèi)存管理,linux虛擬內(nèi)存管理
    發(fā)表于 12-19 14:09 ?73次下載
    linux<b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理機(jī)制</b>淺析

    最全SPARK內(nèi)存管理機(jī)制

    最全SPARK內(nèi)存管理機(jī)制
    發(fā)表于 09-08 14:17 ?5次下載
    最全SPARK<b class='flag-5'>內(nèi)存</b><b class='flag-5'>管理機(jī)制</b>

    基于FreeRTOS的嵌入式實(shí)時(shí)操作系統(tǒng)的原理和實(shí)現(xiàn)

    FreeRTOS是一個(gè)源碼公開的免費(fèi)的嵌入式實(shí)時(shí)操作系統(tǒng),通過研究其內(nèi)核可以更好地理解嵌入式操作系統(tǒng)的實(shí)現(xiàn)原理.本文主要闡述FreeRTOS系統(tǒng)中的任務(wù)調(diào)度機(jī)制、時(shí)間
    發(fā)表于 11-18 03:34 ?6632次閱讀

    嵌入式系統(tǒng)內(nèi)存管理機(jī)制詳解

    操作系統(tǒng)的內(nèi)存管理功能用于向操作系統(tǒng)提供一致的地址映射功能和內(nèi)存頁面的申請(qǐng)、釋放操作。在嵌入式實(shí)時(shí)系統(tǒng)中,內(nèi)存
    發(fā)表于 11-18 09:41 ?4486次閱讀

    淺析物理內(nèi)存與虛擬內(nèi)存的關(guān)系及其管理機(jī)制

    本文主要介紹內(nèi)存管理機(jī)制:物理內(nèi)存與虛擬內(nèi)存的關(guān)系,Linux內(nèi)存管理機(jī)制,Python
    的頭像 發(fā)表于 04-12 09:55 ?5350次閱讀
    淺析物理<b class='flag-5'>內(nèi)存</b>與虛擬<b class='flag-5'>內(nèi)存</b>的關(guān)系及其<b class='flag-5'>管理機(jī)制</b>

    嵌入式釋放RTOS內(nèi)存性能的使用技巧

    經(jīng)常從嵌入式開發(fā)人員那里聽到兩種拒絕使用RTOS的借口: “RTOS內(nèi)存占用太大” “RTOS開銷太大” 這些借口在以前可能有一些價(jià)值,但今
    的頭像 發(fā)表于 09-27 11:50 ?2196次閱讀