【Linux】第十二站:进程

news2024/12/27 12:03:44

文章目录

    • 1.windows和linux中的进程
    • 2.先描述
    • 3.在组织
    • 4.具体的Linux系统是如何做的?
      • 1.基本概念
      • 2.描述进程-PCB
      • 3.task_struct和PCB的关系
      • 4.task_struct内容分类
      • 5.linux具体如何做的?
      • 6.查看进程

1.windows和linux中的进程

一个已经加载到内存的程序,叫做进程

进程也叫做任务

比如在windows中,这个任务管理器就可以看到进程

image-20231105143905414

而在linux中,我们使用

ps axj

就可以看到我们的进程了

image-20231105144017060

2.先描述

我们先使用如下代码

image-20231105145022218

image-20231105145038489

如下所示,就可以查看到进程了

image-20231105145346868

在这个过程中,我们的这个可执行程序就会从磁盘中加载到内存中,然后经过CPU,最终输出到显示器上。

这个加载到内存中的程序就是一个进程

像我们电脑的操作系统开机的时候也一样,开机的时候,就是操作系统加载到内存的时候。这也是进程

这些加载到内存,其实就是将这些二进制数据(代码和一些数据)从磁盘中搬到内存中

如下图所示,当一个程序要运行的时候,他需要先将这些二进制文件从磁盘中搬到操作系统中。

image-20231105151143404

但是常识告诉我们,一个操作系统,不仅仅只能运行一个进程,可以同时运行多个进程

所以说,操作系统必须将这些进程给管理起来

那么应该如何管理进程呢?

当然还是先描述,在组织

所以任何一个进程,在加载到内存的时候,形成真正的进程时,操作系统要先创建描述进程属性的结构体对象----PCB(process ctrl block 进程控制块)

这就是类似于人是怎么样辨别认识一个事情或者对象的

当然是都是通过属性认识的。

当属性够多,这一堆属性的集合,就是目标对象

这个PCB就是进程属性的集合

而在C语言中,我们可以用struct结构体来描述这个集合。

这个结构体里面就有进程编号、进程的状态、优先级、相关的指针信息…等等信息

然后根据进程的PCB属性,就可以为该进程创建对应的PCB对象了

不过我们的操作系统除了创建一个PCB对象之外,还要去将代码和数据加载到内存中

image-20231105154122240

就好比我们现在是一个学生,那么PCB就是我们的档案,代码和数据就是我们本人。只有当这两部分都在学校的时候,我们才是这个学校的学生。

所以描述进程的PCB的结构体和该进程的代码和数据合起来才称作进程

image-20231105154613845

所以所谓的进程 = 内核PCB数据结构对象 + 你自己的代码和数据

内核PCB数据结构对象是描述你这个进程的的所有的属性值

所以操作系统要做管理的时候,不需要对我们自己做出管理,只需要对我们这个内核PCB数据结构对象做出管理即可

这个PCB对象里面是有相关的指针信息的,所以可以通过这个PCB对象直接找到我们的

上面这个过程就是一个进程的描述的过程,即先描述

3.在组织

可是我们操作系统经常要持续很多个进程的。所以这就需要组织起来了,从而达到对我们的进程做出管理

为了能够将这些数据组织起来,所以我们可以在每一个PCB对象中加上一个相应的指针,用来找到下一个PCB对象,即如同链表的结构

image-20231105155647588

所以在操作系统中,对于进程的管理,就变成了对于这个单链表的增删查改了

这个PCB就好比我们每个人的简历一样,在我们找工作的时候,HR都是直接对我们的简历做出管理的。当我们投递简历以后,我们会看到在排队中,这个排队就指的是这个PCB在排队。而不是我们本人在排队

4.具体的Linux系统是如何做的?

1.基本概念

课本概念:程序的一个执行实例,正在执行的程序等
内核观点:担当分配系统资源(CPU时间,内存)的实体

2.描述进程-PCB

进程信息被放在一个叫做进程控制块的数据结构中,可以理解为进程属性的集合。
课本上称之为PCB(process control block),Linux操作系统下的PCB是: task_struct

3.task_struct和PCB的关系

  • task_struct 是PCB具体的一种

  • 在Linux中描述进程的结构体叫做task_struct。

  • task_struct是Linux内核的一种数据结构类型(自定义类型),它会被装载到RAM(内存)里并且包含着进程的信息

4.task_struct内容分类

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。
  • 状态: 任务状态,退出代码,退出信号等。
  • 优先级: 相对于其他进程的优先级。
  • 程序计数器: 程序中即将被执行的下一条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。
  • I/O状态信息: 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。
  • 记账信息: 可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
  • 其他信息

5.linux具体如何做的?

在linux中PCB 就是task_struct 结构体,里面包含进程的所有属性

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

