1、applyarea) freeblocki.startaddress=freeblocki.startaddress+applyarea; freeblocki.size=freeblocki.size-applyarea; tag=1; return freeblocki.startaddress-applyarea; elsefreeblocki.size=applyarea) freeblocki.state=0; return freeblocki.startaddress; if(tag=0) return -1; int alloc2(int applyarea,int s) fo
2、r(i=s; start=freeblocki.startaddress-applyarea; return i; if(freeblocki.state=1& start=freeblocki.startaddress; return i;int alloc3(int applyarea) int i,k,h,flag,tag=0,j=0; int aN; struct freearea min; struct freearea mid;applyarea)aj+=i; if(j1) h=a0; min=freeblockh; for(k=1;kj;k+) h=ak; if(freebloc
3、kh.sizemin.size) mid.size=freeblockh.size; mid.state=freeblockh.state; mid.startaddress=freeblockh.startaddress; freeblockh.size=min.size; freeblockh.state=min.state; freeblockh.startaddress=min.startaddress; min.size=mid.size; min.state=mid.state; min.startaddress=mid.startaddress; min.startaddress
4、=min.startaddress+applyarea; min.size=min.size-applyarea; tag=1; return min.startaddress-applyarea; else if(j=1) tag=1; if(tag=0)void setfree() int s,l,tag1=0,tag2=0,tag3=0,i,j; printf(input free area startaddress:n); scanf(%d,&s);input free area size:l); if(freeblocki.startaddress=s+l&freeblocki.st
5、ate=1) l=l+freeblocki.size; tag1=1; for(j=0;jfreeblockj+1.startaddress) middata.startaddress=freeblockj.startaddress; middata.size=freeblockj.size; middata.state=freeblockj.state; freeblockj.startaddress=freeblockj+1.startaddress; freeblockj.size=freeblockj+1.size; freeblockj.state=freeblockj+1.stat
6、e; freeblockj+1.startaddress=middata.startaddress; freeblockj+1.size=middata.size; freeblockj+1.state=middata.state; if(freeblockj.state=0&freeblockj+1.state=1) middata.startaddress=freeblockj.startaddress; middata.size=freeblockj.size; middata.state=freeblockj.state; freeblockj.startaddress=freeblo
7、ckj+1.startaddress; freeblockj.size=freeblockj+1.size; freeblockj.state=freeblockj+1.state; freeblockj+1.startaddress=middata.startaddress; freeblockj+1.size=middata.size; freeblockj+1.state=middata.state;void print() int i; |-|n | start size state |n printf( | %3d %3d %3d |n, freeblocki.startaddres
8、s,freeblocki.size,freeblocki.state);void shouci() int applyarea,start,i,j; char end; getchar();n is there any job request memory? y or n: while(end=getchar()=y)at first the free memory is this: adjust(); print();input request memory size: scanf(applyarea); start=alloc(applyarea); if(start=-1) printf
9、(there is no fit memory,please waitnafter allocation,the free memory is this:jobs memory start address is:%dn,start);job size is:,applyarea);job is running.njob is terminated.n for(j=1;100000;j+); setfree(); adjust(); print();is there any job that is waiting? y/n: end=getchar();void xunhuan() int ap
10、plyarea,i=0,j; if(i=N-1) i=alloc2(applyarea,i); if(i=-1)i=0; else if(iN-1) if(i=-1) adjust(); print();void best() start=alloc3(applyarea);main() char s;chose one method : a首次适应 b循环首次 c最佳适应n s=getchar(); switch(s) casea: shouci();b xunhuan();c best(); default:printf(errorn运行结果:调试、编辑、运行程序,开始显示如图:输入a,选择进行首次适应,然后输入y显示空闲区,显示如图:再输入区间大小20,选择进行分配空间,作业开始运行,显示如图:输入空闲区的开始地址1000,空闲区大小30,显示如图:
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2