虛擬存儲器算法
第四章所介紹的各類存儲器管理方式有一個共同的特色,即它們都要求將一個做業所有裝入內存後方能運行。因而,出現了下面這樣兩種狀況:安全
(1) 有的做業很大,其所要求的內存空間超過了內存總容量,做業不能所有被裝入內存,導致該做業沒法運行;數據結構
(2) 有大量做業要求運行,但因爲內存容量不足以容納全部這些做業,只能將少數做業裝入內存讓它們先運行,而將其它大量的做業留在外存上等待。函數
1. 常規存儲器管理方式的特徵post
咱們把前一章中所介紹的各類存儲器管理方式統稱爲傳統存儲器管理方式,它們全都具備以下兩個共同的特徵:性能
(1) 一次性3d
(2) 駐留性指針
2. 局部性原理blog
程序運行時存在的局部性現象,很早就已被人發現,但直到1968年,P.Denning才真正指出:程序在執行時將呈現出局部性規律,即在一較短的時間內,程序的執行僅侷限於某個部分,相應地,它所訪問的存儲空間也侷限於某個區域。隊列
侷限性又表如今下述兩個方面:
(1) 時間侷限性。
(2) 空間侷限性。
3. 虛擬存儲器的基本工做狀況
基於局部性原理可知,應用程序在運行以前沒有必要將之所有裝入內存,而僅須將那些當前要運行的少數頁面或段先裝入內存即可運行,其他部分暫留在盤上。
1. 虛擬存儲器的定義
當用戶看到本身的程序能在系統中正常運行時,他會認爲,該系統所具備的內存容量必定比本身的程序大,或者說,用戶所感受到的內存容量會比實際內存容量大得多。但用戶所看到的大容量只是一種錯覺,是虛的,故人們把這樣的存儲器稱爲虛擬存儲器。
2. 虛擬存儲器的特徵
與傳統的存儲器管理方式比較,虛擬存儲器具備如下三個重要特徵:
(1) 屢次性。
(2) 對換性。
(3) 虛擬性。
1. 分頁請求系統
1) 硬件支持
主要的硬件支持有:
(1) 請求分頁的頁表機制。
(2) 缺頁中斷機構。
(3) 地址變換機構。
2) 實現請求分頁的軟件
2. 請求分段系統
1) 硬件支持
主要的硬件支持有:
(1) 請求分段的段表機制。
(2) 缺頁中斷機構。
(3) 地址變換機構。
2) 軟件支持
爲了實現請求分頁,系統必須提供必定的硬件支持。計算機系統除了要求必定容量的內存和外存外,還須要有請求頁表機制、缺頁中斷機構以及地址變換機構。
1. 請求頁表機制
在請求分頁系統中須要的主要數據結構是請求頁表,其基本做用仍然是將用戶地址空間中的邏輯地址映射爲內存空間中的物理地址。爲了知足頁面換進換出的須要,在請求頁表中又增長了四個字段。這樣,在請求分頁系統中的每一個頁表應含如下諸項:
2. 缺頁中斷機構
(1) 在指令執行期間產生和處理中斷信號。
(2) 一條指令在執行期間可能產生屢次缺頁中斷。
圖5-1 涉及6次缺頁中斷的指令
3. 地址變換機構
請求分頁系統中的地址變換機構是在分頁系統地址變換機構的基礎上,爲實現虛擬存儲器,再增長了某些功能所造成的,如產生和處理缺頁中斷,以及從內存中換出一頁的功能等等。圖5-2示出了請求分頁系統中的地址變換過程。
圖5-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) 考慮優先權的分配算法。在實際應用中,爲了照顧到重要的、緊迫的做業能儘快地完成,應爲它分配較多的內存空間。一般採起的方法是把內存中可供分配的全部物理塊分紅兩部分:一部分按比例地分配給各進程;另外一部分則根據各進程的優先權進行分配,爲高優先進程適當地增長其相應份額。在有的系統中,如重要的實時控制系統,則多是徹底按優先權爲各進程分配其物理塊的。
爲使進程可以正常運行,必須事先將要執行的那部分程序和數據所在的頁面調入內存。如今的問題是:
(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,那麼,缺頁中斷處理時間的計算公式爲
在進程運行過程當中,若其所要訪問的頁面不在內存,而需把它們調入內存,但內存已無空閒空間時,爲了保證該進程能正常運行,系統必須從內存中調出一頁程序或數據送到磁盤的對換區中。但應將哪一個頁面調出,須根據必定的算法來肯定。一般,把選擇換出頁面的算法稱爲頁面置換算法(Page-Replacement Algorithms)。置換算法的好壞將直接影響到系統的性能。
1. 最佳(Optimal)置換算法
最佳置換算法是由Belady於1966年提出的一種理論上的算法。其所選擇的被淘汰頁面將是之後永不使用的,或許是在最長(將來)時間內再也不被訪問的頁面。採用最佳置換算法一般可保證得到最低的缺頁率。但因爲人們目前還沒法預知,一個進程在內存的若干個頁面中,哪個頁面是將來最長時間內再也不被訪問的,於是該算法是沒法實現的,但能夠利用該算法去評價其它算法。
圖5-3 利用最佳頁面置換算法時的置換圖
2. 先進先出(FIFO)頁面置換算法
FIFO算法是最先出現的置換算法。該算法老是淘汰最早進入內存的頁面,即選擇在內存中駐留時間最久的頁面予以淘汰。該算法實現簡單,只需把一個進程已調入內存的頁面按前後次序連接成一個隊列,並設置一個指針,稱爲替換指針,使它老是指向最老的頁面。但該算法與進程實際運行的規律不相適應,由於在進程中,有些頁面常常被訪問,好比,含有全局變量、經常使用函數、例程等的頁面,FIFO算法並不能保證這些頁面不被淘汰。
圖5-4 利用FIFO置換算法時的置換圖
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算法時,應爲在內存中的每一個頁面設置一個移位寄存器,用來記錄該頁面被訪問的頻率。該置換算法選擇在最近時期使用最少的頁面做爲淘汰頁。
1. 簡單的Clock置換算法
當利用簡單Clock算法時,只需爲每頁設置一位訪問位,再將內存中的全部頁面都經過連接指針連接成一個循
環隊列。
圖5-8 簡單Clock置換算法的流程和示例
2. 改進型Clock置換算法
在將一個頁面換出時,若是該頁已被修改過,便須將該頁從新寫回到磁盤上;但若是該頁未被修改過,則沒必要將它拷回磁盤。換而言之,對於修改過的頁面,在換出時所付出的開銷比未修改過的頁面大,或者說,置換代價大。在改進型Clock算法中,除須考慮頁面的使用狀況外,還須再增長一個因素——置換代價。
1. 影響頁面換進換出效率的若干因素
(1) 頁面置換算法。
(2) 寫回磁盤的頻率。
(3) 讀入內存的頻率。
2. 頁面緩衝算法PBA
PBA算法的主要特色是:① 顯著地下降了頁面換進、換出的頻率,使磁盤I/O的操做次數大爲減小,於是減小了頁面換進、換出的開銷;② 正是因爲換入換出的開銷大幅度減少,才能使其採用一種較簡單的置換策略,如先進先出(FIFO)算法,它不須要特殊硬件的支持,實現起來很是簡單。
1) 空閒頁面鏈表
2) 修改頁面鏈表
與基本分頁存儲管理方式不一樣,在請求分頁管理方式中,內存有效訪問時間不只要考慮訪問頁表和訪問實際物理地址數據的時間,還必需要考慮到缺頁中斷的處理時間。
因爲請求分頁式虛擬存儲器系統的性能優越,在正常運行狀況下,它能有效地減小內存碎片,提升處理機的利用率和吞吐量,故是目前最經常使用的一種系統。但若是在系統中運行的進程太多,進程在運行中會頻繁地發生缺頁狀況,這又會對系統的性能產生很大的影響,故還須對請求分頁系統的性能作簡單的分析。
1. 多道程序度與處理機的利用率
因爲虛擬存儲器系統能從邏輯上擴大內存,這時,只需裝入一個進程的部分程序和數據即可開始運行,故人們但願在系統中能運行更多的進程,即增長多道程序度,以提升處理機的利用率。但處理機的實際利用率卻如圖5-9中的實線所示。
圖5-9 處理機的利用率
2. 產生「抖動」的緣由
發生「抖動」的根本緣由是,同時在系統中運行的進程太多,由此分配給每個進程的物理塊太少,不能知足進程正常運行的基本要求,導致每一個進程在運行時,頻繁地出現缺頁,必須請求系統將所缺之頁調入內存。這會使得在系統中排隊等待頁面調進/調出的進程數目增長。顯然,對磁盤的有效訪問時間也隨之急劇增長,形成每一個進程的大部分時間都用於頁面的換進/換出,而幾乎不能再去作任何有效的工做,從而致使發生處理機的利用率急劇降低並趨於0的狀況。咱們稱此時的進程是處於「抖動」狀態。
1. 工做集的基本概念
進程發生缺頁率的時間間隔與進程所得到的物理塊數有關。圖5-10示出了缺頁率與物理塊數之間的關係。
圖5-10 缺頁率與物理塊數之間的關係
2. 工做集的定義
所謂工做集,是指在某段時間間隔Δ裏,進程實際所要訪問頁面的集合。Denning指出,雖然程序只須要少許的幾頁在內存即可運行,但爲了較少地產生缺頁,應將程序的所有工做集裝入內存中。然而咱們沒法事先預知程序在不一樣時刻將訪問哪些頁面,故仍只有像置換算法那樣,用程序的過去某段時間內的行爲做爲程序在未來某段時間內行爲的近似。
圖5-11 窗口爲三、四、5時進程的工做集
1. 採起局部置換策略
在頁面分配和置換策略中,若是採起的是可變分配方式,則爲了預防發生「抖動」,可採起局部置換策略。
2. 把工做集算法融入處處理機調度中
當調度程序發現處理機利用率低下時,它將試圖從外存調入一個新做業進入內存,來改善處理機的利用率。
3. 利用「L=S」準則調節缺頁率
Denning於1980年提出了「L=S」的準則來調節多道程序度,其中L是缺頁之間的平均時間,S是平均缺頁服務時間,即用於置換一個頁面所需的時間。若是是L遠比S大,說明不多發生缺頁,磁盤的能力還沒有獲得充分的利用;反之,若是是L比S小,則說明頻繁發生缺頁,缺頁的速度已超過磁盤的處理能力。只有當L與S接近時,磁盤和處理機均可達到它們的最大利用率。理論和實踐都已證實,利用「L=S」準則,對於調節缺頁率是十分有效的。
4. 選擇暫停的進程
當多道程序度偏高時,已影響處處理機的利用率,爲了防止發生「抖動」,系統必須減小多道程序的數目。
爲了實現請求分段式存儲管理,應在系統中配置多種硬件機構,以支持快速地完成請求分段功能。與請求分頁系統類似,在請求分段系統中所需的硬件支持有段表機制、缺段中斷機構,以及地址變換機構。
1. 請求段表機制
在請求分段式管理中所需的主要數據結構是請求段表。在該表中除了具備請求分頁機制中有的訪問字段A、修改位M、存在位P和外存始址四個字段外,還增長了存取方式字段和增補位。這些字段供程序在調進、調出時參考。下面給出請求分段的段表項。
2. 缺段中斷機構
在請求分段系統中採用的是請求調段策略。每當發現運行進程所要訪問的段還沒有調入內存時,便由缺段中斷機構產生一缺段中斷信號,進入OS後,由缺段中斷處理程序將所需的段調入內存。與缺頁中斷機構相似,缺段中斷機構一樣須要在一條指令的執行期間產生和處理中斷,以及在一條指令執行期間,可能產生屢次缺段中斷。但因爲分段是信息的邏輯單位,於是不可能出現一條指令被分割在兩個分段中,和一組信息被分割在兩個分段中的狀況。缺段中斷的處理過程如圖5-12所示。
圖5-12 請求分段系統中的中斷處理過程
3. 地址變換機構
請求分段系統中的地址變換機構是在分段系統地址變換機構的基礎上造成的。由於被訪問的段並不是全在內存,因此在地址變換時,若發現所要訪問的段不在內存,必須先將所缺的段調入內存,並修改段表,而後才能再利用段表進行地址變換。爲此,在地址變換機構中又增長了某些功能,如缺段中斷的請求及處理等。圖5-13示出了請求分段系統的地址變換過程。
圖5-13 請求分段系統的地址變換過程
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頁面置換算法時,假如一個做業的頁面走向爲四、三、二、一、四、三、五、四、三、二、一、5,當分配給該做業的物理塊數M分別爲3和4時,試計算在訪問過程當中所發生的缺頁次數和缺頁率,並比較所得結果。
14. 實現LRU算法所需的硬件支持是什麼?
15. 試說明改進型Clock置換算法的基本原理。
16. 影響頁面換進換出效率的若干因素是什麼?
17. 頁面緩衝算法的主要特色是什麼? 它是如何下降頁面換進、換出的頻率的?
18. 在請求分頁系統中,產生「抖動」的緣由是什麼?
19. 何謂工做集? 它是基於什麼原理肯定的?
20. 當前能夠利用哪幾種方法來防止「抖動」?
21. 試說明如何利用「L=S」準則來調節缺頁率,以免「抖動」的發生。
22. 爲了實現請求分段式存儲管理,應在系統中增長配置哪些硬件機構?
23. 在請求段表機制中,應設置哪些段表項?
24. 說明請求分段系統中的缺頁中斷處理過程。
25. 請對共享段表中的各項做簡要說明。
26. 如何實現共享分段的分配和回收?