【Linux】深入理解进程概念


个人主页:🍝在肯德基吃麻辣烫
我的gitee:Linux仓库
个人专栏:Linux专栏
分享一句喜欢的话:热烈的火焰,冰封在最沉默的火山深处
文章目录
- 前言
- 浅谈进程概念
- 1. 进程和操作系统的联系
- 2.描述进程的对象——PCB
- 深谈进程概念
- 3. 对进程的组织操作
- 总结
前言
本篇文章继上一篇的冯诺依曼体系结构和操作系统这两个软硬件的概念之后,开始讲解Linux下三座大山之一的进程。
因为进程概念虽然不是很多,但比较难以理解,因为它离我们日常生活比较远,比较抽象,本文章以最平易近人的语言和生活中我们都熟悉的例子对进程进行剖析,希望这篇文章能进一步帮助你理解进程的概念,吃透Linux的其中一座大山。
废话不多说,我们现在开始。
浅谈进程概念
- 进程到底是什么呢?
这里给出一个比较简单的理解:
一个加载到内存的程序就叫做进程。
正在运行的程序,也叫做进程。
我们可以这样理解,进程,进:进入,程:程序,进入内存的程序,就是进程。
自从我们理解冯诺依曼之后,程序加载到内存这件事情我们就可以轻松理解。前面我们讲过,操作系统是一款进行管理的软件。 既然操作系统是软件,那就应该也会被加载到内存中运行。我们平时所说的启动电脑,就是先启动操作系统,也就是将操作系统加载到内存中。
以我的电脑为例,当打开任务管理器时,下面一览无余的任务等,这些就是进程,正在运行的程序。
1. 进程和操作系统的联系
其实,程序是一堆数据和代码,最先是被存放到磁盘中。我们知道启动电脑时,操作系统也会被加载到内存中运行,在内存中有一块空间属于操作系统自己的数据和代码。

当我们想要运行整个程序时,由于CPU只会和内存打交道,不会直接和磁盘交互,这就注定了程序想要运行必须加载到内存中,这个同时也遵守了冯诺依曼体系结构。
- 这时候我们仔细想想,只能由一个程序能加载到内存里面吗?
其实并不是,我们玩电脑的时候,会同时启动几个软件,我们会一边看b站一边登录qq和微信,一边敲代码,这些都可以同时进行。
所以,一个操作系统,是可以同时运行多个进程的!
这就像大学里面有大一的,有大二的,有在实习的,有天天在宿舍打游戏的一样,一个操作系统要想同时运行那么多个进程,就必须将进程管理起来!
- 操作系统如何管理进程呢?
还记得上篇文章那句贯穿整个Linux的话吗?
先描述,再组织
描述的过程就是让操作系统先认识进程,再将进程用一个struct结构体描述起来,然后将众多进程全部都具体化,而对于进程的管理无非就是多一个进程,少一个进程等等这些操作,所以操作系统再将进程组织起来,就能达到管理。
2.描述进程的对象——PCB
从上面我们可以知道,任何一个程序,加载到内存时,操作系统对进程进行描述时,会把进程具象化成一个struct结构体,而这个结构体就是PCB,全称是Process Ctrl Block:进程控制块。
怎么理解进程PCB?
- 这里有一个问题:人是怎么认识一个事物的?
假如这里有一个苹果,我们都会说,这个苹果是圆的,是红色的,大大的一个东西,还是一个甜甜的水果。
又譬如对你大学舍友的描述,长得怎么样,两个眼睛扛着两片眉毛,一个鼻子,一张嘴巴,爱好什么,喜欢做什么等等。
可以看出来,这些描述一个事物,就是通过事物本身的属性来描述的!
其实我们对一个事物本身并不了解,而是通过该事物的大量属性来了解这个事物,当属性足够多时,这一堆属性的集合,就是目标事物本身!
所以描述进程的对象——PCB,就是进程属性的集合!
到这里我们再对程序加载到内存这件事情进一步详谈:
程序加载到内存中时:
- 1.把数据和代码都加载到内存中
- 2.同时创建描述该进程的PCB对象并加载到内存中
这就像是,大学新生考上了某所学校时,要证明我真正在那所学校了,就需要在学校的教务系统录入我的名字信息等等。也许该名同学还在放暑假,可是当学校教务系统有该同学的信息时, 就表明这名同学真正的来这所大学就读了。
深谈进程概念
从前面我们可以知道,一个程序加载到内存,一是程序本身的数据和代码加载到内存,二是操作系统创建了一个PCB对象并加载到内存;
所以,单纯的数据和代码不叫进程,单纯的PCB对象也不叫进程,而是数据和代码 + 描述该进程的PCB结构体 = 进程!
1)进程的数据和代码是程序员写的
2)描述该进程的PCB结构体是操作系统维护的
可以想想,在学校中我们对学生的管理是看学生的及格率,挂科率,学分绩,宿舍号等属性进行管理的。
所以,操作系统对进程的管理并不是对数据和代码的管理,而是对描述该进程的PCB结构体进行管理!
因为这个内核PCB结构体就是该进程属性的集合!

