操作系統原理 第五章 虛擬存儲器

5.1 虛擬存儲器概述

第四章所介紹的各種存儲器管理方式有一個共同的特點,即它們都要求將一個作業全部裝入內存後方能運行。於是,出現了下面這樣兩種情況:
(1) 有的作業很大,其所要求的內存空間超過了內存總容量,作業不能全部被裝入內存,致使該作業無法運行;
(2) 有大量作業要求運行,但由於內存容量不足以容納所有這些作業,只能將少數作業裝入內存讓它們先運行,而將其它大量的作業留在外存上等待。

5.1.1 常規存儲管理方式的特徵和局部性原理

1.常規存儲器管理方式的特徵

  • 一次性
  • 駐留性

2.局部性原理
程序在執行時將呈現出局部性規律,即在一較短的時間內,程序的執行僅侷限於某個部分,相應地,它所訪問的存儲空間也侷限於某個區域。
即:時間侷限性和空間侷限性

3.虛擬存儲器的基本工作情況
基於局部性原理可知,應用程序在運行之前沒有必要將之全部裝入內存,而僅須將那些當前要運行的少數頁面或段先裝入內存便可運行,其餘部分暫留在盤上。

5.1.2 虛擬存儲器的定義和特徵

1.定義
當用戶看到自己的程序能在系統中正常運行時,他會認爲,該系統所具有的內存容量一定比自己的程序大,或者說,用戶所感覺到的內存容量會比實際內存容量大得多。但用戶所看到的大容量只是一種錯覺,是虛的,故人們把這樣的存儲器稱爲虛擬存儲器。
特徵

  • 多次性
  • 對換性
  • 虛擬性

5.1.3 虛擬存儲器的實現方法

1.分頁請求系統
 1) 硬件支持
 主要的硬件支持有:
 (1) 請求分頁的頁表機制。
 (2) 缺頁中斷機構。
 (3) 地址變換機構。
 2) 實現請求分頁的軟件
 
 2.請求分段系統
 1) 硬件支持
 主要的硬件支持有:
 (1) 請求分段的頁表機制。
 (2) 缺頁中斷機構。
 (3) 地址變換機構。
 2) 軟件支持


5.2 請求分頁存儲管理方式

5.2.1 請求分頁中的硬件支持

爲了實現請求分頁,系統必須提供一定的硬件支持。計算機系統除了要求一定容量的內存和外存外,還需要有請求頁表機制、缺頁中斷機構以及地址變換機構。

1.請求頁表機制
在請求分頁系統中需要的主要數據結構是請求頁表,其基本作用仍然是將用戶地址空間中的邏輯地址映射爲內存空間中的物理地址。爲了滿足頁面換進換出的需要,在請求頁表中又增加了四個字段。這樣,在請求分頁系統中的每個頁表應含以下諸項:
在這裏插入圖片描述
2.缺頁中斷機構

  • 在指令執行期間產生和處理中斷信號
  • 一條指令再執行期間可能產生多次缺頁中斷

3.地址變換機構
請求分頁系統中的地址變換機構是在分頁系統地址變換機構的基礎上,爲實現虛擬存儲器,再增加了某些功能所形成的,如產生和處理缺頁中斷,以及從內存中換出一頁的功能等等。
在這裏插入圖片描述

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.何時調入頁面

  • 預調頁策略
  • 請求調頁策略

2.從何處調入頁面
(1) 系統擁有足夠的對換區空間,這時可以全部從對換區調入所需頁面,以提高調頁速度。
(2) 系統缺少足夠的對換區空間,這時凡是不會被修改的文件,都直接從文件區調入;而當換出這些頁面時,由於它們未被修改,則不必再將它們重寫到磁盤(換出),以後再調入時,仍從文件區直接調入。但對於那些可能被修改的部分,在將它們換出時便須調到對換區,以後需要時再從對換區調入。
(3)  UNIX方式。

3.頁面調入過程
每當程序所要訪問的頁面未在內存時(存在位爲“0”),便向CPU發出一缺頁中斷,中斷處理程序首先保留CPU環境,分析中斷原因後轉入缺頁中斷處理程序。

4.缺頁率
假設一個進程的邏輯空間爲n頁,系統爲其分配的內存物理塊數爲m(m≤n)。如果在進程的運行過程中,訪問頁面成功(即所訪問頁面在內存中)的次數爲S,訪問頁面失敗(即所訪問頁面不在內存中,需要從外存調入)的次數爲F,則該進程總的頁面訪問次數爲A = S + F,那麼該進程在其運行過程中的缺頁率即爲
在這裏插入圖片描述

