操作系统第三次.doc_第1页
操作系统第三次.doc_第2页
操作系统第三次.doc_第3页
操作系统第三次.doc_第4页
操作系统第三次.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

吉林大学操作系统实验报告班级: 7 姓名:姜秀连学号:55140727姓名姜秀连学号55140727实验项目 存储管理动态不等 长存储资源分配算法实验性质演示性实验 验证性实验 操作性实验 综合性实验实验地点机器编号指导教师实验时间2016年 6 月 14 日 一、实验综述1. 实验目的及要求理解动态异长存储分区资源管理,掌握所需数据结构和管理程序,了解各种存储分配算法的优点和缺点。实验内容分析UNIX最先适应(FF)存储分配算法,即map数据结构、存储分配函数malloc()和存储释放函数mfree(),找出与算法有关的成分。 修改上述与算法有关的成分,使其分别体现BF分配原则和WF分配原则。 2. 实验设备、软件PC,Linux 二、实验过程(实验步骤、记录、数据、分析)实验代码:#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-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_size 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);/WF存储分配函数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_size s) 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_addrm_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; else if (a+size = bp-m_addr & bp-m_size) /与后合并 bp-m_addr -= size; bp-m_size += size; else if (size) do /无合并 t = bp-m_addr; bp-m_addr = a; a = t; t = bp-m_size; bp-m_size = size; bp+; while (size = t); void init() struct map *bp; int addr,size; int i=0; bp=map; printf(Please input starting addr and total size:); scanf(%d,%d,&addr,&size); bp-m_addr=addr; bp-m_size=size; (+bp)-m_size=0; /表尾void show_map() int i=0; /system(clear); /清屏 struct map *bp; bp=map; printf(nCurrent memory map.n); printf(AddressttSizen); while(bp-m_size!=0) printf(n,bp-m_addr,bp-m_size); bp+; printf(n);main() int a,s; int c; int i; init(); printf(please input, b for BF, w for WF:); scanf(%c,&c); do show_map(); /显示存储资源表 printf(“please input, b for BF, w for WF, e for exit); printf(Please input,1 for request,2 for release,0 for exit:); scanf(%d,&c); switch(i) case 1: printf(Please input size:); scanf(%d, &s); if(c=b) /BF a=BF_malloc(map,s) else /WF a=WF_malloc(map,s) if(a=-1) printf(request cant be satisfiedn); else printf(alloc memory at address:%d,size:%dn,a,s); break; case 2: printf(Please i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论