第 9 章 虛擬記憶體 (virtual memory)

35

Upload: boone

Post on 05-Jan-2016

98 views

Category:

Documents


1 download

DESCRIPTION

第 9 章 虛擬記憶體 (virtual memory). 基本觀念. 生意好的餐廳有所謂的翻桌率,也就是在同一段進餐時間,同一桌可能可以陸續讓好幾組客人依序用餐。所以即使餐廳只有 10 張桌面,可能一個中午出了 30 桌的菜量 電腦的記憶體空間也有限,為了服務更多的處理元,作業系統也採用類似的概念,而且有過之而無不及,處理元執行時需要的資料放置到記憶體中,即使有的放不下,也暫時放到磁碟上,等需要用到時再想辦法移到記憶體中. 隨選分頁 (demand paging). 隨選分頁的方法可以讓一個程式在沒有完全載入到主記憶體中的情況下,依然能夠繼續執行 - PowerPoint PPT Presentation

TRANSCRIPT

基本觀念生意好的餐廳有所謂的翻桌率,也就是在同一段進餐

時間,同一桌可能可以陸續讓好幾組客人依序用餐。所以即使餐廳只有 10 張桌面,可能一個中午出了 30桌的菜量

電腦的記憶體空間也有限,為了服務更多的處理元,作業系統也採用類似的概念,而且有過之而無不及,處理元執行時需要的資料放置到記憶體中,即使有的放不下,也暫時放到磁碟上,等需要用到時再想辦法移到記憶體中

隨選分頁 (demand paging)隨選分頁的方法可以讓一個程式在沒有完全載入到主

記憶體中的情況下,依然能夠繼續執行如此一來,程式占有空間的大小就比較沒有限制了這種技術稱為虛擬記憶體 (virtual memory) ,分頁

本身在系統的安排下,能夠在磁碟與主記憶體中移動,讓使用者覺得執行的程式一直都位於主記憶體中

分頁與分段虛擬記憶體技術比較

分頁(paging) 分段(segmentation)

容許分頁框內部的碎片(fragmentation)存在

不容許內部的碎片(internal

fragmentation)存在

不容許外部的碎片(external

fragmentation)存在

容許外部的碎片(external

fragmentation)存在

程式分割成大小一樣的分頁(pages) 程式分割成大小不同的分段

(segments)

使用 page number與位移(displacement)來計算絕對位址

(absolute address)

使用 segment number與位移(displacement)來計算絕對位址

(absolute address)

需要 PM T(page map table) 需要 SM T(segment map table)

虛擬記憶體技術的優點執行程式的大小可以不受限於主記憶體空間的大小。記憶體的使用會更有效率,因為程式會用到的部分才

會占用記憶體的空間。可以進行更廣泛的多工 (multiprogramming) 。避免 external fragmentation 的問題,降低

internal fragmentation 的程度。容許程式碼與資料的共用。讓程式片段的動態連結 (dynamic linking) 更容易。

虛擬記憶體的缺點處理器硬體成本增加處理分頁中斷 (page interrupts) 的額外成本為了避免頻繁置換 (thrashing) 而增加的軟體複雜性

虛擬記憶體運作的方式

虛擬記憶體的機制虛擬記憶體可以讓沒有完全存在於主記憶體中的處理

元能夠執行換句話說,處理元的位址空間 (address space) 並

沒有完全載入到主記憶體中做法是把處理元的位址空間分割,如此一來,需要用

到的位址空間分割 (address space partition) 必須載入,還用不上的就可以先存在 secondary memory 裡頭

虛擬記憶體擴充主記憶體空間的原理

實體記憶體的抽象化虛擬記憶體管理員在 secondary memory 建立的虛

擬位址空間 (virtual address space) 可以看成是實體記憶體的抽象化

當系統運作時,虛擬記憶體管理員會自動控制主記憶體與虛擬記憶體之間的對應,促成資料方塊在主記憶體與次記憶體間自動的移轉

