欢迎来到天天文库
浏览记录
ID:28002625
大小:76.21 KB
页数:6页
时间:2018-12-07
《存储管理-动态不等长存储资源分配算法》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
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
此文档下载收益归作者所有