活动分区内存的分配与回收.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文档。上传文档
查看更多
活动分区内存的分配与回收

活动分区内存的分配与回收一、实验目的主存是CPU可直接访问的信息空间,合理而有效的使用贮存将在很大程度上影响整个计算机系统的性能。本实验要求模拟实现分区式主存管理机制。模拟实现各种分区管理方法以及相应的主存分配以及回收算法。通过该实验进一步加深对可变分区存储机制的理解。加深对存储器动态分区分配算法的认识。掌握“首次适应算法”、“最佳适应算法发”的内存分配过程。掌握内存的回收策略。二、实验要求1、设计可用的内存空闲空间,并能动态输入用户作业所需的内存大小。2、编程模拟各种分配算法的实施过程,实现内存的回收。要求考虑回收时的内存合并问题。三、实验内容1、总体结构本系统采用了首次适应算法、最佳适应算法和最坏适应算法模拟存储器动态分区。系统利用其中某种分配算法,从空闲分区链中找到满足请求内存大小的分区并分配内存给作业。假设总的内存大小为size,作业请求的内存大小为request,内存碎片最小为f。当requestsize时,内存溢出,出现系统错误;当request=size时,在内存中根据上述算法寻找最佳的内存分区分配给作业。寻找到合适的内存分区之后,如果size-request=f,将此分区上的内存全部分配给作业;如果size-requestf,就在此分区上分割request大小的内存给作业,剩余内存继续留在当前的分区中。当进程运行完毕,系统找到该进程并释放其内存,根据所释放内存的位置对内存进行合并。2、数据结构(1)定义的全局变量:#define SIZE 1000 // 内存初始大小#define MINSIZE 5 // 碎片最小值enum STATE { Free, Busy }//枚举类型,记录分区是否空闲的状态量(2)定义的结构体:structsubAreaNode。记录分区的主要数据。(3)函数1)void intSubArea():分配初始分区内存。2)intfirstFit(inttaskId, int size):首次适应算法实现函数,taskId为作业名,size为作业申请的内存大小。3)intbestFit(inttaskId, int size):最佳适应算法实现函数,taskId为作业名,size为作业申请的内存大小。4)intworstFit(inttaskId, int size):最坏适应算法实现函数,taskId为作业名,size为作业申请的内存大小。5)intfreeSubArea(inttaskId):内存回收函数,该函数主要用于实现内存的回收,根据回收内存的位置对分区进行合并操作。其中taskId为所需回收内存的作业号。6)void showSubArea():显示空闲分区链情况。包括起始地址,空间大小。工作状态。作业号。7)int main():主函数,主要用于显示操作界面,调用各个子函数等功能。四、程序代码#includestdio.h#includetime.h#includestdlib.h#define SIZE 1000 // 内存初始大小#define MINSIZE 5 // 碎片最小值enum STATE { Free, Busy };staticintss=0,ee=0;structsubAreaNode {intaddr; // 起始地址int size; // 分区大小inttaskId; // 作业号STATE state; // 分区状态subAreaNode *pre; // 分区前向指针subAreaNode *nxt; // 分区后向指针}subHead;// 初始化空闲分区链voidintSubArea(){// 分配初始分区内存subAreaNode *fir = (subAreaNode *)malloc(sizeof(subAreaNode));// 给首个分区赋值fir-addr = 0;fir-size = SIZE;fir-state = Free;fir-taskId = -1;fir-pre = subHead;fir-nxt = NULL; // 初始化分区头部信息subHead.pre = NULL;subHead.nxt = fir;}// 首次适应算法intfirstFit(inttaskId, int size){ subAreaNode *p = subHead.nxt;while(p != NULL) {if(p-state == Free p-size = size) { // 找到要分配的空闲

文档评论(0)

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

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

1亿VIP精品文档

相关文档