第 11 章 虛擬記憶體技術和虛擬定址

58
1 第 11 第 第第第第 第第第第第第第

Upload: corbin

Post on 12-Jan-2016

129 views

Category:

Documents


0 download

DESCRIPTION

第 11 章 虛擬記憶體技術和虛擬定址. 虛擬記憶體. 虛擬記憶體隱藏實體記憶體的底層細節,提供另外一種更方便規劃的記憶環境。 虛擬記憶體建造虛擬的空間圖像 虛擬記憶體涵蓋各種不同的技術和方法。. 虛擬範例:位元組定址. 還記得:在字組定址的實體記憶體上,把字組定址轉譯成位元組定址,正是虛擬位址的映射觀念。 智慧型控制器會負責把字組定址轉譯成位元組定址。. 虛擬術語. MMU (記憶體管理單元) 記憶體的智慧型控制器 MMU 接受處理器所送出的虛擬位址,再轉換成實體位址(轉換細節通常隱藏在 MMU 背後)。. 虛擬術語( Cont. ). 虛擬位址 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第  11  章 虛擬記憶體技術和虛擬定址

1

第 11 章虛擬記憶體技術和虛擬定址

Page 2: 第  11  章 虛擬記憶體技術和虛擬定址

2

虛擬記憶體

• 虛擬記憶體隱藏實體記憶體的底層細節,提供另外一種更方便規劃的記憶環境。

• 虛擬記憶體建造虛擬的空間圖像• 虛擬記憶體涵蓋各種不同的技術和方法。

Page 3: 第  11  章 虛擬記憶體技術和虛擬定址

3

虛擬範例:位元組定址

• 還記得:在字組定址的實體記憶體上,把字組定址轉譯成位元組定址,正是虛擬位址的映射觀念。

• 智慧型控制器會負責把字組定址轉譯成位元組定址。

Page 4: 第  11  章 虛擬記憶體技術和虛擬定址

4

虛擬術語

• MMU (記憶體管理單元)– 記憶體的智慧型控制器– MMU 接受處理器所送出的虛擬位址,再轉換成實體位址(轉換細節通常隱藏在MMU 背後)。

Page 5: 第  11  章 虛擬記憶體技術和虛擬定址

5

虛擬術語( Cont. )

• 虛擬位址– 虛擬位址非實體(或稱真實)位址– 目前大部分的處理器使用的位址是虛擬位址,而非實體位址。

• 虛擬空間– 虛擬空間意指所有虛擬位址的集合– 可以大於或小於實體空間

Page 6: 第  11  章 虛擬記憶體技術和虛擬定址

6

多重實體記憶介面

• 許多電腦可以把多個實體記憶體整合到單一虛擬空間。

• MMU 可以延伸出更複雜的記憶體組織– 比如:整合 SRAM 和 DRAM 兩種不同的實體記憶體:

( SRAM 一個字組四個位元組)( DRAM 一個字組八個位元組)– 可以使用相同的指令,來存取位元組。

Page 7: 第  11  章 虛擬記憶體技術和虛擬定址

7

涵蓋雙實體記憶介面的虛擬系統

Page 8: 第  11  章 虛擬記憶體技術和虛擬定址

8

虛擬定址

• 如何提供虛擬空間?• 比如:

– 記憶體 1 的位址 0 到 999– 記憶體 2 的位址 1000 到 1999

• 只要根據位址編號, MMU 就可以知道目標是哪一個實體記憶體,和所使用的存取策略。

Page 9: 第  11  章 虛擬記憶體技術和虛擬定址

9

雙實體記憶介面的虛擬位址

Page 10: 第  11  章 虛擬記憶體技術和虛擬定址

10

位址映射

• 位址映射由 MMU 負責,又稱為位址轉譯。• 如同之前範例:

– 記憶體 1 的虛擬位址與實體位址相同,因此直接轉送這些虛擬位址給記憶體 1 ;

