首页 > 系统相关 >【Linux进程篇2】学习进程大框架,学习进程前期必备。

【Linux进程篇2】学习进程大框架,学习进程前期必备。

时间:2024-11-11 14:44:49浏览次数:3  
标签:ps 操作系统 学习 PCB Linux 进程 struct

--------------------------------------------------------------------------------------------------------------------------------

每日鸡汤:心有多大,舞台就有多大,只有想不到的,没有做不到的。

--------------------------------------------------------------------------------------------------------------------------------

目录

前言

一:进程概念

二:操作系统管理进程

2.1:描述进程PCB

2.2:组织系统内进程

三:Linux系统管理进程

3.1:task_struct(PCB)

3.2:Linux中的组织进程

3.3:Linux系统查看进程指令

3.3.1:ps ajx 和ls /proc

3.3.1.1:ps ajx:

3.3.1.2:ls /proc:

3.3.2:cwd说明


前言

通过前期冯诺依曼的概述,了解计算机所有的软硬件资源都可以通过“先描述,再组织”来对各种资源进行操作那么操作系统是怎么进行进程管理的呢?当然也是先把进程描述起来(进程结构体),再把进程组织起来(数据结构[链表、二叉树...])。

一:进程概念

一个已经加载到内存中的程序,叫做进程,也叫做任务。

 使用 ps ajx 命令查看Linux中所有的任务/进程。

 在文件没有运行时,该文件都被存放在磁盘中。例如操作系统,在电脑没有开机时,操作系统存储在磁盘中,开机后,就将操作系统从外设搬到内存中。

即:

可执行程序还没有运行时,这些文件都在磁盘中。当运行myprocess可执行文件(./myprocess)时,就将该可执行文件加载到了内存中,形成进程。

 执行该进程,死循环打印Hello Linux

 查看该进程:ps ajx | grep myprocess

显示首行查看该进程:ps ajx | head -1 && ps ajx | grep myprocess 

并且,一个操作系统,不仅仅只能运行一个程序,可以同时进行多个进程(多道操作系统),所以操作系统必须得将进程管理起来。那么操作系统是怎样将进程管理起来的呢?

二:操作系统管理进程

2.1:描述进程PCB

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

就像一个人是怎样辨别认识一个事情或者对象的?答:都是通过属性认识的。当属性足够多,这一堆属性的集合,就是目标对象。【这就是面向对象】 

所以,PCB就是进程属性的集合,使用 struct 结构体描述出来。

struct PCB
{
    进程编号
    进程的状态
    优先级
    //...
    struct PCB* next;
    struct PCB* queue;
    struct PCB* XXX;
    //相关的指针信息    //找到自己对应的代码和数据信息
}

 一旦创建进程时,一定要做的核心工作:根据进程的PCB类型,为该进程创建对应的PCB对象。

所以进程包括:1.描述进程的struct结构体(操作系统自动生成的);2.该进程的代码和数据

所谓的进程 = 内核PCB数据结构对象(描述这个进程的所有的属性值) + 你自己的代码和数据(加载到内存中的可执行程序)

“以学生在学校为例:PCB:学生个人基本信息;代码和数据:学生(人)” 。

2.2:组织系统内进程

对进程管理的本质,就是对创建的PCB数据结构对象进行管理

即:系统想调度某一个进程时,其实只要找到该进程的PCB,根据PCB内部的“特定指针”找到对应的代码和数据,将其交给CPU中运行

操作系统内部可能含有多个进程,

所以在操作系统内:

组织:在操作系统中,对进程进行管理,变成了对单链表数据结构的增删改查!即就完成了操作系统对进程的建模。

所以,要让进程进行队列排列,实际上就是对该进程的PCB结构体对象进行排列。

三:Linux系统管理进程

3.1:task_struct(PCB)

Linux操作系统下的PCB是 task_struct。

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

 task_struct 结构体内部的属性非常多。

task_struct内部属性分类:

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

即:

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

所以之后的学习进程就是学习进程PCB的各个属性。

 那么Linux中是如何组织进程的呢?

3.2:Linux中的组织进程

组织进程:Linux内核中,最基本的组织进程task_struct的方式,采用双向链表组织的(主要),还有一些struct PCB* queue(队列)等等

即对进程进行哪种管理工作,取决于将其放入哪种组织的管理队列。

3.3:Linux系统查看进程指令

3.3.1:ps ajx 和ls /proc

在Linux中,`ps ajx` 命令和 `ls /proc` 命令都与进程管理有关,但它们的作用和输出信息的方式有所不同。

3.3.1.1:ps ajx:

主要用途:查看Linux内所有的任务进程,显示当前系统中所有进程的状态。

