CHS_01.2.1.1+2.1.3+进程的概念、组成、特征

CHS_01.2.1.1+2.1.3+进程的概念、组成、特征

  • 进程
    • 进程的概念
  • 进程的组成——PCB
  • 进程的组成——PCB
  • 进程的组成——程序段、数据段
    • 知识滚雪球:程序是如何运行的?
    • 进程的组成
    • 进程的特征
  • 知识回顾与重要考点

从这个小节开始 我们会正式进入第二章处理机管理相关的内容

那么在这个小节当中 我们会首先来认识一个很重要的概念 叫做进程 在第一章的讲解当中 我们经常会说系统当中正在运行的程序怎么怎么地 怎么怎么地 偶尔也会提到进程这个术语

进程

在这里插入图片描述

进程和程序这两个概念其实是比较容易混淆不易理解的

那这个一会我们会介绍 接下来我们还会介绍一个进程 有哪些部分组成 有什么重要的特征

那首先来看第一个部分进程的概念

进程的概念

我们这次采用一个更贴近大家生活经验的一种方式来进行讲解
在这里插入图片描述

首先来看一下 我在我自己的windows电脑里打开了任务管理器 那任务管理器当中就可以看到此时系统当中正在运行的进程有这么多

那此时如果我想要使用qq的话 那我打开我的qq程序 于是我的这个qq程序就开始运行

那相应的 在进程这一栏里 我会看到一个和qq相关的这样的一个条目信息

而如果说此时我想要同时登录两个甚至三个qq号 那我可以再打开两次qq程序

那在这个时候 会发现进程这一栏里qq相关的条目出现了三条

也就是说 在系统当中 此时有三个qq进程正在运行
在这里插入图片描述

虽然说这三次我打开的都是qq.exe这个程序 但是这个程序的三次执行会对应三个不同的进程

如果大家的电脑现在就在身边的话 就可以自己动手看一下是不是这样的情况 所以 其实所谓的程序 它是一种静态的

存放在磁盘里的可执行文件 在windows电脑里就是qq.exe那么这个可执行文件其实就是一系列的指令集合

而指令的概念 我们在第一章当中讲解过 而所谓的进程 它是动态的

是程序的一次执行过程 也就是说 即使是同一个程序 它多次执行
那么每一次的执行都会对应一个不同的进程
就像我们在这个地方所看到的这样

所以用这个界面 大家应该能够很直观的体会到进程和程序他们的一个区别

进程的组成——PCB

在这里插入图片描述

那么接下来问题产生了 既然这三个进程执行的都是同一个程序
那么操作系统在背后要怎么区分这三个进程呢
不能把它们都叫做腾讯qq进程吧

所以 其实为了解决这个问题 操作系统在创建一个进程的时候 会给这个进程分配一个唯一的

不重复的id叫做p i d 也就是进程i d 它就相当于我们人类世界的身份证号 我们每个人的身份证号都是唯一的不重复的

而p i d就是进程的身份证号 那还是让大家看一个直观的例子 我现在正在录制视频 使用的是苹果的电脑

那苹果的电脑有一个叫做活动监视器的一个小工具 它和windows的那个

任务管理器其实是一样的 可以用这个小工具来看一下现在在我的

系统上正在运行的进程有哪些 那这些就是现在正在运行的进程

在这一溜可以看下有一个叫做pid 也就是进程id的一个属性

我们让这些进程根据p i d的递减的次序来排列 那可以看到各个进程的p i d 他们都是不重复的

那此时我来打开一个叫做typal的一个应用程序 当我打开这个应用程序之后

大家注意 观察这个地方 出现了和他相对应的一个进程的信息

它的p i d是2641那此时我再把这个

应用程序给退出 然后再一次打开

有没有发现他的p i d变成了2642

刚才是2641现在变成了2642所以这就能很好的说明一个问题

我们每一次新建一个进程 都会给他分配一个不重复的 唯一的id

在很多操作系统当中 pid的分配都是每一次加一这样的一个很简单的策略

哎 可以看到 现在系统在背后 他又自己创建了一个新的进程 虽然我不知道这个进程是干嘛的

但是他的p i d依然是递增的 所以其实回到刚才的这个图 虽然说这些进程 他们的进程的名称都叫腾讯qq32位

