计算机系统需要工作。计算机系统处理很多任务。这些任务同时发生。多任务处理需要管理。管理方法就是调度。调度是一个重要问题。调度决定任务顺序。好的调度让计算机快。坏的调度让计算机慢。
计算机有一个大脑。这个大脑叫处理器。处理器每次做一件事。多个任务需要分享处理器。任务一需要计算。任务二需要计算。任务三也需要计算。处理器轮流做这些任务。轮流的方法就是调度算法。
任务有不同的样子。有的任务时间短。有的任务时间长。有的任务需要马上做。有的任务可以等一等。有的任务和人交互。人希望计算机反应快。输入命令就要有回应。这种任务叫交互式任务。有的任务在后台做。比如打印文件。这种任务可以慢慢做。
调度算法有很多种。先来先服务是一种简单算法。谁先到就先做谁。这个方法很公平。但是效果可能不好。一个长任务先到。后面很多短任务等着。短任务等待时间很长。计算机反应显得慢。
短作业优先算法改进了这个问题。短任务先做。长任务后做。平均等待时间变短。但是也有缺点。如果一直有短任务来。长任务永远做不了。长任务会饿死。这对长任务不公平。
时间片轮转算法解决了公平问题。每个任务分一小段时间。这一小段时间叫时间片。任务做一会儿就换下一个。所有任务轮流做。短任务很快做完。长任务也能慢慢推进。没有人会饿死。这个方法很常用。
但是时间片大小很重要。时间片太大不好。一个长任务占很久。其他任务觉得卡。时间片太小也不好。任务切换太频繁。处理器总在忙着切换。真正干活的时间少。需要找一个合适的大小。
现实中的任务有优先级。系统任务很重要。系统任务需要先做。用户任务分等级。高等级任务先做。低等级任务后做。这就引入优先级调度。每个任务有一个优先级号码。处理器先做优先级高的任务。
优先级调度也有问题。低优先级任务可能永远没机会。需要一些办法避免。一个办法是动态调整优先级。等待时间长的任务提高优先级。这样就不会饿死。
现代计算机有多个处理器。多个处理器可以一起工作。这叫多核系统。调度变得更复杂。任务可以在不同处理器上跑。需要平衡各个处理器的负载。不能一个处理器忙一个处理器闲。任务之间可能有关系。任务一和任务二需要共享数据。把它们放在靠近的处理器上好一些。调度算法要考虑这些情况。
任务种类越来越多。有的任务需要图形处理。图形处理需要快。有的任务需要大量计算。计算任务需要稳定。操作系统需要识别任务类型。给它们分配合适的资源。
移动设备带来新要求。手机和平板电脑用电池。电池电量有限。调度算法要考虑省电。处理器速度可以调整。任务急的时候跑快些。任务不急的时候跑慢些。跑慢些就省电。调度算法需要知道任务急不急。
实时系统有严格时间要求。汽车里的计算机控制刹车。刹车命令必须马上处理。晚了一点就出事故。工厂机器控制生产线。每个动作时间必须精确。调度算法必须保证时间。任务必须在截止时间前完成。这叫实时调度。
实时调度分两种。硬实时和软实时。硬实时绝对不能错过截止时间。错过就是系统失败。软实时尽量别错过。偶尔错过可以接受。调度方法不一样。
评价调度算法有好坏标准。周转时间是一个标准。任务从提交到完成的时间。平均周转时间越短越好。等待时间是另一个标准。任务在队列里等待的时间。响应时间对交互任务重要。从用户输入到系统回应的时间。这些标准有时互相矛盾。提高一个标准可能降低另一个标准。需要根据情况选择。
调度算法在不断发展。计算机工作方式在变。算法也跟着变。人工智能方法开始应用。算法学习任务模式。预测任务行为。做出更聪明的调度决定。这是新的研究方向。
计算机系统里有很多任务。任务在处理器上跑。调度算法管理任务顺序。好的算法提高速度。好的算法提高反应能力。好的算法节省电力。好的算法满足实时要求。调度是一个基础问题。这个问题还有很多可以研究。人们继续寻找更好的方法。让计算机工作得更好。