首次适应算法 内存分配_第1页
首次适应算法 内存分配_第2页
首次适应算法 内存分配_第3页
首次适应算法 内存分配_第4页
首次适应算法 内存分配_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、操 作 系 统 实 验 报 告课程名称: 操作系统 实验题目: 首次适应算法 姓 名: * 专业班级: * 学 号: * 指导老师: *一、 实验目的在计算机系统中,为了提高内存区的利用率,必须给电脑内存区进行合理的分配。本实验通过对内存区分配方法首次适应算法的使用,来了解内存分配的模式。二、 实验要求1. 内存大小初始化2. 可以对内存区进行动态分配,采用首次适应算法来实现3. 可以对已分配的内存块进行回收,并合并相邻的空闲内存块。三、 实验内容把一个作业装入内存,按照首次适应算法对内存区进行分配,作业结束,回收已分配给该作业的内存块,并合并相邻的空闲内存块。四、 实验结果运行效果:1.初始

2、化内存区大小,并添加作业,选择1添加作业2. 当作业大小超过存储块大小时,分配失败。3.选择3,可查看内存分配情况4. 选择2回收内存5. 添加新作业6. 回收C作业,相邻的空闲内存块合并。五、 实验总结首次适应算法要求空闲分区链以地址递增的次序链接。在分配内存时,从链首开始查找,直到找到一个大小能满足要求的空闲分区为止;然后按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空闲区仍留在空闲链中。若从链首到链尾都不能找到一个能满足要求的分区,则此次分配失败。这里,我采用数组的方式,模拟内存分配首次适应算法,动态的为作业分配内存块。可以根据作业名称回收已分配的内存块,当空闲内存块相邻时

3、,则合并。通过此次的实验,让我对内存分配中首次适应算法更加熟悉,在此基础上,我也测试最佳适应算法(best_fit)和最坏适应算法(worst_fit),并对其进行了比较分析,从比较中我发现,针对同一个问题,解决的方法不止一种,而且不同的方法所要消耗的资源和时间也不相同,根据不同的要求,方法的优劣也不同,可以说方法是解决问题的一种模式,随环境不同而体现出优越性。六、 实验附录程序源代码:#include <stdio.h>#include <string.h>#include <iostream>int neicun=200;/内存块默认大小int fqNu

4、m=1;/已使用分区数目,进程数目=fqNum-1#define number 100/进程数量struct fqinfo/分区信息int start;/开始位置int end;/结束位置char name;/进程名称int capactity;/进程大小或者分区块大小int flag;/分区使用标记,0:未使用 1:已使用 2:回收或者合并的分区 3:尾部fqlistnumber;int init_neicun();/初始化内存大小int first_fit(char name,int size);/首次适应算法int fenpei();/为进程存储区int showit();/显示进程in

5、t menu();/功能菜单int Memory_recovery();/内存回收int exit();/退出系统int main()init_neicun();/初始化内存大小menu();return 0;int menu()int select;printf("n-n"); printf(" 1: 添加进程 2: 回收内存n"); printf(" 3: 查看内存分配 4: 退出n");printf("-n"); printf("please input you choice:");sca

6、nf("%d",&select);switch(select)case 1:fenpei();break;case 2:Memory_recovery();break;case 3:showit();break;case 4:exit();break;menu();return 0;int init_neicun()for(int i=0;i<number;i+)='$'fqlisti.start=0;fqlisti.end=0;fqlisti.capactity=0;fqlisti.flag=0;printf(&quo

7、t;请输入内存大小:");scanf("%d",&neicun);printf("内存大小neicun=%dn",neicun);fqlist0.capactity=neicun;fqlist0.start=0;fqlist0.end=neicun-1;fqlist0.flag=3;return 0;int fenpei()getchar();char m;int n;printf("请输入进程的名称和大小(空格分隔):");scanf("%c %d",&m,&n);first_f

8、it(m,n);return 0;int first_fit(char jname,int size)/printf("name=%c,size=%d,number=%dn",jname,size,number); /int count=0;int flag=0;/默认情况分配失败 1时分配成功int sum=0;for(int i=0;i<number&&flag=0;i+)if(fqlisti.flag!=1)/当某一分区不在使用时if(fqlisti.capactity>size)/printf("fenpei name=%c,s

9、ize=%dn",jname,size);if(i<number-1)/分配内存,已使用内存块增加for(int j=number-1;j>i;j-)fqlistj=fqlistj-1;fqlisti+1.name='$'fqlisti+1.start=sum+size;fqlisti+1.end=fqlisti.end;fqlisti+1.capactity=fqlisti.capactity-size; fqlisti+1.flag=fqlisti.flag;=jname;fqlisti.start=sum;fqlisti.en

10、d=sum+size-1;fqlisti.capactity=size;fqlisti.flag=1;fqNum+;/进程数目增1/需要把以后的分区块往后一个位置flag=1;else/当未使用的分区块大小不足时sum=sum+fqlisti.capactity;else/当该分区块在使用时sum=sum+fqlisti.capactity;/count+;/记录已查询出的分区块个数if(flag=1)printf("已为进程%c分配内存区!n",jname);elseprintf("为进程%c分配内存区失败!n",jname);return 0;int

11、 Memory_recovery()int flag=0;/标记回收是否成功 0:失败 1:成功int sflag=0;/int tflag=0;/char jname='z'getchar();/吸收空白键printf("请输入进程名称:");scanf("%c",&jname);for(int i=0;i<number;i+)if(=jname)='$'fqlisti.flag=2;/表示为回收的内存区flag=1;fqNum-;if(flag=1)prin

12、tf("进程%c结束,内存回收成功!n",jname);elseprintf("进程%c无法结束,内存回收失败!n",jname); /将连续的已回收的内存区合并while(flag<3)for(i=0;i<number-1;i+)if(fqlisti.flag=0|fqlisti.flag=2)if(fqlisti+1.flag!=1)if(fqlisti+1.flag=3)fqlisti.end=fqlisti+1.end;fqlisti.capactity=fqlisti.capactity+fqlisti+1.capactity; f

13、qlisti.flag=fqlisti+1.flag;for(int j=i+1;j<number-1;j+)fqlistj=fqlistj+1;i=number;flag+;elsefqlisti.end=fqlisti+1.end;fqlisti.capactity=fqlisti.capactity+fqlisti+1.capactity; fqlisti.flag=fqlisti+1.flag;for(int j=i+1;j<number-1;j+)fqlistj=fqlistj+1;flag+;return 0;int showit()/显示进程情况int count=0;printf("进程名称 开始位置 结束位置 进程大小 状态n"); for(int i=0;i<number-1&&count<fqNum;i+)printf("%5c%10d%12d%10d",,fqlisti.start,fqlisti.end,fqlisti.capactity);if(fqlisti.flag=1)printf(" 已使用n");count+;el

温馨提示

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

评论

0/150

提交评论