进程管理(十三)---进程调度基本原理

2023-11-10

1. 为什么需要调度

进程调度的概念比较简单,我们假设在一个单核处理器的系统中,同一时刻只有一个进程可以拥有处理器资源,那么其他的进程只能在就绪队列中等待,等到处理器空闲之后才有计划获得处理器资源来运行。在这种场景下,操作系统就需要从众多的就绪进程中选择一个最合适的进程来运行,这个就是调度器需要做的事情。

作为一个通用的操作系统,需要兼顾各种类型的进程,包括交互式进程、批处理进程、实时进程等。其特征如下:

  • 交互式进程: 与人机交互的进程,例如鼠标、键盘、触摸屏等相关的应用,这类进程的特点是系统响应时间越短越好,否则用户就会抱怨系统卡顿
  • 批处理进程: 此类进程默默运行,可能会占用比较多的系统资源,对响应时间没有确定的要求
  • 实时进程: 有些应用对整体时延有严格的要求,如VR设备,从头部转动到画面显示的间隔时间有明确的要求,否则人的体验不是太好;同时例如工业控制系统,不符合时延可能会导致严重的事故

我们以生活中为例,来看看调度器对我们实际生活的影响,以我们手机上的一个场景为例

如我们手机上运行一个机器学习的程序,大约CPU需要运行30分钟,我们也需要播放音乐

如果没有调度器:

在这里插入图片描述

对于手机上运行的学习进程和播放进程,学习进程属于批处理进程,而播放音乐属于实时进程,如果整体播放延时比较大就会出现卡顿的情况,用户体验就会很差。如果没有调度器,对于用户就需要30分钟才能播放音乐,那么它可能等不到30分就会抛弃这个手机。

如果有调度器:调度器让生活更美好

在这里插入图片描述

调度器“任性化”将程序切片执行,对于用户就可以边听音乐边等待他的程序运行完,能够完美的实现二者的兼容。

2. 如何设计一个调度器

2.1 什么是调度器

通常来说,操作系统是应用程序和可用资源直接的媒体,CPU是一个重要的资源,调度器可以临时分配一个任务在CPU上执行。为了使各个进程间可以公平共享CPU时间,而同时又要考虑不同的任务优先级,所以就需要一个调度器,来保证以下功能

  • 有效的分配CPU时间片,根据用户的目标来提供一个很好的用户体验
  • 当面对一些互相冲突的目标的时候,提供一个最优化的调度算法,例如既要为关键实时任务最小响应时间,又要最大限度的提高CPU的总体利用率

2. 2 进程分类

如果站在CPU的角度来看进程,有些进程一直占用处理器,有些进程只需要一部分处理器资源即可。所以进程按照这个特性可以分为两类

  • CPU消耗型:

CPU消耗型的进程会把大部分的时间用在运行代码上,并且会一直占用CPU。一个常见的例子就是while循环的运行,如运行大量计算的程序等。

  • IO消耗性:

IO消耗性的进程会把大部分的时间用在提交I/O请求或等待I/O请求,所以这类的进程通常只需要很少的处理器计算资源即可,如需要键盘的输入进程或等待网路I/O的进程。

2.3 调度器目标

知道了进程的分类,那就可以知道哪些场景需要调度来协调,如IO消耗性的,例如磁盘,打印机,网络等场景。调度在不同场景下的目标有

  • 高吞吐量: 最大系统利用率(高吞吐量),对于一些批处理系统中需要考虑
  • 低响应时间: 此类进程经常与用户进行交互, 因此需要花费很多时间等待键盘和鼠标操作. 当接受了用户的输入后, 进程必须很快被唤醒, 否则用户会感觉系统反应迟钝,主要用于一些交互式系统需要重点考虑
  • 低功耗: 对于目前的移动设备,如何设计一个更优的调度算法,来保证系统的低功耗也需要重点考虑
  • 实时性: 这些进程由很强的调度需要, 这样的进程绝不会被低优先级的进程阻塞. 并且他们的响应时间要尽可能的短

