欢迎来到天天文库
浏览记录
ID:52426782
大小:85.51 KB
页数:20页
时间:2020-04-06
《实验三存储管理.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验三存储管理——动态不等长存储资源分配算法实验目的实验内容实验准备实验设计参考代码实验结果思考题实验目的理解动态异长存储分区资源管理,掌握所需数据结构和管理程序,了解各种存储分配算法的优点和缺点。实验内容分析UNIX最先适应(FF)存储分配算法,即map数据结构、存储分配函数malloc()和存储释放函数mfree(),找出与算法有关的成分。修改上述与算法有关的成分,使其分别体现BF分配原则和WF分配原则。实验准备教程中6.2.2节动态不等长存储资源管理,12.4.2节UNIX存储资源管理。实验设计按内容要求编写最佳适应和最坏适应存储分配算法。编写测试程序,对存储分配表进行初始化。然
2、后对用户输入的请求和释放,按算法动态更新存储分配表,并将每次更新之后的存储分配表在屏幕上显示出来。参考代码#ifdefHAVE_CONFIG_H#include#endif#include#include#defineMAPSIZE100structmap//存储资源表结构{intm_addr;intm_size;};structmapmap[MAPSIZE];//存储资源表//BF存储分配函数intBF_malloc(structmap*mp,intsize){registerinta,s;registerstructmap*b
3、p,*bpp;for(bp=mp;bp->m_size;bp++){if(bp->m_size>=size){a=bp->m_addr;s=bp->m_size;for(bpp=bp;bpp->m_size;bpp++){//最佳适应if(bpp->m_size>=size&&bpp->m_sizem_addr;s=bpp->m_size;bp=bpp;}}bp->m_addr+=size;if((bp->m_size-=size)==0)do{bp++;(bp-1)->m_addr=bp->m_addr;}while((bp-1)->m_size=bp->m_si
4、ze);return(a);}}return(-1);}//WF存储分配函数intWF_malloc(structmap*mp,intsize){registerinta,s;registerstructmap*bp,*bpp;for(bp=mp;bp->m_size;bp++){if(bp->m_size>=size){a=bp->m_addr;s=bp->m_size;for(bpp=bp;bpp->m_size;bpp++){//最坏适应if(bpp->m_size>s){a=bpp->m_addr;s=bpp->m_size;bp=bpp;}}bp->m_addr+=size;i
5、f((bp->m_size-=size)==0)do{bp++;(bp-1)->m_addr=bp->m_addr;}while((bp-1)->m_size=bp->m_size);return(a);}}return(-1);}//存储释放函数voidmfree(structmap*mp,intaa,intsize){registerstructmap*bp;registerintt;registerinta;a=aa;for(bp=mp;bp->m_addr<=a&&bp->m_size!=0;bp++);if(bp>mp&&(bp-1)->m_addr+(bp-1)->m_siz
6、e==a){//与前合并(bp-1)->m_size+=size;if(a+size==bp->m_addr){//前后合并(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_addr&&bp->m_size){//与后合并bp->m_addr-=size;bp->m_size+=size;}elseif(size)do{//无合并t=bp->m_addr;bp->m_addr=a;a=t
7、;t=bp->m_size;bp->m_size=size;bp++;}while(size=t);}}voidinit(){structmap*bp;intaddr,size;inti=0;bp=map;printf("Pleaseinputstartingaddrandtotalsize:");scanf("%d,%d",&addr,&size);bp->m_addr=addr;bp->m_size=size;(++bp)->m
此文档下载收益归作者所有