R TOS動態(tài)分區(qū)內存管理機制的優(yōu)化設計
在嵌入式領域中,嵌入式實時操作系統(tǒng)(RTOS)正得到越來越廣泛的應用。采用嵌入式實時操作系統(tǒng)可以更合理、更有效地利用CPU的資源,簡化應用軟件的設計,縮短系統(tǒng)開發(fā)時間,更好地保證系統(tǒng)的實時性和可靠性。內存資源作為嵌入式系統(tǒng)中極為重要的資源之一,其管理機制歷來是嵌入式系統(tǒng)設計的重點和難點。內存管理機制的優(yōu)劣程度極大地影響著嵌入式系統(tǒng)的整體性能,因此在嵌入式RTOS的內存管理機制中必須滿足以下3個要求:
①實時性。在嵌入式RTOS中不僅要求調度機制的實時性,資源的分配和回收的實時性也十分重要。
②可靠性。嵌入式系統(tǒng)的應用領域決定了嵌入式RTOS必須具有高可靠性,而內存管理的可靠程度直接影響RTOS的可靠性,因此內存管理的可靠性也必不可少。
③高效性。由于嵌入式系統(tǒng)資源的稀缺性,因而高效的資源管理機制也同等重要。
1 動態(tài)分區(qū)內存管理機制
1.1 動態(tài)分區(qū)內存管理概述
在許多小型嵌入式系統(tǒng)中并未實現(xiàn)虛擬內存機制,動態(tài)分區(qū)內存管理機制仍然是首選。分區(qū)存儲管理是滿足多道程序設計的最簡單的存儲管理方法,它允許多個用戶程序同時存在系統(tǒng)內存中,即共享內存空間。早期的分區(qū)存儲管理采用固定分區(qū)的方法,把內存空間分成若干個大小不等的區(qū)域,稱為分區(qū)。每個用戶程序(作業(yè)、進程)調入內存后,占用其中1個分區(qū),程序運行完成后釋放該分區(qū)。這種存儲管理方法的主要問題是內存使用效率極低,很快就被淘汰了。取而代之的是動態(tài)分區(qū)存儲管理技術。圖1顯示的是動態(tài)內存管理的數(shù)據(jù)結構。
1.2 動態(tài)分區(qū)內存分收算法及其性能分析
在動態(tài)內存分配機制中一般采用兩種設計方案:最佳適應算法和首次適應算法。最佳適應算法要求所有的空閑內存塊按照內存塊的大小,由小到大鏈接在一起。首次適應算法中所有的空閑內存塊都是按地址由小到大鏈接的。圖2顯示了這2種算法的流程(假設系統(tǒng)申請的內存塊大小為n)。
最佳適應算法和首次適應算法在分配內存的流程上是一致的,然而由于空閑內存塊的組織形式不同,其分配的性能也不盡相同。最佳適應算法由于每次分配都是首先分配與所要求的內存塊大小最接近的空閑內存塊,因而其內存利用率相對較高。然而由于在內存回收過程中需要合并那些地址相鄰的空閑塊,最佳適應算法往往需要遍歷整個空閑區(qū)鏈表以尋找符合條件的內存塊。而首次適應算法由于是按照地址的順序相連,因而在內存回收方面有著最佳適應算法無法比擬的性能。
圖3顯示了在幾種不同情況下,動態(tài)分區(qū)內存回收機制所采取的策略。
在A中,釋放區(qū)回收后合并成新內存塊f,其首地址為f1內存塊的首地址,大小為f1和R內存塊的大小之和。在B中,釋放區(qū)回收后合并成新內存塊f,其首地址為R內存塊的首地址,大小為f1和R內存塊的大小之和。在C中,釋放區(qū)回收后合并成新內存塊f,其首地址為f1內存塊的首地址,大小為f1和R以及f2內存塊的大小之和。在D中,釋放區(qū)回收后不進行合并,直接插入空閑區(qū)鏈表并返回。
動態(tài)分區(qū)內存的分配機制有效地避免了內存內部碎片的存在,同時在內存回收策略中使用合并算法也極大地減少了內存外部碎片存在的可能性。然而,當系統(tǒng)需要分配大量的小塊內存時,動態(tài)分區(qū)內存管理機制的性能卻并不令人滿意。其不足之處主要存在以下2個方面:
①當系統(tǒng)分配大量的小塊內存后,其空閑區(qū)表或空閑區(qū)隊列將會變得異常龐大。無論是首次適配算法還是最佳適應算法都需要遍歷空閑區(qū)搜索合適的內存塊,因此過于龐大的空閑區(qū)結構使搜索算法變得低效。
②系統(tǒng)在某些特定的時刻往往會對大量的小塊內存進行頻繁分配和回收。頻繁地對小塊內存進行分割分配和合并回收,其實時性表現(xiàn)得并不令人滿意。
基于以上2點,如何在動態(tài)分區(qū)內存管理機制的基礎上優(yōu)化小塊內存的管理機制,成為提高動態(tài)分區(qū)內存管理性能的關鍵因素之一。
2 小塊內存動態(tài)緩存分配機制
大部分實時操作系統(tǒng)內存分配機制并未對大塊內存和小塊內存的分配做出不同的算法設計,然而在實際分配過程中,很難用一種分配算法兼顧大小內存的高效分配。針對動態(tài)分區(qū)內存管理機制中對小塊內存分配的局限性,提出了小塊內存動態(tài)緩存機制。該機制在繼承了動態(tài)分區(qū)管理機制優(yōu)良性能的同時,優(yōu)化了小塊內存的管理,對內存管理的實時性和高效性都有一定提高。系統(tǒng)中同時存在2種內存數(shù)據(jù)結構,分別為小塊內存和大塊內存設計。大塊內存依舊采取動態(tài)分區(qū)內存管理機制,而小塊內存采取動態(tài)緩存分配。小塊內存數(shù)據(jù)結構如圖4所示。
評論