资源预览内容
第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
亲,该文档总共8页全部预览完了,如果喜欢就下载吧!
资源描述
实验三-请求分页存储器的管理调度算法59063#include #include #include #include #define addressnum 32FILE *fp;int exchange(int &a,int &b)int t;t=a;a=b;b=t;return 0;int Product_Address(int (&address)100)/产生含50%的随机数值在 之间的地址流;/int addressaddressnum=0;int i; srand(time(NULL);for(i=0;iaddressnum;i+)if( (i%4=1) | (i%4=2) )addressi = rand()+1;/*else if(i%4=2)addressi=random(32768)+1;*/for(i=0;iaddressnum;i+)if(i%4=0)addressi=addressi+1+1001;else if(i%4=3)addressi=addressi-1+1001;return 0;printf(产生的地址流如下n);fprintf(fp,产生的地址流如下n);for(i=0;iaddressnum;i+)printf(%d ,addressi);fprintf(fp,%d ,addressi);int Translate_to_Pages(int address100,int (&page)100,int PageSize,int &PageNum)/把地址流根据页面大小和页面数转化为页面流int i;/int pageaddressnum=0;PageNum=32/PageSize;for(i=0;iaddressnum;i+)pagei=(addressi)/(1024*PageSize);printf(产生的页面流如下n);fprintf(fp,产生的页面流如下n);for(i=0;iaddressnum;i+)printf(%d ,pagei);fprintf(fp,%d ,pagei); return 0;int FIFO(int page,int memory,int PageNum)/先进先出页面调度算法/int memory32=0;int i,j,k,breaknum=0;double rate;printf(n);for(i=0;iaddressnum;i+)for(j=0;j=0;k-)memoryk=memoryk-1;memory0=pagei;printf(x);fprintf(fp,x);rate=(double)breaknum/(double)addressnum;rate=1.0-rate;printf(n);printf(本次FIFO算法命中率为%lfn,rate);fprintf(fp,本次FIFO算法命中率为%lfn,rate);return 0;int LRU (int page,int memory,int PageNum)/不是设的全局变量啊,为什么会改变数组值啊?/最近最少使用淘汰算法int i,j,breaknum=0;double rate;printf(n);/*for(i=0;iPageNum;i+)breaknum+;printf(x);fprintf(fp,x);*/for(i=0;iPageNum;i+)memoryi=-1;for(i=0;iaddressnum;i+)for(j=0;jPageNum;j+)if(memoryj=pagei)/找到内存中有所需页面exchange(memory0,memoryj);/始终使memory按使用次数排序printf(o);fprintf(fp,o);break;if(j=PageNum)/内存中无现成页面,需要从虚存中调度,此时淘汰memory数组中最后一个元素即可memoryPageNum-1=pagei;breaknum+;printf(x);fprintf(fp,x);rate=(double)breaknum/(double)addressnum;rate=1.000-rate;printf(n);printf(本次LRU算法命中率为%lfn,rate);fprintf(fp,本次LRU算法命中率为%lfn,rate);return 0;int Caculate_distance(int memory,int page,int PageNum,int breakpoint)/计算每个页面距离下次内存中再次出现的距离,并淘汰最远的一个int dismemory32=0;int i,j,k,distance=0,Max=0;for(i=0;iPageNum;i+)for(j=breakpoint;jaddressnum;j+)distance+;if(pagej=memoryi)break;dismemoryi=distance;for(k=0;kMax) Max=dismemoryk;for(k=0;kPageNum;k+)if(dismemoryk=Max) break;return k;int OPT(int page,int memory,int PageNum)/最佳适配算法int i,j,breaknum=0,dis=0,breakpoint=0;double rate;for(i=0;iPageNum;i+)memoryi=-1;for(i=0;iaddressnum;i+)for(j=0;jPageNum;j+)if(memoryj=pagei)/如果该页面在内存中,则不作任何改变printf(o);fprintf(fp,o);break;if(j=PageNum)/*若该页面不在内存中,扫描内存中每个页面, 计算每个页面距离下次内存中再次出现的距离,并淘汰最远的一个*/breakpoint=i;dis=Caculate_distance(memory,page,PageNum,breakpoint);memorydis=pagei;breaknum+;printf(x);fprintf(fp,x);rate=(double)breaknum/(double)addressnum;rate=1.0-rate;printf(n);printf(本次OPT算法命中率为%lfn,rate);fprintf(fp,本次OPT算法命中率为%lfn,rate);return 0;int main ()int i;int PageNum=0,PageSize=0;int address100=0,page100=0,memory32=0;for(i=0;i32;i+) memoryi=-1;if( ( fp=fopen(data.txt,w) )=NULL )printf(can not open file!);/printf(请输入地址流的数目addressnum=);/scanf(%d,&addressnum);Product_Address(address);while(1)printf(请输入页面大小PageSize=);scanf(%d,&PageSize);Translate_to_Pages(address,page,PageSize,PageNum);printf(n本组数据的命中率比较);FIFO(page,memory,PageNum);LRU(page,memory,PageNum);OPT(page,memory,PageNum);fclose(fp);return 0;
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号