面试题:说一说进程调度算法有哪些?
针对该面试题,我在这里谈谈自己的理解与看法,如有错误或模糊的地方,还请多多包涵与指正🤤~
什么是进程调度?
进程调度算法有哪些?
先到先服务算法(FIFS)、最短作业优先(SJF)、优先级调度、轮旋调度(又称旋转罗宾法、RR调度)、多级队列调度、多级队列反馈调度
1.先到先服务(FIFS)
- 优点:实现简单、易理解;公平性
- 缺点:平均等待时间往往很长
2.最短作业优先(SJF)
- 优点:平均等待时间短
- 缺点:公平性不足,容易导致饿死现象的产生(由于每次都优先服务作业时间最短的进程,这会导致作业时间长的进程一直在等待,永远无法得到服务)
最短作业优先可以分为抢占式和非抢占式两种
- 优点:平均等待时间比非抢占式要短。
- 缺点:上下文切换频繁,花费更多的时间用于上下文切换。
- 优点:相对于抢占式而言,上下文切换的次数要少。
- 缺点:平均等待时间一般而言要比抢占式的长。
3.优先级调度
- 缺点:优先级调度算法容易导致无穷阻塞(即饿死)的现象出现,即优先级低的进程可能永远也无法得到执行。为了解决这一问题,老化技术(逐渐增加在系统中等待很长时间的进程的优先级)是一种方案。
4.轮旋调度(RR调度)
RR调度是一种抢占式调度。轮流按就绪队列的顺序为每一个进程分配时间片,当一个正在执行的进程的时间片用完了,那么将该进程放回就绪队列中,并从就绪队列中换上另一个进程,为其分配时间片。
- 优点:保证了公平性;且每一个进程在一个时间段上都能得到执行。
- 缺点:平均等待时间较长。
时间片大小的选取决定了该算法性能的高低:如果时间片很大,那么RR算法近似于FIFS算法;如果时间片很小,那么系统将花费大量的时间用于上下文切换,效率很低;大多数进程都能在一个时间片内执行完成是我们想要追求的目标。
一般而言,80%的进程的cpu执行时间应该小于时间片。
5.多级队列调度
将进程分成不同的队列,每一个队列内有各自的算法,每个队列间有不同的优先级。一般将进程分为前台进程(优先级高)和后台进程两个队列。队列间的调度算法有两种:固定优先级抢占式调度(当前台进程队列为空时才调度后台进程执行);队列间划分时间片(每个队列有一定比例的cpu时间)。
6.多级队列反馈调度
在多级队列调度的基础上,允许进程在队列间进行迁移。(如果进程使用过多的cpu时间,那么它会被移到更低的优先级队列,即不会让某一个进程一直长时间地执行;如果进程在较低优先级队列中等待时间过长,那么会把它放到更高优先级的队列,以防止饿死现象的出现)