【8. 调度算法】

在这里插入图片描述

🎉作者简介:👓 博主在读机器人研究生,目前研一。对计算机后端感兴趣,喜欢 c + + , g o , p y t h o n , 目前熟悉 c + + , g o 语言,数据库,网络编程,了解分布式等相关内容 \textcolor{orange}{博主在读机器人研究生,目前研一。对计算机后端感兴趣,喜欢c++,go,python,目前熟悉c++,go语言,数据库,网络编程,了解分布式等相关内容} 博主在读机器人研究生,目前研一。对计算机后端感兴趣,喜欢c++,go,python,目前熟悉c++go语言,数据库,网络编程,了解分布式等相关内容
📃 个人主页: \textcolor{gray}{个人主页:} 个人主页: 小呆鸟_coding
🔎 支持 : \textcolor{gray}{支持:} 支持: 如果觉得博主的文章还不错或者您用得到的话,可以免费的关注一下博主,如果三连收藏支持就更好啦 \textcolor{green}{如果觉得博主的文章还不错或者您用得到的话,可以免费的关注一下博主,如果三连收藏支持就更好啦} 如果觉得博主的文章还不错或者您用得到的话,可以免费的关注一下博主,如果三连收藏支持就更好啦👍 就是给予我最大的支持! \textcolor{green}{就是给予我最大的支持!} 就是给予我最大的支持!🎁
💛本文摘要💛

本专栏主要是讲解操作系统的相关知识 本文主要讲解 调度算法


清华操作系统系列文章:可面试可复习
1. 操作系统—概述
2. 操作系统—中断、异常、系统调用
3. 操作系统—物理内存管理
4. 操作系统—非连续内存分配
5. 虚拟内存管理
6. 操作系统—虚拟内存管理技术页面置换算法
7. 进程管理
8. 调度算法
9. 同步与互斥
10. 信号量和管程
11. 死锁和进程通信
12. 文件系统管理

🌑调度算法

  • 背景
    • CPU调度
    • CPU调度时间
  • 调度准则
  • 调度算法
  • 实时调度
  • 多处理器调度
  • 优先级反转

🌗1. 背景

上下文切换

  • 切换CPU的当前任务, 从一个进程/线程到另一个
  • 保存当前进程/线程在PCB/TCB中的执行上下文(CPU状态)
  • 读取下一个进程/线程的上下文

CPU调度(什么时候切,根据什么原则切)

  • 从就绪队列中挑选一个进程/线程作为CPU将要运行的下一个进程/线程
  • 调度程序: 挑选进程/线程的内核函数(通过一些调度策略)
  • 什么时候进行调度?
  • 从一个状态到另一个状态变化的时候,会触发一次调度,特别是和运行相关的状态变化

在这里插入图片描述
用户态运行调度

  • 调度需要考虑俩种情况,大部分调度的是应用程序,对于应用程序而言,它运行是在用户态的进程形式存在的

内核运行调度

内核运行调度程序的条件(满足一条即可)

  • 一个进程从运行状态切换到等待状态
  • 一个进程被终结

不可抢占

  • 调度程序必须等待事件结束

可以抢占

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

🌗2. 调度原则

🌔2.1 概述

  • 调度策略
  • 程序执行模型
  • 比较调度算法的准则
  • 吞吐量VS延迟
  • 公平的目标

🌔2.2 调度策略

  • 调度策略

人们通常都需要"更快"的服务
什么是更快?

  • 传输文件时的高带宽
  • 玩游戏时的低延迟
  • 这两个因素是独立的

和水管类比

  • 低延迟: 喝水的时候想要一打开水龙头水就流出来
  • 高带宽: 给游泳池充水时希望从水龙头里同时流出大量的水,并且不介意是否存在延迟

我们的目标:

  • 减少响应时间: 及时处理用户的输出并且尽快将输出提供给用户
  • 减少平均响应时间的波动: 在交互系统中,可预测性比高差异性低平均更重要
  • 增加吞吐量: 减少开销(操作系统开销,上下文切换);系统资源的高效率用(CPU,IO设备)
  • 减少等待时间: 减少每个进程的等待时间