为了达到一些共有的目标,要达到系统资源的高利用率,多任务公平性,低调度开销,所以需要设计调度器基于以下的场景进行考虑

  • 降低周转时间: 任务第一次进入系统到执行结束的时间,使批处理用户等待输出的时间尽可能短
  • 降低响应时间: 任务第一次进入系统到第一次给用户输出时间,使交互用户的响应时间尽可能短
  • 实时性: 在任务的截止时间内要完成任务
  • 公平性: 每个任务都应该有机会执行,不能饿死,保证每个进程得到合理的CPU时间
  • 开销低: 调度器是为了优化系统,而非制造性能Bug
  • 可扩展性: 随着任务数量不断增加,仍然能正常工作
  • 吞吐量: 使单位时间内处理的进程数量尽可能多

2.4 调度策略

确定如何从就绪队列中选择下一个执行的进程进入调度,需要解决以下问题

  • 如何挑选就绪队列中的哪一个进程
  • 通过什么样的调度准则来选择

2.5 如何设计好的调度算法

调度算法的要求,希望得到**“更快”**服务,那么如何定义什么是更快呢?根据调度器的目标,其可以重点关注:

  • 高吞吐量:传输文件时的高带宽
  • 低响应延时:玩游戏时的低延迟

调度器的响应目标考虑:

  • 减小响应时间:及时处理用户的输入请求,尽快将输出反馈给用户
  • 减小平均响应的时间波动:在交互系统中,可预测性比高差异低平均更重要
  • 低延迟调度改善了用户的交互体验:如果移动鼠标时,屏幕中的光标没动,那么客户会如何做呢?会不会重启

处理器调度吞吐 量目标考虑

  • 增加吞吐量:减小开销,主要是上下文切换的开销,系统资源的高利用(CPU /IO设备)
  • 减小等待时间:减小每个进程的等待时间

处理器公平的定义:

  • 保证每个进程占用相同的CPU时间
  • 保证每个进程的等待时间相同

3 调度算法

3.1 先来先服务算法(First Come First Served, FCFS)

定义

每次从就绪队列选择最先进入队列的进程,然后一直运行,直到进程退出或被阻塞,才会继续从队列中选择第一个进程接着运行。

依据进程进入就绪队列的先后顺序排列,进程进入等待或者结束状态时,就绪队列中的下一个进程占用CPU,3个进程,计算时间分别为12,3,3,FCFS算法的周转时间,根据任务到达的顺序不同,周转时间不同

在这里插入图片描述

结合大家学习中,遇到的实际例子,我们来学习下整个过程,例如该过程中,调度器是我们生活中遇到的学霸,而此时有3个同学想学霸请教问题,其思路如下

在这里插入图片描述

该问题对于C同学来说,有一个很大的问题是,我的问题很简单,却需要等那么长的时间,所以对于该算法的特征如下:

优点 缺点
简单 1. 平均等待时间波动较大,短进程可能排到长进程后面
2. IO资源和CPU资源的利用率较低,对于上面的例子,如果该同学需要查阅相关文档,那么学霸就需要一直等待,浪费学霸的资源

3.2 短进程优先算法(SPN)

定义

它会优先选择运行时间最短的进程来运行,这有助于提高系统的吞吐量。

选择就绪队列中执行时间最短进程占用CPU进入运行状态,就绪队列按预期的执行时间来排序

在这里插入图片描述

进程的平均周转时间为:

在这里插入图片描述

还是基于刚才学霸解决问题的实例来看看这个算法的执行顺序,首先A同学先执行,当执行到2后,同学B和C都来寻求学霸解决问题,但是此时A占用了学霸,所以当A解决完问题后,发现同学C问题简单,所以就优先解决C的问题

在这里插入图片描述

