1、实验三 存储管理 动态不等 长存储资源分配算法 实验目的 实验内容 实验准备 实验设计 参考代码 实验结果 思考题实验目的 理解动态异长存储分区资源管理,掌握所需数据结构和管理程序,了解各种存储分配算法的优点和缺点。 实验内容 分析 UNIX最先适应 (FF)存储分配算法,即 map数据结构、存储分配函数 malloc()和存储释放函数 mfree(),找出与算法有关的成分。 修改上述与算法有关的成分,使其分别体现 BF分配原则和 WF分配原则。 实验设计 按内容要求编写最佳适应和最坏适应存储分配算法。 编写测试程序,对存储分配表进行初始化。然后对用户输入的请求和释放,按算法动态更新存储分配表
2、,并将每次更新之后的存储分配表在屏幕上显示出来。 参考代码#ifdef HAVE_CONFIG_H#include #endif#include #include #define MAPSIZE 100struct map /存储资源表结构int m_addr;int m_size;struct map mapMAPSIZE; /存储资源表/BF存储分配函数int BF_malloc(struct map *mp,int size) register int a,s;register struct map *bp,*bpp;for(bp = mp; bp-m_size; bp+)if (bp-
3、m_size = size)a = bp-m_addr;s = bp-m_size;for(bpp = bp; bpp-m_size; bpp+) /最佳适应if(bpp-m_size = size s = bpp-m_size;bp = bpp;bp-m_addr += size;if (bp-m_size -= size) = 0)dobp+;(bp-1)-m_addr = bp-m_addr;while(bp-1)-m_size = bp-m_size);return(a);return(-1);/WF存储分配函数int WF_malloc(struct map *mp,int size
4、) register int a,s;register struct map *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;if (bp-m_size -=size) = 0)dobp+;(bp-1)-m_addr = bp-m_addr;while(
5、bp-1)-m_size = bp-m_size);return(a);return(-1);/存储释放函数void mfree(struct map *mp,int aa,int size) register struct map *bp;register int t;register int a;a = aa;for(bp = mp; bp-m_addrm_size != 0; bp+);if(bpmp 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;