– 記憶體 2 的虛擬位址從 1000 開始,因此 MMU 必須在轉送給記憶體 2 之前,就先把虛擬位址轉譯到真實位址。

Page 11: 第  11  章 虛擬記憶體技術和虛擬定址

11

執行位址轉譯的執行步驟

Page 12: 第  11  章 虛擬記憶體技術和虛擬定址

12

避開計算

• 數學計算成本昂貴• 盡量避開數學計算• 解決的方法應該是:謹慎地使用 2 的冪次位元,以最簡單的虛擬位址分割方式,完成必要的位址轉譯。

Page 13: 第  11  章 虛擬記憶體技術和虛擬定址

13

2 的冪次範例

• 1000 個位元組不是 2 的冪次方• 實體記憶體應該改成 210=1024 位元組

• 最好改成– 位址 0 到 1023 給記憶體 1

– 位址 1024 到 2047 給記憶體 2

Page 14: 第  11  章 虛擬記憶體技術和虛擬定址

14

二進位位址範例

• 以十進位的眼光來看,這些數值似乎不怎麼相似!改以二進位元排列,發現低階位元排列幾乎相同,唯一不同的只有最高階位元。

Page 15: 第  11  章 虛擬記憶體技術和虛擬定址

15

重點

選擇 2 的冪次虛擬位址可以避開麻煩的算術計算,只要使用最簡單的位元分割,就可以讓 MMU 選擇到正確的實體記憶體,並執行必要的位址轉譯。

Page 16: 第  11  章 虛擬記憶體技術和虛擬定址

16

非連續位址 • 連續位址

– 虛擬位址從零開始到最大位址,連續不斷。– 每一個虛擬位址總是對應一個等效的實體位置。

• 非連續位址– 實體記憶體都會有其映射的虛擬空間– 使用者有權選擇記憶體的數量,或省略某些實體記憶體,這表示部分的虛擬位址將無法使用。

– 組合實體位址可能會出現非連續位址– 造成虛擬空間出現漏洞

Page 17: 第  11  章 虛擬記憶體技術和虛擬定址

17

非連續位址圖

• 一旦處理器存取到漏洞,將出現錯誤

Page 18: 第  11  章 虛擬記憶體技術和虛擬定址

18

程式設計師受到的影響

虛擬空間可能是連續位址,每個位址會映射到一個實體記憶體的位置;另外,虛擬空間也可能非連續,造成虛擬空間出現一個或多個空洞,一旦處理器嘗試讀寫這些空洞,將因為找不到等效的實體記憶體,而出現錯誤。

Page 19: 第  11  章 虛擬記憶體技術和虛擬定址

19

虛擬記憶體的動機

• 硬體整合同質性• 程式規劃便利性• 支援多重程式• 程式和資料保護

Page 20: 第  11  章 虛擬記憶體技術和虛擬定址

20

多重虛擬空間和多重程式執行

• 目標:多重程式執行–早期因為記憶體資源的衝突問題,多重程式執行是不可行的。

– 因此,必須有能力防止程式之間彼此的衝突與干擾。

• 技巧:提供各個程式擁有自己的虛擬位址空間,各自獨力互不干擾。

Page 21: 第  11  章 虛擬記憶體技術和虛擬定址

21

一個實體四個虛擬空間範例

Page 22: 第  11  章 虛擬記憶體技術和虛擬定址

22

多階層虛擬化

• MMU 可以把多重虛擬位址轉譯到單一實體記憶體。

• MMU硬體還可以執行其它不同的虛擬化映射,比如:– 映射到多個實體記憶體– 把位元組位址轉譯到字組位址。

Page 23: 第  11  章 虛擬記憶體技術和虛擬定址

23

動態虛擬空間的建立技術

• 基底 -界線暫存器• 區段• 分頁請求

Page 24: 第  11  章 虛擬記憶體技術和虛擬定址