优点 缺点
平均周转时间较短 1. 不公平,可能出现导致饥饿,连续的短进程流会使得长进程长时间无法获得CPU资源
2. 平均响应时间过长
3. 需要预知未来,需要解决预估下一个CPU计算的持续时间

3.3 时间片轮转算法(RR, Round-Robin)

定义

每个进程被分配一个时间段,称为时间片(*Quantum*),即允许该进程在该时间段中运行。

  • 如果时间片用完,进程还在运行,那么将会把此进程从 CPU 释放出来,并把 CPU 分配另外一个进程;
  • 如果该进程在时间片结束前阻塞或结束,则 CPU 立即进行切换;

通过时间片,分配处理器资源的基本单元,当时间片结束后,按FCFS算法切换到下一个就绪进程,我们还是以刚才例子为例,此时为

在这里插入图片描述

但是这种算法也需要重点考虑时间片长度,因为切换进程,需要有额外的上下文切换

时间片太长

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

时间片太短

  • 反应迅速,但产生大量的上下文切换
  • 大量上下文切换开销会影响系统的吞吐量

时间片长度选择目标

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

3.4 调度优先级

对于操作系统中的任务是不同的,例如,系统进程和用户进程、前台进程和后台进程,如果不加以区分,那么系统中关键的任务无法及时处理,后台运算导致视频播放卡顿,所以基于此,重要的任务需要被优先调度,就产生了优先级的概念。

3.4.1 多队列调度算法(MQ)

对于该调度算法,就绪队列被划分成多个独立的子队列,如前台(交互)、后台(批处理),每个队列拥有自己的调度策略,如前台-RR,后台-FCFS,队列间的调度

  • **固定优先级:**先处理前台,后处理后台,可能导致饥饿
  • **时间片轮转:**每个队列读的到一个确定的能够调度器进程的总时间,如80%CPU时间用于前台,20%CPU时间用于后台

在这里插入图片描述

还是以学霸解决问题为例,基于此的算法为:

在这里插入图片描述

所以该算法特征为:

  • 维护多个优先级队列
  • 高优先级的任务优先执行
  • 同优先级内使用Round Robin调度

3.4.2 公平共享调度(FSS, Fair Share Scheduling)

公平共享调度控制用户对系统资源的访问

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

4 调度算法总结

