記憶體管理

記憶體管理,是指軟體執行時對電腦主記憶體資源的分配和使用的技術。其最主要的目的是如何高效、快速的分配,並且在適當的時候釋放和回收主記憶體資源。

一個執行中的程式,譬如網頁瀏覽器在個人電腦或是圖靈機(Turing machine)裡面,為一個行程將資料轉換於真實世界及電腦記憶體之間,然後將資料存於電腦記憶體內部(在電腦科學,一個程式是一群指令的集合,一個行程是電腦在執行中的程式)。記憶體能被實際組織在許多方法裡頭,例如磁帶或是磁碟,或是小陣列容量的微晶片。 從1950年代開始,計算機變的更複雜,它被連線於許多種類的記憶體。記憶體管理的任務也變得複雜,甚至必須要在同一台機器上相同的時間執行多個行程

在記憶體內,一個程式(作業系統)在每一個資料區段持續地追蹤實體位置,及移動實體上的資料去改善其效能及保證可靠性,對於每個使用者層(user-level)的程式,作業系統分配一段虛擬記憶體空間,當行程起始時,不需要移動資料到實體裝置間,資料存於磁碟內的虛擬記憶體空間,也不需要去組態主記憶體空間給該行程,當使用者有需要用到時,他們才會很自由地載入到主記憶體內。

可以想像一個很大的程式,當他執行時變成行程,而大部分的記憶體空間都被存到磁碟內虛擬記憶體位址,需要用到的部分才被載入到記憶體內部提供服務。

主記憶體使用

一個程式結構由以下兩部分而成:

  • 「本文區段」,也就是指令存放,提供CPU使用及執行
  • 「資料區段」,儲存程式內部本身設定的資料,例如常數字串,像是GUI介面內部一些文字訊息,或是程式設計時所放入的訊息資料,資料可藉由程式執行時由輸入(input)的方式加入,或者經由程式執行的流程中被移除。

當一個程式執行,作業系統將程式的資料區段及本文區段對映到虛擬記憶體空間內部,然後在記憶體執行程式的指令(見范紐曼架構),無論如何,當程式執行時就必須去儲存暫時性的資料,或更重要的,它會呼叫一些函式(function)或是常式(subroutine),並且儲存當前函式的狀態,最好的資料結構方法,資料由堆疊(stack)的方式儲存,當我們完成這個函式,資料會由堆疊的pop方式取出,堆疊將會在函式的生命週期內動態的成長,作業系統提供區分本文區段及資料區段,而堆疊區段則在一個行程的最頂端,這種方式稱為段式結構(segments)或「分段」。

參考文獻

參見