- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统实验报告
实验题目:首次适应算法
学生学号:
学生姓名:
专业年级:
开课学期:
指导教师:
实验名:
首次适应算法
实验目的
采用可变式分区管理,使用首次适应算法实现内存分配与回收。
FF算法要求空闲分区链以地址递增的次序连接。在分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区为止;然后再按照作业的大小,从该分区中划出一块内存空间给请求者,余下的空闲分区仍留在空闲链中。若从链首直至链尾都不能找到一个满足要求的分区,则此次内存分配失败,返回。该算法倾向于优先利用内存中的低址部分的空闲分区,从而保留了高址部分的大空闲区。这给为以后到达的大作业分配大的内存空间创造了条件。
设计思想
数据结构为:
(1)进程数量:number
(2)内存块大小:neicun
(3)已使用分区数目:fqNum
(4)开始位置:start
(5)结束位置:end
(6)进程名称:name
(7)进程大小:capactity
(8)分区使用标记flag
设计思路:
程序首先定义了进程数目number=100,以及对内存块大小和分区数目进行了初始化。
从main函数开始,并分别定义了功能菜单menu()函数,内存初始化init-neicun()函数,内存分配fenpei()函数,首次适应算法first-fit()
函数,内存回收memory-recovery()函数,进程显示showit()函数,以
及退出系统exit()函数,这些算法函数对内存的查看、分配和回收等进
行了计算。
主要功能模块
main()函数
menu()函数
init-neicun()函数
fenpei()函数
first-fit()函数
memory-recovery()函数
showit()函数
exit()函数
模块的输入输出
main()函数:整型输入,调用两个函数,返回0;
menu()函数:功能菜单,输入对功能菜单的选择select(1-4),它们分别是1添加进程,2 回收内存,3查看内存分配,4退出。并通过switch方法实现对各函数的调用。
init-neicun()函数:输入内存大小,并对第i个进程的名称name、开始位置start、结束位置end、大小capactity以及标记位flag等进行了初始化。
fenpei()函数:为内存分配内存,输入所需添加进程的名称和大小,并调用first-fit()算法。
first-fit()函数:当某一分区不在使用时,如果内存空间大于进程长度,则分配内存,并输出该内存的名称name和大小size,并通过检验标记位flag是否等于1来输出是否能为该进程成功分配内存。
memory-recovery()函数:回收之前分配给进程的内存,输入需回收内存的进程名称,标记位flag表示回收是否成功,0代表失败,1代表成功,根据flag的值输出内存是否回收成功。此外,将连续的已回收的内存区合并。
showit()函数:显示进程情况,即输出各个进程的名称,开始位置,结束位置,进程大小。并根据flag的值来判断一进程是已使用、未使用还是尾部。
exit()函数:整型输入,返回0;通过exit(0)方法来退出程序。
程序流程图
开始
开始
main函数
main函数
init-neicun()函数
init-neicun()函数
menu()函数
menu()函数
exit()函数showit()函数
exit()函数
showit()函数
Memory_recovery()函数
fenpei()函数
first_fit
first_fit()函数
结束
结束
7、实验截图
8、源代码
#include stdio.h
#include string.h
#include iostream
#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 me
文档评论(0)