在虛擬位址空間存在的情況下,對於使用者來說,其實虛擬位址空間跟實體位址空間並沒有差別,只是在程式用到虛擬位址空間的時候,作業系統要把資料搬到實體記憶體中

位址對應的過程

分段式的虛擬記憶體機制(segmentation)分段式的虛擬記憶體和 relocation register 與 limit

register 的方法近似,由程式設計者本身決定程式的分割方式,產生大小不一的分段 (segment)

例如 UNIX C compiler 訂的 text, data 與 stack segment

分割之後,記憶體空間的位置就可以用 : < 分段號碼 , 平移量 (offset)> 來決定

分段號碼指定記憶體的某個區塊,平移量指所在之處與分段起點之間的距離

分段本身就成為虛擬記憶體管理員在主記憶體與次記憶體之間移動資料的單位

分段式的記憶體配置方式

SMT 的內容與用途

分段法的實作

分頁的記憶體配置 (paged memory allocation)分頁的記憶體配置方式將 CPU 所要處理的 job 分成

大小一樣的分頁 (page)有的作業系統以記憶體區塊的大小為分頁的大小,而

且也剛好跟磁碟上區塊的大小一樣

分頁的記憶體配置 (paged memory allocation) 方式

分頁的虛擬記憶體機制 (paging)分頁的虛擬記憶體機制 (paging) 使用單一成份的位

址,虛擬記憶體空間分成線性的 (linear) 虛擬位址程式設計者不需要知道虛擬記憶體空間如何運作,完

全由虛擬記憶體管理程式負責把固定大小的分頁(page) 依照需求在主記憶體與次記憶體之間移動

在實作上,分頁機制比較簡單,使用者對於技術上的細節不必了解

每個處理元的虛擬位址空間分成邏輯上的分頁,外部空間散佈的問題 (external fragmentation) 比較小

常見的分頁配置演算法靜態配置演算法 (static allocation)動態配置演算法 (dynamic allocation)

靜態分頁配置演算法 (static paging algorithm)取用政策 (fetch policy) : 決定分頁何時載入主記憶

體。替換政策 (replacement policy) : 決定系統資源不足時那一個分頁應卸載。

置放政策 (placement policy) : 決定取用的分頁應放在何處。

取用政策 (fetch policy)取用政策決定分頁那時候會被載入到主記憶體中分頁演算法通常不會預先知道分頁引用的順序,所以

要做到預先擷取 (prefetch) 是不太可能的, prefetch 是指在分頁被引用之前就先載入到主記憶體中

大多數的演算法都採用所謂的依需求取用分頁(demand paging) 的方法,也就是當程式引用到分頁時才將分頁載入到主記憶體中

需求分頁法 (demand paging)依需求分頁 (demand paging) 的觀念是指只將程式

的一部分載入到記憶體中原本在 job開始執行一直到結束,整個 job 都要放在

記憶體中假如程式引用到沒有載入的分頁,再將分頁載入到

page frame

Belady 的靜態配置演算法

frame 0 1 2 3 0 1 2 3 0 1 2 3 4 5 6 7

0 0* 0 0 0 0 0 0 0 0 1* 1 1 4* 4 4 7*

1 1* 1 1 1 1 2* 2 2 2 2 2 2 5* 5 5

2 2* 3* 3 3 3 3 3 3 3 3 3 3 6* 6

LRU 的靜態配置演算法

frame 0 1 2 3 0 1 2 3 0 1 2 3 4 5 6 7

0 0* 0 0 3* 3 3 2* 2 2 1* 1 1 4* 4 4 7*

1 1* 1 1 0* 0 0 3* 3 3 2* 2 2 5* 5 5

2 2* 2 2 1* 1 1 0* 0 0 3* 3 3 6* 6

LFU 的靜態配置演算法

frame 0 1 2 3 0 1 2 3 0 1 2 3 4 5 6 7

0 0* 0 0 0 0 0 0 0 0 0 0 3* 3 3 3 3

1 1* 1 1 1 1 1 3* 3 1* 1 1 1 1 1 1

2 2* 3* 3 3 2* 2 2 2 2 2 4* 5* 6* 7*

