實現時鐘演算法:增加引用位,如果訪問過則置為 1,每次置換時,尋找引用位為 0 的頁幀進 行置換。再把該位置為 1。
增強時鐘演算法:增加修改位,先尋找引用位和修改位都為 0 的頁幀,如果沒有就找引用位為 0,修改位為 1 的頁幀,如果還不存在就返回指標開始的地方,將引用位和修改位都置為 1。
lfu 最少使用演算法:增加 count陣列,訪問頁幀時對應 count 陣列的位置+1,置換頁幀時尋 找 count陣列最小的地方進行置換。
mfu 最多使用演算法:與 lfu 相反。
/*
* filename
: vmrp.h
: (c) 2006 by zhonghonglie
* function
: 宣告虛擬記憶體頁置換類
*/#include
#include
#include
using
namespace std;
class
replace
;
/*
* filename
: vmrp.cc
: (c) 2006 by zhonghonglie
* function
: 模擬虛擬記憶體頁置換演算法的程式
*/#include
"vmrp.h"
replace::
replace()
replace::
~replace()
void replace::
initspace
(char
* methodname)
}//分析統計選擇的演算法對於當前輸入的頁面走向的效能
void replace::
report
(void
)//最近最舊未用置換演算法
void replace::
lru(
void)}
if(pageframes[0]
== next)
else
// 如果引用頁還未放棧頂,則為缺頁,缺頁數加 1
faultnumber++
;//棧底頁號記入淘汰頁陣列中
eliminatepage[l]
= pageframes[framenumber-1]
;//向下壓棧
for(j=framenumber-
1;j>
0;j--
) pageframes[j]
= pageframes[j-1]
; pageframes[0]
=next;
//引用頁放棧頂
//報告當前實存中頁號
for(j=
0; j(pageframes[j]
>=
0) cout << pageframes[j]
<<
" ";
//報告當前淘汰的頁號
if(eliminatepage[l]
>=0)
cout <<
"->"
<< eliminatepage[l++
]<< endl;
else
cout << endl;
}//分析統計選擇的演算法對於當前引用的頁面走向的效能
report()
;}//先進先出置換演算法
void replace::
fifo
(void
)//引用頁不在實存中,缺頁數加 1
faultnumber++
; eliminatepage[l]
= pageframes[j]
;//最先入頁號記入淘汰頁陣列
pageframes[j]
=next;
//引用頁號放最先入頁號處
j =(j+1
)%framenumber;
//最先入頁號迴圈下移
//報告當前實存頁號和淘汰頁號
for(i=
0; i(pageframes[i]
>=
0) cout << pageframes[i]
<<
" ";
if(eliminatepage[l]
>=0)
cout <<
"->"
<< eliminatepage[l++
]<< endl;
else
cout << endl;
}//分析統計選擇的演算法對於當前引用的頁面走向的效能
report()
;}//未實現的其他頁置換演算法入口
void replace::
clock
(void)}
if(iwhile
(referencebit[j]==1
) eliminatepage[l]
=pageframes[j]
;//最先入頁號記入淘汰頁陣列
pageframes[j]
=next;
referencebit[j]=1
; faultnumber++
; j=
(j+1
)%framenumber;
for(i=
0;i(eliminatepage[l]
>=0)
cout<<
"->"
<]
cout<}report()
;}void replace::eclock (
void)}
if(iint tmp=0;
while
(referencebit[j]!=0
||modifybit[j]!=0
)if(tmpif(eliminatepage[l]
>=0)
cout<<
"->"
<]
cout<}else
} eliminatepage[l]
=pageframes[j]
;//最先入頁號記入淘汰頁陣列
pageframes[j]
=next;
referencebit[j]=1
; modifybit[j]=1
; faultnumber++
; j=
(j+1
)%framenumber;
for(i=
0;i(eliminatepage[l]
>=0)
cout<<
"->"
<]
cout
;}void replace::
lfu(
void)}
if(ifaultnumber++
;int min=count[0]
;int ind=0;
for(i=
0;ieliminatepage[l]
=pageframes[ind]
; pageframes[ind]
=next;
count[ind]=1
;for
(i=0
;i(eliminatepage[l]
>=0)
cout<<
"->"
<]
}report()
;}void replace::
mfu(
void
)for
(k=0
,j=l=
0;kif(ifaultnumber++
;int max=
1e7;
int ind=0;
for(i=
0;ieliminatepage[l]
=pageframes[ind]
; pageframes[ind]
=next;
count[ind]=1
;for
(i=0
;i(eliminatepage[l]
>=0)
cout<<
"->"
<]
}report()
;}intmain
(int argc,
char
*ar**)
作業系統 記憶體頁面置換演算法
用頁面置換演算法決定應該換出哪個頁面 五種頁面置換演算法 1 最佳置換演算法 opt 2 先進先出演算法 fifo 3 最近最少使用演算法 lru 4 時鐘置換演算法 clock 5 改進型的時鐘置換演算法 最佳置換演算法 opt 每次選擇淘汰的頁面將是以後永不使用,最長時間內不再被訪問的頁面,無法...
作業系統實驗之虛擬記憶體頁面置換演算法
設計程式模擬先進先出fifo 最佳置換opi和最近最久未使用lru頁面置換演算法的工作過程。假設記憶體中分配給每個程序的最小物理塊數為m,在程序執行過程中要訪問的頁面個數為n,頁面訪問序列為p1,pn,分別利用不同的頁面置換演算法排程程序的頁面訪問序列,給出頁面訪問序列的置換過程,計算每種演算法缺頁...
記憶體瘋狂換頁!CPU怒批作業系統
我是cpu一號車間的阿q,前一陣子我們廠裡發生了一件大喜事,老闆拉到了一筆投資,準備擴大生產規模。不過老闆挺摳門的,拉到了投資也不給我們漲點工資,就知道讓我們拼命幹活,壓榨我們的勞動力。老闆說了,投資的錢要用來添置裝置,招聘新員工,咱們原來就有八個車間了,這一下直接double,變成了十六個!我們的...