資源簡介
實驗目的及基本要求
設計和實現最佳置換算法、隨機置換算法、先進先出置換算法、最近最久未使用置換算法、簡單Clock置換算法及改進型Clock置換算法;通過支持頁面訪問序列隨機發生實現有關算法的測試及性能比較。

代碼片段和文件信息
#include
#include
#include
using?namespace?std;
int?const?InsideCount?=?5;//內存中存放的頁面數
int?count?=?0;
int?Inside[InsideCount];
int?const?PageCount???=10;//總的頁面數
int?Page[PageCount];
int?insert?=?0;//先到先出置換算法fcfo中表示?當內存滿的時候,新進入的頁號放的位置
int?suiji?=?0;?//隨機置換算法randchange??當內存滿的時候,新進入的頁號放的位置
int?state[InsideCount];//clock置換算法中,內存中的每個頁面號對應的狀態
int?state2[InsideCount][2];//?二維數組,第一行第一列為訪問位,第一行的第二列為修改位
double?lost?=?0.0;
//檢測頁號是否在內存中
bool?isInside(int?num){
for(int?i?=?0;?i? if(Inside[i]?==?Page[num]){
state[i]?=?1;
return?true;
}
}
return?false;
}
//判斷頁面是否已經被修改
bool?change(){
if((rand()%2+1)?==?1?){
cout<<“該頁面被修改“< return?true;
}
else
return?false;
}
//用于改進型clock置換算法,檢測頁號是否在內存中并把訪問位和修改位置1
bool?isInside2(int?num){
for(int?i?=?0;?i? if(Inside[i]?==?Page[num]){
if(change()){
state2[i][0]?=?1;
state2[i][1]?=?1;
}
else{
state2[i][0]?=?1;
}
return?true;
}
}
return?false;
}
//用于改進型clock置換算法,判斷內存中第幾個需要被置換
int?whichpage(){
int?j;
for(j=0;?j?????????if(state2[j][0]?==?0&&state2[j][1]?==?0){
return?j;
}
}
for(j=0;?j?????????if(state2[j][0]?==?0&&state2[j][1]?==?1){
return?j;
}
state2[j][0]?=?0?;
}
for(j=0;?j? state2[j][0]?=?0?;
}
return?whichpage();
}
//最佳置換算法(OPT)
void?OPT(int?num){
int?max?=?0;?//?表示內存中的頁號,下一次出現的距離
int?maxchange;?//表示內存中下次出現距離最大的頁號在內存中的位置
int?k;
if(isInside(num)){
cout<<“命中“< for(int?i=0?;?i? ????????cout<<“物理塊“< }
else
if(count?==?InsideCount){
lost++;
for(int?j=0;?j? for(?k?=?num;?k? if(Inside[j]?==?Page[k])
break;
}
if(?k?>?max){
??max?=?k;????//k表示在這個地方會再次出現給定頁面
??maxchange?=j;//j?表示把?內存中第j個Inside中的頁面從內存拿出,把新的頁面放入
}
}
Inside[maxchange]?=?Page[num];
for(int?i=0?;?i? ????????????cout<<“物理塊“< }
else{
Inside[count]?=?Page[num];
count++;
for(int?i=0?;?i? ????????????cout<<“物理塊“< }
}
//隨機置換算法
void?RAND(int?num){
????if(isInside(num)){
cout<<“命中“< for(int?i=0?;?i? ????????cout<<“物理塊“< }
else
if(count?==?InsideCount){
lost++;
suiji?=?rand()%3;
Inside[suiji]?=?Page[num];
for(int?i=0?;?i? ????????????cout<<“物理塊“< }
else{
Inside[count]?=?Page[num];
count++;
for(int?i=0?;?i? ????????????cout<<“物理塊“< }
}
//先進現出置換算法(FIFO)
void?FIFO(int?num){
if(isInside(num)){
cout<<“命中“< for(int?i=0?;?i? ????????cout<<“物理塊“<
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2013-03-24?21:51??頁面置換算法\
?????目錄???????????0??2013-03-24?21:22??頁面置換算法\Debug\
?????文件??????202973??2013-03-24?21:22??頁面置換算法\Debug\Page.obj
?????文件??????548964??2013-03-24?21:22??頁面置換算法\Debug\PageReplace.exe
?????文件??????782216??2013-03-24?21:22??頁面置換算法\Debug\PageReplace.ilk
?????文件?????1991140??2013-03-24?20:28??頁面置換算法\Debug\PageReplace.pch
?????文件?????1090560??2013-03-24?21:22??頁面置換算法\Debug\PageReplace.pdb
?????文件???????66560??2013-03-24?21:22??頁面置換算法\Debug\vc60.idb
?????文件??????110592??2013-03-24?21:22??頁面置換算法\Debug\vc60.pdb
?????文件????????9007??2013-03-24?21:22??頁面置換算法\Page.cpp
?????文件????????4337??2013-03-24?21:51??頁面置換算法\PageReplace.dsp
?????文件?????????530??2013-03-24?20:28??頁面置換算法\PageReplace.dsw
?????文件???????33792??2013-03-24?21:51??頁面置換算法\PageReplace.ncb
?????文件???????48640??2013-03-24?21:51??頁面置換算法\PageReplace.opt
?????文件????????1317??2013-03-24?21:22??頁面置換算法\PageReplace.plg
評論
共有 條評論