主题:LRU页面置换算法
花了很多时间做的,也可以说是一个比较好的算法吧.思路是对的,但是运行时有点错误,不知道后面为什么置换出来的页面是错的.哪位高手能给我找出来呀.参考操作系统LRU 算法.
#include<iostream.h>
void main()
{
int a[10],b[10],c[10];
int i,t,k,j;
int n,m;
cout<<"请输入内存容量m:";
cin>>m;
for(i=0;i<m;i++)
{
a[i]=-1; //-1 表示内存中无页面,0表示初始化
b[i]=0;
}
cout<<"请输入要访问的页面顺序:"<<endl;
for(i=0;i<10;i++)
{
cin>>n;
c[i]=n;
}
i=0;
while(i<10)
{
for(k=0;k<m;k++)
{
if(a[k]==c[i])
{
cout<<"内存中有这个页面,直接访问!"<<endl;
b[k]=1;
break;
}
}
if(k==m) //内存中没有要访问的页面
{
if(a[m-1]<0)
{
cout<<"内存未满, ";
for(k=0;k<m;k++)
{
if(a[k]<0)
break;
}
a[k]=c[i];
b[k]=1;
cout<<c[i]<<"进入内存"<<endl;
}
else //内存已满,将产生置换
{
int max=0;
for(j=1;j<m;j++)
{
if(b[max]<b[j])
max=j;
}
cout<<c[i]<<"进入内存, "<<a[max]<<"被置换出内存"<<endl;
a[max]=c[i];
b[max]=1;
}
}
i++;
} // while
} //main
#include<iostream.h>
void main()
{
int a[10],b[10],c[10];
int i,t,k,j;
int n,m;
cout<<"请输入内存容量m:";
cin>>m;
for(i=0;i<m;i++)
{
a[i]=-1; //-1 表示内存中无页面,0表示初始化
b[i]=0;
}
cout<<"请输入要访问的页面顺序:"<<endl;
for(i=0;i<10;i++)
{
cin>>n;
c[i]=n;
}
i=0;
while(i<10)
{
for(k=0;k<m;k++)
{
if(a[k]==c[i])
{
cout<<"内存中有这个页面,直接访问!"<<endl;
b[k]=1;
break;
}
}
if(k==m) //内存中没有要访问的页面
{
if(a[m-1]<0)
{
cout<<"内存未满, ";
for(k=0;k<m;k++)
{
if(a[k]<0)
break;
}
a[k]=c[i];
b[k]=1;
cout<<c[i]<<"进入内存"<<endl;
}
else //内存已满,将产生置换
{
int max=0;
for(j=1;j<m;j++)
{
if(b[max]<b[j])
max=j;
}
cout<<c[i]<<"进入内存, "<<a[max]<<"被置换出内存"<<endl;
a[max]=c[i];
b[max]=1;
}
}
i++;
} // while
} //main