算法 优点 缺点
先来先服务算法 简单 不公平,平均等待时间较差
短进程优先算法 平均周转时间最小 1. 不公平,可能导致饥饿
2. 需要精确预测计算时间
时间片轮转算法 公平 平均等待时间较差
公平共享调度 公平是第一要素
多队列调度算法 多种算法的集成
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进程管理(十三)---进程调度基本原理 的相关文章

  • 计算机网路基础 - 一些基本概念与网络结构

    1 基本概念 计算机网络 通信技术 计算机技术 是两项技术紧密结合的产物 通信系统的基础模型 计算机网络 是指将地理位置不同 具有独立功能的多台计算机及其外部设备 通过通信线路连接 在网络操作系统 网络管理软件及网络通信协议的管理和协调下
  • System.getProperty用法

    转自 http blog darkmi com 2011 03 16 1666 html System getProperty 用于获取当前的系统属性 比如java版本 操作系统名称 区域 用户名等 这些属性一般由jvm自动获取 不能手工设
  • Win11微软账号登录不上?Win11登录Microsoft账户出错的解决方法

    Win11微软账号登录不上 近期有部分Win11用户反映在登录微软账号会出现一直转圈 无法登录的情况 这样导致部分功能都不能正常使用了 为此十分令人头疼 那么对于这一情况 有没有什么方法可以有效的解决呢 下面小编教给大家操作方法 大家可以去
  • Linux系统的安装(在VM虚拟机上安装CentOS 7)

    工具准备 物理计算机一台 配置要求 操作系统 win10 64位 大家基本上都是 硬盘可用容量 20G以上 内存容量 4G以上 虚拟机安装包 VMware workstation full 12 5 下载链接 点我下载 提取码 9gha C
  • windows下命令行修改系统时间;修改系统时间的软件

    找了很久 都没有找到 还找了关键词 dos下修改系统时间 因为看到linux下修改系统时间是用hwclock 命令写入主板芯片 而我由于某些原因想自动化修改系统时间 所以找windows下修改系统时间的软件 没有找到 有一个 意天禁止修改系
  • Linux进程管理:deadline调度器

    一 概述 实时系统是这样的一种计算系统 当事件发生后 它必须在确定的时间范围内做出响应 在实时系统中 产生正确的结果不仅依赖于系统正确的逻辑动作 而且依赖于逻辑动作的时序 换句话说 当系统收到某个请求 会做出相应的动作以响应该请求 想要保证
  • VMware-Ubuntu安装bochs

    我的运行环境是VMware的Ubuntu 首先大家可以按照CSDN上的教程按照符合自己需求的虚拟机 我在上午还在VMware和virtualBox之间做选择 但是由于已经安装过了VMware 所以我就直接用了VMware 当然了 一千人眼中
  • mapengpeng1999@163.com 操作系统4~处理机调度

    处理机调度 1 三级调度体系 1 处理机调度主要是对处理机运行时间进行分配 即 按照一定算法或策略 将处理机运行时间分配给各个并发进程 同时尽量提高处理机的使用效率 2 现代操作系统中 按调度所实现的功能分3种类型 高级调度 中级调度和低级
  • ps aux 和ps -aux和 ps -ef的选择

    Linux中的ps命令是Process Status的缩写 ps命令用来列出系统中当前运行的那些进程 ps命令列出的是当前那些进程的快照 就是执行ps命令的那个时刻的那些进程 如果想要动态的显示进程信息 就可以使用top命令 要对进程进行监
  • CentOS7编译内核

    下面记录了我在CentOS7上编译新内核的过程 背景 实验室的一台服务器上装且仅装了CentOS7 内核版本为3 10 0 327 el7 x86 64 我要在当前系统上 编译 安装内核4 1 16 搭建编译环境 sudo yum inst
  • CF、SF、OF、ZF标志位

    没学汇编 这种题我真是做一道错一道 OF overflow flag 溢出标志位 溢出标志位 OF 1 表示带符号整数运算时结果发生溢出 对于无符号整数运算 OF没有意义 对于有符号数的溢出判断方式有 1 采用一位符号位 思想为 或 则为溢
  • 程序员的自我修养——链接、装载与库

    1 温故而知新 操作系统概念 北桥 连接高速芯片 系统调用接口 以软件中断的方式提供 如Linux使用0x80号中断作为系统调用接口 多任务系统 进程隔离 设备驱动 直接使用物理内存的弊端 地址空间不隔离 内存使用效率低 程序运行的地址不确
  • Linux系统如何看目录属于哪个磁盘分区

    Linux是先有目录 再有磁盘分区 df h 目录 例如 没有挂载磁盘的目录 显示在系统盘 root iZ2ze57v3n0zma46zqiq8nZ sh 1 5 5 df h alidata Filesystem Size Used Av
  • 操作系统 段页式存储管理

    一 引入 分页系统是以页面作为内存分配的基本单位 能有效地提高内存利用率 但信息共享等不方便 分段系统是以段作为内存分配的基本单位 它能够更好地满足用户多方面的需要 信息共享 动态链接等 但采用分区方式管理物理内存 仍然存在碎片问题 段页式
  • Linux学习--CentOS7.5

    CentOS7命令大全 Linux系统简介 Unix Linux发展史 Linux目录结构 树形结构 查看 切换以及创建目录 文本内容操作 grep工具 关机和重启 Linux命令 基本用法 ls list 使用通配符 mkdir 别名 g
  • 自己动手写操作系统(一)

    本系列文章将一步步实现一个简单的操作系统 实验环境是在Linux系统下通过Bochs虚拟机运行我们自己写的操作系统 一 实验环境搭建 1 Ubuntu的安装 Windows用户可以选择在虚拟机中安装Ubuntu 具体安装教程可自行搜索 2
  • 使用inet_ntop转换IPv6地址时在macOS和linux上的行为不一样

    下面这段python代码在macOS和linux时运行的结果是不同的 import socket ip socket inet pton socket AF INET6 1 2 3 0 5 6 7 8 print socket inet n
  • Linux 内核中的 Device Mapper 机制

    Linux 内核中的 Device Mapper 机制 尹 洋 在读博士生 尹洋 中科院计算所国家高性能计算机工程技术研究中心的在读博士生 主要从事服务部署和存储资源管理以及Linux块设备一级的开发和研究工作 简介 本文结合具体代码对 L
  • Anaconda 安装 Python 库(MySQLdb)的方法-(转)

    安装python库的过程中 最重要的地方就是版本需要兼容 其中操作系统为64位 Python为2 X 64位 下载安装文件的时候也要注意版本匹配 其中文件名中包含的cp27表示CPython 2 7版本 cp34表示CPython 3 4
  • 使用ShellJS提升你的开发效率(一)

    Shelljs Unix shell commands for Node js Shelljs是Node js下的脚本语言解析器 具有丰富且强大的底层操作 Windows Linux OS X 权限 Shelljs本质就是基于node的一层

