一、背景

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

(1)上下文切换

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

(2)CPU调度

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

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

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

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

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

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

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

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

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

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

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

二、调度准则

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

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

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

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

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

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

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

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

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

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

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

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

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


三、调度算法

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

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

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

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

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

(1)优点:实现简单

(2)缺点:

平均等待时间波动较大

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

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

2、短任务优先调度算法

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

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

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

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

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

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

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

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

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

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

(3)要预先知道进程任务的执行时间【利用执行的历史数据去预测】

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

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

4、轮循调度算法(RR)

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

  • 案例分析:

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

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

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

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

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

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

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

5、多级队列调度算法

  • 就绪队列被划分为独立的队列,不同的队列采用不同的调度算法
  • 当高优先级的任务完成之后,再去执行低优先级的任务

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

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

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

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

四、实时调度

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

1、什么是实时系统?

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

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

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

  • 实时系统又分为两类:

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

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

  • 一次实时任务:

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

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

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

  • 周期任务:

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

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

(1)硬时限

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

(2)软时限

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

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

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

五、多处理器调度

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

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

如何确保CPU的负载平衡?

六、优先级反转


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

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

  1. 操作系统实验二——进程调度算法(FCFS、RR)

    目录 进程调度算法 FCFS算法代码 RR算法代码 进程调度算法 FCFS算法代码 #include <stdio.h> #include <string.h> #includ ...

  2. 【操作系统】常见进程调度算法特点总结比较

    不同的CPU调度算法具有不同属性,且可能对某些进程更为有利. 为了选择算法以适用于特定情况,必须分析各个算法的属性.为在不同算法之间进行比较,需要一些重要的评价指标,指标如下: CPU使用率:需要使C ...

  3. 2.2.4 操作系统之作业/进程调度算法(FCFS先来先服务、SJF短作业优先、HRRN高响应比优先)

    文章目录 0.思维导图 1.先来先服务---FCFS 2.短作业优先---SJF 3.高响应比优先---HRRN 4.三种算法的对比和总结 0.思维导图 1.先来先服务-FCFS First come ...

  4. 操作系统中常见的进程调度算法

    一.调度与调度算法 调度:操作系统管理了系统的有限资源,当有多个进程(或多个进程发出的请求)要使用这些资源时,因为资源的有限性,必须按照一定的原则选择进程(请求)来占用资源.这就是调度.目的是控制资源 ...

  5. 操作系统之进程调度算法

    操作系统中的进程调度算法进行分析: 1.先来先服务算法(FCFS) 先来先服务算法是按照作业到达的先后次序来进行调度,或者说是优先考虑在系统中等待时间最长的作业,而不管该作业所执行时间的长短,从后备作 ...

  6. linux进程--进程调度算法(十三)

    1.先来先服务(FCFS)调度算法(非抢占) 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度.当在作业调度中采用该算法时,每次调度都是从后备作业队列中选 ...

  7. 进程调度算法——C++实现 [ FCFS,SJF,HPR,HRN + 开源代码 + 详细解析 ]

    ✅ (原创,库存,第100篇博客,纪念一下) 文章目录 零.动态演示图 一.实现原理 二.实现内容: 三.算法流程图: 3.1 先来先服务算法(FCFS)的流程图: 3.2 最短作业优先算法(SJF) ...

  8. 进程调度算法相关习题

    处理机调度与死锁相关习题 1.1.假设一个系统有 5 个进程,他们的到达时间和服务时间如上表所示,忽略 I/O 以及其他的开销时间,若分别按 先来先服务( FCFS ) . 非抢占式及抢占 的短进程优 ...

  9. (王道408考研操作系统)第二章进程管理-第二节4:调度算法详解2(RR、HPF和MFQ)

    文章目录 一:时间片轮转调度算法(RR) 二:优先级调度算法(HPF) 三:多级反馈队列调度算法(MFQ) 总结 进程调度算法也称为CPU调度算法,操作系统内存在着多种调度算法,有的调度算法适用于作业 ...

最新文章

  1. 尝试用单元测试做spring注入调用service
  2. Eclipse 高亮显示选中的相同变量
  3. 如何在 IDEA 使用Debug 图文教程
  4. QToolButton设置图标位置
  5. Qt-qwidget项目入门实例
  6. vue.js中的组件是什么?
  7. 腾讯广告算法大赛 | 专家开小灶,独家解析Lookalike那些事儿
  8. js子窗口调用父窗口函数并传递对象给父窗口的方法
  9. python中不包不包括_Python文件部分(不包括数据)
  10. 数据可视化大屏案例系列 1
  11. videojs播放器插件使用详解
  12. 服务器配置Token验证失败
  13. java压缩文件解压失败_java安装 解压缩核心文件失败
  14. HTML+CSS奥运五环
  15. 谷歌关闭中国地区音乐搜索服务与产品设计
  16. 如何在win7下安装XP系统?
  17. 基于K8S的容器化PaaS平台建设
  18. Bootstrap3基础 btn-xs/sm... 按钮的四种大小
  19. 极光短信在程序中(JAVA)的使用
  20. Attention 机制是什么?

热门文章

  1. java生成32位流水号,Java生成流水号
  2. 微信小程序收获地址管理
  3. linux设置操作系统安装盘的iso文件为安装源安装mysql服务_Linux 操作系统安装盘的定制...
  4. Windows XP中HTML文件图标变为未知图标的解决方法
  5. 用 Python 画动态时钟
  6. 简单对接第三方物流接口TestDemo
  7. 自然语言处理标记工具汇总
  8. Ubuntu 安装adb/fastboot工具(二十三)
  9. Hutool Http客户端工具类-HttpUtil使用
  10. 蔡崇信:我为什么敢放弃580万年薪 拿月薪500跟马云