操做系統:老化算法

由於LRU(最近最少使用)算法的兩種實現方案都比較麻煩並且開銷很大,因此提出了用軟件來模擬LRU算法的NFU(不常常使用)算法,可是NFU算法存在一些問題,好比在一個屢次掃描編譯器中,在第一遍掃描中被頻繁用到的頁,在程序進入第二遍掃描時計數器值可能仍然很高。實際上,若是第一次掃描的執行時間剛好是各次掃描中最長的,含有之後各次掃描代碼的頁的計數器可能老是比含有第一次掃描代碼的頁小,其結果是操做系統將刪除掉有用的頁而不是再也不使用的頁。算法

 因此爲了使NFU算法可以更好的模擬LRU算法,須要對其進行修改,修改分兩部分:第一是計數器在R位被加進來以前右移一位;第二是R位加到計數器的最左端而不是最右端。這就是老化算法。spa

 這樣修改之後的老化算法的結果是顯而易見的,由於每次都對計數器進行移位,這就至關於每次都「清除」掉上一次的計數值,可是這個值並不是被徹底去掉而是保存在後面的位中,而後經過對高位添加R位來決定須要淘汰的頁面,這樣就保證了須要淘汰頁面時計數器值最小的葉面確定是最近最少訪問到的頁面。操作系統

 

          

時鐘週期0  ci

時鐘週期1   編譯器

時鐘週期2  編譯

時鐘週期3  table

時鐘週期軟件

頁面0    程序

10000000  im

11000000    

11100000   

11110000   

01111000  

頁面1    

00000000   

10000000    

11000000  

01100000   

10110000  

頁面2    

10000000  

01000000    

00100000  

00010000   

10001000  

頁面3    

00000000  

00000000    

10000000  

01000000   

00100000  

頁面4    

10000000  

11000000    

01100000   

10110000   

01011000  

頁面

10000000   

01000000    

10100000  

01010000   

00101000  

 

用軟件模擬LRU的老化算法6個頁面在5個時鐘週期內的計數器狀況

 從上表能夠看出,在未開始以前全部計數器的值都爲0,每過一個時鐘週期首先將計數器右移一位,而後將新的R位添加到計數器最左端,發生淘汰時淘汰計數器值最小的頁面。

 在第5個時鐘週期出現了選擇的問題,頁面35都連續兩個週期沒有被訪問了,而在兩個週期以前的一個週期中他們都被訪問過。根據LRU,若是有一個頁面必須被淘汰掉,咱們應該在這兩個頁面中選一個。然而如今的問題是咱們不知道在時鐘週期1到時鐘週期2期間這兩個頁中的哪個後被訪問到,在每一個時鐘週期中只記錄一位使咱們沒法區分一個週期內較早和較晚的訪問,咱們所能做的只是淘汰掉頁3,由於頁5在再往前的週期中也被訪問過而頁3沒有。

 老化算法存在的另一個問題是計數器始終都只有有限位,如上表所示只有8位計數器,這就意味着開始的訪問數據會被沖掉,若是兩個頁面的計數值恰巧同樣的話,惟一的辦法就是從兩個頁面中隨機淘汰掉一個。

相關文章
相關標籤/搜索