【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)概述 简单工厂模式相对来说,在四人组写的《设计模式------可复用面…...
高性能云端GPU推荐,满足深度学习全场景需求
本文以安诺其集团旗下专业GPU算力平台“智星云”为样本,从其技术架构、全系型号定价、主流平台对比、全场景适配四个维度展开,聚焦一个核心问题:在算力价格全线上涨的2026年,高性能深度学习任务如何用合理的预算匹配最合适的GPU方…...
基于Dify平台快速构建AI对话机器人:从部署到生产级实践
1. 项目概述与核心价值最近在折腾AI应用落地的过程中,我反复被一个问题困扰:如何把一个强大的大语言模型(LLM)能力,快速、低成本地封装成一个能实际解决业务问题的对话机器人?自己从零开始搭框架、写API、处…...
保姆级教程:用Docker部署Jenkins时,如何搞定Agent节点的50000端口映射(附避坑点)
深度解析Docker化Jenkins部署:50000端口映射全攻略与实战避坑指南 Jenkins作为持续集成领域的标杆工具,其容器化部署已成为现代DevOps实践的标配。但当Master节点运行在Docker环境中时,Agent节点连接失败的场景屡见不鲜——其中80%的问题根源…...
全志T113-S3 SPI屏幕驱动踩坑实录:内核5.4下适配ILI9341的完整流程与代码修改
全志T113-S3 SPI屏幕驱动深度解析:内核5.4适配ILI9341的实战指南 在嵌入式开发领域,显示设备的驱动适配一直是工程师面临的核心挑战之一。全志T113-S3作为一款性价比突出的处理器,广泛应用于各类嵌入式场景,而ILI9341驱动的SPI屏幕…...
从MC1496乘法器到DSB调制:一个经典电路的设计实践与参数解析
1. DSB调制基础与MC1496乘法器简介 第一次接触DSB调制电路时,我被那个看似简单的波形变换背后精妙的数学原理深深吸引。DSB(Double Sideband)双边带调制,本质上是用低频信号去控制高频载波的幅度,但与传统AM调制不同&a…...
STL到STEP格式转换:技术选型与实施指南
STL到STEP格式转换:技术选型与实施指南 【免费下载链接】stltostp Convert stl files to STEP brep files 项目地址: https://gitcode.com/gh_mirrors/st/stltostp 在制造业数字化转型的背景下,3D数据格式互操作性已成为工程团队面临的核心挑战。…...
终极Cybersources渗透测试工具大全:从Web应用到网络安全的全面覆盖指南
终极Cybersources渗透测试工具大全:从Web应用到网络安全的全面覆盖指南 【免费下载链接】cybersources A curated list of cybersecurity tools and resources. 项目地址: https://gitcode.com/gh_mirrors/cy/cybersources Cybersources是一个精心策划的网络…...
Cerebras IPO首日暴涨108%:AI芯片领域的超级玩家来了
Cerebras IPO首日暴涨108%:AI芯片领域的超级玩家来了2026年5月15日,AI芯片公司Cerebras Systems正式登陆纳斯达克,以55亿美元融资规模成为年度最受瞩目的科技IPO,首日股价翻倍。这家专注超大芯片的公司,正在用硬核硬件…...
TensorRT量化实战:手把手教你用Entropy Calibration校准激活值(附代码避坑)
TensorRT熵校准实战:从理论到代码的完整避坑指南 引言 在深度学习模型部署领域,量化技术已经成为减小模型体积、提升推理速度的关键手段。而作为量化过程中的核心环节,激活值校准直接决定了最终模型的精度表现。TensorRT提供的Entropy Calibr…...
AI驱动数字营销平台架构解析:从工作流引擎到品牌个性化
1. 项目概述:一个AI驱动的数字营销代理平台最近在GitHub上看到一个挺有意思的项目,叫windagency/valora.ai。乍一看这个仓库名,可能很多人会有点懵,这到底是做什么的?是AI工具,还是营销平台?作为…...
