实验三-请求分页存储器的管理调度算法_第1页
实验三-请求分页存储器的管理调度算法_第2页
实验三-请求分页存储器的管理调度算法_第3页
实验三-请求分页存储器的管理调度算法_第4页
实验三-请求分页存储器的管理调度算法_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

#include<stdio.h>#include<stdlib.h>#include<math.h>#include<time.h>#defineaddressnum32FILE*fp 。intexchange(int&a,int&b>{intt 。t=a。a=b。b=t。return0

。}intProduct_Address(int(&address>[100]>{// 产生含50%地随机数值在 之间地地址流;//intaddress[addressnum]={0} 。inti

。srand(time(NULL>>

。for(i=0 。i<addressnum。i++>{if((i%4==1>||(i%4==2>>{address[i]=rand(>+1 。}/*elseif(i%4==2>{address[i]=random(32768>+1 。}*/}for(i=0 。i<addressnum。i++>{if(i%4==0>{address[i]=address[i+1]+1001 。}elseif(i%4==3>{address[i]=address[i-1]+1001

。}}return0printf("fprintf(fp,"

。产生地地址流如下 \n">产生地地址流如下

。\n">

。for(i=0

。i<addressnum

。i++>{printf("%d",address[i]>

。fprintf(fp,"%d",address[i]>

。}}int

Translate_to_Pages(int

address[100],int

(&page>[100],int

PageSize,int&PageNum>b5E2RGbCAP{// 把地址流根据页面大小和页面数转化为页面流inti

。//intpage[addressnum]={0}

。PageNum=32/PageSize。for(i=0 。i<addressnum。i++>{page[i]=(address[i]>/(1024*PageSize> 。}printf(" 产生地页面流如下 \n">。fprintf(fp," 产生地页面流如下 \n">。for(i=0 。i<addressnum。i++>{printf("%d",page[i]>

。fprintf(fp,"%d",page[i]>

。}return0

。}intFIFO(intpage[],intmemory[],intPageNum>{// 先进先出页面调度算法//

intmemory[32]={0}

。inti,j,k,breaknum=0

。doublerateprintf("\n">

。。for(i=0 。i<addressnum。i++>{for(j=0 。j<PageNum。j++>{if(page[i]==memory[j]>{printf("o"> 。fprintf(fp,"o"> 。break。}}if(j==PageNum>{breaknum++。for(k=PageNum-1。k>=0。k-->{memory[k]=memory[k-1] 。}memory[0]=page[i] 。printf("x"> 。fprintf(fp,"x"> 。}}rate=(double>breaknum/(double>addressnum 。rate=1.0-rate 。printf("\n"> 。printf("fprintf(fp,"

本次

FIFO算法命中率为%lf\n",rate> 。本次FIFO算法命中率为 %lf\n",rate>

。return0

。}intLRU(intpage[],intmemory[],intPageNum>//

不是设地全局变量啊

,为什么会改变数组值啊? p1EanqFDPw{// 最近最少使用淘汰算法inti,j,breaknum=0

。doublerateprintf("\n">

。。/*

for(i=0{

。i<PageNum。i++>breaknum++。printf("x"> 。fprintf(fp,"x"> 。}*/for(i=0 。i<PageNum。i++>memory[i]=-1 。for(i=0 。i<addressnum。i++>{for(j=0 。j<PageNum。j++>{if(memory[j]==page[i]>{// 找到内存中有所需页面exchange(memory[0],memory[j]> 。//始终使 memory[]按使用次数排序printf("o"> 。fprintf(fp,"o"> 。break。}}if(j==PageNum>{// 内存中无现成页面 ,需要从虚存中调度 ,此时淘汰 memory[]数组中最后一个元素即可memory[PageNum-1]=page[i] 。breaknum++。printf("x"> 。fprintf(fp,"x"> 。}}rate=(double>breaknum/(double>addressnum 。rate=1.000-rate 。printf("\n"> 。printf("fprintf(fp,"

本次

LRU算法命中率为 %lf\n",rate> 。本次LRU算法命中率为%lf\n",rate>

。return0

。}int

Caculate_distance(int

memory[],int

page[],int

PageNum,intbreakpoint> DXDiTa9E3d{// 计算每个页面距离下次内存中再次出现地距离 ,并淘汰最远地一个intdismemory[32]={0}

。inti,j,k,distance=0,Max=0

。for(i=0 。i<PageNum。i++>{for(j=breakpoint 。j<addressnum。j++>{distance++ 。if(page[j]==memory[i]>{break。}}dismemory[i]=distance 。}for(k=0 。k<PageNum。k++>{if(dismemory[k]>Max>Max=dismemory[k]。}for(k=0 。k<PageNum。k++>{if(dismemory[k]==Max>break。}returnk

。}intOPT(intpage[],intmemory[],intPageNum>{// 最佳适配算法inti,j,breaknum=0,dis=0,breakpoint=0doublerate 。for(i=0 。i<PageNum。i++>memory[i]=-1 。

。for(i=0

。i<addressnum

。i++>{for(j=0{

。j<PageNum。j++>if(memory[j]==page[i]>// 如果该页面在内存中 ,则不作任何改变{printf("o"> 。fprintf(fp,"o"> 。break。}}if(j==PageNum>{/*若该页面不在内存中 ,扫描内存中每个页面 ,计算每个页面距离下次内存中再次出现地距离 ,并淘汰最远地一个 */breakpoint=i 。dis=Caculate_distance(memory,page,PageNum,breakpoint> 。RTCrpUDGiTmemory[dis]=page[i] 。breaknum++。printf("x"> 。fprintf(fp,"x"> 。}}rate=(double>breaknum/(double>addressnum 。rate=1.0-rate 。printf("\n"> 。printf("fprintf(fp,"

本次

OPT算法命中率为 %lf\n",rate> 。本次OPT算法命中率为%lf\n",rate>

。return0

。}intmain(>{inti 。intPageNum=0,PageSize=0 。intaddress[100]={0},page[100]={0},memory[32]={0}

。for(i=0。i<32。i++>memory[i]=-1if((fp=fopen("data.txt","w">>==NULL>{

。printf("cannotopenfile!">

。//

}printf(" 请输入地址流地数目

addressnum=">。scanf("%d",&addressnum>。Product_Address(address>。while(1>{printf(" 请输入页面大小 PageSize=">。sc

温馨提示

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

评论

0/150

提交评论