[OS] CPU调度

Posted NULL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[OS] CPU调度相关的知识,希望对你有一定的参考价值。

调度准则

为了比较CPU调度算法,分析员提供了许多准则,用于比较的特征对确定最佳算法有很大影响。这些准则包括:

·CPU使用率:需要使CPU尽可能忙。

·吞吐量:一个时间单元内完成进程的数量。

·周转时间:从进程提交到进程完成的时间。

·等待时间:进程在就绪队列中等待所花时间之和。

·响应时间:对于分时系统,从提交请求到第一次响应的时间。

调度算法

·先来先服务调度(FCFS)

采用这种方案,先请求CPU的进程先分配到CPU。FCFS策略可以用FIFO队列来容易的实现。

缺点:
1.周转时间与响应时间无法保证
2.对短作业不利
对于那些执行时间较短的作业或进程来说,如果它们在某些执行时间很长的作业或进程之后到达,则它们将等待很长时间。

·最短作业优先调度(SJF)

当CPU空闲时,它会赋给具有最短CPU区间的进程。如果两个进程具有相同长度,那么可以使用FCFS调度来处理。

虽然SJF算法最佳,但它不能在短期CPU调度层次上加以实现。因为没办法知道下一个CPU区间的长度。一种方法是近似SJF调度。虽然不知道下一个CPU区间的长度,但是可以预测它。认为下一个CPU区间的长度与以前的相似。因此,通过计算下一个CPU区间的长度的近似值,能选择具有最短预测CPU区间的进程来运行。下一个CPU区间通常可预测为以前CPU区间的测量长度的指数平均。

SJF算法可能是抢占的或非抢占的。

抢占:可抢占当前运行的进程。----也叫最短剩余时间优先调度(SRT)

非抢占:允许当前运行的进程先完成其CPU区间。

·最高响应比调度(HRP)

FCFS 强调的在系统的等待时间。
SJF 强调运行的时间;由此,考虑下面比值(W为在系统中等待时间,T为执行时间):

式中R既考虑了在系统的等待时间,又考虑了作业自身所需的运行时间,综合了FCFS与SJP各自特点。在进行进程调度时,从中选择响应比高者的进程投入运行。

·优先级调度

每一个进程都有一个优先级与之关联,具有最高优先级的进程会分配到CPU。具有相同优先级的进程按照FCFS顺序调度。

优先级调度可以是抢占的或非抢占的。

优先级调度算法的一个主要问题是无穷阻塞饥饿。可以运行但缺乏CPU的进程可认为是阻塞的,它在等待CPU。

低优先级进程无穷等待问题的解决办法之一是老化。老化是一种技术,以逐渐增加在系统中等待很长时间的进程的优先级。

·轮转法调度(RR)

该调度算法是专门为分时系统设计的。它类似于FCFS调度,但是增加了抢占以切换进程。定义一个较小的时间单元,成为时间片。时间片通常为10~100ms。将就绪队列作为循环队列。CPU调度程序循环就绪队列,为每个进程分配不超过一个时间片的CPU。

调度契机:

(1)进程完成:调度另一个进程运行。
(2)进程未完成:进程的执行被时钟中断,排到就绪队列尾部,调度另一个进程运行。
(3)进程因I/O等原因而被阻塞:排在阻塞队列中,调度另一个进程。当被解封后,进程的PCB表从阻塞队列摘下,排到就绪队列尾部。

算法评价:
优点:
占用CPU先后及时间长短公平
缺点:
时间片过短时,上下文切换造成系统开销大
时间片过长时,对短作业不公平

改进方法:
根据不同的工作时段根据进程数的多少计算出不同时间片。 -----减少系统开销
根据进程优先级的不同给以不同的时间片,通常优先级高的给以较小的时间片(I/0进程),优先级低的给以较大的时间片。 -----均衡各进程的周转时间

·多级队列调度

进程可容易地分成不同组的情况下,可以使用该调度算法。多级队列调度算法将就绪队列分成多个独立队列。根据进程的属性,如内存大小、进程优先级、进程类型,一个进程被永久分配到一个队列。每个队列有自己的调度算法。

·多级反馈队列调度

由于使用多级队列调度时,进程是被永久分配到一个队列中。这种设置的优点是低调度开销,缺点是不够灵活。

与之相反,多级反馈队列调度算法允许进程在队列之间移动。主要思想是根据不同CPU区间的特点以区分进程。如果进程使用过多CPU时间,那么它会被转移到更低优先级队列。这种方案将I/O约束和交互进程留在更高优先级队列。此外,在较低优先级队列中等待时间过长的进程会被转移到更高优先级队列。这种形式的老化阻止饥饿的发生。

 通常,多级反馈队列调度程序可用下列参数来定义:

·队列数量

·每个队列的调度算法

·用以确定何时升级到更高优先级队列的方法

·用以确定何时降低到更低优先级队列的方法

·用以确定进程在需要服务时应进入哪个队列的方法

周转时间 = 作业完成时刻 - 作业到达时刻;-------不具有区分实际运行时间长短的性质

平均周转时间 = 作业周转总时间 / 作业个数;-----可以衡量不同调度算法对相同任务流的调度性能

带权周转时间 = 周转时间 / 实际运行时间;-------衡量长短任务的差别

平均带权周转时间 = 带权周转总时间 / 作业个数;

 

多处理器调度

上面主要集中讨论了单处理器系统内CPU调度问题。如果有多个CPU,则使得负载分配成为可能,但调度问题也相应变得复杂。

·多处理器调度方法

非对称多处理:让一个处理器(主服务器)处理所有的调度决定、I/O处理以及其他系统活动,其他处理器只执行用户代码。---实现简单,一个处理器访问系统数据结构,减轻了数据共享的需要。

 

对称多处理(SMP):每个处理器自我调度。所有进程可能处于一个共同的就绪队列中,或每个处理器都有它自己的私有就绪进程队列。无论如何,调度通过每个处理器检查共同就绪队列并选择一个进程来执行。

 

以上是关于[OS] CPU调度的主要内容,如果未能解决你的问题,请参考以下文章

深入理解 CPU 的调度原理

谁在 OS 中调度调度程序——这不是先有鸡还是先有蛋的场景吗?

谁在OS中安排调度程序 - 这不是一个鸡蛋和鸡蛋的场景吗?

带你探索CPU调度的奥秘

erlang如何使用一个OS线程实现抢占式调度?

[内核]Takslet和Workqueue的应用场景