不过要注意的是,有可能这个task_struct既是属于一个双链表,又是属于一个队列的。他是比较复杂的

6.查看进程

我们在前面所演示这个命令就是一个查看进程的命令

ps ajx | head -1 && ps ajx | grep  myprocess

如下所示,我们可以看到两个进程了

前面两个是这个可执行程序由于跑了两份,所以的两份进程。

下面的第三个进程是grep本身的进程,因为它本身也带有myprocess,所以就把它自己的进程过滤出来了。而之前的那些指令的进程早就已经结束了,所以不会显示出来。这里是因为正好grep执行的时候把他自己给过滤出来了

image-20231105165724516

注意看

注意这个ID值,虽然这两个程序是一样的,但是他们的ID是不一样的,虽然将同一个程序执行了两遍,但是它还是两个进程,因为他们创建了两个不同的PCB

image-20231105170443776

除了上面这种方法还有这样一种方法

ls /proc

image-20231105170748841

这个是linux系统中比较重要的,也比较奇怪的一个目录

它在关机的时候数据就全没了,在开机的时候就又会创建这个目录文件

这个其实因为因为操作系统用文件系统的方式把内存当中的文件,包括进程全部可视化出来了

它这上面的数据都是内存级的

我们可以来证明一下

我们先关掉一个进程

image-20231105171607930

当我们再次使用这个

ls /proc

这个指令的时候

image-20231105171711143

对于这些蓝色的数字,我们知道它一定是目录,而对于黑色的我们先不管

而这些蓝色的数字就是当前进程的PID,所以在创建进程的时候,操作系统会创建一个与PID一样名字的文件夹,这个目录里面保存这个进程的大部分属性

我们可以通过这个找到我们这个进程的目录

image-20231105172115374

然后我们可以查看一下这里面的内容

image-20231105172159326

如果我们将我们这个进程之间结束掉,那么我们这里就用这种方法找不到这个进程了,这个目录就自动删除了

image-20231105172307246

如果我们重启一个进程,那么就又出来了

image-20231105172419200

不过这个PID也被改变了。

所以说每一个程序结束以后在重新启动,PID就会变化了,所以他是系统当中动态运行的相关信息。

我们可以进入到它里面就可以看到这个东西,这就足以证明这个就是我们的这个可执行程序的进程

image-20231105173035832

对于这个cwd,就是我们当前进程的工作目录(current work dir)

image-20231105173156072

对于这个cwd,这个是很有用的

比如说当我们使用touch命令创建一个test.c文件的时候,它是如何找到当前的目录呢?

就是进程启动的时候已经记录了当前的目录。所以才找到的

就好比我们之前的文件操作的时候,为什么文件可以创建在当前目录呢?

就是因为进程有这个cwd,记录了当前工作目录,所以可以直接拼接上去。这就是当前路径

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

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

相关文章

python获取电脑所连接的wifi密码

电脑连接wifi后,很难直观地看到当前连接wifi的密码,需要借助命令行公管局才可以查看到相关信息。 CMD命令 查看所有已保存的wifi配置信息 netsh wlan show profiles查看某一个wifi的详细信息,需要输入wifi名称来查询 netsh wlan show pro…

小户型工业风,陌生上开花知书香。福州中宅装饰,福州装修

漫步陌上 只因陌上花开 花是自然的那种 朴素而恬淡,不落尘俗。—徐志摩 小户型工业风格 满足业主需求 筑造书香押韵家 从动线、色彩、选材、定制等各个环节 与业主一起畅谈家的构造 形成别“居”一格的温暖品质家 以书做墙 告别电视墙 这是一个实用性很强的…

鲜花展示预约小程序的内容有有哪些

鲜花店市场规模非常高,一方面是鲜花的用途广泛且需求量增加,另一方面则是入行门槛低,很多城市一条街就有可能汇聚了多家门店,尤其是节假日,对客流量高的门店则更加考验,如花束选购预约、信息展示及客户咨询…

D-Link管理系统默认账号密码

默认口令为 admin:admin 登陆成功 文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。 免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章…

【Mybatis小白从0到90%精讲】11:Mybatis批量插入 batchInsert

文章目录 前言foreach批量插入前言 在实际开发中,我们经常需要批量插入大量数据到数据库中,而MyBatis也提供了批量插入的支持,可以大大提高插入效率。 今天要分享的是 工作中常用的在Mapper中使用foreach标签批量插入数据的方式,比在Java代码中循环调用Mapper的单条插入性…

【动手学深度学习】课程笔记 05-07 线性代数、矩阵计算和自动求导

05 线性代数 1. 基础知识补充 向量相关 矩阵相关 简单来说,范数是用来衡量矩阵(张量)大小的值,范数的值有不同的规定。 2. 代码实现 仅记录一些我比较陌生的知识。 张量的克隆 A torch.arange(20, dtypetorch.float32).resh…