24

基底 - 界限暫存器

• 使用兩個暫存器:基底暫存器和界限暫存器,來界定出虛擬空間的位置。

• 在致能 MMU 之前,必須先載入數值到這兩個暫存器:–基底暫存器儲存實體記憶體的位址,剛好指向虛擬空間的開頭。

–界限暫存器則儲存整個虛擬空間的大小。

Page 25: 第  11  章 虛擬記憶體技術和虛擬定址

25

使用基底 - 界限暫存器的虛擬機制

Page 26: 第  11  章 虛擬記憶體技術和虛擬定址

26

界限的保護

• 為什麼要多一個界限暫存器呢?• 答案就是:保護!• 界限暫存器用來保證:程式不會超過其管轄範圍。

• 為了實現這種保護功能, MMU 必須檢查每一個記憶體參考,一旦存取的記憶體位址跳出 M ,就會發生錯誤。

Page 27: 第  11  章 虛擬記憶體技術和虛擬定址

27

保護觀念

支援多重程式執行的虛擬記憶體必須能夠提供保護,防止程式讀取或改變其它程式所座落的記憶體內容。

Page 28: 第  11  章 虛擬記憶體技術和虛擬定址

28

區段

• 基底 -界限的虛擬技術稱為粗粒映射。• 另一種稱為細粒映射。• 典型來看,電腦結構師發現:

– 應用程式內部包含某些程序和呼叫流程,如果整個載入到記憶體時,會佔據許多空間。

– 大部分的應用程式在某個時間點,可能只有一個程序正在執行,顯然載入整個程式,有些浪費!

Page 29: 第  11  章 虛擬記憶體技術和虛擬定址

29

區段問題

• 細粒映射只有需要這些區塊時,才載入記憶體,不必載入全部程式到記憶體。– 程式片段可以先放在外部儲存裝置– 有需求時再載入到記憶體

• 這種策略就是所謂的區段化,而這些程式片段就是區段。

• 區段問題:作業系統移動資料進出時,會受到不同區段大小的影響,容易造成記憶體的碎裂化。

Page 30: 第  11  章 虛擬記憶體技術和虛擬定址

30

區段結論

區段是一種虛擬記憶體策略,通常意指:程式被分割成不同大小的區塊,只有需要這些區塊時,才會將區塊放到記憶體內,然而目前比較少用區段觀念,因為區段容易導致記憶體的碎裂。

Page 31: 第  11  章 虛擬記憶體技術和虛擬定址

31

分頁請求

• 相對區段而言,另一種比較成功的分頁請求技術。

• 分頁請求把所有的程式分割成固定大小的區塊,稱為分頁。

• 分頁大小–早期,選擇 512 B 或 1 KB 分頁大小。–近年, Pentium 使用 4KB 分頁。

Page 32: 第  11  章 虛擬記憶體技術和虛擬定址

32

分頁請求具備的兩個技術

• 分頁硬體,用來映射位址和偵測分頁錯誤。

• 分頁軟體,用來交換外部儲存裝置和實體記憶體之間的分頁。

Page 33: 第  11  章 虛擬記憶體技術和虛擬定址

33

分頁硬體• 分頁硬體讓軟體(通常是作業系統)可以請求相關的分頁事宜,包含:指定分頁位址、使用虛擬位址執行應用程式、…等。

• 硬體會轉譯記憶體位址,但是– 如果硬體存取不到分頁所指定的位址,就會發生分頁錯誤。

– 分頁錯誤可能遺失分頁–硬體的責任會通知作業系統有個錯誤發生了,讓軟體決定並解決問題。

Page 34: 第  11  章 虛擬記憶體技術和虛擬定址

34

分頁軟體

• 分頁軟體必須決定–那些分頁放在記憶體,哪些放在外部儲存裝置。– 一旦需要分頁時,軟體會負責請求動作。–硬體報告分頁錯誤後,分頁軟體必須接手。– 分頁軟體必須讀取必要的分頁到記憶體。