但是他们在背后都有各自的p i d 他们的p i d肯定是不重复的

那细心的同学可能会发现 除了pid之外 操作系统还会记录各个进程其他的一些信息

比如说他使用了多久的cpu时间 它是由哪个用户所创建的

还有一些各个进程对内存的使用信息 比如这个进程使用了745 7兆字节的

内存 另外 操作系统还会统计各个进程对磁盘的一个访问的情况

比如说这个进程 他向磁盘写入了3 45gb这么多的数据 而其他的进程对磁盘写入和读取的数据会少很多

那这些信息其实在我们的进程管理当中都是很有必要的 像这个进程 他经常往磁盘里写数据 所以这个进程肯定是一个需要经常访问磁盘的一个进程

那操作系统在对这些进程进行管理的时候 都可以根据这些进程的各自的特性来制定相应的策略

那还有 像最后的这一列 它是列出了各个进程的一个对网络流量的使用情况

所以 其实操作系统在背后 他不只是记录了各个进程的p i d

除了p i d之外 他还记录了各个进程的其他的一些信息 比如说刚才我们所看到的

他所属的用户id或者简称u i d 那操作系统可以根据pid uid这些基本的进程描述信息

来区分各个进程 还有刚才我们看到的分配了多少内存 正在使用哪些l设备正在使用哪些文件 这些信息的记录可以帮助操作系统

实现对系统资源的一个管理工作 另外呢 还有刚才我们看到的什么cpu使用时间 磁盘使用情况 网络流量使用情况等等

这些信息可以帮助操作系统实现对进程的控制和调度等等一系列的管理策略

进程的组成——PCB

在这里插入图片描述

那既然操作系统在背后要记录这么多的信息 那么这些信息都会被统一的放在一个叫做p c b的一个数据结构当中

他的英文缩写是process control block就是进程控制快 总之 操作系统他需要对各个并发运行的进程进行管理

而但凡他在管理这些进程的时候 所需要用到的信息都会放在这个

叫做p c b的数据结构 当中 所以p c b是一个很重要的数据结构

它是进程存在的唯一标志 当一个进程被创建的时候 操作系统也会为它创建相应的pcb

当然 这个p c b当中又包含了进程的p i d uid等等一系列的信息

而当一个进程结束的时候 操作系统就会回收它的p c b 那在p c b当中需要保存的信息大致上可以分为这样的四类

进程描述信息 进程控制和管理相关的信息 还有资源分配的情况
这三种类型的信息刚才我们都已经介绍过 除此之外 还会在pcb当中保留处理机相关的信息

只有在p c b当中保存了处理机相关的信息 才可以实现进程的切换工作

那这个坑我们先留着 之后再来填 接下来让大家看一个令人脑壳疼的东西

我在网上找到了linux的内核源码 然后在一个叫做shed.h这样的文件当中

我们就可以看到 在另一次操作系统当中 他定义的p c b长什么样子

在linux当中 他的pcb的名字叫做taskstruct 有兴趣的同学也可以大家去linux的官网下载一下他的源码来

看一下这个文件 那在这个taskstruct里边 他会记录各种各样的信息 比如说这个字段

state这个字段 它其实就是记录了进程当前的状态 它是处于旧序态呢 运行态呢 还是阻塞才能 等等

那进程的状态 这是我们下一个小节当中会展开介绍的内容 再来看这个字段

feels这个字段 它记录的是当前进程 它打开了哪些文件

然后还有一个叫做iocontact的字段 这个字段它记录的是io管理当中所需要使用的信息

当然 这个数据结构里面定义了好多好多字段 大家可以看一下 光是这个数据结构的定义 他就写了1900多行的代码

这么多代码是让人很抓狂的一个事情 总之呢 我们想要认识pcb当中的所有字段 那是不可能的 我们只需要知道pcb当中存放的都是操作系统

在对进程进行管理的时候所需要的那些信息就可以了 那除了p c b之外呢

进程的组成——程序段、数据段

在这里插入图片描述

进程还有两个很重要的组成部分 一个叫做程序段 一个叫做数据段

刚才我们说过pcb 它是给操作系统用的一个数据结构 而程序段和数据段它其实是给进程自己用的

知识滚雪球:程序是如何运行的?

那我们具体来看一个例子 在之前的第一章节当中 我们学到了
在这里插入图片描述

