《存储管理实验.docVIP

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《存储管理实验

实 验 报 告 课程名称_______存储管理实验______ 学  院___ 计算机工程学院______ 班  级_________11软件1W ______ _ 学  号_________________ 姓  名 __________成杰 ________ _ 2013年 11 月 23 日 学  号姓名 成杰 实验日期 2013.11.23 实验名称 存储管理实验 实验目的: 通过本实验加强读者对存储管理技术的理解,掌握可变式存储管理技术的分配与回收。 实验内容: 定义一个大小为64KB的字符类型数组A,利用可变式分区存储管理技术对其存储空间进行分配和回收。具体要求: 设计一个初始化内存的函数initMemory对管理内存的数据结构进行初始化。 设计一个申请内存的函数MemAllocate负责申请指定大小的内存。 设计一个释放内存的函数MemFree负责将指定的内存区域回收。 设计一个程序,利用函数MemAllocate和MemFree申请内存和释放内存。 实验原理: 为了管理分区,需要设置相应的数据结构来记录内存的使用情况。常用的数据结构形式有两种,一种是采用静态表,即在系统中设置两张表,一张为已分配区说明表,一张为未分配区说明表,通过这两张表就能对分区进行分配和回收。另外一张是采用空闲分区链表,将系统中的空闲分区用双向链表链接成一条链,分配时查找链表,可采用首次适应、最佳适应等算法分配内存。回收时,将回收的内存块插入链表中,若与该块相邻的块为空白块,还需要合并空白块。读者可以按任何一种不限于本书介绍的方法实现可变式分区管理。下面介绍一种利用带辅助位示图实现分区管理的技术。 将内存分成大小相等的节 把存储空间分成大小相等的节,以节为单位分配内存。例如,如果每节为32B,则64KB的内存空间共有2048节。在进程提出申请内存空间时,根据申请的内存字节数转换成节数,例如,申请的字节数为size,但由于size往往不是节的整数倍,因此,在计算节数时取大于size/32的最小整数,用C语言表达式则为: SectionNum=(size+31)5; 内存分配和回收 在可变式分区管理技术中,当回收内存时需要考虑将要回收的内存的相邻是否为空白分区,若是需要进行合并分区,这项工作非常复杂。本节采用带辅助位示图的位示图管理方法对内存进行分配和回收,可有效地解决空白区合并问题。 位示图存储管理的基本思想是使用一组标识位来跟踪内存的使用情况,内存区域中的每一个节对应一个标识位,由标识位反映该节是已分配状态还是未分配状态。在设计系统时可采用一个无符号的字符型数组,使该数组中的每一位对应内存区域中的每一节,1表示该节空闲,0表示该节已分配。在进行内存分配时,采用首次适应算法按需分配,即在查找空闲分区时,分配最先满足要求的分区,并且需要多少节就分配多少节。 函数的实现算法 内存分配函数MemAllocate 函数原型为:void * MemAllocate(int size); MemAllocate函数实现内存的分配,它能够向申请者提供/不提供所需的内存,其实现算法描述如下: 首次调用本函数时,调用initMemory函数对内存管理数据结构进行初始化; 设size为申请者请求的内存容量; 计算申请者需要内存的节数,计算公式为SectionNum=(size+31)5; 从位示图的起始位开始寻找连续的SectionNum个未分配出去的节,即查找连续SectionNum位为1的位示图,如果有,则转,否则分配失败,返回NULL; 将位示图中将要分配出去的这SectionNum位请示报告,表示已分配,将辅助位图中对应的SectionNum位中除第一位之外的其他位设置为1; 返回这SectionNum位中第一个对应的首地址,分配成功。 内存回收函数MemFree 函数原型为:void MemFree(void * startAddr); 内存回收函数将按照释放者提供的内存地址释放内存,其算法描述如下: 将释放的内存起始地址转换为对应位示图的位号bitnum; 找到位示图的对应位,并将该位设置为1; i=bitnum+1; 查找辅助位示图的第i位,若该位为0,回收工作结束,转; 将位示图的第i位置1,将辅助位示图的第i位清0; i=i+1,转; 结束。 内存初始化initMemory 函数原型为:void initMemoy(void); 内存初始化工作比较简单,仅需要对位示图和辅助位示图赋初值即可。 位示图可辅助位示图定义如下: unsigned char memBit[256]; 定义位示图,256个8位无符号二进制数,共2048个二进制位,若

文档评论(0)

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

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

1亿VIP精品文档

相关文档