调度算法是什么

当有多个进程或线程同时竞争CPU,只要有两个或多个进程都处于就绪状态,系统就必须选择下一个运行的进程,完成这一工作的部分称为调度程序,调度程序使用的算法就是调度算法

调度简介
并不是所有系统都对调度有较高的需求,一些系统只需要简单的调度就可以满足需求。

而有些系统则需要仔细研究一种合适的调度。比如网络服务器,当网络服务器在运行本地计算时传来了一个用户服务请求,如果调度算法能打断本地计算而满足用户服务请求,则可以使用户很高兴。再比如智能手机,电池寿命短是其最重要的约束之一,所以调度算法要努力优化电量损耗。

何时调度

  1. 在创建新进程之后,需要决定是运行父进程还是子进程。
  2. 在一个进程推出时必须做出调度决策,选择一个就绪队列中的进程运行。
  3. 当一个进程阻塞时,需要选择另一个进程运行。
  4. 发生一个I/O中断时,需要做出调度。

调度算法分类

  1. 抢占式:调度程序打断当前运行中的进程,调度另一个进程运行。
  2. 非抢占式:调度程序会等当前运行中的进程结束之后,再让调度的进程运行。

以上两种是基本分类,在不同的环境中还需要不同的调度算法。如下三种常见情形需要不同的调度算法。

  1. 批处理
  2. 交互式
  3. 实时

调度算法的目标

换句话说就是调度算法需要达到什么水平。那么有几条指标可以用来衡量调度算法的好坏

  1. 吞吐量:系统每小时完成的作业数量。
  2. 周转时间:一个作业提交直达完成所需要的时间的统计平均值。
  3. 响应时间:从发出命令到得到响应之间的时间。

批处理系统中的调度

先来先服务
顾名思义,进程按照请求CPU的顺序来使用CPU。该算法优点是易于理解且便于使用。缺点也很明显,该算法可能导致系统的整体利用率低,比如1000个CPU密集型进程需要1000秒完成,第1001个进程是I/O密集型的,需要1000秒完成磁盘I/O操作,那么按照FIFO,会花费2000秒来完成所有进程,其中前1000秒磁盘利用率很低,后1000秒CPU利用率很低。如果能让磁盘I/O操作最先运行,那么只需要1000秒就能完成所有进程,系统利用率接近100%。

最短作业优先
在运行时间课可预知的情况下才能使用此算法。假设有A,B,C,D四个进程同时到达,执行这四个进程需要花费8,4,4,4分钟,那么按照所需时间从少到多来调用,即以B,C,D,A的顺序执行程序。
最短作业优先算法的平均周转时间是所有算法中最短的,但是得满足所有作业是同时到达的情况。

最短剩余时间优先
这是最短作业优先的抢占式版本。调度程序总是选择剩余时间最短的进程运行。同样的,必须能事先掌握进程需要的运行时间。当进程不是同时到达时,该算法会比最短作业优先要有更少的平均周转时间。