【多线程基础】指令、进程调度、了解计算机是如何进行工作的

Hi~!这里是奋斗的明志,很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~~
🌱🌱个人主页:奋斗的明志
🌱🌱所属专栏:数据结构、LeetCode专栏

📚本系列文章为个人学习笔记,在这里撰写成文一为巩固知识,二为展示我的学习过程及理解。文笔、排版拙劣,望见谅。

在这里插入图片描述

在这里插入图片描述

目录

  • 前言
  • 一、计算机发展史
    • 1.冯诺依曼体系(Von Neumann Architecture)
    • 2.CPU主要的功能(计算机最核心的部分)
  • 二、指令(⭐⭐⭐⭐⭐)
    • 1.CPU是如何执行指令的
    • 2.指令表
    • 3.CPU的基本工作流程
  • 三、操作系统(Operating System)
    • 1.操作系统内核(最核心的部分)
    • 2.操作系统的定位
    • 3.进程(核心)
      • 3.1什么是进程/任务(Process/Task)
      • 3.2进程控制块抽象(PCB Process Control Block)
    • 4.CPU 分配⸺进程调度(Process Scheduling)
      • 4.1状态
      • 4.2优先级
      • 4.3记账信息
      • 4.4上下文
  • 总结


前言

计算机不仅仅是指电脑,日常生活中用的 手机、平板、电视、路由器等…都可以叫做计算机
现在的计算机,大体分为几个大类:
1)终端设备:(台式机、笔记本、手机、ipad…)平时用户使用的
2)服务器:日常普通用户见不到的。以后作为开发人员,要经常打交道。
3)嵌入式设备:主题功能不是用来“计算”,而是针对一些特殊的场景,量身定做的“专用计算机”。

以上设备:遵循“冯诺依曼体系” 计算机使用二进制表示存储数据)(大的基调就是冯大佬定下来的)

一、计算机发展史

计算的需求在人类的历史中是广泛存在的,发展大体经历了从一般计算工具到机械计算机到目前的电子计算机的发展历程。
人类对计算的需求,驱动我们不断的发明、改善计算机。目前这个时代是“电子计算机”的时代,发展的潮流是:更快速、更稳定、更微型。

1.冯诺依曼体系(Von Neumann Architecture)

现代的计算机, 大多遵守 冯诺依曼体系结构

在这里插入图片描述

在这里插入图片描述


有的硬件设备,可能既是输入,也是输出(蓝牙,触摸屏)
路由器----> 里面有 CPU、存储器、既有输入也有输出

  • CPU 中央处理器: 进行算术运算和逻辑判断.
  • 存储器: 分为外存和内存, ⽤于存储数据(使⽤二进制方式存储)
  • 输入设备: 用户给计算机发号施令的设备.
  • 输出设备: 计算机个用户汇报结果的设备.

针对存储空间

  • 硬盘 > 内存 >> CPU

针对数据访问速度

  • CPU >> 内存 > 硬盘

2.CPU主要的功能(计算机最核心的部分)

【主要功能】

  • 进行各种算数运算
  • 进行各种逻辑判断

运行的任何一个程序,本质都是通过CPU来进行执行的

在这里插入图片描述
在这里插入图片描述

二、指令(⭐⭐⭐⭐⭐)

  • 就可以认为是CPU被设计的时候,给程序员提供的一些“接口编程”,(近似理解成cpu提供给程序员的 API )
  • cpu其实有很多不同的架构,不同架构的cpu,支持的指令也不一样。
  • 虽然各不相同,但是也有几套标准,最主流的一套标准,x86架构的cpu,arm架构,这一套也非常流行。
  • CPU其实有很多种不同的架构,不同架构的CPU,支持的指令是不同的~~~
  • 同一个程序,在这个 cpu 机器能运行,但是到另外一台机器上,就可能运行不了

1.CPU是如何执行指令的

(大前提)所谓的指令,都是要先加载到内存中,然后才能被 CPU读取,并执行.
【比如】

一个Java程序,写出来的是一个 .java 源代码文件,编译得到 .class 二进制文件(但是仍然在硬盘上),运行程序的时候,jvm就会把这个 .class 加载到内存当中,再进一步的翻译成 cpu 能识别的二进制指令。

冯诺依曼体系结构规定:
一个程序,指令和依赖的数据都是要在储存器中保存的,CPU如果需要执行,都是要自动的从存储器中读取到对应的指令

【CPU执行程序,大概就是经历这三个阶段】

  1. 读指令(把内存中的指令数据,读取到cpu寄存器中)
  2. 解析指令,(理解当前指令要做什么)
  3. 执行指令

