【操作系统】第八章——进程调度算法

一、背景

1、上下文切换与CPU调度:【承上启下】

(1)上下文切换

  • 切换CPU的任务,切换的实体为线程或进程
  • 要保存当前CPU的状态,便于之后的现场恢复【也就是保存TCB/PCB的上下文】
  • 读取下一个线程/进程的上下文

(2)CPU调度

  • 从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个进程/线程
  • 调度程序:挑选进程/线程的内核函数(通过一些调度策略)

2、在进程/线程的生命周期中的什么时候进行调度?

在一个状态变换到另一个状态,特别是与运行状态相关的变换【运行 >> 就绪、运行 >> 退出、运行 >> 阻塞】

【操作系统】第八章——进程调度算法_第1张图片

3、什么情况下内核会运行调度程序?

(1)可以为一个进程从运行状态切换到等待状态

(2)可以为一个进程结束了

  • 大部分情况下我们调度的是应用程序【运行时以用户态的进程形式存在】
  • 分为两种情况:

(1)不可抢占(非抢占式)

调度程序必须等待事件结束,也就是进程启动之后不能被打断

(2)可以抢占(抢占式)

调度程序在中断被响应后执行
当前进程从运行切换到就绪,或者一个进程从等待切换到就绪
当前运行的进程可以被换出

二、调度准则

3、进程在操作系统中的运行状态是怎样的?【程序执行模型】

【操作系统】第八章——进程调度算法_第2张图片

此处以一个进程为例,可以看到CPU的使用频率是波动的,说明程序在CPU突发和I/O中交替

  • 每个调度决定的是在下一个CPU突发时将哪个工作交给CPU
  • 在时间分片机制下,线程可能在结束当前CPU突发前被迫放弃CPU【抢占式】

4、可以从哪些方面了比较一个调度算法?

(1)CPU使用率:CPU处于忙状态所占时间百分比

(2)吞吐量:在单位时间内完成的进程数量【操作系统的计算带宽】

(3)周转时间:一个进程从初始化到结束,包括所有等待时间所花费的时间

(4)等待时间:进程在就绪队列中的总时间

(5)响应时间:从一个请求被提交到产生第一次响应所花费的总时间【操作系统的计算延迟】

  • 更快:高宽带、低延迟、
  • 减少响应时间:及时处理用户的输出并且尽快将输出提供给用户
  • 减少平均响应时间的波动:在交互系统中,可预测性比高差异低平均更重要
  • 增加吞吐量:减少系统开销、提高系统资源的利用率
  • 减少等待时间:减少每个进程的等待时间

5、公平是调度算法的一种重要衡量指标:

(1)保证每个进程占用CPU的时间大致相同

(2)进程等待的时间也大致相同


三、调度算法

1、先来先服务调度算法(FCFS)

  • 该算法是采用先进先出队列实现的:如果进程在执行过程中阻塞,队列中的下一个会得到CPU
  • 通过案例分析:

【操作系统】第八章——进程调度算法_第3张图片

从程序开始执行计算周转时间,我们看到的平均周转时间;

通过对比可以发现,短队列如果在前面会降低周转时间

  • 先来先服务调度算法的特点:

(1)优点:实现简单

(2)缺点:

平均等待时间波动较大

花费时间少的任务可能排在花费时间长的任务后面【这就导致等待的时间会很长】

没有考虑抢占,可能导致I/O和CPU之间的重叠处理


2、短任务优先调度算法

  • 进程的执行时间越短,调度的优先级就越高
  • 通过案例分析:

【操作系统】第八章——进程调度算法_第4张图片

pw、px、py、pz为四个进程,c代表预测的执行时间

通过调度算法来完成就绪进程队列的的排序

  • 如果新来一个进程,而且它的执行时间比当前运行进程的时间短怎么办?

(1)方案一:继续运行当前的进程,将新来的进程插入到就绪队列的队首,不会立刻去执行这个新来的队列【非抢占式,SPN】

(2)方案二:将当前进程从运行态切换到就绪态,并重新挂回到就绪队列中,让这个新进程去占用CPU执行【抢占式,最短剩余时间的策略,SRT】

【操作系统】第八章——进程调度算法_第5张图片

SPN方法可以保证平均周转时间是最短的

  • 短任务优先调度算法的问题:

(1)连续的短任务流会使长任务饥饿

