虛擬儲存器
5.1 虛擬儲存器概述
第四章所介紹的各種儲存器管理方式有一個共同的特點,即它們都要求將一個作業全部裝入記憶體後方能執行。於是,出現了下面這樣兩種情況:
(1) 有的作業很大,其所要求的記憶體空間超過了記憶體總容量,作業不能全部被裝入記憶體,致使該作業無法執行;
(2) 有大量作業要求執行,但由於記憶體容量不足以容納所有這些作業,只能將少數作業裝入記憶體讓它們先執行,而將其它大量的作業留在外存上等待。
5.1.1 常規儲存管理方式的特徵和區域性性原理
1. 常規儲存器管理方式的特徵
我們把前一章中所介紹的各種儲存器管理方式統稱為傳統儲存器管理方式,它們全都具有如下兩個共同的特徵:
(1) 一次性
(2) 駐留性
2. 區域性性原理
程式執行時存在的區域性性現象,很早就已被人發現,但直到1968年,P.Denning才真正指出:程式在執行時將呈現出區域性性規律,即在一較短的時間內,程式的執行僅侷限於某個部分,相應地,它所訪問的儲存空間也侷限於某個區域。
侷限性又表現在下述兩個方面:
(1) 時間侷限性。
(2) 空間侷限性。
3. 虛擬儲存器的基本工作情況
基於區域性性原理可知,應用程式在執行之前沒有必要將之全部裝入記憶體,而僅須將那些當前要執行的少數頁面或段先裝入記憶體便可執行,其餘部分暫留在盤上。
5.1.2 虛擬儲存器的定義和特徵
1. 虛擬儲存器的定義
當使用者看到自己的程式能在系統中正常執行時,他會認為,該系統所具有的記憶體容量一定比自己的程式大,或者說,使用者所感覺到的記憶體容量會比實際記憶體容量大得多。但使用者所看到的大容量只是一種錯覺,是虛的,故人們把這樣的儲存器稱為虛擬儲存器。
2. 虛擬儲存器的特徵
與傳統的儲存器管理方式比較,虛擬儲存器具有以下三個重要特徵:
(1) 多次性。
(2) 對換性。
(3) 虛擬性。
5.1.3 虛擬儲存器的實現方法
1. 分頁請求系統
1) 硬體支援
主要的硬體支援有:
(1) 請求分頁的頁表機制。
(2) 缺頁中斷機構。
(3) 地址變換機構。
2) 實現請求分頁的軟體
2. 請求分段系統
1) 硬體支援
主要的硬體支援有:
(1) 請求分段的段表機制。
(2) 缺頁中斷機構。
(3) 地址變換機構。
2) 軟體支援
5.2 請求分頁儲存管理方式
5.2.1 請求分頁中的硬體支援
為了實現請求分頁,系統必須提供一定的硬體支援。計算機系統除了要求一定容量的記憶體和外存外,還需要有請求頁表機制、缺頁中斷機構以及地址變換機構。
1. 請求頁表機制
在請求分頁系統中需要的主要資料結構是請求頁表,其基本作用仍然是將使用者地址空間中的邏輯地址對映為記憶體空間中的實體地址。為了滿足頁面換進換出的需要,在請求頁表中又增加了四個欄位。這樣,在請求分頁系統中的每個頁表應含以下諸項:
2. 缺頁中斷機構
(1) 在指令執行期間產生和處理中斷訊號。
(2) 一條指令在執行期間可能產生多次缺頁中斷。
圖5-1 涉及6次缺頁中斷的指令
3. 地址變換機構
請求分頁系統中的地址變換機構是在分頁系統地址變換機構的基礎上,為實現虛擬儲存器,再增加了某些功能所形成的,如產生和處理缺頁中斷,以及從記憶體中換出一頁的功能等等。圖5-2示出了請求分頁系統中的地址變換過程。
圖5-2 請求分頁中的地址變換過程
5.2.2 請求分頁中的記憶體分配
1. 最小物理塊數的確定
一個顯而易見的事實是,隨著為每個程式所分配的物理塊的減少,將使程式在執行中的缺頁率上升,從而會降低程式的執行速度。為使程式能有效地工作,應為它分配一定數目的物理塊,但這並不是最小物理塊數的概念。
2. 記憶體分配策略
在請求分頁系統中,可採取兩種記憶體分配策略,即固定和可變分配策略。在進行置換時,也可採取兩種策略,即全域性置換和區域性置換。於是可組合出以下三種適用的策略。
1) 固定分配區域性置換(Fixed Allocation,Local Replacement)
2) 可變分配全域性置換(Variable Allocation,Global Replacement)
3) 可變分配區域性置換(Variable Allocation,Local Replacement)
3. 物理塊分配演算法
在採用固定分配策略時,如何將系統中可供分配的所有物理塊分配給各個程式,可採用下述幾種演算法:
(1) 平均分配演算法,即將系統中所有可供分配的物理塊平均分配給各個程式。
(2) 按比例分配演算法,即根據程式的大小按比例分配物理塊。如果系統中共有n個程式,每個程式的頁面數為Si,
則系統中各程式頁面數的總和為:
又假定系統中可用的物理塊總數為m,則每個程式所能分到的物理塊數為bi可由下式計算:
這裡,bi應該取整,它必須大於最小物理塊數。
(3) 考慮優先權的分配演算法。在實際應用中,為了照顧到重要的、緊迫的作業能儘快地完成,應為它分配較多的記憶體空間。通常採取的方法是把記憶體中可供分配的所有物理塊分成兩部分:一部分按比例地分配給各程式;另一部分則根據各程式的優先權進行分配,為高優先程式適當地增加其相應份額。在有的系統中,如重要的實時控制系統,則可能是完全按優先權為各程式分配其物理塊的。
5.2.3 頁面調入策略
為使程式能夠正常執行,必須事先將要執行的那部分程式和資料所在的頁面調入記憶體。現在的問題是:
(1) 系統應在何時調入所需頁面;
(2) 系統應從何處調入這些頁面;
(3) 是如何進行調入的。
1. 何時調入頁面
(1) 預調頁策略。
(2) 請求調頁策略。
2. 從何處調入頁面
(1) 系統擁有足夠的對換區空間,這時可以全部從對換區調入所需頁面,以提高調頁速度。
(2) 系統缺少足夠的對換區空間,這時凡是不會被修改的檔案,都直接從檔案區調入;而當換出這些頁面時,由於它們未被修改,則不必再將它們重寫到磁碟(換出),以後再調入時,仍從檔案區直接調入。但對於那些可能被修改的部分,在將它們換出時便須調到對換區,以後需要時再從對換區調入。
(3) NIX方式。
3. 頁面調入過程
每當程式所要訪問的頁面未在記憶體時(存在位為“0”),便向CPU發出一缺頁中斷,中斷處理程式首先保留CPU環境,分析中斷原因後轉入缺頁中斷處理程式。
4. 缺頁率
假設一個程式的邏輯空間為n頁,系統為其分配的記憶體物理塊數為m(m≤n)。如果在程式的執行過程中,訪問頁面成功(即所訪問頁面在記憶體中)的次數為S,訪問頁面失敗(即所訪問頁面不在記憶體中,需要從外存調入)的次數為F,則該程式總的頁面訪問次數為A ,那麼該程式在其執行過程中的缺頁率即為
事實上,在缺頁中斷處理時,當由於空間不足,需要置換部分頁面到外存時,選擇被置換頁面還需要考慮到置換的代價,如頁面是否被修改過。沒有修改過的頁面可以直接放棄,而修改過的頁面則必須進行儲存,所以處理這兩種情況時的時間也是不同的。假設被置換的頁面被修改的概率是β,其缺頁中斷處理時間為ta,被置換頁面沒有被修改的缺頁中斷時間為tb,那麼,缺頁中斷處理時間的計算公式為
5.3 頁面置換演算法
在程式執行過程中,若其所要訪問的頁面不在記憶體,而需把它們調入記憶體,但記憶體已無空閒空間時,為了保證該程式能正常執行,系統必須從記憶體中調出一頁程式或資料送到磁碟的對換區中。但應將哪個頁面調出,須根據一定的演算法來確定。通常,把選擇換出頁面的演算法稱為頁面置換演算法(Page-Replacement Algorithms)。置換演算法的好壞將直接影響到系統的效能。
5.3.1 最佳置換演算法和先進先出置換演算法
1. 最佳(Optimal)置換演算法
最佳置換演算法是由Belady於1966年提出的一種理論上的演算法。其所選擇的被淘汰頁面將是以後永不使用的,或許是在最長(未來)時間內不再被訪問的頁面。採用最佳置換演算法通常可保證獲得最低的缺頁率。但由於人們目前還無法預知,一個程式在記憶體的若干個頁面中,哪一個頁面是未來最長時間內不再被訪問的,因而該演算法是無法實現的,但可以利用該演算法去評價其它演算法。
圖5-3 利用最佳頁面置換演算法時的置換圖
2. 先進先出(FIFO)頁面置換演算法
FIFO演算法是最早出現的置換演算法。該演算法總是淘汰最先進入記憶體的頁面,即選擇在記憶體中駐留時間最久的頁面予以淘汰。該演算法實現簡單,只需把一個程式已調入記憶體的頁面按先後次序連結成一個佇列,並設定一個指標,稱為替換指標,使它總是指向最老的頁面。但該演算法與程式實際執行的規律不相適應,因為在程式中,有些頁面經常被訪問,比如,含有全域性變數、常用函式、例程等的頁面,FIFO演算法並不能保證這些頁面不被淘汰。
圖5-4 利用FIFO置換演算法時的置換圖
5.3.2 最近最久未使用和最少使用置換演算法
1. LRU(Least Recently Used)置換演算法的描述
FIFO置換演算法的效能之所以較差,是因為它所依據的條件是各個頁面調入記憶體的時間,而頁面調入的先後並不能反映頁面的使用情況。最近最久未使用(LRU)的頁面置換演算法是根據頁面調入記憶體後的使用情況做出決策的。
圖5-5 LRU頁面置換演算法
2. LRU置換演算法的硬體支援
1) 暫存器
為了記錄某程式在記憶體中各頁的使用情況,須為每個在記憶體中的頁面配置一個移位暫存器,可表示為
當程式訪問某物理塊時,要將相應暫存器的Rn-1位置成1。此時,定時訊號將每隔一定時間(例如100 ms)將暫存器右移一位。如果我們把n位暫存器的數看作是一個整數,那麼,具有最小數值的暫存器所對應的頁面,就是最近最久未使用的頁面。
圖5-6 某程式具有8個頁面時的LRU訪問情況
2) 棧
可利用一個特殊的棧儲存當前使用的各個頁面的頁面號。每當程式訪問某頁面時,便將該頁面的頁面號從棧中移出,將它壓入棧頂。因此,棧頂始終是最新被訪問頁面的編號,而棧底則是最近最久未使用頁面的頁面號。假定現有一程式,它分有五個物理塊,所訪問的頁面的頁面號序列為:
4,7,0,7,1,0,1,2,1,2,6
圖5-7 用棧儲存當前使用頁面時棧的變化情況
3. 最少使用(Least Frequently Used,LFU)置換演算法
在採用LFU演算法時,應為在記憶體中的每個頁面設定一個移位暫存器,用來記錄該頁面被訪問的頻率。該置換演算法選擇在最近時期使用最少的頁面作為淘汰頁。
5.3.3 Clock置換演算法
1. 簡單的Clock置換演算法
當利用簡單Clock演算法時,只需為每頁設定一位訪問位,再將記憶體中的所有頁面都通過連結指標連結成一個循
環佇列。
圖5-8 簡單Clock置換演算法的流程和示例
2. 改進型Clock置換演算法
在將一個頁面換出時,如果該頁已被修改過,便須將該頁重新寫回到磁碟上;但如果該頁未被修改過,則不必將它拷回磁碟。換而言之,對於修改過的頁面,在換出時所付出的開銷比未修改過的頁面大,或者說,置換代價大。在改進型Clock演算法中,除須考慮頁面的使用情況外,還須再增加一個因素——置換代價。
5.3.4 頁面緩衝演算法(Page Buffering Algorithm,PBA)
1. 影響頁面換進換出效率的若干因素
(1) 頁面置換演算法。
(2) 寫回磁碟的頻率。
(3) 讀入記憶體的頻率。
2. 頁面緩衝演算法PBA
PBA演算法的主要特點是:① 顯著地降低了頁面換進、換出的頻率,使磁碟I/O的操作次數大為減少,因而減少了頁面換進、換出的開銷;② 正是由於換入換出的開銷大幅度減小,才能使其採用一種較簡單的置換策略,如先進先出(FIFO)演算法,它不需要特殊硬體的支援,實現起來非常簡單。
1) 空閒頁面連結串列
2) 修改頁面連結串列
5.3.5 訪問記憶體的有效時間
與基本分頁儲存管理方式不同,在請求分頁管理方式中,記憶體有效訪問時間不僅要考慮訪問頁表和訪問實際實體地址資料的時間,還必須要考慮到缺頁中斷的處理時間。
5.4 “抖動”與工作集
由於請求分頁式虛擬儲存器系統的效能優越,在正常執行情況下,它能有效地減少記憶體碎片,提高處理機的利用率和吞吐量,故是目前最常用的一種系統。但如果在系統中執行的程式太多,程式在執行中會頻繁地發生缺頁情況,這又會對系統的效能產生很大的影響,故還須對請求分頁系統的效能做簡單的分析。
5.4.1 多道程式度與“抖動”
1. 多道程式度與處理機的利用率
由於虛擬儲存器系統能從邏輯上擴大記憶體,這時,只需裝入一個程式的部分程式和資料便可開始執行,故人們希望在系統中能執行更多的程式,即增加多道程式度,以提高處理機的利用率。但處理機的實際利用率卻如圖5-9中的實線所示。
圖5-9 處理機的利用率
2. 產生“抖動”的原因
發生“抖動”的根本原因是,同時在系統中執行的程式太多,由此分配給每一個程式的物理塊太少,不能滿足程式正常執行的基本要求,致使每個程式在執行時,頻繁地出現缺頁,必須請求系統將所缺之頁調入記憶體。這會使得在系統中排隊等待頁面調進/調出的程式數目增加。顯然,對磁碟的有效訪問時間也隨之急劇增加,造成每個程式的大部分時間都用於頁面的換進/換出,而幾乎不能再去做任何有效的工作,從而導致發生處理機的利用率急劇下降並趨於0的情況。我們稱此時的程式是處於“抖動”狀態。
5.4.2 工作集
1. 工作集的基本概念
程式發生缺頁率的時間間隔與程式所獲得的物理塊數有關。圖5-10示出了缺頁率與物理塊數之間的關係。
圖5-10 缺頁率與物理塊數之間的關係
2. 工作集的定義
所謂工作集,是指在某段時間間隔Δ裡,程式實際所要訪問頁面的集合。Denning指出,雖然程式只需要少量的幾頁在記憶體便可執行,但為了較少地產生缺頁,應將程式的全部工作集裝入記憶體中。然而我們無法事先預知程式在不同時刻將訪問哪些頁面,故仍只有像置換演算法那樣,用程式的過去某段時間內的行為作為程式在將來某段時間內行為的近似。
圖5-11 視窗為3、4、5時程式的工作集
5.4.3 “抖動”的預防方法
1. 採取區域性置換策略
在頁面分配和置換策略中,如果採取的是可變分配方式,則為了預防發生“抖動”,可採取區域性置換策略。
2. 把工作集演算法融入到處理機排程中
當排程程式發現處理機利用率低下時,它將試圖從外存調入一個新作業進入記憶體,來改善處理機的利用率。
3. 利用“L=S”準則調節缺頁率
Denning於1980年提出了“L=S”的準則來調節多道程式度,其中L是缺頁之間的平均時間,S是平均缺頁服務時間,即用於置換一個頁面所需的時間。如果是L遠比S大,說明很少發生缺頁,磁碟的能力尚未得到充分的利用;反之,如果是L比S小,則說明頻繁發生缺頁,缺頁的速度已超過磁碟的處理能力。只有當L與S接近時,磁碟和處理機都可達到它們的最大利用率。理論和實踐都已證明,利用“L=S”準則,對於調節缺頁率是十分有效的。
4. 選擇暫停的程式
當多道程式度偏高時,已影響到處理機的利用率,為了防止發生“抖動”,系統必須減少多道程式的數目。
5.5 請求分段儲存管理方式
5.5.1 請求分段中的硬體支援
為了實現請求分段式儲存管理,應在系統中配置多種硬體機構,以支援快速地完成請求分段功能。與請求分頁系統相似,在請求分段系統中所需的硬體支援有段表機制、缺段中斷機構,以及地址變換機構。
1. 請求段表機制
在請求分段式管理中所需的主要資料結構是請求段表。在該表中除了具有請求分頁機制中有的訪問欄位A、修改位M、存在位P和外存始址四個欄位外,還增加了存取方式欄位和增補位。這些欄位供程式在調進、調出時參考。下面給出請求分段的段表項。
2. 缺段中斷機構
在請求分段系統中採用的是請求調段策略。每當發現執行程式所要訪問的段尚未調入記憶體時,便由缺段中斷機構產生一缺段中斷訊號,進入OS後,由缺段中斷處理程式將所需的段調入記憶體。與缺頁中斷機構類似,缺段中斷機構同樣需要在一條指令的執行期間產生和處理中斷,以及在一條指令執行期間,可能產生多次缺段中斷。但由於分段是資訊的邏輯單位,因而不可能出現一條指令被分割在兩個分段中,和一組資訊被分割在兩個分段中的情況。缺段中斷的處理過程如圖5-12所示。
圖5-12 請求分段系統中的中斷處理過程
3. 地址變換機構
請求分段系統中的地址變換機構是在分段系統地址變換機構的基礎上形成的。因為被訪問的段並非全在記憶體,所以在地址變換時,若發現所要訪問的段不在記憶體,必須先將所缺的段調入記憶體,並修改段表,然後才能再利用段表進行地址變換。為此,在地址變換機構中又增加了某些功能,如缺段中斷的請求及處理等。圖5-13示出了請求分段系統的地址變換過程。
圖5-13 請求分段系統的地址變換過程
5.5.2 分段的共享與保護
1. 共享段表
(1) 共享程式計數count。
(2) 存取控制欄位。
(3) 段號。
圖5-14 共享段表項
2. 共享段的分配與回收
1) 共享段的分配
2) 共享段的回收
3. 分段保護
在分段系統中,由於每個分段在邏輯上是相對獨立的,因而比較容易實現資訊保護。目前,常採用以下幾種措施來確保資訊的安全。
1) 越界檢查
2) 存取控制檢查
3) 環保護機構
圖5-15 環保護機構
習 題 8:
1. 常規儲存器管理方式具有哪兩大特徵? 它對系統效能有何影響?
2. 什麼是程式執行時的時間侷限性和空間侷限性?
3. 虛擬儲存器有哪些特徵? 其中最本質的特徵是什麼?
4. 實現虛擬儲存器需要哪些硬體支援?
5. 實現虛擬儲存器需要哪幾個關鍵技術?
6. 在請求分頁系統中,頁表應包括哪些資料項? 每項的作用是什麼?
7. 試比較缺頁中斷機構與一般的中斷,它們之間有何明顯的區別?
8. 試說明請求分頁系統中的地址變換過程。
9. 何謂固定分配區域性置換和可變分配全域性置換的記憶體分配策略?
10. 在請求分頁系統中,應從何處將所需頁面調入記憶體?
11. 試說明在請求分頁系統中頁面的調入過程。
12. 在請求分頁系統中,常採用哪幾種頁面置換演算法?
13. 在一個請求分頁系統中,採用FIFO頁面置換演算法時,假如一個作業的頁面走向為4、3、2、1、4、3、5、4、3、2、1、5,當分配給該作業的物理塊數M分別為3和4時,試計算在訪問過程中所發生的缺頁次數和缺頁率,並比較所得結果。
14. 實現LRU演算法所需的硬體支援是什麼?
15. 試說明改進型Clock置換演算法的基本原理。
16. 影響頁面換進換出效率的若干因素是什麼?
17. 頁面緩衝演算法的主要特點是什麼? 它是如何降低頁面換進、換出的頻率的?
18. 在請求分頁系統中,產生“抖動”的原因是什麼?
19. 何謂工作集? 它是基於什麼原理確定的?
20. 當前可以利用哪幾種方法來防止“抖動”?
21. 試說明如何利用“L=S”準則來調節缺頁率,以避免“抖動”的發生。
22. 為了實現請求分段式儲存管理,應在系統中增加配置哪些硬體機構?
23. 在請求段表機制中,應設定哪些段表項?
24. 說明請求分段系統中的缺頁中斷處理過程。
25. 請對共享段表中的各項作簡要說明。
26. 如何實現共享分段的分配和回收?