这是一个简化版的模型,实际 cpu 会更复杂,包含一些流水线,预测机制…

2.指令表

所谓指令,即指导 CPU 进行工作的命令,主要有操作码 + 被操作数组成。
其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也可能是寄存器编号等。
指令本身也是⼀个数字,用二进制形式保存在内存的某个区域中。
在这里插入图片描述
在这里插入图片描述

3.CPU的基本工作流程

cpu 中有一个专门的寄存器,保存接下来要从哪个内存地址来取指令
不同的cpu叫法都不一样,有些操作系统书上称为 “程序计数器” 简称 pc (在RPG里头,相当于领任务~~~)
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第⼀条指令的运行,其实没有⽤到我们之前制作的ALU部件,但这只是其中一些指令而已,尝试把剩余的3条指令自行运行一次,观察并理解这个过程。
在这里插入图片描述

在这里插入图片描述

三、操作系统(Operating System)

操作系统是⼀组做计算机资源管理的软件的统称。目前常见的操作系统有:Windows系列、Unix系列、Linux系列、OSX系列、Android系列、iOS系列、鸿蒙等。
虽然这些操作系统,是不同厂商,给不同领域提供的,核心的功能,都是大同小异。
都是为了“搞管理”,能够把一个计算机上的所有硬件资源和软件资源都管理好

cpu,内存,硬盘…(都是硬件)
操作系统就是(非常复杂,代码量千万级别)软件,可以让计算机按照一定的规则进行执行

软件:(一组指令的集合)

1.操作系统内核(最核心的部分)

操作系统 = 内核 + 配套的应用程序

  • 内核 : 前面谈到的 “ 管理 ”,都是在内核里面完成的
  • 配套的应用程序: 往往要靠内核提供一些功能作为支撑

2.操作系统的定位

操作系统内核通过驱动程序,来操作硬件

在这里插入图片描述

操作系统由两个基本功能:
1) 防⽌硬件被时空的应⽤程序滥⽤;
2) 向应⽤程序提供简单⼀致的机制来控制复杂⽽⼜通常⼤相径庭的低级硬件设备。

3.进程(核心)

3.1什么是进程/任务(Process/Task)

  • 一个程序,运行起来/跑起来,在操作系统中,就会出现一个对应的进程
  • 换而言之,进程就是一个跑起来的应用程序

在这里插入图片描述

除了上述自己运行的程序是进程以外
还有一些系统自带的/安装某些程序,给你添加的
这些对于系统能够稳定运行有很重要的意义

在这里插入图片描述


每个应用程序运行于现代操作系统之上时,操作系统会提供⼀种抽象,好像系统上只有这个程序在运行,所有的硬件资源都被这个程序在使用。这种假象是通过抽象了⼀个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之⼀。
进程是操作系统对⼀个正在运行的程序的⼀种抽象,换⾔之,可以把进程看做程序的⼀次运行过程;
同时,在操作系统内部,进程⼜是操作系统进行资源分配的基本单位。


3.2进程控制块抽象(PCB Process Control Block)

操作系统,上面包含很多的进程,一旦东西多了,就需要考虑“管理”


在这里插入图片描述
在这里插入图片描述


计算机内部要管理任何现实事物,都需要将其抽象成⼀组有关联的、互为⼀体的数据。在 Java 语⾔
中,我们可以通过类/对象来描述这⼀特征。

// 以下代码是 Java 代码的伪码形式,重在说明,⽆法直接运⾏
class PCB {
// 进程的唯⼀标识 —— pid;
// 进程关联的程序信息,例如哪个程序,加载到内存中的区域等
// 分配给该资源使⽤的各个资源
// 进度调度信息(留待下⾯讲解)
}

这样,每⼀个 PCB 对象,就代表着⼀个实实在在运⾏着的程序,也就是进程。
操作系统再通过这种数据结构,例如线性表、搜索树等将 PCB 对象组织起来,方便管理时进⾏增删查改的操作。

【pid】进程的id / 标识符
(类似于身份证号码)
在这里插入图片描述

同一个机器,同一时刻,进程id一定是不同的

【内存指针】

在这里插入图片描述

【文件描述符表】

程序运行过程中,经常要和文件打交道,进程每次打开一个文件,就会在文件描述符表上多增加一项(这个文件描述符表可以视为一个数组,里面的每个元素又是一个结构体,就对应一个文件的相关信息)一个进程只要一启动,不管你代码中是否打开/操作文件的代码都会默认的打开三个文件~~(系统自动打开的):标准输入(System.in)标准输出(System.out)标准错误(System.err)
这个文件描述符表的下标,就称为文件描述符~

