进程调度的基本过程

文章目录

  • CPU执行指令过程
  • 进程
    • PCB
    • “分时复用”
  • ☁️结语


CPU执行指令过程

一个CPU能执行那些指令,可以认为是cpu最初设计的时候就已经写死了。有一个“表格”描述了都有哪些指令。
在这里插入图片描述

以上的表格只是一个简化版本,真实的cpu指令表要复杂很多。此处假设每个指令只有8bit(实际上更长)。
RAM即内存,它的全称叫做随机访问存储器。

8 bit的指令可以分成两个部分,前4个bit 是 操作码,表示指令是干啥的,后4bit 是操作数。
在这里插入图片描述
CPU中存在了一个特殊的寄存器,“程序计数器”,它保存了接下来要从哪个内存位置来执行指令。随着指令的执行,这里的值也会随着更新,默认情况下就是+1自增过程(顺序执行),如果遇到“跳转类语句”(if、while、for、函数调用…)那么它就会设为其他的值。

执行指令的三个阶段:

  1. 取指令,cup从内存中读取到指令内容到cpu内部
  2. 解析指令,识别出这个指令是干啥的,以及对应的功能和操作数
  3. 执行指令

  1. 初始情况下,程序计数器的值是0

    1. 读取指令
      在这里插入图片描述
    2. 解析指令
      把读到的指令一分为二
      左边这里就是操作码
      在这里插入图片描述
      右边这里就是操作数
      在这里插入图片描述

    操作码表示它是干啥的指令;操作数表示这个指令是对谁操作的。
    我们可以去指令表中看这个操作码是啥意思。这个指令是LOAD A指令,并且后面的 1110 表示了一个内存地址。这个指令的工作就是把 1110 这个地址的数据,读取到寄存器 A 中。
    3. 执行指令
    把1110 (十进制的14) 地址的内存数据读取出来,放到寄存器A中。第一条指令执行完毕,系统会自动把程序计数器中的值++

  2. 执行为1的指令

    1. 读取指令
      在这里插入图片描述
      2. 解析指令
      把指令拆成 0001(操作码) 和 1111(操作数)。
      这个指令是LOAD B,就要把1111(十进制的15)地址上的数据读到寄存器B中。
      3. 执行指令
      找到15这个地址上的数据,读到B寄存器中。之后程序计数器++(1 -> 2)。

进程

进程就是正在执行的应用程序。
谈的一个应用程序,有两种状态

  1. 没有运行的时候,是一个 exe 文件,躺在硬盘上。
  2. 运行的时候,exe 就会被加载到内存中,并且cup执行里面的指令了

执行进程里的指令,需要硬件资源。
在这里插入图片描述
进程是操作系统进行资源分配的基本单位。

由于一个系统上进程比较多,所以需要管理

  1. 描述:通过 结构体/类,把进程中的各种属性表示出来
  2. 组织 :通过数据结构,把多个上面的结构体串起来,并进一步的进行各种增删查改。

对于Linux操作系统来说,它使用“PCB(进程控制块)”这样的结构体来描述进程信息的。
我们可以简单认为,通过链表的方式,把上述多个PCB串到一起。
创建新的进程,就相当于创建了一个PCB结构体,并且插入到链表中;销毁进程,就是把PCB从链表上删除掉,并且释放这个PCB结构体;查看进程列表,就是中遍历这个链表,依次显示出对应的信息。

注意:以上只是简化版本,方便理解,实践的情况要更复杂,不只是一个链表...

PCB

PCB有啥信息?
PCB是一个非常复杂的结构体,里面包含了非常多的属性。我们在这里只讨论一些关键的信息~

  1. PID 进程的标识符
    同一时刻,一个机器上的多个进程之间PID是唯一的,不会重复,系统内部的很多操作,都是通过PID找到对应的进程的。
    在这里插入图片描述
    2. 内存指针(一组)
    它描述进程依赖的指令和数据都在内存的哪个区域
    操作系统运行exe就会读取exe中的指令和数据,并把它们加载到内存中(内存地址)。
    (侧面表示出,进程的执行需要一定的内存资源)
    3. 文件描述符表(顺序表/数组)
    它描述了进程打开了那些文件(对于到硬盘上的数据),进程中打开了某个文件,就会在顺序表中添加一项。
    (侧面表示出,进程的执行需要一定的硬盘资源)
    4. 进程状态
    5. 进程的优先级
    6. 进程的上下文
    7. 进程的记账信息

4、5、6、7这几个属性共同决定了进程调度。我们把他们放在一块分析。

计算机上同时存在百八十个进程,这么多进程都是要执行的。
CPU负责执行,CPU每个核心可以执行一个进程。我这台电脑CPU是6核12线程(6个物理核心,12个逻辑核心),只能同时执行12个进程呀~其他进程咋办呢?