事實上,在缺頁中斷處理時,當由於空間不足,需要置換部分頁面到外存時,選擇被置換頁面還需要考慮到置換的代價,如頁面是否被修改過。沒有修改過的頁面可以直接放棄,而修改過的頁面則必須進行保存,所以處理這兩種情況時的時間也是不同的。假設被置換的頁面被修改的概率是β,其缺頁中斷處理時間爲ta,被置換頁面沒有被修改的缺頁中斷時間爲tb,那麼,缺頁中斷處理時間的計算公式爲:t=β×ta+(1-β)×tb


5.3 頁面置換算法

在進程運行過程中,若其所要訪問的頁面不在內存,而需把它們調入內存,但內存已無空閒空間時,爲了保證該進程能正常運行,系統必須從內存中調出一頁程序或數據送到磁盤的對換區中。但應將哪個頁面調出,須根據一定的算法來確定。通常,把選擇換出頁面的算法稱爲頁面置換算法(Page-Replacement Algorithms) 置換算法的好壞將直接影響到系統的性能。

5.3.1 最佳置換算法和先進先出置換算法

1.最佳(Optimal)置換算法

最佳置換算法是由Belady於1966年提出的一種理論上的算法。其所選擇的被淘汰頁面將是以後永不使用的,或許是在最長(未來)時間內不再被訪問的頁面。採用最佳置換算法通常可保證獲得最低的缺頁率。但由於人們目前還無法預知,一個進程在內存的若干個頁面中,哪一個頁面是未來最長時間內不再被訪問的,因而該算法是無法實現的,但可以利用該算法去評價其它算法。

在這裏插入圖片描述
2.先進先出(FIFO)頁面置換算法

FIFO算法是最早出現的置換算法。該算法總是淘汰最先進入內存的頁面,即選擇在內存中駐留時間最久的頁面予以淘汰。該算法實現簡單,只需把一個進程已調入內存的頁面按先後次序鏈接成一個隊列,並設置一個指針,稱爲替換指針,使它總是指向最老的頁面。但該算法與進程實際運行的規律不相適應,因爲在進程中,有些頁面經常被訪問,比如,含有全局變量、常用函數、例程等的頁面,FIFO算法並不能保證這些頁面不被淘汰。

在這裏插入圖片描述

5.3.2 最近最久未使用和最少使用置換算法

1.LRU(Least Recently Used)置換算法的描述

FIFO置換算法的性能之所以較差,是因爲它所依據的條件是各個頁面調入內存的時間,而頁面調入的先後並不能反映頁面的使用情況。最近最久未使用(LRU)的頁面置換算法是根據頁面調入內存後的使用情況做出決策的。

在這裏插入圖片描述
2.LRU置換算法的硬件支持

  1. 寄存器
    爲了記錄某進程在內存中各頁的使用情況,須爲每個在內存中的頁面配置一個移位寄存器,可表示爲
    R = Rn-1Rn-2Rn-3 … R2R1R0

當進程訪問某物理塊時,要將相應寄存器的Rn-1位置成1。此時,定時信號將每隔一定時間(例如100 ms)將寄存器右移一位。如果我們把n位寄存器的數看作是一個整數,那麼,具有最小數值的寄存器所對應的頁面,就是最近最久未使用的頁面。

在這裏插入圖片描述
2)棧
可利用一個特殊的棧保存當前使用的各個頁面的頁面號。每當進程訪問某頁面時,便將該頁面的頁面號從棧中移出,將它壓入棧頂。因此,棧頂始終是最新被訪問頁面的編號,而棧底則是最近最久未使用頁面的頁面號。假定現有一進程,它分有五個物理塊,所訪問的頁面的頁面號序列爲:
4,7,0,7,1,0,1,2,1,2,6

在這裏插入圖片描述
3.最少使用(Least Frequently Used,LFU)置換算法

在採用LFU算法時,應爲在內存中的每個頁面設置一個移位寄存器,用來記錄該頁面被訪問的頻率。該置換算法選擇在最近時期使用最少的頁面作爲淘汰頁。

5.3.3 Clock置換算法

1.簡單的Clock置換算法

當利用簡單Clock算法時,只需爲每頁設置一位訪問位,再將內存中的所有頁面都通過鏈接指針鏈接成一個循環隊列。

在這裏插入圖片描述
2.改進型Clock置換算法