4.CPU 分配⸺进程调度(Process Scheduling)

进程调度的基本过程是怎样的?
进程的调度,其实就是,操作系统在考虑CPU资源如何给各个进程分配~
上面的属性是一些基础的属性,下面的一组属性,主要是为了能够实现进程的调度~

4.1状态

这个状态就描述了当前这个进程接下来应该怎么调度~~
就绪状态:随时可以去CPU上执行。
阻塞状态/睡眠状态:暂时不可以去CPU上执行。

4.2优先级

先给谁分配时间,后给谁分配时间,以及谁分的多,给谁分的少。(这里的优先级只是建议,系统不一定采取)

4.3记账信息

统计了每个进程,都分别被执行了多久,分别都执行了哪些指令。分别都排队等了多久,目的是给进程调度提供指导依据的。

4.4上下文

表示上次进程被调度出CPU的时候,当时程序的执行状态~~,下次进程上CPU的时候,就可以恢复之前的状态,然后继续往下执行。

进程被调度出CPU之前,要把CPU中的所有的寄存器中的数据都给保存到内存中(PCB的上下文字段中)
相当于玩单机游戏的时候的存档~~
下次进程再被调度上CPU的时候,就可以从刚才的内存中恢复这些数据到寄存器中
相当于读档继续玩游戏~
存档+读档~存档存储的游戏信息,就称为“上下文”

总结

所谓的调度就是进行时间管理

进程的调度,其实就是操作系统在考虑CPU资源如何给各个进程分配–

由于操作系统上,同时运行多个进程,此时如果某个进程出现BUG,进程崩溃了,是不会影响其他进程的,因为进程之间通过虚拟地址空间,已经各自隔离开了,但实际工作中进程之间还是需要相互交互的。


在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Qt QML 使用QPainterPath绘制弧形曲线和弧形文本

Qt并没有相关api直接绘制弧形文字,但提供了曲线绘制相关类,所以只能另辟蹊径,使用QPainterPath先生成曲线,然后通过曲线上的点来定位每个文字并draw出来。 QML具体做法为从QQuickPaintedItem继承,在派生类中实现paint…

8–9月,​Sui Move智能合约工作坊将在台北+线上举行

你对区块链和去中心化应用感兴趣吗?想深入学习Sui Move编程语言吗? 从8月10日到9月28日,Sui Mover社区将在每周六下午13:00–17:00举办精彩的工作坊,为期两个月,带你从零基础入门到高级进阶,全面掌握Sui M…

ARM 架构硬件新趋势:嵌入式领域的未来

目录 目录 一、ARM 架构概述 二、新趋势一:AI 加速器集成 三、新趋势二:更高效的电源管理 四、新趋势三:安全性增强 五、结语 随着物联网 (IoT) 和边缘计算的发展,ARM 架构在嵌入式系统中的应用越来越广泛。从智能手机到智能…

element table表格树形数据展示

element table表格树形数据展示 1、效果 2、代码 <el-table ref"pointMultipleTable" border class"table-box" :data"[damActiveObj]"row-key"id" :tree-props"{ children: children }" :expand-row-keys"expand…

入门 PyQt6 看过来(项目)在线购物项目说明

本文我们利用pyqt6制作一个在线售卖商品的系统&#xff0c;页面大致如下图效果&#xff1a; ​ 1 项目分析 本项目分为四个模块&#xff1a;主窗口&#xff0c;商品选购&#xff0c;下单结算&#xff0c;销售分析。&#xff08;本文暂不涉及登录&#xff09; 主窗口包含&…

JAVA—正则表达式

关于正则表达式的了解学习&#xff0c;以及用于校验格式&#xff0c;信息查找和替换分割内容。 目录 1.概述 2.书写规则 3.应用案例 4.用于信息查找 5.用于搜索替换&#xff0c;分割内容 1.概述 由一些特定的字符组成&#xff0c;代表一个规则 作用&#xff1a; 1.校验数据…

深度学习 —— 个人学习笔记17(锚框、多尺度锚框)

声明 本文章为个人学习使用&#xff0c;版面观感若有不适请谅解&#xff0c;文中知识仅代表个人观点&#xff0c;若出现错误&#xff0c;欢迎各位批评指正。 三十四、锚框 import torch import matplotlib.pyplot as plt from matplotlib_inline import backend_inlinetorch.…

RuoYi-Vue新建模块

一、环境准备 附:RuoYi-Vue下载与运行 二、新建模块 在RuoYi-Vue下新建模块ruoyi-test。 三、父pom文件添加子模块 在RuoYi-Vue的pom.xml中,引入子模块。 <dependency><groupId>com.ruoyi</groupId><artifactId>ruoyi-test</artifactId>&…