这就不得不提到操作系统进程调度的关键——“分时复用”了

“分时复用”

这个时刻CPU运行进程1,运行一会,CPU运行进程2,过一会运行进程3…
由于CPU运算速度非常快,使上述的切换速度也非常快,肉眼察觉不到,站在宏观角度(人),就好像是同时执行了,这叫做“并发执行”。

现在有有了多核心CPU,每个核心和核心之间,微观上也能同时执行不同的进程,这叫做“并行执行”。

并发/并行,都是操作系统内核统一调度的,程序员/普通用户感知不到~
因此,平时也把并行和并发统称为“并发”,对于的编程的手法也就称为“并发执行”。

  1. 进程状态
    可以随时被调度到CPU上执行指令的,称为“就绪状态”。
    因为要做一些其他的工作,比如进行IO操作(读写硬盘/读写网卡…),无法调度到CPU上执行,这称为“阻塞状态”。
    其实进程还有其他的状态,此处就不展开了~

  2. 进程优先级
    进程优先级就是来解决谁先来,谁后来,谁多执行,谁少执行的问题的。

  3. 进程的上下文
    分时复用,一个进程执行一会之后,就要从CPU上调度走,过一段时间,还会调度回CPU,此时就要沿着上次执行的结果,继续往后执行~
    进程的上下文对于进程来说就是寄存器中的值,CPU有很多寄存器,这些寄存器共同描述了上下文。
    PCB是内存的数据,把寄存器中的值都保存到PCB特定属性中,下次调度PCB就可以从这里的属性中把数据恢复到对应的寄存器中了。

  4. 进程的记账信息
    在优先级的加持之下,就会使不同的进程吃到的资源差异越来越大。
    操作系统会去统计每一个进程在CPU上执行的时间,系统就会根据这个来进一步的调整调度的策略。

这几个属性相互配合,共同构成了进程调度的核心逻辑~
上述的调度过程,都是系统内核负责完成的,虽然是在系统内核完成的,但是我们写程序的时候还是会受到影响的,因此还是需要了解上述的调度过程的!

本文到这里就结束啦~


☁️结语

山外青山楼外楼,莫把百尺当尽头。
保持空杯心态加油努力吧!


都看到这里啦!真棒(*^▽^*)

可以给作者一个免费的赞赞吗,这将会鼓励我继续创作,谢谢大家

如有纰漏或错误,欢迎指正


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

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

相关文章

薄冰英语语法学习--名词2-格

名词后面 s,代表后面这个东西属于前面的。 比如toms book,汤姆的书。 末尾是s,那么直接在最后加就行了。比如boys,男孩们的 表示几个词共同 的所有关系在最后一个词的词尾加 sMary and Toms books 玛丽和汤姆共有的书表示几个词…

深入探讨C++的高级反射机制

反射是一种编程语言能力,允许程序在运行时查询和操纵对象的类型信息。它广泛应用于对象序列化、远程过程调用、测试框架、和依赖注入等场景。 由于C语言本身的反射能力比较弱,因此C生态种出现了许多有趣的反射库和实现思路。我们在本文一起探讨其中的奥秘…

DOM遍历

DOM 遍历是指在 HTML 文档中导航和定位元素的过程。通过 DOM 遍历,您可以在文档中移动并查找特定的元素,以便对其进行操作或者检索信息。 寻找子元素 //DOM遍历 const h1 document.querySelector(h1);//寻找子元素 console.log(h1.querySelectorAll(.…

从入门到精通:使用Python的Watchdog库监控文件系统的全面指南

从入门到精通:使用Python的Watchdog库监控文件系统的全面指南 引言Watchdog库概述核心组件工作原理 快速开始:设置Watchdog安装Watchdog创建一个简单的监控脚本设置和启动Observer 事件处理:如何响应文件系统的变化基本事件处理处理复杂的场景…

论文生成新纪元:探索顶尖AI写作工具的高效秘诀

在学术探索的征途中,AI论文工具本应是助力前行的风帆,而非让人陷入困境的漩涡。我完全理解大家在面对论文压力的同时,遭遇不靠谱AI工具的沮丧与无奈。毕竟,时间可以被浪费,但金钱和信任却不可轻弃。 作为一名资深的AI…

Java使用Graphics2D画图,画圆,矩形,透明度等实现

背景 如上图,需要使用Java生成一个图片, 并以base64编码的形式返回给前端展示。 使用Graphics2D类,来进行画图,其中需要画方框、原型、插入图标、写入文字等,同时需要设置透明度等细节点 环境:Jdk17&#…

Java面试八股之JVM内存泄漏按照发生的方式可以分为哪几类

