先来先服务
思想:谁先来先服务谁
是否可抢占:否
优点:公平、实现简单
缺点:对短作业不利
是否导致饥饿:否
最短作业优先
思想:每次调度时选择当前已到达且运行时间最短的作业
是否可抢占:默认为非抢占,也有抢占式版本最短剩余时间优先算法
优点:“最短的”平均等待/周转时间
缺点:对长作业不利,可能导致饥饿
是否导致饥饿:是
最高响应比优先
响应比 = (等待时间 + 要求服务时间) / 要求服务时间
思想:每次调度时选择当前已到达的响应比最高的作业,由于“等待时间”在分子上,所以等待越久的越容易上处理机运行
是否可抢占:否
优点:是先来先服务和短作业优先的折中,综合考虑了等待时间和运行时间
缺点:/
是否导致饥饿:否
时间片轮转
思想:分配一个固定的时间片,每个进程轮流上处理机运行一个时间片的时间
是否可抢占:是
优点:公平、适用于分时系统
缺点:频繁切换有开销,不区分优先级
是否导致饥饿:否
优先级调度
思想:为每个作业设置一个优先级,调度时选择优先级最高的作业上处理机运行
是否可抢占:有抢占式的,也有非抢占式的(注意区别:抢占式的每次到达就绪队列时需要检查是否会发生抢占,非抢占式的只需要在进程主动放弃处理机时发生调度)
优点:区分优先级,适用于实时系统
缺点:可能导致饥饿
是否导致饥饿:是
多级反馈队列
思想:对其他调度算法的折中权衡,设置多级就绪队列,各队列优先级从高到低,时间片从小到大;进程到达式先进入1级队列,按先来先服务的原则排队等待分配时间片,若时间片用完还未结束,则进程进入下一级队尾,若此时已经在最下级队列,则会重新放回该队列队尾;只有第k级队列为空时,才会为k+1级队头的进程分配时间片
是否可抢占:是(在k级队列的进程运行的过程中,若更上一级的队列中进入一个新进程,则新进程将会抢占处理机,原进程放回k级队列队尾)
优点:平衡优秀
缺点:可能导致饥饿
是否导致饥饿:是
多级队列调度
思想:系统中按进程类型设置多个队列,进程创建成功后插入某个队列,每个就绪队列的优先级各不相同,各队列可以采取不同的调度策略,每次调度先选中某个队列,然后按该队列的调度策略选中某个进程上处理机
多处理机调度
两个解决目标:负载均衡、处理机亲和性(尽量让一个进程调度到同一个CPU上运行,以发挥CPU中缓存的作用)
方案一(公共就绪队列)
所有进程在一个公共的就绪队列上,每当一个CPU进行进程调度时,就从公共就绪队列里选择一个进程运行(每个CPU访问就绪队列时需要上锁,确保互斥)
优点:天然实现负载均衡
缺点:各个进程可能频繁切换CPU,亲和性不好
如何提升亲和性:软亲和(调度程序尽量保证亲和性),硬亲和(由用户进程通过系统调用,主动要求系统分配固定CPU)
方案二(私有就绪队列)
每个CPU拥有一个自己的私有就绪队列,每当一个CPU进行进程调度时,就从自己的私有就绪队列里选择一个进程运行
优点:天然实现处理机亲和性
缺点:负载均衡效果不如公共就绪队列
如何实现负载均衡:推迁移(一个特定的系统程序周期性检查各个CPU的负载,如果负载不平衡,就从忙碌的CPU的就绪队列中“推”一些就绪进程到空闲CPU的就绪队列),拉迁移(如果一个CPU的负载很低,就从其他高负载CPU的就绪队列中“拉”一些就绪进程到自己的就绪队列)