LRU算法参考例子如下:
include
using namespace std;
int ans[1000];//存放原序列
int block[1000];//机器分给程序的内存块
int num[1000];//每个页面在内存中待的时间
int n; //页面流数
int m; //内存块数
int sum;//命中次数
//初始化函数
void Init()
{
cout<<"输入页面数"<
cout<<"输入原页面流"<
cout<<"输入分给程序的内存块数"<
sum=0;
}
//扫描block中是否已存在该块
int saomiao(int k,int now)
{
int i;
for(i=0;i
if(block[i]==now)return i;
}
return -1;
}
//打印内存中的页面情况
void print(int k,int now)
{
cout<<"被调用的页面号 "<
for(int i=0;i
for(i=0;i
//LRU
void LRU()
{
int i,j,k,p;
k=0;//计算已用的内存块数
for(i=0;i
if(k
p=saomiao(k,ans[i]);
if(p>=0)
{
sum++;
cout<<"命中"<
for(j=0;j
num[p]=1;
}
else
{
cout<<"未命中"<
block[k]=ans[i];
for(j=0;j
num[k++]=1;
}
}
else
{
p=saomiao(m,ans[i]);
if(p>=0)
{
sum++;
cout<<"命中"<
for(j=0;j
num[p]=1;
}
else
{
int max=-1;
int p1=0;
for(j=0;j
{
max=num[j];
p1=j;
}
cout<<"未命中"<
cout<<"将被替换的叶号和时间"<
for(j=0;j
num[p1]=1;
}
}
}
}
int main()
{
Init();
LRU();
cout<<"命中次数 "<
}