<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 動態(tài)內存管理在面向嵌入式實時系統(tǒng)中的研究

          動態(tài)內存管理在面向嵌入式實時系統(tǒng)中的研究

          作者: 時間:2011-07-24 來源:網(wǎng)絡 收藏

          的基本任務就是有效地對進行分配、回收,并同時保證的快速性、可靠性和穩(wěn)定性。當請求分配時,需要從所有空閑塊中找到一個合適的空閑塊進行分配;當用戶不再使用而將某塊內存釋放時,系統(tǒng)需要回收這一內存塊,以備在新的請求產生時重新進行分配。為此,系統(tǒng)需要建立一個與內存當前使用情況相對應的內存描述,用來記錄所有與內存分配、回收相關的信息。而如何記錄這些信息并進行分配與回收,便成為各種算法的最根本區(qū)別。

          本文引用地址:http://www.ex-cimer.com/article/150432.htm

            1 系統(tǒng)中內存技術的特點

            系統(tǒng)分為硬系統(tǒng)和軟系統(tǒng)。硬實時系統(tǒng)是指系統(tǒng)中各任務不僅要執(zhí)行無誤而且要做到準時;軟實時系統(tǒng)是指系統(tǒng)中各任務運行的越快越好,并不要求限定某一任務必須在多長時間內完成。可以看出內存分配是絕對不能用于硬實時系統(tǒng)的,因為動態(tài)分配具有時間不確定性(分配時間與內存塊數(shù)量有關),而且動態(tài)分配可能產生分配不成功的情況。所以對于硬實時系統(tǒng),只能采用靜態(tài)內存分配方式。靜態(tài)分配是指在編譯或鏈接時將程序所需的內存空間分配好,這樣不會出現(xiàn)分配失敗的情況。

            1.1 靜態(tài)分配與動態(tài)分配

            靜態(tài)分配為系統(tǒng)提供了最好的可靠性與實時性。對于那些對實時性和可靠性要求極高的需求,就只能采用靜態(tài)分配方式。但采用靜態(tài)分配就必然會使系統(tǒng)失去靈活性。因此必須在設計階段考慮所有可能的情況,并對所有的需求做出相應的空間分配。一旦出現(xiàn)沒有考慮到的情況,系統(tǒng)就無法處理。此外靜態(tài)分配方式也必然導致很大的浪費,因為必須按照最壞情況進行最大的配置,而在實際運行中可能只用到其中的一小部分。

            動態(tài)分配為系統(tǒng)提供了很大的靈活性,而且在內存的利用率和系統(tǒng)功能擴展等方面也都明顯地優(yōu)于靜態(tài)分配。

            大多數(shù)系統(tǒng)采用靜態(tài)分配和動態(tài)分配相結合的方式。由于系統(tǒng)本身各個任務的可靠性、實時性要求不盡相同,通常會有一部分任務對可靠性與實時性沒有特別嚴格的要求。這些任務對一定的延時與失敗是可以接受的。因此對于這樣的一部分任務,就可以采用動態(tài)分配方式來滿足它們部分或全部的內存需求。而對于那些有嚴格時限要求的任務,為了保證任務的可靠性和實時性,就應采用靜態(tài)分配方式。

            1.2 動態(tài)分配的技術要求

           ?。?)快速性:由于系統(tǒng)對實時性要求較高,所以內存分配過程要盡可能地快。在嵌入式系統(tǒng)中,由于還不能采用通用操作系統(tǒng)中復雜而完善的內存分配策略,所以一般都采用簡單、快速的內存分配方案。

            (2)可靠性:由于嵌入式系統(tǒng)對可靠性的要求較高,所以內存分配過程也要具備高可靠性。但由于各個嵌入式系統(tǒng)之間對可靠性的要求不盡相同,對內存分配的可靠性要求也就各不相同。通常,可靠性要求極高的系統(tǒng)不采用動態(tài)分配。

           ?。?)高效性:由于在嵌入式系統(tǒng)中內存資源都相對有限,所以為了保證程序的正常運行,內存系統(tǒng)要盡可能高效地使用內存,減少不必要的浪費。

            2 伙伴系統(tǒng)

            2.1 伙伴系統(tǒng)原理

            伙伴(buddy)系統(tǒng)的基本原理就是按照2的冪次方大小對內存進行分配,以此得到很高的分配速度和回收速度。例如:對于10KB的空間請求,伙伴系統(tǒng)會分配16KB的空間來滿足。因為內存空閑塊大小均為2的冪次方,所以需要16KB,這是滿足10KB的最小空間;同樣對于70KB的空間請求,伙伴系統(tǒng)會分配128KB的空間來滿足。

            2.2 伙伴系統(tǒng)存在的問題

            伙伴系統(tǒng)比那些按大小而不按塊的整數(shù)倍地址分配的算法有更多的優(yōu)點。其優(yōu)點為當一個大小為2的K次冪的塊被釋放后,存儲管理只需要搜索2的K次冪字節(jié)大小的塊以判定是否需要合并。那些允許內存塊以任意形式分割的策略需要搜索所有的空閑塊表。相比之下,伙伴系統(tǒng)更快。

            但是對于內存利用率來說,伙伴系統(tǒng)是極其低效的。問題出自所有的內存請求都必須以2的冪次方大小的空間來滿足,一個35KB的請求需要分配64KB的空間,其余的29KB被浪費了。在極端情況下內存資源有近50%被浪費。

            3 連續(xù)的內存分配

            3.1 問題提出

            伙伴系統(tǒng)的內存管理方式對空間的使用存在極大的浪費。在某些情況下還會由于資源的浪費,導致后繼的內存請求得不到滿足,進而嚴重地影響程序的正常功能。

            試考慮:系統(tǒng)共有1MB內存空間可用,采用伙伴系統(tǒng)進行管理。有如下請求:請求A,300KB;請求B,300KB;請求C,50KB.結果如表1所示。

            由表1中可以看出:伙伴系統(tǒng)對空間的浪費是極其嚴重的,即使在物理內存充足(1MB)的情況下,也會產生請求(650KB)無法滿足的情況。

            由于在嵌入式系統(tǒng)中,一般都沒有虛擬內存的支持,所以當內存請求無法得到滿足時,將嚴重影響程序的正常功能。因此為了保證程序的正常功能,就要提高內存的利用率,盡可能地滿足程序的內存請求。所以在對伙伴系統(tǒng)進行分析的基礎上,提出了連續(xù)的內存分配方式。

          3.2 連續(xù)的內存分配原理

            從上例不難看出,只要采用連續(xù)的內存分配方式(即分配與請求大小相等的空間來滿足請求),便不難使請求C得到滿足,而且還會有很大的剩余空間繼續(xù)用來滿足其他的內存請求。結果如表2所示。

            連續(xù)的內存分配方式明顯不同于其他以塊為單位進行分配的內存管理方法。它采用連續(xù)分配的方式,按照請求空間的實際大小來進行空間分配。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();