调度算法FCFS、SJF和优先权调度的介绍和例题
调度算法
一、先来先服务FCFS (First Come First Serve)
1.思想:
选择最先进入后备/就绪队列的作业/进程,入主存/分配CPU
2.优缺点
优点:对所有作业/进程公平,算法简单稳定
缺点:不够灵活,对紧急进程的优先处理权限不够,在相同时限下处理任务数量可能更少
二、短作业优先SJF (Shortest Job First)
1.思想:
可分为抢占式和非抢占式(执行时间越短,优先级越高)
抢占式优先权,若队列后续作业/进程的优先级更高,则它抢占CPU资源,之前运行的作业/进程暂停,开始执行优先级更高的作业/进程,总结就是当前在CPU中的作业/进程总是执行时间最短,能够最快完成的
非抢占式优先权,若当前CPU中已经有正在执行的作业/进程,则不会打断其执行过程,当后备队列中有多个进程时,下一个会先执行优先级高的作业/进程,入主存/分配CPU,总结就是下一个执行的作业/进程总是在后备队列中执行时间最短的
2.优缺点
优点:灵活性高,相同时限下能处理更多的任务
缺点:不够稳定,算法更复杂
PS:优先级调度算法与此算法类似,只不过额外指明了作业/进程的优先级以确定执行先后顺序,在此不再赘述
三、举例
周转时间 = 完成时刻 - 进入时刻
等待时间 = 完成时刻 - (进入时刻 + 执行时间)
1.FCFS
调度顺序:P1 -> P2 -> P3 -> P4
画个Gantt图助于理解
下方为不同进程进入队列次序及时间,上方为CPU中进程执行顺序表
平均周转时间:Ta = (8 + 11 + 19 + 23) / 4 = 15.25s
平均等待时间:Tw = (0 + 7 + 10 + 18) / 4 = 8.75s
2.抢占式优先权调度
调度顺序:P1 -> P2 -> P4 -> P2 -> P3 -> P1
平均周转时间:Ta = (26 + 9 + 17 + 5) / 4 = 14.25s
平均等待时间:Tw = (18 + 5 + 8 + 0) / 4 = 7.75s
3.非抢占式SJF
调度顺序:P1 -> P2 -> P4 -> P3
平均周转时间:Ta = (8 + 11 + 24 + 14) / 4 = 14.25s
平均等待时间:Tw = (0 + 7 + 15 + 9) / 4 = 7.75s