首次适应算法实验报告

上传人:bin****86 文档编号:60396944 上传时间:2018-11-15 格式:DOCX 页数:11 大小:18.91KB
返回 下载 相关 举报
首次适应算法实验报告_第1页
第1页 / 共11页
首次适应算法实验报告_第2页
第2页 / 共11页
首次适应算法实验报告_第3页
第3页 / 共11页
首次适应算法实验报告_第4页
第4页 / 共11页
首次适应算法实验报告_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《首次适应算法实验报告》由会员分享,可在线阅读,更多相关《首次适应算法实验报告(11页珍藏版)》请在金锄头文库上搜索。

1、为了适应公司新战略的发展,保障停车场安保新项目的正常、顺利开展,特制定安保从业人员的业务技能及个人素质的培训计划首次适应算法实验报告操作系统实验报告实验题目:学生学号:学生姓名:专业年级:开课学期:指导教师:1、实验名:首次适应算法2、实验目的采用可变式分区管理,使用首次适应算法实现内存分配与回收。FF算法要求空闲分区链以地址递增的次序连接。在分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区为止;然后再按照作业的大小,从该分区中划出一块内存空间给请求者,余下的空闲分区仍留在空闲链中。若从链首直至链尾都不能找到一个满足要求的分区,则此次内存分配失败,返回。该算法倾向于优先利用

2、内存中的低址部分的空闲分区,从而保留了高址部分的大空闲区。这给为以后到达的大作业分配大的内存空间创造了条件。3、设计思想数据结构为:进程数量:number内存块大小:neicun已使用分区数目:fqNum开始位置:start结束位置:end进程名称:name进程大小:capactity分区使用标记flag设计思路:程序首先定义了进程数目number=100,以及对内存块大小和分区数目进行了初始化。从main函数开始,并分别定义了功能菜单menu函数,内存初始化init-neicun函数,内存分配fenpei函数,首次适应算法first-fit函数,内存回收memory-recovery函数,进

3、程显示showit函数,以及退出(转载于:写论文网:首次适应算法实验报告)系统exit函数,这些算法函数对内存的查看、分配和回收等进行了计算。4、主要功能模块main函数menu函数init-neicun函数fenpei函数first-fit函数memory-recovery函数showit函数exit函数5、模块的输入输出main函数:整型输入,调用两个函数,返回0;menu函数:功能菜单,输入对功能菜单的选择select,它们分别是1添加进程,2回收内存,3查看内存分配,4退出。并通过switch方法实现对各函数的调用。init-neicun函数:输入内存大小,并对第i个进程的名称name

4、、开始位置start、结束位置end、大小capactity以及标记位flag等进行了初始化。fenpei函数:为内存分配内存,输入所需添加进程的名称和大小,并调用first-fit算法。first-fit函数:当某一分区不在使用时,如果内存空间大于进程长度,则分配内存,并输出该内存的名称name和大小size,并通过检验标记位flag是否等于1来输出是否能为该进程成功分配内存。memory-recovery函数:回收之前分配给进程的内存,输入需回收内存的进程名称,标记位flag表示回收是否成功,0代表失败,1代表成功,根据flag的值输出内存是否回收成功。此外,将连续的已回收的内存区合并。s

5、howit函数:显示进程情况,即输出各个进程的名称,开始位置,结束位置,进程大小。并根据flag的值来判断一进程是已使用、未使用还是尾部。exit函数:整型输入,返回0;通过exit方法来退出程序。6、程序流程图7、实验截图8、源代码#include#include#include#definenumber100/进程数量intneicun=200;/内存块默认大小intfqNum=1;/已使用分区数目,进程数目=fqNum-1/结构类型structfqinfo/分区信息intstart;/开始位置intend;/结束位置charname;/进程名称intcapactity;/进程大小或者分区

6、块大小实验报告12345操作操作系统大作业题目:首次适应算法分配内存学号:学生姓名:张鲁云班级:计科121首次适应算法分配内存一、问题描述在内存分配中,动态分区是根据实际的进程需求,动态地为之分配空间。而首次适应算法分配时从表头指针开始查找可利用空间表,将找到的第一个大小不小于“请求”的空闲块的一部分分配给用户。可利用空间表本身既不按节点的初始地址有序,也不按节点的大小有序。用户释放内存,回收时只是将空闲块插入在链表的表头即可,此算法比较节省时间。二、运行环境三、算法思想。首次适应算法要求空闲分区链以地址递增的次序链接。在分配内存时,从链首开始查找,直到找到一个大小能满足要求的空闲分区为止;然

