页面置换算法(FIFO,LRU,最佳,Clock)

页面置换算法(FIFO,LRU,最佳,Clock)
页面置换算法(FIFO,LRU,最佳,Clock)

#include

using namespace std;

void Print(int bc[],int blockCount)

{

for(int i=0;i

{

cout<

}

cout<

}

bool Travel(int bc[],int blockCount,int x)

{

bool is_found=false;

int i;

for(i=0;i

{

if(bc[i]==x)

{

is_found=true;

break;

}

}

return is_found;

}

void FIFO(int pc[],int bc[],int pageCount,int blockCount) {

cout<<"0:FIFO置换算法"<

int i;

if(pageCount<=blockCount)

{

cout<<"缺页次数为"<<0<

cout<<"缺页率为"<<0<

}

else

{

int noPage=0;

int p=0;

for(i=0;i

{

cout<<"引用页:"<

if(!Travel(bc,blockCount,pc[i]))

{

if(i

{

bc[i]=pc[i];

}

else

{

if(p==blockCount)

{

p=0;

}

bc[p]=pc[i];

p++;

}

noPage++;

cout<<"物理快情况:";

Print(bc,blockCount);

}

cout<

}

cout<<"缺页次数为:"<

cout<<"缺页率为:"<<(float)noPage/pageCount<

}

}

int FoundMaxNum(int a[],int n)

{

int k,j;

k=a[0];

j=0;

for (int i=0;i

{

if(a[i]>=k)

{

k=a[i];

j=i;

}

}

return j;

}

void LRU(int pc[],int bc[],int pageCount,int blockCount)

{

cout<<"1:LRU置换算法"<

if(pageCount<=blockCount)

{

cout<<"缺页次数为"<<0<

cout<<"缺页率为"<<0<

}

else

{

int noPage=0;

int i,j,m;

int *bc1=new int[blockCount];

for(i=0;i

{

bc1[i]=0;

}

for(i=0;i

{

cout<<"引用页:"<

if(!Travel(bc,blockCount,pc[i]))

{

if(i

{

bc[i]=pc[i];

for(int p=0;p<=i;p++)

{

bc1[p]++;

}

}

else

{

for(j=0;j

{

bc1[j]++;

}

int k=FoundMaxNum(bc1,blockCount);

bc[k]=pc[i];

bc1[k]=1;

}

noPage++;

cout<<"物理快情况:";

Print(bc,blockCount);

}

else if(Travel(bc,blockCount,pc[i]))

{

if(i

{

for(j=0;j<=i;j++)

{

bc1[j]++;

}

for(m=0;m<=i;m++)

{

if(bc[m]==pc[i])

{

break;

}

}

bc1[m]=1;

bc[m]=pc[i];

}

else

{

for(j=0;j

{

bc1[j]++;

}

for(m=0;m

{

if(bc[m]==pc[i])

{

break;

}

}

bc1[m]=1;

bc[m]=pc[i];

}

}

cout<

}

cout<<"缺页次数为:"<

cout<<"缺页率为:"<<(float)noPage/pageCount<

delete bc1;

}

}

void Optiomal(int pc[],int bc[],int pageCount,int blockCount)

{

cout<<"2:最佳置换算法"<

if(pageCount<=blockCount)

{

cout<<"缺页次数为"<<0<

cout<<"缺页率为"<<0<

}

else

{

int noPage=0;

int i,j,k;

for(i=0;i

{

cout<<"引用页:"<

if(!Travel(bc,blockCount,pc[i]))

{

if(i

{

bc[i]=pc[i];

}

else

{

int max=0;

int blockIndex;;

for(j=0;j

{

for(k=i;k

{

if(bc[j]==pc[k])

{

break;

}

}

if(k>=max)

{

max=k;

blockIndex=j;

}

}

bc[blockIndex]=pc[i];

}

noPage++;

cout<<"物理快情况:";

Print(bc,blockCount);

}

cout<

}

cout<<"缺页次数为:"<

cout<<"缺页率为:"<<(float)noPage/pageCount<

}

}

void NRU(int pc[],int bc[],int pageCount,int blockCount)

{

cout<<"3:Clock置换算法"<

if(pageCount<=blockCount)

{

cout<<"缺页次数为"<<0<

cout<<"缺页率为"<<0<

}

else

{

int noPage=0;

int i,j;

int *bc1=new int[blockCount];

for(i=0;i

{

bc1[i]=0;

}

for(i=0;i

{

cout<<"引用页:"<

if(!Travel(bc,blockCount,pc[i]))

{

for(j=0;j

{

if(bc1[j]==1)

{

bc1[j]=0;

}

else if(bc1[j]==0)

{

break;

}

if(j==blockCount-1)

{

j=-1;

}

}

bc[j]=pc[i];

bc1[j]=1;

noPage++;

cout<<"物理快情况:";

Print(bc,blockCount);

}

cout<

}

cout<<"缺页次数为:"<

cout<<"缺页率为:"<<(float)noPage/pageCount<

delete bc1;

}

}

int main()

{

int pageCount,blockCount,i;

cout<<"输入页面数"<

cin>>pageCount;

int *pc=new int[pageCount];

cout<<"输入页面走向"<

for(i=0;i

{

cin>>pc[i];

}

cout<<"输入物理块数"<

cin>>blockCount;

cout<<"0:FIFO置换算法"<

cout<<"1:LRU置换算法"<

cout<<"2:最佳置换算法"<

cout<<"3:Clock置换算法"<

cout<<"按数字选择算法类别:"<

int n;

while(cin>>n)

{

if(n==0)

{

int *bc=new int[blockCount];

FIFO(pc,bc,pageCount,blockCount);

delete bc;

}

else if(n==1)

{

int *bc=new int[blockCount];

LRU(pc,bc,pageCount,blockCount);

delete bc;

}

else if(n==2)

{

int *bc=new int[blockCount];

Optiomal(pc,bc,pageCount,blockCount);

delete bc;

}

else if(n==3)

{

int *bc=new int[blockCount];

for(i=0;i

{

bc[i]=-1;

}

NRU(pc,bc,pageCount,blockCount);

delete bc;

}

else break;

}

delete pc;

return 0;

}

相关主题
相关文档
最新文档