⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lru.txt

📁 在Windows环境下运行程序,通过从一般常用的调页算法中选取典型算法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 + -