CHS_01.2.2.1+调度的概念、层次

CHS_01.2.2.1+调度的概念、层次

  • 调度的概念、层次
    • 知识总览
    • 调度的基本概念
    • 调度的三个层次——高级调度![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6957fdec179841f69a0508914145da36.png)
    • 调度的三个层次——低级调度
    • 调度的三个层次——中级调度
    • 补充知识:进程的挂起态与七状态模型
  • 三层调度的联系、对比
  • 知识回顾

调度的概念、层次

我们会学习处理及调度的基本概念和几个调度的层次 分别为高级调度 中级调度和低级调度 其中由中级调度 也就是内存调度
我们会引出补充一个课本上没有太多提机的知识点就是进程的挂起态 并且会介绍一个进程状态的七状态模型 之后我们还会介绍三个调度层次的联系和对比

知识总览

在这里插入图片描述

那么 首先来看一下什么是调度 其实调度这个概念和我们的生活离得并不遥远

调度的基本概念

在这里插入图片描述

比如说 在我们去银行的时候 这个银行他可能只有几个窗口可以为客户服务

那么这些客户到底应该先为谁服务呢 银行一般采用的就是先到先服务的这种这种原则

那如果说此时有一个vip客户啊 这个客户在这个银行里存了几个小目标 就是存了几个亿 那么这个vip客户可能就会被银行优先的服务 他的优先级更高

再看另外一个场景 早上咱们起床的时候 可能每个宿舍只有一个卫生间 但是大家都想成为这个坐在王座上的男人 那么每个人都想使用 但是有的人说我使我想要使用三分钟 有的人要十分钟 有的人要一分钟 还有一个人他也需要使用三分钟那 但是

在经过商量之后就决定了一种使用这个资源的一个原则 就是时间使用的短的可以让它先使用 而时间长的就后使用 如果说时间长度相同的 那么就先进入这个队列 先排队的就可以先使用 所以大家经过商量之后就决

一定用1234这样的顺序来使用卫生间这个资源 所以其实所谓的调度它就是指
当我们有一堆东西 一堆任务要处理的时候 由于当前的资源有限 那么这些事情没办法同时的被处理
那这个时候 我们就需要按照某种规则比如说先到先服务 或者说时间短的优先 这样各种这样的规则来决定
我们要用什么样的顺序来处理这些任务 这就是所谓的调度研究的问题

好的 那来看一下在我们程序运行的整个生命周期内 什么时候会发生调度的情况

调度的三个层次——高级调度在这里插入图片描述

第一种调度叫做高级调度 又叫做作业调度 所以我们这需要补充作业的概念

那作业的概念其实在之前的讲解中获得或少是提过的 那所谓的作业其实指的就是
某一个具体的任务
大家在书里面会看到这样的描述 就是说用户向操作系统提交了一个作业

那这句话其实你可以理解为 就是用户让操作系统帮他启动某一个特定的程序
然后这个程序是来处理某一个具体的任务的 所以这就是作业的概念
好 那我们知道

我们要启动一个程序 那这个程序相关的数据肯定是要从外存放到内存里面 但是我们的内存资源又是有限的

所以有时候如果内存已经满了 内存资源不足的话 那么我们给操作系统提交的

这些作业 或者说我们想系统帮我们启动的这些个程序 有可能没办法马上把它们放到内存马上启动
所以在这个时候 操作系统就会进行所谓的高级调度 或者也可以称之为作业调度

操作系统会按照作业调度相关的规则从这个所谓的作业后备对列里边
选择一个作业 先把它调入内存 并且会为这个作业建立与它相对应的进程 也就是建立一个pcb
所以这就是所谓高级调度
或者说作业调度要做的事情 如果说当前用户提交了很多作业 那这个时候需要由操作系统来决定到底要先调入哪个作业

那每个作业在整个生命周期内只会掉入一次 掉入的时候会建立pcb

当作业完成 或者说这个任务完成之后 作业会被调出 这个时候才会撤销与之对应的pcb

调度的三个层次——低级调度

在这里插入图片描述

好 那只是高级调度的概念 接下来看低级调度 又可以叫进程调度 或者叫处理机调度

因为我们内存里面其实同时会存在很多很多个进程 但是我们系统当中的cpu资源又是有限的

所以 操作系统也需要制定某一种策略 从我们的进程就绪对列当中挑选出一个进程
把处理机资源分配给他那 多到程序并发执行这件事肯定需要用到进程调度

所以 进程调度是操作系统当中最基本的一种调度 并且进程调度的频率是很高的

因为只有高频率的进程调度才可以让各个进程很快速的轮流的上cpu执行

这样才可以让用户在宏观上看好像各个进程是同时执行那样好 那只是低级调度

调度的三个层次——中级调度

在这里插入图片描述

那最后再来看中级调度 刚才我们说过 计算机当中有可能会出现这种内存资源不足的情况

内存里面同时会存在多个进程的数据 那如果说内存不足的话 其实我们可以让某一些不太紧急 不太重要的进程

先把这些进程的数据 把它从内存调出外存 那如果说一个进程的数据从内存放到了外存里边 那这个进程此时就处于挂起状态

操作系统会把这些处于挂起状态的进程 他们的pcb组织成一个对列 叫做挂起对列

其实就类似于我们之前学习过的就绪队列 阻塞队列好 那此时如果说已经有空闲的内存资源了 那操作系统是不是又需要

通过某一种调度策略来决定到底要先把哪个进程的数据 先把它调回内存

那这个就是所谓的中级调度 管的事情 又叫做内存调度 不知道大家在平时用手机的时候有没有这样的体验

就是有时候你切换程序或者说切换进程的时候 有的时候你切换你会发现那个进程

切换的很快 而有的时候那个进程切换的又很慢 那有一种可能的原因就是

当你的这个进程切换的很快的时候 那这个进程的数据有可能是放在内存里面的
而你发现切换进程很卡很慢的时候 有可能是因为你那个进程的数据它之前
已经不在你的手机内存里了 而是被系统掉到外存当中
所以当你切换这个进程的时候

系统发现这个进程现在非运行不可了 那他会临时的把这个进程相关的数据从外存在读回内存

然后 只有他读回内存之后 这个进程才可以顺利的运行 因此你会感受到有那么一丝丝的卡顿

其实卡顿的过程就是系统在进行中级调度 他选中了你的那个进程 让他回内存来运行

那显然在进程运行的生命周期内有可能会多次调出 多次调入 所以中级调度发生的频率肯定要比高级调度要更高

好的 那这就是调度的三个层次 高级调度 中级调度和低级调度 那么 既然提到了挂起状态 我们再来补充一个和挂起状态相关的七状态模型

补充知识:进程的挂起态与七状态模型

在这里插入图片描述

其实挂起状态又可以进一步的细分为就绪挂起和阻塞挂起两种状态 咱们之前已经学了进程的五状态模型 这也是408里要求掌握的一个一个进程的状态模型
那么在引入了就绪挂起和阻塞挂起两种状态之后 一个处于就绪态的进程 如果说此时这个系统的负载比较高 内存空间已经不够用了 那么他有可能会把一个处于就绪态的进程

把它放到 把它暂时调到外存当中 然后这个进程就进入了一个就绪挂起的状态

意识到内存空间空闲 或者说这个进程又需要继续执行 那么这个进程又会被激活 把它的数据 相应的数据又挪回内存当中

这样的话 一个就绪挂起的进程又回到了就绪态 除此之外 一个处于阻塞态的进程也可以被挂起

相应的 也可以再重新的被调入内存 然后进行激活 重新回到阻塞态

而有的操作系统有可能会使一个处于阻塞挂起的进程 当它等待的阻塞事件发生的时候

这个进程就会直接进入到一个就绪挂起的状态 然后之后当他再被重新被调回内存的时候 是直接回到就绪态 而不是回到阻塞态

而有的时候 一个进程当它处于运行态 运行结束之后 可能这个进程下处理机的时候就会被直接放到外存当中 让它进入就绪挂起的状态

而有的时候 一个处于创建态的进程 当它创建结束之后 创建完pcb之后 有可能出现内存空间不够的情况 那这种情况下有可能处于创建态的进程 之后会先进入到一个就绪挂起的一个状态 那么这就是所谓的七状态模型 那大家需要注意的是挂起和

阻塞的区别这两种状态是都是暂时不能获得cpu服务的两种状态 但是区别在于处于挂起态的进程,进程印是放在外存里的

而处于阻塞态的进程 它的进程其实还在内存当中 而有的操作系统也有可能会把这些处于就绪挂起和阻塞挂起的这些进程分为两个不同的挂起对列

啊 当然 也有的操作系统还会根据这个阻塞的原因不同 再把阻塞挂起的这些进程再细分为多个队列

那么这就是七状态模型 大家也需要注意一下 我们再来整理一下三层调度的联系和对比

三层调度的联系、对比

在这里插入图片描述

这三层调度分别要做什么 相信刚才的讲解应该已经比较细了 这儿就不再展开 那么高级调度和中级调度 这两层调度是发生在外存和内存之间的调度 区别在于高级调度 它是面向作业的调度 一个作业在刚开始会被调入一次 被调出一次 并且作业调入

的时候 会会为这个作业建立相应的p cb 也就是建立他相应的进程而中级调度

内存调度 它是面向进程的一种调度 它是把暂时不会运行的进程相关的进程映象相关的一些数据 把它调到外存 然后之后通过

中级调度再次再把这些进程的数据从外存调回内存 而低级调度 它是内存和cpu之间的一个调度

对于这三层调度的发生频率来说 他们的发生频率依次是从低到高的

而这三种调度对进程状态的影响是高级调度 他有可能会使一个进程从无到创建态 最后当他创建完了pcb 创建完毕之后 还会把这个进程放入到就绪队列里 让他进入就绪态

所以他对进程状态的影响是这个样子 而内存调度 它会使一个处于挂起态的进程重新回到就绪态

而如果说挂起 它又细分为阻塞挂起和就绪挂起的话 那么也可以说它可以使一个处于阻塞挂起的进程重新回到阻色态

而低级调度也就是进程调度 它是选择一个处于就绪态的进程 让它进入运行态 投入处理机开始运行 所以 这是这三种调度对进程状态的影响 那么我们再来简单回顾一下

知识回顾

在这里插入图片描述

这三种调度的后面一种名称 这三个名称才是在咱们的考题当中最高频 最容易出现的一种名称 所以这个大家需要注意

另外呢 我们需要理解三层调度的联系和对比 大家在脑子里再回忆一下 对比一下

那么我们还通过中级调度 引出了一个咱们书里没有具体介绍的一个知识点 就是所谓的挂起态 并且介绍了和挂起态相关的七状态模型 这两个知识点 其实在考试当中也是有可能被考到的

特别是自己命题的一些学校 那么最后我们需要注意的是 咱们在介绍这几种三层调度的时候 都是说他们都是按照某种规则

那么 呃 这个课当中 我们主要学习的是作业调度和进程调度相关的这些所谓的规则

而这个就是咱们之后要研究的调度算法的问题 好的 那么这就是这个小节的全部内容

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/416452.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型背景下计算机视觉年终思考小结(二)

1. 引言 尽管在过去的一年里大模型在计算机视觉领域取得了令人瞩目的快速发展,但是考虑到大模型的训练成本和对算力的依赖,更多切实的思考是如果在我们特定的小规模落地场景下的来辅助我们提升开发和落地效率。本文从相关数据集构造,预刷和生…

【STM32】STM32学习笔记-I2C通信外设(34)

00. 目录 文章目录 00. 目录01. I2C简介02. I2C外设简介03. I2C框图04. I2C基本结构05. 主机发送06. 主机接收07. 软件/硬件波形对比08. 预留09. 附录 01. I2C简介 I2C(Inter-Integrated Circuit)总线是一种由NXP(原PHILIPS)公司开发的两线式…

