1、 否 就是 否首次适应算法:循环首次适应算法四、系统测试程序运行实例如下:输入界面,按要求输入:五、结论 作业采用数组形式进行存储,起初想用数组模拟分区,但划分记录比较不易,时间空间复杂度较大,容易混乱,遂决定用链表形式模拟分区情况。基本能运行符合要求,能模拟出动态分区过程及最终结果六.源程序#include stdlib、hiostream、hwindows、h#define Free 0#define Use 1#define MAX_length 100 /最大内存空间为100MB#define MaxNumber 100int FreePartitionMaxNumber=16,16,
2、8,32,64,32,8,16,64;/空闲分区int ProcessNeedMaxNumber=7,18,9,20,35,8;/每个进程需求int FirstPartitionMaxNumber;/首次int CycleFirstPartitionMaxNumber;/循环int PartitionNumber=9,ProcessNum=6;/空闲分区数及进程数bool v();bool v() int j; cout首次适应算法endl; / FirstPartitionMethod();for(int i=0;iProcessNum;i+)/进程 for(j=0;j=ProcessNee
3、di) FirstPartitioni =j; FreePartitionj-=ProcessNeedi; break; / c_out(FirstPartition); for(i=0;i+)FreePartitioni ; / Beginning(); FreePartition0=16; FreePartition1=16; FreePartition2=8; FreePartition3=32; FreePartition4=64; FreePartition5=32; FreePartition6=8; FreePartition7=16; FreePartition8=64;cou
4、t循环首次适应算法 /CycleFirstPartitionMethod(); j=0;i+)/进程 for(;)/分区 CycleFirstPartitioni=j; j+; j=j%PartitionNumber; /c_out(CycleFirstPartition);CycleFirstPartitioni0;x-) for(int y = 1000;yy-);/-/-初始化-DuLinkList InitpartitionList(DuLinkList &p) p=(DuLinkList)malloc(sizeof(DuLNode);/申请空间 if(! exit(0); p-siz
5、e=100; /初始化大小 printf(输入分区首地址:); scanf(%d,&p-start);state=0; /状态置空闲ID=0;next=NULL;prior=NULL; return p;/-/-输入函数-int Putin(int &n) int i; Job temp;请输入任务数目:n); a=(Job*)malloc(n*sizeof(Job); A=(Job*)malloc(n*sizeof(Job);n; printf(n信息输入:nn作业号: scanf(ai、num);作业大小:ai、size);作业进入时间:ai、ctime);作业运行时间:ai、rtime)
6、; ai、state=0; /默认状态为Free Ai = ai; for(int j = 0;j ai、ctime) temp = aj; aj = ai; ai = temp; /冒泡排序 freopen(data、txt,w,stdout); for (i = 0;i start,pl-ID,pl-size); if(pl-state = 0) printf(空闲 nstate = 1)已分配 n pl=pl-next;/-/-回收函数-void huishou(DuLinkList pl3,DuLinkList &pl)/pl3就是分区链表指针 pl头 while(pl3) if(pl
7、3-state=0) if(pl3-next&pl3-prior&prior-state=0&next-state=1)/ pl3-size+=pl3-size; pl3-start=pl3-start; if(pl3-prior) next=pl3;/pl3与最前一个prior=pl3-prior;/ else/pl3指向空 pl=pl3; pl3=pl;/pl3与头 else if(pl3-state=1)next) pl3-prior=pl3;/建立新链表pl3与最后一个结点next=pl3- pl3-/指向空 else if(!/pl3与最后start=pl- /pl3与最前 else
8、 pl3- pl=pl3; pl3=pl;size=pl3-size+pl3-/指向头 pl3=pl3-/-/-首次适应算法-void Firstfit(DuLinkList block_first,int n) int t=1; int num=n; while(t&num) DuLinkList pl1=block_first,pl2,pl3=block_first;时钟:%dn,t); DuLNode *p=block_first; DuLNode *q=block_first; for(int x=0;xx+) if(t=ax、ctime+ax、rtime) ax、state=2; f
9、or(int m=0;mID=am、num)/分区号等于作业号时 q-state=Free;/在作业完成时,作业号等于分区号时空闲 q=q- showJob(n); showPartition(block_first); for( m=0; if(am、ctime=t) am、state=1; printf(作业:%d开始运行,对其分配!,am、num); if(t=am、ctime) while(pl1&(pl1-state = 1|pl1-size if(pl1) pl2=(DuLinkList)malloc(sizeof(DuLNode); pl2-start=pl1-start+am、size;size=pl1-size-am、size; if(pl2-size5) pl1-size=am、size; pl
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1