Loading...

文章背景图

进程调度算法

2025-12-09
37
-
- 分钟
|

先来先服务

思想:谁先来先服务谁

是否可抢占:否

优点:公平、实现简单

缺点:对短作业不利

是否导致饥饿:否

最短作业优先

思想:每次调度时选择当前已到达且运行时间最短的作业

是否可抢占:默认为非抢占,也有抢占式版本最短剩余时间优先算法

优点:“最短的”平均等待/周转时间

缺点:对长作业不利,可能导致饥饿

是否导致饥饿:是

最高响应比优先

响应比 = (等待时间 + 要求服务时间) / 要求服务时间

思想:每次调度时选择当前已到达的响应比最高的作业,由于“等待时间”在分子上,所以等待越久的越容易上处理机运行

是否可抢占:否

优点:是先来先服务和短作业优先的折中,综合考虑了等待时间和运行时间

缺点:/

是否导致饥饿:否

时间片轮转

思想:分配一个固定的时间片,每个进程轮流上处理机运行一个时间片的时间

是否可抢占:是

优点:公平、适用于分时系统

缺点:频繁切换有开销,不区分优先级

是否导致饥饿:否

优先级调度

思想:为每个作业设置一个优先级,调度时选择优先级最高的作业上处理机运行

是否可抢占:有抢占式的,也有非抢占式的(注意区别:抢占式的每次到达就绪队列时需要检查是否会发生抢占,非抢占式的只需要在进程主动放弃处理机时发生调度)

优点:区分优先级,适用于实时系统

缺点:可能导致饥饿

是否导致饥饿:是

多级反馈队列

思想:对其他调度算法的折中权衡,设置多级就绪队列,各队列优先级从高到低,时间片从小到大;进程到达式先进入1级队列,按先来先服务的原则排队等待分配时间片,若时间片用完还未结束,则进程进入下一级队尾,若此时已经在最下级队列,则会重新放回该队列队尾;只有第k级队列为空时,才会为k+1级队头的进程分配时间片

是否可抢占:是(在k级队列的进程运行的过程中,若更上一级的队列中进入一个新进程,则新进程将会抢占处理机,原进程放回k级队列队尾)

优点:平衡优秀

缺点:可能导致饥饿

是否导致饥饿:是

多级队列调度

思想:系统中按进程类型设置多个队列,进程创建成功后插入某个队列,每个就绪队列的优先级各不相同,各队列可以采取不同的调度策略,每次调度先选中某个队列,然后按该队列的调度策略选中某个进程上处理机

多处理机调度

两个解决目标:负载均衡、处理机亲和性(尽量让一个进程调度到同一个CPU上运行,以发挥CPU中缓存的作用)

方案一(公共就绪队列)

所有进程在一个公共的就绪队列上,每当一个CPU进行进程调度时,就从公共就绪队列里选择一个进程运行(每个CPU访问就绪队列时需要上锁,确保互斥)

优点:天然实现负载均衡

缺点:各个进程可能频繁切换CPU,亲和性不好

如何提升亲和性:软亲和(调度程序尽量保证亲和性),硬亲和(由用户进程通过系统调用,主动要求系统分配固定CPU)

方案二(私有就绪队列)

每个CPU拥有一个自己的私有就绪队列,每当一个CPU进行进程调度时,就从自己的私有就绪队列里选择一个进程运行

优点:天然实现处理机亲和性

缺点:负载均衡效果不如公共就绪队列

如何实现负载均衡:推迁移(一个特定的系统程序周期性检查各个CPU的负载,如果负载不平衡,就从忙碌的CPU的就绪队列中“推”一些就绪进程到空闲CPU的就绪队列),拉迁移(如果一个CPU的负载很低,就从其他高负载CPU的就绪队列中“拉”一些就绪进程到自己的就绪队列)

评论交流

文章目录