【Linux】第十二站:进程

文章目录

    • 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.mzph.cn/news/131639.shtml

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

相关文章

【MySQL】MVCC机制(undo log,read view)

文章目录 前言一. 预备知识二. 模拟MVCC三. Read View四. RC与RR的本质区别结束语 前言 MVCC(多版本并发控制)是一种用来解决读-写冲突的无锁并发控制 MVCC为事务分配单向增长的事务ID,为每个修改保存一个版本,版本与事物ID相关联…

全球首款双模型AI手机METAVERTU2,为用户开发“第二大脑”

在2023年11月1日,英国奢侈手机品牌VERTU在香港举办了一场新品发布会,它推出了一款全新的AI手机称为METAVERTU2,这是全球首款双模型AI手机。此款手机将Web3技术与人工智能相结合,通过AI模型标记数据和AI Agent的方式,将…

如何设置OBS虚拟摄像头给钉钉视频会议使用

环境: OBS Studio 29.1.3 Win10 专业版 钉钉7.1.0 问题描述: 如何设置OBS虚拟摄像头给钉钉视频会议使用 解决方案: 1.打开OBS 底下来源这添加视频采集设备 选择OBS虚拟摄像头 2.源那再建一个图像,随便选一张图片 3.点击虚…

SpringBoot项目打包与运行

1.clean生命周期 说明:为了项目能够正确打包,先清理打包文件。 2.package生命周期 说明:打包后生成以下目录。 2.1问题 说明:springboot_08_ssmp-0.0.1-SNAPSHOT.jar中没有主清单属性。 2.2解决 说明:注释skip&…

Python之Excel数据相关

Excel Microsoft Excel是Microsoft为使用Windows和Apple Macintosh操作系统的电脑编写的一款电子表格软件。直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使Excel成为最流行的个人计算机数据处理软件。在1993年,作为Microsof…

JS异常处理——throw和try、catch以及debugger

让我为大家介绍一下异常处理吧! 异常处理是指预估代码执行过程中可能发生的错误,然后最大程度的避免错误的发生导致整个程序无法继续运行 throw 抛异常 第一种写法 function fun(x, y) {// undefined是false 但取反就是trueif (!x || !y) {// 第一种写…

Linux基本指令

目录 1.ls指令 2.pwd指令 3.cd指令 4.touch指令 5.mkdir指令 6.rmdir指令和rm指令 7.man指令 8.cp指令 9.mv指令 10.cat指令 11.more指令 12.less指令 13.head指令 14.tail指令 15.date指令 16.cal指令 17.find指令 18.grep指令 19.zip/unzip指令 2…

leetcode:387. 字符串中的第一个唯一字符

一、题目 函数原型 int firstUniqChar(char* s) 二、算法 设置一个大小为26的字符数组,位置0 - 25 分别对应字符 a - z 。遍历两次字符串,第一次记录下每个字符出现的次数,第二次检查哪个字符最先遍历到且出现次数为1,返回该字符即…

如何将R128的lspsram频率提高至200M?

一、修改频率方法 首先通过cboot0命令,跳转到boot0的代码中,路径为: ${root_dir}/lichee/brandy-2.0/spl/ 找到lspsram的代码,路径为: ${root_dir}/lichee/brandy-2.0/spl/drivers/psram 修改头文件,将2…

毅速丨3D打印结合拓扑优化让轻量化制造更容易

轻量化可以减少产品的重量,提高产品的性能和效率,同时减少能源消耗和排放。尤其在航空航天、汽车制造造等行业对轻量化追求更高。当前,随着制造技术的发展,拓扑优化结合3D打印为轻量化制造带来的显著的优势正在逐渐凸显。 首先&am…

【黑马程序员】SSM框架——MyBatisPlus

文章目录 前言一、MyBatisPlus 简介1. 入门案例1.1 创建新模块1.2 选择需要的技术集1.3 添加 mp 起步依赖1.4 设置 Jdbc 参数1.5 实体类与表结构1.6 定义数据接口1.7 测试功能 2. MyBatisPlus 概述3. MyBatisPlus 特性 二、标准数据层开发1. 标准数据层 CRUD 功能1.1 Lombok1.2…

Hadoop环境搭建及Demo

参考博客 Windows 10安装Hadoop 3.3.0教程 (kontext.tech) Hadoop入门篇——伪分布模式安装 & WordCount词频统计 | Liu Baoshuai’s Blog Hadoop安装教程 Linux版_linux和hadoop的安装_lnlnldczxy的博客-CSDN博客 hadoop启动出错 The value of property bind.address …

linux 安装 elasticsearch 全教程

一、去 elasticsearch官网找到Linux版本的下载链接 地址https://www.elastic.co/cn/downloads/elasticsearch 二、在linux 中用wget下载 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.10.4-linux-x86_64.tar.gz三、下载成功后解压文件 tar -x…

2023年金融科技建模大赛(初赛)开箱点评-基于四川新网银行数据集

各位同学大家好,我是Toby老师。2023年金融科技建模大赛(初赛)从今年10月14日开始,11月11日结束。 比赛背景 发展数字经济是“十四五”时期的重大战略规划。2023年,中共中央、国务院印发了《数字中国建设整体布局规划》…

POJ-3630电话表(考察字典树)

2023每日刷题&#xff08;二十&#xff09; POJ-3630电话表 题目原地址 输入样例&#xff1a; 2 3 911 97625999 91125426 5 113 12340 123440 12345 98346输出结果&#xff1a; NO YES实现代码 #include<iostream> #include<string> #include<cstring>…

抖音极速版app拉新一手申请渠道 附快手极速版app拉新申请资料

抖音极速版app拉新一手申请渠道 附快手极速版app拉新申请资料 通过“聚量推客”申请&#xff0c;价格更高 抖音极速版app拉新是地推百搭项目&#xff0c;部分团队作为主打项目推广&#xff0c;流程简单只需要新设备即可&#xff0c;如果你能做次留或者7日留存价格还是很可观的…

Vue3:一页多题答案提示及循环radio和checkbox混合使用

一页多题&#xff0c;类型包括单选&#xff08;单选、判断&#xff09;和多选&#xff0c;radio和checkbox混合使用&#xff0c;答案检验数据匹配&#xff0c;正确答案格式化&#xff0c;答案提交数据格式化&#xff0c;数据提交。 效果&#xff1a; 数据获取&#xff1a; 数据…

Zabbix监控联想服务器的配置方法

简介 图片 随着科技的发展&#xff0c;对于数据的敏感和安全大部分取决于对硬件性能、故障预判的监测&#xff0c;由此可见实时监测保障硬件的安全很重要&#xff0c;从而衍生了很多对硬件的监测软件&#xff0c;Zabbix就一个不错的选择。开源 开源 开源&#xff01; zabbix是…

【网络协议】聊聊CND如何进行提升系统读性能

我们知道对于京东这种仓储来说&#xff0c;其实并不是在北京有一个仓储中心&#xff0c;而是针对全国主要的地方&#xff0c;北京、上海、广州、杭州&#xff0c;郑州等地方都有自己的仓储中心&#xff0c;当用户下单后&#xff0c;就会根据最近的仓储进行发货&#xff0c;不仅…

高防IP的原理

高防IP&#xff0c;把域名解析到高防IP上(web事务只要把域名指向高防IP 即可。非web事务&#xff0c;把事务IP换成高防IP即可)一起在高防IP上设置转发规矩;所有公网流量都会走高防IP&#xff0c;通过端口协议转发的方法将用户的拜访通过高防IP转发到源站IP&#xff0c;一起将歹…