欢迎来到天天文库
浏览记录
ID:15720594
大小:295.50 KB
页数:14页
时间:2018-08-05
《实验报告 可变分区 主存分配回收》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、操作系统实验报告设计题目在可变分区管理方式下采用最先适应算法实现主存分配和实现主存回收一、设计内容主存储器空间的分配和回收。二、设计目的一个好的计算机系统不仅要有一个足够容量的、存取速度高的、稳定可靠的主存储器,而且要能合理地分配和使用这些存储空间。当用户提出申请存储器空间时,存储管理必须根据申请者的要求,按一定的策略分析主存空间的使用情况,找出足够的空闲区域分配给申请者。当作业撤离或主动归还主存资源时,则存储管理要收回作业占用的主存空间或归还部分主存空间。主存的分配和回收的实现虽与主存储器的管理方式有关的,通过本
2、实习帮助学生理解在不同的存储管理方式下应怎样实现主存空间的分配和回收。三、设计过程1、数据结构设计#definem10#definen10#defineQ1024structfree{intad;intlen;charstate;}fr[m];structuse{intad;intlen;charstate;}us[10];structfree0{intad;intlen;charstate;}f0[1];2、算法设计voidcreatf()//空闲分区表初始化{inti;for(i=0;i3、].ad=0;fr[i].len=0;fr[i].state='M';}}voidinsertu(inti){intj,p;p=0;printf("请输入第%d个作业的长度:",i);scanf("%d",&us[i].len);us[i].ad=0;us[i].state='U';j=0;p=0;if(fr[0].ad==0)printf("所有空闲区已经全部分配完毕!");while(fr[j].state!='M'&&p==0){if(us[i].len4、=fr[j].ad;fr[j].ad=us[i].len+fr[j].ad;fr[j].len=fr[j].len-us[i].len;p=1;break;}if(us[i].len==fr[j].len){fr[j].ad=0;fr[j].len=0;fr[j].state='M';sort1();p=1;break;}j++;}if(p==0){us[i].state='N';printf("没有适当的空间可以插入!");}if(p!=0){printf("第%d个作业分配空间后,空闲表为:",5、i);disp();}}voidsort(){inti,q,j;i=0;q=0;if(fr[0].ad!=0){do{if(f0[0].ad>fr[i].ad)i=i+1;elseq=1;}while(fr[i].state!='M'&&q==0);for(j=m-1;j>i;j--){fr[j].ad=fr[j-1].ad;fr[j].len=fr[j-1].len;fr[j].state=fr[j-1].state;}fr[i].ad=f0[0].ad;fr[i].len=f0[0].len;fr[i].sta6、te=f0[0].state;}if(fr[0].ad==0){fr[0].ad=f0[0].ad;fr[0].len=f0[0].len;fr[0].state=f0[0].state;}}voidsort1(){inti;i=0;while(fr[i].state!='M'){i++;}if(fr[i+1].state!='M'){do{fr[i].ad=fr[i+1].ad;fr[i].len=fr[i+1].len;fr[i].state=fr[i+1].state;i++;}while(fr[i+1].s7、tate!='M');fr[i].ad=0;fr[i].len=0;fr[i].state='M';}}voiddisp(){inti;printf("taddressttlengthttstate");for(i=0;i8、d);printf("要结束作业的信息为:");printf("taddressttlengthttstate");printf("t%dtt%dtt%c",us[d].ad,us[d].len,us[d].state);if(us[d].state=='N')//如果要结束作业的状态为'N',说明此作业没有被分配
3、].ad=0;fr[i].len=0;fr[i].state='M';}}voidinsertu(inti){intj,p;p=0;printf("请输入第%d个作业的长度:",i);scanf("%d",&us[i].len);us[i].ad=0;us[i].state='U';j=0;p=0;if(fr[0].ad==0)printf("所有空闲区已经全部分配完毕!");while(fr[j].state!='M'&&p==0){if(us[i].len4、=fr[j].ad;fr[j].ad=us[i].len+fr[j].ad;fr[j].len=fr[j].len-us[i].len;p=1;break;}if(us[i].len==fr[j].len){fr[j].ad=0;fr[j].len=0;fr[j].state='M';sort1();p=1;break;}j++;}if(p==0){us[i].state='N';printf("没有适当的空间可以插入!");}if(p!=0){printf("第%d个作业分配空间后,空闲表为:",5、i);disp();}}voidsort(){inti,q,j;i=0;q=0;if(fr[0].ad!=0){do{if(f0[0].ad>fr[i].ad)i=i+1;elseq=1;}while(fr[i].state!='M'&&q==0);for(j=m-1;j>i;j--){fr[j].ad=fr[j-1].ad;fr[j].len=fr[j-1].len;fr[j].state=fr[j-1].state;}fr[i].ad=f0[0].ad;fr[i].len=f0[0].len;fr[i].sta6、te=f0[0].state;}if(fr[0].ad==0){fr[0].ad=f0[0].ad;fr[0].len=f0[0].len;fr[0].state=f0[0].state;}}voidsort1(){inti;i=0;while(fr[i].state!='M'){i++;}if(fr[i+1].state!='M'){do{fr[i].ad=fr[i+1].ad;fr[i].len=fr[i+1].len;fr[i].state=fr[i+1].state;i++;}while(fr[i+1].s7、tate!='M');fr[i].ad=0;fr[i].len=0;fr[i].state='M';}}voiddisp(){inti;printf("taddressttlengthttstate");for(i=0;i8、d);printf("要结束作业的信息为:");printf("taddressttlengthttstate");printf("t%dtt%dtt%c",us[d].ad,us[d].len,us[d].state);if(us[d].state=='N')//如果要结束作业的状态为'N',说明此作业没有被分配
4、=fr[j].ad;fr[j].ad=us[i].len+fr[j].ad;fr[j].len=fr[j].len-us[i].len;p=1;break;}if(us[i].len==fr[j].len){fr[j].ad=0;fr[j].len=0;fr[j].state='M';sort1();p=1;break;}j++;}if(p==0){us[i].state='N';printf("没有适当的空间可以插入!");}if(p!=0){printf("第%d个作业分配空间后,空闲表为:",
5、i);disp();}}voidsort(){inti,q,j;i=0;q=0;if(fr[0].ad!=0){do{if(f0[0].ad>fr[i].ad)i=i+1;elseq=1;}while(fr[i].state!='M'&&q==0);for(j=m-1;j>i;j--){fr[j].ad=fr[j-1].ad;fr[j].len=fr[j-1].len;fr[j].state=fr[j-1].state;}fr[i].ad=f0[0].ad;fr[i].len=f0[0].len;fr[i].sta
6、te=f0[0].state;}if(fr[0].ad==0){fr[0].ad=f0[0].ad;fr[0].len=f0[0].len;fr[0].state=f0[0].state;}}voidsort1(){inti;i=0;while(fr[i].state!='M'){i++;}if(fr[i+1].state!='M'){do{fr[i].ad=fr[i+1].ad;fr[i].len=fr[i+1].len;fr[i].state=fr[i+1].state;i++;}while(fr[i+1].s
7、tate!='M');fr[i].ad=0;fr[i].len=0;fr[i].state='M';}}voiddisp(){inti;printf("taddressttlengthttstate");for(i=0;i8、d);printf("要结束作业的信息为:");printf("taddressttlengthttstate");printf("t%dtt%dtt%c",us[d].ad,us[d].len,us[d].state);if(us[d].state=='N')//如果要结束作业的状态为'N',说明此作业没有被分配
8、d);printf("要结束作业的信息为:");printf("taddressttlengthttstate");printf("t%dtt%dtt%c",us[d].ad,us[d].len,us[d].state);if(us[d].state=='N')//如果要结束作业的状态为'N',说明此作业没有被分配
此文档下载收益归作者所有