模拟可变分区内存管理的内存分配策略内容摘要:

l。 getch()。 //按任意键 fflush(stdin)。 //清空缓冲区 } void headmost() //最先适应分配算法 { char job_name[20]。 int job_length。 int job_time。 int job_timer。 int i,j,flag,t。 cout请输入新申请内存空间的作业名 :。 cinjob_name。 cout请输入新申 请内存空间的空间大小 :。 cinjob_length。 while(1) 第 15 页 共 33 页 { cout请输入新申请内存进入的时间 :。 cinjob_time。 cout请输入进程运行退出的时间 :。 cinjob_timer。 if(job_timer=job_time) { cout你输入的时间错误,请重新输入 !!endlendl。 } else break。 } flag=0。 for(i=0。 ifree_quantity。 i++)//判断有没有长度够的自由块 { if(frees[i].length=job_length)//有长度够的自由块 { flag=1。 } } if(flag==0) { coutendlSorry,当前没有能满足你申请长度的空闲内存 ,请稍候再试 endl。 } else//有长度够的自由块的情况 { t=0。 i=0。 while(t==0) 第 16 页 共 33 页 { if(frees[i].length=job_length) { t=1。 } i++。 } //************把输入的值赋值到运行块中 i。 occupys[occupy_quantity].start=frees[i].start。 strcpy(occupys[occupy_quantity].tag,job_name)。 occupys[occupy_quantity].length=job_length。 occupys[occupy_quantity].time=job_time。 occupys[occupy_quantity].timer=job_timer。 occupy_quantity++。 if(frees[i].lengthjob_length) { frees[i].start+=job_length。 //自由块的开始地址增加 frees[i].length=job_length。 //自由块的长度减少 } else { for(j=i。 jfree_quantity1。 j++) { frees[j]=frees[j+1]。 } free_quantity。 cout内存空间分配成功 :)!!!!endl。 第 17 页 共 33 页 } } coutendl按任意键继续 ......endl。 getch()。 fflush(stdin)。 } void nextTime() //下次适配算法 { char job_name[20]。 int job_length。 int job_time。 int job_timer。 int i,j,flag,t。 cout请输入新申请内存空间的作业名 :。 cinjob_name。 cout请输入新申请内存空间的空间大小 :。 cinjob_length。 while(1) { cout请输入新申请内存进入的时间 :。 cinjob_time。 cout请输入进程运行退出的时间 :。 cinjob_timer。 if(job_timer=job_time) { cout你输入的时间错误,请重新输入 !!endlendl。 } else break。 第 18 页 共 33 页 } flag=0。 for(i=0。 ifree_quantity。 i++) { if(frees[i].length=job_length) { flag=1。 } } if(flag==0) { coutendlSorry,当前没有能满足你申请长度的空闲内存 ,请稍候再试 endl。 } else { t=0。 i=0。 while(1) { if(frees[i].length=job_length) { t++。 if(2==t) break。 } i++。 } // i。 occupys[occupy_quantity].start=frees[i].start。 第 19 页 共 33 页 strcpy(occupys[occupy_quantity].tag,job_name)。 occupys[occupy_quantity].length=job_length。 occupys[occupy_quantity].time=job_time。 occupys[occupy_quantity].timer=job_timer。 occupy_quantity++。 if(frees[i].lengthjob_length) { frees[i].start+=job_length。 frees[i].length=job_length。 } else { for(j=i。 jfree_quantity1。 j++) { frees[j]=frees[j+1]。 } free_quantity。 cout内存空间分配成功 :)!!!!!endl。 } } coutendl按任意键继续 ......endl。 getch()。 fflush(stdin)。 } void optimization() //最优适应分配算法 { char job_name[20]。 int job_length。 第 20 页 共 33 页 int job_time。 int job_timer。 int i,j,flag,t。 cout请输入新申请内存空间的作业名 :。 cinjob_name。 cout请输入新申请内存空间的空间大小 :。 cinjob_length。 while(1) { cout请输入新申请内存进入的时间 :。 cinjob_time。 cout请输入进程运行退出的时间 :。 cinjob_timer。 if(job_timer=job_time) { cout你输入的时间错误,请重新输入 !!endlendl。 } else break。 } flag=0。 for(i=0。 ifree_quantity。 i++) { if(frees[i].length=job_length) { flag=1。 } } if(flag==0) 第 21 页 共 33 页 { coutendlSorry,当前没有能满足你申请长度的空闲内存 ,请稍候再试 endl。 } else { t=0。 i=0。 while(t==0) { if(frees[i].length=job_length) { t=1。 } i++。 } i。 for(j=0。 jfree_quantity。 j++) { if((frees[j].length=job_length)amp。 amp。 (frees[j].lengthfrees[i].length)) { i=j。 } } occupys[occupy_quantity].start=frees[i].start。 strcpy(occupys[occupy_quantity].tag,job_name)。 occupys[occupy_quantity].length=job_length。 occupys[occupy。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。