以Linux2.4中的调度算法来说明进程调度原理。
一、基本原理
进程运行时需要各种各样的系统资源,调度的实质就是资源的分配。系统通过不同的调度算法来实现资源的分配。通常,选择什么样的调度算法取决于资源的分配策略,一个好的调度算法应当考虑以下几个方面:
(1)公平:保证每个进程得到合理的CPU时间。
(2)高效:使CPU保持忙碌状态,总是有进程在CPU上运行。
(3)响应时间:使交互用户的响应时间尽可能短。
(4)周转时间:使批处理用户等待输出的时间尽可能短。
(5)吞吐量:使单位时间内处理的进程数量尽可能多。
下面介绍主要的调度算法和基本原理
1、时间片轮转调度算法
时间片是分配给进程运行的一段时间。
在分时系统中,为保证人机交互的及时性,系统使每个进程依次地按时间片轮流地执行,应采用时间片轮转进行调度。在通常的轮转法中,系统将所有的可运行(就绪)进程按照先来先服务的原则,排成一个队列,每次调度时把CPU分配给队首进程,并令其执行一个时间片,当执行的时间片用完时,系统发出信号,通知调度程序,调度程序根据这个信号来停止该进程的执行,并将它送到运行队列的末尾,等待下一次执行;然后,把处理器分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样保证就绪队列中的所有进程,在一个给定的时间内,都能获得一个时间片的处理器执行时间。
2、优先级调度算法
为了使得紧迫型进程在进入系统后获得优先处理,引入最高优先级调度算法。当将该算法用于进程调度时,系统将把处理器分配给运行队列中优先级最高的进程,可进一步把该算法分为两种方式:
1)非抢占式优先级调度算法
在这种方式下,系统一旦将CPU分配给运行队列中优先级最高的进程后,该进程便一直执行下去,直到完成;或因发生某事件使该进程放弃处理器时,系统方可将处理器分配给另一个优先级高的进程。这种调度算法主要用于批处理系统中,也可用于某些对实时性要求不严格的实时系统中。
2)