欢迎来到天天文库
浏览记录
ID:57430129
大小:17.50 KB
页数:7页
时间:2020-08-17
《进程调度算法实现代码(操作系统).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、进程调度算法实现//数据:进程,队列结构 //处理流程: //1初始化--进程队列结构(包括:就绪队列,等待队列,运行队列)等必要的数据结构init(); //2进入无限循环,反复调度队列 #defineMAX5 #include #include inttotal_time=20; inttime_slice=3; typedefstructprocess{ //进程控制块 charpname[10]; intWaitTime; intBurstTime; intpri
2、ority; //数字越小优先级越高 structprocess*next; }PROCESS; //typedefstructprocessPROCESS; PROCESS*in_queue(PROCESS*head,PROCESS*p); //声明 PROCESS*init() //进程初始化 { inti=0; chara; PROCESS*head_new; //队列的队头 head_new=(structprocess*)malloc(sizeof(structprocess)); if(!he
3、ad_new) exit(1); head_new=NULL; do { structprocess*s; printf("initializetheprocess:"); s=(structprocess*)malloc(sizeof(structprocess)); if(!s) exit(1); printf("pleaseinputthepname:WaitTime:BurstTime: priority:"); scanf("%c",&(s->pname)); scanf(
4、"%d",&(s->WaitTime)); scanf("%d",&(s->BurstTime)); scanf("%d",&(s->priority)); s->next=NULL; in_queue(head_new,s); i++; printf("douwanttoinsertprocessmore?? 'Y'or'N'"); printf("----------------------------------------'"); scanf("%c",&a); scanf("%c
5、",&a); //if(a=='Y'
6、
7、a=='y')continue; //elseif(a=='N'
8、
9、a=='n')break; }while((i10、11、a=='y')); return head_new; } /////////////////////////////////////////////////////////// PROCESS*in_queue(PROCESS*head,PROCESS*p) //入队函数 { if(head==NULL) { head=p; p->ne12、xt=NULL; } else { p->next=head; head=p; } // printf("theprocessinsertintothemothballqueue:"); return head; } ///////////////////////////////////////////////////////////// /* voidnew_queue() //后备队列 先来先服务方式进入就绪 { return*head_new; } */ PROCESS*FCFS_process() {13、 PROCESS*p,*q,*a; //a用来记录选中结点的前一个结点 q=p=init(); //这里是不是有个问题?? while(p->next!=NULL) { a=p; if(p->WaitTime>=q->WaitTime) { q=p; p=p->next; } } q->WaitTime--; if(q->WaitTime==0) //如果等待时间为0则把该进程从后备队列中移除 { a->next=p->next; free(p); } returnq; //选择等待时间最久14、的) } //////////////////////就绪队列,入口函数为就绪队列的头指针////////
10、
11、a=='y')); return head_new; } /////////////////////////////////////////////////////////// PROCESS*in_queue(PROCESS*head,PROCESS*p) //入队函数 { if(head==NULL) { head=p; p->ne
12、xt=NULL; } else { p->next=head; head=p; } // printf("theprocessinsertintothemothballqueue:"); return head; } ///////////////////////////////////////////////////////////// /* voidnew_queue() //后备队列 先来先服务方式进入就绪 { return*head_new; } */ PROCESS*FCFS_process() {
13、 PROCESS*p,*q,*a; //a用来记录选中结点的前一个结点 q=p=init(); //这里是不是有个问题?? while(p->next!=NULL) { a=p; if(p->WaitTime>=q->WaitTime) { q=p; p=p->next; } } q->WaitTime--; if(q->WaitTime==0) //如果等待时间为0则把该进程从后备队列中移除 { a->next=p->next; free(p); } returnq; //选择等待时间最久
14、的) } //////////////////////就绪队列,入口函数为就绪队列的头指针////////
此文档下载收益归作者所有