• 分頁硬體和分頁軟體必須一起工作– 分頁錯誤發生後,硬體必須儲存當時的狀態。–軟體必須瞭解如何規劃 MMU 的細節動作。

Page 35: 第  11  章 虛擬記憶體技術和虛擬定址

35

分頁置換

• 一開始– 虛擬記憶體會把分頁搬到記憶體內部– 如果記憶體滿載,應用程式繼續要求新的分頁,則系統必須回收現有的分頁,讓出空間給新的分頁,稱為分頁置換。

• 分頁置換與效能有相當的關聯– 分頁在外部儲存裝置和記憶體之間的轉移動作,非常耗時。

Page 36: 第  11  章 虛擬記憶體技術和虛擬定址

36

分頁術語

• 分頁:一個固定大小的程式區塊• 框架:剛好容納分頁的實體記憶位置• 常駐狀態:分頁已經置放在記憶體框架內部,稱該分頁進入常駐狀態。

• 常駐集合:所有常駐於記憶體的分頁

Page 37: 第  11  章 虛擬記憶體技術和虛擬定址

37

分頁資料結構

• 整個分頁請求的資料結構,就是所謂的分頁表。– 最簡單的分頁表就是:儲存分頁號碼的一維陣列索引。

–索引依序標示為 0、 1、…等。– 每個分頁表項目不是 null 指標,就是分頁的實體位址。

Page 38: 第  11  章 虛擬記憶體技術和虛擬定址

38

分頁表

Page 39: 第  11  章 虛擬記憶體技術和虛擬定址

39

分頁位址轉譯

• 為了瞭解分頁硬體,可把整個位址空間分割成固定大小的分頁。

Page 40: 第  11  章 虛擬記憶體技術和虛擬定址

40

分頁位址轉譯( Cont. )

• 假設分頁大小為固定的 K 位元組• 把虛擬位址 V 轉譯到實體位址 P ,需要以下步驟:– 先決定虛擬位址 V 的分頁號碼– 把分頁號碼當作分頁表索引,找到該分頁的第一個位元組位址。

– 決定 V離第一個位元組位址的距離,然後移動到該記憶體框架同樣距離的位址。

Page 41: 第  11  章 虛擬記憶體技術和虛擬定址

41

分頁位址轉譯的數學觀點

• 假設分頁號碼為 N ,如下:

• 偏移位址 O ,如下:O = V modulo K

• 虛擬位址 V 可以使用分頁表 N 和偏移位址 O ,轉譯成對應的實體位址 P ,如下:

P = 分頁表 [N] + O

Page 42: 第  11  章 虛擬記憶體技術和虛擬定址

42

使用 2 的冪次

• 算術運算成本昂貴• 分頁系統使用 2 的冪次方

–即每一個分頁可以容納 2q個位元組,– 分頁表改由位元萃取,取出記憶體位址

• MMU 執行運算,把虛擬位址 V 轉譯成實體位址 P :P= 分頁表 [ 高階位元 (V)] or 低階位元 (V)

Page 43: 第  11  章 虛擬記憶體技術和虛擬定址

43

MMU 的硬體轉譯工作圖

Page 44: 第  11  章 虛擬記憶體技術和虛擬定址

44

出現、使用、修改位元

• 分頁表最常使用的控制位元,協調分頁軟硬體的相關運作。

Page 45: 第  11  章 虛擬記憶體技術和虛擬定址

45

分頁表儲存

• 哪麼分頁表要放在哪裡?– 某些系統會把分頁表儲存在 MMU晶片。– 有些處理器把分頁表放在記憶體!

Page 46: 第  11  章 虛擬記憶體技術和虛擬定址

46

儲存在實體記憶體的分頁表

Page 47: 第  11  章 虛擬記憶體技術和虛擬定址