在这里插入图片描述

在这里插入图片描述

评价指标

  • CPU使用率: CPU处于忙状态所占时间的百分比
  • 吞吐量: 在单位时间内完成的进程数量
  • 周转时间: 一个进程从初始化到结束,包括所有等待时间所花费的时间(等待时间 + 服务时间)
  • 等待时间: 进程在就绪队列中的总时间(处于就绪态进程多久才能变成运行态)
  • 响应时间: 从一个请求被提交到产生第一次响应所花费的总时间

公平的定义

  • 举例:

    • 保证每个进程占用相同的CPU时间
    • 这公平嘛?如果一个用户比其他用户运行更多的进程怎么办
  • 举例

    • 保证每个进程都等待相同的时间
  • 公平通常会增加平均响应时间

🌗3. 调度算法

  • FCFS (先来先服务)
    • First come, First Served
  • SPN(SJE) SRT (短进程优先(短作业优先)短剩余时间优先)
    • Shortest Process Next(Shortest Job First) Shortest Remaining Time
  • HRRN (最高响应比优先)
    • Highest Response Ratio Next
  • Round Robin (轮循)
    • 使用时间切片和抢占来轮流执行任务
  • Multilevel Feedback Queues (多级反馈队列)
    • 优先级队列中的轮循
  • Fair Share Scheduling (公平共享调度)

🌔3.1 FCFS (先来先服务)

在这里插入图片描述

优点:

  • 简单

缺点:

  • 平均等待时间波动较大
  • 花费时间少的任务可能排在花费时间长的任务后面(没有考虑抢占)
  • 可能导致IO和CPU之间的重叠处理
    • CPU密集型进程会导致IO设备闲置时,IO密集型进程也在等待

🌔3.2 SPN(不可抢占短作业优先) SRT (可抢占短作业优先)

  • 选择预测的完成时间来将任务入队

当Pw 在执行的过程中,又来了一个进程它执行的时间很短,此时有俩种策略:抢占和不抢占

  • 可以是抢占的或者是不可抢占的
    • 不可抢占:当前进程继续执行,新来的花费时间短的进程,排到就绪队列的最前面,不会打断当前正在运行的进程
    • 可抢占:Pw 当前进程,正在执行时,它本来执行时间比较久,但是当执行完一个时间片后,例如执行时间是8,此时来了一个新进程Pa 执行时间是5。此时Pw从运行态变到就绪态,把它重新挂到就绪队列中去,Pa占用CPU执行
      在这里插入图片描述

SPN最大好处是最优平均等待时间最少
在这里插入图片描述

问题

  • 可能导致饥饿

    • 连续的短任务流会使场任务饥饿
    • 短任务可用时的任何场任务的CPU时间都会增加平均等待时间
  • 需要预测未来

    • 怎么预估下一个CPU突发的持续时间
    • 简单的解决: 询问用户
    • 如果用户欺骗就杀死进程
    • 如果不知道怎么办?

🌔3.3 HRRN(最高响应比优先)

  • 前面SPN 只是考虑任务运行时间,而HRRN进行了优化多考虑了一个等待时间
  • 公式:R=(等待时间+执行时间)/执行时间
    在这里插入图片描述
    问题
  • 这个算法,不考虑抢占,当遇到优先级更高的,无法解决

🌔3.4 Round Robin(轮循)

  • 使用时间切片和抢占来轮流执行任务

在这里插入图片描述
例子

  • 从图中发现这个Round Robin时间依旧很长

问题
RR花销: 额外的上下文切换
时间量子太大:

  • 等待时间过长
  • 极限情况退化成FCFS

时间量子太小:

  • 反应迅速
  • 吞吐量由于大量的上下文切换开销受到影响

目标:

  • 选择一个合适的时间量子
  • 经验规则: 维持上下文切换开销处于1%以内

