欢迎来到天天文库
浏览记录
ID:60790408
大小:7.85 MB
页数:10页
时间:2020-12-18
《操作系统内存分配与回收模拟实验.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、操作系统课程实验报告姓名学号系任课教师指导教师评阅教师实验地点综合楼B104励耘楼A206综合楼B102丽泽楼C304-1(请勾选实际实验地点)实验时间实验课表现出勤和个人表现Q1(15+15(组长评分)=30分)得分:实验总分(Q1+Q2+Q3+Q4)实验完成情况Q2(45分(组长与教师评分的加权平均))得分:实验编号与实验名称:第六次实验内存分配与回收模拟实验目的:通过使用位图跟踪内存使用情况,模拟和评价不同的内存分配算法;熟悉内存分配和回收。实验内容及要求(详见实验讲义与实验指导书):实验要求:1)要求用你熟悉的程序设计语言编写和
2、调试一个内存分配和回收模拟程序;要求在主函数中测试。2)实验报告中必须包括:设计思想、数据定义(包括详细说明)、处理流程(详细算法描述和算法流程图)、源代码、运行结果、体会等部分。3)必须模拟该4种内存分配算法:firstfit,nextfit,bestfit和worstfit中的至少2种。4)需显示出每次分配和回收后的空闲分区链的情况来以及内存占用情况图,并统计各种算法产生的碎片空闲区(小于3个单元(unit)的空闲区)数。5)计算2个性能参数:碎片数、平均搜索空闲区次数实验内容:假设内存容量为256KB,并且划分成2KB大小的块,也
3、即每个内存单元为2KB。一个进程所需要的内存为3到10个单元。同时假设一个作业在运行过程中所需内存的大小不变。模拟包括3部分:1)实现特定的内存分配算法2)实现内存回收模拟3)每种内存分配策略对应的碎片数统计实验用到的软件(:)C-FREE实验内容及关键步骤(代码)Q3(15分)得分:(1)首次适应算法实现从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许多小的空
4、闲区,在高地址空间保留大的空闲区。(2)最佳适应算法实现它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。数据结构体分析(3)内存回收将释放作业所在内存块的状态改为空闲状态,删除其作业名,设置为空。并判断该空闲块是否与其他空闲块相连,若释放的内存空间与空闲块相连时,则合并为同一个空闲块,同时修改分区大小及起始地址。首次适配算法流程图:最佳适配算法流程图:内存回收:#include5、o.h>#include#include#defineM20#defineN101#definemax_size128inti=0,choose;intid=0,size=0,countOfEmpty=1,countOfNotEmpty=0,num=1;intTime[N]={1};//进程分配搜索空闲区次数structEmpty{intstart;intsize;intyesornot;}empty[M];structnot_Empty{intid;intsize;intstart;inty6、esornot;}not_empty[N];intcmp(constvoid*p,constvoid*q){intc=(*(structEmpty*)p).start-(*(structEmpty*)q).start;inta=(*(structEmpty*)p).yesornot-(*(structEmpty*)q).yesornot;if(a>0)return-1;elseif(a==0){if(c>0)return1;elsereturn-1;}elsereturn1;}intcmp1(constvoid*p,constvoid*7、q){intc=(*(structnot_Empty*)p).start-(*(structnot_Empty*)q).start;inta=(*(structnot_Empty*)p).yesornot-(*(structnot_Empty*)q).yesornot;if(a>0)return-1;elseif(a==0){if(c>0)return1;elsereturn-1;}elsereturn1;}intcmp2(constvoid*p,constvoid*q){intc=(*(structEmpty*)p).size-(*(8、structEmpty*)q).size;inta=(*(structEmpty*)p).yesornot-(*(structEmpty*)q).yesornot;if(a>0)return-1;elsei
5、o.h>#include#include#defineM20#defineN101#definemax_size128inti=0,choose;intid=0,size=0,countOfEmpty=1,countOfNotEmpty=0,num=1;intTime[N]={1};//进程分配搜索空闲区次数structEmpty{intstart;intsize;intyesornot;}empty[M];structnot_Empty{intid;intsize;intstart;inty
6、esornot;}not_empty[N];intcmp(constvoid*p,constvoid*q){intc=(*(structEmpty*)p).start-(*(structEmpty*)q).start;inta=(*(structEmpty*)p).yesornot-(*(structEmpty*)q).yesornot;if(a>0)return-1;elseif(a==0){if(c>0)return1;elsereturn-1;}elsereturn1;}intcmp1(constvoid*p,constvoid*
7、q){intc=(*(structnot_Empty*)p).start-(*(structnot_Empty*)q).start;inta=(*(structnot_Empty*)p).yesornot-(*(structnot_Empty*)q).yesornot;if(a>0)return-1;elseif(a==0){if(c>0)return1;elsereturn-1;}elsereturn1;}intcmp2(constvoid*p,constvoid*q){intc=(*(structEmpty*)p).size-(*(
8、structEmpty*)q).size;inta=(*(structEmpty*)p).yesornot-(*(structEmpty*)q).yesornot;if(a>0)return-1;elsei
此文档下载收益归作者所有