JVM内存泄漏按照发生的方式可以分为哪几类 常发性内存泄漏(Frequent Memory Leak) 这类内存泄漏发生的代码会被频繁执行,每次执行时都会导致一块或多块内存无法被回收。由于泄漏行为重复发生,故称为常发性。这类泄漏通常比较容易…

下一代广域网技术2:SRv6

2.SRv6 SR架构设计之初,就为SR数据平面设计了两种实现方式:一种是SR-MPLS,其重用了MPLS数据平面,可以在现有IP/MPLS网络上增量部署;另一种是SRv6,使用IPv6数据平面,基于IPv6路由扩展头进行扩展…

Docker部署常见应用之Oracle数据库

文章目录 安装部署参考文章 安装部署 使用Docker安装Oracle数据库是一个相对简便的过程,可以避免在本地环境中直接安装Oracle数据库的复杂性。 安装Docker环境:确保你的系统上已经安装了Docker,并且Docker服务正在运行。具体的安装方法可以根…

使用North自部署图床服务

图床 图床可以把图片转为链接,从而方便我们书写、分享博客,目前图床主要分为以下几类: 利用 Git 仓库存储对象存储(OSS、COS、七牛云等)免费公共图床(SM.MS、聚合图床、ImgTP、Postimage等) 但上述图床都…

多项式回归(Linear Regression)原理详解及Python代码示例

多项式回归原理详解 多项式回归(Polynomial Regression)是线性回归(Linear Regression)的一种扩展形式。它通过在输入变量上添加高次项来拟合非线性关系。虽然多项式回归本质上还是线性模型,但它允许模型在输入特征的多…

if action和Switch之间该怎么选择?

1. Switch 2. If及If Action Subsystem 3.结论 元素很多,用switch 元素少,用if或switch 如果...很多,用if

职业技能大赛引领下大数据专业实训教学的改革研究

随着信息化时代的加速发展,大数据专业作为新兴的热门领域,正日益成为高等职业教育体系中不可或缺的一部分,其承担着为社会培养大批具有高素质应用技能的大数据技术人才的重任。职业技能大赛作为检验和提升学生技能水平的有效平台,…

web学习笔记(六十九)vue2

1. vue2创建脚手架项目 (1)在cmd窗口输入npm install -g vue/cli命令行,快速搭建脚手架。 (2) 创建vue2项目 (3) 选择配置项目,最下面的选项是自己重新配置,第一次创建v…

使用nvm管理node版本及pnpm安装

文章目录 GithubWindows 环境Mac/Linux 使用脚本进行安装或更新Mac/Linux 环境变量nvm 常用命令npm 常用命令npm 安装 pnpmNode 历史版本 Github https://github.com/nvm-sh/nvm Windows 环境 https://nvm.uihtm.com/nvm.html Mac/Linux 使用脚本进行安装或更新 curl -o- …

VTable导出当前页和导出所有页数据

表格导出的是当前显示的表格&#xff0c;如果是分页表格想导出全部的数据话。有两种方法可以实现 表格先显示的全量数据&#xff0c;导出后再恢复当前页。新建一个隐藏的表格实例显示全量数据导出这个隐藏的表格实例。 下面是全量代码&#xff1a; <template><div&…

快速创建条形热力图

Excel中的条件格式可以有效的凸显数据特征&#xff0c;如下图中B列所示。 现在需要使用图表展现热力条形图&#xff0c;如下图所示。由于颜色有多个过渡色&#xff0c;因此手工逐个设置数据条的颜色&#xff0c;基本上是不可能完成的任务&#xff0c;使用VBA代码可以快速创建这…

【pytorch03】pytorch基本数据类型

问题&#xff1a;String类型在pytorch中如何表示&#xff1f; 很遗憾&#xff0c;pytorch不是完备的语言库&#xff0c;而是面向数据计算的一个GPU加速库&#xff0c;因此没有内建对string的支持 我们会在做NLP的时候会遇到all string处理的问题&#xff0c;就比如说一句话&am…

华硕PRIME B450M-K主板开启虚拟化

1.判断电脑是否开启了虚拟化 按下CtrlShiftESC打开任务管理器&#xff0c;切换到性能页面&#xff0c;选择查看CPU 如果在右下角看到虚拟化&#xff1a;已禁用&#xff0c;则没有开启虚拟化 2.进入BIOS 重启或开机时&#xff0c;按下DEL或F2进入BIOS设置界面。 屏幕提示&am…

SAP系统中如何用事务码图形视图寻找MD04增强开发实施点

在之前发布的文章中&#xff0c;介绍了善用事务码的图形视图以观察事务的执行流程以及如何在MD04中实施增强以改变生产订单的显示顺序。本文结合两者&#xff0c;介绍一下如何利用事务码的图形视图找到增强开发的实施点。 在事务码中输入SE93&#xff0c;进入图形视图&#xf…