FIFO、LRU、OPT這三種置換算法的缺頁次數
考慮下述頁面走向:
1,2,3,4,2,1,5,6,2,1,2,3,7,6,3,2,1,2,3,6
當內存塊數量分別為3時,試問FIFO、LRU、OPT這三種置換算法的缺頁次數各是多少?
答:缺頁定義為所有內存塊最初都是空的,所以第一次用到的頁面都產生一次缺頁。
當內存塊數量為3時:
發生缺頁中斷的次數為16。
在FIFO算法中,先進入內存的頁面被先換出。當頁6要調入時,內存的狀態為4、1、5,考查頁6之前調入的頁面,分別為5、1、2、4,可見4為最先進入內存的,本次應換出,然后把頁6調入內存。
發生缺頁中斷的次數為15。
LRU是Least Recently Used的縮寫,即最近最少使用頁面置換算法,是為虛擬頁式存儲管理服務的。該算法的初衷是有內存管理而被提出來的,其目的是為解決“如何節省利用容量不大的內存為最多的進程提供資源”時如何減少過多的讓進程去讀取外存。
這里以鏈表法來實現LRU:
一點介紹
操作系統為每個進程維護一條鏈表,鏈表的每個結點記錄一張頁面的地址。調用一次頁面,則把該頁面的結點從鏈中取出,放到鏈尾;要裝入新頁,則把鏈頭的頁面調出,同時生成調入頁面的結點,放到鏈尾。
在LRU算法中,最近最少使用的頁面被先換出。當頁6要調入時,內存的狀態為5、2、1,考查頁6之前調入的頁面,分別為5、1、2,可見2為最近一段時間內使用最少的,本次應換出,然后把頁6調入內存。
發生缺頁中斷的次數為11。
在OPT算法中,在最遠的將來才被訪問的頁面被先換出。當頁6要調入時,內存的狀態為1、2、5,考查頁6后面要調入的頁面,分別為2、1、2、…,可見5為最近一段時間內使用最少的,本次應換出,然后把頁6調入內存。
最不經常使用(Least Frequently Used --LFU) 頁置換算法,要求在頁置換時置換引用計數最小的頁,因為經常使用的頁應該有一個較大的引用次數。但是有些頁在開始時使用次數很多,但以后就不再使用,這類頁將會長時間留在內存中,因此可以將引用計數寄存器定時右移一位,形成指數衰減的平均使用次數。
注意LFU與LRU的區別,LFU一定是使用次數最少並且最近的被淘汰,而LRU被淘汰的是離上一次使用時間最長的。。
OPT算法因為要知道后面請求的頁框,因此我覺得這個算法有個小小的bug,如果在某個請求中,若在該請求的頁框之后的頁框序列中至少存在一個和當前內存塊中不匹配的頁框,則按照內存塊的順序(從上往下)替換沒有出現的頁框。比如上面那個OPT例子。對於最后一個頁框請求,因為6未命中,且6之后沒有請求的序列,因此應該替換3,所以替換后的序列為6 , 2 ,1 當然,這只是針對做題而言。
下面是最佳頁面置換算法: