【Linux】进程的初步认识

进程的初步认识

  • 基本概念
    • 描述进程
      • task_struct-PCB的一种
      • task_stuct内容分类
  • 查看进程
  • 通过系统调用获取进程标识符

基本概念

  要了解进程,首先我们要知道两点

  1. 我们可以同时启动多个程序,也就意味着我们可以将多个.exe文件加载到内存
  2. 操作系统如何去管理这些进程?操作系统实际上是不认识这些可执行程序的,它能控制进程实际上是遵循了“先组织,后描述”的设计理念(即先将这些可执行程序的基本属性,如名称、状态、调用接口等定义成一个结构体,然后通过链表或者其他数据结构对其进行管理)
    大致可以将该结构体理解成以下形式
struct xxx
{//状态//优先级//内存指针字段(为了运行这个程序,应该去哪里找对应程序的代码)//标识符//......(包含所有进程几乎所有的属性字段)//struct xxx*next;
};

描述进程

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

task_struct-PCB的一种

  • 在Linux中描述进程的结构体就叫做task_struct
  • task_struct是Linux内核的一种数据结构,它会被装载到PAM(内存)里并且包含着进程的信息

  那么什么是进程呢?进程 = 内核pcb对象(内核数据结构) + 可执行程序
  在了解以上知识后,我们就不难理解:假设可执行程序的大小为1M,加载到内存时,实际上操作系统为了在内存中为了管理这个进程,实际开辟的空间是要大于1M,多出来的空间就为结构体对象pcb。
  一个可执行程序加载到内存中还不够,系统还会建立对应的pcb对象,并将这些对象放到一个整个系统层面的链表当中,系统拿到pcb的链表,对进程的管理就变成了对整个pcb链表的管理,未来所有对进程的管理工作就只和进程的PCB有关而与可执行程序无关
  另外,可以将PCB对象放到放入到任何数据结构中,比如:当一个可执行程序需要被CPU进行调用时,操作系统就会将PCB对象放到CPU的运行队列中等待CPU进行调用。所以,我们又可以得出一个结论:进程排队本质上是让PCB对象排队

task_stuct内容分类

  • 标示符: 描述本进程的唯一标示符,用来区别其他进程。
  • 状态: 任务状态,退出代码,退出信号等。
  • 优先级: 相对于其他进程的优先级。
  • 程序计数器: 程序中即将被执行的下一条指令的地址。
  • 内存指针: 包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针
  • 上下文数据: 进程执行时处理器的寄存器中的数据[休学例子,要加图CPU,寄存器]。 I/O状态信息:
  • 包括显示的I/O请求,分配给进程的I/O设备和被进程使用的文件列表。(比如当执行到C语言的printf函数的时候,操作系统就需要暂时将屏幕的使用权给该程序,当执行完之后不需要用到屏幕,就将屏幕的使用权归还给操作系统)
  • 记账信息:可能包括处理器时间总和,使用的时钟数总和,时间限制,记账号等。
  • 其他信息

  这里简单介绍一下程序计数器,CPU中有一个寄存器叫做PC指针或者叫做eip寄存器,这里面存的是当前正在被执行指令的下一行指令的地址,通过对程序计数器的初步了解,我们可以知道以下两点

  1. 编程语言语法中的判断、循环和函数跳转的本质其实就是修改PC指针
  2. PC指针指向哪个进程代码就表示哪个程序正在被调度执行

查看进程

查看进程信息可以使用ps axj指令
在这里插入图片描述
当我们运行一个程序,比如编译好的代码
在这里插入图片描述
然后我们要去查看可执行程序为mybin的进程
在这里插入图片描述
在这里插入图片描述
  几乎所有的指令,就是程序,运行起来也要编程进程

通过系统调用获取进程标识符

  在Linux中,普通进程都会有它的父进程

  • 进程id(PID)
  • 父进程(PPID)

  在Linux中获取进程id和父进程id的方式就是getpid和getppid两个函数,为了了解这两个函数,现在man手册中查一下它们的信息
在这里插入图片描述

现在再将之前的代码做一些修改
在这里插入图片描述
发现每次的子进程id都会改变,但是父进程id不变
在这里插入图片描述

通过父进程id找到这个进程,发现这个进程是bash,所以我们在命令行当中启动的程序最终转化成进程都是bash的子进程,而bash就是命令行解释器

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

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

