欢迎来到天天文库
浏览记录
ID:41120265
大小:108.50 KB
页数:7页
时间:2019-08-16
《时间片算法 编译原理》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、//夏国峰E01014130时间片算法#include#include#definegetpch(type)(type*)malloc(sizeof(type))structpcb{charname[10];charstate;intntime;intrtime;structpcb*link;}*ready=NULL,*p;//结构体typedefstructpcbPCB;intstart;voidsort(){PCB*end,*recent;intinlist=0;if(ready==NULL){ready=p;
2、}else{recent=ready;end=recent->link;while(end!=NULL){recent=recent->link;end=end->link;}if(end==NULL)recent->link=p;}}voidinput()//进程输入函数{inti,num;printf("Pleaseinputthenumberofprocesses:");scanf("%d",&num);//定义进程个数numfor(i=0;i3、tructpcb);printf("Inputthenameoftheprocess:");scanf("%s",p->name);printf("Inputtherunningtimeoftheprocess:");scanf("%d",&p->ntime);printf("");p->rtime=0;p->state='w';//进程就绪状态p->link=NULL;sort();}}intspace()//统计链表中的进程数{intl=0;PCB*pr=ready;while(pr!=NULL){l++;//用于记录链表中的进程数pr4、=pr->link;}return(l);}voiddisp(PCB*pr)//打印显示当前正在执行的进程的相关信息{printf("qnametstatetndtimetruntime");printf("5、%st",pr->name);printf("6、%ct",pr->state);printf("7、%dt",pr->ntime);printf("8、%dt",pr->rtime);printf("");}voidcheck(){PCB*pr;printf("*********Thecurrentrunningproc9、essis:%s",p->name);disp(p);pr=ready;//记住表头进程printf("*********ThestateoftheWaitingList:");while(pr!=NULL)//打印出剩余的所有进程的相关信息{disp(pr);pr=pr->link;}if(pr==NULL)printf("Nowaitingprocess!");}voiddestroy()//打印进程执行信息提示{printf("Process[%s]hasfinished.",p->name);free(p);//释放10、临时变量p的内存空间}voidrunning(){(p->rtime)++;if(p->rtime==p->ntime)destroy();else{p->state='w';sort();//重新插入链表}}voidMenu(){charmenu;printf("**菜单选择**");printf("**1:ENTERSIMULATE**");printf("**2:QUITPROCESS**");printf("Pleaseinputyourchoice!");scanf("%c",&menu);switch(menu)//菜单选项11、{case'1':start=1;system("cls");printf("***MODEOFSIMILATE!******时间片进程调度***");break;case'2':exit(0);break;default:exit(0);break;}}voidmain(){intlen,h=0;charch;Menu();if(start==1){input();len=space();while((len!=0)&&(ready!=NULL)){ch=getchar();h++;printf("Theexecutenumber:%12、d",h);p=ready;ready=p->link;p->link=NULL;p->s
3、tructpcb);printf("Inputthenameoftheprocess:");scanf("%s",p->name);printf("Inputtherunningtimeoftheprocess:");scanf("%d",&p->ntime);printf("");p->rtime=0;p->state='w';//进程就绪状态p->link=NULL;sort();}}intspace()//统计链表中的进程数{intl=0;PCB*pr=ready;while(pr!=NULL){l++;//用于记录链表中的进程数pr
4、=pr->link;}return(l);}voiddisp(PCB*pr)//打印显示当前正在执行的进程的相关信息{printf("qnametstatetndtimetruntime");printf("
5、%st",pr->name);printf("
6、%ct",pr->state);printf("
7、%dt",pr->ntime);printf("
8、%dt",pr->rtime);printf("");}voidcheck(){PCB*pr;printf("*********Thecurrentrunningproc
9、essis:%s",p->name);disp(p);pr=ready;//记住表头进程printf("*********ThestateoftheWaitingList:");while(pr!=NULL)//打印出剩余的所有进程的相关信息{disp(pr);pr=pr->link;}if(pr==NULL)printf("Nowaitingprocess!");}voiddestroy()//打印进程执行信息提示{printf("Process[%s]hasfinished.",p->name);free(p);//释放
10、临时变量p的内存空间}voidrunning(){(p->rtime)++;if(p->rtime==p->ntime)destroy();else{p->state='w';sort();//重新插入链表}}voidMenu(){charmenu;printf("**菜单选择**");printf("**1:ENTERSIMULATE**");printf("**2:QUITPROCESS**");printf("Pleaseinputyourchoice!");scanf("%c",&menu);switch(menu)//菜单选项
11、{case'1':start=1;system("cls");printf("***MODEOFSIMILATE!******时间片进程调度***");break;case'2':exit(0);break;default:exit(0);break;}}voidmain(){intlen,h=0;charch;Menu();if(start==1){input();len=space();while((len!=0)&&(ready!=NULL)){ch=getchar();h++;printf("Theexecutenumber:%
12、d",h);p=ready;ready=p->link;p->link=NULL;p->s
此文档下载收益归作者所有