ps 命令用于显示当前系统中的进程状态。`ajx` 是 `ps` 命令的一组选项,具体含义如下:

  • - `a`:显示所有用户的进程(不仅仅是当前用户)。
  • - `j`:使用作业控制格式显示进程信息。
  • - `x`:显示没有控制终端的进程。

 输出情况:包含每个进程的详细信息,如用户、PID、CPU使用率、内存使用率、虚拟内存大小、常驻内存大小、控制终端、进程状态、启动时间、占用的CPU时间以及启动该进程的命令。输出是格式化的表格,易于阅读和理解。

3.3.1.2:ls /proc:

主要用途:ls /proc 查看系统当中所有的进程,列出 `/proc` 文件系统中的所有条目。(在该目录中,每一目录文件的数字就叫做当前进程的PID)。

输出情况:显示 `/proc` 目录下的所有文件和子目录。每个条目通常对应一个进程或其他系统信息(如内核参数、硬件信息等)。输出是简单的文件列表,不包含详细的进程信息。

进入某个进程,查看相应的信息:ls /proc/1552

3.3.2:cwd说明

cwd(current work dir):当前进程的工作目录

先死循环打印Hello Linux,来显示进程后台。 

 进入该进程,查看相应信息:

发现:cwd -> /home/alin/Linux_2024/2024-10_Linux-study/2024-10-28_Linux-F.neumann
 

即 cwd 表述的是当前路径。 进程在启动时默认出现 cwd,在当前的路径下。

所以,cwd 功能实例:

本来该文件内部是没有test.txt文本文件的.

 当运行该进程时:默认在cwd当前目录下创建该test.txt文件。

标签:ps,操作系统,学习,PCB,Linux,进程,struct
From: https://blog.csdn.net/2302_78684687/article/details/143647557

相关文章

  • 应届小白从0学习CANoe(6)
    第四章4.2measurementsteup窗口的使用measurementsetup也叫测量设置,这个窗口可以用于图形化显示和配置测试数据流, 其中包含了数据源,基本功能模块,附加功能模块,附加功能模块,数据分析窗口和数据保存模块等等。我们在工作中可以在各个组件之间添加连接线和分支线用于分解数......
  • 《深度学习模型》
    一、引言随着人工智能技术的飞速发展,深度学习模型已经成为了当今最具影响力的技术之一。深度学习模型在图像识别、语音处理、自然语言处理等领域取得了巨大的成功,为人们的生活和工作带来了极大的便利。本文将详细介绍深度学习模型的基本概念、常见类型、训练方法以及应用场景......
  • 【Linux】Linux环境基础开发工具使用(下)
    【Linux】Linux环境基础开发工具使用(下)......
  • 网络安全自学入门:(超详细)从入门到精通学习路线&规划,学完即可就业
    很多人上来就说想学习黑客,但是连方向都没搞清楚就开始学习,最终也只是会无疾而终!黑客是一个大的概念,里面包含了许多方向,不同的方向需要学习的内容也不一样。算上从学校开始学习,已经在网安这条路上走了10年了,无论是以前在学校做安全研究,还是毕业后在百度、360从事内核安全产......
  • linux 卸载node 并重装
     1、先卸载npmsudonpmuninstallnpm-g2、卸载nodeyumremovenodejsnpm-y看看是否有残留进入/usr/local/lib删除所有node和node_modules文件夹进入/usr/local/include删除所有node和node_modules文件夹进入/usr/local/bin删除node的可执行文件......
  • Linux安装jdk
    Linux安装jdk下载JDK安装包前往Oracle官网或其他JDK发行版网站,下载适合Linux系统的JDK安装包(可执行命令lscpu,查看Architecture字段确定)。创建安装目录在/usr/local目录下创建用于存放JDK安装包的目录,例如/usr/local/javasudomkdir/usr/local/javacd/usr/local/java上......
  • # 学期(如2024-2025-1) 学号(如:20241402) 《计算机基础与程序设计》第8周学习总结
    学期(如2024-2025-1)学号(如:20241402)《计算机基础与程序设计》第8周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标<写上......
  • 利用 Linux 系统性能调优技巧优化系统性能
    ......
  • 点云学习笔记14——PCL点云文件投影到平面
    #include<iostream>#include<pcl/io/pcd_io.h>#include<pcl/point_types.h>#include<pcl/ModelCoefficients.h>#include<pcl/filters/project_inliers.h>#include<pcl/visualization/pcl_visualizer.h>#include<boost/th......
  • MYSQL事务学习总结
    前言在数据库操作的复杂世界里,事务是保障数据一致性、完整性和可靠性的关键机制。无论是银行系统中的资金转账,还是电商平台的订单处理,事务都在默默地发挥着重要作用。MySQL作为广泛使用的数据库管理系统,其事务处理机制涉及到多个重要的概念和特性。从原子性确保操作的整体性......