欢迎来到天天文库
浏览记录
ID:39926383
大小:87.00 KB
页数:4页
时间:2019-07-15
《时间片轮转作业调度》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include"stdio.h"#include"stdlib.h"#include"string.h"#include"conio.h"typedefstructQnode{charNAME[10];/*进程标识符*/intT;/*进程时间轮转时间片*/intCPUTIME;/*进程占用CPU时间*/intNEEDTIME;/*进程到完成还要的时间*/intcount;/*计数器*/charSTATE;/*进程的状态*/structQnode*next;/*链指针*/}PCB;PCB*finish,*ready,*rear,*run;/*队列指针ready又充当
2、队头指针rear又充当队尾指针,finish完成队列头指针*/intN;/*进程数*/#definem1/*为了程序具有可扩展性*/#definen4/*就绪态转变为运行态*/voidready1(){run=ready;/*就绪队列头指针赋值给运行头指针*/run->STATE='R';/*进程状态变为运行态*/ready=ready->next;/*就绪对列头指针后移到下一进程*/}/*显示函数*/voiddisplay(PCB*q){printf("%-10s%-10d%-10d%-7d%-7d%-c",q->NAME,q->CPUTIME,q->NEED
3、TIME,q->count,q->T,q->STATE);}/*输出函数*/voidoutput(){PCB*p;printf("NAMECPUTIMENEEDTIMEcountTSTATE");if(run!=NULL)/*如果运行指针不空*/display(run);/*输出当前正在运行的PCB*/p=ready;/*输出就绪队列PCB*/while(p!=NULL){display(p);/*显示ready队列*/p=p->next;}p=finish;/*输出完成队列的PCB*/while(p!=NULL){display(p);/*显示finish队列
4、*/p=p->next;}getch();/*按任意键继续,若不写此句则把结果一次性输出那样可读性不好*/}/*轮转法插入函数*/voidEnQueue(PCB*p1){rear->next=p1;/*将新的PCB插入在当前就绪队列的尾*/rear=p1;p1->next=NULL;}/*轮转法创建进程PCB*/voidcreate(){PCB*p;floatta=0.0;inti,t[n],time[n];charname[10];run=NULL;ready=NULL;finish=NULL;for(i=0;i5、B));printf("请输入作业名:");scanf("%s",name);printf("请输入运行所需的时间:");scanf("%d",&time[i]);printf("");strcpy(p->NAME,name);/*字符串复制函数*/p->CPUTIME=0;p->NEEDTIME=time[i];p->count=0;/*计数器已运行时间*/p->STATE='W';/*'W'等待标志*/p->T=m;/*时间片设为1*/if(ready!=NULL)EnQueue(p);else{p->next=ready;ready=p;rear=p;}p6、rintf("%s作业的周转时间:",name);t[i]=time[i]*N+i;printf("%d",t[i]);printf("");ta=ta+t[i];}printf("平均周转时间:%f",ta/N);printf("系统的吞吐量:%f",(float)N/t[0]);printf("");printf("作业执行顺序及状态");printf("************************************************");output();/*输出进程PCB信息*/ready1();}/*时间片轮转法7、*/voidTrun(){while(run!=NULL){run->CPUTIME++;run->NEEDTIME--;run->count++;if(run->NEEDTIME==0)/*运行完将其变为完成态,插入完成队列*/{run->next=finish;finish=run;run->STATE='F';run=NULL;if(ready!=NULL)ready1();/*就绪对列不空,将第一个进程投入运行*/}elseif(run->count==run->T)/*如果时间片到*/{if(ready!=NULL)/*如就绪队列不空*/{run->c
5、B));printf("请输入作业名:");scanf("%s",name);printf("请输入运行所需的时间:");scanf("%d",&time[i]);printf("");strcpy(p->NAME,name);/*字符串复制函数*/p->CPUTIME=0;p->NEEDTIME=time[i];p->count=0;/*计数器已运行时间*/p->STATE='W';/*'W'等待标志*/p->T=m;/*时间片设为1*/if(ready!=NULL)EnQueue(p);else{p->next=ready;ready=p;rear=p;}p
6、rintf("%s作业的周转时间:",name);t[i]=time[i]*N+i;printf("%d",t[i]);printf("");ta=ta+t[i];}printf("平均周转时间:%f",ta/N);printf("系统的吞吐量:%f",(float)N/t[0]);printf("");printf("作业执行顺序及状态");printf("************************************************");output();/*输出进程PCB信息*/ready1();}/*时间片轮转法
7、*/voidTrun(){while(run!=NULL){run->CPUTIME++;run->NEEDTIME--;run->count++;if(run->NEEDTIME==0)/*运行完将其变为完成态,插入完成队列*/{run->next=finish;finish=run;run->STATE='F';run=NULL;if(ready!=NULL)ready1();/*就绪对列不空,将第一个进程投入运行*/}elseif(run->count==run->T)/*如果时间片到*/{if(ready!=NULL)/*如就绪队列不空*/{run->c
此文档下载收益归作者所有