文档详情

操作系统存储管理—动态不等长存储资源分配算法实验.doc

发布:2017-10-30约3.53千字共6页下载文档
文本预览下载声明
大学计算机工程学院实验报告 课程名称:网络操作系统 班级: 实验成绩: 指导教师: 姓名: 实验项目名称:存储管理—动态不等长存储资源分配算法 学号: 上机实践日期: 2011-11-25 实验项目编号:7 组号: 上机实践时间: 2学时 一、目的本次实验所涉及并要求掌握的知识点) 理解动态异长存储分区资源管理,掌握所需数据结构和管理程序,了解各种存储分配算法的优点和缺点。 二、内容与 4.编写测试程序,对存储分配表进行初始化。然后对用户输入的请求和释放,按算法动态更新存储分配表,并将每次更新之后的存储分配表在屏幕上显示出来。 三、用环境本次实验所使用的平台和相关软件) Red Hat Enterprise Linux 5 VMeare Vi 编辑器 四#ifdef HAVE_CONFIG_H #include config.h #endif #include stdio.h #include stdlib.h #define MAPSIZE 100 struct map //存储资源表结构 { int m_addr; int m_size; }; struct map map[MAPSIZE]; //存储资源表 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-m_size=size) { //最佳适应 a=bp-m_addr; s=bp-m_size; for(bpp=bp;bpp-m_size;bpp++) { if(bpp-m_size=sizebpp-m_sizes) { a=bpp-m_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_size); return(a); } } return (-1); } int WF_malloc(struct map *mp,int size) { 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_sizes) { a=bpp-m_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_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_addr=abp-m_size!=0;bp++); if(bpmp(bp-1)-m_addr+(bp-1)-m_size==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; } } }
显示全部
相似文档