#include
#include
#include
#define Bsize 3 //页面块数
#define Psize 20
using namespace std;
struct pageInfor
{
int ID; //页面号
int visit; //被访问标记
};
pageInfor * block; //物理块
pageInfor * page; //页面号串
class SWM
{
private:
int i;
int count;
public:
//置初值
void BlockClear()
{
for(int i=0; i
block[i].ID = -1;
block[i].visit = 0;
}
}
//初始化
void inital()
{
int QString[Psize]={0};
srand(time(0));
for(int i=0;i<20;i++)
{
QString[i]=rand()%10;
printf("%d",QString[i]);
}
cout<
BlockClear();
page = new pageInfor[Psize];
for(i=0; i
page[i].ID = QString[i];
page[i].visit = 0;
}
}
//查找是否有空闲内存
int findSpace()
{
for(int i=0; i
return i;//找到空闲内存,返回BLOCK中位置
return -1;
}
//查找内存中是否有该页面
int findExist(int curpage)
{
for(int i=0; i
return i;//找到内存中有该页面,返回BLOCK中位置
return -1;
}
//查找应予置换的页面
int findReplace()
{
int pos = 0;
for(int i=0; i
pos = i;//找到应予置换页面,返回BLOCK中位置
return pos;
}
//显示
void display()
{
cout<<"\n";
for(int i=0; i
cout<
}
//FIFO算法
void FIFO()
{
count=0;
int exist,space,position ;
for(int i=0; i
exist = findExist(i);
if(exist != -1)
{
cout<<"即将访问的是页面"<
else
{
space = findSpace();
if(space != -1)
{
block[space] = page[i];
display();
}
else
{
position = findReplace();
cout<<"即将访问的是页面"<
display();
count++;
}
}
for(int j=0; j
}
cout<<"\nFIFO算法的缺页率是:"<<(float)count/20<
//LRU算法
void LRU()
{
count=0;
int exist,space,position ;
for(int i=0; i
exist = findExist(i);
if(exist != -1)
{
cout<<"即将访问的是页面"<
}
else
{
space = findSpace();
if(space != -1)
{
block[space] = page[i];
display();
}
else
{
position = findReplace();
cout<<"即将访问的是页面"<
display();
count++;
}
}
for(int j=0; j
block[j].visit++;
}
}
cout<<"\n LRU算法的缺页率是:"<<(float)count/20<
//OPT算法
void OPT()
{
count=0;
int exist,space,position ;
for(int i=0; i
exist = findExist(i);
if(exist != -1)
{
cout<<"即将访问的是页面"<
else
{
space = findSpace();
if(space != -1)
{
block[space] = page[i];
display();
}
else
{
for(int k=0; k
if(block[k].ID != page[j].ID)
{
block[k].visit = 1000;
}
else
{
block[k].visit = j;
break;
}
}
position = findReplace();
cout<<"即将访问的是页面"<
display();
}
}
}
}
};
void main()
{
int ch;
SWM test;
printf("\t\t 页面置换算法 \n");
printf("\t\t 虚拟内存 \n");
printf("\t\t 1、产生随机序列 \n");
printf("\t\t 2、最久未使用(LRU) \n");
printf("\t\t 3、先进先出(FIFO) \n");
printf("\t\t 4、最佳置换算法(OPT) \n");
// printf("\t\t 5、三种算法的比较()
// cout<<"计算机随机产生一组种子:";
// test.inital();
while(ch)
{
cin>>ch;
switch(ch)
{
case 1:
cout<<"计算机随机产生一组种子:";
test.inital();
test.BlockClear();
cout<
case 2:
cout<<"LRU:"<
test.BlockClear();
cout<
case 3:
cout<<"FIFO:"<
test.BlockClear();
cout<
case 4:
cout<<"LRU:"<
test.BlockClear();
cout<
default:
cout<<"ERROR COMMAND!"<
break;
}
}
}