为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

操作系统-首次适应算法实验报告

2019-09-17 18页 doc 66KB 58阅读

用户头像

is_654168

暂无简介

举报
操作系统-首次适应算法实验报告操作系统实验报告 实验题目:首次适应算法 学生学号: 学生姓名: 专业年级: 开课学期: 指导教师: 1、 实验名: 首次适应算法 2、 实验目的 采用可变式分区管理,使用首次适应算法实现内存分配与回收。 FF算法要求空闲分区链以地址递增的次序连接。在分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区为止;然后再按照作业的大小,从该分区中划出一块内存空间给请求者,余下的空闲分区仍留在空闲链中。若从链首直至链尾都不能找到一个满足要求的分区,则此次内存分配失败,返回。该算法倾向于优先利用内存中的低址部分的空闲分...
操作系统-首次适应算法实验报告
操作系统#实验# 实验题目:首次适应算法 学生学号: 学生姓名: 专业年级: 开课学期: 指导教师: 1、 实验名: 首次适应算法 2、 实验目的 采用可变式分区管理,使用首次适应算法实现内存分配与回收。 FF算法要求空闲分区链以地址递增的次序连接。在分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区为止;然后再按照作业的大小,从该分区中划出一块内存空间给请求者,余下的空闲分区仍留在空闲链中。若从链首直至链尾都不能找到一个满足要求的分区,则此次内存分配失败,返回。该算法倾向于优先利用内存中的低址部分的空闲分区,从而保留了高址部分的大空闲区。这给为以后到达的大作业分配大的内存空间创造了条件。 3、 思想 数据结构为: (1)进程数量:number (2)内存块大小:neicun (3)已使用分区数目:fqNum (4)开始位置:start (5)结束位置:end (6)进程名称:name (7)进程大小:capactity (8)分区使用标记flag 设计思路: (1) 程序首先定义了进程数目number=100,以及对内存块大小和分区数目进行了初始化。 (2) 从main函数开始,并分别定义了功能菜单menu()函数,内存初始化init-neicun()函数,内存分配fenpei()函数,首次适应算法first-fit() 函数,内存回收memory-recovery()函数,进程显示showit()函数,以 及退出系统exit()函数,这些算法函数对内存的查看、分配和回收等进 行了计算。 4、 主要功能模块 (1) main()函数 (2) menu()函数 (3) init-neicun()函数 (4) fenpei()函数 (5) first-fit()函数 (6) memory-recovery()函数 (7) showit()函数 (8) exit()函数 5、 模块的输入输出 (1) main()函数:整型输入,调用两个函数,返回0; (2) menu()函数:功能菜单,输入对功能菜单的选择select(1-4),它们分别是1添加进程,2 回收内存,3查看内存分配,4退出。并通过switch方法实现对各函数的调用。 (3) init-neicun()函数:输入内存大小,并对第i个进程的名称name、开始位置start、结束位置end、大小capactity以及标记位flag等进行了初始化。 (4) fenpei()函数:为内存分配内存,输入所需添加进程的名称和大小,并调用first-fit()算法。 (5) first-fit()函数:当某一分区不在使用时,如果内存空间大于进程长度,则分配内存,并输出该内存的名称name和大小size,并通过检验标记位flag是否等于1来输出是否能为该进程成功分配内存。 (6) memory-recovery()函数:回收之前分配给进程的内存,输入需回收内存的进程名称,标记位flag表示回收是否成功,0代表失败,1代表成功,根据flag的值输出内存是否回收成功。此外,将连续的已回收的内存区合并。 (7) showit()函数:显示进程情况,即输出各个进程的名称,开始位置,结束位置,进程大小。并根据flag的值来判断一进程是已使用、未使用还是尾部。 (8) exit()函数:整型输入,返回0;通过exit(0)方法来退出程序。 6、 程序图 7、实验截图      8、源代码 #include #include #include #define number 100//进程数量 int neicun=200;//内存块默认大小 int fqNum=1;//已使用分区数目,进程数目=fqNum-1 //结构类型 struct fqinfo//分区信息 { int start;//开始位置 int end;//结束位置 char name;//进程名称 int capactity;//进程大小或者分区块大小 int flag;//分区使用标记,0:未使用  1:已使用  2:回收或者合并的分区  3:尾部 }fqlist[number];//fqlist[]分区列表 //函数定义 int menu();//功能菜单 int init_neicun();//初始化内存大小 int fenpei();//为进程分配内存 int first_fit(char name,int size);//首次适应算法 int Memory_recovery();//内存回收 int showit();//显示进程 int exit();//退出系统 //功能菜单menu int menu(){ int select; printf("\n---------------------------------------\n"); printf("  1: 添加进程          2: 回收内存\n"); printf("  3: 查看内存分配      4: 退出\n"); printf("\n---------------------------------------\n"); printf("please input your choice:"); scanf("%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;isize)//如果内存空间大于进程长度 {        if(ii;j--) { fqlist[j]=fqlist[j-1]; } fqlist[i+1].name='n'; fqlist[i+1].start=sum+size; fqlist[i+1].end=fqlist[i].end; fqlist[i+1].capactity=fqlist[i].capactity-size; fqlist[i+1].flag=fqlist[i].flag; } fqlist[i].name=jname; fqlist[i].start=sum; fqlist[i].end=sum+size-1; fqlist[i].capactity=size; fqlist[i].flag=1; fqNum++;//进程数目增1 //需要把以后的分区块往后一个位置 flag=1;                }else{ //当未使用的分区块大小不足时 sum=sum+fqlist[i].capactity;            }        }else{//当该分区块在使用时 sum=sum+fqlist[i].capactity; } } if(flag==1) printf("已为进程%c分配内存区!\n",jname); else printf("为进程%c分配内存区失败!\n",jname); return 0; } //回收内存 int 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
/
本文档为【操作系统-首次适应算法实验报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索