内存的申请和释放.docVIP

  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文档。上传文档
查看更多
计算机学院网络工程专业 操作系统课程设计 题 目: 内存的申请和释放 班 级: 网工11102班 姓 名:郭阳 学 号: 201117030216 同组人姓名: 起 迄 日 期: 第一周,第二周                课程设计地点: E3——A513                 指导教师: 贺玉才 评阅意见: 成绩评定: 评阅人: 日期: 完成日期:2014年3月 目录 一、概述 1 1、设计目的 1 2、开发环境 1 二、设计要求 1 三、实验基本原理 1 四、程序流程图 2 1、整体程序流程图 3 2、内存分配allocate()流程图 4 五、源程序 5 1、数据结构 5 2、主要功能函数 5 3、源程序代码 6 六、运行结果 16 1、测试用例与程序运行结果截图 16 2、内存分配正确测试 18 3、内存回收错误测试 18 4、内存回收正确测试用例 18 七、总结 21 八、参考文献 21 一、概述 1、设计目的 了解操作系统的内存分配的方法 2、开发环境 WINDOWS环境 Visual C++6.0 二、设计要求 定义一个自由存储块链表,按块地址排序,表中记录块的大小。当请求分配内存时,扫描自由存储块链表,知道找到一个足够大的可供分配的内存块,若找到的块的大小正好等于所请求的大小时,就把这一块从自由链表中取下来,返回给申请者。若找到的块太大,即对其分割,并从该块的高地址不分往低地址部分分割,取出大小合适的块返还给申请者,愈小的低地址部分留在链表中。若找不到足够大的块,就从操作系统中请求另外一个足够大的内存区域,并把它连接到自由块链表中,然后再继续搜索。 释放存储块也要搜索自由链表,目的是找到适当的位置将要释放的块插进去,如果被释放的块的任何一边与链表中的某一块临接,即对其进行合并操作,直到没有合并的临接块为止,这样可以防止存储空间变得零碎。。? 三、实验基本原理 分区存储管理是给内存中的进程划分适当大小的存储区,以连续存储各进程的程序和数据,使各进程能并发地执行。最优适应分配算法扫描整个未分配区表或链表,从空闲区中挑选一个能满足用户进程要求的最小分区进行分配。 在可变分区模式下,在系统初启且用户作业尚未装入主存储器之前,整个用户区是一个大空闲分区,随着作业的装入和撤离,主存空间被分成许多分区,有的分区被占用,而有的分区时空闲的。为了方便主存空间的分配和去配,用于管理的数据结构可由两张表组成:“已分配区表”和“未分配区表”。在“未分配表中”将空闲区按长度递增顺序排列,当装入新作业时,从未分配区表中挑选一个能满足用户进程要求的最小分区进行分配。这时从已分配表中找出一个空栏目登记新作业的起始地址和占用长度,同时修改未分配区表中空闲区的长度和起始地址。当作业撤离时已分配区表中的相应状态变为“空”,而将收回的分区登记到未分配区表中,若有相邻空闲区再将其连接后登记。可变分区的回收算法较为复杂,当一个作业撤离时,可分为4种情况:其临近都有作业(A和B),其一边有作业(A或B),其两边均为空闲区。尤其重要的是,在程序中利用“ new 类型T(初值列表)”申请分配用于存放T类型数据的内存空间,利用 “delete 指针名”释放指针所指向的内存空间。 四、程序流程图 1、整体程序流程图 2、内存分配allocate()流程图 五、源程序 1、数据结构 (1)内存块 struct space //定义内存空间结构体 { long startaddress; long length; struct space *next; }; space *pbc; (2)、作业块 struct work //定义进程结构体 { char name[20]; long startaddress; long length; struct work *next; }; work *S; 2、主要功能函数 allocate() : 实现内存分配,并在当中调用display(pbc),以及display(

文档评论(0)

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

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

1亿VIP精品文档

相关文档