R TOS動態(tài)分區(qū)內(nèi)存管理機制的優(yōu)化設(shè)計
圖7是對小塊內(nèi)存操作算法的簡單模擬。小塊內(nèi)存緩存區(qū)從上到下依次緩存512~64字節(jié)的內(nèi)存塊。有4個操作過程:分配64字節(jié)→分配128字節(jié)→回收64字節(jié)→回收128字節(jié)。
①分配64字節(jié)。初始狀態(tài)小塊內(nèi)存緩存區(qū)為空,此時將會執(zhí)行大塊內(nèi)存分配操作并將1 KB內(nèi)存分割緩存到小塊內(nèi)存緩存區(qū)。在分配64字節(jié)內(nèi)存時,系統(tǒng)自動探測到了128字節(jié)、256字節(jié)和512字節(jié)處的緩存區(qū)已經(jīng)處于饑餓狀態(tài),因此也將會分配其緩存區(qū)1塊內(nèi)存。
②分配128字節(jié)。由于系統(tǒng)存在該大小的緩存,因此直接獲取并返回。
③回收64字節(jié)。由于釋放后,系統(tǒng)中64字節(jié)大小的內(nèi)存塊可以合并,因此合并后鏈入上一級緩存區(qū)。
④回收128字節(jié)。內(nèi)存塊再次進(jìn)行合并操作,最終調(diào)用大塊內(nèi)存釋放操作,從而回到原始態(tài)。
圖7所示的內(nèi)存操作只是一個非常簡單的模擬,實際系統(tǒng)內(nèi)存的分配和回收是非常復(fù)雜和不確定的,而小塊內(nèi)存動態(tài)緩存分配機制的性能在這種情況下表現(xiàn)得尤為突出??傮w而言其具有以下幾點優(yōu)勢:
①快速性。因為使用了緩存機制,所以在大部分情況下,小塊內(nèi)存釋放后依舊在緩存區(qū)中,當(dāng)系統(tǒng)再次分配該大小的內(nèi)存塊時就極為快速。
②自適應(yīng)性。在分配小塊內(nèi)存的過程中,算法能檢測出處于饑餓狀態(tài)的內(nèi)存塊大小,并依次為它們所在的緩存區(qū)分配1塊相應(yīng)大小的內(nèi)存塊。
③動態(tài)性。在小塊內(nèi)存的回收過程中,該算法將對內(nèi)存塊進(jìn)行合并重組。假若某時刻先前從大塊內(nèi)存中分配的1 KB內(nèi)存塊全部被小內(nèi)存塊釋放,其經(jīng)過重組后必定能重新添加到大內(nèi)存塊存儲區(qū)。
3 優(yōu)化后的系統(tǒng)內(nèi)存管理機制
圖8和圖9分別是優(yōu)化后系統(tǒng)分配和回收內(nèi)存的算法,圖中的max代表的是小塊內(nèi)存的最大值。當(dāng)不能得到所需的小塊內(nèi)存,或者釋放小塊內(nèi)存最終合并成大塊內(nèi)存時,分別調(diào)用大塊內(nèi)存分配和釋放操作,從而保證小塊內(nèi)存和大塊內(nèi)存操作能很好地協(xié)作,增強了系統(tǒng)的穩(wěn)定性。
結(jié) 語
盡管在引入小塊內(nèi)存動態(tài)緩存分配機制后,系統(tǒng)在分配小塊內(nèi)存時會存在一定的內(nèi)存內(nèi)部碎片,但由于小塊內(nèi)存本身很小以及大塊內(nèi)存的動態(tài)分區(qū)管理機制,很好地降低了系統(tǒng)中由于存在內(nèi)存碎片而帶來的風(fēng)險。在實際模擬測驗1中,經(jīng)優(yōu)化過的動態(tài)分區(qū)內(nèi)存管理機制能在一定程度上提高系統(tǒng)的實時性及可靠性,在嵌入式RTOS的設(shè)計中具有實際的意義。
評論