文档详情

短作业优先调度和时间片轮转调度算法.doc

发布:2017-06-09约6.38千字共10页下载文档
文本预览下载声明
实 验 报 告 学生姓名: 学 号: 指导教师: 一、实验室名称: 二、实验项目名称:进程调度算法的设计 三、实验原理: 短作业(进程)优先调度算法:短作业调度算法是从后备队列中选择一个或者若干个估计运行时间最短的作业,将他们调入内存运行。而短进程优先调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或者发生某事件而被阻塞放弃处理机时再重新调度。 时间片轮转法:系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的队尾;然后,再把处理机分配给就绪队列中的新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一个给定的时间内均能获得一时间片的处理机执行时间。 四、实验目的: 通过对进程调度算法的设计,深入理解进程调度的原理 五、实验内容: 1.编写程序实现SJ(P)F算法 2.编写程序实现RR算法 六、实验器材(设备、元器件): 装有VC++6.0的PC机一台 七、实验步骤: 1.打开VC,设计编写程序的源代码 2.编译运行程序的源代码 3.分析检验程序的结果是否正确 4.总结实验结果及结论 短进程优先调度源代码: #include stdio.h struct sjf{ char name[10]; float arrivetime; float servicetime; float starttime; float finishtime; float zztime; float dqzztime; }; sjf a[100]; void input(sjf *p,int N) { int i; printf(intput the processs name arrivetime servicetime:\nfor exmple: a 0 100\n); for(i=0;i=N-1;i++) { printf(input the %dth processs information:\n,i+1); scanf(%s%f%f,p[i].name,p[i].arrivetime,p[i].servicetime); } } void Print(sjf *p,float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N) {int k; printf(run order:); printf(%s,p[0].name); for(k=1;kN;k++) {printf(--%s,p[k].name); } printf(\nthe processs information:\n); printf(\nname\tarrive\tservice\tstart\tfinish\tzz\tdqzz\n); for(k=0;k=N-1;k++) { printf(%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n,p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime); } } //排序 void sort(sjf *p,int N) { for(int i=0;i=N-1;i++) for(int j=0;j=i;j++) if(p[i].arrivetimep[j].arrivetime) { sjf temp; temp=p[i]; p[i]=p[j]; p[j]=temp; } } //运行阶段 void deal(sjf *p, float arrivetime,float servicetime,float starttime,float finishtime,float zztime,float dqzztime,int N) { int k; for(k=0;k=N-1;k++)
显示全部
相似文档