张蒙用首次适应算法模拟内存的分配和回收.doc

张蒙用首次适应算法模拟内存的分配和回收.doc

ID:49691374

大小:474.00 KB

页数:15页

时间:2020-03-03

张蒙用首次适应算法模拟内存的分配和回收.doc_第1页
张蒙用首次适应算法模拟内存的分配和回收.doc_第2页
张蒙用首次适应算法模拟内存的分配和回收.doc_第3页
张蒙用首次适应算法模拟内存的分配和回收.doc_第4页
张蒙用首次适应算法模拟内存的分配和回收.doc_第5页
资源描述:

《张蒙用首次适应算法模拟内存的分配和回收.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、采用首次适应算法实现主存的分配和回收一、目的在计算机系统中,为了提高内存区的利用率,必须给电脑内存区进行合理的分配。本实验通过对内存区分配方法首次适应算法的使用,来了解内存分配的模式。在熟练掌握计算机分区存储管理方式的原理的基础上,编程模拟实现操作系统的可变分区存储管理的功能,一方面加深对原理的理解,另一方面提高根据已有原理通过编程解决实际问题的能力,为进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。二、实验内容与数据结构:(1)可变式分区管理是指在处理作业过程中建立分区,使分区大小正好适合作业的需要,

2、并且分区的个数是可以调整的。当需要装入一个作业时,根据作业需要的贮存量,查看是否有足够的空闲空间,若有,则按需求量分割一部分给作业;若无,则作业等待。随着作业的装入、完成,主存空间被分割成许多大大小小的分区。有的分区被分配作业占用,有的分区空闲,例如,某时刻主存空间占用情况如图所示:为了说明哪些分区是空闲的,可以用来装入新作业,必须要有一张空闲区说明表,如下图所示。(1)当有一个新作业要求装入贮存时,必须查空闲区说明表,从中找出一个足够大的空闲区。有时找到的空闲区可能大于作业的需求量,这时应将空闲区一分为二。一个分给

3、作业,另一个仍作为空闲区留在空闲区表中。为了尽量减少由于分割造成的碎片,尽可能分配地地址部分的空闲区,将较大的空闲区留在高地址端,以利于大作业的装入。为此在空闲区表中,按空闲区首地址从低到高进行登记。(2)当一个作业执行完成时,作业所占用的分区应归还给系统。在归还时,要考虑相邻空间区合并问题。作业的释放区与空闲区的邻接分以下4种情况考虑:A、释放区下邻空闲区;B、释放区上邻空闲区;C、释放区上下都与空闲区邻接;D、释放区上邻空闲区不邻接;一、实验要求1.内存大小初始化2.可以对内存区进行动态分配,采用首次适应算法来实

4、现3.可以对已分配的内存块进行回收,并合并相邻的空闲内存块。二、实验内容把一个作业装入内存,按照首次适应算法对内存区进行分配,作业结束,回收已分配给该作业的内存块,并合并相邻的空闲内存块。三、实验结果运行效果:1.初始化内存区大小,并添加作业,选择1添加作业2.当作业大小超过存储块大小时,分配失败。3.选择3,可查看内存分配情况1.选择2回收内存2.选择1添加新作业3.回收C作业,相邻的空闲内存块合并。五、程序流程图:六、实验源代码://FirstFit.cpp:可变分区用首次适应算法来模拟内存回收#include<

5、STDIO.H>#includeintMAX_SEGMENT=10;//最大碎片值structPartition//分区表目{intPar_Size;//分区大小intPar_No;//分区序号或者名字intAddr;//分区地址intIsUse;//分区使用情况,0表示空闲,1表示使用Partition*pri;//前向指针Partition*next;//后向指针};Partition*Int()//函数,返回Partition类型指针{//初始化空闲分区表Partition*list,*H,

6、*H1;list=(structPartition*)malloc(sizeof(structPartition));list->next=NULL;H=list;if(!list){printf("错误,内存初始化分配失败!程序结束");exit(1);}H1=(structPartition*)malloc(sizeof(structPartition));printf("请预先输入分区总大小(以KB为单位):");scanf("%d",&H1->Par_Size);H1->Addr=0;H1->Par_No

7、=0;H1->IsUse=0;H1->pri=H;H1->next=NULL;H->next=H1;////list--->H1returnlist;}Partition*InitFP(){//初始化已分配分区表Partition*FP,*F,*H;inti;FP=(structPartition*)malloc(sizeof(structPartition));FP->next=NULL;H=FP;for(i=0;i<10;i++)//已分配区先暂定分配十个表目{F=(structPartition*)malloc

8、(sizeof(structPartition));if(!F){printf("错误,内存分配失败!程序结束");exit(1);}F->Par_Size=0;F->Addr=0;F->Par_No=0;F->IsUse=0;F->next=NULL;H->next=F;F->pri=H;H=H->next;}returnFP;}Part

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。