存储管理-动态不等长存储资源分配算法

存储管理-动态不等长存储资源分配算法

ID:28002625

大小:76.21 KB

页数:6页

时间:2018-12-07

存储管理-动态不等长存储资源分配算法_第1页
存储管理-动态不等长存储资源分配算法_第2页
存储管理-动态不等长存储资源分配算法_第3页
存储管理-动态不等长存储资源分配算法_第4页
存储管理-动态不等长存储资源分配算法_第5页
资源描述:

《存储管理-动态不等长存储资源分配算法》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、集美大学计算机工程学院实验报告课程名称:操作系统班级:计算1013指导教师:李传目姓名:罗忠霖实验项目编号:实验四学号:2010810072实验项目名称:存储管理-动态不等长存储资实验成绩:源分配算法一、目的理解动态异长存储分区资源管理,掌握所需数据结构和管理程序,了解各种存储分配算法的优点和缺点。二、实验内容与设计思想•分析UNIX最先适应(FF)存储分配算法,即map数据结构、存储分配函数malloc()和存储释放闲数mfree(),找出与算法看关的成分。•修改上述与算法有关的成分,使其分别体现BF分配原则和WF分配原则。•设计:实现ff存储分配

2、算法.固定初始地址为0,大小为100+xx,(xx为学号的后两位)。三、实验使用环境RedHatEnterpriseIinux5四、实验结果#ifdefHAVE_CONFIG_H#include#endif#include#include#defineMAPSIZE100structmap//存储资源表结构{/*char*m_size;char*m_addr;*/intm_addr;intm_size;structmapmap[MAPSIZE];//存储资源表intFF_malloc(stru

3、ctmap*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;bp->m_addr+=size;if((bp-〉m_size-=size)==0)do{bp++;(bp-1)-〉m_addr=bp->m_addr;}while((bp-l)->m_size=bp->m_size);return(a);}}return(-l);}voi

4、dmfree(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_size==a){//与前合并(bp-l)-〉m_size+=size;if(a+size==bp->m_addr){//前后合i(bp-1)->m_size+=bp-〉m_size;while(bp->

5、m_size)bp++;(bp-1)->m_addr=bp-〉m_addr;(bp-l)->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;t=bp->m_size;bp->m_size=size;bp++;}while(size=t);}}voidinit(){structmap*bp;intad

6、dr,size;inti=0;bp=map;printff’Pleaseinputstartingaddrandtotalsize:’’:scanf(’’%d,%d",&addr,&size);bp->m_addr=addr;bp->m_size=size;(++bp)-〉m_size=0;"表尾}voidshow_map()inti=0;system(nclear");//调用清屏命令structmap*bp;bp=map;printf(HCurrentmemorymap“.n);printf(”AddressttSize’’);w

7、hile(bp->m_size!=O){printf("<%dtt%d〉”,bp-〉m_addr,bp-〉m_size);bp++;}printf(Hn);}main(){inta,s;intc;inti;init();do{//显示存储分配表show_map();printf("Pleaseinput,1forrequest^forrelease,0forexit:’’);scanf(”%d",&c);switch(c){case1:printff’Pleaseinputsize:”);scanf(u%dn,&s);if((a=FF_m

8、alloc(map,s))==-1)//callmallocprintf(’’requestcan’tbes

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

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

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