1. 程式人生 > >作業系統之虛擬儲存管理

作業系統之虛擬儲存管理

 

虛擬儲存器 邏輯上擴充記憶體


1. 虛擬儲存器的基本概念

   所謂“虛擬儲存器”,是指具有請求調入功能和置換功能,能從邏輯上對記憶體容量加以擴充的一種儲存器系統。


         (1) 虛擬儲存管理下

                  記憶體邏輯容量由記憶體容量和外存容量之和所決定
                  執行速度接近於記憶體速度
                  每位的成本卻接近於外存


         (2) 虛擬儲存器的實現


                虛擬儲存管理:
                     允許將一個作業分多次調入記憶體。
                     若採用連續分配方式,需申請足夠空間,再分多次裝入,造成記憶體資源浪費,並不能從邏輯上擴大記憶體容量。
                虛擬的實現建立在離散分配儲存管理基礎上
                  方式:請求分頁/請求分段系統
                 細節:分頁/段機構、中斷機構、地址變換機構、軟體支援


         (3)虛擬儲存器的特徵


                         離散分配方式是基礎
                          多次性:一個作業被分成多次調入記憶體執行
                          對換性:允許在作業的執行過程中進行換進、換出。(程序整體對換不算虛擬)
                          最終體現虛擬性:能夠從邏輯上擴充記憶體容量,使使用者所看到的記憶體容量遠大於實際記憶體容量。

 

2. 請求分頁儲存管理方式


基本分頁 + “請求調頁”和“頁面置換”功能。
換入和換出基本單位都是長度固定的頁面


1)硬體支援


一臺具有一定容量的內/外存的計算機
+ 頁表機制
+ 缺頁中斷機構
+ 地址轉換機構

 

(2)
缺頁中斷機構


每當要訪問的頁面不在記憶體時,便產生一缺頁中斷通知OS,OS則將所缺之頁調入記憶體。作為中斷,需經歷幾個步驟:
“保護CPU環境”
“分析中斷原因”
“轉入缺頁中斷處理程式”
“恢復CPU環境”等。
作為一種特殊中斷,與一般中斷有明顯區別:
(1) 在指令執行期間產生和處理中斷訊號。
(2) 一條指令在執行期間,可能產生多次缺頁中斷

(3)地址變換機構

 

 

(4)記憶體分配

作業不一次裝入,部分裝入的情況下如何為程序分配記憶體,涉及三個問題:
最小物理塊數的確定
少於此數量程序將不能執行
與計算機的硬體結構有關,取決於指令的格式、功能和定址方式
物理塊的分配策略
物理塊的分配演算法
②物理塊的分配策
考慮:固定OR可變分配、全域性OR區域性置換。
組合出三種適合的策略。
固定分配、區域性置換
為每個程序分配一定數目的物理塊,在整個執行期間不再改變(基於程序的型別,或根據程式設計師、程式管理員的建議)
執行中缺頁時,只能從該程序記憶體中n個頁面中選出一頁換出,然後再調入一頁。
困難:難以把握為每個程序分配“適量”物理塊
可變分配、全域性置換
先為每個程序分配一定數目的物理塊
OS管理一個空閒物理塊佇列,發生缺頁時,系統從佇列中取出一塊分配給該程序,將欲調入的頁裝入(動態增長型,全域性空閒空間都可分配使用)
空閒空間不足時,可與其他任何程序頁面置換。“會使其他程序缺頁率提高,影響執行”
最易實現

③物理塊的分配演算法
固定分配策略時,分配物理塊可採用以下幾種演算法:
平均分配演算法
將所有可供分配的物理塊平均分配給各程序。
缺點:未考慮各程序本身的大小,利用率不均。
按比例分配演算法
根據程序的大小按比例分配物理塊。
設系統中共有n個程序
考慮優先權的分配演算法
實際應用中,要照顧重要、急迫的作業儘快完成,為它分配較多的記憶體空間。
所有可用物理塊分兩部分:
一部分按比例分配給各程序;
另一部分根據各程序優先權,適當地為其增加份額,分配給各程序。

 

 

 


(5)調頁策略

① 何時調入頁面
預調頁策略
以預測為基礎,將預計不久後便會被訪問的若干頁面,預先調入記憶體。
優點:一次調入若干頁,效率較好
缺點:預測不一定準確,預調入的頁面可能根本不被執行到。主要用於程序的首次調入,由程式設計師指出應該先調入哪些頁。

請求調頁策略
執行中需要的頁面不在記憶體,便立即提出請求,由OS將其調入記憶體。
優點:由請求調頁策略所確定調入的頁,一定會被訪問;比較容易實現。
缺點:每次僅調入一頁,需花費較大的系統開銷,增加了磁碟I/O的啟動頻率。


