1 最佳置換演算法(opt): 把將來最長時間不需要訪問到的頁面移出
2 先進先出置換演算法(fifo): 先進來的頁面先淘汰
3 最近最久未使用演算法(lru): 把過去的一段時間內最久不用的頁面移出
(與opt對比 opt是針對將來時, lru則是針對過去時)
4 時鐘置換演算法(clock): 最近未用演算法
改進: 增加乙個修改位m u則為使用位
最近未被訪問,也未被修改(u=0, m=0)
最近被訪問,但未被修改(u=1, m=0)
最近未被訪問,但被修改(u=0, m=1)
最近被訪問,被修改(u=1, m=1)
演算法執行如下操作步驟:
從指標的當前位置開始,掃瞄幀緩衝區。在這次掃瞄過程中,對使用位不做任何修改。選擇遇到的第乙個幀(u=0, m=0)用於替換。
如果第1)步失敗,則重新掃瞄,查詢(u=0, m=1)的幀。選擇遇到的第乙個這樣的幀用於替換。在這個掃瞄過程中,對每個跳過的幀,把它的使用位設定成0。
如果第2)步失敗,指標將回到它的最初位置,並且集合中所有幀的使用位均為0。重複第1步,並且如果有必要,重複第2步。這樣將可以找到供替換的幀。
若新頁面不在主存,遍歷時候,如果u為1則置0,遇到u為0的則替換,指標指向下乙個
若新頁面在主存中,則從當前指標遍歷到新頁面在主存的位置index,新頁面設定u為0,剛遍歷過的頁面的u都置為0,指標指向下乙個
每新增乙個頁面,指標都指向新增頁面所在位置的下乙個
public
class clockalgo
public
void
clean (pagebean replacebean)else
tmpindex++;}}
}public
void
add(pagebean replacebean)else
}//迴圈遍歷 直到找到頁面
if(!flag) else }}
}//主存還有位置 直接新增
else
if(list.size() < maxlength)else
//每次指標都指向下乙個頁面位置
index = (index+1) % maxlength;
}public
void
visit()
tmpindex = index;
for(;tmpindex < maxlength && tmpindex < list.size();tmpindex++)
system.out.println();
}}
頁面置換演算法
常用的頁面置換演算法有三種 先進先出演算法fifo first in first out 該演算法的基本思想是首先淘汰那些駐留在主存時間最長的頁面。最近最久未用演算法 lru 該演算法的基本思想是 如果某一頁被訪問了,那麼它很可能馬上又被訪問 反之,如果某一頁很久沒被訪問,那麼最近也不會再訪問。lr...
頁面置換演算法
include using namespace std int process 100 頁面佇列 int memory 3 塊數 int optqueue 100 opt演算法的佇列 int fifoqueue 100 fifo演算法佇列 int lruqueue 100 lru演算法佇列 int ...
頁面置換演算法
位址對映過程中,若在頁面中發現所要訪問的頁面不再記憶體中,則產生缺頁中斷。當發生缺頁中斷時作業系統必須在記憶體選擇乙個頁面將其移出記憶體,以便為即將調入的頁面讓出空間。而用來選擇淘汰哪一頁的規則叫做頁面置換演算法。常見的置換演算法有 1 最佳置換演算法 opt 理想置換演算法 這是一種理想情況下的頁...