可是,操作系统对进程进行管理,不只是要知道该进程的属性值,还要获取进程的数据和代码。因此,在描述该进程的PCB结构体中,一定有指向该进程数据和代码的指针信息!
就像管理学生,学校老师如何通过学生的属性去获取指向学生数据的 “ 指针信息 ”?
其实就是手机号。手机号是该学生的属性值,但是这个属性可以找到学生这个人!
以上就是关于操作系统如何对进程进行描述的过程。
3. 对进程的组织操作
通过上面的信息可以知道,操作系统会对多个进程进行描述,管理这些进程的时候就管理对应描述进程的PCB对象就可以了。
在PCB结构体中大概有这些信息:

前面说过,操作系统对进程的管理方式是:
先描述,再组织。
那么该如何对那么多的进程组织起来呢?
其实我们可以再PCB结构体中再加一个指针信息:
struct PCB* next,该指针指向下一个PCB结构体对象,如下图:

从而将操作系统对进程的管理转化成对一个链表的增删查改!
这个过程就是对进程进行组织的过程!
总结:进程 = 内核PCB数据结构 + 自己的代码和数据。
操作系统对进程的管理是先描述,再组织的过程;操作系统对进程的数据管理是被弱化的,更重要的是对进程的PCB结构体进行管理,然后将这一个个的PCB结构体连接起来,就形成了对链表的增删查改。
总结
本篇文章重点在于理解进程的概念就可以了,进程的相关内容比较多且难以理解,从进程概念入手是最合适的,后面会持续更新如何创建进程,进程的状态等详细的内容,更好地理解进程,贯穿整个Linux。
相关文章:
【Linux】深入理解进程概念
个人主页:🍝在肯德基吃麻辣烫 我的gitee:Linux仓库 个人专栏:Linux专栏 分享一句喜欢的话:热烈的火焰,冰封在最沉默的火山深处 文章目录 前言浅谈进程概念1. 进程和操作系统的联系2.描述进程的对象——PCB …...
Java课题笔记~ AspectJ 的开发环境(掌握)
AspectJ 的开发环境(掌握) (1) maven 依赖 <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></depe…...
机器学习参数调优
手动调参 分析影响模型的参数,设计步长进行交叉验证 我们以随机森林为例: 本文将使用sklearn自带的乳腺癌数据集,建立随机森林,并基于泛化误差(Genelization Error)与模型复杂度的关系来对模型进行调参&…...
[Java基础]面向对象-关键字分析:this,static,final,super
系列文章目录 【Java基础】Java总览_小王师傅66的博客-CSDN博客 [Java基础]基本概念(上)(标识符,关键字,基本数据类型)_小王师傅66的博客-CSDN博客 [Java基础]基本概念(下)运算符,表达式和语句,分支,循环,方法,变量的作用域,递归调用_小王师傅66的博客-CSDN博客 [Java基础]…...
数据结构初阶--二叉树的顺序结构之堆
目录 一.堆的概念及结构 1.1.堆的概念 1.2.堆的存储结构 二.堆的功能实现 2.1.堆的定义 2.2.堆的初始化 2.3.堆的销毁 2.4.堆的打印 2.5.堆的插入 向上调整算法 堆的插入 2.6.堆的删除 向下调整算法 堆的删除 2.7.堆的取堆顶元素 2.8.堆的判空 2.9.堆的求堆的…...
NVM Command学习
ubuntu系统安装nvme-cli,可以在应用层发起命令。 sudo apt install nvme-cli$ sudo nvme --help nvme-1.9 usage: nvme <command> [<device>] [<args>]The <device> may be either an NVMe character device (ex: /dev/nvme0) or an nvme …...
TCP Socket 基础知识点(实例是以Java进行演示)
本篇根据TCP & Socket 相关知识点和学习所得进行整理所得。 文章目录 前言1. TCP相关知识点1.1 双工/单工1.2 TCP协议的主要特点1.3 TCP的可靠性原理1.4 报文段1.4.1 端口1.4.2 seq序号1.4.3 ack确认号1.4.4 数据偏移1.4.5 保留1.4.6 控制位1.4.7 窗口1.4.8 校验和1.4.9 紧…...
openCV图像读取和显示
文章目录 一、imread二、namedWindow三、imshow #include <opencv2/opencv.hpp> #include <iostream>using namespace std; using namespace cv;int main(int argc,char** argv) {cv::Mat img imread("./sun.png"); //3通道 24位if (img.empty()) {std:…...
requests 方法总结
当使用 requests 库进行接口自动化测试时,以下是一些详细的步骤和方法总结: 1. **安装 requests 库**:首先,确保你已经安装了 requests 库。可以使用 pip 命令进行安装:pip install requests。 2. **导入库**&#x…...
Go语言删除文本文件中的指定行
GO语言删除文本文件中的指定行 1. 思路2. 处理文件3. 处理后的文本文件 1. 思路 假设现在有一个文本文件,我们需要删除文件中乱码的行。我们可以使用go的os库来处理文件,遍历整个文件然后将除过乱码的行写入一个新文件,以此来实现我们的需求…...
Arthas GC日志-JVM(十八)
上篇文章说jvm的实际运行情况。 Jvm实际运行情况-JVM(十七) Arthas介绍 因为arthas完全是java代码写的,我们直接用命令启动: Java -jar arthas-boot.jar 启动成功后,选择我们项目的进程。 进入我们可用dashboard…...
ISC 2023︱诚邀您参与赛宁“安全验证评估”论坛
8月9日-10日,第十一届互联网安全大会(简称ISC 2023)将在北京国家会议中心举办。本次大会以“安全即服务,开启人工智能时代数字安全新范式”为主题,打造全球首场AI数字安全峰会,赋予安全即服务新时代内涵…...
分享一个计算器
先看效果: 再看代码(查看更多): <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>计算器</title><style>* {box-sizing: border-box;}body…...
Android 13 Launcher——长按图标弹窗背景变暗
目录 一.背景 二.修改代码 一.背景 客户定制需要长按图标弹窗让其背景变暗,所以需要进行定制,如下是定制流程,本篇是接上篇https://gonglipeng.blog.csdn.net/article/details/132171100 的内容 二.修改代码 主要代码逻辑在ArrowPopup中的reorderAndShow方法和closeCom…...
Elasticsearch概述和DSL查询总结
目录 Elasticsearch概述 1. 什么是Elasticsearch 2. 作用 3. 特点 DSL(Domain Specifit Language)特定领域语言: 概念和作用 查询代码总结 最后附项目准备 1.创建搜索工程(maven工程) 2.配置文件 application…...
扩展卡尔曼滤波器代码
文章目录 前言问题状态向量和观测向量加性噪声的形式状态方程及求导观测方程及求导状态初始化过程噪声和观测噪声卡尔曼滤波过程code 前言 卡尔曼滤波器在1960年被卡尔曼发明之后,被广泛应用在动态系统预测。在自动驾驶、机器人、AR领域等应用广泛。卡尔曼滤波器使…...
9:00开始面试,9:08就出来了,这问题问的实在是····
外包工作3年,今年裸辞跳槽,很幸运的是找到了下家,不过 自从加入到这家公司,每天不是在加班就是在加班的路上,薪资倒是给的不少,所以我也就忍了。没想到6月一纸通知,所有人都不许加班࿰…...
揭秘:5个美国程序员与日本程序员的差异
大家好,这里是程序员晚枫。想了解更多精彩内容,快来关注程序员晚枫 今天以美国和日本程序员为例,给大家分享一下国外程序员的生活。 以下是五个美国程序员和日本程序员的的区别: 工作方式:美国程序员通常更注重自由和…...
Springboot实现简单JWT登录鉴权
登录为啥需要鉴权? 登录需要鉴权是为了保护系统的安全性和用户的隐私。在一个 Web 应用中,用户需要提供一定的身份信息(例如用户名和密码)进行登录,登录后系统会为用户生成一个身份令牌(例如 JWT Token&am…...
C++设计模式创建型之工厂模式整理
一、工厂模式分类 工厂模式属于创建型模式,一般可以细分为简单工厂模式、工厂模式和抽象工厂模式。每种都有不同的特色和应用场景。 二、工厂模式详情 1、简单工厂模式 1)概述 简单工厂模式相对来说,在四人组写的《设计模式------可复用面…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