这个程序 它在运行之前需要编译成二进制的机器指令

而这个程序执行的过程 其实就是cpu执行这些一条一条的指令的一个过程

那接下来 我们把程序运行的过程再进一步的细化一下 其实我们写完一个程序之后

经过编译 链接等等一系列的步骤 最终会形成一个可执行文件 向大家熟悉的windows电脑里就是点exe的文件
在这里插入图片描述

那这个可执行文件平时是存放在硬盘当中的 这个可执行文件当中保存的其实就是我们刚才说的那一系列的指令序列

而当这个程序要运行之前 需要把它从硬盘读入到内存当中

并且操作系统会建立一个与它相对应的进程 那根据刚才我们的分析 我们知道它会建立相对应的pcb

那除了p c b之外 这个程序的那一系列指令序列也需要读到内存当中 那这一系列的指令序列 我们把它称作为程序段

那其实这个程序执行的过程 或者说这个进程 它执行的过程就是

cpu从内存当中读入这些一条一条的指令 然后来执行这些指令 那除了执行这些指令之外 其实在执行指令的过程当中会有一些中间的数据

比如说 我们这定义了一个变量 叫做x 那么这些变量的内容其实也需要放在内存当中 所以还会有另外一个叫做数据段的区域 用来存放这个程序运行过程当中所产生所需要使用的各种数据 就比如说 我们定义了哪些

变量 这些信息就是放在数据段里的 所以一个进程的实体
它由p c b 程序段和数据段这么三个部分组成

进程的组成

在这里插入图片描述

我们之前一直在说进程有哪些部分组成 但其实更严格的来说应该是说进程实体 或者说进程印象有哪些部分组成

进程它是动态的 而进程实体进程印象它是静态的 我们可以把进程实体理解为是

这个进程在动态执行过程当中某一时刻的一个快照 一个照片

进程实体能够反映这个进程在某一个时刻的状态 比如说这个进程运行的过程 当中x的值 这个变量的值本来是一但是在进行了加加这个操作之后 x的值就会变成二

所以 在进程的运行过程当中 进程实体 它是在不断变化的 所以准确的说 我们应该说 进程实体由p c b 程序段和数据段这么三个部分组成

不过除非题目特别考察进程和进程实体进程印象的区别 不然大家也可以认为所谓的进程就是进程实体 没必要去钻这个牛角尖扣这个字眼

那p c b是给管理者 也就是给操作系统使用的 而程序段和数据段里面的内容是给进程自己使用的

和进程自己的运行逻辑有关 所以在引入了进程实体的概念之后 我们可以把进程定义为这样

进程 它是进程实体的一个运行过程 是系统进行资源分配和调度的独立单位

进程是资源分配的独立单位 这一点很好理解 从刚才活动监视器这我们也可以看到

操作系统是以进程为单位 给各个进程来分配这些资源的 比如说内存

所以进程是资源分配的独立单位 那这个地方还涉及到另一个概念 叫做进程的调度

其实所谓的调度 就是指操作系统决定让哪个进程上cpu运行

进程的调度相关的内容 我们会在之后的小节当中有更进一步的学习 总之呢 一个程序运行多次会对应多个进程

如果说我们同时挂三个qq号的话 那么这三个qq进程 他们的p c b和数据段都是各不相同的
他们的pcb不相同 这个很好理解 刚才我们也已经解释过了 而数据段不相同是因为我们登录的三个qq号 他们的信息数据 这些都是存放在数据段当中的 所以三个不同的qq号 他们的数据段肯定是不同的
但是呢 这三个qq进程背后 他们运行的其实是相同的qq程序

也就是他们的程序段内容其实是相同的 那讲到这儿 相信大家对进程和程序的理解

应该会比较直观了

那么之前我们介绍了进程的定义和进程的组成 接下来我们看一下进程有哪些特征

进程的特征

在这里插入图片描述

相比于程序 进程拥有以下的一些特征 第一叫做动态性 因为进程是程序的一次执行过程吗 或者说 进程是进程实体的一次执行过程

它是动态的 产生 变化和消亡的 所以动态性很好理解 它 也是进程的一个最基本的特性

第二个特性叫并发性 是指内存当中同时会有多个进程实体

