时间片轮转作业调度

时间片轮转作业调度

ID:39926383

大小:87.00 KB

页数:4页

时间:2019-07-15

时间片轮转作业调度_第1页
时间片轮转作业调度_第2页
时间片轮转作业调度_第3页
时间片轮转作业调度_第4页
资源描述:

《时间片轮转作业调度》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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;i

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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。