1、一、实验设计题目调度算法,要求用先来先服务(FCFS)和段作业优先(SJF)算法实现。二、设计思路1、先来先服务调度算法(FCFS )先来先服务调度算法是一种简单的调度算法,该算法可以用于作业调度也可以用于进程调度。作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程中采用先来先服务算法时,每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。该算法有利于常作业而不利于短作业。2、短作业优先调度算法(SJF )短
2、作业优先算法是针对短作业或短进程优先调度的算法,可以用用于作业调度也可以用于进程调度。短作业优先算法是从后备队列中选择一个或多个估计运行时间较短的作业将它们调入内存中运行。而短进程优先调度算法则是在后备队列中选择一个估计运行时间最短的进程,将处理机分配给它使他立即执行并一直执行到完成,或发生某事件而阻塞后才放弃处理机时再从新调度。3、 数据结构和主要函数说明#include #include #define SIZE 4 /定义作业数为 4struct Job_type /作业的结构体/作业结构依次是:作业名 到达时间 运行时间/ 1 0 66/ 2 1 100/ 3 2 88/ 4 3 10
3、0/以数组形式保存如下Job_type job=1,0,66,2,1,100,3,2,88,4,3,100; load(); /调用载入函数fcfs(); /调用先来先服务的函数sjf(); /调用短作业优先调度函数四、源程序及运行结果代码#include #include #define SIZE 4 /定义作业数为 4struct Job_type /作业的结构体int no; /作业号int tb; /作业开始时间int tr; /运行时间 x;/作业结构依次是:作业名 到达时间 运行时间/ 1 0 66/ 2 1 100/ 3 2 88/ 4 3 100/以数组形式保存如下Job_ty
4、pe job=1,0,66,2,1,100,3,2,88,4,3,100; void load() int i;printf(“输入作业名称:n“);for(i=0;ijobj.tb) / i 作业的 tb 大于 j 作业的 tb,则 i 和 j 调换位置x=jobi;jobi=jobj;jobj=x;printf(“FCFS 调度结果:n“);printf(“开始时间 作业号 到达时间 运行时间 完成时间 等待时间 周转时间n“);for(i=0;ijobj.tr) /i 作业的 tr 大于 j 作业的 tr,则调换位置x=jobi;jobi=jobj;jobj=x;printf(“短作业优
5、先调度结果:n“);printf(“开始时间 作业号 到达时间 运行时间 总时间等待时间n“);for(i=0;iSIZE;i+) /计算每个作业的各个时间printf(“ %d“,t); /t 为上一个作业的总时间t=t+jobi.tr; /i 的总时间为上一个作业的总时间加上 i 作业的运行时间tw=t-jobi.tb-jobi.tr; /i 作业等待时间=i 的总时间-i 作业的运行时间printf(“t%dt%dt%dt%dt%dn“,jobi.no,jobi.tb,jobi.tr,t,tw); /对应输出void main()load(); /调用载入函数fcfs(); /调用先来先服务的函数sjf(); /调用短作业优先调度函数运行结果截图五、实验总结经过本次实验后,在操作系统上比较深刻的认识到什么是作业调度,什么是先来先服务,什么是段作业优先算法,及其一些进程调度的算法和作用。由于第一次接触这些东西,一开始不太了解,在做的过程中还是遇到了很多问题,但还是一一解决了,让我学到了不少东西。对于处理机与死锁的了解已经不是模糊的状态,对与作业调度的理解更加深刻。在心态方面也知道,不能小看一切自以为很简单的东西,再简单也要认真对待,否则等待你的将会是一大堆忙烦和错误。对于困难并不是不能解决,而是愿不愿意解决,肯不肯花费时间的精力进去。