經典作業系統教材中的LRU演算法的自編c++實現及原始碼。 (轉)

amyz發表於2007-08-17
經典作業系統教材中的LRU演算法的自編c++實現及原始碼。 (轉)[@more@]

#include
#include

/*void setm(int a[][],int m,int n)
{ int i,j;
  for(i=0;i  {a[m-1][i]=1;
  }
  for(j=0;j  {a[i][m-1]=0;}
};*/
int **martrix;
 int i,j;
void setm(int m,int n)
{for(i=0;i{martrix[m][i]=1;
 martrix[i][m]=0;
}
}
char * current;
void print(int n)
{ int p,q;
for(p=0;p{ for(q=0;q  {cout<  cout<  cout<}

}
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 { 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<

 martrix=new int * [n];
 for( i=0;i  martrix[i]=new int[n];

 current=new char [n];
 for(i=0;i  current[i]=;
 for(i=0;i  for(j=0;j  martrix[i][j]=0;
  int k;
  int len=strlen(sequence);
  //setm(0,n);print(n);cout<  //setm(1,n);print(n);cout<  //setm(2,n);print(n);
  //for(i=1;i<=len;i++)
 //{ if(i<=n) {setm(i-1,n);print(n);cout< //}
  int flag;
  int f;
  int *total;
  int g;
  int count=0;
  char c;
  total=new int[n];
  for(i=0;i  total[i]=0;
for(k=1;k<=len;k++)
{  cout< cout< if(k<=n) {current[k-1]=sequence[k-1];setm(k-1,n);print(n);cout<else
{  for(i=0;i  {  if(current[i]==sequence[k-1]) {flag=i;  break;}
  }
  if(i==n) {
  for(f=0;f  { for(g=0;g  {total[f]+=martrix[f][g];}
  }
  c=current[mini(total)];
  current[mini(total)]=sequence[k-1];
  setm(mini(total),n);print(n);cout<  cout<  count++;
  } 
else
{setm(flag,n);print(n);cout<}
for(i=0;i  total[i]=0;

}
cout<cout<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次缺頁
請按任意鍵並回車退出

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-963675/,如需轉載,請註明出處,否則將追究法律責任。

相關文章