【JAVA学习笔记】62 - 坦克大战1.2,我方发射子弹(可存在多个)

在坦克大战游戏(1.1版)基础上添加如下功能:当玩家按一下j键,就发射颗子弹。 个人思路,考虑创建bullet类,因为将来我们的坦克可以射出乱七八糟的子弹。定义大小,颜色,方向,速度,改变子弹位置应当…

Putty连接服务器后弹出Network error: Software caused connection abort

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

逆向学习记录(3)工具介绍jadx、gda和jeb

1、jadx 下载地址如下,目前最新版本为v1.4.7,改成想要下载的版本号就能下载对应的版本。 https://github.com/skylot/jadx/releases/tag/v1.4.7 下载后解压,进入对应路径的bin文件夹内,运行jadx-gui.bat。 2、gda 下载地址和gi…

1、Kubernetes简介

一、k8s 集群部署 1、k8s 快速入门 1)、简介 Kubernetes 简称 k8s。是用于自动部署,扩展和管理容器化应用程序的开源系统。 中文官网:https://kubernetes.io/zh/ 中文社区:https://www.kubernetes.org.cn/ 官方文档:ht…

MATLAB_双馈风力发电机-900V直流混合储能并网系统MATLAB仿真

仿真平台为:matlab2016b 双馈感应风机模块、采用真实风速数据。混合储能模块、逆变器模块、转子过电流保护模块、整流器控制模块、逆变器控制模块等模块。 下图分别为母线直流电压以及有功无功输出: 混合储能系统——蓄电池以及超级电容的SOC为&#x…

黑猫带你学NandFlash第3篇:NAND寻址(行列地址和block/page/LUN之间的关系)

本文依据不同型号NandFlash spec及个人工作经验整理而成,如有错误请留言。 文章为付费内容,已加入原创侵权保护,禁止私自转载及抄袭。 文章所在专栏:《黑猫带你学:NandFlash详解》 本文大约2000字,主要讲解:nand flash如何物理寻址、多plane又是如何寻址、相关计算公式等…

Java 中文字符串输出乱码

Java 中文字符串输出乱码 1、IDE和系统控制台编码格式2、设置标准输出编码 1、IDE和系统控制台编码格式 Java 中文字符串输出乱码 问题是由于代码格式和输出控制台的编码格式不同造成的。 一般代码文件都是推荐使用UTF-8格式(默认),此时在中文…

AI 绘画 | Stable Diffusion 图生图

图生图简介 Stable Diffusion 不仅可以文生图,还可以图生图。文生图就是完全用提示词文本去生成我们想要图片,但是很多时候会有词不达意的感觉。就像我们房子装修一样,我们只是通过文字描述很难表达出准确的想要的装修效果,如果能…

算法设计与分析第二章作业

1. 描述最大字段和的分治算法 题目 思路 判断最大子段和,可以用分治的思想,每次将序列一分为二,选择两个序列的最大子段和。 但是这里还有一种可能,就是子段可以横跨两个子序列,所以我们的最大子段和就是&#xff1…

统计学习方法 条件随机场

文章目录 统计学习方法 条件随机场随机场马尔可夫随机场定义因子分解 条件随机场定义参数化形式简化形式矩阵形式 概率预测问题前向-后向算法概率的计算期望值的计算 学习问题改进的迭代尺度法拟牛顿法 解码问题 统计学习方法 条件随机场 学习李航的《统计学习方法》时&#x…

4 函数的升级-下

重载(overload) 同一个标识符在不同的上下文有不同的意义 如汉语中“洗”和不同的字搭配后,有不同的含义,play 和不同的单词搭配后有不同的含义。 函数重载:用同一个函数名定义不同的函数,通过不同的参数搭…

SpringBoot整合RabbitMQ学习笔记

SpringBoot整合RabbitMQ学习笔记 以下三种类型的消息,生产者和消费者需各自启动一个服务,模拟生产者服务发送消息,消费者服务监听消息,分布式开发。 一 Fanout类型信息 . RabbitMQ创建交换机和队列 在RabbitMQ控制台,新…

飞书开发学习笔记(三)-利用python开发调试云文档和电子表格

飞书开发学习笔记(三)-利用python开发调试云文档和电子表格 一.建立Python飞书开发环境 首先还是进入开放平台下的API调试台 飞书开放平台:https://open.feishu.cn/app?langzh-CN 以获取"我的空间"下的文件清单为例,通过获取飞书API调试台提…

展开一个结构加法等式

4a6 4a8 - - - - - 1 - 1 - - - 1 - 1 - - 1 - - 1 - - 1 - - 1 - - - - 在5-1的方向上具体展开4a64a8 25 19 19 19 19 19 19 19 25 19 19 19 19 19 19 19 1 10 10 10 10 10 10 10 1 10 10 10 10 10 10 10 …