您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 动态分区分配方式模拟
使用动态分区分配方式的模拟1内容(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。请分别采用首次适应算法和最佳适应算法,对内存块进行分配和回收,要求每次分配和回收后显示出空闲分区链的情况。2、示例程序://Tittle:使用动态分区算法的模拟//author:XuYongzhen#includestdio.h#includestdlib.h#includemalloc.h#includeiostreamusingnamespacestd;typedefstructDuLNode{structDuLNode*prior;structDuLNode*next;intaddress;intjsize;intjnumber;//显示分区被那个作业占用,显示零则为空闲分区;}DuLNode,*DuLinkList;voidCreatList(DuLinkList&L){DuLinkListp=(DuLinkList)malloc(sizeof(DuLNode));L-next=p;L-jnumber=100;//为释放头结点后面的结点空间做统一化处理p-prior=L;p-next=NULL;p-jsize=600;p-address=0;p-jnumber=0;}voidRequestList(DuLinkList&L,intjob,intsize){cout作业job申请sizeKB的空间endl;DuLinkListp=L-next;while((p-jnumber0||p-jsizesize)&&p)p=p-next;if(p==NULL)cout没有适合的空间分配endl;else{DuLinkLists=(DuLinkList)malloc(sizeof(DuLNode));s-prior=p-prior;p-prior-next=s;s-next=p;p-prior=s;s-jnumber=job;s-jsize=size;s-address=p-address;p-address=p-address+s-jsize;p-jsize=p-jsize-s-jsize;DuLinkListt=L-next;while(t){if(t-jnumber==0)cout空闲分区:始址=t-address大小=t-jsizeendl;elsecout已分配的分区:作业号=t-jnumber始址=t-address大小=t-jsizeendl;t=t-next;}//whilecoutendl;}//else}//RequestListvoidFreeList(DuLinkList&L,intjob){cout作业job释放endl;DuLinkListp=L-next;while(p-next&&p-jnumber!=job)p=p-next;if(p-prior-jnumber==0&&p-next-jnumber==0){//p的前后都是空闲分区,则合并三者DuLinkLists=p-next;DuLinkListq=p-prior;p-prior-next=p-next;p-next-prior=p-prior;s-prior-next=s-next;s-next-prior=p-prior;q-jsize=p-jsize+s-jsize+q-jsize;}if(p-prior-jnumber==0&&p-next-jnumber!=0){//回收区与插入点的前一个分区相临接DuLinkListq=p-prior;p-prior-next=p-next;p-next-prior=p-prior;q-jsize=p-jsize+q-jsize;}if(p-prior-jnumber!=0&&p-next-jnumber==0){//回收区与插入点的后一个分区相临接DuLinkListq=p-next;p-prior-next=p-next;p-next-prior=p-prior;q-address=p-address;q-jsize=p-jsize+q-jsize;}if(p-prior-jnumber!=0&&p-next-jnumber!=0)//回收区去插入点前后的两个空闲分区都不相临接p-jnumber=0;DuLinkListt=L-next;while(t){if(t-jnumber==0)cout空闲分区:始址=t-address大小=t-jsizeendl;elsecout已分配的分区:作业号=t-jnumber始址=t-address大小=t-jsizeendl;t=t-next;}coutendl;}voidmain(){DuLinkListL=(DuLinkList)malloc(sizeof(DuLNode));CreatList(L);RequestList(L,1,130);RequestList(L,2,60);RequestList(L,3,100);FreeList(L,2);RequestList(L,4,200);FreeList(L,3);FreeList(L,1);RequestList(L,5,140);RequestList(L,6,60);RequestList(L,7,50);FreeList(L,6);}
本文标题:动态分区分配方式模拟
链接地址:https://www.777doc.com/doc-3598996 .html