-
调度类型:
-
关于调度类型在进程状态中的的角色和阶段如下图所示:
-
长程调度: 长程调度程序决定哪一个程序可以进入到系统中处理,因此,它控制系统并发度。一旦允许进入,一个作业或用户程序就成为一个进程,并被添加到供短程调度程序使用的队列中等待。在某些系统中,一个新创建的进程开始处于被换出状态。这种情况下,它被添加到供中程调度程序使用的队列中等待调度。
在批处理系统或通用的操作系统中的批处理部分中,新提交的作业被发送到磁盘,并保存在一个批处理队列中。在长程调度程序运行的时候,从队列中创建相应的进程。这里涉及两个决策:首先,调度程序必须决定什么时候操作系统能够接纳一个进程或多个进程;第二,调度程序必须决定接受哪个作业或哪些作业,并将其转变成进程。 -
中程调度:是交换功能的一部分。在典型情况下,换入(swapping-in)决定管理系统并发度需求。在不适用虚拟内存的系统,存储管理也是一个问题。因此,换入将考虑换出(swapped-out)进程的存储需求。
-
短程调度:考虑执行的频繁程度,长程调度程序执行的频率相对较低,并且仅仅是粗略地决定是否接受新进程以及接受哪一个。为进行交换决定,中程调度程序执行得略微频繁一些。短程调度程序,也成为了分派程序(dispatcher),执行得最频繁,并且精确地决定下一次执行哪一个进程。
当可能导致当前进程阻塞或可能抢占当前运行进程的事件发生时,调用短程调度程序。这类事件包括:时钟中断、I/O中断、操作系统调用、信号(如信号量)。 -
如果一个进程主要执行计算工作,偶尔才会用到I/O设备,则该进程被看做是处理器密集型的;如果一个进程执行所使用的时间取决于等待I/O操作的时间,则把它看做是I/O密集型的。
-
短程调度准则:短程调度的主要目标是按照优化系统一个或多个方面行为的方式来分配处理器时间。通常需要对可能被评估的各种调度策略建立一系列规则。通常使用的准则可以按照两个维度来分类。
a. 面向用户的准则:与单个用户或进程无感知到的系统行为相关
b. 面向系统的准则:即其重点是处理器使用的效果和效率。关于这类准则的一个例子是吞吐量,也就是进程完成的速度。该准则的重点是系统性能,而不是提供给用户的服务。因此吞吐量是系统管理员所关注的,而不是普通用户所关注的。
面向用户的准则在所有系统中都非常重要,而面向系统的原则在单用户系统中的重要性就低一些。在单用户系统中,只要系统对用户应用程序的响应时间是可以接受的,则实现处理器高利用率或高吞吐量可能并不是很重要。
下图总结了几种重要的调度准则。它们是相互依赖的,不可能同时使它们都达到最优。例如,提供较好的响应时间可能需要调度算法在进程间频繁地切换,这就增加了系统开销,从而降低了吞吐量。因此,设计一个调度策略涉及在相互竞争的各种要求之间进行折中,根据系统的本质和使用情况,给各种要求设定相应的权值。
-
各种调度策略的特点:
以下描述对应于上图:
a. 先来先服务:在所有就绪进程中,选择等待服务时间最长的进程。
b. 轮转:使用时间片限制任何正在运行的进程只能使用一段处理器时间,并在所有就绪进程中轮转。
c. 最短进程优先:选择预期处理时间最短的进程,并且不抢占该进程。
d. 最短剩余时间:选择预期的剩余处理时间最短的进程。当另一个进程就绪时,这个进程可能被抢占。
e. 最高响应比优先:调度策略基于对归—化周转周期时间的估计。
f. 反馈:建立一组调度队列,基于每个进程的执行历史和其它的一些准则,把他们分配到各个队列中。
调度算法的选择取决于预期的性能和实现的复杂度。
-
“轮转调度”算法:为了减少FCFS(先来先服务)策略下短作业的不利情况,一种简单的方法是采用“基于时钟的抢占”策略,这类方法中,最简单的是轮转算法。以一个周期性间隔产生时钟中断,当中断发生时,当前正在运行的进程被置于就绪队列中,然后基于FCFS策略选择下一个就绪作业运行。这种技术也称为“时间片(time slicing)”,因此每个进程在被抢占前都给定一片时间。
-
公平共享调度:在多用户系统中,如果单个用户的应用程序或作业可以组成多个进程(或线程),就会出现传统的调度程序不认识的进程集合结构。从用户的角度看,他所关心的不是某个特定的进程如何执行,而是构成应用程序的一组进程如何执行。因此,基于进程组的调度策略是非常具有新引力的,该方法通常称为“公平共享调度(fair-share scheduling)”。此外,即使每个用户用一个进程表示,这个概念可以扩展到用户组。