下载此文档

动态分区分配方式的模拟C语言代码和C代码.doc


文档分类:IT计算机 | 页数:约17页 举报非法文档有奖
1/17
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/17 下载此文档
文档列表 文档介绍
实验三使用动态分区分配方式的模拟1、实验目的了解动态分区分配方式中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及其实现过程的理解。2、实验内容(1)用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc()和回收过程free()。其中,空闲分区通过空闲分区链来管理:在进行内存分配时,系统优先使用空闲区低端的空间。(2)假设初始状态下,可用的内存空间为640KB,并有下列的请求序列:•作业1申请130KB。•作业2申请60KB。•作业3申请100KB。•作业2释放60KB。•作业4申请200KB。•作业3释放100KB。•作业1释放130KB。•作业5申请140KB。•作业6申请60KB。•作业7申请50KB。•作业6释放60KB。请分别采用首次适应算法和最佳适应算法,对内存块进行分配和回收,要求每次分配和回收后显示出空闲分区链的情况。程序代码——C语言实现#include<>#include<>structnode//空闲分区链结点的定义{ node*before; node*after; intsize; intaddress; intstate;};nodeL;structusenode{ usenode*next; intnum; intadd; intsize;}U,*n;voidInit()//空闲分区链的初始化{ node*p; p=(node*)malloc(sizeof(node)); p->before=&L; p->after=NULL; p->size=640; p->address=0; p->state=0; =p; =NULL; =0; =NULL; n=&U;}node*search(inta){ node*p=; if(p==NULL) { printf("没有空闲的区域!"); p=NULL; returnp; } else { while(p!=NULL&&a>p->size) p=p->after; if(p==NULL) { printf("没有找到合适的空闲空间!"); p=NULL; returnp; } else returnp; }}voidrecovery(inta,intb)//内存回收算法{ node*c,*s,*r=; node*d=,*e; usenode*k=,*h=&U;while(k!=NULL&&a!=k->num) { h=k; k=k->next; } if(k==NULL) printf("没有找到这样的作业!"); else { h->next=k->next; if(h->next==NULL) n=h; } while(r!=NULL)//若回收得到的空闲块的前方有空闲块合并此空闲块 { if(k->add==r->address+r->size) { r->size=r->size+k->size; break; } else r=r->after; }if(r==NULL)//若回收得到的空闲块的后面有空闲块合并此空闲块 { r=; while(r!=NULL) { if(k->add+k->size==r->address) { r->address=k->add; r->size=r->size+k->size; break; } else r=r->after; } } while(d!=NULL)//保证空闲链表中没有相邻的空闲空间 { if(d->after!=NULL) e=d->after; else break; if(d->address+d->size==e->address) { d->after=e->after; while(e->after!=NULL) e->after->before=d; d->size=d->size+e->size; free(e); break; } else d=d->after; } if(r==NULL) { r=;c=(node*)malloc(sizeof(node)); c->size=b; c->address=k->add; if(==NULL) { c->after=; c->before=&L; =c; } else { r=; while(r!=NULL) { if(r->address>c->address) { c->after=r; c->before=r->before; r->before->after=c

动态分区分配方式的模拟C语言代码和C代码 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数17
  • 收藏数0 收藏
  • 顶次数0
  • 上传人wz_198622
  • 文件大小167 KB
  • 时间2019-06-03