操作系统之内存分配与回收.docVIP

  1. 1、本文档共10页,可阅读全部内容。
  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文档。上传文档
查看更多
操作系统之内存分配与回收

操作系统实验 内存的分配与回收 实验报告 实验题目:内存的分配与回收 实验内容:利用可变分区的首次适应算法,模拟内存的分配与回收。 实验目的:掌握可变分区首次适应算法的原理以及其编程实现。 实验过程: 1、基本思想:可变分区分配是根据进程的实际需求,动态地为之分配内存空间。首次适应算法要求空闲空间链以地址递增的次序链接。进行内存分配时,从链表头部开始依次检索,找到第一个不小于请求空间大小的空闲空间进行分配。分配时需考虑碎片问题,若分配会导致碎片产生则将整块分区分配。内存的回收需要考虑四种情况:⑴回收分区前后两个分区都空闲,则需要和前后两个分区合并;(2)回收分区只有前一分区空闲,则与前一分区合并;(3)回收分区只有后一分区空闲,则和后一分区合并;(4)回收分区独立,不考虑合并 。 2、主要数据结构: struct FreeArea{ 链结点包含的数据:分区号、大小、起址、标记 int ID; int size; long address; int sign; }; struct Node { 双链表结点结构体:数据区、前向指针、后继指针 FreeArea data; struct Node *prior; struct Node *next; }*DLinkList; 3、输入、输出: 输入: I.内存分配时由键盘输入分区ID和大小; II.内存回收时由键盘输入需要回收的分区ID; 输出: 输出内存的分配情况(按照地址从低到高) 程序流程图: 实验结果截屏: 源程序代码: #includeiostream using namespace std; #define Free 0 //空闲状态 #define Busy 1 //已用状态 #define PBusy 2 //碎片已用状态 #define FINISH 1 //完成 #define FINISH2 1 //完成 #define ERROR 0 //出错 #define memory 512 //最大内存空间为(单位:KB) #define min 10 //碎片最小值(单位:KB) typedef struct FreeArea//空闲链数据 { int ID; int size; long address; int sign; }; typedef struct Node //空闲连结构 { FreeArea data; struct Node *prior; struct Node *next; }*DLinkList; DLinkList head; //头结点 DLinkList tail; //尾结点 int Create()//初始化 { head=(DLinkList)malloc(sizeof(Node));//分配内存 tail=(DLinkList)malloc(sizeof(Node)); head-prior=NULL; head-next=tail; tail-prior=head; tail-next=NULL; tail-data.address=0; tail-data.size=memory; tail-data.ID=0; tail-data.sign=Free; return FINISH; } int FirstFit(int ID,int request)//首次适应算法 { DLinkList temp=(DLinkList)malloc(sizeof(Node));//新建作业的结点 temp-data.ID=ID; temp-data.size=request; temp-data.sign=Busy; Node *p=head;//插入指针P while(p) { if(p-data.sign==Free p-data.size==request)//剩余大小恰好满足{ p-data.sign=Busy; p-data.ID=ID; return FINISH; break; } else if(p-data.sign==Free p-data.sizerequest (p-data.size-requestmin))//满足需求且有剩余且不产生碎片 { temp-prior=p-prior; temp-next=p; temp-data.address=p-data.address; p-prior-next=temp; p-prior=temp; p-data.addr

文档评论(0)

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

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

1亿VIP精品文档

相关文档