linux进程——概念理解与PCB

        前言:本篇讲解Linux进程概念相关内容。 操作系统被称为计算机世界的哲学, 可以见得操作系统的知识并不好理解。 对于这篇进程概念的讲解, 博主认为, 如果没有一些前置知识的话,里面的有些概念并不好理解。 但是如果学习了冯诺依曼体系结构, 再了解了操作系统是如何对硬件进程管理之后, 进程就变得会好理解很多。 

        ps:本篇内容适合学过一些数据结构的友友门进行观看, 但是可能有些概念理解不了, 最好了解一些冯诺依曼体系结构和操作系统对硬件的管理再来学习本节。 对于这两个知识块, 博主已有文章:

linux_进程周边知识——理解冯诺依曼体系结构-CSDN博客

linux进程周边知识——内核对硬件的管理——计算机世界的管理-CSDN博客

目录

进程的定义

linux下的进程

理解linux下的进程

操作系统对进程的管理  (先描述, 再组织)

PCB


进程的定义

        已经加载到内存的程序, 就叫做进程。 有些教科书上面叫做任务。 

linux下的进程

下面是windows下面的进程:

linux下面的进程, 我们要查看怎么查看呢? ——需要输入ps指令, 如下图:

ps axj就能查看当前机器下所有的进程。但是也有另一个指令能够查看进程, 这个进程是top 

现在, 我在这里创建一个程序:

我现在将这个程序跑出来:

然后打开进程管理, 查看当前的进程:

也有的教材中称正在运行的程序叫做进程。 

其实正在运行的程序本质上就是cpu正在对该程序进行计算, 而想要让cpu计算一个程序, 那么首先这个程序就要被加载到内存中。 所以正在运行的程序本质上也是被加载到内存中的程序。 同样是进程。 

那么思考另一个问题, 对于操作系统来说, 他是一个软件。 一个做软硬件管理的软件, 那么他管理这些硬件的时候, 一定是运行着的, 也就是说, 操作系统也是一个进程。 其实, 本质上, 我们在电脑开机的时候, 其实就是在将操作系统从磁盘缓存到内存中, 让其成为一个进程。

理解linux下的进程

        如何理解上面的概念呢?

        上面是一个简化的冯诺依曼, 现在, 假如有一个程序需要需要运行, 这个程序就要从磁盘加载到内存中, 一个程序, 归根结底就是数据和代码构成的。 而这些的本质都是代码。 

        而且一个操作系统之中, 不仅仅只有一个进程, 他有很多进程。 比如说我们一边听歌一遍聊, 或者一遍打游戏, 一边听歌, 一边聊天。 

        这都是多进程的体现, 更不用说还有许多后台进程, 这些进程我们看不到, 但他们确确实实存在。 

        然后, 既然进程多了, 那么操作系统为了这些进程能够在系统内合理的运行, 就要对他们进行管理, 那么如何管理呢? 就是和操作系统管理硬件的思路是一样的——事实上, 计算机世界的管理甚至是现实中的管理都是这样的, 也就是——先描述, 再组织。 

         任何一个进程, 在加载到内存的时候, 形成真正的进程时, 都要现在内存中开一个进程(属性)的结构体对象, 简称PCB。 全程process cral block —— 进程控制块。 

        这里我们可以思考一个问题, 那就是人是如何辨认一个事物或者对象的? 我们在和别人描述一个人时, 是不是像那个人描述一个人的身高, 体重, 外表是白是黑? 等等。 这些描述的, 其实就是属性。 当我们进行描述的属性够多。 那么是不是就越能指向一个人? 所以, 当特征足够多的时候, 这些属性的集合, 那么就能指向一个人。 所以, 对于上面的PCB来说, 它就是一个进程属性的集合。 

        那么我们知道, 对于操作系统来说, 它是用c语言写的。 所以形成的结构体对象, 就一定是结构体。 那么这里要提三个概念:

        进程编号: 我们知道, 对于一个学校的学生来说, 每一个学生都有一个学号, 目的就是为了区分每一个学生。 那么对于进程也是一样, 每一个进程都有自己的编号, 这个就叫做进程编号。 

        进程的状态: 每一个进程都有自己的状态, 有的进程可能在运行, 有的进程可能在休眠。 所以, 就需要进程的状态进行标识。 

        进程的优先级: 进程需要被cpu运行, 调度, 那么势必就需要一个东西——优先级。 

        未来当进程加载到内存中时, 操作系统就要为进程创建相应的PCB对象。 那么就是说只要进程加载到内存中, 那么操作系统中就有一根这个进程的代码, 一份保存这个进程属性的PCB代码块。

        对于PCB来说, 我们可以这么理解: 就像我们升学一样, 我们升学, 就要将我们的学籍档案进入即将升入的学校, 然后我们的人再到学校进行报道。 这个时候, 我们才是这个学校的学生。 如果我们只有人进入到了学校。 那么我们不算这个学校的学生, 就比如保安大爷, 虽然人在学校, 但是它们不算是学校的学生。 如果我们只有学籍档案到了学校, 但是人没有到学校。 就比如开学的当天, 我们这个时候还没有到学校报道, 但是学籍档案还在学校。 我们就不是这个学校的学生。 而这里的PCB就相当于学籍档案, 这里的data就相当于我们自己。 

        现在看下面这个图:        

        这里的PCB是由操作系统自己生成并且维护的。 代码和数据是程序加载到内存中的。 那么既然我们的程序加载到内存, 操作系统同时会自动创建一个PCB, 那么就是说, 这里的数据代码和PCB合起来, 才能叫做进程。 

        所以, 这里就可以按照我们自己的理给一个进程的定义: 进程 = 内核创建的PCB对象(用来描述程序也就是代码的属性值) + 你自己写的代码和数据

