1. 程式人生 > >作業系統——第五章筆記(二)

作業系統——第五章筆記(二)

請求分頁儲存管理方式
 基本分頁 + “請求調頁”和“頁面置換”功能。
 換入和換出基本單位都是長度固定的頁面
1.硬體支援
一臺具有一定容量的內/外存的計算機+ 頁表機制+ 缺頁中斷機構+ 地址轉換機構
1.1頁表基本功能不變:邏輯地址對映為實體地址
增加虛擬功能後需記錄的頁表項資訊有變化:
在這裡插入圖片描述

  1. 狀態位P :指示該頁是否已調入記憶體。
  2. 訪問欄位A :用於記錄本頁在一段時間內被訪問的次數,或記錄本頁最近已有多長時間未被訪問。(置換時考量的引數)
  3. 修改位M :該頁在調入記憶體後是否被修改過。(關係到置換時調出的具體操作)
  4. 外存地址:用於指出該頁在外存上的地址。
    1.2缺頁中斷機構
    每當要訪問的頁面不在記憶體時,便產生一缺頁中斷通知OS,OS則將所缺之頁調入記憶體。
    1)作為中斷,需經歷幾個步驟:
    a) “保護CPU環境”
    b) “分析中斷原因”
    c) “轉入缺頁中斷處理程式”
    d) “恢復CPU環境”等。
    2)作為一種特殊中斷,與一般中斷有明顯區別:
     在指令執行期間產生和處理中斷訊號。
     一條指令在執行期間,可能產生多次缺頁中斷。
    1.3地址變換機構
    分頁系統地址變換機構的基礎上增加
     產生和處理缺頁中斷(請求調入)
     從記憶體中換出一頁的功能(置換)
    2.記憶體分配
    作業不一次裝入,部分裝入的情況下如何為程序分配記憶體,涉及三個問題:
    2.1最小物理塊數的確定
     少於此數量程序將不能執行
     與計算機的硬體結構有關,取決於指令的格式、功能和定址方式
    2.2物理塊的分配策略
    考慮:固定OR可變分配、全域性OR區域性置換。
    組合出三種適合的策略。
    1)固定分配、區域性置換
     為每個程序分配一定數目的物理塊,在整個執行期間不再改變(基於程序的型別,或根據程式設計師、程式管理員的建議)
     執行中缺頁時,只能從該程序記憶體中n個頁面中選出一頁換出,然後再調入一頁。
     困難:難以把握為每個程序分配“適量”物理塊數
    2)可變分配、全域性置換
     先為每個程序分配一定數目的物理塊
     OS管理一個空閒物理塊佇列,發生缺頁時,系統從佇列中取出一塊分配給該程序,將欲調入的頁裝入(動態增長型,全域性空閒空間都可分配使用)
     空閒空間不足時,可與其他任何程序頁面置換。“會使其他程序缺頁率提高,影響執行”。
     最易實現
    3)可變分配、區域性置換
     為每個程序分配一定數目的物理塊
     缺頁時,只允許換出該程序在記憶體的頁面,不影響其他程序執行。
     根據缺頁率增減程序的物理塊數:若頻繁缺頁中斷,則系統再為程序分配若干物理快;若缺頁率特別低,則適當減少分配給該程序的物理塊。
    2.3物理塊的分配演算法
    固定分配策略時,分配物理塊可採用以下幾種演算法:
    1)平均分配演算法
     將所有可供分配的物理塊平均分配給各程序。
     缺點:未考慮各程序本身的大小,利用率不均。
    2)按比例分配演算法
     根據程序的大小按比例分配物理塊。
     設系統中共有n個程序
    則,每個程序能分到的物理塊數:在這裡插入圖片描述

    Si:程序i頁面數為;
    S:n個程序頁面數總和;
    m:可用物理塊總數
    在這裡插入圖片描述
    3)考慮優先權的分配演算法
    實際應用中,要照顧重要、急迫的作業儘快完成,為它分配較多的記憶體空間。
    所有可用物理塊分兩部分:
     一部分按比例分配給各程序;
     另一部分根據各程序優先權,適當地為其增加份額,分配給各程序。
    3.調頁策略
    3.1何時調入頁面
    1)預調頁策略
     以預測為基礎,將預計不久後便會被訪問的若干頁面,預先調入記憶體。
     優點:一次調入若干頁,效率較好
     缺點:預測不一定準確,預調入的頁面可能根本不被執行到。主要用於程序的首次調入,由程式設計師指出應該先調入哪些頁。
    2)請求調頁策略
     執行中需要的頁面不在記憶體,便立即提出請求,由OS將其調入記憶體。
     優點:由請求調頁策略所確定調入的頁,一定會被訪問;比較容易實現。
     缺點:每次僅調入一頁,需花費較大的系統開銷,增加了磁碟I/O的啟動頻率。
    3.2從何處調入頁面
    1)在請求分頁系統中的外存分為:
     對換區:連續存放資料,讀寫速度較快
     檔案區:離散分配方式,I/O速度相對慢
    2)發生缺頁時,系統應從何處將缺頁調入記憶體,分成三種情況:
    (外存:檔案區、對換區)
     系統擁有足夠的對換區空間:對換區
    程序執行前所有頁面由檔案區拷貝到對換區;
    執行需要的頁面全部從對換區調入記憶體,提高調頁速度。
     系統缺少足夠的對換區空間:檔案區/對換區
    不會被修改的部分,在檔案區操作(即:直接從檔案區調入,換出時不用寫入檔案,再調入時仍從檔案區調入)
    可能被修改的部分,在對換區操作。
     UNIX方式:首次->檔案區/再請調->對換區(隨執行資料逐漸從檔案區轉到對換區)
    未執行的頁面從檔案區調入;
    曾經執行,但又被換出的頁面放在對換區,下次調入應從對換區調入。
    程序請求的共享頁面可能已被其他程序調入,無需再從對換區調入。
    3.3頁面調入過程
    1)程式執行前需要裝入記憶體:上述的策略處理何處調入;
    2)開始執行:先預調入一部分頁面;
    3)執行中:需要的頁面不在記憶體時,
     向CPU發出一缺頁中斷,“中斷處理程式”開始工作:
     首先保留CPU環境
     分析中斷原因後,轉入缺頁中斷處理程式。
     處理:判斷是否置換、頁表資訊更新
     恢復現場,重新操作頁面。
    4.頁面置換演算法
    程序執行過程中,訪問的頁面不在記憶體,調入時記憶體已無空閒空間,需要將記憶體中的一頁程式或資料調到外存。
    頁面置換演算法(page replacement algorithms):選擇換出哪些頁面的演算法,其好壞直接影響系統的效能。
     應具有較低的缺頁率:頁面調入次數(缺頁次數)/總的頁面使用次數
    4.1最佳(Optimal)置換演算法
    換出以後永不再用的,或在最長(未來)時間內不再被訪問的頁面。
     優點:保證獲得最低的缺頁率
     不足:無法實現,因為無法預知一程序將來的執行情況
     作用:作為參照標準,評價其他演算法。
    4.2先進先出置換演算法(FIFO)
    先進入的先淘汰,即選擇記憶體中駐留時間最久的頁面予以淘汰。
     優點:實現簡單,把一程序已調入記憶體的頁面按先後次序組織成一個佇列,並設定一個指標(替換指標),使它總是指向隊首最老的頁面。
     不足:與程序實際執行規律不相適應(較早調入的頁往往是經常被訪問的頁,頻繁被對換造成執行效能降低)
     計算過程:
    1)系統用佇列對先進先出的頁面次序進行記錄
    2)佇列最長等於分配的物理塊數
    3)始終置換隊首的最老頁面
    4.3最近最久未使用(LRU)置換演算法
    1)無法預測將來的使用情況,只能利用“最近的過去”作為“最近的將來”的近似,因此,LRU置換演算法選擇最近最久未使用(least recently used)的頁面予以淘汰。
    2)不足:
     有時頁面過去和未來的走向之間並無必然的聯絡。
     相應的需較多的硬體支援:記錄每個頁面自上次被訪問以來所經歷的時間t,淘汰時選擇頁面t值最大的;以及需要快速地知道哪一頁是最近最久未使用的頁面,用暫存器或棧。
    3)暫存器記錄時間的原理
     一程序有8個頁面,每個頁面需配備一個8位的(移位)暫存器。
    移位暫存器表示為
    R=Rn-1Rn-2Rn-3…R2R1R0
     頁面被訪問後的操作:
    將該頁對應的暫存器的Rn-1位置為1
     如何記時:
    由系統發出定時訊號,每隔一定時間將所有暫存器右移1位。
    某一時刻,比較各暫存器的值,被用到的標誌1逐漸往低位上積累,若高位上沒有1,就說明最近沒用過。所以最近最久未使用的就是暫存器值最小的那個頁。
    4)棧記錄時間的原理
    某頁面被訪問,便將該頁面的頁面號從棧中移出,將它壓入棧頂。因此:棧頂始終是最新被訪問頁面的編號,越久未使用,頁面越被壓在棧底。
    4.4輪轉演算法(clock)又稱最近未使用演算法(NRU, Not Recently Used)
     LRU(最近最久未使用演算法)近似演算法
    1)折衷FIFO
     每個頁設一個使用標誌位(use bit),若該頁被訪問則將其置為1。
     設定一個指標,從當前指標位置開始按地址先後檢查各頁,尋找use bit=0的頁面作為被置換頁。
     若指標經過的頁use bit=1,修改use bit=0(暫不凋出,給被用過的頁面駐留的機會 ),指標繼續向下。到所有頁面末尾後再返回隊首檢查。
    2)改進CLOCK
     改進:主要考慮對沒訪問過的頁面再細分是否修改過的不同情況,減少因修改造成的頻繁I/O操作。
     每頁除記錄是否用過A,還記錄是否修改的標誌M。置換時根據兩個標誌的值有4種不同情況的處理。
    4.5其他置換演算法
    1)最少使用 (LFU, Least Frequently Used)
     關鍵在次數記錄上
     每頁設定訪問計數器,每當頁面被訪問時,該頁面的訪問計數器加1;缺頁中斷時,淘汰計數值最小的頁面,並將所有計數清零;
     計數的實現類似LRU,用移位暫存器,但比較時不是簡單比較暫存器的值,而是比較暫存器每位的和∑Ri。
     LFU置換次數少的。程式區域性性會導致一個頁面在一段時間內使用次數很多。但使用次數多並不能說明將來被用到的可能性大
     而LRU置換最近最久未用的,對未來的預計一般會更好些。
    2)頁面緩衝演算法PBA(page buffering algorithm)
     對FIFO演算法的發展,彌補了FIFO可能造成的I/O開銷,又不需要LRU等演算法的硬體支援。
     仍用FIFO演算法選擇被置換頁,但並不將其馬上換入外存。
     系統將頁面放入兩個連結串列之一:如果頁面未被修改,就將其歸入到空閒頁面連結串列的末尾;否則將其歸入到已修改頁面連結串列。
     需要調入新的物理頁面時,將新頁面內容讀入到空閒頁面連結串列的第一項所指的頁面,然後將第一項刪除(從空閒連結串列摘下)。
     空閒頁面和已修改頁面,仍停留在記憶體中一段時間,如果這些頁面被再次訪問,只需較小開銷,而被訪問的頁面可以返還作為程序的記憶體頁。
     當已修改頁面達到一定數目後,再將它們一起調出到外存,然後將它們歸入空閒頁面連結串列,這樣能大大減少I/O操作的次數。
    5.虛擬儲存管理下訪問記憶體的有效時間
    λ為訪問快表的時間/更新快表的時間
    t為訪問記憶體的時間
    ε為缺頁中斷處理時間
    請求分頁管理方式下,存在三種方式的記憶體訪問:
    1)頁在記憶體,且快表檢索命中
    EAT=λ+t
    2)頁在記憶體,但快表檢索沒有命中
    EAT= 快表檢索時間+訪問頁表時間+修改更新快表時間+訪問頁面實體記憶體時間
    =λ+t+λ+t=2*(λ+t)
    3)頁面不在記憶體
    EAT=快表檢索時間+訪問頁表時間+缺頁中斷處理時間+修改更新快表時間+訪問頁面實體記憶體時間=λ+t+ε+λ+t
    4)加入概率的綜合公式(a是快表命中率,f是缺頁率)
    EAT= λ + at +(1-a){ }
    = λ +at +(1-a){t + f*(ε+λ+t) +(1-f)*(λ+ t) }
    6.影響缺頁率的主要因素
    1)分配給作業的主存塊數:
    多則缺頁率低,反之則高。
    2)頁面大小:
    大則缺頁率低;反之則高。
    3)頁面排程演算法:
    對缺頁中斷率影響很大,但不可能找到一種最佳演算法。
    4)程式編制方法:
    以陣列運算為例,如果每一行元素存放在一頁中,則按行處理各元素缺頁中斷率低;反之,按列處理各元素,則缺頁中斷率高。
    7.抖動
    1)系統抖動:
     為了提高處理機利用率,可增加多道程式併發度;
     但程序數目增加過多,每個程序分配得到的物理塊太少,在某個臨界點上,會出現剛被淘汰的頁很快又需重新調入;而調入不久又被淘汰出去;出現頻繁缺頁
     大部分處理器時間都用在來回的頁面排程上,這種局面稱為系統抖動或顛簸(thrashing)
    2)抖動的後果:
     缺頁率急劇增加
     記憶體有效存取時間加長,
     系統吞吐量驟減;系統已基本不能完成什麼任務,而是忙於頁面對換操作,cpu雖然忙,但效率急劇下降。
    3)根本原因:
     頁面淘汰演算法不合理;分配給程序的物理頁面數(駐留集)太少。
    在這裡插入圖片描述

    4)常用防抖動方法:
     區域性置換策略;
     頁面調入記憶體前檢查各程序工作集,為缺頁率高的增加有限物理塊;
     L缺頁間的平均時間=S置換一個頁面所需時間,可使磁碟和cpu達到最大利用率;
     抖動發生時選擇暫停一些程序,調節多道程式度。
    8.工作集
    1)缺頁率與物理塊數有關聯,基於程式區域性性原理,若能預知程式在某段時間要訪問的頁面並全部調入他們,將大大降低缺頁率。
    Denning提出工作集概念:
    某段時間間隔中,程序實際要訪問的頁面的集合。可以用一個二元函式W(t, D)來表示, t是當前的執行時刻,D 稱為工作集視窗(working-set window )。
    2)工作集大小的變化
     程序開始執行後,隨著訪問新頁面逐步建立較穩定的工作集。
     當記憶體訪問的區域性性區域的位置大致穩定時,工作集大小也大致穩定;
     區域性性區域的位置改變時,工作集快速擴張和收縮過渡到下一個穩定值。
    實現工作集模型的困難是怎樣跟蹤工作集的軌跡!
    3)工作集模型的原理:
     作業系統跟蹤每個程序的工作集,併為程序分配大於其工作集的物理塊。
     如果還有空閒物理塊,則可以再調一個程序到記憶體以增加多道程式數。
     如果所有工作集之和增加以至於超過了可用物理塊的總數,那麼作業系統會暫停一個程序,將其頁面調出並且將其物理塊分配給其他程序,防止出現抖動現象。
    正確選擇工作集的大小,對儲存器的利用率和系統吞吐量的提嵩,都將產生重要影響。
    9.駐留集
     駐留(常駐)集是指在當前時刻,程序實際駐留在記憶體當中的頁面集合。
     工作集是程序在執行過程中固有的性質,而駐留集取決於系統分配給程序的物理頁面數目,以及所採用的頁面置換演算法;
     如果一個程序的整個工作集都在記憶體當中,即駐留集 Ê 工作集,那麼程序將很順利地執行,而不會造成太多的缺頁中斷(直到工作集發生劇烈變動,從而過渡到另一個狀態);
     當駐留集達到某個數目之後,再給它分配更多的物理頁面,缺頁率也不會明顯下降。