欢迎来到天天文库
浏览记录
ID:48514830
大小:411.50 KB
页数:17页
时间:2020-02-06
《操作系统之内存分配与回收.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、......操作系统实验内存的分配与回收实验报告一、实验题目:内存的分配与回收二、实验内容:利用可变分区的首次适应算法,模拟内存的分配与回收。三、实验目的:掌握可变分区首次适应算法的原理以及其编程实现。.专业.专注.......一、实验过程:1、基本思想:可变分区分配是根据进程的实际需求,动态地为之分配内存空间。首次适应算法要求空闲空间链以地址递增的次序链接。进行内存分配时,从链表头部开始依次检索,找到第一个不小于请求空间大小的空闲空间进行分配。分配时需考虑碎片问题,若分配会导致碎片产生则将整块分区分配。内存的回收需要考虑四种情况:⑴回收分区前后两个分区都空闲,则需要和前后两个分区合并;
2、(2)回收分区只有前一分区空闲,则与前一分区合并;(3)回收分区只有后一分区空闲,则和后一分区合并;(4)回收分区独立,不考虑合并。2、主要数据结构:structFreeArea{链结点包含的数据:分区号、大小、起址、标记intID;intsize;longaddress;intsign;};structNode{双链表结点结构体:数据区、前向指针、后继指针FreeAreadata;structNode*prior;structNode*next;}*DLinkList;.专业.专注.......3、输入、输出:输入:I.内存分配时由键盘输入分区ID和大小;II.内存回收时由键盘输入需要
3、回收的分区ID;输出:输出内存的分配情况(按照地址从低到高)4、程序流程图:结束合并后回收合并后回收该分区后一个分区空闲该分区前一个分区空闲合并后回收该分区前后都空闲回收分区独立输入分区号显示分区情况结束开始退出Choice==0Choice==3Choice==2将分区从空闲链移出,并修改相应数据结构整块分配判断是否会有碎片内存不足判断剩余空间是否足够输入分区大小输入分区号输入有误验证该分区是否已经被占用Choice==1Choice>3或choice<0选择操作choice输出可选操作.专业.专注........专业.专注.......5、实验结果截屏:.专业.专注........专
4、业.专注.......5、源程序代码:#includeusingnamespacestd;#defineFree0//空闲状态#defineBusy1//已用状态#definePBusy2//碎片已用状态#defineFINISH1//完成#defineFINISH21//完成#defineERROR0//出错#definememory512//最大内存空间为(单位:KB)#definemin10//碎片最小值(单位:KB).专业.专注.......typedefstructFreeArea//空闲链数据{intID;intsize;longaddress;intsi
5、gn;};typedefstructNode//空闲连结构{FreeAreadata;structNode*prior;structNode*next;}*DLinkList;DLinkListhead;//头结点DLinkListtail;//尾结点intCreate()//初始化{head=(DLinkList)malloc(sizeof(Node));//分配内存.专业.专注.......tail=(DLinkList)malloc(sizeof(Node));head->prior=NULL;head->next=tail;tail->prior=head;tail->next=
6、NULL;tail->data.address=0;tail->data.size=memory;tail->data.ID=0;tail->data.sign=Free;returnFINISH;}intFirstFit(intID,intrequest)//首次适应算法{DLinkListtemp=(DLinkList)malloc(sizeof(Node));//新建作业的结点temp->data.ID=ID;temp->data.size=request;temp->data.sign=Busy;Node*p=head;//插入指针Pwhile(p){if(p->data.sig
7、n==Free&&p->data.size==request)//剩余大小恰好满足{.专业.专注.......p->data.sign=Busy;p->data.ID=ID;returnFINISH;break;}elseif(p->data.sign==Free&&p->data.size>request&&(p->data.size-request>min))//满足需求且有剩余且不产生碎片{temp->prior=p->pri
此文档下载收益归作者所有