操作系统对进程的管理  (先描述, 再组织)

        操作系统管理进程的时候, 看的是PCB对象而不是我们的代码和数据。 在操作系统中, 对于一个进程来说,PCB里面有一个指针指向自己的代码和数据。 如下图:

        对于多个进程来说, 这些进程不是随意分散在内存中的, 而是由某个或者多个数据结构保存起来的。 最简单的就是双链表数据结构, 如下图为链接的简单图:(就是每个PCB都有一个指向自己的代码和数据的指针, 用来找到代码代码本体。 还有一个后指针指向下一个进程, 一个前指针指向前一个进程, 注意: 这里的前指针没有画, 但不代表没有。)

        这样, 操作系统对于进程的管理就转化为了对于双链表的数据结构的管理。 

        其实对于这种PCB和数据代码分开, 只管理PCB的管理模式, 在生活中很常见。 就比如我们在竞争部门委员的时候。 我们给学校的部门投递自己的简历。面试我们的这些学长, 他们在面试我们的时候是让我们在屋外排队等待面试吗? 不是的, 他们是让我们在一个静候室里面, 按照简历的顺序, 给我们安排面试的顺序。 而这里的简历,不就是操作系统中的PCB? 这里的我们本人, 不就是加载到内存中的程序?——这上面的过程, 本质上就是一个先描述, 再组织。 

PCB

        linux下的PCB叫做task_struct

  •         task_struct里面封装了很多东西, 他包含了进程内部的所有属性, 所以非常大。 我们知道, 在c/c++语言中, struct 结构体内部其实就是封装一个事物的所有属性, 这些属性, 其实描述的就是对象, 这就是面向对象, 所以task_struct描述的就是进程。 

        那么, task_struct里面到底有什么东西呢? 

  •         标识符:也叫做PID, 这个是用来区别其他的进程。
  •         状态: 用来记录当前进程的状态, 进程可以是运行中, 可以是休眠中, 可以是暂停中等等。
  •         优先级:进程要被cpu调度, 但是cpu就那么点空间, 而进程那么多, 所以这些进程是要竞争的。 为什么这个进程这个时候要被运行。 而其他进程不运行呢? 这就是优先级。 
  •         程序计数器:当前运行程序的下一条指令的地址——这里不好理解, 回想一下我们学习的函数栈帧, 程序在调用函数时, 是不是会先将这个函数处的下一条指令的地址保存下来? 这个其实就是类似于程序计数器。程序计数器是cpu里面的一个寄存器, 它专门保存当前指令的下一条指令。 
  •         内存指针:PCB找到自己的代码和数据。 
  •         上下文数据和IO状态信息: 这两个博主知识储备不足,本篇文章也不会涉及, 有兴趣的友友可以自己学习
  •         记账信息:记录程序运行的时间等等。 可以衡量调度器的优劣。

再次强调:

        在进程当中, 我们管理进程, 其实是对PCB进行管理。 

        那么, 在linux中, 内核是如何组织进程的呢? 在linux内核中, 最基本的组织进程task_struct的方式, 是采用双向链表进行组织的。 

        但是, 要注意, pcb不仅仅属于一个双链表, 在操作系统中, pcb内部可能不仅仅只有一个链表指针, 也有可能有队列的指针之类。 意思就是说, pcb不仅仅可能只被链在在了一个链表里, 同时pcb也可能被链在了一个队列里。或者放在其他的一个数据结构当中。 

        那么利用上面的特性PCB就可以拥有不同的状态, 比如PCB此时正在运行, 那么就把他链入运行队列当中, 比如PCB正在等待, 就把他链入等待队列当中, 比如PCB正在休眠, 就把他链入休眠队列当中。 

        所以, 进程如何工作, 取决于我们被他放到了哪个数据结构当中。 

现在我们来看另一个问题, 下午是正在跑的两个程序, 左边是查看当前正在跑的右边的两个程序:

        之所以会有第三个是因为指令也算是一个进程, 但是因为很快, 一般我们查不到, 但是对于过滤来说, 过滤的后面也有process, 所以在cpu进行调度的时候, 就要将grep也给带上。 

        这里最重要的是前面的那几个数字。这个东西叫做PID, 也叫做进程的标识符, 虽然我们运行的两个程序, 都是process-7-11.exe, 但是对于操作系统来说, 这是两个程序, 那么他就会生成两份PCB对象。 所以, 内核看的不是有几分代码,而是有几个进程!!

        另一个知识点是proc: 可以查看当前系统中运行的进程。 我们可以使用 -l 查看细节。 

然后我们就会发现, 这些进程都是目录, 并且这些目录的名字都是数字。 

既然进程都可以在proc目录下以文件的形式显示, 那么我们就可以查看我们当前的process-7-11.exe进程:

现在我们来看上面的绿色字段, 这个绿色字段前面是exe, 后面是一个路径, 这个路径其实就是process-7-11.exe的文件位置。 对于上面的蓝色字段, 这个蓝色字段其实就是运行的程序所在的工作目录, 现在我们来思考一个问题。 为什么对于一个touch指令, mkdir指令这些来说, 创建的文件都在当前目录下。 答案就是进程中的这个cwd文件。 这个文件默认保存了当前进程的运行路径, 那么在使用路径的时候, 就会在当前路径创建文件了。 

--------------------------------以上, 就是本节的全部内容。下面是博主的笔记:

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

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

相关文章

SQL Server 用户应当如何防范 Mallox (.hmallox) 勒索软件袭击

勒索软件领域的特点是随着时间的流逝,参与者群体和恶意软件家族都会大量流失,只有少数参与者表现出相对长寿的寿命。曾经令人担忧的威胁,如 REvil 和 Conti,要么被铲除,要么被解散,而其他威胁——例如 ALPH…

UGUI优化篇(更新中)

UGUI优化篇 1. 基础概念2. 重要的类1. MaskableGraphic类继承了IMaskable类2. 两种遮罩的实现区别RectMask2DMask 3. 渲染部分知识深度测试深度测试的工作原理 渲染队列透明物体在渲染时怎么处理为什么透明效果会造成性能问题 1. 基础概念 所有UI都由网格绘制的如image由两个三…

25届平安产险校招测评IQ新16PF攻略:全面解析与应试策略

尊敬的读者,您好。随着平安产险校招季的到来,许多应届毕业生正积极准备着各项测评。本文旨在提供一份详尽的测评攻略,帮助您更好地理解平安产险的校招测评流程,以及如何有效应对。 25届平安产险平安IQ(新)测…

AI大模型探索之旅:深潜大语言模型的训练秘境

在人工智能的浩瀚星空中,大语言模型无疑是最耀眼的星辰之一,它们以无与伦比的语言理解与生成能力,引领着智能交互的新纪元。本文将带您踏上一场探索之旅,深入大语言模型的训练秘境,揭开其背后复杂而精妙的全景画卷。 …

给 「大模型初学者」 的 LLaMA 3 核心技术剖析

编者按: 本文旨在带领读者深入了解 LLaMA 3 的核心技术 —— 使用 RMSNorm 进行预归一化、SwiGLU 激活函数、旋转编码(RoPE)和字节对编码(BPE)算法。RMSNorm 技术让模型能够识别文本中的重点,SwiGLU 激活函…

现在有哪些微服务解决方案?

Dubbo:是一个轻量级的Java微服务框架,最初由阿里巴巴在2011年开源。它提供了服务注册与发现、负载均衡、容错、分布式调用等。Dubbo更多的被认为是一种高性能的RPC框架(远程过程调用),一些服务治理功能依赖第三方组件完…

第一部分:C++入门

目录 前言 1、C关键字(C98) 2、命名空间 2.1、命名空间定义 2.2、命名空间的使用 3、C输入&输出 4、缺省参数 4.1、缺省参数的概念 4.2、缺省参数的分类 5、函数重载 5.1、函数重载的概念 5.2、C支持函数重载的原理 6、引用 6.1、引用的概念 6.2、引用特性 …

深圳晶彩智能JC3636W518C开箱实现电脑副屏功能

深圳晶彩智能发布了JC3636W518C 这是一款中国制造的,铝合金外壳,价格非常震撼的开发板。原创是billbill的up播主萨纳兰的黄昏设计的ESP32太极小派,由深圳晶彩智能批量生产。 该款 LCD 模块采用 ESP32-S3R8 芯片作为主控,该主控是双核 MCU&…

C++入门基础篇(2)

欢迎大家的来到小鸥的博客&#xff0c;今天我们继续C基础的第二篇吧&#xff01; 这也是入门基础篇的最后一篇wo~ 目录 1.引用 引用的概念 引用的特性及使用 const常引用 指针和引用的关系 2.inline内联函数 定义 相关特性及使用​ 3.nullptr >>后记<< …

摩尔投票算法

文章目录 什么是摩尔投票算法算法思想 相关例题摩尔投票法的扩展题目解题思路代码奉上 什么是摩尔投票算法 摩尔投票法&#xff08;Boyer-Moore Majority Vote Algorithm&#xff09;是一种时间复杂度 为O(n),空间复杂度为O(1)的方法&#xff0c;它多数被用来寻找众数&#xf…

Manim的代码练习02:在manim中Dot ,Arrow和NumberPlane对象的使用

Dot&#xff1a;指代点对象或者表示点的符号。Arrow&#xff1a;指代箭头对象&#xff0c;包括直线上的箭头或者向量箭头等。NumberPlane&#xff1a;指代数轴平面对象&#xff0c;在Manim中用来创建包含坐标轴的数学坐标系平面。Text&#xff1a;指代文本对象&#xff0c;用来…

Linux系列--命令详解

目录 一、Linux资源管理方式 二、查询类型命令详解 三、文件管理类型命令详解 四、文件压缩与解压 五、文件编辑 六、系统命令 七、文件内容查看命令 一、Linux资源管理方式 linux操作系统采用一个文档树来组织所有的资源。这棵树的根目录的名字叫做&#xff1a;//…

使用 HttpServlet 接收网页的 post/get 请求

前期工作&#xff1a;部署好 idea 和 一个 web 项目 idea(2021),tomcat(9) ->创建一个空的项目 -> 新建一个空的模块 -> 右键单击模块 选择 Add..Fra.. Sup.. -> 勾选Web App...后点击OK -> 点击 file - Project Struc... -> 选择刚刚的模块 -> 点…

Linux - 基础开发工具(yum、vim、gcc、g++、make/Makefile、git)

目录 Linux软件包管理器 - yum Linux下安装软件的方式 认识yum 查找软件包 安装软件 如何实现本地机器和云服务器之间的文件互传 卸载软件 Linux编辑器 - vim vim的基本概念 vim下各模式的切换 vim命令模式各命令汇总 vim底行模式各命令汇总 vim的简单配置 Linux编译器 - gc…

C 语言指针进阶

1.0 指针的定义 指针是内存中一个最小单元的编号&#xff08;内存单元的编号称之为地址【地址就是指针指针就是地址】&#xff09;指针通常是用来存放内存地址的一个变量。本质上指针就是地址&#xff1a;口语上说的指针起始是指针变量&#xff0c;指针变量就是一个变量&#…

MySQL覆盖索引和索引跳跃扫描

最近在深入学习MySQL&#xff0c;在学习最左匹配原则的时候&#xff0c;遇到了一个有意思的事情。请听我细细道来。 我的MySQL版本为8.0.32 可以通过 show variables like version; 查看使用的版本。 准备工作&#xff1a; 先建表&#xff0c;SQL语句如下&#xff1a; c…

SSM框架学习笔记(仅供参考)

&#xff08;当前笔记简陋&#xff0c;仅供参考&#xff09; 第一节课&#xff1a; &#xff08;1&#xff09;讲述了Spring框架&#xff0c;常用jar包&#xff0c;以及框架中各个文件的作用 &#xff08;2&#xff09;演示了一个入门程序 &#xff08;3&#xff09;解释了…

Redis 实现的延时队列组件

最近看开源看到一个好用的延时队列组件&#xff0c;已经上生产。代码量很少&#xff0c;主要就是利用Redis监听过期键实现的。然后搞点策略模式柔和柔和。利用Spring Start 封装了一下&#xff0c;全是俺掌握的知识&#xff0c;稍微研究了下就搞懂了。觉得挺有用的&#xff0c;…

006-三台交换机堆叠

三台交换机堆叠 链形连接和环形连接 链形配置IRF与环形配置IRF的区别 三个交换机链形配置IRF与三个交换机环形配置IRF的主要区别体现在以下几个方面&#xff1a; 物理位置要求&#xff1a; 链形连接&#xff1a;对成员设备的物理位置要求相对较低&#xff0c;主要适用于成员…

HybridCLR + Addressable 热更新篇(一)

目录 前言一、HybridCLR 和 Addressable 是什么&#xff1f;1. HybridCLR2. Addressable 二、使用步骤1.HybridCLR导入2.HybridCLR配置3.Addressable导入4.Addressable配置 前言 随着移动互联网和游戏行业的快速发展&#xff0c;热更新技术变得越来越重要。热更新能够在不重新…