在將一個頁面換出時,如果該頁已被修改過,便須將該頁重新寫回到磁盤上;但如果該頁未被修改過,則不必將它拷回磁盤。換而言之,對於修改過的頁面,在換出時所付出的開銷比未修改過的頁面大,或者說,置換代價大。在改進型Clock算法中,除須考慮頁面的使用情況外,還須再增加一個因素——置換代價。

5.3.4 頁面緩衝算法(Page Buffering Algorithm,PBA)

1.影響頁面換進換出效率的若干因素

  • 頁面置換算法
  • 寫回磁盤的頻率,建立一個已經修改換出頁面的鏈表
  • 讀入內存的頻率

2.頁面緩衝算法PBA
PBA算法的主要特點是:
① 顯著地降低了頁面換進、換出的頻率,使磁盤I/O的操作次數大爲減少,因而減少了頁面換進、換出的開銷;
② 正是由於換入換出的開銷大幅度減小,才能使其採用一種較簡單的置換策略,如先進先出(FIFO)算法,它不需要特殊硬件的支持,實現起來非常簡單。

  1. 空閒頁面鏈表
  2. 修改頁面鏈表

5.3.5 訪問內存的有效時間

與基本分頁存儲管理方式不同,在請求分頁管理方式中,內存有效訪問時間不僅要考慮訪問頁表和訪問實際物理地址數據的時間,還必須要考慮到缺頁中斷的處理時間。

5.4 "抖動"與工作集

由於請求分頁式虛擬存儲器系統的性能優越,在正常運行情況下,它能有效地減少內存碎片,提高處理機的利用率和吞吐量,故是目前最常用的一種系統。但如果在系統中運行的進程太多,進程在運行中會頻繁地發生缺頁情況,這又會對系統的性能產生很大的影響,故還須對請求分頁系統的性能做簡單的分析。

5.4.1 多道程序度與"抖動"

1.多道程序度與處理機的利用率

由於虛擬存儲器系統能從邏輯上擴大內存,這時,只需裝入一個進程的部分程序和數據便可開始運行,故人們希望在系統中能運行更多的進程,即增加多道程序度,以提高處理機的利用率。但處理機的實際利用率卻如下圖中的實線所示。

在這裏插入圖片描述
2.產生"抖動"的原因

發生“抖動”的根本原因是,同時在系統中運行的進程太多,由此分配給每一個進程的物理塊太少,不能滿足進程正常運行的基本要求,致使每個進程在運行時,頻繁地出現缺頁,必須請求系統將所缺之頁調入內存。這會使得在系統中排隊等待頁面調進/調出的進程數目增加。顯然,對磁盤的有效訪問時間也隨之急劇增加,造成每個進程的大部分時間都用於頁面的換進/換出,而幾乎不能再去做任何有效的工作,從而導致發生處理機的利用率急劇下降並趨於0的情況。我們稱此時的進程是處於“抖動”狀態。

5.4.2 工作集

1.工作集的基本概念
在這裏插入圖片描述
2.工作集的定義

所謂工作集,是指在某段時間間隔Δ裏,進程實際所要訪問頁面的集合。Denning指出,雖然程序只需要少量的幾頁在內存便可運行,但爲了較少地產生缺頁,應將程序的全部工作集裝入內存中。然而我們無法事先預知程序在不同時刻將訪問哪些頁面,故仍只有像置換算法那樣,用程序的過去某段時間內的行爲作爲程序在將來某段時間內行爲的近似。

在這裏插入圖片描述

5.4.3 “抖動”的預防方法

1.採取局部置換策略
在頁面分配和置換策略中,如果採取的是可變分配方式,則爲了預防發生“抖動”,可採取局部置換策略。

2.把工作集算法融入到處理機調度中
當調度程序發現處理機利用率低下時,它將試圖從外存調入一個新作業進入內存,來改善處理機的利用率。

3.利用"L=S"準則調節缺頁率
Denning於1980年提出了“L=S”的準則來調節多道程序度,其中L是缺頁之間的平均時間,S是平均缺頁服務時間,即用於置換一個頁面所需的時間。如果是L遠比S大,說明很少發生缺頁,磁盤的能力尚未得到充分的利用;反之,如果是L比S小,則說明頻繁發生缺頁,缺頁的速度已超過磁盤的處理能力。只有當L與S接近時,磁盤和處理機都可達到它們的最大利用率。理論和實踐都已證明,利用“L=S”準則,對於調節缺頁率是十分有效的。

4.選擇暫停的進程
當多道程序度偏高時,已影響到處理機的利用率,爲了防止發生“抖動”,系統必須減少多道程序的數目。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章