1、实验一 处理机调度一、实验目的和要求一、实验目的和要求n实验目的:实验目的:加深对进程、处理机调度的概念及进程调度各加深对进程、处理机调度的概念及进程调度各种算法(先来先服务、短作业优先、高响应比种算法(先来先服务、短作业优先、高响应比优先)的理解。优先)的理解。n实验要求:实验要求:要求用语言设计一个模拟单处理机系统下各要求用语言设计一个模拟单处理机系统下各种调度算法的思想。种调度算法的思想。要求各种算法均采用非抢占式的调度方式。要求各种算法均采用非抢占式的调度方式。二、实验主要内容二、实验主要内容n设计一个按先来先服务调度、按短作业优先调设计一个按先来先服务调度、按短作业优先调度和按高响应
2、比优先调度的算法要求:度和按高响应比优先调度的算法要求:输出进程的执行顺序输出进程的执行顺序输出算法的平均周转时间和平均带权周转输出算法的平均周转时间和平均带权周转时间时间三、实验原理三、实验原理(一)n先来先服务调度算法的基本思想是:每次调度先来先服务调度算法的基本思想是:每次调度是从就绪队列中,选择一个最先进入该队列的是从就绪队列中,选择一个最先进入该队列的进程,把处理机分配给它,使之投入运行。该进程,把处理机分配给它,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后,进程一直运行到完成或发生某事件而阻塞后,才放弃处理机。才放弃处理机。三、实验原理三、实验原理(二)n(非抢占)短作业
3、优先调度算法的基本思想是:(非抢占)短作业优先调度算法的基本思想是:从就绪队列中选出一估计运行时间最短的进程,从就绪队列中选出一估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时,到完成,或发生某事件而被阻塞放弃处理机时,再重新调度。再重新调度。三、实验原理三、实验原理(三)n(非抢占)高响应比优先调度算法的基本思想(非抢占)高响应比优先调度算法的基本思想是:从就绪队列中选出一个响应比最大的进程,是:从就绪队列中选出一个响应比最大的进程,将处理机分配给它,使它立即执行并一直执行将处理机分配给它,使它立
4、即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时,到完成,或发生某事件而被阻塞放弃处理机时,再重新调度。再重新调度。n响应比响应比=(等待时间(等待时间+服务时间)服务时间)/服务时间服务时间四、提示四、提示n进程或作业的描述:进程或作业的描述:用一个结构体变量来描述与进程或作业相关的信息,相当用一个结构体变量来描述与进程或作业相关的信息,相当于进程的于进程的 PCB或作业的或作业的JCB。相关信息主要有:进程名、到达时间、估计运行时间、开相关信息主要有:进程名、到达时间、估计运行时间、开始时间、完成时间、周转时间和带权周转时间和进程状态始时间、完成时间、周转时间和带权周转时间和进程状
5、态等。等。n到达时间和运行时间:可由设计者任意指定一个时间值。到达时间和运行时间:可由设计者任意指定一个时间值。n由于本实验只是模拟实验,所以对被选中的进程并不实际由于本实验只是模拟实验,所以对被选中的进程并不实际启动运行,而只是执行显示打印语句。启动运行,而只是执行显示打印语句。例如:下面是一个作业的数据结构struct ZuoYe float arriveTime;float runTime;float finishTime;float totalTime;float weightTotalTime;char*name;进程名到达时间运行时间开始时间完成时间周转时间P10303P21538
6、P322810P4331013先来先服务执行顺序:先来先服务执行顺序:P1、P2、P3、P4 第一进程:第一进程:作业的开始时间作业的开始时间=到达时间到达时间 作业的完成时间作业的完成时间=到达时间到达时间+运行时间运行时间 其余进程:其余进程:作业的开始时间作业的开始时间=上一个的完成时间上一个的完成时间 作业的完成时间作业的完成时间=上一个的完成时间上一个的完成时间+运行时间运行时间进程名到达时间运行时间开始时间完成时间周转时间P10303P215P322P433短作业优先执行顺序:短作业优先执行顺序:P1、P3、P4、P2如何排队?如何排队?当前作业的完成时间与后面所有作业的到达时间相
7、比,如果大于,当前作业的完成时间与后面所有作业的到达时间相比,如果大于,说明这些作业到达,则应求出这些作业中用时最短的作业作为当前作业说明这些作业到达,则应求出这些作业中用时最短的作业作为当前作业进程名到达时间运行时间开始时间完成时间周转时间P10303P32235P43358P215813排队算法步骤:排队算法步骤:1、按到达时间排序、按到达时间排序2、求当前进程完成后到达的进程数、求当前进程完成后到达的进程数M3、在当前进程的下一进程数、在当前进程的下一进程数M个进程中,找出到达时间最短的个进程中,找出到达时间最短的进程,与当前进程的下一进程进行交换。进程,与当前进程的下一进程进行交换。4
8、、重复、重复2,3FCFS主要代码主要代码:struct ZuoYe char*name;float arriveTime;float runTime;float finishTime;float totalTime;float weightTotalTime;void main()ZuoYe a3;float totalTimeSum=0,weightTotalTimeSum=0;for(int i=0;i=2;i+)char name6;cout作业名作业名:name;ai.name=new char(strlen(name);strcpy(ai.name,name);cout到达时间到达
9、时间:ai.arriveTime;cout运行时间运行时间:ai.runTime;for(i=0;i=2;i+)for(int j=0;j=i;j+)if(ai.arriveTimeaj.arriveTime)ZuoYe temp;temp=ai;ai=aj;aj=temp;for(int k=0;k=2;k+)if(k=0)ak.finishTime=ak.arriveTime+ak.runTime;else ak.finishTime=ak-1.finishTime+ak.runTime;ak.totalTime=ak.finishTime-ak.arriveTime;totalTimeS
10、um=totalTimeSum+ak.totalTime;ak.weightTotalTime=ak.totalTime/ak.runTime;weightTotalTimeSum=weightTotalTimeSum+ak.weightTotalTime;/SJF算法中如何挑选短作业算法中如何挑选短作业(确定执行顺序确定执行顺序)算法算法)int m=0;for(i=k+1;i=2;i+)if(ai.arriveTime=ak.finishTime)m+;float min=ak+1.runTime;int follow=k+1;for(int j=k+1;j=m+k;j+)if(aj.ru
11、nTimemin )min=aj.runTime;follow=j;ZuoYe temp;temp=ak+1;ak+1=afollow;afollow=temp;/高响应比优先调度算法中如何挑选作业(高响应比优先调度算法中如何挑选作业(确定执行顺序)确定执行顺序)算法算法 int m=0;for(i=k+1;i=2;i+)if(ai.arriveTime=ak.finishTime)m+;float max=(pk.finishTime-pk+1.arriveTime+pk+1.runTime)/pk+1.runTime;int follow=k+1;for(int j=k+1;kk+m;j+
12、)if(max(pk.finishTime-pj.arriveTime+pj.runTime)/pj.runTime)max=(pk.finishTime-pj.arriveTime+pj.runTime)/pj.runTime;follow=j;ZuoYe temp;temp=ak+1;ak+1=afollow;afollow=temp;五、实验报告要求五、实验报告要求n给出程序中使用的数据结构。给出程序中使用的数据结构。n给出源程序,源程序中要附有详细的注释。给出源程序,源程序中要附有详细的注释。n给出程序运行时的结果。给出程序运行时的结果。n总结收获体会及对该题解的改进意见和见解。总结收获体会及对该题解的改进意见和见解。