挑戰408——操作系統(23)——頁面置換算法

在進程運行的過程中,在調入時,若內存中沒有空閒空間,那麼爲了所需要的頁面能調入,必須選擇一些頁調出。算法的好壞直接印象系統的性能,不適當的算法可能引起系統的抖動(至於什麼叫抖動,下篇再說)。
選擇算法的出發現在於:把未來不再使用的或者是短期內不再使用的頁調出。但是由於未來不可預估,因此只能根據過去的數據進行預測。
那麼怎麼進行相應的預測呢?假設分配給進程的存儲塊數量爲3.而進程在執行的過程中需要訪問5個頁面,運行的時候,產生的地址流爲 2 3 2 1 5 2 4 5 3 2 5 2,也就是說進程訪問的第一個頁爲2,第二個頁爲3,最後一頁爲2。將2 3 1 裝入存儲塊以後,訪問5的時候,便會發生缺頁,於是調用相應的頁面置換算法。

最佳置換法(OPT)

該算法要求選擇那些不再使用或者最長時間不再使用的頁,由於無法預知內存中哪些頁不再使用,或者最長時間不再使用,因此該算法是無法實現的 ,但是可以作爲其他算法的參考標準。
同樣我們假設分配了3個存儲塊,訪問的頁地址流如下,根據OPT算法,過程如下:
在這裏插入圖片描述

先進先出算法FIFO

算法:總是淘汰最先進入內存的頁(即在內存時間中待得最久)。
在這裏插入圖片描述
這裏注意一個點,缺頁不等於置換,比如前三次的缺頁,只是單獨的沒有頁面在內存塊,只有調入,沒有換出。
所以,缺頁率爲9/12, x 100% = 75%。

最近最久未使用算法LRU

FIFO之所以性能較差,是因爲各個頁調入內存的時間,並不能反映,頁面的使用情況,最近最久未使用算法,以過去預測未來,每個頁面上的訪問字段,記錄了頁面上子上次未被訪問所經歷的時間T,淘汰的時候,選擇T值最大的頁。
在這裏插入圖片描述
從做法上看,就是從要置換的頁往前看,看誰離它最遠,這種算法與OPT算法接近,但是由於增加了新的字段,操作系統的開銷比較大。

時鐘置換算法(clock算法)

儘管LRU算法與OPT算法接近,但是實現起來較爲困難,因此在實際的應用中,大多采用LRU的近似算法,clock算法(也稱NRU算法)。
該算法在頁表中設置訪問字段A和修改位M,將內存中的所有頁面用指針鏈接成一個循環隊列,當頁面被訪問的時候,其訪問位置爲1,系統置換的時候,檢查每頁的訪問頁位,爲0的時候淘汰,爲1的時候重置爲0.接着繼續查找其他頁,直到訪問頁爲0的頁。
在內存中,如果一個頁被修改過,則需要將它重新寫回磁盤,因此,淘汰修改過後的頁面所付出的開銷要比未修改過的頁面大。(因此,一般不淘汰修改後的頁面)
所以,A和M有四種可能:

  1. A = 0,M = 0. 最近未被訪問,也沒有被修改(是最佳的置換頁面)
  2. A = 0,M = 1.最近未被訪問,但是被修改過
  3. A = 1,M = 0.最近被訪問過,但是未被修改
  4. A = 1,M = 1.最近被訪問過,也被修改過(所以該頁很可能再次被訪問)

具體的做法:
(1).從指針所指的位置,掃描循環隊列,找的是 A = 0,M = 0的頁,遇到便淘汰。第一次掃描期間不改變其訪問位
(2).若(1)失敗,那麼找 A = 0,M = 1的頁面,遇到則淘汰,第二次掃描期間,所經歷的頁,訪問位修改爲0.
(3).重複(1)(2),此時一定能找到 A = 0,M = 0的頁面

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