1. 程式人生 > >外存及虛擬儲存器管理

外存及虛擬儲存器管理

 外存資源管理

外存空間劃分
靜態等長,2i, 稱為一塊(block),塊是外存分配的基本單位,也是IO傳輸的基本單位。
如果需求不足一個完整塊,會形成塊內“零頭”。由於外存空間很大,塊內零頭忽略。
外存空間分配
空閒塊鏈(慢):所有空閒塊連成一個鏈
空閒塊表(UNIX):相連的空閒塊記錄在同一表項中

字位映像圖:用1位表示一個塊的狀態

界地址
每程序佔一組外存連續塊;
每程序佔二組外存連續塊(雙對界)。
頁式
記憶體一頁,外存一塊。記憶體頁與外存塊長度相同。
段式
每段佔外存若干連續塊,程序的多個段之間在外存可以不連續。
段頁式

記憶體一頁,外存一塊。記憶體頁與外存塊長度相同。段內多頁所對應的外存塊可以不連續,一個程序的多段可以分散在外存的不同區域中。

虛擬儲存系統

虛擬儲存
程序部分裝入記憶體,部分(或全部)裝入外存,執行時訪問在外存部分動態調入,記憶體不夠淘汰。

虛擬頁式儲存管理

程序執行前:
      部分(全部)裝入外存,部分裝入記憶體。
程序執行時:
   訪問頁不在記憶體,發生缺頁中斷,中斷處理程式:
        找到訪問頁在外存的地址;
        在記憶體找一空閒頁面;
              如沒有,按淘汰演算法淘汰一個
             如需要,將淘汰頁面寫回外存,修改頁表和總頁表
       讀入所需頁面(切換程序);
       重新啟動中斷指令。



記憶體頁框分配策略(靜態策略)

1. 平均分配:將記憶體中的所有物理頁框等分給進入系統中的程序。如記憶體128頁,程序25個,每個程序5個頁框

 2. 按程序長度比例分配:按程式長度的比例確定分配記憶體的物理頁框數。

         pi共si個頁面;S=si;記憶體共m個頁框
         分配給程序pi的物理頁框數ai=(si/S)*m
例:記憶體物理頁框62,系統2個程序,p1邏輯頁面127,p2邏輯頁面10,則p1分得57個物理頁框,p2分得5個物理頁框。

3. 按程序優先順序比例分配:根據優先級別按比例分配記憶體物理頁面。方法2中si表示程序pi的優先順序。    
4. 按程序長度和優先級別比例分配:方法2和方法3的結合。此時,方法2中si為程序pi邏輯頁面數與優先順序之和。


     以上4種方法都是靜態的,靜態策略沒有反映:
  (1)程式結構;
  (2)程式在不同時刻的行為特性。

外存塊的分配策略

 1. 靜態分配:
            外存保持程序的全部頁面,當某一外存頁面被調入內
            存,所佔用的外存頁面並不釋放:

            優點:速度快--淘汰時不必寫回(未修改情況)
            缺點:外存浪費
    2. 動態分配
            外存僅保持程序不在記憶體的頁面,當某一外存頁面被調
            入記憶體,將釋放所佔用的外存頁面:

            優點:節省外存
            缺點:速度慢--淘汰時必須寫回

頁面調入時機

 1.  請調(demand paging)
         upon page fault, 發生缺頁中斷
時調入。
         缺點:從缺頁中斷到所需頁面被調入記憶體,期間對應的進
         程需要等待,將影響程序的推進速度。
    2.  預調(prepaging)
         before page fault, 將要訪問時調入
(根據程式順序行為,
         不一定準)。預調可以節省因頁故障而等待的時間。
         當訪問預先未調入記憶體的頁面時,會發生缺頁中斷,因此
         預調必須輔以請調。

置換演算法(replacement algorithm)

最佳淘汰演算法(OPT--optimal):淘汰以後不再需要的或者在最長時間以後才會用到的頁面。

先進先出(FIFO):淘汰最先調入記憶體的頁面。
         依據: 先進入的可能已經使用完畢。
         實現:將所有頁面按照進入記憶體的次序排成一個佇列,當一個頁面由外存調入記憶體時排入隊尾,當需要淘汰時取隊頭頁面。

使用過最久的先淘汰(LRU)
         淘汰最近一次訪問時間距離當前時間間隔最長的頁面。stack
      當一頁面被訪問時,如在棧中,取出壓到棧頂;否則直接壓入棧頂,滿時淘汰棧底。
