📄 lru.txt
字号:
#include<iostream.h>
#include<stdlib.h>
#define M 10
float m;
int n;
struct Pro
{
int num,time;
};
void print(Pro *page)
{
Pro *p=new Pro[n];
p=page;
for(int i=0;i<n;i++)
cout<<p[i].num<<"\t";
cout<<endl;
}
int search(int e,Pro *page)
{
Pro *p=new Pro[n];
p=page;
for(int i=0;i<n;i++)
if(e==p[i].num)return i;
return -1;
}
int LRU_1(Pro *page)
{
Pro *p=new Pro[n];
p=page;
int t=p[0].time,i=0;
for(i=0;i<n;i++)
if(t<p[i].time)t=p[i].time;
for(i=0;i<n;i++)
if(t==p[i].time)return i;
return -1;
}
void LRU(Pro p[M],Pro *page)
{
cout<<"页面置换情况(-1表示该物理块中还未存入页面号):"<<endl;
int i,j;
float k=0;
int a,b;
for(i=0;i<n;i++)
{
page[i].num=-1;
page[i].time=n-1-i;
}
for(i=0;i<m;i++)
{
a=b=search(p[i].num,page);
if(a>=0)page[a].time=0;
else{
a=LRU_1(page);
page[a].num=p[i].num;
page[a].time=0;
k++;
}
if(a==0) for(j=1;j<n;j++) page[j].time++;
if(a>0 && a<n){
for(j=0;j<a;j++) page[j].time++;
for(j=a+1;j<n-1;j++) page[j].time++;
}
if(a==n)for(j=0;j<n-1;j++) page[j].time++;
if(b==-1)print(page);
}
cout<<"缺页次数:"<<k<<" 缺页率:"<<k/m<<endl;
}
void main()
{
int i,menu;
cout<<"请输入内存中可用的物理块数:";
cin>>n;
cout<<"请输入页面引用串中的元素数:";
do{
cin>>m;
if(m>M)cout<<"数目太多,请重试"<<endl;
else break;
}while(1);
Pro p[M];
Pro *page=new Pro[n];
cout<<"请输入各页面号:"<<endl;
for(i=0;i<m;i++)
{
cin>>p[i].num;
p[i].time=0;
}
for(;;)
{
cout<<endl<<"请输入需要的操作:"<<endl;
cout<<"1.最近最久未使用(LRU)置换算法"<<endl;
cout<<"2.退出程序"<<endl;
cin>>menu;
switch(menu)
{
case 1:LRU(p,page);break;
case 2:exit(0);break;
default:cout<<"输入错误,请重试"<<endl;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -