进程调度方式是指当有更高优先级的进程到来时如何分配cpu,调度方式分为可剥夺和不可剥夺两种。可剥夺式是指当有更高优先级的进程到来时,强行将正在运行进程的cpu分配给高优先级的进程;不可剥夺式是指当有更高优先级的进程到来时,必须等待正在运行进程自动释放占用cpu,然后将cpu分配给高优先级的进程。
什么时候会用到进程调度:
进程调度算法:
先来先服务(FCFS):
FCFS总是将就绪队列队首的进程投入运行,也就是说,如果作业A,B,C到达时间不同,不论优先级如何,总是按照到达时间来运行。它的特点是比较有利于长作业,而不利于短作业,有利于cpu繁忙的作业,而不利于I/O繁忙的作业。先来先服务是一种不可剥夺的算法。
时间片轮转。
时间片轮转算法可以分为固定时间片和可变时间片两种,固定时间片顾名思义,即为分配给每个进程相等的时间片,使所有的进程都公平执行。而可变时间片则需要根据进程不同的要求对时间片的大小实时修改,可以更好的提高效率。
优先级调度。
优先级调度算法是让每一个进程都拥有一个优先数,数值大的表示优先级高,系统在调度时总是选择优先数大的占用cpu,优先级调度分为静态优先级和动态优先级两种。
静态优先级
即进程的优先级在创建时确定,一直到进程终止都不会变。
动态优先级
即在创建进程时赋予一个优先级,在进程运行中优先级有可能改变,以便获得更好的调度性能,进程动态的优先级可以用系统或者用户自己定义。
多级反馈调节:
1、设有N个队列(Q1,Q2....QN),其中各个队列对于处理机的优先级是不一样的,也就是说位于各个队列中的作业(进程)的优先级也是不一样的。一般来说,优先级Priority(Q1) > Priority(Q2) > ... > Priority(QN)。怎么讲,位于Q1中的任何一个作业(进程)都要比Q2中的任何一个作业(进程)相对于CPU的优先级要高(也就是说,Q1中的作业一定要比Q2中的作业先被处理机调度),依次类推其它的队列。 2、对于某个特定的队列来说,里面是遵循时间片轮转法。也就是说,位于队列Q2中有N个作业,它们的运行时间是通过Q2这个队列所设定的时间片来确定的(为了便于理解,我们也可以认为特定队列中的作业的优先级是按照FCFS来调度的)。 3、各个队列的时间片是一样的吗?不一样,这就是该算法设计的精妙之处。各个队列的时间片是随着优先级的增加而减少的,也就是说,优先级越高的队列中它的时间片就越短。同时,为了便于那些超大作业的完成,最后一个队列QN(优先级最低的队列)的时间片一般很大(不需要考虑这个问题)。
进程优先级的分类:
每个进程都有相应的优先级,优先级决定它何时运行和接收多少 CPU 时间。最终的优先级共 32 级,是从 0 到 31 的数值,称为基本优先级别(Base Priority Level)。系统按照不同的优先级调度进程的运行,0-15 级是普通优先级,进程的优先级可以动态变化,高优先级进程优先运行,只有高优先级进程不运行时,才调度低优先级进程运行,优先级相同的进程按照时间片轮流运行。16-31 级是实时优先级,实时优先级与普通优先级的最大区别在于相同优先级进程的运行不按照时间片轮转,而是先运行的进程就先控制 CPU,如果它不主动放弃控制,同级或低优先级的进程就无法运行。