伙伴系统算法.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
伙伴系统算法

#includestdio.h #includestdlib.h #includemalloc.h #includemath.h # define M 21 //宏定义,最大可分配空间为1M字节,最小为1字节 //定义数据结构:用二叉树结点结构 struct buddynode { char name; //占用该空间的进程名称 int level; //表示等级数,即空间大小,用其幂级数表示,level表示2^(level)大小的空间 int idle; //空闲标志位,1表示空闲,0表示已分配 int lorr; //标志位(left or right):0表示该结点是左孩子,1表示该结点是右孩子 //后继(用于空闲队列指针的操作);左右孩子,双亲用于二叉树存储 buddynode *next; buddynode *lchild; buddynode *rchild; buddynode *parent; }; buddynode *idlepres[M]; //空间大小为2^M的空闲队列,相当于尾指针,指向空闲队列最后一个空闲区 buddynode *idlehead[M]; //各空闲队列头指针,与上面M个空闲队列相对应 buddynode *bs; //初始化时令其指向根结点,为每次遍历时使用 buddynode *bsp; //暂存结点信息 buddynode *bt; //定义初始化函数:0~M-2队列都为空,而M-1队列初始化为最大空间,即2^M void init_space() { int i; for(i=0;iM-1;i++) { idlehead[i]=(buddynode*)(malloc(sizeof buddynode)); idlepres[i]=NULL; idlehead[i]-next=NULL; } idlepres[M-1]=(buddynode*)(malloc(sizeof buddynode)); idlepres[M-1]-name=NULL; idlepres[M-1]-level=M-1; idlepres[M-1]-idle=1; idlepres[M-1]-lorr=NULL; //表示根结点 idlepres[M-1]-next=NULL; idlepres[M-1]-lchild=NULL; idlepres[M-1]-rchild=NULL; idlepres[M-1]-parent=NULL; idlehead[M-1]=(buddynode*)(malloc(sizeof buddynode)); idlehead[M-1]-next=idlepres[M-1]; bs=idlepres[M-1]; } //根结点作为源头,遍历的起始 //为进城分配空间函数,以进程名称和空间大小为行参 void req_space(char na,int m) { int k,sj,si; buddynode *pav; buddynode *pde; //delete,空闲区结点删除后暂存入pde k=m; si=0; //while循环,找到满足条件的si使得2^(si-1)m2^(si),si是需要分配的空间大小等级 while(k0){ k=k/2; si=si+1; } //判断是否存在大小为si的空闲区,若有si空闲区,分配给进程 if((idlehead[si]-next!=NULL)(idle

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档