然后各个进程可以并发的执行 那这点在经过第一章的学习相信也很好理解 然后独立性是指进程能够独立运行 独立获得资源 独立接受调度

然后各个并发运行的进程还会有异步性 就是指他们以各自独立的 不可预知的速度向前推进

进程的并发带来的异步性可能会让进程的执行结果不确定 但是有的时候我们又必须让并发执行的进程来相互配合协调着工作 那

具体怎么实现呢 这个我们会在进程同步的小节当中进行学习 这先不展开

最后 进程还拥有结构性 就是指每个进程都会有一个p c b一个程序段数据段

那所有的这些特性大家都只需要理解 不需要死记硬背好的 那么这个小节我们介绍了进程这个很重要的概念

进程 或者说进程实体 由pc b 程序段和数据段这样三个部分组成

p cb是一个很重要 很重要的数据结构 它是进程存在的唯一标志 操作系统就是通过p c b里面记录的这些各种各样的信息来对各个进程进行管理的

所以 但凡是操作系统管理进程所需要的数据 肯定都是放在pcb当中 而进程他自己所需要的数据是放在程序段和数据段当中的

另外呢 需要注意的是 进程的动态性是它最基本的特性 并且还需要注意进程 它是独立获得资源

独立接受调度的一个基本单位 让大家注意这一点的原因是
在引入了线程之后 进程就不再是接受调度的基本单位了

但是进程依然是获得资源的基本单位 这点还会经过后续的小节进行进一步的讲解 这暂时先不展开

知识回顾与重要考点

好的 那么以上就是这个小节的全部内容

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

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

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

相关文章

封装动画函数

文章目录 需求分析确定参数确定属性值具体实现简单扩展 需求分析 在 css 中,如果要给一个元素设置动画,就要改变一个css属性,也是一个值到另外一个值的变化,但是放入到我们这里的动画函数里面,我是不知道是具体要用到…

STK 特定问题建模(五)频谱分析(第二部分)

文章目录 简介三、链路分析3.1 星地链路干扰分析3.2 频谱分析 简介 本篇对卫星通信中的频谱利用率、潜在干扰对频谱的影响进行分析,以LEO卫星信号对GEO通信链路影响为例,分析星地链路频谱。 建模将从以下几个部分开展: 1、GEO星地通信收发机…

Java接口的解析

在 Java 中,接口(Interface)是一种抽象类型,用于定义一组相关方法的契约。接口只包含方法的签名,而没有方法的实现。实现接口的类必须提供接口中定义的方法的具体实现。 以下是对 Java 接口的解析: 这只是…

使用Scikit Learn 进行识别手写数字

使用Scikit Learn 进行识别手写数字 作者:i阿极 作者简介:数据分析领域优质创作者、多项比赛获奖者:博主个人首页 😊😊😊如果觉得文章不错或能帮助到你学习,可以点赞👍收藏&#x1f…

MySql -数据库进阶

