頁面置換算法


  頁面置換算法根據置換頁面的選擇范圍分為局部頁面置換算法和全局頁面置換算法。

  局部頁面置換算法只置換本進程內的物理頁面,進程中一個頁面進內存,就代表一個頁面已經被替換出內存,所以一個進程所占用的物理頁面的總數是確定的。全局頁面置換算法置換內存中所有可換出的物理頁面,即換進內存的是進程A的頁面,換出內存的可能是進程B的頁面,所以進程在內存中占用的頁面總數是可變的。

  

一、局部頁面置換算法:

   1.最優頁面置換算法:

     預測未來最晚被使用的頁面,然后把它置換到外存中去。缺頁最少,但無法實現,只是一種理想狀態,所以作為其他置換算法的評測標准。

   

     2.先進先出算法

   有一個邏輯頁面的鏈表,鏈表頭在內存中呆的時間最長,鏈表尾最短,所以每次置換都是把鏈表頭的頁面置換到外存中去,把新加進來的頁面放到鏈表尾。這個算法雖然簡單,但是造成的缺頁率比較高,性能比較差。

  

  3.最近最久未使用算法/最近最少使用算法

   替換內存中上次被引用時間最早的一個頁面。可以用鏈表或棧來記錄按被引用時間長短排序的頁面,但不管是棧還是鏈表,每次替換都會牽扯到整個鏈表或棧的移動,算法性能比較好,但開銷比較大。

      

   

  4.時鍾算法

   用環形鏈表存儲各頁面。初始化時各頁面的訪問位為0。如果不缺頁,則把相應頁面的訪問位設置為1。如果缺頁,則從最先進入鏈表的頁面開始遍歷,遇到訪問位為1的頁面,則訪問位設置為0;遇到訪問位為0的頁面,則把它替換到外存中去,然后把需要的頁面替換進內存,且訪問位為1。然后把當前指針移到下一個頁面上,再進行下一次頁面請求處理。

   比FIFO多了個訪問位來記錄頁面的訪問情況,但比LRU少了訪問的先后順序,所以說是FIFO和LRU的折中。

   

  

  5.改進的時鍾算法

   在頁面中增加了修改位,1為修改過,0為未修改過。因為當發生缺頁中斷時,把未修改過的頁面替換進外存就相當於把頁面直接從內存中刪除,因為內存和外存中所對應的該頁面的內容相同,處理時間只有一次缺頁中斷訪問外存的時間。而修改過的頁面則還需要向外存中寫入一次,再加上缺頁中斷的時間,相當於訪問了兩次外存,是上述未修改的兩倍。所以避免把修改過的頁面替換下去可以提高性能。

  有了修改位之后,指針經過修改位為1的頁面時,如果使用位為1,則只把使用位設置為0,修改位不變;如果使用位為0,則把修改位設置為0,然后向外存寫入該頁面以做更新。替換時,只會替換修改位和使用位均為0的頁面。

    

  

   6.最不常用算法:

   頁面中有幾位作為訪問計數,每次訪問就把訪問的次數加上去,替換時把訪問計數最小的替換出內存。

   

   

   

   

  7.BeLady現象

   按理說,一個進程被分配的物理頁面越多,那缺頁的次數應該越少。但也有缺頁次數反而增加的現象,那就是Belady現象。

    

   8.比較

   看圖吧。。(對於未被訪問的頁面,Clock,LRU和FIFO性能一樣)

    

     

二、全局置換算法:

  

  

  1.工作集算法:

   工作集表示為二元函數W(t,△),t為當前時刻,△為頁面訪問時間窗口,工作集就是在t-△到t的這段時間內所有訪問頁面的集合。

   常駐集是在當前時刻,進程實際駐留在內存當中的頁面集合。

   工作集置換算法就是說每次訪問內存時,就把不存在於工作集中的頁面從內存中換出,不管這次訪問缺頁與否。

     

   

   

   

  

  2.缺頁率置換算法

   訪問內存不缺頁時,就把相應的頁面的引用為設置為1。缺頁時,就把當前時間和上次缺頁的時間相減計算時間間隔,如果時間間隔大於給定窗口的話,就說明缺頁率過低了,進程在內存中的物理頁面數太多了,進程並發度下降,CPU效率會降低,需要置換出去一些頁面。如果時間間隔小於給定窗口的話,就說明缺頁率過高,把缺頁的添加進內存。

   與上述工作集算法不同的是,缺頁率置換算法只在缺頁時才進行頁面的增加或減少。這樣在缺頁中斷的時候可以把置換的過程部分提交給硬件進行處理,提高了性能。

  

  

  

 3.抖動和負載控制

  

  

   

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM