操作系统首次适应算法动态分配C语言代码_第1页
操作系统首次适应算法动态分配C语言代码_第2页
操作系统首次适应算法动态分配C语言代码_第3页
操作系统首次适应算法动态分配C语言代码_第4页
操作系统首次适应算法动态分配C语言代码_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验名称:操作系统动态分配声明:杨秀龙学号:专业课:创新实验课111地图老师:霍林实验标题内存动态分区分配和回收内存实验的目的更好地理解内存动态分区分配任务、可变分区初始自适应算法的原理和编程实现。设计思想可变分区分配是根据流程的实际要求动态分配的内存空间。第一个自适应算法要求可用空间链按地址增加的顺序连接。在内存分配过程中,从关联的列表头开始按顺序搜索,查找并分配第一个不大于请求空间大小的可用空间。分配应考虑碎片问题,如果分配导致碎片,则分配整个分区。内存回收应考虑以下四种情况:1如果接收分区前后两个分区都空闲,则必须前后合并两个分区。2如果只有旧分区空闲,回收分区将与旧分区合并。3如果回收分区只有最后一个分区空闲,它将与下一个分区合并。4回收分区独立于整合关键数据结构基本数据结构有两种:可用分区表结构和表的链结构。空闲分区表结构必须包含(分区编号、分区起始地址、分区状态、分区数据大小)。因为使用双向关联列表的结果,所以表的链结构包含(可用分区表的信息,第一个指针,结束指针)结构程序代码如下:Typedef struct BodyInt IDInt sizeInt addressInt signTypedef struct NodeBody dataStruct Node * priorStruct Node * next * DLinkList流程图退场选择0输入错误3 or0选择操作0-3操作界面开始选择3号显示内存分配选择2回收内存选择1分配内存输入区域编号结束合并后回收合并后回收分区下一个分区空闲此分区中的上一个分区处于空闲状态合并后回收分区前后都处于空闲状态结束在可用链中移动分区并修改其数据结构整个块分配判断是否有碎片内存不足验证是否有足够的剩馀空间输入分区大小运行结果图(1)主界面图(2)分配三个分区后分配图(3) 1、3分区的分配恢复图(4) 4重新分配分区后分配附录:源代码如下:#include#include#define Free 0 /空闲#define Zhanyong 1 /占用#define FINISH 1 /完成#define ERROR 0 /错误#define memory 512 /最大内存#define min 10 /片段值Typedef struct BodyInt IDInt sizeInt addressInt signTypedef struct NodeBody dataStruct Node * priorStruct Node * next * DLinkListDLinkList head/头节点DLinkList tou/尾部节点Int Create()/初始化head=(dlink list)malloc(size of(node);tou=(dlink list)malloc(size of(node);head-prior=NULL;head-next=tou;tou-prior=head;tou-next=NULL;tou-data . address=0;tou-data . size=memory;Tou-data。ID=0;tou-data . sign=Free;Return FINISHInt FirstFit(int ID,int space)/初始自适应算法dlink list new node=(dlink list)malloc(size of(node);/新作业的节点NewNode-data。ID=IDnew node-data . size=space;new node-data . sign=Zhanyong;Node * p=headWhile(p)if(p-data . sign=free p-data . size=space)/剩馀大小精确为 p-data . sign=Zhanyong;P-data。ID=IDReturn FINISHBreak满足if(p-data . sign=free p-data . size space(p-data . size-space min)/要求,剩馀部分不生成片段new node-prior=p-prior;new node-next=p;new node-data . address=p-data . address;p-prior-next=new node;p-prior=new node;p-data . address=new node-data . address new node-data . size;p-data . size=p-data . size-space;Return FINISHBreak生成if(p-data . sign=free p-data . size space p-data . size-space=min)/代码段时p-data . sign=Zhanyong;P-data。ID=IDReturn FINISHBreakp=p-next;/如果已经存在分布,请移动到p指针之后Return ERRORInt Allocation()/内存分配Int ID,空间;Printf(输入分区编号(不能输入两个相同的分区编号):;scanf(“% d”,ID);Printf(“输入分配内存大小(: kb):”;scanf(“% d”,空间);If(space0 |space=0)Printf(分配的内存大小必须为正整数! n );Return ERRORIf(FirstFit(ID,space)=FINISH)Printf(分配成功! n );ElsePrintf(“”内存不足,分配失败! n );int recycle(int id)/shifang zuoyeNode * p=headWhile(p)If(p-data .ID=ID)p-data . sign=Free;/p-data。ID=Freeif(p-prior-data . sign=free)(p-next-data . sign=free)/连接到前后空闲块p-prior-data . size=p-prior-data . size p-data . size p-next-data . size;p-prior-next=p-next-next;if(p-next-next=NULL)/* * * * p-next是最后一个节点时p-prior-data。ID=Freep-next=NULL;else p-next-next-prior=p-prior;Break连接到If(p-prior-data.sign=Free)/前面的空闲块p-prior-data . size=p-data . size;p-prior-next=p-next;p-next-prior=p-prior;Break连接到If(p-next-data.sign=Free)/后面的空闲块p-data . size=p-next-data . size;如果If(p-next-next=NULL)/p-next是最后一个节点p-next=NULL;Elsep-next-next-prior=p;p-next=p-next-next;BreakBreakp=p-next;Printf(“分区号为%d的内存回收成功n”,ID);Return FINISHVoid show()Printf (* * * * * * * * * *当前内存分配* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *node * p=head-next;While(p)Printf(“分区编号:”);If(p-data .ID=Free)Printf(“未分配”);ElsePrintf(m ,p-data .ID);Printf(“起始地址:M”,p-data . address);Printf(“分区大小:MKB”,p-data . size);printf( shape:);If(p-data.sign=Free)Printf(“空 n”);Else if(p-data.sign=Zhanyong)Printf(“已分配 n”);p=p-next;printf(“ n”);Int main()create();Int choiceint I;for(I=0);I)Printf(“请选择作业: n”);Printf(1 .内存分配 n );Printf(2 .回收内存 n );Printf(3 .显示内存分配 n );Printf(0 .退出程序 n );sc

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论