🌔3.5 Multilevel Feedback Queues(多级反馈队列)

  • 综合RR和短路优先等特点
  • 就绪队列被划分成独立的队列:

    • 比如前台(交互),后台(批处理)
  • 每个队列拥有自己的调度策略:

    • 比如前台(RR),后台(FCFS)
  • 调度必须在队列间进行:

    • 固定优先级:
      • 先处理前台,然后处理后台;
      • 可能导致饥饿
    • 时间切片:
      • 每个队列都得到一个确定的能够调度其进程的CPU总时间;
      • 比如 80%使用RR的前台,20%使用FCFS的后台

多级反馈

  • 进程执行的特征,执行的动态性,在队列中的位置有所反应
  • 进程在动态执行过程中的特征,动态调整进程的优先级,使得I/O密集型任务优先级高(交互性高的可以及时响应)。CPU密集型任务优先级下降很快(消耗资源多的可以执行慢点)

在这里插入图片描述

🌔3.6 Fair Share Scheduling(公平共享调度)

  • 前面算法只考虑一部分公平性,并没有把它作为很重要的指标
  • 有些用户开一个进程,有些用户开了多个进程,但是希望所有的用户是平等的(站在用户角度)

FSS控制用户对系统资源的访问

  • 一些用户组比其他用户组更重要
  • 保证不重要的组无法垄断资源
  • 未使用的资源按照每个组所分配的资源的比例来分配
  • 没有达到资源使用率目标的组获得更高的优先级

评价方式
在这里插入图片描述
总结

  • FCFS (先来先服务)
    • 不公平,平均等待时间较差
  • SPN(不可抢占短作业优先) SRT (可抢占短作业优先)
    • 不公平,但是平均等待时间最小
    • 需要精确预测计算时间
    • 可能会导致饥饿
  • HRRN(最高响应比优先)
    • 基于SPN改进
    • 不可抢占
  • Round Robin(轮循)
    • 公平,但是平均等待时间较差
  • Multilevel Feedback Queues(多级反馈队列)
    • 和SPN类似
  • Fair Share Scheduling(公平共享调度)
    • 公平是第一要素

🌗4. 实时调度(前面是通用调度)

🌔4.1 概述

  • 实时系统
  • 可调度性
  • 单调速率(RM)
  • 截止日期最早优先(EDF)

🌔4.2 实时系统

确保某个任务必须在规定时间完成(实时调度)

定义:

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

性能指标:

  • 时间约束的及时性;
  • 速度和平均性能相对不重要

主要特征:

  • 时间约束的可预测性

分类:

  • 强实时系统: 需要在保证时间内完成重要的任务,必须完成
  • 弱实时系统: 要求重要的进程的优先级更高,尽量完成,并非必须

问题:衡量一个进程能否完成实时性的需求
在这里插入图片描述
released :发起,也就是前面的就绪
就绪后不能立刻执行,需要等待一段时间,
蓝色:就是任务在这一段时间内开始执行
结束时间就是蓝色块右边的位置
最右边有一个deadline,当超过这个期限,则实时性就没有得到满足

实例
在这里插入图片描述
在这里插入图片描述
设计一个算法,满足硬时限和软时限
在这里插入图片描述

🌔4.3 速率单调调度(RM)

静态调度算法,在RM优先级在任务执行之前就确定了

  • 最佳静态优先级调度
  • 通过周期安排优先级
  • 周期越短优先级越高
  • 执行周期最短的任务

🌔4.4 最早期限调度(EDF)

  • 最佳的动态优先级调度
  • Deadline越早优先级越高
  • 执行Deadline最早的任务

🌗5. 多处理器调度

  • 问题1:来了一个进程,他应该让哪个CPU去执行
  • 问题2:多个CPU,就会产生有的CPU闲,有的CPU忙,确保CPU都是均匀的

在这里插入图片描述

🌗6. 优先级反转

  • 可以发生在任务基于优先级的可抢占的调度机制中
  • 当系统内的环境强制使高优先级任务等待低优先级任务时发生

在这里插入图片描述
解决办法
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小呆鸟_coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值