蚂蚁文库
换一换
首页 蚂蚁文库 > 资源分类 > PDF文档下载
 

操作系统试验四主存空间的分配与回收-首次适应算法和循环首次适应算法

  • 资源ID:55678857       资源大小:3.36MB        全文页数:13页
  • 资源格式: PDF        下载权限:游客/注册会员    下载费用:5积分 【人民币5元】
快捷注册下载 游客一键下载
会员登录下载
三方登录下载: 微信快捷登录 QQ登录  
下载资源需要5积分 【人民币5元】
邮箱/手机:
温馨提示:
支付成功后,系统会自动生成账号(用户名和密码都是您填写的邮箱或者手机号),方便下次登录下载和查询订单;
支付方式: 微信支付    支付宝   
验证码:   换一换

 
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,既可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰   

操作系统试验四主存空间的分配与回收-首次适应算法和循环首次适应算法

*** 实验报告 【实验名称】 【实验目的】 理解在连续分区动态的存储管理方式下,如何实现主存空间的分配与回收。 首次适应算法和循环首次适应算法 【实验原理】 首次适应( first fit ,FF)算法 FF 算法要求空闲分区链以地址递增的次序链接。在分配内存时,从链首开 始顺序查找, 直至找到一个大小能满足要求的空闲分区即可。然后再按照作业的 大小,从该分区中划出一块内存空间,分配给请求者, 余下的空闲分区仍留在空 闲链中。若从链首直至链尾都不能找到一个能满足要求的分区,则表明系统中已 经没有足够大的内存分配给该进程,内存分配失败,返回。 循环首次适应( next fit,NF)算法 为避免低址部分留下许多很小的空闲分区,以及减少查找可用空闲分区的开 销,循环首次适应算法在为进程分配内存空间时, 不再是每次都从链首开始查找, 而是从上次找到的空闲分区的下一个空闲分区开始查找,直至找到一个能满足要 求的空闲分区,从中划出一块玉请求大小相等的内存空间分配给作业。 【实验内容】 实现主存空间的分配与回收 1. 采用可变式分区管理,使用首次适应算法实现主存空间的分配与回收; 2. 采用可变式分区管理,使用循环首次适应算法实现主存空间的分配与回 收。 数据结构和符号说明 typedef struct PCB//进程控制块 { char ProgressName[10];//进程名称 *** *** int Startaddress; int ProgressSize; int ProgressState 0; }; typedef struct FREE { int Free_num; int Startaddress; int Endaddress; int Free_Space; }; 算法流程图 //进程开始地址 //进程大小 //进程状态 //空闲区结构体 //空闲区名称 //空闲区开始地址 //空闲区结束地址 //空闲区大小 首次适应算法 开始 空闲区登记 插入作业 空闲区指针指向第 一个空闲区 空闲区指针指向下 一个空闲区 否 是否为最后一 个空闲区 当前空闲区是 否满足要求 否 是 是是 插入作业,修改内 插入失败 表 存信息和作业信息 是否继续插 入 否 结束 *** *** 循环首次适应算法 *** *** 开始 空闲区登记 是否为最后一 个空闲区 否 空闲区指针指向第 一个空闲区 是 空闲区指针指向 第一个空闲区, 标记当前空闲区 P 空闲区指针加一 是否小于所标 记的空闲区 P 否 是 插入作业 否 当前空闲区是 否满足 是 当前指针所指 向区域是否满 足 否 是 否 当前空闲区是 否 否满足 是 空闲区指针指向下 一个空闲区 插入当前作业,修 改内存信息和作业 信息表信息 空闲区指针指向下 一个空闲区,标记 当前空闲区 P 是 继续插入作业插入失败 输出信息 结束 程序代码及截图 include include include include define N 1024 typedef struct PCB// 进程控制块 { char ProgressName[10]; int Startaddress; int ProgressSize; int ProgressState 0; }; typedef struct FREE { int Free_num; int Startaddress; int Endaddress; int Free_Space; }; *** //进程名称 //进程开始地址 //进程大小 //进程状态 //空闲区结构体 //空闲区名称 //空闲区开始地址 //空闲区结束地址 //空闲区大小 *** int count 0; // 当前内存中进程个数 bool ROM[N];// 设置内存块 int p 0;// 循环首次使用需要标记当前的空闲区块 FREE FREE[100];// 设置空闲区数组为100 个 int FREE_counter 0;// 空闲区的个数 PCB num[20];//作业队列 void init// 初始化操作 { forint i0; iN; i ROM[i] 0; } void showProgressPCB printf“ 进程名 \t\t 开始地址 \t\t 大小\t\t 结束地址 \n“;// 输出内存信息 printf“----------------------------------------------------------------------\n“; forint i0; icount-1; i forint ji; jnum[j1].Startaddress { a num[j]; num[j] num[j1]; num[j1] a; } forint i0; icount; i ifnum[i].ProgressState0 printf“s\t\td\t\t\td\t\td\t\t\n“,num[i].ProgressName,num[i].Startaddress,num[i].ProgressSiz e,num[i].ProgressSizenum[i].Startaddress-1; printf“----------------------------------------------------------------------\n“; } void showFree// 打印空闲区的情况 { printf“----------------------------------------------------------------------\n“; printf“空闲区名 \t|开始地址 \t|大小\t|结束地址 \n“; printf“----------------------------------------------------------------------\n“; for int i1; i FREE_counter; i { printf“\t1d\t8d\t11d\t FREE[i].Free_Space,FREE[i].Endaddress; printf“----------------------------------------------------------------------\n“; d\n“,FREE[i].Free_num,FREE[i].Startaddress, *** *** } } void find_FREE { int i,j,p;//计数值 FREE_counter 0;// 预设空闲区数为0 fori 0; i N; i ifROM[i] 0 { p i; forj i; j N; j { ifROM[j]0//未找到空闲区,则将j 赋值给 i 后继续循环

注意事项

本文(操作系统试验四主存空间的分配与回收-首次适应算法和循环首次适应算法)为本站会员(sunhongz123)主动上传,蚂蚁文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知蚂蚁文库(发送邮件至2303240369@qq.com或直接QQ联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们


网站客服QQ:2303240369

copyright@ 2017-2027 mayiwenku.com 

网站版权所有  智慧蚂蚁网络

经营许可证号:ICP备2024020385号



收起
展开