一、约束 1.外键约束 外键约束概念 让表和表之间产生关系,从而保证数据的准确性! 建表时添加外键约束 为什么要有外键约束 -- 创建db2数据库 CREATE DATABASE db2; -- 使用db2数据库 USE db2;-- 创建user用户表 CREATE TABLE USER(id INT PRIMARY KEY …

2024-01-09 Android.mk 根据c文件名插入特定的宏定义,我这里用于定义log LOG_TAG 标签

一、在Android的构建系统中,使用Android.mk构建脚本可以根据特定需求来定义宏。如果你想根据C文件的名称来插入特定的宏定义,可以使用条件语句检查文件名,并相应地设置宏。 在Android的构建系统中,使用Android.mk构建脚本可以根据…

【MySQL】表设计与范式设计

文章目录 一、数据库表设计一对一一对多多对多 二、范式设计第一范式第二范式第三范式BC范式第四范式 一、数据库表设计 一对一 举个例子,比如这里有两张表,用户User表 和 身份信息Info表。 因为一个用户只能有一个身份信息,所以User表和In…

jmeter+ant+Jenkins集成

一、 环境准备 1、Jenkins下载:https://jenkins.io/zh/download/ 2、 Jenkins安装:解压下载的压缩包,直接点击msi文件安装即可 4、 Jenkins登录用户设置:装: 浏览器地址栏中输入:http://localhost:8080/…

益生菌抗癌?补充这种益生菌,抑制肝癌,还改善肠道健康

撰文 | 宋文法 肠道菌群,是人体不可分割的组成部分,生活在我们肠道内的数万亿细菌对健康起着重要作用,它们影响着人的新陈代谢、消化能力、抵御感染、控制人体对药物的反应,甚至还能预防某些癌症。 非酒精性脂肪肝病,是…

【实用技巧】Windows 电脑向iPhone或iPad传输视频方法1:无线传输

一、内容简介 本文介绍如何使用 Windows 电脑向 iPhone 或 iPad 传输视频,以 iPhone 为例,iPad的操作方法类似,本文不作赘述。 二、所需原材料 Windows 电脑(桌面或其它文件夹中存有要导入的视频)、iPhone 14。 待…

Android Canvas图层saveLayer剪切clipPath原图addCircle绘制对应圆形区域并放大,Kotlin(3)

Android Canvas图层saveLayer剪切clipPath原图addCircle绘制对应圆形区域并放大,Kotlin(3) 在文章2 Android Canvas图层saveLayer剪切clipPath原图addCircle绘制对应圆形区域,Kotlin(2)-CSDN博客 的基础上&…

Unity中Shader序列帧动画(总结篇)

文章目录 前言一、半透明混合自定义调整1、属性面板2、SubShader中3、在片元着色器(可选)3、根据纹理情况自己调节 二、适配Build In Render Pipeline三、最终代码 前言 在前几篇文章中,我们依次解决了实现Shader序列帧动画所遇到的问题。 Unity中Shader序列图动画…

二叉树及其实现

二叉树 一.树的概念及结构1.1树的概念1.2相关概念 2.二叉树的概念及结构2.1 概念2.2 特殊的二叉树 3.二叉树的遍历3.1 前序、中序以及后序遍历3.2 层序遍历3.3 判断二叉树是否是完全二叉树3.4 二叉树的高度3.5 二叉树的叶子节点个数3.6 二叉树的第k层的节点个数3.7 二叉树销毁3…

苹果可充电键盘背光系统专利曝光:延长MacBook Air / Pro续航

根据美国商标和专利局(USPTO)近日公示的清单,苹果公司近日获得了一项关于电子设备键盘的相关专利。 苹果公司在专利中表示,为了在低光环境下,能够提高用户敲击键盘的输入体验,通常键盘会提供背光。 传统键…

深度学习笔记(二)——Tensorflow环境的安装

本篇文章只做基本的流程概述,不阐述具体每个软件的详细安装流程,具体的流程网上教程已经非常丰富。主要是给出完整的安装流程,以供参考 环境很重要 一个好的算法环境往往能够帮助开发者事半功倍,入门学习的时候往往搭建好环境就已…

关于Vue前端接口对接的思考

关于Vue前端接口对接的思考 目录概述需求: 设计思路实现思路分析1.vue 组件分类和获取数值的方式2.http 通信方式 分类 如何对接3.vue 组件分类和赋值方式, 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your p…

基于uniapp封装的table组件

数据格式 tableData: [{elcInfo: [{tableData:[1,293021.1,293021.1,293021.1,293021.1,]}]},{elcInfo: [{tableData:[1,293021.1,293021.1,293021.1,293021.1,]}]},{elcInfo: [{tableData:[1,293021.1,293021.1,293021.1,293021.1,]}]},/* {title: "2",elcInfo: [{…

知识图谱gds使用记录

安装 从下载站下载对应的包到plugin目录下,修改配置文件/etc/neo4j/neo4j.conf,末尾加入gds.*,重新启动 在浏览器输入CALL gds.list()命令进行测试 建立图映射 为了使用图算法,需要先将图数据库的内容映射为一个新图 如果是全…

freesurfer-reconall后批量提取TIV(颅内总体积)

#提取TIV #singleline=$(grep Estimated Total Intracranial Volume /usr/local/freesurfer/subjects/bect-3d+bold-wangjingchen-4.9y-2/stats/aseg.sta

学习笔记——C++运算符之算术运算符

C中运算符包含诸多种类,其中有:算术运算符,赋值运算符,比较运算符和逻辑运算符 每一种运算符及其作用如下表所示: 一,算术运算符1,加减乘除 其中,“”,“-”运算符既可…