随机推荐

  • 创建安装程序Visual Studio Installer

    1 在vs2010 选择 新建项目 其他项目类型 Visual Studio Installer 安装项目 命名为 Setup1 这是在VS2010中将有三个文件夹 1 应用程序文件夹 表示要安装的应用程序需要添加的文件 2 用户的 程序
  • Redis的启动方式三种

    Redis的启动方式三种 启动一个 进入到redis中的src目录下 在控制台输入指令 redis server 注意 这样启动默认端口是 6379 进入客户端输入 redis cli 查看进程 杀死进程 指定端口启动redis服务 red
  • 如果使用Vue3.0实现一个 Modal,你会怎么进行设计?

    一 组件设计 组件就是把图形 非图形的各种逻辑均抽象为一个统一的概念 组件 来实现开发的模式 现在有一个场景 点击新增与编辑都弹框出来进行填写 功能上大同小异 可能只是标题内容或者是显示的主体内容稍微不同 这时候就没必要写两个组件 只需要根
  • mysql thread conn_Mysql thread 与 OS thread

    gt 欢迎阅读 陈同学博客原文 本文作为 Mysql插入2 6亿条垃圾数据后会发生什么 手工重现Mysql插入的 2 6亿 垃圾数据 的续篇 初始目的是想看看kill掉执行中的事务对应的os thread之后会发生什么 同时学习下mysql
  • apt-get简介

    在Ubuntu系统中 经常要用到apt get install指令来安装软件 由于常常需要root权限来操作 所以搭配sudo食用口感更佳 apt get指令对于安装 卸载 升级软件提供一条龙服务 对比于源码安装 实在是业界良心 源码安装
  • [Python系列-10]:Python之人工智能 - 基本工具 -4- 数组与矩阵数学工具Numpy

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenBing 本文网址 https blog csdn net HiWangWenBing article details 119281620 目录 第1章
  • 【毕业设计_课程设计】基于协同过滤算法的个性化推荐系统(源码+论文)

    文章目录 0 项目说明 1 研究目的 2 研究方法 3 系统设计 3 1 前台模块 3 1 1 首页 3 1 2 个人中心 3 1 3 发布者中心 3 2 后台模块 3 2 1 首页 3 2 2 新闻管理 4 研究结论 5 界面展示 6 论
  • tree【WQS二分+MST】

    题目链接 洛谷 精确涉及到了WQS二分 BZOJ 2654 不推荐 个人不推荐做BZOJ2654的这道题 因为那道题可以水过去 不用WQS二分也是可以的 可以直接二分答案 显然是没有这个好的 先在这里讲一下什么是WQS二分吧 也是从网上看来
  • 关联分析的核心算法--Apriori算法的指标体系及实例

    Apriori算法的指标体系 Apriori算法生成的关联规则包含三个指标 支持度 Support 置信度 Confidemce 提升度 Lift 一般使用支持度 置信度二个指标判断事务之间关联关系的强弱 因此也被称为支持度 置信度框架 S
  • git海思Hi3516EV200的镜像,并编译

    前言 前面几篇文章讲解了 搭建海思的交叉编译环境的方法 选择docker或者 选择ubuntu下自己编译都行 DOPI的EV200开发板 板载的是SPI nand Flash W25N01GV 在编译uboot时 需要选择nand U Bo
  • 数据预测之BP神经网络具体应用以及matlab代码

    1 具体应用实例 根据表2 预测序号15的跳高成绩 表2 国内男子跳高运动员各项素质指标 序号 跳高成绩 30行进跑 s 立定三级跳远 助跑摸高 助跑4 6步跳高 负重深蹲杠铃 杠铃半蹲系数 100 s 抓举 1 2 24 3 2 9 6
  • Debian部署Tomcat 注册服务并设置开机启动

    目录 写在前面 1 准备工作 2 在Linux下安装Tomcat 3 Tomcat注册服务并设置开机启动 3 1 使用 rc local 配置开机启动 3 2 使用 etc init d 3 3 systemd配置 通用方式 在Debian
  • matlab显示全球海岸线

    1 使用matlab自带海岸线文件 画海岸线 load coast 加载matlab自带海岸线文件 plot long lat k LineWidth 0 7 绘制海岸线 并调整颜色 线类型 线宽 axis 180 180 90 90 调整
  • 轻松用Python控制你的手机

    Python编程几乎能做任何事 只要你敢想 敢尝试 今天来看下用Python代码怎么来控制你的安卓手机 具体的说是代替你的手 实现自动的触摸和一些动作 实现自动化操作 主要用的是安卓手机的Android调试桥 Android Debug B
  • Unity增量时间Time.deltaTime详解

    如博文无法正常显示 请访问原文地址 https blog csdn net ChinarCSDN article details 82914420 Unity增量时间详解 本文提供全流程 中文翻译 Chinar 坚持将简单的生活方式 带给世
  • 特征工程——为什么要对数值类型的特征做归一化?

    百面机器学习涉及到的问题 在我不理解和认为不对的地方做了补充和修改 若有错误欢迎指教 为了消除数据特征之间的量纲影响 我们需要对特征进行归一化处理 使得不同指标之间具有可比性 例如 分析一个人的身高和体重对健康的影响 如果使用米 m 和千克
  • 简单的数组排序

    1 小到大 org junit Testpublic void test throws InterruptedException int num 1 6 5 2 7 for int i 0 i
  • Arduino小车的直线行走控制

    Arduino是相对于stm32最简单的一个控制单片机 其多用于相对较简单的控制 用于学科竞赛以及毕业设计之中 为了让大家入门 接下来的几期我将会分享Arduino小车的控制部分 希望入门新手能够学习 以下为对应的核心代码 以下代码仅利用P
  • 【MQTT】

    系列文章目录 MQTT 搭建 在云服务器上搭建MQTT服务 失败了也挺可爱 成功了就超帅 文章目录 前言 1 EMQX简介 2 EMQX部署 3 EMQX一些操作指令 3 1 启动EMQX 3 2 停止EMQX 3 3 检查EMQX运行状态
  • 进程管理(十三)---进程调度基本原理

    1 为什么需要调度 进程调度的概念比较简单 我们假设在一个单核处理器的系统中 同一时刻只有一个进程可以拥有处理器资源 那么其他的进程只能在就绪队列中等待 等到处理器空闲之后才有计划获得处理器资源来运行 在这种场景下 操作系统就需要从众多的就