先来先服务算法(FCFS):
用途:
即可用于作业调度,也可用于进程调度。
策略:
见名知意,就是先来的进程或者作业,先执行。但是这种算法的缺点也是显而易见的,一般都是结合其他的调度算法一起使用。
特点:
简单,易于实现。
短作业优先算法(SJF):
用途:
即可用于作业调度,也可用于进程调度。
策略:
就是按照作业大致运行时间的长短来计算其优先级,作业越短,其优先级越高,
缺点:
1.对于作业的运算时间的估算很难准确的估算出来。
2.对长作业不公平,很可能长作业要等待很久。
3.没有充分考虑到作业的紧急程度.
优先级调度算法(PSA):
用途:
即可用于作业调度,也可用于进程调度。
策略:
根据作业的紧张程度来判断其优先级。作业的紧张度越高,优先级就越高。
算法类型:
因为调度方式的不用,该算法也主要分为两种类型。
非抢占式优先级调度算法:
既,在优先级高的进程,开始执行时,除了某些特殊情况下,将会一直暂用cpu资源,直到该进程执行完成。
抢占式优先级调度算法:
在出现新的进程进入就绪队列中,且该进程的优先级比当前正在执行的进程的优先级高时,则把cpu的资源分配给该优先级更高的进程。
优先级的类型:
静态优先级:
就是指,在进程创建之初,就对进程计算优先级,且在后续的过程中,不再更改其优先级。这里的优先级表示一般使用整型数据来表示的。
这里计算优先级的方式有多种:0
1.根据进程的类型来判断,一般是系统的进程要高于用户的进程。
2.根据进程所需资源来判断,一般是需要资源少的优先级高些。
3.根据用户的要求来判断,一般是用户对该进程的需求越大,优先级越高。
动态优先级:
就是指,在进程创建之初,给进程一个初始优先级,在后续执行过程中,一般会根据已经等待了的时间等因素,在对其重新评级,等待时间越长,评级时,会提高一些优先级。如果在初始时所有的进程优先级一致,则可以使用先来先服务的算法。
高响应比优先调度算法(HRRN):
用途:
通常用于作业调度中。
策略:
该算法是优先级调度算法的一个特例。既该算法在设定作业优先级时,使用了动态优先级的方式,结合作业的长短和等待时间来动态设定优先级,这里可以用一个公式来表示:
优先级=(等待时间+要求服务时间)/要求服务时间
这里的要求服务时间就是作业的长短,要求服务时间越少,作业越短。
由于等待时间和服务时间就是系统对作业的响应时间,所以该公式还可以化简为下式:
优先级=响应时间/要求服务时间
特点:
1.考虑到了长作业的等待时间。
2.既照顾了作业的长短,又照顾了作业的等待时间。
3.因为是动态的优先级,以及要计算响应比,所以增加了系统的开销。
轮转调度算法(RR):
主要用在分时系统中,是基于时间片轮转的一种调度算法。
用途:
主要用于进程调度。
策略:
采用时间片轮转的方式,对每一个进程都有一个限定时间,时间一到,便会释放当前cpu资源,然后cpu转而为下一个处于就绪状态的进程服务。如果进程在时间片还未用完的情况下就完成了,则主动释放cpu资源给下一个进程,反之在规定时间没有执行完的话,就插入到就绪队列的末尾。
时间片大小的确定:
从上面我们可以看出,因为采用时间片轮转的方式进行进程的调度,无论时间片选择的太大(不利于用户的交互)还是太小(进程切换频繁,增大系统开销)都是不利于系统的运转的。所以时间片大小的确定极为重要。一般情况下,时间片大小为大多数进程能在一个时间片内完成的大小较为合适。
特点:
1.是一种十分公平的调度算法
2.时间片的选择对系统的影响较大,时间片过小,会造成进程的频繁切换,增大了系统的开销,时间片过大会不利于用户的交互,甚至是在时间片大的可以使每个进程都可以在一个时间片内完成的话,那就退化为先来先服务算法了。
3.不区分任务的紧急程度
多级队列调度算法(MQ):
前面介绍的几种调度算法一般都是用于就绪队列只有一个的情况下,但是现在的计算机多采用多个就绪队列的方式。因此,该种算法就是针对多个就绪队列而设置的。这里的就绪队列就是处于就绪态的进程的队列。
用途:
一般多用于进程调度。
策略:
就绪队列可以根据进程的类型或性质的不同,而拆分为多个就绪队列,通过对不同的就绪队列采用不同的调度算法,同一个就绪队列中的进程设置不同的优先级,甚至不同的队列之间也可以设置优先级,从而使系统可以针对不同的用户进程的需求,而提供多种调度方式。
特点:
1.因为策略的多种设计,使得设计复杂。
2.可以应对不同的用户进程需求。
多级反馈队列调度算法(MFQ):
前面介绍的大多进程调度算法,都是需要事先计算各种进程执行所需的时间,而该算法则不需要,而且还可以较好的满足进程的需求,是目前公认的一种较好的进程调度算法。
策略:
首先设置多个就绪队列,将就绪队列从进行优先级划分,如第一个队列优先级最高,第二个较高,依次类推。每个队列也采取不同大小的时间片,且第一个队列的时间片最小,接着往下依次增大。
然后在将新到的进程调入到最高级的就绪队列的末尾,按照FCFS算法调度,当轮到该进程执行时,如果该进程能够在响应的时间片内执行完的话,则调出系统,反之,插入到下一级的就绪队列中,直到这一级的就绪队列为空时,cpu才分配给下一级的就绪队列,当在下一级的就绪队列中仍然没在一个时间片内完成,则再插入到他的下一级的就绪队列中,以此类推。直到cpu开始分配开最后一级就绪队列时,按照RR算法执行。如果出现cpu已经来到了第i级就绪队列执行进程时,又新来了一个进程,则cpu暂停对该进程的运行,将该进程放入第i级就绪队列中,然后去执行新来的那个处于高优先级队列的进程。
特点:
1.能较好地满足不同用户进程的需求。
2.不必事先直到各个进程所需的执行时间。