最近不用的先淘汰(not used recently,NUR):淘汰最近一段時間未用過的頁面。
在實現時,為每一個頁面增加兩個硬體位,分別為
①引用位=0,此頁未被訪問過;
②引用位=1,此頁曾被訪問過;
③修改位=0,此頁未被修改過;
④修改位=1,此頁曾被修改過。

一個頁面由外存調入記憶體時,其引用位和修改位均為0.當對某頁面執行寫操作時,其引用位和修改位均為1;當對某頁執行讀操作時,其引用位為1;每隔固定時間將所有引用位清零。


 最不經常使用的先淘汰(LFU):  淘汰使用次數最少的。

    依據: 活躍訪問頁面應有較大的訪問次數.

最經常使用的先淘汰(MFU)

    淘汰使用次數最多的。

二次機會:淘汰裝入最久且最近未被訪問的頁面。

實現時:採用拉鍊資料結構。

時鐘演算法:將頁面組織成環形,有一個指標指向當前位置。每次需要淘汰頁面時,從指標所指的頁面開始檢查。如果當前頁面的訪問位為0,即從上次檢測到目前,該頁沒有訪問過,則將該頁替換。如果當前頁面的訪問位為1,則將其清0,並順時針移動指標到下一個位置。重複上述步驟直至找到一個訪問位為0的頁面。

考慮修改標誌m
r=0, m=0:最佳
r=0, m=1:次佳,淘汰前回寫
r=1, m=0:再次
r=1, m=1:最後,淘汰前寫回

改進時鐘演算法:

步驟1:
由指標當前位置開始掃描,選擇最佳淘汰頁面,不改變引用位,將第一個遇到的r=0且m=0的頁面作為淘汰頁面;
步驟2:
如步驟1失敗,再次從原位置開始,找r=0且m=1的頁面,將第一個滿足上述要求的頁面作為淘汰頁面,同時將掃描過頁面的r位清0;
步驟3:
若步驟2失敗,指標再次回到原位置,重新執行步驟1。若還失敗再次執行步驟2,此時定能找到。

顛簸(thrashing)

    頁面在記憶體與外存之間頻繁換入換出
    原因:(1) 分給程序物理頁架過少;
                (2) 淘汰演算法不合理;
                (3) 程式結構不好。

    處理:(1) 增加分給程序物理頁架數;
    (2) 改進淘汰演算法;
    (3) 改善程式結構。
在某些虛擬頁式儲存管理系統中,記憶體中總保持一個空閒的物理頁框,這樣做有什麼好處?
       答:在記憶體沒有空閒頁框的情況下,需要按照置換演算法淘汰一個記憶體頁框,然後讀入所缺頁面,缺頁程序一般需要等待兩次I/O傳輸

      若記憶體總保持一個空閒頁框,當發生頁故障時,所缺頁面可以被立即調入記憶體,缺頁程序只需等待一次I/O傳輸時間。讀入後立即淘汰一個記憶體頁面,此時可能也需執行一次I/O傳輸,但對缺頁程序來說不需等待,因而提高了響應速度。

工作集模型:程序在一段時間內所訪問頁面的集合。


與時間和視窗尺寸有關

頁故障率反饋模型

PFFB(Page Fault Feed Back):動態調整頁面的分配
頁故障率高(達到某上界閾值):記憶體頁框少,增加。
頁故障率低(達到某下界閾值):記憶體頁框多,減少。

虛擬段式儲存系統

程序執行前,主程式段裝入記憶體,其它段裝入外存,訪問段不再記憶體時,發生缺段中斷。
若記憶體空間不夠
緊湊:將記憶體中的所有空閒區合併
淘汰:
將記憶體中的某段移至外存


段的動態連線

動態連線 vs. 靜態連線
靜態連線:執行前連線,由link完成(對程式庫進行掃描,將整個程式涉及到的目標模組逐個調入記憶體並連線在一起);一個程式共有多少個段是確定的,因而link可以為每一個段分配一個段號;
動態連線:執行時連線,由OS完成.(在程式執行過程中需要某一個段時才將該段連線上);一個程式共有多少個段是不確定的,因而段名到段號的轉換需要由作業系統來完成的。




動態連線與共享的矛盾

動態連線:修改連線字(程式碼)
段的共享:要求純程式碼(pure code)
解決方法
共享程式碼分為“純段”和“雜段”
純段共享,
雜段私用。

 虛擬段頁式儲存系統

一個段對應一個程式單位,是二維地址
方便儲存共享和保護
可以實現段長度的動態變化,以及段間的動態連線

但對儲存空間的分配和去配較複雜,可能形成碎片


中斷處理:

 連線中斷  缺頁中斷   越界中斷  (段號,段內頁號)  越權中斷

分頁對使用者是透明的,分段對使用者是可見的