您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 动态页式存储管理模拟实现C语言
个人收集整理勿做商业用途1/10作者:ZHANGJIAN仅供个人学习,勿做商业用途在内存划出一块区域,并进行页面划分;设计请求页表;模拟页面分配;分别模拟“先进先出页面淘汰算法FIFO”、“最近最少使用页面淘汰算法LRU”和“理想型淘汰算法OPT”本程序随机产生请求序列,分别模拟FIFO,LRU,OPT三种算法。将结果保存在FIFO.txt,LRU.txt,OPT.txt三个文件中。程序代码:#includestdio.h#includestdlib.h#includetime.h#defineN20#defineP3structDuLNode{intdata;structDuLNode*prior;structDuLNode*next;};intpageFIFO[N+1];intfront=0,rear=0;intpageing[N+1],pmem[P+1];intmemcount=1;voidinit(inta[],intT){inti;for(i=0;i=T;i++)a[i]=-2;}intinsert_item(intitem,intqueue[],intT){if((rear+1)%(T+1)==front)return1;queue[rear]=item;rear=(rear+1)%(T+1);return0;}intremove_item(int*item,intqueue[],intT){if(front==rear)return1;个人收集整理勿做商业用途2/10*item=queue[front];front=(front+1)%(T+1);return0;}intfindif(inta[],intb,intT){inti;for(i=1;i=T;i++){if(a[i]==b)returni;}return-1;}voidinsertintomem(inta[],intb,intn){if(memcount=P){a[memcount]=b;memcount++;}elsea[n]=b;}voidinitpage(intpage[]){inttemp,i;srand((unsigned)time(0));for(i=1;i=N;i++){temp=rand()%10;page[i]=temp;}}voidaddtoLink(structDuLNode*p,inte){structDuLNode*add;add=malloc(sizeof(structDuLNode));add-data=e;add-prior=p-prior;p-prior-next=add;add-next=p;p-prior=add;}个人收集整理勿做商业用途3/10intgetI(structDuLNode*p,inte){inti;structDuLNode*cd=p;for(i=1;;i++){cd=cd-next;if(cd-data==e)returni;if(cd==p)return-1;}}voiddeleLink(structDuLNode*p,inti,int*e){intn;structDuLNode*cd=p;for(n=1;n=i;n++)cd=cd-next;*e=cd-data;cd-prior-next=cd-next;cd-next-prior=cd-prior;free(cd);}voidremovebottom(structDuLNode*p,int*e){structDuLNode*cd=p-next;*e=cd-data;cd-next-prior=p;p-next=cd-next;free(cd);}intgetcount(inta[],intb,intn,intT){inti;for(i=n;i=T;i++){if(a[i]==b)return(i-n);}return-1;}voidgetreplacepage(inta[],intb[],inti,int*e){个人收集整理勿做商业用途4/10intt,c[P+1],temp,T,count=0,error[P+1];for(t=1;t=P;t++){if(getcount(a,b[t],i,N)!=-1)c[t]=getcount(a,b[t],i,N);else{error[++count]=b[t];}}if(count==0){temp=c[1];T=b[1];for(t=1;t=P;t++){if(c[t]temp){temp=c[t];T=b[t];}}*e=T;}else{for(t=1;t=count;t++){c[t]=findif(a,error[t],N);}temp=c[1];T=error[1];for(t=1;t=count;t++){if(c[t]temp){temp=c[t];T=error[t];}}*e=T;}}voidmain()个人收集整理勿做商业用途5/10{inti,temp,temp1,error=0,ErrorC[P];FILE*fp1,*fp2,*fp3;structDuLNode*p;p=(structDuLNode*)malloc(sizeof(structDuLNode));精品文档收集整理汇总p-prior=p-next=p;initpage(pageing);init(pmem,P);if((fp1=fopen(FIFO.txt,a))==NULL){printf(不能打开文件!\n);exit(1);}for(i=1;i=N;i++){fprintf(fp1,%d,pageing[i]);}fprintf(fp1,\n);for(i=1;i=N;i++){if(memcountP&&findif(pmem,pageing[i],P)==-1){remove_item(&temp,pageFIFO,N);insertintomem(pmem,pageing[i],findif(pmem,temp,P));精品文档收集整理汇总insert_item(pageing[i],pageFIFO,N);fprintf(fp1,%d被引用,%d被替换-出现第%d次错误!\n,pageing[i],temp,++error);精品文档收集整理汇总}else{if(memcount=P&&findif(pmem,pageing[i],P)==-1){insertintomem(pmem,pageing[i],memcount);insert_item(pageing[i],pageFIFO,N);fprintf(fp1,页中未满。%d被引用-出现第%d次错误!\n,pageing[i],++error);精品文档收集整理汇总}elsefprintf(fp1,%d已在页中-未出现错误。\n,pageing[i]);}}fclose(fp1);ErrorC[0]=error;memcount=1;个人收集整理勿做商业用途6/10error=0;init(pmem,P);if((fp2=fopen(LRU.txt,a))==NULL){printf(不能打开文件!\n);exit(1);}for(i=1;i=N;i++){fprintf(fp2,%d,pageing[i]);}fprintf(fp2,\n);for(i=1;i=N;i++){if(memcountP&&findif(pmem,pageing[i],P)==-1){removebottom(p,&temp);insertintomem(pmem,pageing[i],findif(pmem,temp,P));精品文档收集整理汇总if(getI(p,pageing[i])!=-1){deleLink(p,getI(p,pageing[i]),&temp1);}addtoLink(p,pageing[i]);fprintf(fp2,%d被引用,%d被替换-出现第%d次错误!\n,pageing[i],temp,++error);精品文档收集整理汇总}else{if(memcount=P&&findif(pmem,pageing[i],P)==-1){insertintomem(pmem,pageing[i],memcount);addtoLink(p,pageing[i]);fprintf(fp2,页中未满。%d被引用-出现第%d次错误!\n,p-prior-data,++error);精品文档收集整理汇总}else{deleLink(p,getI(p,pageing[i]),&temp1);addtoLink(p,pageing[i]);fprintf(fp2,%d已在页中-未出现错误。\n,pageing[i]);}}}fclose(fp2);个人收集整理勿做商业用途7/10ErrorC[1]=error;memcount=1;error=0;init(pmem,P);if((fp3=fopen(OPT.txt,a))==NULL){printf(不能打开文件!\n);exit(1);}for(i=1;i=N;i++){fprintf(fp3,%d,pageing[i]);}fprintf(fp3,\n);for(i=1;i=N;i++){if(memcountP&&findif(pmem,pageing[i],P)==-1){getreplacepage(pageing,pmem,i,&temp);insertintomem(pmem,pageing[i],findif(pmem,temp,P));精品文档收集整理汇总fprintf(fp3,%d被引用,%d被替换-出现第%d次错误!\n,pageing[i],temp,++error);精品文档收集整理汇总}else{if(memcount=P&&findif(pmem,pageing[i],P)==-1){insertintomem(pmem,pageing[i],memcount);fprintf(fp3,页中未满。%d被引用-出现第%d次错误!\n,pageing[i],++error);精品文档收集整理汇总}elsefprintf(fp3,%d已在页中-未出现错误。\n,pageing[i]);}}ErrorC[2]=error;printf(对于引用串序列:);for(i=1;i=N;i++){printf(%d,pageing[i]);}printf(\nFIFO算法出现%d次错误。\n,ErrorC[0]);printf(LRU算法出现%d次错误。\n,ErrorC[1]);printf(OPT算法出现%d次错误。\n,ErrorC[2]);个人收集整理勿做商业用途8/10}个人收集整理勿做商业用途9/10版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理。版权为张俭个人所有Thisarticleincludessomeparts,includingtext,pictures,anddesign.CopyrightisZhangJian'spersonalownership.用户可将本文的内容或服务用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯本网站及相关权利人的合法权利。除此以外,将本文任何内容或服务用于其他用途时,须征得本人及相关权利人的书面许可,并支付报酬。Usersmayusethecontentsorservicesofthisarticleforpersonalstudy,researchorappreciation,andothernon-commercialornon-profitpurposes,butatthesametime,
本文标题:动态页式存储管理模拟实现C语言
链接地址:https://www.777doc.com/doc-7167463 .html