47

分頁效率

• 記憶體是電腦系統中,重複使用最頻繁的資源。

• 想把分頁表放在記憶體– 必須有足夠的效率– 避免成為瓶頸

Page 48: 第  11  章 虛擬記憶體技術和虛擬定址

48

TLB

• TLB (轉換後備緩衝器)是一種特殊高速硬體,可以用來進行分頁表的查閱動作,最佳化分頁請求的效能。

• TLB 是一種 CAM (內容定址記憶體),每當MMU 轉譯位址時,總會在 TLB 上置放一份拷貝,讓系統進行高速查閱。

• 如果在 TLB內找不到相關的資訊,則會繼續進行標一般準的位址轉譯動作。

Page 49: 第  11  章 虛擬記憶體技術和虛擬定址

49

TLB 的效能

• 為什麼 TLB 可以改善效能呢?• 處理器傾向連續擷取記憶體指令• 這種連續擷取意味:

– 直接運用下一個指令的機率很高– 不必再次索引分頁表,節省轉譯時間。

• 運用 TLB 的效能改善相當明顯。

Page 50: 第  11  章 虛擬記憶體技術和虛擬定址

50

TLB 的重要性

TLB特殊高速硬體設備常用來最佳化分頁系統的效能表現,沒有 TLB 的虛擬記憶體速度顯然太慢!

Page 51: 第  11  章 虛擬記憶體技術和虛擬定址

51

對程式設計師的影響

• 經驗顯示:分頁請求對大部分的電腦程式而言,運作良好!

• 因此,程式設計師傾向– 把整個程序碼放到單一分頁–資料物件盡量集中在連續的記憶體位置–愈多次的存取動作愈能提昇執行的效能– 某些編譯器也將資料項目填入分頁,來最佳化效能。

Page 52: 第  11  章 虛擬記憶體技術和虛擬定址

52

陣列存取

• 陣列存取可能會影響虛擬記憶體的效能問題

• 陣列在記憶體的排列方式通常有兩種:– 列排序– 行排序

Page 53: 第  11  章 虛擬記憶體技術和虛擬定址

53

列排序

• 二維的位元組陣列 A[i,j] 的位置如下:位置 (A) + i×Q + j

• 其中, Q 是每一列的位元組數目。

Page 54: 第  11  章 虛擬記憶體技術和虛擬定址

54

最佳化的列排序• 程式設計師可以控制程式的迴圈,重複地處理陣列,字元陣列 A[N,M] 以列排序地儲存在記憶體上,下列迴圈指令:

for i = 1 to N {

for j = 1 to M{

A[i,j]=0;

}

}

Page 55: 第  11  章 虛擬記憶體技術和虛擬定址

55

未最佳化的列排序

• 如果改以行來儲存記憶體,則迴圈處理可能需要較少的執行時間:

for j = 1 to M {

for i = 1 to N{

A[i,j]=0;

}

}

Page 56: 第  11  章 虛擬記憶體技術和虛擬定址

56

結論

• 虛擬記憶體系統提供– 非真實的位址空間給處理器– 隱藏底層實體記憶體的相關細節– 提供程式設計師方便的開發環境、支援多重程式、和保護。

– 讓執行在處理器的應用程式位址總是由零開始。

Page 57: 第  11  章 虛擬記憶體技術和虛擬定址

57

結論( Cont. )

• 目前存在各種不同的虛擬記憶體結構• 虛擬技術包含

–基底−邊界–區段– 和分頁請求

• 分頁請求是目前最受到歡迎的虛擬技術– 分頁請求使用分頁表作映射動作– TLB 高速搜尋機制讓分頁表查閱更有效率

Page 58: 第  11  章 虛擬記憶體技術和虛擬定址

58

結論( Cont. )

• 虛擬記憶體系統也使用 2 的冪次方,以避開繁雜的算術或邏輯運算,直接轉譯位址。