② 從何處調入頁面
在請求分頁系統中的外存分為:
對換區:連續存放資料,讀寫速度較快
檔案區:離散分配方式,I/O速度相對慢
發生缺頁時,系統應從何處將缺頁調入記憶體,分成三種情況:
系統擁有足夠的對換區空間:
程序執行前所有頁面由檔案區拷貝到對換區;
執行需要的頁面全部從對換區調入記憶體,提高調頁速度。
系統缺少足夠的對換區空間:
不會被修改的部分,在檔案區操作(即:直接從檔案區調入,換出時不用寫入檔案,再調入時仍從檔案區調入)
可能被修改的部分,在對換區操作。
UNIX方式:(隨執行資料逐漸從檔案區轉到對換區)
未執行的頁面從檔案區調入;
曾經執行,但又被換出的頁面放在對換區,下次調入應從對換區調入。
程序請求的共享頁面可能已被其他程序調入,無需再從對換區調入。


③ 頁面調入過程
程式執行前需要裝入記憶體:上述的②步策略處理何處調入;
開始執行:先預調入一部分頁面;
執行中:需要的頁面不在記憶體時,
向CPU發出一缺頁中斷,“中斷處理程式”開始工作:
首先保留CPU環境
分析中斷原因後,轉入缺頁中斷處理程式。
處理:判斷是否置換、頁表資訊更新
恢復現場,重新操作頁面。

 

3.頁面置換演算法


程序執行過程中,訪問的頁面不在記憶體,調入時記憶體已無空閒空間,需要將記憶體中的一頁程式或資料調到外存。
頁面置換演算法(page replacement algorithms):選擇換出哪些頁面的演算法,其好壞直接影響系統的效能。
應具有較低的缺頁率:
頁面調入次數(缺頁次數)/總的頁面使用次數

 

1)最佳(Optimal)置換演算法


換出以後永不再用的,或在最長(未來)時間內不再被訪問的頁面。
優點:保證獲得最低的缺頁率
不足:無法實現,因為無法預知一程序將來的執行情況
作用:作為參照標準,評價其他演算法

 

2)先進先出置換演算法(FIFO)


先進入的先淘汰,即選擇記憶體中駐留時間最久的頁面予以淘汰。
優點:實現簡單,把一程序已調入記憶體的頁面按先後次序組織成一個佇列,並設定一個指標(替換指標),使它總是指向隊首最老的頁面。
不足:與程序實際執行規律不相適應(較早調入的頁往往是經常被訪問的頁,頻繁被對換造成執行效能降低)

 

3)最近最久未使用(LRU)置換演算法


無法預測將來的使用情況,只能利用“最近的過去”作為“最近的將來”的近似,因此,LRU置換演算法選擇最近最久未使用(least recently used)的頁面予以淘汰。
對例1用LRU演算法計算:

 

4)輪轉演算法(clock)


又稱最近未使用演算法(NRU, Not Recently Used),
LRU(最近最久未使用演算法)近似演算法
折衷FIFO
每個頁設一個使用標誌位(use bit),若該頁被訪問則將其置為1。
設定一個指標,從當前指標位置開始按地址先後檢查各頁,尋找use bit=0的頁面作為被置換頁。
若指標經過的頁use bit=1,修改use bit=0(暫不凋出,給被用過的頁面駐留的機會 ),指標繼續向下。到所有頁面末尾後再返回隊首檢查。

 

5)其他置換演算法


最少使用 (LFU, Least Frequently Used)
關鍵在次數記錄上
每頁設定訪問計數器,每當頁面被訪問時,該頁面的訪問計數器加1;缺頁中斷時,淘汰計數值最小的頁面,並將所有計數清零;
計數的實現類似LRU,用移位暫存器,但比較時不是簡單比較暫存器的值,而是比較暫存器每位的和∑Ri。


頁面緩衝演算法PBA(page buffering algorithm)
對FIFO演算法的發展,彌補了FIFO可能造成的I/O開銷,又不需要LRU等演算法的硬體支援。
仍用FIFO演算法選擇被置換頁
但並不將其馬上換入外存。
系統將頁面放入兩個連結串列之一:如果頁面未被修改,就將其歸入到空閒頁面連結串列的末尾;否則將其歸入到已修改頁面連結串列。
需要調入新的物理頁面時,將新頁面內容讀入到空閒頁面連結串列的第一項所指的頁面,然後將第一項刪除(從空閒連結串列摘下)。
空閒頁面和已修改頁面,仍停留在記憶體中一段時間,如果這些頁面被再次訪問,只需較小開銷,而被訪問的頁面可以返還作為程序的記憶體頁。
當已修改頁面達到一定數目後,再將它們一起調出到外存,然後將它們歸入空閒頁面連結串列,這樣能大大減少I/O操作的次數。