决策模式
- 非抢占 : 一旦进程处于运行状态,它就会一直执行到终止,或者为等待I/O或请求某些操作系统服务而阻塞自己
- 抢占 : 当前正在运行的进程可能被操作系统中断并转移到就绪状态.
先来先服务(FCFS)
先来先服务(FCFS)是最简单非抢占的算法,也称为先进先出(Frist-In-Frist-Out, FIFO)或严格排队算法.当每个进程就绪后,加入就绪队列.当前进程停止执行时,就会运行就绪队列里存在时间最长的进程.
- FCFS执行长进程比执行短进程更好
- FCFS相对于收I/O限制的进程,更偏向受处理器限制的进程
- FCFS可能导致处理器和I/O设备都没有得到充分利用
- FCFS通常与优先级算法相结合,提供一种更有效的调度方法
轮转(RR)
轮转(RR)法是最简单的采用基于时钟的抢占算法,以一个周期性间隔产生时钟中断,中断发生时,当前正在运行的进程重新进入就绪队列,然后再基于FCFS算法选择下一个就绪进程运行.这种技术也被称为时间片,所以每个进程在被抢占前都给定一片时间.
- 避免使用过短和过长的时间片
- 轮转法在通用的分时系统或事物处理系统中都特别有效
- 对受处理器限制的进程倾向于不公平的使用了大部分处理时间,从而导致受I/O限制的进程性能降低,使用I/O设备低效,响应时间的变化大
最短进程优先(SPN)
最短进程优先(SPN)算法是一个非抢占算法,它每次从就绪队列里选择所需处理时间最短的进程运行.所以短进程会越过长进程,调到队头.
- 整体性能有显著的提高
- 响应时间的差别也增加了,特别是对于长进程的情况
- 可预测性降低
- 需要知道或至少需要估计每个进程所需要的处理时间
- 只要持续不断地提供短进程,长进程就有可能饿死
- 缺少抢占机制,对分时系统或事物处理环境仍然不理想
最短剩余时间(SRT)
最短剩余时间(SRT)是针对SPN增加了抢占机制的版本.调度器总是选择预期剩余时间最短的进程,一个新进程加入到就绪队列时,它可能比当前正在运行的进程具有更短的剩余时间,所以调度器就会抢占当前正在运行的进程.
- 和SPN一样,调度器在执行选择函数时必须处理时间的估计,
- 长进程存在饿死的危险
- SRT比SPN有更好的性能
最高响应比优先(HRRN)
R=w+ss R = \frac {w + s} {s} R=sw+s
其中,
- R : 响应比
- w : 等待处理器的时间
- s : 期待的服务时间
如果进程能立刻被调度,则R等于标准的周转时间.R的最小值为1.0,只有第一个进入系统的进程才能达到该值.
最高响应比优先的调度规则:在当前进程完成或被阻塞时,选择R值最大的就绪进程.当偏向短进程是,长进程由于得不到服务时间而不断增加,从而增大了比值,最终在竞争中胜了短进程.
- 需要估计期待的服务时间
反馈
如果没有关于各个进程的相对程度的任何信息,则SPN,SRT,HRRN都不能使用,这时候就需要反馈调度机制,调度基于抢占原则并且使用动态优先机制.当一个进程第一次进入系统时,它被放置在优先级最高的队列里,当他运行时,被抢占后并返回就绪状态时,它被降级到下一个低优先级的对俄中,之后,每当它被抢占时,都会降级到下一个优先级队列中,知道优先级最低的队列,它便不可降级,会重复回到当前队列直到运行结束.每一个优先级队列中都使用FCFS机制.
- 长进程的周转时间可能惊人的增加,甚至饿死
各种调度算法的特点
调度算法 | 选择函数 | 决策模式 | 吞吐量 | 响应时间 | 开销 | 对进程的影响 | 饿死 |
---|---|---|---|---|---|---|---|
FCFS | max[w] max[w] max[w] | 非抢占 | 不强调 | 可能很高,特别是当进程的执行时间差别很大时 | 最小 | 对短时间进程不利;对受I/O限制的进程不利 | 无 |
轮转 | 常数 | 抢占(在时间段内完成时) | 根据时间片,吞吐量会很低 | 为短进程提供好的响应时间 | 最小 | 公平对待 | 无 |
SPN | min[s]min[s]min[s] | 非抢占 | 高 | 为短进程提供好的响应时间 | 可能比较高 | 对长时间进程不利 | 可能 |
SRT | min[s−e]min[s - e]min[s−e] | 抢占(在到达时) | 高 | 提供好的响应时间 | 可能比较高 | 对长进程不利 | 可能 |
HRRN | max(w+ss)max(\frac {w + s} {s})max(sw+s) | 非抢占 | 高 | 提供好的响应时间 | 可能比较高 | 很好的平衡 | 无 |
反馈 | (参见上文) | 抢占(在时间段用完时) | 不强调 | 不强调 | 可能比较高 | 可能对受I/O限制的进程有利 | 可能 |
- w : 花费的等待时间
- e : 到现在为止,花费的执行时间
- s : 进程所需要的总服务时间,包括e