操作系统实验三 时间片轮转法完成进程调度

操作系统实验三 时间片轮转法完成进程调度

ID:38521976

大小:168.00 KB

页数:4页

时间:2019-06-14

操作系统实验三 时间片轮转法完成进程调度_第1页
操作系统实验三 时间片轮转法完成进程调度_第2页
操作系统实验三 时间片轮转法完成进程调度_第3页
操作系统实验三 时间片轮转法完成进程调度_第4页
资源描述:

《操作系统实验三 时间片轮转法完成进程调度》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验三:时间片轮转法完成进程调度一、实验目的:(1)加深对进程的理解(2)理解进程控制块的结构(3)理解进程运行的并发性(4)掌握时间片轮转法进程调度算法二、实验内容:(1)建立进程控制块(2)设计三个链队列,分别表示运行队列、就绪队列和完成队列(3)用户输入进程标识符以及进程所需的时间,申请空间存放进程PCB信息。(4)每一个时间片结束输出各进程的进程号,CPU时间(即已经占用的CPU时间),所需时间(即还需要的CPU时间),以及状态(即用W表示等待,R表示运行,F表示完成)三、实验程序:#include#include<

2、stdlib.h>#includetypedefstructnode{charname[10];/*进程标识符*/intprio;/*进程优先数*/intround;/*进程时间轮转时间片*/intcputime;/*进程占用CPU时间*/intneedtime;/*进程到完成还要的时间*/intcount;/*计数器*/charstate;/*进程的状态*/structnode*next;/*链指针*/}PCB;PCB*finish,*ready,*tail,*run;//队列指针intN,t;//进程数,时间片的大小v

3、oidfirstin(){run=ready;//就绪队列头指针赋值给运行头指针run->state='R';//进程状态变为运行态ready=ready->next;//就绪队列头指针后移到下一进程}voidprt1(chara)//输出标题函数{if(toupper(a)=='P')//优先级法printf("进程名占用CPU时间到完成还要的时间轮转时间片状态");}voidprt2(chara,PCB*q)//进程PCB输出{if(toupper(a)=='P')//优先级法的输出printf("%4s%8d%12d%14d%8c

4、n",q->name,q->cputime,q->needtime,q->round,q->state);}voidprt(charalgo)//输出函数{PCB*p;prt1(algo);//输出标题if(run!=NULL)//如果运行指针不空prt2(algo,run);//输出当前正在运行的PCBp=ready;//输出就绪队列PCBwhile(p!=NULL){prt2(algo,p);p=p->next;}p=finish;//输出完成队列的PCBwhile(p!=NULL){prt2(algo,p);p=p->next;}get

5、char();//按住任意键继续}voidinsert(PCB*q)//时间片轮转的插入算法{PCB*p1,*s,*r;s=q;//待插入的PCB指针p1=ready;//就绪队列头指针r=p1;//*r做pl的前驱指针while(p1!=NULL)if(p1->round<=s->round){r=p1;p1=p1->next;}if(r!=p1){r->next=s;s->next=p1;}else{s->next=p1;//否则插入在就绪队列的头ready=s;}}voidcreate(charalg)//时间片轮转法创建链表进程PCB

6、{PCB*p;inti,time;charna[10];ready=NULL;finish=NULL;run=NULL;printf("输入进程名及其需要运行的时间(中间以空格隔开):");for(i=1;i<=N;i++){p=newPCB;scanf("%s%d",&na,&time);strcpy(p->name,na);p->cputime=0;p->needtime=time;p->state='W';//进程的状态p->round=0;if(ready!=NULL)insert(p);else{p->next=ready;re

7、ady=p;}}printf("*************时间片轮转法进程调度过程*************");prt(alg);run=ready;ready=ready->next;run->state='R';}voidtimeslicecycle(charalg)//时间片轮转法{while(run!=NULL){run->cputime=run->cputime+t;//处理时间加trun->needtime=run->needtime-t;//完成需要时间减trun->round=run->round+t;//运行完将其变为

8、完成态,插入完成队列if(run->needtime<=0)//当进程完成时{run->next=finish;finish=run;run->state='F';

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

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

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