• 大小: 7KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-05-05
  • 语言: C/C++
  • 标签:

资源简介

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].

评论

共有 条评论

相关资源