CPU调度算法的模拟实现课程设计.docx
- 文档编号:1139884
- 上传时间:2022-10-17
- 格式:DOCX
- 页数:14
- 大小:19.58KB
CPU调度算法的模拟实现课程设计.docx
《CPU调度算法的模拟实现课程设计.docx》由会员分享,可在线阅读,更多相关《CPU调度算法的模拟实现课程设计.docx(14页珍藏版)》请在冰豆网上搜索。
CPU调度算法的模拟实现课程设计
设计1CPU调度算法的模拟实现
一、设计目的
1、深入理解CPU调度的四种算法:
先到先服务算法FCFS、非抢占最短作业优先算法SJF、可抢占优先权调度算法PRIOR、时间片轮转算法RRO
2、利用程序设计语言编写算法,模拟实现先到先服务算法FCFS、非抢占最短作业优先算法SJF、可抢占优先权调度算法PRIOR、时间片轮转算法RRo
3、针对模拟进程,利用CPU调度算法进行调度。
4、进行算法评价,计算平均周转时间和平均等待时间。
二、设计要求
1、调度所需的进程参数由输入产生:
采用手工输入参数或产生随机数的方法。
2、针对各个进程模拟算法,输出进程调度结果,包括执行算法的等待时间和周转时间。
3、根据调度结果对算法进行调试分析,纠正程序错误并对算法进行优化,总结并输出算法评价指标。
三、设计说明(含系统框图和(或)主要算法的流程图)
(1)优先权调度
#include"stdio.h"
#include"stdlib.h"
#defineN10
//#defineM10
typedefstruct
{
intm;
//intflag;
intpriority;//优先级顺序
floatzhixing;
floatzhouzhuan;
floatdq_zhouzhuan;
}process;
//intflag=0;//标志已经执行个进程的个数
//floattime=0;//当前共执行的时间
voidmain()
{
//intplag=0;
floattime=0;
intn;
inti,j,temp;
processfcfs[N],*p[N],*q;
floattime_zhouzhuan=0,wtime_zhouzhuan=0;
//输入
printf("请输入进程的个数:
");
scanf("%d",&n);
for(i=0;i { fcfs[i].m=i+1; //fcfs[i].linshi=0; //fcfs[i].flag=0; Printf("请输入进程%d所需的执行时间和进程的优先级: ",fcfs[i].m); scanf("%f%d",&fcfs[i].zhixing,&fcfs[i].priority); } Printf("haha"); for(i=0;i { p[i]=(process*)malloc(sizeof(process));//分配空间 P[i]=&fcfs[i]; } //按优先级别的排序 for(j=0;j { printf("ok");//有问题 temp=j; for(i=j+1;i { printf("ky"); if(p[i]->priority>p[temp]->priority) temp=i; } printf("#####"); q=p[j];//交换 p[j]=p[temp]; p[temp]=q; } printf("he"); //优先级算法 for(i=0;i {time+=p[i]->zhixing; p[i]->zhouzhuan=time;p[i]->dq_zhouzhuan=p[i]->zhouzhuan/p[i]->zhixing; } for(i=0;i { time_zhouzhuan+=p[i]->zhouzhuan;wtime_zhouzhuan+=p[i]->dq_zhouzhuan; }time_zhouzhuan/=n; wtime_zhouzhuan/=n; //输出结果 Printf("静态优先级算法的进程的执行顺序为: ∖n"); for(i=0;i { Printf("%d",P[i]->m); } Printf("∖n平均周转时间为%f",time_zhouzhuan); Printf("∖n带权平均周转时间为%f",wtime_zhouzhuan); } (2)FCFS和SJF综合 #include"stdio.h" #definegetjcb(tyPe)(tyPe*)malloc(sizeof(tyPe)) #defineNULL0 intn=0,time=0;floateti,ewi;structjcb{charname[10]; charstate; intts; floatsuper; inttb; inttc; floatti; floatwi; intntime; /*作业名*/ /*作业状态*/ /*提交时间*/ /*优先权*/ /*开始运行时间*/ /*完成时间*/ /*周转时间*/ /*带权周转时间*/ /*作业所需运行时间*/ charresource[10];/*所需资源*/ structjcb*link;/*结构体指针*/}*p,*q,*head=NULL; typedefstructjcbJCB;inital(){inti; printf("\nInputjcbnum\n");scanf("%d",&n); printf("Input\nname\tts\tntime\tresource\n");for(i=0;i p=getjcb(JCB); scanf("%s\t%d\t%d\t%s",&p->name,&p->ts,&p->ntime,&p->resource); p->state='W'; p->link=NULL; if(head==NULL)head=q=p; else{q->link=p;q=p;}}} fileinput(){ FILE*fp;inti; if((fp=fopen("os2.txt","r"))==NULL)printf("openerror! "); fscanf(fp,"%d\n",&n); for(i=0;i p=getjcb(JCB);scanf(fp,"%s%d%d%s",&p->name,&p->ts,&p->ntime,&p->resource); p->state='W'; p->link=NULL; if(head==NULL)head=q=p; else{q->link=p;q=p;}} fclose(fp);} voidprint(JCB*pr,intm){ JCB*p; printf("\ntime=%d",time); if(m==3){ printf("\nname\tstate\tts\tntime\tsuper\tsource\ttb\ttc\tti\twi\n"); printf("%s\t%c\t%d\t%d\t%4.2f\t%s\t%d\t%d\t%4.2f\t%4.2f\n", pr->name,pr->state,pr->ts,pr->ntime,pr->super,pr->resource,pr->tb,pr->tc,pr->ti,pr->wi);} else{printf("\nname\tstate\tts\tntime\tsource\ttb\ttc\tti\twi\n"); printf("%s\t%c\t%d\t%d\t%s\t%d\t%d\t%4.2f\t%4.2f\n", pr->name,pr->state,pr->ts,pr->ntime,pr->resource,pr->tb,pr->tc,pr->ti,pr->wi);} p=head; do{if(p->state=='W') if(m==3){printf("%s\t%c\t%d\t%d\t%4.2f\t%s\n",p->name,p->state,p->ts,p->ntime,p->super,p->resource);}else{printf("%s\t%c\t%d\t%d\t%s\n",p->name,p->state,p->ts,p->ntime,p->resource);}p=p->link; }while(p! =NULL); p=head; do{if(p->state=='F')if(m==3){ printf("%s\t%c\t%d\t%d\t%4.2f\t%s\t%d\t%d\t%4.2f\t%4.2f\n",p->name,p->state,p->ts,p->ntime,p->super,p->resource,p->tb,p->tc,p->ti,p->wi);}else{printf("%s\t%c\t%d\t%d\t%s\t%d\t%d\t%4.2f\t%4.2f\n", p->name,p->state,p->ts,p->ntime,p->resource,p->tb,p->tc,p->ti,p->wi);}p=p->link; }while(p! =NULL);}voidlast(){eti/=n;ewi/=n; printf("\neti=%7.3f\tewi=%7.3f\n",eti,ewi);} super(){ JCB*padv;padv=head;do{if(padv->state=='W'&&padv->ts<=time)padv->super=(float)(time-padv->ts+padv->ntime)/padv->ntime;padv=padv->link; }while(padv! =NULL);} voidhrn(m){ JCB*min; inti,iden; for(i=0;i p=min=head;iden=1; super(); do{if(p->state=='W'&&p->ts<=time) if(iden){min=p;iden=0;} elseif(p->super>min->super)min=p; p=p->link; }while(p! =NULL); if(iden){ i--;time++;printf("\ntime=%d: \tnoJCBsubmib...wait...",time); if(time>1000){printf("\nruntimeistoolong...error...");getch();}} else{running(min,m);}}} voidsjf(intm){ JCB*min; inti,iden; for(i=0;i p=min=head;iden=1; do{if(p->state=='W'&&p->ts<=time) if(iden){min=p;iden=0;} elseif(p->ntime p=p->link; }while(p! =NULL); if(iden){i--;printf("\ntime=%d: \tnoJCBsubmib...wait...",time);time++; if(time>100){printf("\nruntimeistoolong...error");getch();}} else{running(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CPU 调度 算法 模拟 实现 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)