操作统实验一可变分区存储管理.doc

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

可变分区存储管理 可变分区存储管理结构数组的形式: struct map { unsigned m_size; //空间大小 char * m_addr; //起始地址 }; struct map coremap[N]; 源程序和执行结果。 #include conio.h #include stdio.h struct map { unsigned m_size; char *m_addr; }; struct map coremap[1000]; struct map *pp; void print_map(); void main(); char *lmalloc(struct map *mp, unsigned size); void lfree(unsigned size, char *aa); struct map coremap[1000]; struct map *pp; char* lmalloc(struct map *mp, unsigned size) ( register int a; register struct map *bp; int paddr=pp-m_addr; bp=pp; if (mp-m_size==0) return(0); if (!bp-m_size) bp=mp; do { if (bp-m_size = size) { a=bp-m_addr; bp-m_addr+=size; pp=bp; if ((bp-m_size-=size) == 0) do { bp++; (bp-1)-m_addr=bp-m_addr; }while((bp-1)-m_size=bp-m_size); return (a); } bp++; if (!bp-m_size) bp=coremap; }while(bp-m_addr !=paddr); return (0); } void lfree(unsigned size, char *aa) //释放空间并注意当前指针位置 { struct map *bp; char *a,*t; unsigned tt; a=aa; for (bp=coremap; bp-m_addr=abp-m_size!=0; bp++); if (bpcoremap(bp-1)-m_addr+(bp-1)-m_size==a) { (bp-1)-m_size+=size; if (a+size==bp-m_addr) { if (pp==bp) pp=(bp-1); (bp-1)-m_size+=bp-m_size; while(bp-m_size) { bp++; (bp-1)-m_addr=bp-m_addr; (bp-1)-m_size=bp-m_size; } } } else { if (a+size==bp-m_addrbp-m_size) { bp-m_addr-=size; bp-m_size+=size; } else { if (size) do{ t=bp-m_addr; bp-m_addr=a; a=t; tt=bp-m_size; bp-m_size=size; bp++; }while(size=tt); } } } void print_map() //显示 int n; if (coremap[0].m_size==0) printf(The memory has been run out!); for (n=0; coremap[n].m_addr!=NULL; n++) { printf(%dth Addr is %d,Size is %d\n,n,coremap[n].m_addr,coremap[n].m_size); } } void main(){ char ch; int a,b,c; coremap[0].m_size=1000; coremap[0].m_addr=500; pp=coremap; while(1) { print_map(); do ch=getchar(); while(ch==\n||ch==\t||ch== ); switch(ch) { case m: { scanf(%d,a); c=lmalloc(coremap,a); if (c==0) printf(The memory has been run out!\n); break; } case f: { scanf(%d %d,a,b); lfree(a,(int *)b); break; } case x: exit(0); } } }

文档评论(0)

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

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

1亿VIP精品文档

相关文档