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等技术内容,立即学习

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【前端】使用javascript开发一个在线RGB颜色转换

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是是《前端》序列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌…

领英Linkedin自动跳转中国站点的解决方案

linkedin放弃中国市场后,在国内打开linkedin.com,会自动跳转到 linkedin.cn,无法与国际友人在同一个平台上联系。 按照搜到的方法尝试解决,包括修改浏览器默认语言、清除浏览数据、使用软路由上的插件给 linkedin.com设置从国外线…

CentOS本地部署SQL Server数据库无公网ip环境实现远程访问

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址 前言 GeoServer是OGC Web服务器规范的J2EE实现,利用GeoServer可以方便地发布地图数据,允许用户对要素数据进行更新、删除、插入…

使用 CMake 和 Ninja 构建 C/C++ 项目的教程

使用 CMake 和 Ninja 构建 C/C 项目的教程 CMake 是一个跨平台的开源构建工具,它简化了项目的构建过程。而 Ninja 是一个快速、轻量级的构建系统,与 CMake 配合使用可以提高项目的构建效率。本教程将向你介绍如何使用 CMake 和 Ninja 来构建你的 C/C 项…

版本控制背景知识

版本控制背景知识 本文是关于 Git 系列文章的导读,我们先介绍一下版本控制的背景知识。 什么是版本控制 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。它将什么时候、什么人更改了文件的什么内容等信息如实记录下来…

代码随想录算法训练营第一天|数组理论基础、704二分查找、27移除元素

数组理论基础 一维数组 数组中的元素在内存空间中是连续的数组名与数组中第一个元素的地址相同(一维数组)数组的下标从0开始删除数组的元素其实是用后面的元素覆盖掉要删除的元素数组的长度不能改变 二维数组 二维数组是按照行存储的,也是…

Vue入门四(组件介绍与定义|组件之间的通信)

文章目录 一、组件介绍与定义介绍定义1)全局组件2)局部组件 二、组件之间的通信1)父组件向子组件传递数据2)子传父通信 一、组件介绍与定义 介绍 组件(Component)是Vue.js 最强大的功能之一,它是html、css、js等的一个…

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

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

稀疏矩阵的三元组表示----(算法详解)

目录 基本算法包括:(解释都在代码里) 1.创建 2.对三元组元素赋值 3.将三元组元素赋值给变量 4.输出三元组 5.转置(附加的有兴趣可以看看) 稀疏矩阵的概念:矩阵的非零元素相较零元素非常小时&#xff…

极少数据就能微调大模型,一文详解LoRA等方法的运作原理

原文:极少数据就能微调大模型,一文详解LoRA等方法的运作原理 最近和大模型一起爆火的,还有大模型的微调方法。 这类方法只用很少的数据,就能让大模型在原本表现没那么好的下游任务中“脱颖而出”,成为这个任务的专家…

大气精美网站APP官网HTML源码

源码介绍 大气精美网站APP官网源码,好看实用,记事本修改里面的内容即可,喜欢的朋友可以拿去研究 下载地址 蓝奏云:https://wfr.lanzout.com/itqxN1ko2ovi CSDN免积分下载:https://download.csdn.net/download/huayu…

大型语言模型与知识图谱的完美结合:从LLMs到RAG,探索知识图谱构建的全新篇章

最近,使用大型语言模型(LLMs)和知识图谱(KG)开发 RAG(Retrieval Augmented Generation)流程引起了很大的关注。在这篇文章中,我将使用 LlamaIndex 和 NebulaGraph 来构建一个关于费城费利斯队(Philadelphia Phillies)的 RAG 流程。 我们用的是开源的 NebulaGraph 来…

redis 主从同步和故障切换的几个坑

数据不一致 当我们从节点读取一个数据时,和主节点读取的数据不一致,这是因为主从同步的命令是异步进行的,一般情况下是主从同步延迟导致的,为什么会延迟, 主要二个原因 1、网络状态不好 2、网络没问题,从节…

电脑找不到d3dcompiler43.dll怎么修复,教你5个可靠的方法

d3dcompiler43.dll是Windows操作系统中的一个重要动态链接库文件,主要负责Direct3D编译器的相关功能。如果“d3dcompiler43.dll丢失”通常会导致游戏无法正常运行或者程序崩溃。为了解决这个问题,我整理了以下五个解决方法,希望能帮助到遇到相…

怎么给IP证书更换IP地址

IP证书是由CA认证机构颁发的一种数字证书,可以为只有公网IP地址的网站提供数据加密服务。事实上,IP证书不仅可以提供加密传输服务,还可以验证网站的身份,保证数据传输的安全性。相对于传统基于域名的SSL证书,IP证书无需…

k8s-----存储卷(数据卷)

容器内的目录和宿主机的目录进行挂载。 容器的生命状态是短站的,delete删除,k8s用控制创建的pod,delete相当于重启,容器的状态也会回复到初始状态。 一旦回到初始状态,所有的后天编辑的文件都会消失。 容器和节点之间创…

【设计模式】创建型模式之单例模式(Golang实现)

定义 一个类只允许创建一个对象或实例,而且自行实例化并向整个系统提供该实例,这个类就是一个单例类,它提供全局访问的方法。这种设计模式叫单例设计模式,简称单例模式。 单例模式的要点: 某个类只能有一个实例必须…

vscode配置与注意事项

中文设置 https://zhuanlan.zhihu.com/p/263036716 应用搜索输入“Chinese (Simplified) Language Pack for Visual Studio Code”并敲回车键 底部信息窗没有的话 首先使用快捷键ctrlshiftp,Mac用户使shiftcommandp,然后输入settings.json 将下面的选…

C++其他语法总结

目录 《C基础语法总结》《C面向对象语法总结(一)》《C面向对象语法总结(二)》《C面向对象语法总结(三)》 一、运算符重载 运算符重载可以为运算符增加一些新的功能全局函数、成员函数都支持运算符重载常用的运算符重载示例 class Point {…

【前端素材】bootstrap5实现绿色果蔬电商Frutin

一、需求分析 绿色果蔬电商网站是指专门提供绿色、有机、天然果蔬产品在线销售的电子商务平台。这类网站通常提供以下功能: 产品展示和搜索:网站上展示各种绿色果蔬产品的图片、描述、产地等信息。用户可以通过搜索功能查找特定的果蔬产品或根据分类浏览…