1)最佳置換算法
這是一種理想化的算法,性能最好,但是難以實現,該算法選擇那些永不使用或者在最長時間內不再被訪問的頁面並將它們置換出去。但是要確定哪一個頁面是未來最長時間內不再被訪問是很難估計的,所以該算法通常用來評價其他算法。
算法是這樣工作的:在頁面失效發生時,有些頁面在內存中,其中有一個頁面(包含緊接着的下一條指令的那個頁面)將很快被訪問,其他頁面則可能要到10,100或1000條指令後纔會被訪問,每個頁面都可以用在該頁面首次被訪問前所要執行的指令數進行標記。最優頁面置換算法只是簡單滴規定,標記最大的頁面應該被淘汰,如果一個頁面在800萬條指令內不會被使用,另外一個頁面在600萬條指令內不會被使用,則淘汰前一個,從而把因需要調入這個頁面而發生的頁面失效推到將來,越久越好。
2)先進先出(FIFO)置換算法
該算法總是淘汰最先進入主存的頁面,即選擇在主存中駐留時間最久的頁面予以淘汰。該算法實現簡單,只需把一個進程已調入主存的頁面按先後次序鏈接成一個隊列,並設置一個指針即可。該算法是一種最直觀但性能差的算法,並且有BELADY異常現象,即分配的物理塊增加時,卻也次數反而增加。
例:對頁面的訪問序列0、1、2、3、0、1、4、0、1、2、3和4,分配的物理塊分別爲3塊和4塊,計算缺頁次數。
① 分配的物理塊爲3塊時,採用先進先出算法的內存分配情況:
訪問頁面012301401234物012301444233理
01230111422塊
0123000144缺頁×××××××
××
② 分配的物理塊爲4塊時,採用先進先出算法的內存分配情況如下圖所示:
訪問頁面012301401234物012333401234理
01222340123塊
0111234012
000123401缺頁××××
××××××
3)最近最久未使用置換算法LRU(Least Recently Used)
該算法是選擇最近最久未使用的頁面予以淘汰,系統在每一個頁面設置一個訪問字段,用以記錄這個頁面自上次被訪問依賴所經歷的時間T,當要淘汰一個頁面時,選擇T最大的頁面。但在實現時需要硬件的支持(寄存器或棧)。
訪問頁面07657473547456576076物00657473547456576076理
7065747354745657607塊
776554735574465760缺頁××××
×
××××
×
×
×
4)最近未用置換算法NUR(Not Used Recently)
該算法將最近一段時間未引用過的頁面換出。這是一種LRU的近似算法。該算法爲每一個頁面設置一位訪問位,將主存中的所有頁面都通過鏈接指針鏈成一個循環隊列。當某頁被訪問時,其訪問位置“1”。在選擇一頁淘汰時,檢查其訪問位,如果是“0”,則選擇該頁換出;若爲“1”,則重新置爲“0”,暫不換出該頁,在循環隊列中檢查下一個頁面,直到訪問置換時將未使用過的頁面換出去。