资源简介
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].
评论
共有 条评论