一、什麼是頁面置換演算法
在程式執行的過程中,若其訪問的頁面不存在記憶體中,則會產生缺頁中斷。如果此時記憶體中沒有空閒的頁面,作業系統就需要在記憶體中選擇一個頁面將其移出,從而可以將需要訪問的頁面調入記憶體中。而用來選擇淘汰哪一頁的演算法就叫做頁面置換演算法。
好的頁面置換演算法有較低的頁面更換頻率。
二、常見的頁面置換演算法
1、OPT(最佳置換演算法)
最佳置換演算法:每次選擇淘汰的頁面將是以後永不使用或者最長時間內不在被訪問的頁面。這樣可以保證最低的缺頁率。
例如:假如作業系統給程式分配了3個記憶體塊,並且該程式接下來會依次訪問7,5,2,3,6,2,7,1,6,7,2,3,7,2,7。
如圖所示,在第4步中,需要把3號頁面調入記憶體,此時記憶體已經滿了,所以需要從7,5,2中選擇一個頁面進行淘汰。按照最佳置換演算法規則,往後尋找,此時2和7會被先後訪問,所以把5號頁面淘汰,即最長時間內不在被訪問的頁面。
2、FIFO(先進先出演算法)
FIFO演算法是最簡單的頁面置換演算法。顧名思義,FIFO每次淘汰的頁面是最早進入記憶體的頁面。FIFO的實現方法是把調入記憶體的頁面按先後順序放入佇列中,當需要置換頁面時,選擇隊頭的頁面即可。
例如:假如作業系統給程式分配了3個記憶體塊,並且該程式接下來會依次訪問7,5,2,3,6,2,7,1,6,7,2,3,7,2,7。頁面在記憶體中的表現如下所示:
3、LRU(最近最久未使用演算法)
LRU(Least Recently Used),每次淘汰的頁面是最近最久未使用的頁面。所以需要去記錄該頁面上次被訪問以來所經歷的時間t。當需要淘汰頁面是,選擇記憶體中現有頁面中t最大的,即最近最久未使用的頁面。
如:假如作業系統給程式分配了3個記憶體塊,並且該程式接下來會依次訪問7,5,2,3,6,2,7,1,6,7,2,3,7,2,7。頁面在記憶體中的表現如下所示:
如圖所示,在第四步中需要把3號頁面調入記憶體,而此時記憶體已滿,需要從7、5、2中選擇一個頁面進行淘汰。按照LRU規則,7號頁面上次被訪問以來所經歷的時間為3,他為最大的,所以把7號頁面淘汰出去。
4、LFU(最近最少使用演算法)
LFU(最近最少使用演算法),它是基於"如果一個資料在最近一段時間內使用次數很少,那麼在將來一段時間內被使用的可能性也很小“的思路。注意LFU和LRU演算法的不同之處,LRU的淘汰規則是基於訪問時間,而LFU是基於訪問次數的。
如:假如作業系統給程式分配了3個記憶體塊,並且該程式接下來會依次訪問5,4,5,3,3、2、5、1、4。頁面在記憶體中的表現如下所示:
如圖所示,在第八步中需要把1號頁面調入記憶體,而此時記憶體已滿,需要從5、2、3中選擇一個頁面進行淘汰。按照LFU規則,2號頁面最近一段時間內使用次數為1,他是最小的。所以把2號頁面淘汰出去。
瞭解更多的技術文章,請掃碼關注公眾號。