进程调度的任务主要有三:
(1)保存处理机的现场信息。在进程调度进行调度时,首先需要保存当前进程的处理机的现场信息,如程序计数器、多个通用寄存器中的内容等
(2)按某种算法选取进程。调度程序按某种算法从就绪队列中选取一个进程,把它的状态改为运行状态,并准备把处理机分配给它。
(3)把处理器分配给进程。由分派程序把处理器分配给该进程,此时需为选中的进程恢复处理机现场,即把选中进程的进程控制块内有关处理机现场的信息装入处理器相应的各个寄存器中,把处理器的控制权交给该进程,让它从取出的断点处开始继续运行。
进程调度机制(计算机操作系统第四版图例):
为了实现进程调度,应具有如下三个基本机制:
(1)排队器。为了提高进程调度的效率,应事先将系统中所有的就绪进程按照一定的方式排成一个或多个队列,以便调度程序能最快地找到它。
(2)分派器(分派程序)。分派器把由进程调度程序所选定的进程,从就绪队列中取出,然后进行上下文切换,将处理机分配给它。
(3)上下文切换机制。当对处理机进行切换时,会发生两对上下文切换操作。
1)非抢占方式(Nonpreemptive Mode)
一旦把处理机分配给某进程后,不管它要运行多长时间,都一直让它运行下去,决不会因为时钟中断等原因而抢占正在运行进程的处理机,也不允许其它进程抢占已经分配给它的处理机。直至该进程完成,自愿释放处理机,或发生某事件而被阻塞时,才再把处理机分配给其他进程。
在采用非抢占调度方式时,可能引起进程调度的因素可归结为如下几个:
优缺点
非抢占调度方式的优点是实现简单,系统开销小,适用于大多数的批处理系统环境。但它难以满足紧急任务的要求——立即执行,因而可能造成难以预料的后果。在要求比较严格的实时系统中,不宜采用这种调度方式
2)抢占方式(Preemptive Mode)
允许调度程序根据某种原则去暂停某个正在执行的进程,将已分配给该进程的处理机重新分配给另一进程。
抢占调度方式是基于一定原则的,主要有如下几条:
优缺点
抢占方式的优点是,可以防止一个长进程长时间占用处理机,能为大多数进程提供更公平的服务,特别是能满足对响应时间有着较严格要求的实时任务的需求。但抢占方式比非抢占方式调度所需付出的开销较大。
在分时系统中,最简单也是较常用的是基于时间片的轮转(round robin,RR)调度算法。
系统将所有的就绪进程按先来先服务的原则排成一个队列。系统每隔一段时间产生一次中断,把CPU分配给队首进程,并令其执行一个时间片。当它运行完毕后,又把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。
(1)若一个时间片未用完,正在执行的进程便已经完成;
(2)若一个时间片用完时,程序尚未运行完毕
在轮转算法中,时间片的大小对系统性能有很大的影响。
该算法是把处理机分配给就绪队列中优先权最高的进程,这时,又可进一步把该算法分成如下两种:
(1)非抢占式优先权算法系统一旦把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执行下去,直至完成;或因发生某事件使该进程放弃处理机时,系统方可再将处理机重新分配给另一优先权最高的进程。
(2)抢占式优先权调度算法系统同样是把处理机分配给优先权最高的进程,使之执行。但在其执行期间,只要又出现了另一个其优先权更高的进程,进程调度程序就立即停止当前进程(原优先权最高的进程)的执行,重新将处理机分配给新到的优先权最高的进程。
对于最高优先权优先调度算法,其关键在于:它是使用静态优先级,还是用动态优先级,以及如何确定进程的优先级。
1)静态优先级静态优先级是在创建进程时确定的,且在进程的整个运行期间保持不变。一般地,优先权是利用某一范围内的一个整数来表示的,例如,0-7或0-255中的某一整数,又把该整数称为优先数,只是具体用法各异:有的系统用“0”表示最高优先权,当数值愈大时,其优先权愈低;而有的系统恰恰相反。
2)动态优先级动态优先权是指在创建进程时所赋予的优先权,是可以随进程的推进或随其等待时间的增加而改变的,以便获得更好的调度性能。
例如,我们可以规定,在就绪队列中的进程,随其等待时间的增长,其优先权以速率a提高。
确定进程优先权的依据有如下三个方面:
将系统中的进程就绪队列从一个拆分为若干个将不同类型或性质的进程固定分配在不同的就绪队列不同的就绪队列采用不同的调度算法。
多队列调度算法是一种操作系统中的进程调度算法,其核心思想是将进程按照不同的优先级分配到不同的队列中,然后按照一定的规则选择队列中的进程进行调度。多队列调度算法通常会将进程分为多个优先级,例如高、中、低三个优先级,然后将这些进程分别放在对应的队列中。每个队列都有自己的调度算法,例如高优先级队列可能采用抢占式调度算法,中优先级队列可能采用轮转调度算法,低优先级队列可能采用先来先服务调度算法。
当系统需要进行进程调度时,多队列调度算法会先选择优先级最高的队列中的进程进行调度,如果该队列为空,则会依次选择优先级次高的队列中的进程进行调度,直到找到可以调度的进程为止。这种调度算法能够保证高优先级进程的及时响应,同时也能够保证低优先级进程的执行。
多队列调度算法能够根据不同的进程优先级采用不同的调度算法,从而更好地平衡系统的响应速度和资源利用率。
优缺点
多队列调度算法的优点:
多队列调度算法的缺点:
(1)应设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低。
该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。
时间片:S1 (2)每个队列都采用FCFS算法。 当新进程进入内存后,首先将它放入第一队列的末尾,按FCFS原则等待调度。当轮到该进程执行时,如它能在该时间片内完成,便可撤离系统。否则,即它在一个时间片结束时尚未完成,调度程序将其转入第二队列的末尾等待调度;如果它在第二队列中运行一个时间片后仍未完成,再依次将它放入第三队列,……,依此类推。当进程最后被降到第n队列后,在第n队列中便采取按RR方式运行。 (3)按队列优先级调度。 调度程序首先调度最高优先级队列中的诸进程运行,仅当第一队列空闲时才调度第二队列中的进程运行。 仅当第1~(i-1)所有队列均空时,才会调度第i队列中的进程运行。如果处理机正在第i队列中为某进程服务时又有新进程进入任一优先级较高的队列,此时须立即把正在运行的进程放回到第i队列的末尾,而把处理机分配给新到的高优先级进程。 在多级反馈队列调度算法中,如果规定第一个队列的时间片略大于多数人机交互所需之处理时间时,便能较好地满足各种类型用户的需要。2.调度算法的性能