(2)短任务可用时的任何长任务的CPU时间都会增加平均等待时间

(3)要预先知道进程任务的执行时间【利用执行的历史数据去预测】
【操作系统】第八章——进程调度算法_第6张图片
【操作系统】第八章——进程调度算法_第7张图片

3、最高响应比优先调度算法(HRRN)

  • 属于短进程优先调度算法的一种改进 >> 不可抢占 + 进程等待时间【防止无限期推迟】
  • 最高相应比公式:R = (w + s) / s【w:等待时间、s:执行时间】

4、轮循调度算法(RR)

  • 各个进程轮流占用CPU【体现了公平策略】

【操作系统】第八章——进程调度算法_第8张图片

  • 案例分析:

【操作系统】第八章——进程调度算法_第9张图片

p1-p4四个进程,甘特图为占用CPU的时间片,计算了每个进程的等待时间和平均等待时间

  • 轮循算法的局限性:【时间量子就是时间片】

(1)额外的上下文切换导致很大的开销

(2)如果时间片太小。尽管反应迅速,不过吞吐量会受到大量上下文切换的影响

(3)如果时间片太大。会导致等待时间过长,极限情况下退化到先到先处理调度算法

所以应该选择一个合适大小的时间量子,维持上下文切换开销处于1%以内

  • 分析不同时间片的大小对平均等待时间的影响:

【操作系统】第八章——进程调度算法_第10张图片

5、多级队列调度算法

  • 就绪队列被划分为独立的队列,不同的队列采用不同的调度算法
  • 当高优先级的任务完成之后,再去执行低优先级的任务
    【操作系统】第八章——进程调度算法_第11张图片

6、多级反馈队列调度算法(MFQ)

  • 反馈体现在进程可以在不同的队列中移动
  • 进程任务随着等待时间变长,它的优先级会不断变高

【操作系统】第八章——进程调度算法_第12张图片

7、公平共享调度算法(FFS)

【操作系统】第八章——进程调度算法_第13张图片

8、调度算法的测评方法与汇总:

【操作系统】第八章——进程调度算法_第14张图片

【操作系统】第八章——进程调度算法_第15张图片

四、实时调度

之前为面向通用操作调度算法,实时操作系统一般用于工业控制


1、什么是实时系统?

  • 一种正确性依赖于其时间和功能两方面的操作系统

  • 性能指标体现在两方面:时间约束的及时性、速度和平均性能相对不重要

  • 主要特性:时间约束的可预测性

  • 实时系统又分为两类:

(1)强实时系统:需要在保证的时间内完成重要的任务,必须完成

(2)弱实时系统:要求重要的进程的优先级更高,尽量完成,并非必须

  • 一次实时任务:

【操作系统】第八章——进程调度算法_第16张图片

(1)就绪后不会立刻执行,在这段时间内执行

(2)Relative deadline 是相对截止时间,Absolute deadline是真正结束的时间

(3)Execution time 是实际执行的时间

  • 周期任务:

【操作系统】第八章——进程调度算法_第17张图片

从图中可以看出时限为5,蓝色部分为实际执行

2、对于强弱实时系统的时限有什么要求呢?

(1)硬时限

  • 如果错过了最后期限,可能发生非常严重的后果
  • 必须事先验证在最坏的情况下是否能满足时限
  • 保证确定性

(2)软时限

  • 理想情况下,时限应该被最大满足,没有满足就相应的降低要求
  • 尽最大努力保证

3、设置什么样的调度算法满足硬实时和软实时的调度需求?

  • 静态优先级调度:在任务执行前就已经确定了任务的优先级
  • 动态优先级调度:在任务执行过程中,任务的优先级不断变化

【操作系统】第八章——进程调度算法_第18张图片

【操作系统】第八章——进程调度算法_第19张图片

五、多处理器调度

1、在有多个CPU的情况下,如何完成多个进程并行的调度?

这就要涉及到我们多处理器的调度算法了。

如何确保CPU的负载平衡?

【操作系统】第八章——进程调度算法_第20张图片

六、优先级反转

【操作系统】第八章——进程调度算法_第21张图片
【操作系统】第八章——进程调度算法_第22张图片

通过优先级继承来解决,访问共享资源速度变快

【操作系统】第八章——进程调度算法_第23张图片

你可能感兴趣的:(操作系统,算法,前端,数据库)