(完整word版)LFU页面置换算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<>
#define m 9 //m表示页数
#define n 3 //n表示物理块数
#define o 10//表示最大物理块的个数
float interrupt=0; //产生缺页中断的次数
int k=0; //指向最先进入内存的页,即被淘汰的页
int PageTable[m+1]; //定义页表,总共m页,数组中数值是状态位=1表示该页在内存中,=0表示不在内存中,默认处置为0
int Block[n]; //定义物理块,总共n个,数组中数值表示对应物理块中装入的页的编号
int process[20]; //进程访问序列
int number=1; //用于标志访问次数
void Visit(int); //访问函数
static g=0;
int *pa=new int [o];
/****************************************************************************** **
主函数
******************************************************************************* */
void main (void)
{
int input;
cout<<"某进程共有"< for(int length=0;input!=9;length++) //将输入序列存入process数组,长度为length { process[length]=input; cin>>input; } int j=0; for(j=0;j pa[j]=0; for(j=0;j Block[j]=-1; for(j=0;j Visit(process[j]); //依次访问页process[j] cout<<"共"< } /****************************************************************************** ** 访问函数 ******************************************************************************* */ void Visit(int x)//j是实参传给x,即页面的编号 { int i,j,l=0,q=0,w=0; cout< for(i=0;i { if(Block[i]==-1) //访问页x时没有命中,且内存未装满,产生缺页中断,直接调入访问页 { interrupt++; //缺页中断次数加1 PageTable[x]=1; //修改状态位 Block[i]=x; //页x调入物理块 cout<<"缺页中断内存未满调入页"< for(j=0;j<=i;j++)cout< cout<<"\n"; break; } if(PageTable[x]==1) //访问页x时命中 { for(j=0;j if(Block[j]==x) break; pa[j]++; cout<<"命中物理块内的页为"; for(j=0;j cout<<"\n"; break; } } if(i==n) //访问页x时内存已装满,且没有命中,产生缺页中断,调入该页至内存,淘汰最先进入的页 { int min=0; for(j=0;j if(pa[j] min=pa[j]; for(l=0;l { if(pa[l]==min) { pa[l]=0; cout<<"缺页中断淘汰页"< interrupt++; //缺页中断次数加1 PageTable[Block[l]]=0; //页Block[k]被淘汰,状态位修改为0 Block[l]=x; //页x调入物理块 PageTable[x]=1; //页x状态位修改为1 for(j=0;j cout<<"\n"; break; } } } number++; //访问次数加1 }