单独的FIFO
2015-11-30 20:38
190 查看
#include<iostream> #include<iomanip> using namespace std; #define m 5 //m表示页数 #define n 3 //n表示物理块数 float interrupt=0; //产生缺页中断的次数 int k=0; //指向最先进入内存的页,即被淘汰的页 int PageTable[m]; //定义页表,总共m页,数组中数值是状态位 =1表示该页在内存中,=0表示不在内存中,默认处置为0 int Block ; //定义物理块,总共n个,数组中数值表示对应物理块中装入的页的编号 int process[20]; //进程访问序列 int number=1; //用于标志访问次数 void Visit(int); //访问函数 int main (void) { int input; cout<<"某进程共有"<<m<<"页,请输入进程访问序列(范围:1-"<<m<<",用0表示结束):\n"; cin>>input; for(int length=0;input!=0;length++) //将输入序列存入process数组,长度为length { process[length]=input; cin>>input; } for(int j=0;j<length;j++) Visit(process[j]); //依次访问页process[j] cout<<"共"<<length<<"次访问,产生"<<interrupt<<"次缺页中断,缺页率为 "<<interrupt/length<<"\n"; } void Visit(int x) { int i,j; cout<<setw(2)<<number<<": 访问页"<<x<<" "; //第number次访问,访问页x for(i=0;i<n;i++) { if(Block[i]==0) //访问页x时没有命中,且内存未装满,产生缺页中断,直接调入访问页 { interrupt++; //缺页中断次数加1 PageTable[x-1]=1; //修改状态位 Block[i]=x; //页x调入物理块 cout<<"缺页中断 内存未满 调入页"<<x<<" 物理块内的页为 "; for(j=0;j<=i;j++)cout<<Block[j]<<" "; //输出物理块内的页号 cout<<"\n"; break; } if(PageTable[x-1]==1) //访问页x时命中 { cout<<"命中 物理块内的页为 "; for(j=0;j<n && Block[j]!=0;j++)cout<<Block[j]<<" "; //输出物理块内的页号 cout<<"\n"; break; } } if(i==n) //访问页x时内存已装满,且没有命中,产生缺页中断,调入该页至内存,淘汰最先进入的页 { cout<<"缺页中断 淘汰页"<<Block[k]<<" 调入页"<<x<<" 物理块内的页为 "; interrupt++; //缺页中断次数加1 PageTable[Block[k]-1]=0; //页Block[k]被淘汰,状态位修改为 0 Block[k]=x; //页x调入物理块 PageTable[x-1]=1; //页x状态位修改为 1 k=(k+1)%n; //修改下次被淘汰页指针 for(j=0;j<n;j++)cout<<Block[j]<<" "; //输出物理块内的页号 cout<<"\n"; } number++; //访问次数加1 }
相关文章推荐
- js页面跳转
- 表达式的二叉树输入和该二叉树的遍历
- Android——子线程中访问网络数据问题
- DCT编码原理分析
- 21
- POJ 2096 Collecting Bugs [概率DP]
- 解决Xcode 7打包的应用与iOS 9的兼容问题
- iOS笔记17
- OFDM学习理解。
- 基于AFNetworking封装的网络请求工具类【转载】
- binary_serach_tree
- Java WebService 简单实例
- hdu3394--Railway(点的双连通分量)
- js实现函数重载
- iOS笔记16
- VIM 操作大全
- Android ListView批量选择(全选、反选、全不选)
- Android之开源框架NineOldAndroids动画库
- Android ListView批量选择(全选、反选、全不选)
- C学习体会