页面置换算法实验报告_第1页
页面置换算法实验报告_第2页
页面置换算法实验报告_第3页
页面置换算法实验报告_第4页
页面置换算法实验报告_第5页
已阅读5页,还剩10页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机体系结构实验报告班级:计科0902班姓名:张华敏学号:0909090814

FIFU算法实验内容:编写一段程序来模拟页面置换算法中的FIFU算法的实现算法设计:设置一个产生随机数的函数rand()产生随机数来模拟程序所需访问的页面的标号,如果页面需要被访问则把页面中的一个标志位设为in表示他已经被调入内存,如果再次需要访问此页面是只需检查此页面的标志位是否为in就可判断它是否已经存在在内存中了,如果已经存在则可直接使用,如果不存在则需调入,在调入新页面是先检查内存空间是否已满,如果未满则直接调入,如果已经满了则需选择一个页面将其调出,调出时就把页面的标志位设为out。选择页面的规则是:将进入内存时间最久的页面调出去,为了达到这一目的,在页面中设置一个计数器,每当有新页面调入内存时则将内存中已经存在的页面计数器自动加一,调出页面时就选择那个计数器最大值的页面,调出后重新将计数器设为零。遇到的问题及解决方案:在做此实验时遇到了一些小问题,如在C语言中函数名定义为export()则会报错。在调用有返回值的函数是如果直接ints=use(pag)则会运行出错,要先分开写如:ints,s=use(pag).四,源代码头文件.cpp#include<stdio.h>#include<stdlib.h>intt;//全局变量,用来盛放rand()函数产生的随机数enumboolean{in,out};//定义一个枚举类型/////////如果把in,out换成true,false则会处错误typedefstruct{intnum;//页面编号charcontent;//页面内容enumbooleanflog;//判断此页面是否页调入,调入为true,否则为false;intcount;//页面计数器intusebit;//使用位,被使用过值为1,否则为0}page;FIFU.cpp#include<stdio.h>#include<stdlib.h>#include<time.h>#include"头文件.cpp"intcapacity=3;//设置内存最多可以容纳的页面数voidinitialize(pagep[])//初始化页面函数{for(inti=0;i<5;i++)//初始化页面,页面内容分别为小写字母abcde,计数器全部为0{p[i].num=i;p[i].content=i+97;p[i].flog=out;p[i].count=0;}}intuse(pagep[]){t=rand()%5;//产生一个0-5的随机数,if(p[t].flog==in){printf("\t\t%d页面命中\n",t);//for(inti=0;i<5;i++)//调入此页面后其他以在内存中存在的页面计数器加1//{//if(p[i].flog==in)//p[i].count++;//}return(1);}elsereturn(0);}voidimport(pagep[])//调入页面的函数{/*intt=rand()%5;//产生一个0-5的随机数,if(p[t].flog==in)printf("\t\t%d页面命中\n",t);*///if(p[t].flog==out)//如果此页面未被调入内存则立即调入p[t].flog=in;capacity--;//调入后内存空间减少一叶for(inti=0;i<5;i++)//调入此页面后其他以在内存中存在的页面计数器加1{if(p[i].flog==in&&p[i].num!=t)p[i].count++;}printf("页面%d被调入内存\n",t);}voidport(pagep[])//调出页面的函数,,,,,,,,,,,,,,,,,,,,,,如果函数名定义为export则处错误{intx=0,y;//x用来暂时存放计数器中的最大值,y存放此页面的页面号for(inti=0;i<5;i++)//寻找计数器值最大的页面{if(p[i].count>x){x=p[i].count;y=i;}}p[y].flog=out;//修改调入符号p[y].count=0;capacity++;//调入后内存空间增加一叶printf("\t\t\t页面%d被调出内存\n",y);}main(){ints;longt3,t1,t2;pagepag[5];//定义五个页面,,,,,,,,,,,,,,,,,,,,,如果这个定义在子函数之前那么不用通过参数子函数便可以直接访问t3=time(NULL);initialize(pag);do{t1=time(NULL);s=use(pag);//,,,,,,,,,,,,,,,,,,,,,,,,,,,如果这里写成ints=use(pag)则会运行出错//printf("s=%dcapacity=%d\n",s,capacity);if(capacity>0&&s==0)import(pag);else{if(capacity==0&&s==0){port(pag);import(pag);}}t2=time(NULL);while(t2-t1<1){t2=time(NULL);}}while(t2-t3<20);system("pause");} 五,测试结果:LFU算法一,实验内容:编写一段程序来模拟页面置换算法中的LFU算法的实现二,算法设计:设置一个产生随机数的函数rand()产生随机数来模拟程序所需访问的页面的标号,如果页面需要被访问则把页面中的一个标志位设为in表示他已经被调入内存,如果再次需要访问此页面是只需检查此页面的标志位是否为in就可判断它是否已经存在在内存中了,如果已经存在则可直接使用,如果不存在则需调入,在调入新页面是先检查内存空间是否已满,如果未满则直接调入,如果已经满了则需选择一个页面将其调出,调出时就把页面的标志位设为out。选择页面的规则是:将最近一段时间未被访问过的页面调出。为了达到这一目的在页面中设置一个标志位,如果页面在近期只要被访问过则将该标志位设置为1(默认为0),在选择调出页面时只需将标志位为0的页面调出即可。三,遇到的问题及解决方案:未遇到什么问题四,实验感悟:遇到问题后上网查资料和有效,及时查不到自己想要的但是也可从相关结果中获得启发给自己灵感来想到解决问题的方法.源代码FLU.cpp#include<stdio.h>#include<stdlib.h>#include<time.h>#include"头文件.cpp"intcapacity=3;//设置内存最多可以容纳的页面数voidinitialize(pagep[])//初始化页面函数{for(inti=0;i<5;i++)//初始化页面,页面内容分别为小写字母abcde,计数器全部为0{p[i].num=i;p[i].content=i+97;p[i].flog=out;p[i].count=0;p[i].usebit=0;}}intuse(pagep[]){t=rand()%5;//产生一个0-5的随机数,if(p[t].flog==in){printf("\t\t%d页面命中\n",t);p[t].usebit=1;//for(inti=0;i<5;i++)//调入此页面后其他以在内存中存在的页面计数器加1//{//if(p[i].flog==in)//p[i].count++;//}return(1);}elsereturn(0);}voidimport(pagep[])//调入页面的函数{intt=rand()%5;//产生一个0-5的随机数,//if(p[t].flog==in)//{//printf("\t\t%d页面命中\n",t);//p[t].usebit=1;//}//if(p[t].flog==out)//如果此页面未被调入内存则立即调入p[t].flog=in;capacity--;//调入后内存空间减少一叶for(inti=0;i<5;i++)//调入此页面后其他以在内存中存在的页面计数器加1{if(p[i].flog==in&&p[i].num!=t)p[i].count++;}printf("页面%d被调入内存\n",t);}voidport(pagep[])//调出页面的函数////////////////////////////////如果函数名定义为export则处错误{intx=0,y;//x用来暂时存放计数器中的最大值,y存放此页面的页面号intz=-1;//用来判断近期是否有未被访问过的页面intg=0;for(inti=0;i<5;i++)//寻找计数器值最大的页面{if(p[i].count>x){x=p[i].count;y=i;}}for(inti=0;i<5;i++){if(p[i].flog==in&&p[i].usebit==0){z=i;g++;}}if(z==-1||g==3)//如果所有页面均为1则按照FIFO算法置换页面//如果g=3则表明页面使用位全为零,此时也按照FIFO算法置换页面{p[y].flog=out;//修改调入符号p[y].count=0;capacity++;//调入后内存空间增加一叶p[y].usebit=0;for(inti=0;i<5;i++)//将所有页面置0p[i].usebit=0;printf("\t\t\t页面%d被调出内存\n",y);}else//如果有页面为0则将此页面置换出来{p[z].flog=out;//修改调入符号p[z].count=0;capacity++;//调入后内存空间增加一叶pri

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论