电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

操作系统-进程调度实验VIP免费

操作系统-进程调度实验_第1页
1/18
操作系统-进程调度实验_第2页
2/18
操作系统-进程调度实验_第3页
3/18
实验五进程调度模拟实验//进程调度算法proc.c#include#include#includetypedefstructpcb//定义PCB结构{charname[20];/*进程标识符*/intcputime;/*进程占用CPU时间*/intprio;/*进程优先数*/intneedtime;/*进程到完成还需要的CPU时间*/structpcb*next;/*链指针*/}PCB;PCB*RUN,*READY,*RTAIL,*FINSH,*FTAIL;voidPRINTLINK(intt)/*输出3个队列*/PCB*p;printf("CPU运行次数:___%d___\n",t);printf("\n");printf("进程名\t运行状态\t运行次数\t还需要运行次数\n");if(RUN!=NULL){printf("%s\t运行\t%d\t%d\n",RUN->name,RUN->cputime,RUN->needtime);}elseprintf("*运行状态为空\n");p=READY;if(p!=NULL){while(p!=NULL){printf("%s\t就绪\t%d\t%d\n",p->name,p->cputime,p->needtime);p=p->next;}}elseprintf("*就绪队列为空\n");p=FINSH;if(p!=NULL){while(p!=NULL){//printf(”进程名字为:%s\n",p->name);printf("%s\t完成\t%d\t%d\n",p->name,p->cputime,p->needtime);p=p->next;}}elseprintf("*完成队列为空\n");getchar();}PCB*CPCBLINK()/*建立就绪队列*/{printf("建立就绪队列\n\n");inti,n,nt,pr;PCB*p,*q,*head;n=0;while(1){printf("请输入进程的个数(有效范围1-100):");scanf("%d",&n);printf("\n");if(n>=1&&n<=100)break;elseprintf("输入有误。请重新输入!\n");getchar();}head=(structpcb*)malloc(sizeof(structpcb));printf("输入第1个进程的名称:");scanf("%s",head->name);while(1){printf("需要的运行时间:");scanf("%d",&nt);if(nt>0)break;else{printf("输入无效,重新输入!\n");getchar();}}head->needtime=nt;printf("优先数:");scanf("%d",&pr);head->prio=pr;head->cputime=O;/*进程已获得的运行时间*/head->next=NULL;q=head;for(i=1;iname);printf(嚅要的运行时间:");scanf("%d",&nt);p->needtime=nt;printf(”优先数:");scanf("%d",&pr);p->prio=pr;p->cputime=O;/*进程已获得的运行时间*/p->next=NULL;q->next=p;q=p;}RTAIL=q;returnhead;}voidJXDLPX()/*就绪队列按优先级从大到小排序*/{PCB*p,*q,*t;chars[10];intL=0,ct,pr,nt;p=READY;t=(structpcb*)malloc(sizeof(structpcb));while(p->next!=NULL){L=0;q=p->next;t=p;while(q!=NULL){if(t->prioprio){t=q;L=1;/*表示有比它优先级大的进程*/}q=q->next;q=q->next;}voidYXS()/*调用优先数调度算法*/{PCB*p;intt=0,nt,ct,pr;printf(”您选择的是:优先级调度算法\n");READY=CPCBLINK();/*建立就绪队列*/p=(structpcb*)malloc(sizeof(structpcb));while(READY!=NULL){JXDLPX();/*就绪队列按优先级从大到小排序*/p=READY;READY=READY->next;p->next=NULL;pr=p->prio;pr=pr-3;p->prio=pr;/*运行1次进程优先级缩小3*/nt=p->needtime;nt=nt-1;p->needtime=nt;ct=p->cputime;ct=ct+1;p->cputime=ct;RUN=p;PRINTLINK(t);/*输出3个队列*/if(RUN->needtime<=0)/*若运行结束进入完成队列*/{if(FINSH==NULL)/*第1次进入完成队列*/{FINSH=p;FTAIL=p;}else{FTAIL->next=p;FTAIL=FTAIL->next;}RUN=NULL;}else/*若运行没结束进入就绪队列*/{if(READY==NULL)/*当就绪队列为空*/{READY=p;RTAIL=p;}else{RTAIL->next=p;RTAIL=p;}RUN=NULL;}t++;}}voidSJP()/*调用时间片循环轮转算法*/{PCB*p;printf("您选择的是:时间片循环轮转调度算法\n");intt=0,nt,ct;READY=CPCBLINK();/*建立就绪队列*/p=(structpcb*)malloc(sizeof(structpcb));while(READY!=NULL){p=READY;READY=READY->next;p->next=NULL;nt=p->needtime;nt=nt-2;if(nt<0)nt=0;p->needtime=nt;ct=p->cputime;ct=ct+2;p->cputime=ct;RUN=p;PRINTLINK(t);/*输出3个队列*/if(RUN->needtime<=0)/*若运行结束进入完成队列*/{if(FINSH==NULL)/*第1次进入完成队列*/{FINSH=p;FTAIL=p;}else{FTAIL->next=p;FTAIL=FTAIL->next;}RUN=NULL;}else/*若运行没结束进入就绪队列*/{if(READY==NULL)/*当就绪队列为空*/{READY=...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

操作系统-进程调度实验

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部