資源簡介
C 語言實現頁面置換算法,一共實現LRU置換算法 隨機置換算法 FIFO置換算法 Clock及改進型置換算法五個算法,可以算平均命中率。VC++6.0上可直接運行
代碼片段和文件信息
//?test頁面置換算法.cpp?:?Defines?the?entry?point?for?the?console?application.
//
#include?“stdafx.h“
#include?
#include?
#include?
#include?
#include?
typedef?struct?Page{
int ?ID; //頁面號
int??stayTime;??????????//內存中駐留時間
int??unUseTime;?????????//已經多久未被使用
}CPage;
void?Rand()//隨機置換算法
{
cout<<“隨機值換算法:“< CPage?C_Page[4];
for(int?i=0;i<4;i++)//初始化內存頁面
{
C_Page[i].ID?=-1;
C_Page[i].stayTime?=0;
C_Page[i].unUseTime=0;
}
srand(time(NULL));
int?a?count=0;
for(i=0;i<20;i++)
{??
a=rand()%4;//產生置換的塊號
C_Page[i].ID=rand()%8;//產生一個新的請求頁面,并輸出
cout< if(C_Page[a].ID==C_Page[i].ID)
{
count+=1;
cout<<“命中頁面:“< }
else?C_Page[a].ID=C_Page[i].ID;
cout< }
cout<<“一共命中:“< double?c=count/20.0;
cout<<“命中率為:“< }
void?FIFO()//先進先出置換算法
{
cout<<“FIFO值換算法:“< double?count=0.0;
int?i?j?page[20]={70120304230321201701};
CPage?C_Page[4];
for(i=0;i<4;i++)//初始化內存頁面
{
C_Page[i].ID?=-1;
C_Page[i].stayTime?=0;
C_Page[i].unUseTime=0;
}
for(i=0;i<20;i++)
{
int?success=0?unuse=-1?unuse_t=0?stay_t=0?stay;
cout< if(page[i]>=0)
{
for(j=0;j<4;j++)//對頁面進行訪問,查看是否已存在
{
if(C_Page[j].ID?==?page[i])//命中的情況
{
count+=1.0;
C_Page[j].stayTime?+=1;//每訪問一次,頁面滯留時間加1
C_Page[j].unUseTime?=0;
success?=1;//成功命中標志
}
else?if?(C_Page[j].ID?0)
{
C_Page[j].unUseTime?+=1;
if(C_Page[j].unUseTime?>?unuse_t)
{
unuse=j;
unuse_t=C_Page[j].unUseTime;
}
}
else //頁面駐留時間加1
{
C_Page[j].stayTime?+=1;
if(C_Page[j].stayTime?>?stay_t)
{
stay_t=?C_Page[j].stayTime;
stay=j;
}
}
}
}
if(success==1)cout<<“命中頁面:“< else?if(success==0?&&?unuse>=0)//存在空閑頁面
{
C_Page[unuse].ID?=?page[i];
C_Page[unuse].stayTime?=1;
C_Page[unuse].unUseTime?=0;
}
else //沒有命中且沒有空閑頁面
{
C_Page[stay].ID?=?page[i];
C_Page[stay].stayTime?=1;
C_Page[stay].unUseTime?=0;
}
cout< }
double?c=count/20.0;
cout<<“命中率為:“< }
void?LRU()//最近最久未使用置換算法
{
cout<<“LRU值換算法:“< double?count=0.0;
int?i?j?page[20]={70120304230321201701};
CPage?C_Page[4];
for(i=0;i<4;i++)//初始化內存頁面
{
C_Page[i].ID?=-1;
C_Page[i].stayTime?=0;
C_Page[i].unUseTime=0;
}
for(i=0;i<20;i++)
{
int?success=0?unuse=-1?unuse_t=0?stay_t=0?stay;
cout< if(page[i]>=0)
{
for(j=0;j<4;j++)//對頁面進行訪問,查看是否已存在
{
if(C_Page[j].ID?==?page[i])//命中的情況
{
count+=1.0;
C_Page[j].stayTime?=1;//命中后頁面停留時間置為1
C_Page[j].unUseTime?=0;
success?=1;//成功命中標志
}
else?if?(C_Page[j].ID?0)
{
C_Page[j].unUseTime?+=1;
if(C_Page[j].
評論
共有 條評論