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.rhkb.cn/news/235037.html

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

相关文章

【云计算】云计算概述

1. 云计算概述 1.1 云计算的定义 美国国家标准与技术研究院(NIST)定义 云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问,进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件…

分享两个概念:非受检异常和受检异常

分享两个概念:非受检异常和受检异常 愿你的每一天都充满阳光和笑声,愿每一步都是轻松与愉快。在新的旅程中,愿你找到勇气攀登高峰,找到智慧化解困境。 愿你的心中充满温暖和善意,愿你的梦想如彩虹般美丽且真实。愿你发…

TCN 时序卷积网络 (temporal convolutional network)【因果卷积、空洞卷积】

文章目录 TCN 时序卷积 (temporal convolutional network)1.因果卷积2.膨胀卷积 TCN 时序卷积 (temporal convolutional network) 它由膨胀卷积核因果卷积两种卷积构成。 如图:左边是膨胀因果卷积,右边是…

206. 反转链表(Java)

题目描述: 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。 输入: head [1,2,3,4,5] 输出: [5,4,3,2,1] 代码实现: 1.根据题意创建一个结点类: public class ListNode {int val…

048.Python包和模块_发布包和模块

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈 入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈 虚 拟 环 境 搭 建 :👉&…

ARM工控机Node-red使用教程

嵌入式ARM工控机Node-red安装教程 从前车马很慢书信很远,而现在人们不停探索“科技改变生活”。 智能终端的出现改变了我们的生活方式,钡铼技术嵌入式工控机协助您灵活布建能源管理、大楼自动化、工业自动化、电动车充电站等各种多元性IoT应用&#xff…

Unity组件开发--UI管理器

1.Canvas组件: 注意属性: (1)渲染模式是:屏幕空间相机 (2)创建一个UICamera节点,管理相机 (3)屏幕画布缩放模式 (4)画布下挂载两…

前端项目构建打包生成Git信息文件

系列文章目录 TypeScript 从入门到进阶专栏 文章目录 系列文章目录前言一、前端项目构建打包生成Git信息文件作用二、步骤1.引入相关的npm包1.1. **fs** 包1.2. **child_process** 包1.3. **os** 包 (非必须 如果你想生成的文件信息中包含当前电脑信息则可用)1.4. **path** 包…

基于宝塔搭建Discuz!论坛

一、安装宝塔 我是在我的虚拟机上安装图的宝塔 虚拟机版本:Ubuntu 18.04 wget -O install.sh https://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh 6dca892c安装完成之后在浏览器输入你的地址 https://你的域名(或…

每天刷两道题——第十一天

1.1滑动窗口最大值 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值 。 输入:nums [1,3,-1,-3,5,3,6,7], k 3 输出&…

面试题-DAG 有向无环图

有向无环图用于解决前后依赖问题,在Apollo中用于各个组件的依赖管理。 在算法面试中,有很多相关题目 比如排课问题,有先修课比如启动问题,需要先启动1,才能启动2 概念 顶点: 图中的一个点,比…

k8s 之7大CNI 网络插件

一、介绍 网络架构是Kubernetes中较为复杂、让很多用户头疼的方面之一。Kubernetes网络模型本身对某些特定的网络功能有一定要求,但在实现方面也具有一定的灵活性。因此,业界已有不少不同的网络方案,来满足特定的环境和要求。 CNI意为容器网络…

C# Entity Framework 中不同的数据的加载方式

延迟加载 延迟加载是指在访问导航属性时,Entity Framework 会自动查询数据库并加载相关数据。这种方式在我们需要访问导航属性时比较方便,因为我们无需手动加载相关数据,而且只会在需要时才会进行查询,从而减少了不必要的开销。但…

模仿Activiti工作流自动建表机制,实现Springboot项目启动后自动创建多表关联的数据库与表的方案

文/朱季谦 熬夜写完,尚有不足,但仍在努力学习与总结中,而您的点赞与关注,是对我最大的鼓励! 在一些本地化项目开发当中,存在这样一种需求,即开发完成的项目,在第一次部署启动时&…

C++笔记之cout高亮输出以及纯C++实现一个彩色时钟

C笔记之cout高亮输出以及纯C实现一个彩色时钟 code review! 文章目录 C笔记之cout高亮输出以及纯C实现一个彩色时钟一.cout高亮输出1.1.运行1.2.代码一1.3.代码二1.4.重置终端的文本格式到默认设置说明 二.纯C实现一个彩色时钟2.1.运行2.2.main.cc2.3.cout带颜色打印输出技巧…

springCould中的Bus-从小白开始【11】

目录 🧂1.Bus是什么❤️❤️❤️ 🌭2.什么是总线❤️❤️❤️ 🥓3.rabbitmq❤️❤️❤️ 🥞4.新建模块3366❤️❤️❤️ 🍳5.设计思想 ❤️❤️❤️ 🍿6.添加消息总线的支持❤️❤️❤️ &#x1f9…

图解Kubernetes的服务(Service)

pod 准备: 不要直接使用和管理Pods: 当使用ReplicaSet水平扩展scale时,Pods可能被terminated当使用Deployment时,去更新Docker Image Version,旧Pods会被terminated,然后创建新Pods 0 啥是服务&#xf…

OCS2 入门教程(四)- 机器人示例

系列文章目录 前言 OCS2 包含多个机器人示例。我们在此简要讨论每个示例的主要特点。 System State Dim. Input Dim. Constrained Caching Double Integrator 2 1 No No Cartpole 4 1 Yes No Ballbot 10 3 No No Quadrotor 12 4 No No Mobile Manipul…

【java爬虫】首页显示沪深300指数走势图以及前后端整合部署方法

添加首页 本文我们将在首页添加沪深300指数成立以来的整体走势数据展示,最后的效果是这样的 单独贴一张沪深300整体走势图 我感觉从总体上来看指数还是比较稳的,没有特别大的波动,当然,这只是相对而言哈哈。 首先是前端页面 &l…

【python】内存管理和数据类型问题

一、内存管理 Python有一个自动内存管理机制,但它并不总是按照期望的方式工作。例如,如果创建了一个大的列表或字典,并且没有删除它,那么这个对象就会一直占用内存,直到Python的垃圾回收器决定清理它。为了避免这种情…