进程调度的任务

进程调度的任务有三:
1. 保存处理机的现场信息。
2. 按某种算法选取进程。
3. 把处理器分配给进程。

进程调度机制

为了实现进程调度,在进程调度机制中,应具有如下三个基本部分,

  1. 排队器:为了提高进程调度的效率,应事先将系统中所有就绪进程按照一定的策略排成一个或多个队列,以便调度程序可以最快找到它。
  2. 分配器:分配器一依据进程调度信息所选定的进程,将其从就绪队列取出,然后进行从分配器到选出的新进程的上下文切换,在将处理器分配给新进程。
  3. 上下文切换器:对上下文切换时,会保留当前进程的上下文,即把当前进程的寄存器内容保存到进程控制块内的相应单元,再装入新进程的上下文,以便程序运行。

先来先服务调度算法

在进程调度中采用FCFS算法时,每次调度都从就绪队列中选取一个最先进入该队列的进程,为他分配处理机。直到该进程运行完成或是发生某事件致使它阻塞后,进程调度程序再次开始调度。

算法优点:易于理解且实现简单,只需要一个队列(FIFO),且相当公平。
算法缺点:比较有利于长进程,而不利于短进程。会产生饥饿现象。

短进程优先

SJF算法已作业时间长度来计算优先级,时间越短,优先级越高。
调度程序会在就绪队列中选择运行时间最短的进程优先为他们分配处理机,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。

算法优点:缩短作业(进程)的平均周转时间,提高系统吞吐量。
算法缺点:有利于短作业(进程),对长作业(进程)非常不利。

优先级调度算法

在优先级调度算法中,基于进程的紧迫程度,由外部赋予进程的优先级,进程调度时根据该优先级进行调度。
调度程序会在就绪队列中选择若干优先级最高的进程优先分配处理机,直到他们运行完成或是发生某事件而阻塞再次调度。
优先级调度算法中又分两种方式:

  • 抢占式优先级调度算法:是指在进程运行时,一旦出现比他优先级高的进程,进程调度程序将立即停止运行当前进程,而将处理机分配给优先级高的进程。
  • 非抢占式优先级调度算法:当处理机分配给当前优先级最高的进程后,将一直运行该进程直到该进程运行结束,或是发生某事件而阻塞,再次重新调度。

高响应比优先调度算法

高响应比优先调度算法既考虑了进程的等待时间,又考虑了进程运行时间。因此及顾虑了短进程,又不致使长进程的等待时间过长,从而改善了处理机调度的性能。

该算法为每个进程引入一个动态优先级:

操作系统进程调度设计java 操作系统 进程调度算法_优先级


操作系统进程调度设计java 操作系统 进程调度算法_调度算法_02


总结:该算法既照顾了短作业,又考虑了作业到达的先后次序,不会使长作业长期得不到服务。因此,该算法实现了一种较好的折衷。当然,在利用该算法时,每要进行调度之前,都须先做响应比的计算,这会增加系统开销。

轮转调度算法

在分时系统中,最简单也最常用的时基于时间片的轮转调度算法。该算法采取了非常公平的处理机分配方式,即让就绪队列上的每个进程每次仅运行一个时间片,如果就绪队列上有n个进程,则每个进程每次大约可获得1/n的处理及运行时间。

在该调度算法中,进程何时进行切换:
1. 若一个时间片未用完,正在运行的进程便已完成,就立即激活调度程序,将她从就绪队列中删除,在调度就绪队列中队首的进程运行,并且启动一个新的时间片。
2. 在一个时间片用完时
计时器中断处理程序被激活。如果出现尚未运行完毕,调度程序将把他送往就绪队列的队尾。

怎样确定时间片的大小:
- 系统对响应时间的要求
- 就绪队列中进程的数目
- 系统的处理能力

算法优点:时间片轮转调度算法的特点是简单易行、平均响应时间短。
算法缺点:不利于处理紧急作业。在时间片轮转算法中,时间片的大小对系统性能的影响很大,因此时间片的大小应选择恰当。