2010年1月25日

作業系統--記憶體管理

在現代的電腦系統中,程式與其資料都必須存放在記憶體中,才能直接被CPU所使用,而在多元程式處理系統中,由於記憶體內會同時存放著多份程式與資料,因此作業系統不僅要追蹤並記錄每個程式存放在記憶體內的哪個位址,還要把程式裡面參考到的位址轉換成記憶體的位址。在這邊的解決法方是採用邏輯位址(lobical address)與實體位址(physical address)兩套位址,前者是在程式裡面所指定的相對位置,又稱為「相對位址」(relative address);後者是在記憶體內的實際位置,當程式被載入記憶體時,程式裡面的邏輯位址就會經過位址聯結(address binding)的過程,對應到記憶體內的實體位址。從1960年代以來,多元程式處理技術歷經多次沿革,其主要的記憶體管理方法,包括以下幾項:

分割法(partitioning)
最初的設計是屬於固定分割法(fixed partitioning),其原理是將記憶體劃分成多個大小固定的分割區,雖然各個分割區的大小不一定相同,但在開機後就已經決定,而且作業系統會使用表格記錄分割區的起始位址及長度。一個分割區可以載入一個程式來執行,而CPU就在這些程式之間切換執行。由於分割區的大小固定,而程式的大小卻不一定剛好等於所分配到的分割區,導致可能有剩下一部份空間沒有用到,這個剩下的空間稱為內部碎片(internal fragmentation)。

為了改善內部碎片的問題,於是發展出動態分割法(Dynamic partitoning),其原理是根據程式的大小劃分一塊大小剛好的分割區來存放程式,而且作業系統同樣會使用表格記錄分割區的起始位址及長度。在動態分割法的機制下,可能會發生可用空間的總大小足以容納新程式,但卻因為空間不連續而無法利用的情況,此時這些可用空間稱為外部碎片(external fragmentation)。

分頁法(paging)
由於分割法無法避免碎片的產生,只能透過分割策略改善程度的輕重,為此,發展出另一系列的技術,允許同一個程式載入不連續的記憶體空間,只要可用空間的總大小足以容納該程式即可。分頁法的原理是將記憶體劃分成相同大小的區塊,稱為頁框(frame),然後將程式亦劃分成相同大小的區塊,稱為分頁(page),頁框的大小和分頁的大小通常是一樣的。當程式準備執行時,它的分頁會被載入記憶體的頁框,每個分頁對應一個頁框,但不一定是要連續的頁框,分散或順序顛倒亦無妨。為了記錄程式的每個分頁是載入到記憶體的哪些頁框,所以需要一個分頁表(page table)。

分段法(segmenting)
概念和分頁法類似,只是分割單位不同,分頁法是將程式劃分成大小相同的分頁,分段法是將程式的邏輯記憶體劃分成數個分段(segment),並記錄每個分段的編號及長度,其邏輯位址是表示成<分段編號,位移>格式。同樣的,為了記憶程式的每個分段是載入到記憶體的哪些位址,所以需要一個分段表(segment table)。

虛擬記憶體(virtual memory)
在現代電腦系統中,程式必須整個載入記憶體才能執行,倘若記憶體的可用空間不足,程式就無法執行,此時可以改用虛擬記憶體技術。這項技術的原理是假設有一塊非常大的虛擬記憶體,大小是實體記憶體的數倍,實際上則是規劃一部份的輔助儲存裝置(通常是硬碟)做為虛擬記憶體,當程式準備執行時,即使程式無法整個載入記憶體也沒關系,只要記錄下哪些部份是真的有載入記憶體,其餘的部份還留在規劃成虛擬記憶體的磁碟,然後在程式的執行過程中,若碰到需要執行不在記憶體的部份,再到磁碟讀取,把目前記憶體內比較不會用到的部份挪出到磁碟上,再把要用到的部份換進來,此動作稱為交換(swap),而劃分為虛擬記憶體的磁碟檔案則稱為交換檔(swap file)。

需求分頁法(demand paging)
為了進一步提升記憶體的使用效率,有人結合分頁法和虛擬記憶體技術,發展出需求分頁法,其原理和分頁法類似,也是將記憶體分成多個頁框,將程式劃分成多個分頁,執行時將分頁載入頁框,不同的是程式不必整個載入記憶體就能執行,只要記錄有哪些分頁是真的載入記憶體,而其餘哪些分頁還留在磁碟就可。若程式在執行中,發現所需要的分頁不在記憶體,就必須到磁碟讀取。

需求分段法(demand segmentation)
是結合分段法和虛擬記憶體技術,其原理和需求分頁法類似,也就是程式不必整個載入記憶體就能執行,只要記錄有哪些分段是真的載入記憶體,而其餘哪些分段還留在磁碟即可。若程式在執行中,發現所需要的分段不在記憶體中,則必須到磁碟讀取。

沒有留言:

張貼留言