页面置换算法(二)
咳咳,書接上文,這篇講非常 難 重要的兩個算法LRU和工作集,以及它們的一些改進算法,希望我能給你們講清楚吧~
LRU
上文提過一點點,LRU和最優(yōu)算法是剛好相對的,LRU就是Least Recently Used,最近最少使用,其實就是往回看,看前面哪個沒有被訪問過就替換哪個。比如2,4,3,2,3,6,假設(shè)頁框最多有三個,當(dāng)6想要去替換時,此時要從2,4,3中替換掉一個,往回看2和3都被訪問過,于是就替換掉4。思路清楚了,接下來實現(xiàn)的算法。
實現(xiàn)方法1:
64位全局計數(shù)器C,每一頁也對應(yīng)一個64位計數(shù)器
每條指令執(zhí)行完后C自動加1,
在每次訪問內(nèi)存后,將當(dāng)前的C值保存到被訪問頁面的頁表項中。
需要置換時:找到值最小的一個頁面。
實現(xiàn)方法2:
有訪問位R和修改位M,初始0
定期讓所有的頁面R置0
置換的優(yōu)先級: (0,0) (0,1) (1,0) (1,1)
隨機從優(yōu)先級最小的非空類中選擇一頁置換
這里是不是非常像改進型時鐘算法,不同的是不需要找不到(0,1)之后把R置0,而是繼續(xù)按照優(yōu)先級往下找,只需要定期把所有的R置0即可,這也是為什么會出現(xiàn)(0,1)的原因(沒有訪問卻有修改)
最不常用(NFU)
模擬LRU第一種實現(xiàn)方法,不需要過多硬件支持
? 一頁對應(yīng)一個計數(shù)器,初值為0。
? 頁表項中有訪問位R
? 每次時鐘中斷時,計數(shù)器=計數(shù)器+R
? 需要置換時:選擇計數(shù)器值最小的一頁
注意:計數(shù)器不用放在頁表中
問題:之前經(jīng)常使用的頁由于一直不換出去導(dǎo)致對應(yīng)計數(shù)器的值一直增大
老化算法
? 在最不常用算法基礎(chǔ)上進行修改:
首先,在R位被加進之前先將計數(shù)器右移一位
其次,將R位加到計數(shù)器最左端的位而不是最右端的位
這是最接近最近最少使用算法(LRU)算法的一種。
總結(jié)