预览加载中,请您耐心等待几秒...
1/3
2/3
3/3

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

#include<iostream.h>#include<iomanip.h>#definem9//m表示页数#definen3//n表示物理块数#defineo10//表示最大物理块的个数floatinterrupt=0;//产生缺页中断的次数intk=0;//指向最先进入内存的页,即被淘汰的页intPageTable[m+1];//定义页表,总共m页,数组中数值是状态位=1表示该页在内存中,=0表示不在内存中,默认处置为0intBlock[n];//定义物理块,总共n个,数组中数值表示对应物理块中装入的页的编号intprocess[20];//进程访问序列intnumber=1;//用于标志访问次数voidVisit(int);//访问函数staticg=0;int*pa=newint[o];/********************************************************************************主函数********************************************************************************/voidmain(void){intinput;cout<<"某进程共有"<<m<<"页,请输入进程访问序列(范围:0-"<<m<<",用9表示结束):\n";cin>>input;for(intlength=0;input!=9;length++)//将输入序列存入process数组,长度为length{process[length]=input;cin>>input;}intj=0;for(j=0;j<n;j++)pa[j]=0;for(j=0;j<n;j++)Block[j]=-1;for(j=0;j<length;j++)Visit(process[j]);//依次访问页process[j]cout<<"共"<<length<<"次访问,产生"<<interrupt<<"次缺页中断,缺页率为"<<interrupt/length<<"\n";}/********************************************************************************访问函数********************************************************************************/voidVisit(intx)//j是实参传给x,即页面的编号{inti,j,l=0,q=0,w=0;cout<<setw(2)<<number<<":访问页"<<x<<"";//第number次访问,访问页xfor(i=0;i<n;i++){if(Block[i]==-1)//访问页x时没有命中,且内存未装满,产生缺页中断,直接调入访问页{interrupt++;//缺页中断次数加1PageTable[x]=1;//修改状态位Block[i]=x;//页x调入物理块cout<<"缺页中断内存未满调入页"<<x<<"物理块内的页为";for(j=0;j<=i;j++)cout<<Block[j]<<"";//输出物理块内的页号cout<<"\n";break;}if(PageTable[x]==1)//访问页x时命中{for(j=0;j<n;j++)if(Block[j]==x)break;pa[j]++;cout<<"命中物理块内的页为";for(j=0;j<n&&Block[j]!=-1;j++)cout<<Block[j]<<"";//输出物理块内的页号cout<<"\n";break;}}if(i==n)//访问页x时内存已装满,且没有命中,产生缺页中断,调入该页至内存,淘汰最先进入的页{intmin=0;for(j=0;j<n;j++)if(pa[j]<min||pa[j]==min)min=pa[j];for(l=0;l<n;l++){if(pa[l]==min){pa[l]=0;cout<<"缺页中断淘汰页"<<Block[l]<<"调入页"<<x<<"物理块内的页为";interrupt++;//缺页中断次数加1PageTable[Block[l]]=0;//页Block[k]被淘汰,状态位修改为0Block[l]=x;//页x调入物理块PageTable[x]=1;//页x状态位修改为1for(j=0;j<n;j++)cout<<Block[j]<<"";//输出物理块内的页号cout<<"\n";break;}}}number++;//访问次数加1}