常见的作业调度和进程调度算法
首先,我们来解释一下一会儿需要使用到的几个名词,分别是:调度、调度算法、作业调度、进程调度。
- 调度:操作系统管理的系统资源有限,当有多个进程(或多个进程发出的请求)要使用这些资源时,必须按照一定的原则选择进程(请求)来占用资源。也就是说调度的实质是一种资源分配。
- 调度算法:根据系统的资源分配策略所规定的资源分配算法。
- 作业调度:根据JCB中的信息,检查系统中的资源是否能满足作业对资源的需求,以及按照一定的调度算法,从外存的后备队列中选取某些作业调入内存,并为他们创建进程,分配必要的资源,然后再将新创建的进程排在就绪队列上等待调度。因此,也把作业调度称为接纳调度。
- 进程调度:当计算机系统处于就绪状态的用户进程数多于CPU数时,就会产生多个进程或线程同时竞争CPU的结果。假设现在只有一个CPU可用,那么操作系统就必须选择一个进程运行,并把处理机分配给该进程。
- 非抢占式算法:在采用这种调度方式时,一旦把处理机分配给某进程时,就让它一直运行下去,绝不会因为时钟中断或者任何其他原因去抢占当前正在运行晋城的处理机,直至该进程完成,或者因为发生某件事被阻塞时,才把处理机分配给别的进程。
- 抢占式算法:这种调度方式允许调度程序根据某种规则,去暂停某个正在执行的进程,将已经分配给该进程的处理机重新分配给另一进程。(当然,抢占是有一定原则的:1)优先权原则;2)短进程优先原则;3)时间片原则)
接下来我们分别讲解一下几种常见算法以及它们适用的调度类型。
先来先服务调度算法(FCFS)
算法思想 | 算法规则 | 适用调度类型 | 是否可以抢占 | 优点 | 缺点 | 是否会饥饿 |
---|
主要从公平的角度考虑 | 按照作业/进程到达的先后顺序进行调度 ,即:优先考虑在系统中等待时间最长的作业 | 进程调度和作业调度 | 非抢占式算法 | 满足公平原则,且算法容易实现,比较利于长作业/进程 | 排在长进程后的短进程的等待时间大,而且带权周转时间大,不利于短作业/进程 | 不会 |
短作业优先调度算法(SJF)
在这里我们需要注意一下:短进程调度算法简称为SPF
算法思想 | 算法规则 | 适用调度类型 | 是否可以抢占 | 优点 | 缺点 | 是否会饥饿 |
---|
实际上,短进程/作业(要求服务时间最短)在实际情况中占有很大比例,为了使得它们优先执行,追求最少的平均等待时间时间、平均周转时间、平均带权周转时间 | 要求服务时间最短的进程/作业优先得到服务 | 进程调度和作业调度 | 非抢占式算法,但是也有抢占式版本,即:最短剩余时间优先算法(SRTN) | 可以得到最少的平均等待时间时间、平均周转时间、平均带权周转时间 | 不公平,对长作业不友好,对短作业友好 | 会(短作业优先可能导致长作业一直得不到处理) |
高响应比优先调度算法(HRRN)
算法思想 | 算法规则 | 适用调度类型 | 是否可以抢占 | 优点 | 缺点 | 是否会饥饿 |
---|
综合考虑等待时间和运行时间 | 在每次调度时,先计算各个作业/进程的优先权:优先权=响应比=(等待时间+要求服务时间)/要求服务时间=相应时间/要求服务时间,选择优先权高的进行服务 | 进程调度和作业调度 | 非抢占式算法 | 综合考虑了等待时间和要求服务时间,在等待时间相同时,要求服务的时间愈短,其优先权愈高,拥有SJF的优点,在要求服务时间相同时,作业的优先权决定于其等待时间,等待时间愈长,其优先权愈高,拥有FCFS的优点 | 需要计算优先权,增加了系统的开销 | 不会 |
时间片轮转调度算法(RR)
算法思想 | 算法规则 | 适用调度类型 | 是否可以抢占 | 优点 | 缺点 | 是否会饥饿 |
---|
公平的、轮流的为各个进程服务,让每个进程在一定时间间隔内都可以得到响应 | 系统根据FCFS策略,将所有的就绪进程排成一个就绪队列。轮流让各个进程执行一个时间片的,若进程未在一个时间片内执行完,则被剥夺处理机,将进程放到就绪队列队尾重新排队。 | 进程调度 | 抢占式算法 | 公平、响应快,适用于分时操作系统 | 由于高频率的进程切换,增加了开销,并且它不区分任务的紧急程度 | 不会 |
补充:时间片大小的确定
- 时间片过小:有利于短作业,因为它能在该时间片内完成,但是,意味着频繁的执行进程调度和进程上下文的切换,增加系统的开销。即:退化为短作业优先算法 。
- 时间片过大:每个进程都能在一个时间片内完成,即退化为FCFS算法。
优先级调度算法
算法思想 | 算法规则 | 适用调度类型 | 是否可以抢占 | 优点 | 缺点 | 是否会饥饿 |
---|
根据任务的紧急程度进行调度 | 调度时选择优先级最高的作业/进程,为其分配处理机 | 进程调度、作业调度、I/O调度 | 抢占式算法和非抢占式算法 | 用优先级区分任务的紧急程度,适用于实时操作系统。 | 如果有源源不断的高优先级进程到来,那么低优先级的进程可能会饥饿 | 会 |
补充:
1、优先级是利用某一范围内的整数来表示的,又把该整数称为优先数(优先数的大小并不一定和优先级成正比)。确定优先级大小的依据如下;
- 进程类型
- 进程对资源的需求
- 用户要求
2、优先级的类型有两种: - 静态优先级:在创建进程时确定的,在进程的整个运行期间保持不变。虽然静态优先级简单易行,系统开销小,但是不够精确,可能会出现优先级低的进程长期没有被调度的情况。
- 动态优先级:在创建程序之初,先赋予其一个优先级,然后其值随进程的推进或者等待时间的增加而改变,以获得更好的调度性能。
多级反馈队列调度算法
算法思想 | 算法规则 | 适用调度类型 | 是否可以抢占 | 优点 | 缺点 | 是否会饥饿 |
---|
对以上调度算法的权衡和弥补 | 1、设置多个就绪队列,各级队列的优先级由高到低,时间片从小到大;2、新进程到达时先进入第一级队列,按照FCFS的原则排队等待被分配时间片,若时间片已经用完进程还没结束,则进程进入下一级队尾,如果此时进程已经在最低一级的队列,则将其重新放回该队列的队尾;3、只有第k级队列为空时,才会为第k+1级队列分配时间片 | 进程调度 | 抢占式算法,当第k级队列在运行过程中,若更上级的队列到来了一个新进程,由于优先级问题,新进程会抢占处理机,并将原来运行的进程放回第k级队列的队尾 | 对各种类型的进程都比较公平,每个新到达的进程都会很快得到响应,短进程只用较少的时间就可以完成,不用估计进程的运行时间。 | / | 可能会导致饥饿,概率不大 |
总结
- FCFS,SJF,HRRN三种算法主要关心对用户的公平性、平均周转时间、平均等待时间等评价系统整体性能的指标,并不关心相应时间,也不区分任务的紧急程度,交互性糟糕。因此,这三种方式适用于早期的批处理系统。
- 时间片轮转调度算法(RR),优先级调度算法,多级反馈队列调度算法注重响应时间,公平性等,因此,这三种算法适用于交互式系统。