小程序背景图片无法通过 WXSS 获取

问题&#xff1a;pages/index/index.wxss 中的本地资源图片无法通过 WXSS 获取 可以使用网络图片&#xff0c;或者 base64&#xff0c;或者使用标签。 将图片转换为base64&#xff0c;地址 base64图片在线转换工具 - 站长工具 在这里把要使用的图片转换一把&#xff0c;然后将得…

JDBC连接Mysql数据库超详细讲解

JDBC连接Mysql数据库 如何导入驱动jar包 进入mysql官网 – https://www.mysql.com/ 点击下载找到方框内选项 点击 在项目文件夹创建lib文件 , 将下载好的驱动器导入 , 再添加到项目即可 步骤一&#xff1a;注册JDBC驱动 在Java中&#xff0c;要与数据库进行交互&…

HarmonyOS应用一之登录页面案例

目录&#xff1a; 1、代码示例2、代码分析3、注解分析 1、代码示例 实现效果&#xff1a; /** Copyright (c) 2023 Huawei Device Co., Ltd.* Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance w…

openssl 制作 信用库与服务证书

文章目录 前言openssl 制作 信用库与服务证书1. CA 证书2. 服务器证书/秘钥库3. 创建信用库4. 注意事项 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会…

如何恢复误删视频?找回误删视频文件的办法分享

在数字化时代&#xff0c;视频已成为我们生活中不可或缺的一部分&#xff0c;记录着珍贵的回忆、工作资料或是学习素材。然而&#xff0c;在电脑上一不小心误删视频文件&#xff0c;该怎么办&#xff1f;视频误删怎么恢复&#xff1f;有什么小技巧可以找回删除的视频&#xff1…

QTableView使用示例-Qt模型视图委托(MVD)(Model-View-Delegate)

模型视图委托&#xff08;MVD&#xff09;是Qt中特有的设计模式&#xff0c;类似MVC设计模式&#xff0c;将MVC设计模式中的Controller当做MVD中的Delegate&#xff0c;两者的概念基本相同。不同的是委托不是独立存在&#xff0c;而是包含在视图里面。 模型视图委托设计模式中&…

West-Wild-v1.1靶机

信息收集&#xff1a; 靶机地址&#xff1a;https://www.vulnhub.com/entry/westwild-11,338/ &#xff08;1&#xff09;主页给出靶机ip&#xff0c;kali跟靶机仅主机网卡就可以 &#xff08;2&#xff09;端口扫描 nmap 192.168.8.129 -p- -A -sV -Pn &#xff08;3&#…

iOS ------ UIKit相关

UIView和CALayer UIView UIView表示屏幕上的一块矩形区域&#xff0c;它是基本上iOS中所有可视化控件的父类。UIView可以管理矩形区域里的内容&#xff0c;处理矩形区域的事件&#xff0c;包括子视图的管理以及动画的实现。 UIKit相关类的继承关系 UIView继承自UIResponde…

云原生-利用容器和编排器

容器和编排器旨在解决单片部署方法中常见的问题。 1. 整体部署的挑战 传统上&#xff0c;大多数应用程序都是作为单个单元部署的。这样的应用程序被称为单体。这种将应用程序作为单个单元部署的一般方法&#xff08;即使它们由多个模块或程序集组成&#xff09;称为单体架构&…

OrangePi AIpro学习4 —— 昇腾AI模型应用

目录 一、ATC模型转换 1.1 模型 1.2 ATC工具 1.3 实操模型转换 1.4 使用ATC工具时的一些关键注意事项 1.5 ATC模型转换命令举例 二、运行昇腾AI模型应用样仓程序 2.1 程序目录 2.2 下载模型和模型转换 2.3 下载图片和编译程序 2.4 解决报错 2.5 运行程序 三、运行…

《决胜B端 产品经理升级之路》 知识点总结

什么是b端产品&#xff1f; b端产品是指面向企业或组织的经营管理问题&#xff0c;旨在解决企业规模、成本、效率、品质和风控等方面的产品。这些产品主要帮助企业提高运营效率、降低成本、改善品质和控制风险等。b端产品适用于各种行业和企业类型&#xff0c;可以为企业带来深…

Parallels Desktop 可以做什么?

现在 Mac 电脑在全球越来越火&#xff0c;但是很多时候我们还是需要用win上的老物件&#xff0c;也就导致越来越多的用户都想在 Mac 上跑 Windows 软件和游戏。虽说 MacOS 本身有不少厉害的应用程序&#xff0c;可有些 Windows 专用的软件和游戏在 MacOS 里还是没法直接跑。 黑…