- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
首次适应算法实验报告
操作操作系统大作业题目:首次适应算法分配内存学 号: 1207300142 学生姓名: 张鲁云班 级:计科121首次适应算法分配内存问题描述在内存分配中,动态分区是根据实际的进程需求,动态地为之分配空间。而首次适应算法分配时从表头指针开始查找可利用空间表,将找到的第一个大小不小于“请求”的空闲块的一部分分配给用户。可利用空间表本身既不按节点的初始地址有序,也不按节点的大小有序。用户释放内存,回收时只是将空闲块插入在链表的表头即可,此算法比较节省时间。运行环境 VC6.0算法思想。首次适应算法要求空闲分区链以地址递增的次序链接。在分配内存时,从链首开始查找,直到找到一个大小能满足要求的空闲分区为止;然后按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空闲区仍留在空闲链中。若从链首到链尾都不能找到一个能满足要求的分区,则此次分配失败。实验目的在计算机系统中,为了提高内存区的利用率,必须给电脑内存区进行合理的分配。本实验通过对内存区分配方法首次适应算法的使用,来了解内存分配的模式。首次适应算法分配内存算法概要 结构体Typedef struct freearea//定义一个空闲区说明表结构{long size; //分区大小long address; //分区地址int state; //状态}ElemType; // 线性表的双向链表存储结构Typedef struct DuLNode{ElemType data;structDuLNode *prior; //前趋指针structDuLNode *next; //后继指针} DuLNode,*DuLinkList;Status Initblock(intMAX_length)//开创带头结点的内存空间链表{block_first=(DuLinkList)malloc(sizeof(DuLNode)); block_last=(DuLinkList)malloc(sizeof(DuLNode)); block_first-prior=NULL; //头结点的前驱指针指向空 block_first-next=block_last; //头结点的后继指针指向尾结点 block_last-prior=block_first; //尾结点的前驱指针指向头结点 block_last-next=NULL; //尾结点的后继指针指向空 block_last-data.address=0; //尾结点的地址是0 block_last-data.size=MAX_length; //分区大小是最大分区 block_last-data.state=Free; //状态是空 return OK; } (2)主要函数说明:void alloc();进行内存分配的功能函数。Status free(int flag)将地址为flag的分区的内存回收。Status First_fit(int request)创建进程空间的子函数;其中,参数request表示空闲分区链的链首指针;要配合函数alloc()使用。void show()查看内存中的分区情况。输入内存空间大小流程图开辟内存空间内存分配情况显示输入操作序列号其他数输入有误,请重试!1Alloc输入分配区间大小3退出FFirst_fit request0 ||request==0FTT分配成功!内存不足,分配失败!配大小不合适,请重试!输入回收区号分区回收2free(flag)代码实现#includeiostream.h#includestdlib.h#includestdio.h#define Free 0 //空闲状态#define Busy 1 //已用状态#define OK 1 //完成#define ERROR 0 //出错//#define MAX_length 640 //最大内存空间为640KB typedefint Status; int flag; typedefstructfreearea//定义一个空闲区说明表结构{long size; //分区大小long address; //分区地址int state; //状态}ElemType; // 线性表的双向链表存储结构typedefstructDuLNode{ElemType data;structDuLNode *prior; //前趋指针structDuLNode *next; //后继指针} DuLNode,*DuLinkList; DuL
文档评论(0)