7、后按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空闲区仍留在空闲链中。若从链首到链尾都不能找到一个能满足要求的分区,则此次分配失败。四、实验目的在计算机系统中,为了提高内存区的利用率,必须给电脑内存区进行合理的分配。本实验通过对内存区分配方法首次适应算法的使用,来了解内存分配的模式。五、首次适应算法分配内存算法概要结构体Typedefstructfreearea/定义一个空闲区说明表结构longsize;/分区大小longaddress;/分区地址intstate;/状态ElemType;/线性表的双向链表存储结构TypedefstructDuLNodeElemTypedata;

8、structDuLNode*prior;/前趋指针structDuLNode*next;/后继指针DuLNode,*DuLinkList;StatusInitblock(intMAX_length)/开创带头结点的内存空间链表block_first=(DuLinkList)malloc(sizeof(DuLNode);block_last=(DuLinkList)malloc(sizeof(DuLNode);block_first-prior=NULL;/头结点的前驱指针指向空block_first-next=block_last;/头结点的后继指针指向尾结点block_last-prior=

9、block_first;/尾结点的前驱指针指向头结点block_last-next=NULL;/尾结点的后继指针指向空block_last-=0;/尾结点的地址是0block_last-=MAX_length;/分区大小是最大分区block_last-=Free;/状态是空returnOK;主要函数说明:voidalloc();进行内存分配的功能函数。Statusfree(intflag)将地址为flag的分区的内存回收。StatusFirst_fit(intrequest)创建进程空间的子函数;其中,参数request表示空闲分区链的链首指针;要配合函数alloc使用。voidshow()查

10、看内存中的分区情况。七、代码实现#include#include#include#defineFree0/空闲状态#defineBusy1/已用状态#defineOK1/完成#defineERROR0/出错/#defineMAX_length640/最大内存空间为640KBtypedefintStatus;intflag;typedefstructfreearea/定义一个空闲区说明表结构longsize;/分区大小longaddress;/分区地址intstate;/状态ElemType;/线性表的双向链表存储结构typedefstructDuLNodeElemTypedata;struct

11、DuLNode*prior;/前趋指针structDuLNode*next;/后继指针DuLNode,*DuLinkList;DuLinkListblock_first;/头结点DuLinkListblock_last;/尾结点Statusalloc(int);/内存分配Statusfree(int);/内存回收StatusFirst_fit(int);/首次适应算法voidshow();/查看分配StatusInitblock();/开创空间表StatusInitblock(intMAX_length)/开创带头结点的内存空间链表block_first=(DuLinkList)malloc(

12、sizeof(DuLNode);block_last=(DuLinkList)malloc(sizeof(DuLNode);block_first-prior=NULL;/头结点的前驱指针指向空block_first-next=block_last;/头结点的后继指针指向尾结点block_last-prior=block_first;/尾结点的前驱指针指向头结点block_last-next=NULL;/尾结点的后继指针指向空block_last-=0;/尾结点的地址是0block_last-=MAX_length;/分区大小是最大分区block_last-=Free;/状态是空returnO

13、K;/分配主存Statusalloc()/首次适应算法StatusFirst_fit(intrequest)/为申请作业开辟新空间且初始化DuLinkListtemp=(DuLinkList)malloc(sizeof(DuLNode);temp-=request;temp-=Busy;DuLNode*p=block_first-next;while(p)if(p-=Free&p-=request)/有大小恰好合适的空闲块p-=Busy;returnOK;break;intrequest=0;scanf(%d,&request);if(request=Free&p-request)/有空闲块能满足需求且有剩余temp-prior=p-prior;temp-next=p;temp-=p-;p-prior-next=temp;p-prior=temp;p-=temp-+temp-;p-=request;returnOK;break;p=p-next;目的-通过该培训员工可对保安行业有初步了解,并感受到安保行业的发展的巨大潜力,可提升其的专业水平,并确保其在这个行业的安全感。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号