资源描述:
《操作系统时间片论转调度算法》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、实验报告(一)1.程序代码:#include#include#defineN2//定义时间片typedefstructnode{charname[10];intcputime;intneedtime;charstate;//Wforwait,Rforrun,Fforfinishstructnode*next;}PCB;intn;//进程总数voidshow(PCB*pcb,PCB*pcb_rear)//显示某一队列中进程状况{PCB*p_show;p_show=pcb;while(
2、p_show!=pcb_rear){printf("%s%d%d%c",p_show->name,p_show->cputime,p_show->needtime,p_show->state);p_show=p_show->next;}printf("%s%d%d%c",p_show->name,p_show->cputime,p_show->needtime,p_show->state);}voidmain(){PCB*wait,*w_rear,*run,*r_rear,*finish,*f_rear;//三
3、个队列的首尾wait=NULL;w_rear=NULL;run=NULL;r_rear=NULL;finish=NULL;f_rear=NULL;//输入进程信息printf("输入进程数:");scanf("%d",&n);for(inti=1;i<=n;i++){PCB*p;p=(PCB*)malloc(sizeof(PCB));printf("输入第%d个进程名:",i);scanf("%s",&p->name);printf("输入进程所需cpu时间:");scanf("%d",&p->needtime);p-
4、>cputime=0;p->state='W';p->next=NULL;if(i==1){wait=p;w_rear=wait;}else{w_rear->next=p;w_rear=w_rear->next;}}//输出输入的进程信息printf("进程名占用CPU时间还需CPU时间进程状态");show(wait,w_rear);//第一批进程调入run队列//第一个进程进入run=wait;wait=wait->next;run->next=NULL;r_rear=run;r_rear->state='R'
5、;//剩下的进程进入for(inti1=1;i1<=N-1;i1++){if(wait!=NULL){r_rear->next=wait;r_rear=r_rear->next;wait=wait->next;r_rear->state='R';r_rear->next=run;}else{printf("已无就绪进程");break;}}printf("进程名占用CPU时间还需CPU时间进程状态");if(run!=NULL)show(run,r_rear);if(wait!=NULL)show(wait,w_r
6、ear);if(finish!=NULL)show(finish,f_rear);printf("*****************开始执行*****************");//执行时间片while(run!=NULL){if(run->needtime>0){run->cputime++;run->needtime--;run=run->next;r_rear=r_rear->next;}else//有进程执行完{run->state='F';//进程从run调出到finish,并从wait中调入一个进程/
7、/调出if(finish==NULL)//若finish为空{//finish=run;f_rear=finish;run=run->next;r_rear->next=run;f_rear->next=NULL;}else{f_rear->next=run;f_rear=f_rear->next;run=run->next;r_rear->next=run;f_rear->next=NULL;}//调入if(wait!=NULL){r_rear->next=wait;r_rear=r_rear->next;wait=
8、wait->next;r_rear->state='R';r_rear->next=run;}else{printf(":已无就绪进程");}}if(r_rear==r_rear->next&&r_rear->needtime==0){f_rear->next=run;f_rear=f_rear->next;f_rear->n