经典操作系统教材中的LRU算法介绍
经典操作系统教材中的LRU算法介绍
	#include <iostream.h>
	#include <string.h>
	/*void setm(int a[][],int m,int n)
	{ int i,j;
	for(i=0;i<n;i++)
	{a[m-1][i]=1;
	}
	for(j=0;j<n;j++)
	{a[i][m-1]=0;}
	};*/
	int **martrix;
	int i,j;
	void setm(int m,int n)
	{for(i=0;i<n;i++)
	{martrix[m][i]=1;
	martrix[i][m]=0;
	}
	}
	char * current;
	void print(int n)
	{ int p,q;
	for(p=0;p<n;p++)
	{ for(q=0;q<n;q++)
	{cout<<martrix[p][q]<<" ";}
	cout<<"**"<<current[p];
	cout<<"/n";
	}
	}
	int mini(int *b)
	{int i=0;
	int n,m,flag;
	n=0;
	while(b[i]>=0&&b[i]<=9){n++;i++;}
	m=b[0];flag=0;
	for(j=1;j<n;j++)
	{ if(m>b[j]) {m=b[j];flag=j;}
	}
	return flag;
	}
	void main()
	{
	int n;
	char sequence[255];
	cout<<"请输入页架数:";
	cin>>n;
	cout<<"请输入访问序列:";
	cin>>sequence;
	cout<<"*****ALL RIGHT RESERVED BY 英雄*****"<<endl;
	martrix=new int * [n];
	for( i=0;i<n;i++)
	martrix[i]=new int[n];
	current=new char [n];
	for(i=0;i<n;i++)
	current[i]=' ';
	for(i=0;i<n;i++)
	for(j=0;j<n;j++)
	martrix[i][j]=0;
	int k;
	int len=strlen(sequence);
	//setm(0,n);print(n);cout<<endl;
	//setm(1,n);print(n);cout<<endl;
	//setm(2,n);print(n);
	//for(i=1;i<=len;i++)
	//{ if(i<=n) {setm(i-1,n);print(n);cout<<endl;}
	//}
	int flag;
	int f;
	int *total;
	int g;
	int count=0;
	char c;
	total=new int[n];
	for(i=0;i<n;i++)
	total[i]=0;
	for(k=1;k<=len;k++)
	{ cout<<endl;
	cout<<sequence[k-1]<<"要求进入"<<endl;
	if(k<=n) {current[k-1]=sequence[k-1];setm(k-1,n);print(n);cout<<"缺页"<<endl;count++;}
	else
	{ for(i=0;i<n;i++)
	{ if(current[i]==sequence[k-1]) {flag=i; break;}
	}
	if(i==n) {
	for(f=0;f<n;f++)
	{ for(g=0;g<n;g++)
	{total[f]+=martrix[f][g];}
	}
	c=current[mini(total)];
	current[mini(total)]=sequence[k-1];
	setm(mini(total),n);print(n);cout<<"缺页,置换前一次"<<c<<"的那行"<<endl;
	cout<<endl;
	count++;
	}
	else
	{setm(flag,n);print(n);cout<<endl;}
	}
	for(i=0;i<n;i++)
	total[i]=0;
	}
	cout<<"总共有"<<count<<"次缺页"<<endl;
	cout<<"请按任意键并回车退出"<<endl;
	cin>>c;}
	不妨用课本上的例子先测试下这个小东西哟!
	课本上的例子是:页架数是:4;
	访问序列是:0123010321;
	执行结果是:
	请输入页架数:4
	请输入访问序列:0123010321
	*****ALL RIGHT RESERVED BY 英雄**
	0要求进入
	0 1 1 1 **0
	0 0 0 0 **
	0 0 0 0 **
	0 0 0 0 **
	缺页
	1要求进入
	0 0 1 1 **0
	1 0 1 1 **1
	0 0 0 0 **
	0 0 0 0 **
	缺页
	2要求进入
	0 0 0 1 **0
	1 0 0 1 **1
	1 1 0 1 **2
	0 0 0 0 **
	缺页
	3要求进入
	0 0 0 0 **0
	1 0 0 0 **1
	1 1 0 0 **2
	1 1 1 0 **3
	缺页
	0要求进入
	0 1 1 1 **0
	0 0 0 0 **1
	0 1 0 0 **2
	0 1 1 0 **3
	
	1要求进入
	0 0 1 1 **0
	1 0 1 1 **1
	0 0 0 0 **2
	0 0 1 0 **3
	
	0要求进入
	0 1 1 1 **0
	0 0 1 1 **1
	0 0 0 0 **2
	0 0 1 0 **3
	
	3要求进入
	0 1 1 0 **0
	0 0 1 0 **1
	0 0 0 0 **2
	1 1 1 0 **3
	
	2要求进入
	0 1 0 0 **0
	0 0 0 0 **1
	1 1 0 1 **2
	1 1 0 0 **3
	
	1要求进入
	0 0 0 0 **0
	1 0 1 1 **1
	1 0 0 1 **2
	1 0 0 0 **3
	总共有4次缺页
	请按任意键并回车退出
	这个与课本上的答案可是一样的哟!
	其它的例子就大家去试了,比如说这次作业:
	页架数是:4;
	访问序列是:ABCDABEABCDE
	你敲进去就可以出结果了.
	请输入页架数:4
	请输入访问序列:ABCDABEABCDE
	*****ALL RIGHT RESERVED BY英雄
	A要求进入
	0 1 1 1 **A
	0 0 0 0 **
	0 0 0 0 **
	0 0 0 0 **
	缺页
	B要求进入
	0 0 1 1 **A
	1 0 1 1 **B
	0 0 0 0 **
	0 0 0 0 **
	缺页
	C要求进入
	0 0 0 1 **A
	1 0 0 1 **B
	1 1 0 1 **C
	0 0 0 0 **
	缺页
	D要求进入
	0 0 0 0 **A
	1 0 0 0 **B
	1 1 0 0 **C
	1 1 1 0 **D
	缺页
	A要求进入
	0 1 1 1 **A
	0 0 0 0 **B
	0 1 0 0 **C
	0 1 1 0 **D
	
	B要求进入
	0 0 1 1 **A
	1 0 1 1 **B
	0 0 0 0 **C
	0 0 1 0 **D
	
	E要求进入
	0 0 0 1 **A
	1 0 0 1 **B
	1 1 0 1 **E
	0 0 0 0 **D
	缺页,置换前一次C的那行
	
	A要求进入
	0 1 1 1 **A
	0 0 0 1 **B
	0 1 0 1 **E
	0 0 0 0 **D
	
	B要求进入
	0 0 1 1 **A
	1 0 1 1 **B
	0 0 0 1 **E
	0 0 0 0 **D
	
	C要求进入
	0 0 1 0 **A
	1 0 1 0 **B
	0 0 0 0 **E
	1 1 1 0 **C
	缺页,置换前一次D的那行
	
	D要求进入
	0 0 0 0 **A
	1 0 0 0 **B
	1 1 0 1 **D
	1 1 0 0 **C
	缺页,置换前一次E的那行
	
	E要求进入
	0 1 1 1 **E
	0 0 0 0 **B
	0 1 0 1 **D
	0 1 0 0 **C
	缺页,置换前一次A的那行
	总共有8次缺页
	请按任意键并回车退出