实验三存储管理.ppt

实验三存储管理.ppt

ID:52426782

大小:85.51 KB

页数:20页

时间:2020-04-06

实验三存储管理.ppt_第1页
实验三存储管理.ppt_第2页
实验三存储管理.ppt_第3页
实验三存储管理.ppt_第4页
实验三存储管理.ppt_第5页
资源描述:

《实验三存储管理.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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。