FIFO 的靜態配置演算法

frame 0 1 2 3 0 1 2 3 0 1 2 3 4 5 6 7

0 0* 0 0 3* 3 3 2* 2 2 1* 1 1 4* 4 4 7*

1 1* 1 1 0* 0 0 3* 3 3 2* 2 2 5* 5 5

2 2* 2 2 1* 1 1 0* 0 0 3* 3 3 6* 6

只使用了 3 個 page frame 的 FIFO靜態配置演算法

frame 0 1 2 3 0 1 4 0 1 2 3 4

0 0* 0 0 3* 3 3 4* 4 4 4 4 4

1 1* 1 1 0* 0 0 0 0 2* 2 2

2 2* 2 2 1* 1 1 1 1 3* 3

動態分頁配置演算法 (dynamic paging algorithm)動態配置演算法會考量處理元執行過程中需求的改變,修正記憶體的配置情況

處理元引用記憶體位址的區域性關聯 (locality) 在此就可以派上用場

工作集演算法 (working set algorithm) 就是著名的動態配置演算法

工作集 (working set)一個 job 的工作集 (working set) 是記憶體中 job 使

用的 pages 的集合當使用者開始執行程式以後,開始會有 pages 載入

到記憶體中,經過一陣子以後,大多數的程式對於pages 的存取都會進入穩定的狀態,很少有 page fault發生,代表 job 會用到的 pages 都已經在主記憶體中,這些 pages 就形成了 job 的 working set

程式的執行有可能在進入另一個階段以後又開始產生page faults ,因為用到的 working set改變了

工作集中兩個重要的觀念為什麼不乾脆把 job 的 working set 中所有的

pages 一次全部都載入到記憶體中呢 ? 首先, working set 會隨 locality 而改變,所以除非是把所有用道 pages 都載入,否則無法全部一次都載入。

分時系統中會有 job swapping 的現象,重新載入記憶體的 job 一開始都會產生很多 page faults ,影響系統的效能。

Window size 為 3 的工作集動態配置演算法

frame 0 1 2 3 0 1 2 3 0 1 2 3 4 5 6 7

0 0* 0 0 3* 3 3 2* 2 2 1* 1 1 4* 4 4 7*

1 1* 1 1 0* 0 0 3* 3 3 2* 2 2 5* 5 5

2 2* 2 2 1* 1 1 0* 0 0 3* 3 3 6* 6

分配 1 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3

Window size 為 4 的工作集動態配置演算法

frame 0 1 2 3 0 1 2 3 0 1 2 3 4 5 6 7

0 0* 0 0 0 0 0 0 0 0 0 0 0 4* 4 4 4

1 1* 1 1 1 1 1 1 1 1 1 1 1 5* 5 5

2 2* 2 2 2 2 2 2 2 2 2 2 2 6* 6

3 3* 3 3 3 3 3 3 3 3 3 3 3 7*

分配 1 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4

Window size 為 9 的工作集動態配置演算法

frame 0 1 2 3 0 1 2 3 0 1 2 3 4 5 6 7

0 0* 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

1 1* 1 1 1 1 1 1 1 1 1 1 1 1 1 1

2 2* 2 2 2 2 2 2 2 2 2 2 2 2 2

3 3* 3 3 3 3 3 3 3 3 3 3 3 3

4 4* 4 4 4

5 5* 5 5

6 6* 6

7 7*

配置 1 2 3 4 4 4 4 4 4 4 4 4 5 6 7 8

使用 4 個 page frames但是引用次序不同的工作集動態配置演算法

frame 0 1 2 3 0 1 0 1 2 3 2 3 4 5 6 7

0 0* 0 0 0 0 0 0 0 0 0 4* 4 4 4

1 1* 1 1 1 1 1 1 1 1 1 5* 5 5

2 2* 2 2 2 2* 2 2 2 2 2 6* 6

3 3* 3 3 3 3* 3 3 3 3 3 7*

配置 1 2 3 4 4 4 3 2 3 4 3 2 3 4 4 4

分段分頁法的原理