[Linux进程(一)] 什么是进程?PCB的底层是什么?以及进程标识符pid与ppid

在这里插入图片描述

1、前言

大家经常都在讲进程,而它到底是什么呢?
这里给大家先简单的介绍一下:

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

2、描述进程 — PCB(os怎么管理进程呢)

在操作系统中我们说到,os管理的本质并不是对事物本体的管理,而是对数据的管理。
这里虽然我们并不知道进程是什么,但是按照上面的理解,我们对进程的管理,也是对进程的数据进行管理,这里就用到那六个字“先描述,再组织”。我们来画图理解一下:
在这里插入图片描述
操作系统可能会同时管理非常多的“进程”,因此在管理的时候,管理这些进程的数据即可,将这些进程共有的属性提取出来,用结构体将其存起来,再使用链表将其链接起来,这样就能有效的管理进程,这样的机制就叫做“先描述,再组织”。
这个进程属性的集合就叫做PCB,也叫做进程控制块。
PCB是一个统称,在Linux中,PCB叫做 task_struct。
最终,我们操作系统对PCB的管理就被建模成了对链表的增删查改。
我们得出:进程 = 可执行程序 + 内核数据结构

3、查看进程

3.1 方法一

在Linux下我们可以使用下面的这个命令来查看进程:

ps ajx

在这里插入图片描述
这是所有的进程,如果我们只是对其中一个进程查看呢?我们看下面的:
我们先写一段C语言程序,编译为可执行程序并执行,然后使用该命令来查看一下进程:

#include <stdio.h>
#include <unistd.h>
 
int main()
{
   
   
    while(1)
    {
   
   
        printf("我是一个进程\n");
        sleep(1);
    }
 
    return 0;
}

在这里插入图片描述
命令:

ps ajx | grep mycode

这里用到我们以前学到的 管道符与过滤,筛选出我们想找的进程。

3.2 方法二

我们可以通过根目录下的proc目录来查看。proc目录下保存有进程的信息。
在这里插入图片描述

proc目录下的蓝色数字就是每一个进程的pid(Process ID),这就跟我们的身份证号一样,一人只有一个,每个进程都只有这么一个标识符。
我们再次以刚才那段C语言为例,来查看进程:

<think>我们首先需要理解用户的问题:用户想了解进程实体的组成及其各部分的作用,特别是进程控制块(PCB)的作用和内容。根据引用[1][2][3]中的信息,进程控制块(PCB)是进程实体的核心部分,是操作系统中用来描述和控制进程运行的数据结构。进程实体(也称为进程映像)通常由以下几部分组成:1.进程控制块(PCB)2.程序段3.数据段下面我们将详细解释每个部分的作用:1.**进程控制块(PCB)**:-**作用**:PCB进程存在的唯标识,操作系统通过PCB来管理和控制进程。它保存了进程的所有重要信息,包括进程的状态、资源使用情况、其他进程的关系等。当进程被创建时,操作系统为其分配PCB;当进程结束时,PCB被回收。-**内容**:根据引用[1][2][3][4],PCB包含以下信息:-**进程标识符PID)**:唯标识进程。-**进程状态**:如就绪、运行、阻塞等。-**程序计数器(PC)**:指向进程条要执行的指令地址。-**CPU寄存器**:保存进程运行时的寄存器值,用于上下文切换。-**CPU调度信息**:包括进程优先级、调度队列指针等。-**内存管理信息**:如基地址、界限寄存器、页表或段表等。-**记账信息**:如CPU使用时间、时间限制等。-**I/O状态信息**:分配给进程的I/O设备列表,打开的文件列表等。2.**程序段**:-**作用**:程序段是进程执行的代码,即程序的指令部分。它是只读的,可以被多个进程共享(例如,多个进程运行同个程序)。-**内容**:包含可执行代码(机器指令)。3.**数据段**:-**作用**:数据段存储进程运行时的数据,包括全局变量、静态变量等。数据段通常是可读写的,每个进程有自己独立的数据段(除非使用共享内存)。-**内容**:包括初始化数据(如初始化的全局变量)、未初始化数据(BSS段)、堆(动态分配的内存)和栈(局部变量、函数调用的返回地址等)。总结:-**进程实体=PCB+程序段+数据段**-PCB是操作系统中最重要的记录型数据结构,是进程管理和控制的核心。状态转换图(三态模型)可以参考之前的回答。现在,根据用户的问题,我们重点回答进程实体的组成和各部分作用,以及PCB的作用和内容。引用说明:-关于PCB的作用和内容,参考引用[1][2][3][4]。-关于进程实体的组成,引用[2]提到“进程实体的部分”,即PCB进程实体的部分,另外两部分(程序段和数据段)是进程运行所必需的。最后,生成相关问题。</think>### 进程实体组成及各部分作用详解 #### 进程实体的核心组成 进程实体是进程在内存中的完整表示,由三个关键部分组成: 1. **进程控制块(PCB)** - **作用**:操作系统的核心管理结构,是**进程存在的唯标识**[^2][^3] - **功能**:记录进程状态、资源分配、调度信息等元数据,实现进程的创建、切换和撤销[^1][^3] 2. **程序段(Code Segment)** - **作用**:存储进程的可执行指令集[^4] - **特性**:只读属性,允许多个进程共享同程序代码(如多个用户运行`ls`命令)[^4] 3. **数据段(Data Segment)** - **作用**:存储进程运行时的数据 - **包含**: - **堆(Heap)**:动态分配的内存(如`malloc()`申请的空间) - **栈(Stack)**:函数调用栈、局部变量 - **全局变量区**:静态分配的变量[^4] ```mermaid graph LR A[进程实体] --> B(PCB) A --> C(程序段) A --> D(数据段) D --> D1[堆] D --> D2[栈] D --> D3[全局变量] ``` #### 二、进程控制块(PCB)的详细内容 PCB 是操作系统管理进程的核心数据结构,包含以下关键字段: | 信息类别 | 具体内容 | 作用 | |-----------------|--------------------------------------------------------------------------|----------------------------------------------------------------------| | **标识信息** | 进程ID(PID)、父进程ID(PPID)、用户ID(UID) | 唯标识进程,实现进程间关系管理[^1][^3] | | **状态信息** | 进程状态(就绪/运行/阻塞)、退出码 | 决定进程调度资格和资源分配策略[^2][^3] | | **调度信息** | 程序计数器(PC)、CPU寄存器值、进程优先级 | 实现上下文切换,保证中断后恢复执行[^1][^4] | | **内存管理** | 页表指针、内存基址/限界寄存器、共享内存描述符 | 管理进程地址空间,隔离不同进程内存[^4] | | **资源信息** | 打开文件列表、I/O设备分配表、信号量持有情况 | 跟踪资源使用,防止资源泄漏[^1][^3] | | **记账信息** | CPU使用时间、内核/用户态时间、时间戳 | 性能监控和调度优化[^2] | #### 三、PCB的核心作用 1. **进程生命周期管理** - 创建时分配PCB,撤销时回收PCB[^3] - 状态切换时更新PCB字段(如运行→阻塞时保存寄存器值)[^1] 2. **资源隔离保护** - 通过内存描述符实现进程地址空间隔离 - 文件描述符表防止未授权访问[^4] 3. **调度决策支持** - 优先级字段决定调度顺序 - 时间片计数器实现公平调度[^1][^3] 4. **进程间通信(IPC)** - 记录信号量、消息队列等IPC资源 - 维护进程间父子关系[^3] > **关键特性**:PCB常驻内核内存,用户进程无法直接访问,通过系统调用间接操作[^2][^4]。
评论 50
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白在努力jy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值