【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/474715.html

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

相关文章

【多线程】线程的概念与创建

多线程 1. 认识线程(Thread)线程是什么为啥要有线程进程和线程的区别Java 的线程 和 操作系统线程 的关系 2.第⼀个多线程程序3.创建线程⽅法1 继承 Thread 类⽅法2 实现 Runnable 接⼝方法3 匿名内部类创建 Thread ⼦类对象方法4 匿名内部类创建 Runnab…

产品经理学习-产品运营《流程管理》

如何进行流程管理 信息可视化 甘特图-流程管理思维导图-方案讨论原型图-活动文档 明确责任制 分工明确,关键环境有主负责人通过时间倒推督促管理 沟通技巧 明确共同利益以结果激励做好信息同步 如何进行监控活动效果 监控活动的效果是要监控数据 活动每个环境的…

桌面文件删除了怎么恢复?恢复文件,3个小秘诀!

在日常使用电脑的过程中,很多用户会习惯性的将文件保存在电脑桌面上。因此不可避免会出现桌面文件丢失的情况。这或许会对我们的工作和学习造成影响。 桌面文件删除了怎么恢复?如果你还没有掌握正确的恢复方法。记得继续往下看,下文有实用的…

linux 09 软件安装,YUM

下载软件时候,windows会从网上下载exe文件。 windows中的exe文件linux中的rpm文件 简介部分: 其中的认识RPM包: 管理RPM包: 其中的YUM: YUM(软件包管理工具) 01.YUM工具简介 02.使用YUM 第…

报表生成器FastReport .Net用户指南:报表中的总计

FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案,使用FastReport .NET可以创建独立于应用程序的.NET报表,同时FastReport .Net支持中文、英语等14种语言,可以让你的产品保证真正的国际性。 FastReport.NET官方版…

Netty Review - NIO空轮询及Netty的解决方案源码分析

文章目录 Pre问题说明NIO CodeNetty是如何解决的?源码分析入口源码分析selectCntselectRebuildSelector Pre Netty Review - ServerBootstrap源码解析 Netty Review - NioServerSocketChannel源码分析 Netty Review - 服务端channel注册流程源码解析 问题说明 N…

111期_C++_2024年1月份作业博客_选择题错题总结

一、野指针问题:在定义的时候没有初始化,就不能能用scanf 或 printf 二、一个变量出现在表达式的两边作为两个不同的操作数, 并且其中一个操作数带有,此时表达式出现歧义 三、两端出栈问题: 错因:未理解题…

OpenGL学习——15.投光物_聚光

前情提要:本文代码源自Github上的学习文档“LearnOpenGL”,我仅在源码的基础上加上中文注释。本文章不以该学习文档做任何商业盈利活动,一切著作权归原作者所有,本文仅供学习交流,如有侵权,请联系我删除。L…

数据的力量:构筑现代大型网站之数据库基础与应用

目录 数据库基础知识--前言 大型网站架构特点 DBA数据库管理员 什么是数据? 数据存储 什么是数据库 数据表的概念 为什么需要mysql这样的数据库管理工具?★ DBMS 收费数据库与免费数据库 运维和数据库 开发与运维的不同阶段 数据库类别 数据库具体应用…

自学ESPIDF(一)点个灯

不废话,万物皆从点灯开始。 espidf的examples里有个blink,作为测试再好不过了。 /* Blink ExampleThis example code is in the Public Domain (or CC0 licensed, at your option.)Unless required by applicable law or agreed to in writing, thissof…

PCL库学习及ROS使用

PCL库学习 c_cpp_properties.json {"configurations": [{"name": "Linux","includePath": ["${workspaceFolder}/**","/usr/include","/usr/local/include"],"defines": [],"compiler…

代码随想录Leetcode 738. 单调递增的数字

题目: 代码(首刷自解 2024年2月18日): 爽,无bug一遍过。这题思路是将数字从低位到高位一位一位放入数组中,如果出现高位大于地位的情况则将低位全部重置为9,然后高位-1,最后反向遍历相加即可 c…