欢迎来到天天文库
浏览记录
ID:31798265
大小:83.24 KB
页数:7页
时间:2019-01-18
《实验四动态分区分配算法实验报告及程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验报告四动态分区分配算法班级学号姓名一.实验目的动态分区分配是根据进程的实际需要,动态地为Z分配内存空间,而在分配时,须按照一定的分配算法,从空闲分区表或空闲分区链中选出一分区分配给该作业。在本实验中运用了四种分配算法,分别是1.首次适应算法,2.循环首次适应算法,3.最坏适应算法4.最佳适应算法。二.实验环境普通的计算机一台,编译环境MicrosoftVisualC++6.0三.算法思想1.数据结构(1)分区开始地址startaddress(2)分区大小size(3)分区状态state2.功能介绍(1)首次适应算法在首次适应算法中,是从己建立
2、好的数组中顺序查找,直至找到第一个大小能满足要求的空闲分区为止,然后再按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空间令开辟一块新的地址,大小为原来的大小减去作业大小,若查找结束都不能找到一个满足要求的分区,则此次内存分配失败。(2)循环首次适应算法该算法是rti首次适应算法演变而成,在为进程分配内存空间时,不再是每次都从第一个空间开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直至找到第一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业,为实现本算法,设置一个全局变量f,来控制循环查找,当f%N
3、==0时,f=0;若查找结束都不能找到一个满足要求的分区,则此次内存分配失败。(3)最坏适应算法最坏适应分配算法是每次为作业分配内存时,扫描整个数组,总是把能满足条件的,又是最大的空闲分区分配给作业。(4)最佳适应算法最坏适应分配算法是每次为作业分配内存时,是最小的空闲分区分配给作业。四、源程序#include#defineL10typedefstructLNode{intstartaddress;intsize;intstate;}LNode;LNodeP[L]={{0,128,0},{200,256,0},{500,512,
4、0},{1500,1600,0},{5000,150,0}};intN=5;int仁0;voidprint(){inti;printf(n起始地址分区状态”);for(i=0;i5、size==m){P[i].state=l;1=1;break;}else{P[N].startaddress=P[i].startaddress+m;P[N].size=P[i].size-m;扫描整个数组,总是把能满足条件的,又P[i].size=m;P[i].state=l;1=1;N>+;break;}}if(l==]6、7、i8、t=0;printf("输入请求分配分区的大小:");scanf(”%d",&m);while(fm&&P[f].state!=l){P[N].startaddress=P[f].startaddress+m;P[N].size=P[f].size-m;P[f].size=m;PLf].st9、ate=l;1=1;N++;f++;break;}}if(l==l){printf("地址成功分配");printfC哋址分配成功后的状态:“);print();}elseprintf(”没有可以分配的地址空间“);}voidWorst(){inti,t=0,l=0,m;inta[L];printf(M输入请求分配分区的大小:”);scanf("%d",&m);for(i=0;i10、1;break;}elsea[i]=P[i].size-m;}if(l==0){for(i=0;i
5、size==m){P[i].state=l;1=1;break;}else{P[N].startaddress=P[i].startaddress+m;P[N].size=P[i].size-m;扫描整个数组,总是把能满足条件的,又P[i].size=m;P[i].state=l;1=1;N>+;break;}}if(l==]
6、
7、i8、t=0;printf("输入请求分配分区的大小:");scanf(”%d",&m);while(fm&&P[f].state!=l){P[N].startaddress=P[f].startaddress+m;P[N].size=P[f].size-m;P[f].size=m;PLf].st9、ate=l;1=1;N++;f++;break;}}if(l==l){printf("地址成功分配");printfC哋址分配成功后的状态:“);print();}elseprintf(”没有可以分配的地址空间“);}voidWorst(){inti,t=0,l=0,m;inta[L];printf(M输入请求分配分区的大小:”);scanf("%d",&m);for(i=0;i10、1;break;}elsea[i]=P[i].size-m;}if(l==0){for(i=0;i
8、t=0;printf("输入请求分配分区的大小:");scanf(”%d",&m);while(fm&&P[f].state!=l){P[N].startaddress=P[f].startaddress+m;P[N].size=P[f].size-m;P[f].size=m;PLf].st
9、ate=l;1=1;N++;f++;break;}}if(l==l){printf("地址成功分配");printfC哋址分配成功后的状态:“);print();}elseprintf(”没有可以分配的地址空间“);}voidWorst(){inti,t=0,l=0,m;inta[L];printf(M输入请求分配分区的大小:”);scanf("%d",&m);for(i=0;i10、1;break;}elsea[i]=P[i].size-m;}if(l==0){for(i=0;i
10、1;break;}elsea[i]=P[i].size-m;}if(l==0){for(i=0;i
此文档下载收益归作者所有