LFU页面置换算法(共3页).doc
精选优质文档-倾情为你奉上#include<iostream.h>#include<iomanip.h>#define m 9 /m表示页数#define n 3 /n表示物理块数#define o 10/表示最大物理块的个数float interrupt=0; /产生缺页中断的次数int k=0; /指向最先进入内存的页,即被淘汰的页int PageTablem+1; /定义页表,总共m页,数组中数值是状态位 =1表示该页在内存中,=0表示不在内存中,默认处置为0int Blockn; /定义物理块,总共n个,数组中数值表示对应物理块中装入的页的编号int process20; /进程访问序列int number=1; /用于标志访问次数void Visit(int); /访问函数static g=0;int *pa=new int o;/* 主函数*/void main (void) int input; cout<<"某进程共有"<<m<<"页,请输入进程访问序列(范围:0-"<<m<<",用9表示结束):n" cin>>input; for(int length=0;input!=9;length+) /将输入序列存入process数组,长度为length processlength=input; cin>>input; int j=0;for(j=0;j<n;j+)paj=0;for(j=0;j<n;j+)Blockj=-1; for(j=0;j<length;j+) Visit(processj); /依次访问页processj cout<<"共"<<length<<"次访问,产生"<<interrupt<<"次缺页中断,缺页率为 "<<interrupt/length<<"n"/* 访问函数*/void Visit(int x)/j是实参传给x,即页面的编号int i,j,l=0,q=0,w=0;cout<<setw(2)<<number<<": 访问页"<<x<<" " /第number次访问,访问页x for(i=0;i<n;i+) if(Blocki=-1) /访问页x时没有命中,且内存未装满,产生缺页中断,直接调入访问页 interrupt+; /缺页中断次数加1 PageTablex=1; /修改状态位 Blocki=x; /页x调入物理块 cout<<"缺页中断 内存未满 调入页"<<x<<" 物理块内的页为 " for(j=0;j<=i;j+)cout<<Blockj<<" " /输出物理块内的页号 cout<<"n" break; if(PageTablex=1) /访问页x时命中 for(j=0;j<n;j+) if(Blockj=x) break; paj+; cout<<"命中 物理块内的页为 " for(j=0;j<n && Blockj!=-1;j+)cout<<Blockj<<" " /输出物理块内的页号 cout<<"n" break; if(i=n) /访问页x时内存已装满,且没有命中,产生缺页中断,调入该页至内存,淘汰最先进入的页 int min=0;for(j=0;j<n;j+)if(paj<min | paj=min)min=paj;for(l=0;l<n;l+)if(pal=min)pal=0;cout<<"缺页中断 淘汰页"<<Blockl<<" 调入页"<<x<<" 物理块内的页为 "interrupt+; /缺页中断次数加1PageTableBlockl=0; /页Blockk被淘汰,状态位修改为 0Blockl=x; /页x调入物理块PageTablex=1; /页x状态位修改为 1for(j=0;j<n;j+)cout<<Blockj<<" " /输出物理块内的页号cout<<"n"break; number+; /访问次数加1专心-专注-专业