页面置换算法(FIFO,LRU,最佳,Clock)
2009-12-19 09:49
579 查看
页面置换算法(FIFO,LRU,最佳,Clock)
#include<iostream> using namespace std; void Print(int bc[],int blockCount) { for(int i=0;i<blockCount;i++) { cout<<bc[i]<<" "; } cout<<endl; } bool Travel(int bc[],int blockCount,int x) { bool is_found=false; int i; for(i=0;i<blockCount;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置换算法"<<endl; int i; if(pageCount<=blockCount) { cout<<"缺页次数为"<<0<<endl; cout<<"缺页率为"<<0<<endl; } else { int noPage=0; int p=0; for(i=0;i<pageCount;i++) { cout<<"引用页:"<<pc[i]<<endl; if(!Travel(bc,blockCount,pc[i])) { if(i<blockCount) { bc[i]=pc[i]; } else { if(p==blockCount) { p=0; } bc[p]=pc[i]; p++; } noPage++; cout<<"物理快情况:"; Print(bc,blockCount); } cout<<endl; } cout<<"缺页次数为:"<<noPage<<endl; cout<<"缺页率为:"<<(float)noPage/pageCount<<endl; } } int FoundMaxNum(int a[],int n) { int k,j; k=a[0]; j=0; for (int i=0;i<n;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置换算法"<<endl; if(pageCount<=blockCount) { cout<<"缺页次数为"<<0<<endl; cout<<"缺页率为"<<0<<endl; } else { int noPage=0; int i,j,m; int *bc1=new int[blockCount]; for(i=0;i<blockCount;i++) { bc1[i]=0; } for(i=0;i<pageCount;i++) { cout<<"引用页:"<<pc[i]<<endl; if(!Travel(bc,blockCount,pc[i])) { if(i<blockCount) { bc[i]=pc[i]; for(int p=0;p<=i;p++) { bc1[p]++; } } else { for(j=0;j<blockCount;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<blockCount) { 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<blockCount;j++) { bc1[j]++; } for(m=0;m<blockCount;m++) { if(bc[m]==pc[i]) { break; } } bc1[m]=1; bc[m]=pc[i]; } } cout<<endl; } cout<<"缺页次数为:"<<noPage<<endl; cout<<"缺页率为:"<<(float)noPage/pageCount<<endl; delete bc1; } } void Optiomal(int pc[],int bc[],int pageCount,int blockCount) { cout<<"2:最佳置换算法"<<endl; if(pageCount<=blockCount) { cout<<"缺页次数为"<<0<<endl; cout<<"缺页率为"<<0<<endl; } else { int noPage=0; int i,j,k; for(i=0;i<pageCount;i++) { cout<<"引用页:"<<pc[i]<<endl; if(!Travel(bc,blockCount,pc[i])) { if(i<blockCount) { bc[i]=pc[i]; } else { int max=0; int blockIndex;; for(j=0;j<blockCount;j++) { for(k=i;k<pageCount;k++) { if(bc[j]==pc[k]) { break; } } if(k>=max) { max=k; blockIndex=j; } } bc[blockIndex]=pc[i]; } noPage++; cout<<"物理快情况:"; Print(bc,blockCount); } cout<<endl; } cout<<"缺页次数为:"<<noPage<<endl; cout<<"缺页率为:"<<(float)noPage/pageCount<<endl; } } void NRU(int pc[],int bc[],int pageCount,int blockCount) { cout<<"3:Clock置换算法"<<endl; if(pageCount<=blockCount) { cout<<"缺页次数为"<<0<<endl; cout<<"缺页率为"<<0<<endl; } else { int noPage=0; int i,j; int *bc1=new int[blockCount]; for(i=0;i<blockCount;i++) { bc1[i]=0; } for(i=0;i<pageCount;i++) { cout<<"引用页:"<<pc[i]<<endl; if(!Travel(bc,blockCount,pc[i])) { for(j=0;j<blockCount;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<<endl; } cout<<"缺页次数为:"<<noPage<<endl; cout<<"缺页率为:"<<(float)noPage/pageCount<<endl; delete bc1; } } int main() { int pageCount,blockCount,i; cout<<"输入页面数"<<endl; cin>>pageCount; int *pc=new int[pageCount]; cout<<"输入页面走向"<<endl; for(i=0;i<pageCount;i++) { cin>>pc[i]; } cout<<"输入物理块数"<<endl; cin>>blockCount; cout<<"0:FIFO置换算法"<<endl; cout<<"1:LRU置换算法"<<endl; cout<<"2:最佳置换算法"<<endl; cout<<"3:Clock置换算法"<<endl; cout<<"按数字选择算法类别:"<<endl; 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<blockCount;i++) { bc[i]=-1; } NRU(pc,bc,pageCount,blockCount); delete bc; } else break; } delete pc; return 0; }
相关文章推荐
- 转载:操作系统页面置换算法(opt,lru,fifo,clock)实现
- FIFO, LRU, OPT 页面置换算法
- 缓存算法(页面置换算法)-FIFO、LFU、LRU
- 页面置换算法(FIFO,LRU,OPT)
- 页面置换算法 FIFO和LRU 及各自的命中率
- 页面置换算法 FIFO NUR LRU LFU
- 缓存算法(页面置换算法)-FIFO、LFU、LRU
- 使用C++STL中的deque实现操作系统FIFO、LRU页面置换算法
- Cache与页面置换算法FIFO、LRU等
- 操作系统虚拟内存中的四种典型页替换算法(OPT,LRU,FIFO,Clock)
- 页面置换算法-FIFO、LRU、OPT
- 操作系统虚拟内存中的四种典型页替换算法(OPT,LRU,FIFO,Clock)
- 操作系统虚拟内存中的四种典型页替换算法(OPT,LRU,FIFO,Clock)
- 缓存算法(页面置换算法)-FIFO、LFU、LRU
- 操作系统页面置换算法(opt,lru,fifo,clock)实现
- 最佳淘汰算法(OPT) 先进先出的算法(FIFO) 最近最久未使用算法(LRU)
- 操作系统虚拟内存中的四种典型页替换算法(OPT,LRU,FIFO,Clock)
- 关于FIFO和LRU页面置换算法的实现
- 缓存算法(页面置换算法)-FIFO、LFU、LRU
- 操作系统页面置换算法之FIFO,LRU