收藏 分享(赏)

操作系统第六次 内存分配与回收模拟.doc

上传人:精品资料 文档编号:8216430 上传时间:2019-06-15 格式:DOC 页数:8 大小:254.97KB
下载 相关 举报
操作系统第六次 内存分配与回收模拟.doc_第1页
第1页 / 共8页
操作系统第六次 内存分配与回收模拟.doc_第2页
第2页 / 共8页
操作系统第六次 内存分配与回收模拟.doc_第3页
第3页 / 共8页
操作系统第六次 内存分配与回收模拟.doc_第4页
第4页 / 共8页
操作系统第六次 内存分配与回收模拟.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、操作系统课程实验报告姓名 学号 系 计算机任课教师 指导教师 评阅教师实验地点 丽泽楼 C304-2 丽泽楼 C304-1 (请勾选实际实验地点)实验时间出勤和个人表现 Q1(15+15(组长评分)=30 分) 得分:实验课表现 实验完成情况 Q2(45分(组长评分,教师根据实际情况微调) 得分:实验总分(Q1+Q2+Q3+Q4)实验编号与实验名称:第六次实验 内存分配与回收模拟实验目的:通过使用位图跟踪内存使用情况,模拟和评价不同的内存分配算法;熟悉内存分配和回收。实验内容及要求(详见实验讲义与实验指导书):1)要求用你熟悉的程序设计语言编写和调试一个内存分配和回收模拟程序;要求在主函数中测

2、试。2)实验报告中必须包括:设计思想、数据定义(包括详细说明) 、处理流程(详细算法描述和算法流程图) 、源代码、运行结果、体会等部分。3)必须模拟该 4 种内存分配算法:first fit,next fit ,best fit 和 worst fit 中的至少 2 种。4) 需显示出每次分配和回收后的空闲分区链的情况来以及内存占用情况图,并统计各种算法产生的碎片空闲区(小于 3 个单元(unit)的空闲区 )数。5)计算 2 个性能参数:碎片数、平均搜索空闲区次数实验内容及关键步骤(流程图)First fit next fit实验内容及关键步骤(代码)Q3(15 分)(1)First fit

3、 代码 运行结果#includestruct not_empty/已分配分区表char process_id;/作业标志符,此处采用-255的整数 int address_of_start;/起始地址int size_of_notempty;/作业请求的内存单元数int delete_or_not; /进程是否被创建,是否 Not_Empty20;void printnow(char ram)/输出内存分配情况 int i;for(i=1;i=0/作业标志符,此处采用-255的整数 int address_of_start;/起始地址int size_of_notempty;/作业请求的内存单

4、元数int delete_or_not; /进程是否被创建,是否 Not_Empty20; void printnow(char ram)/输出内存分配情况 int i;for(i=1;i=0if(i-1-flag3)can_not_use+;flag=0;printf(“内存空闲碎片数为:%dn“,can_not_use);int main()char ram129,id,del;int flag=0,i,j,cos,size,what;int next=1;int cancreat_ornot=0;for(i=0;i20;i+) Not_Emptyi.delete_or_not=1;for

5、(i=1;i=128;i+)rami=o;printf(“1,分配; 2,回收;n3,内存占用情况图; 4,退出;n“); while(scanf(“%d“,getchar();scanf(“%c %d“,/输入进程id和所需空间if(Not_Emptyid-48.delete_or_not=0)/判断进程是否已经被创建printf(“进程已存在!n“); else for(i=next;i=128;i+)if(flag=0)if(rami=o)/判断该内存单元是否为空,是则标记第一个空的内存单元位置,已知连续的空闲单元为flag=i;size=1;elseif(size=cos)/如果连续的

6、内存单元等于进程所需内存大小,则记录相应信息/ printf(“id:%dn“,id-48);Not_Emptyid-48.process_id=id;Not_Emptyid-48.address_of_start=flag;Not_Emptyid-48.size_of_notempty=cos;Not_Emptyid-48.delete_or_not=0;ramflag=id;cancreat_ornot=1;/标记进程分配内存成功/used_total+;for(j=flag+1;jflag+size;j+)ramj=x;/把已分配的内存标记为x next=flag+size;break;

7、if(rami=o)size+;else flag=0;if(i=129)for(i=1;inext;i+)if(flag=0)if(rami=o)flag=i;size=1;elseif(size=cos)/ printf(“id:%dn“,id-48);Not_Emptyid-48.process_id=id;Not_Emptyid-48.address_of_start=flag;Not_Emptyid-48.size_of_notempty=cos;Not_Emptyid-48.delete_or_not=0;ramflag=id;cancreat_ornot=1;/used_tota

8、l+;for(j=flag+1;jflag+size;j+)ramj=x;next=flag+size;flag=0;break;if(rami=o)size+;else flag=0;flag=0;if(cancreat_ornot=0)printf(“没有足够的内存空间!n“);elsecancreat_ornot=0;printnow(ram);printfree(ram); else if(what=2)printf(“请输入要删除的进程号n“);getchar();scanf(“%c“, if(Not_Emptydel-48.process_id=del)if(Not_Emptyde

9、l-48.delete_or_not=0)/确认进程是否已销毁过for(j=Not_Emptydel-48.address_of_start;jNot_Emptydel-48.address_of_start+Not_Emptydel-48.size_of_notempty;j+)ramj=o;printnow(ram);printfree(ram);Not_Emptydel-48.delete_or_not=1;/标记已经销毁elseprintf(“进程不存在或已销毁!n“); if(what=3)printnow(ram);printf(“1,分配; 2,回收;n3,内存占用情况图; 4,

10、退出;n“); 实验过程中遇到的问题解决办法与实验体会 Q4(10 分) 得分:代码没有实现搜索平均空闲区间的功能,因为这功能的描述不足够清楚,但是感觉影响不大。构思了两天,用了将近一小时就完成了两个算法。(1)first fit 算法。使用该算法进行内存分配时,从空闲分区链首开始查找,直至找到一个能满足其大小要求的空闲分区为止。然后再按照作业的大小,从该分区中划出一块内存分配给请求者,余下的空闲分区仍留在空闲分区链中。该算法倾向于使用内存中低地址部分的空闲分区,在高地址部分的空闲分区很少被利用,从而保留了高地址部分的大空闲区。显然为以后到达的大作业分配大的内 存空间创造了条件。缺点在于低址部分不断被划分,留下许多难以利用、很小的空闲区,而每次查找又都从低址部分开始,这无疑会增加查找的开销。(2)next fit 算法。该算法是由首次适应算法演变而成的。在为进程分配内存空间时,不再每次从链首开始查找,而是从上次找到的空闲分区开始查找,直至 找到一个能满足要求的空闲分区,并从中划出一块来分给作业。该算法能使空闲中的内存分区分布得更加均匀,但将会缺乏大的空闲分区。评阅教师特殊评语:评阅教师: 日 期:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报