LightGlue: Local Feature Matching at Light Speed

一、论文概述 发表于: 2023 ICCV 作者信息:Philipp Lindenberger Paul-Edouard Sarlin Marc Pollefeys 对比算法:SuperGlue 代码:github.com/cvg/LightGlue 效果: 现有问题: 1) SuperGlue 与其他基于 …

mybatis xml多表查询,子查询,连接查询,动态sql

项目结构 数据库表 student_type 表 student 表 依赖 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.30</version></dependency><dependency><groupId>org.…

使用zabbix-proxy进行分布式监控

目录 一、准备4台服务器 二、配置主从复制 1.准备环境 2.主机名解析 3.安装数据库 4.配置主库db1 5.配置从库db2 6.主从状态显示 三、db1&#xff0c;db2配置zabbix-agent 三、zabbix-server的配置 四、zabbix-proxy的配置 1.为您的平台安装和配置Zabbix-proxy a. …

beego的模块篇 - I18n国际化

1. i18n 安装导入 安装该模块&#xff1a; go get github.com/beego/i18n 导入引用包&#xff1a; import ("github.com/beego/i18n" ) conf 目录下就有 locale_en-US.ini 和 locale_zh-CN.ini 两个本地化文件。 本地化文件的文件名和后缀是随意的&#xff0c;不…

vector迭代器的失效

1.vector的底层 vector的底层就是由三个指针构成的 iterator _start 这个指针指向vector数据起始位置。 iterator _finish这个指针指向vector数据的结束位置。 iterator _end_of_shorage这个指针指向vector容量的位置。 2.迭代器失效的种类 2.1扩容引发的迭代器失效 例&…

【GitHub项目推荐--微软开源的可视化工具】【转载】

说到数据可视化&#xff0c;大家都很熟悉了&#xff0c;设计师、数据分析师、数据科学家等&#xff0c;都需要用各种方式各种途径做着数据可视化的工作.....当然许多程序员在工作中有时也需要用到一些数据可视化工具&#xff0c;如果工具用得好&#xff0c;就可以把原本枯燥凌乱…

智能驾驶新浪潮:SSD与UFS存储技术如何破浪前行?- SSD篇

随着汽车行业的不断发展&#xff0c;对存储的需求也在不断的变化中。早期阶段的汽车对存储的需求主要是收音机、播放器、导航仪等&#xff0c;有些还可以支持光盘和U盘的外接播放。中期阶段&#xff0c;也是当前主流的燃油车行车记录、多媒体、车联网的需求&#xff0c;对存储性…

Jmeter 性能 —— 压测常遇问题+解决!

1、测试过程中CPU过高 用vmstat实时监控cpu使用情况。很小的压力AP cpu却到了80%多&#xff0c;指标是不能超过60%。vmstat 2 (每二秒显示一次系统内存的统计信息) 分析是use cpu过高还是sys cpu过高&#xff0c;常见的是use cpu使用过高。如果是sys cpu使用过高&#xff0c;先…

【内存管理】flink内存管理(一):内存管理概述:flink主动管理内存原理、flink内存模型

文章目录 一.flink为什么自己管理内存1. 处理大数据时JVM内存管理的问题2. flink主动管理内存逻辑2.1. Flink内存管理方面2.2. 序列化、反序列化说明 3. Flink主动管理内存的好处 二. Flink内存模型1. 堆内存2. 非堆内存2.1. 托管内存2.2.直接内存2.3. JVM特定内存 本节从整体使…

深入探索 Android 中的 Runtime

深入探索 Android 中的 Runtime 一、什么是 Runtime二、Android 中的 Runtime 类型2.1. Dalvik Runtime2.2. ART&#xff08;Android Runtime&#xff09; 三、Runtime 的作用和特点3.1. 应用程序执行环境3.2. 跨平台支持3.3. 性能优化3.4. 应用程序优化 四、与应用开发相关的重…