1.主要调度准则
面向用户:
周转时间——指一个进程从提交到完成之间的时间间隔。
响应时间——对于一个交互进程来说,这是指从提交一个请求到开始接受响应之间的时间间隔。通常进程处理该请求的同时,就开始给用户一些输出。因此从用户的角度看,相对于周转时间这是一种更好的度量。
面向处理器:
吞吐量——调度策略应该试图使得每一个时间单位完成的进程数目达到最大。(注意这里的吞吐量与CPU吞吐量的含义不同)
处理器利用率——这是处理器忙的时间百分比。对于昂贵的系统来说这是一个重要的准则。在单用户系统和其他的一些系统中,该准则与其他准则相比显得不太重要。
还用一些不是面向性能的调度准则是:可预测性、公平性、强制优先级、平衡资源。
2.各类调度策略
在选择调度策略的时候先要选择决策模式分为不可抢占和抢占策略,与不可抢占策略相比,抢占策略可能会导致较大的开销,但是可能会对所有进程提供较好的服务。
另外最为基本的策略就是优先级策略!!
2.1先来先服务(FCFS)
先来先服务策略比较简单,开销小,但是有两个缺点:①对短进程不利,因为当短进程在长进程之后到达的话,那么短进程将等待很长一段时间,使得归一化等待时间(周转时间/服务时间)较大。②同理FCFS不利于I/O密集型进程,因为一般I/O密集型进程所需要的处理器时间较短(所以I/O密集型进程应该优先服务,这样才能更好地利用外设)。
2.2轮转(抢占)
为了减少在FCFS策略下短作业的不利情况,一种简单的方法是采用基于时钟的抢占策略,在这类方法中,最简单的就是轮转算法。
对于轮转算法,最主要的设计问题是使用的时间片的长度。如果这个长度设计得比较短,则短作业会相对比较快地通过系统。另一方面,处理时钟中断、执行调度和分派函数都需要处理器开销。因此应避免使用过短的时间片。一个有用的思想是时间片最好略大于一次典型的交互需要的时间。如果小于这个时间,那么大多数进程都需要至少两个时间片。另外,当一个时间片比运行时间最长的进程还要长时,轮转算法退化成FCFS。
轮转算法的缺点是,对I/O密集型进程不利,由于同等对待I/O密集型进程和处理器密集型进程,处理器密集型进程会占用大部分处理器时间,从而导致I/O密集型进程性能降低、使用I/O设备低效、响应时间的变化大。
有一种改进的轮转算法,该算法使得就绪队列分为两个,一个是普通的就绪队列,一个是辅助就绪队列,在辅助就绪队列中存在的进程都是事件发生后解除阻塞的进程,在辅助队列中的进程优先于一般就绪队列中的进程执行。
2.3最短进程优先(SPN)(非抢占)
减少FCFS固有的对长进程的偏向的另一种方法是最短进程优先。这个是一个非抢占的策略,其原则是下一次选择预计处理时间最短的进程。SPN有利于提高吞吐量。
SPN的风险在于只要持续不断地提供更短的进程,长进程可能饥饿。另外一方面,尽管SPN减少了对长作业的偏向,但是由于缺少抢占机制,它对分时系统或事务处理环境仍然不理想。
2.4最短剩余时间(SRT)(抢占)
最短剩余时间是针对SPN增加了抢占机制的版本。不过SRT依然存在长进程可能饥饿的情况。
2.5最高响应比优先(HRRN)(非抢占)
归一化周转时间也可以作为性能度量,考虑下面的表达式R=(w+s)/s,其中R为响应比w为等待处理器的时间,s为预计的服务时间。该策略为选择最大的R值的进程执行,R的最小值为1,即第一个进入的进程。这样在偏向短进程的同时,随着长进程等待的时间变长,R值增大,也可以获得处理的机会。
和SPN、SRT一样,使用最高响应比(Highest Response Ratio Next)策略需要估计服务时间。
2.6反馈(抢占)
如果没有关于各个进程相对长度的任何信息则SPN、SRT和HRRN都不能使用。另一种导致偏向短作业的方法是处罚运行时间较长的作业,换句话说,如果不能获得剩余的时间那就关注已经执行了的时间。
方法如下:调度基于抢占原则(按时间片)并且使用动态优先机制,首先有各个级别的就绪队列,如果进程执行一段时间之后被抢占,那么放入下一级别的就绪队列,高级别的就绪队列中的进程优先于低级别的就绪队列中的进程执行。这样的话一个短进程不会降级太多次就能够执行完毕。
这个方案可能存在的一个问题是长进程的周转时间可能惊人地增加。事实上如果频繁地有新进程进入系统,可能导致饥饿。为了补偿这点,可以按照对列设置不同的抢占时间片,优先级低的队列时间片的长度长。