欢迎来到天天文库
浏览记录
ID:46504485
大小:88.50 KB
页数:4页
时间:2019-11-24
《实验五可变分区管理》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验五可变分区管理一、实验目的熟悉主存的分配与回收。理解在不同的存储管理方式下,如何实现主存空间的分配与回收。掌握动态分区分配方式中的数据结构和分配算法及动态分区存储管理方式及其实现过程。二、实验环境硬件:一台计算机软件:装Linux操作系统,文本编辑器,终端窗口三、实验原理循环首次适应算法在该算法中,把主存中所有空闲区按其物理地址递增的次序排列。在为作业分配存储空间时,从上次找到的空闲分区的下一个空闲分区开始查找,直到找到第一个能满足要求的空闲区,从屮划岀与请求的人小相等的存储空间分配给作业,余下的空闲区仍留在空闲区表或链中
2、。四、实验步骤1、流程图1、2、相关数据结构的说明(1)内存控制块structnode{intflag;〃分区状态,“0”表示空闲,“1”表示被使用intlength;〃作业需要内存intntime;〃作业需耍时间structnode*next;structnode*prie;)(2)作业进程创建voidaddjob(){intlength;structnode*newjob;system("cls");printf(z,t添加新作业");printf(,z请输入作业所需内存大小:");scanf("%d",&len
3、gth);if(lcngth〉mcmory){printf(/zt作业过大,无法创建该作业!");exit(0);}else{newjob=(structnode*)malloc(sizeof(structnode));newjob->length=length;printff请输入作业运行时间:〃);seanf("%d",&newjob->ntime);newjob~>flag=l;newjob-〉next=wait;newjob->prie=wait->prie;newjob->prie->next=newjob
4、;wait->prie二newjob;start();}}(3)进程运行voidnanjob()structnode*p=hcad->ncxt;structnode*t;while(pighead){if(p->flag=l){p->ntime一一;if(p->ntime==0){p->flag=0;if(p->prie->flag~O){t=p->prie;p->prie二t->prie;p->prie->next=p;p->1ength+=t->1ongth;if(t~run)run=p;free(t);start();}
5、if(p->next~>fla萨二0){t=p->next;p->next=t->next;p->ncxt->prie=p;p->length+=t->length;if(t==run)run二p;free(t);start();p二p->next;}}(1)内存分配算法实现voidstart(){structnode*w二wait,*p,*t;intfit;whi1e(w->next!=wait)p二run;do{fit=0;if(w->next->1ength<=p->1ength&&p->flag~0){t=w->nex
6、t;w->next二t一>next;w->next->prie=w;t->next=p;t->prie二p->prie;t->prie->next二t;p->prie=t;p->length-=t->length;fit=l;break;}elsep=p->next;}whi1e(p!=run);if(fit==0)w=w->next;五、记录与处理1、设置初始内存大小,作业123,4,5分別中请内存及释放内存,观察空闲分区情况2、对结果的分析经过对程序过程的跟踪和对结果的分析,实验结果符合实验要求和实验原理。3、对调试过程中
7、的小结在调试过程中,编译没冇问题可是运行结果出现错误的现象常冇发生,通过对代码的修改和算法理解程度的深入,并通过多次调试,得到了想要的运行结果。六、思考题内存的主要分配方式有哪些?回收时可能出现的什么情况?应怎样处理这些情况?答:有定分区分配和动态分区分配两种,回收时可能出现内存分区被切成若干在小不等小分区,过小的分区浪费内存资源,这要求我们要用紧凑技术修整。七、实验小结通过此次实验,让我明白分析问题,选择算法,编好程序,只能说完成一半工作,另一半工作就是调试程序、运行程序并得到正确结果。在此次实验屮,指针指向的改变是我遇到的
8、最大难点,即在编程和调试过程中岀现了好多问题,通过多次的调试,是实验収得了要求的结果。修改成自己的话
此文档下载收益归作者所有