页面置换算法(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; }