當前位置:才華齋>IT認證>嵌入式>

嵌入式系統記憶體管理

嵌入式 閱讀(8.9K)

科學技術的發展在不斷的進行更新,為了適應發展快速的科技資訊,在對於系統進行開發的時候,就要傾注更多的精力,使其在功能上能夠滿足日益發展的網路需求。那麼針對嵌入式系統的開發,在實際的應用過程中,涉及到對於記憶體的管理方面的問題,這將關係到嵌入式系統對於軟體執行的效率和質量問題。所以程式的設計人員要擁有很豐富的專業知識,在思想理念上能夠跟得上國際的最新趨勢,使得系統在使用的過程中可以為我國的資訊產業創造出更大的成就,為我國網路資訊業的發展創造有利的環境

嵌入式系統記憶體管理

  1嵌入式系統

嵌入式系統是指以應用為中心,以計算機技術為基礎,軟體硬體可剪裁,適應應用系統。對功能、可靠性、成本、體積、功耗嚴格要求的專用計算機系統。它主要由嵌入式微處理器、外圍硬體裝置、嵌入式作業系統以及使用者應用軟體的部分組成。用於實現對其他裝置的控制、監視和管理等功能,它通常嵌入在主要裝置中執行。

  2嵌入式系統對記憶體分配的要求

嵌入式系統在開發和應用的過程中,由於自身的科技含量比較高,都受到了相應的限制條件。由於其本身是一種在資源上會受到限制的系統,所以這種系統的應用相對於其他的系統來說,對於在記憶體上的使用標準要相對嚴格一些。在資源和成本上的受限,使得對於這種系統的開發在研究的時候,程式開發人員就要付出一定的精力,考慮到系統在使用的時候對於記憶體的分配和使用上要做出合理的安排。由此可知,對於這種系統的開發和應用,在對記憶體的管理上一直都是一個難題,它和別的比較常用的系統還有著不同。那麼從大體上來看,嵌入式系統在研發時主要需要考慮到以下三方面的要求:

第一,實時性。要保證嵌入式系統的實時性,則要求儘可能快速的分配記憶體。

第二,可靠性。它是嵌入式系統記憶體管理機制的基本要求。

第三,高效性。嵌入式系統中記憶體是一種有限並且昂貴的資源。故記憶體分配要儘可能的減少浪費。

  3記憶體分配方式

嵌入式系統中記憶體管理方案大致可以分為兩大類:靜態分配和動態分配。

靜態分配的可用記憶體大小在編譯或連結時確定,系統初始化階段預先分配好固定數量的記憶體,用於存放所有需要使用的物件和資料結構。程式執行時能且只能使用這些記憶體空間。採用這種分配方案的程式段,其大小一般在編譯時就能確定。

動態分配的記憶體在程式執行時根據需要向系統申請後獲得,只有在需要的時候,才分配或釋放。

  4記憶體管理策略

4.1簡單記憶體管理模型

在設計之初,最簡單直接的一種技術其實就是"不管理",即所有靜態分配在棧中、動態分配在堆中的變數和資料結構,這二者的分配、釋放,全交給編譯器、連結器和執行時庫去完成,設計者只需合理設定系統棧、堆和任務棧。

4.2靜態記憶體分配方式

在大多數情況下,靜態分配普遍適應於嵌入式系統,因為在操作的過程中,有些程式段的應用和狀態基本上都是固定不變的,所以適應性比較強。

在執行程式之前,靜態記憶體實質上就已經進行了,有著比較高的執行效率;對於記憶體在需求上的狀況,在對其進行編譯的時候就能夠進行準確的計算;對於在記憶體的分配上,所應用的時間是比較短的,並且這些動作基本上都是固定不變的;對於已經分配完成的記憶體,一般情況下,是不進行歸還的,而且很少有碎片;對於程式進行的測試也是比較容易的,並且有著很高的可靠性。以上這些優點使得靜態記憶體的分配在很多標準要求比較高的系統中都能夠使用,如果一些系統的要求特變高,對於在使用中,一定不能夠出現延時或者是失敗的分配現象產生的話,那麼靜態記憶體分配模式就可以很好的滿足這些條件,在開始對其進行編譯的時候,就可以將這些需要的記憶體進行分配。

4.3動態記憶體分配方式

對於靜態記憶體分配來講,主要注重的方面是效率和安全方面,而對於動態記憶體分配來說則比較注重於靈活性的掌握。在進行動態的記憶體分配模式下,對於記憶體空間的要求,程式是在目標的模組在進行連結之前就已經分配完成的,在程式進行工作的過程當中,是允許繼續附加一定的記憶體或者是在記憶體的空間上進行移動工作的,也就是說對記憶體進行分配的工作不一定是要在程式執行之前就要完成的,在程式執行期間也是可以逐步的進行分配的。這種做法在一定程度上減少了浪費的情況,使得很多不被使用的記憶體不進行分配,對於記憶體的總體需求降低了要求;對於設計的.質量來講有了很大的提高,使系統在進行編寫的時候將更加的簡單容易;在程式執行的過程中對記憶體進行分配,這樣就在系統進行啟動的時候減少了執行的時間。

在對動態記憶體進行分配的時候,程式設計師在對程式進行編寫的過程中,可以全身心的將精力放在對於程式的設計上,而不需要對記憶體的分配問題傾注過多的精力。在程式和硬體系統之間關聯性不是特別高的時候,那麼對於程式在進行移植方面就有了很大的便利,比如有一些系統不是單純的為了嵌入式系統而設計的,那麼也可以將其很容易的移植到嵌入式系統當中。如入說,在嵌入式系統應用的條件下,對於網路協議棧在一定的平臺使用下,為了達到一定的條件,能夠在使用系統的時候更加的靈活,在使用系統的時候,使得其中的每一個功能之間都能夠進行平衡的選擇,那麼這個系統就必須可以適應對於動態記憶體的分配。

4.3.1記憶體碎片

記憶體碎片是動態分配,尤其是直接在系統堆中分配的不分割槽方式的主要問題。在嵌入式實時作業系統中,多次的分配和釋放記憶體,會把原來很大的一塊連續記憶體區域逐漸分割成許多小而且互不相鄰的記憶體區域,也就是記憶體碎片。記憶體碎片主要有兩種:一種是資料結構未用完它所分配到的記憶體塊所產生的"內部碎片";另一種是兩個已分配資料塊之間的記憶體由於太小而無法用於儲存任何東西造成的“外部碎片”。

4.3.2記憶體丟失

記憶體丟失是一塊已經分配但永遠不會被釋放的記憶體區,是應用程式所造成的缺陷。嵌入式系統要長時間執行,就要確保絕對沒有記憶體丟失。記憶體塊使用完後,特定的塊必須重新放回它以前所屬的分割槽,否則可能造成記憶體丟失。