操作系统适应算法程式设计报告.docxVIP

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统适应算法程序设计报告作业说明·内容:设计一个实现适应算法的程序·要求:只要求与空闲区于表有关的程序实现两个过程申请内存释放内存其中,合并空闲区作为较高要求程序说明·开发环境采用C++编程语言,在VC6.0下开发·实现算法最先适应算法·程序模块申请内存释放内存合并空闲区打印内存分配情况·数据结构结构体模拟空闲区域表和分配表,通过管理空闲区域表和分配表,完成动态分配内存。·算法设计申请内存模块设计由用户输入进程名称以及所需分配内存空间大小,实现内存的动态分配。空闲区域表变化情况若申请内存成功,则为相应进程分配的内存区首址一定是某个空闲区域的首址1 申请内存空间大小恰好等于对应空闲区大小只需在空闲区域表中删除对应空闲区即可 2 申请内存空间大小小于对应空闲区大小保存对应空闲区,修改空闲区首址和大小分配表变化情况在分配表中添加一个分配区释放内存模块设计空闲区域表变化情况1 将释放的分配区添加到空闲区域表中2 按照空闲区首址从小到大的顺序对空闲区进行排序由于最先适应算法要求找到的空闲区首址最小,因此,经过排序后只需找到第一个内存大小满足要求的空闲区即为所要空闲区3 相连空闲区处理释放内存之后,释放的分配区可能恰好和原来的内存区相连(释放分配区的首址恰好是某个原内存区下一个位置,或释放分配区的下一个位置恰好是某个原内存区的首址),由于空闲区都是等价的,所以相连的两个或多个空闲区相当于一个大的空闲区,因此在释放操作之后需要判断是否存在相连空闲区,若有,则合并。说明:这里所说的合并只是对释放内存后导致的相连空闲区来说,与下面所说的合并空闲区不是一个概念。由于空闲区相连是有内存释放引起的,而且在释放之前没有空闲区相连(若有,一定经过合并),所以相连空闲区最多只有3个(与释放分配去相邻的两个原空闲区)。分配表变化情况释放成功只需将对应分配表中的内存区删除即可。合并空闲区模块设计只有当空闲区域表中任何一个单独空闲区的大小都不能满足申请所需内存的要求,但所有空闲区之和能满足要求时,才进行合并空闲区操作。具体实现:合并空闲区时,将所有分散的空闲区合并成一个大空闲区,然后再进行分配内存操作。打印内存分配情况输出分配表和空闲区域表中的内容。·代码设计变量申明与数据结构进程结构struct Process{string name; //进程名int addr; //首址int size; //长度};进程名:用于标识一个进程,两个进程不能同名首址、长度:进程在内存中的分配情况说明:在空闲区域表中,进程结构保存的是释放的进程信息。在释放内存后,需要对空闲区域表按照区域首址从小到大排序,然后对相连进程进行处理,进程名用于寻找排序后对应的当前释放内存区的位置。int total_size;全局变量,记录内存空间大小Table used_table; 内存分配表Table free_table; 空闲区域表其中,内存分配表和空闲区域表结构相同申请内存bool Apply(string name,int size)输入参数:name 申请进程名称 size 申请进程需要内存空间返回值:申请内存是否成功if(free_table.tot_len size)如果空闲区总长度小于申请内存大小,则内存申请失败。如果空闲区总长度不小于申请内存大小,则先遍历每一个空闲区,查找是否有单个空闲区满足要求,if(free_table.process[i].size = size)如果找到满足要求的空闲区;进一步判断空闲区是否恰好等于申请内存大小,如果是,需要删除该空闲区;否则,需要改变该空闲区首址和长度。删除空闲区的操作为:for(int j=i+1; jfree_table.tot_num; j++)free_table.process[j-1] = free_table.process[j];其中,i是待删除空闲区的索引。将第i个空闲区之后的所有空闲区依次往前移动一个,这样就覆盖了第i个空闲区,从而达到删除的目的。当内存分配成功时,还需将进程插入到分配表中:insert(name,addr,size);对应参数:进程名、分配内存首址、分配内存大小释放内存void Release(int index)输入参数:删除进程索引,即待释放内存在分配表中位置释放内存需要修改空闲区域表和分配表在修改空闲区域表时,先将释放内存插入表中,然后需要进行一次对空闲区域表按首址从小到大排序(上面已经提及):qsort(free_table.process,free_table.tot_num,sizeof(free_table.process[0]),cmp);排序结束,需要判断是否有相连空闲区,用cur,pre, n

文档评论(0)

xina171127 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档