相关文章

【c++】析构函数

1.特征 析构函数是特殊的成员函数,其特征如下: 1.析构函数名是在类名前加上字符~。 2.无参数无返回值类型。 3.一个类只能有一个析构函数。若未显式定义,系统会自动生成默认的析构函数。注意:析构函数不能重载。 4.对象生命周…

Mybatis——Javaweb进阶学习(五)

目录 一、Mybatis快速入门1.创建Springboot工程,数据库表user,实体类User2.引入Mybaties相关依赖3.编写Sql语句 二、lombok1.基本概念2.使用方法 三、基础操作1.环境准备a.数据库准备b.创建员工实体类Emp数据类型对比命名对比 c.Mapper接口创建 2.删除操…

c语言操作符(下)

目录 ​编辑 逗号表达式 下标访问[] 函数调⽤() sizeof 结构成员访问操作符 结构体 结构体声明 直接访问 .成员名 间接访问 结构体指针->成员名 逗号表达式 exp1, exp2, exp3, …expN 运算规则:从左向右依次执⾏。整个表达式的结果是最后⼀个表达…

SQL的1999语法

目录 交叉连接 实现交叉连接 自然连接 实现自然连接(实际上就是内连接) ON和USING 使用自然连接时要求两张表的字段名称相同,但是如果不相同或者两张表中有两组字段是重名,这时就要利用 ON 子句指定关联条件,利用 USING 子句…

qml之Control类型布局讲解,padding属性和Inset属性细讲

1、Control布局图 2、如何理解? *padding和*Inset参数如何理解呢? //main.qml import QtQuick 2.0 import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import QtQuick.Controls 1.4 import QtQml 2.12ApplicationWindow {id: windowvisible: …

【开源】SpringBoot框架开发独居老人物资配送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询社区4.2 新增物资4.3 查询物资4.4 查询物资配送4.5 新增物资配送 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的独居老人物资配送系统,包含了社区档案、…

【MySQL】:DQL查询

🎥 屿小夏 : 个人主页 🔥个人专栏 : MySQL从入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. DQL1.1 基本语法1.2 基础查询1.3 条件查询1.3 聚合函数 🌤️ 全篇…

HiveSQL——统计当前时间段的有客人在住的房间数量

注:参考文章: HiveSQL一天一个小技巧:如何统计当前时间点状态情况【辅助变量累计变换思路】_sql查询统计某状态出现的次数及累计时间-CSDN博客文章浏览阅读2k次,点赞6次,收藏8次。本文总结了一种当前时间点状态统计的…

Linux第56步_根文件系统第3步_将busybox构建的根文件系统烧录到EMMC

1、第1次将“rootfs”打包 1)、打开第1个终端,准备在“mnt”目录下创建挂载目录“rootfs”; 输入“ls回车” 输入“cd /mnt回车” 输入“ls回车”,查看“mnt”目录下的文件和文件夹 输入“sudo mkdir rootfs回车”,在“mnt”…

阿里云/腾讯云幻兽帕鲁服务器据点最大帕鲁工作数量最多15个,改成20不生效?

例如,在阿里云的计算巢管理中,找到你的这台部署幻兽帕鲁的服务器实例,选择右上角的“修改游戏配置” 然后选择“基地内工作帕鲁的最大数量”改成20 有人说更改上面的数字,根本不起作用。原因可能如下: 参考资料&#…

LabVIEW焊缝缺陷超声检测与识别

LabVIEW焊缝缺陷超声检测与识别 介绍基于LabVIEW的焊缝缺陷超声检测与识别系统。该系统利用LabVIEW软件和数据采集卡的强大功能,实现了焊缝缺陷的在线自动检测,具有通用性、模块化、功能化和网络化的特点,显著提高了检测的效率和准确性。 随…

双输入宽带混合 Doherty-Outphasing功率放大器设计(2021.02 MTT)-从理论到ADS版图

基于双输入的宽带混合 Doherty-Outphasing功率放大器设计(2021.02 MTT)-从理论到ADS版图 原文: Wideband Two-Way Hybrid Doherty Outphasing Power Amplifier 发表于FEBRUARY 2021,在微波顶刊IEEE T MTT上面,使用的GAN CGH40010F 全部工程下载&#…