当前位置: 首页 > news >正文

进程属性深入了解(上篇):核心标识、状态与内存属性

进程是操作系统进行资源分配和独立调度的基本单位,其所有运行状态、资源信息都被内核记录在专属的数据结构中。上篇我们从标识身份、生命周期状态、内存空间三个核心维度,结合图示拆解进程的基础属性。

一、进程的 “身份档案”:标识类属性

操作系统通过一组唯一的标识来管理每一个进程,这些标识全部存储在 ** 进程控制块(PCB,Process Control Block)** 中。PCB 是进程存在的唯一标志,相当于进程的 “档案袋”。

1. 进程控制块(PCB):所有属性的载体

PCB 是操作系统内核维护的结构体,每创建一个进程就会生成对应的 PCB,进程销毁时 PCB 也会被回收。它集中保存了进程运行所需的全部信息,大到内存权限,小到寄存器快照,都在 PCB 中有对应字段。

经典的 PCB 结构分为三大类信息:进程标识、处理器状态、进程控制信息,具体字段如下:

<div align="center"> <img src="..." ref="ref_4_0" alt="经典PCB结构示意图"> <p>图1:经典PCB结构字段示意图</p> </div>

以 Linux 系统为例,PCB 的具体实现是task_struct结构体,里面包含了上百个字段,完整描述了一个进程的所有属性。

2. 核心标识属性:PID、PPID、UID/GID

最基础的进程标识有四个,对应进程的 “身份信息”:

  • PID(进程 ID):系统全局唯一的非负整数,是进程最核心的标识。比如 Linux 中 PID=1 的进程是systemd,是所有用户进程的 “始祖”。
  • PPID(父进程 ID):创建当前进程的进程的 PID。进程不能凭空产生,都是由父进程通过fork创建,因此每个进程都有父进程,形成树形的进程关系。
  • UID/GID(用户 ID / 组 ID):标识进程属于哪个用户、哪个用户组,决定了进程的文件访问权限。普通用户创建的进程默认继承当前用户的 UID。

举例理解: 在 Linux 终端执行ps -l,可以看到当前 shell 进程的 PID、PPID、UID 等信息:

plaintext

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 0 S 1000 2345 2301 0 80 0 - 5623 wait pts/0 00:00:00 bash

这里 UID=1000 是当前普通用户,PID=2345 是 bash 进程自身,PPID=2301 是启动它的终端进程。

二、进程的 “生命周期”:状态属性

进程从创建到销毁的整个生命周期中,会因为资源等待、调度切换等原因,在不同状态之间动态切换。状态属性描述了进程当前 “正在做什么”、“能不能运行”。

1. 经典五态模型

操作系统理论中最基础的是三态模型(就绪、运行、阻塞),扩展后形成五态模型,完整覆盖进程的全生命周期:

<div align="center"> <img src="..." ref="ref_8_0" alt="进程五态转换图"> <p>图2:进程五态模型与转换逻辑</p> </div>

五个状态的含义:

  1. 新建态:进程正在被创建,PCB 已生成但资源未分配完成,还没进入就绪队列。
  2. 就绪态:进程已经具备所有运行条件,只等 CPU 调度。系统中所有就绪进程会排成 “就绪队列”。
  3. 运行态:进程正在 CPU 上执行指令。单核 CPU 同一时刻只有一个进程处于运行态。
  4. 阻塞态(等待态):进程因为等待某个事件(比如读磁盘、等网络数据)而暂停运行,即使 CPU 空闲也无法执行。
  5. 终止态:进程运行结束或异常退出,等待系统回收资源。

2. Linux 系统的实际进程状态

在 Linux 中,进程状态在五态基础上做了更细的划分,用单个字母标识:

  • R(Running/Runnable):运行或就绪态,对应理论中的运行 + 就绪,都在 CPU 的运行队列里。
  • S(Sleeping):可中断睡眠,对应阻塞态,等待事件时可以被信号唤醒。比如执行sleep 10的进程就是 S 态。
  • D(Disk Sleep):不可中断睡眠,一般是在等待硬件 IO 完成,不能被信号打断。比如进程正在读写磁盘时可能进入 D 态。
  • T(Stopped):停止态,进程被暂停(比如调试时按下 Ctrl+Z),收到恢复信号才会继续运行。
  • Z(Zombie):僵尸态,进程已经结束,但父进程还没调用wait回收它的 PCB 资源。

举例理解: 执行ps aux | grep sleep,可以看到睡眠中的进程状态为 S:

plaintext

user 3456 0.0 0.0 4356 720 pts/0 S+ 10:00 0:00 sleep 100

三、进程的 “内存地盘”:虚拟地址空间属性

每个进程都拥有独立的虚拟地址空间,这是操作系统给进程的 “专属内存视野”。进程以为自己独占整个内存,实际上内核通过页表把虚拟地址映射到真实的物理内存。

1. 虚拟内存的分段布局

一个典型进程的虚拟地址空间从低地址到高地址,被划分为多个功能明确的段:

<div align="center"> <img src="..." ref="ref_17_0" alt="进程虚拟内存布局图"> <p>图3:Linux进程虚拟地址空间分段布局</p> </div>

各段的作用:

  1. 代码段(Text 段):存储程序的机器指令,只读不可修改,防止程序被意外篡改。
  2. 数据段(Data 段):存储已初始化的全局变量、静态变量,可读可写。
  3. BSS 段:存储未初始化的全局变量、静态变量,程序启动时会被自动初始化为 0。
  4. 堆(Heap):动态内存区域,由程序员手动申请和释放(比如 C 语言的malloc/free),地址从低向高增长。
  5. 栈(Stack):存储函数调用的局部变量、参数、返回地址,由系统自动分配回收,地址从高向低增长。
  6. 内核空间:高地址的一部分是内核专属区域,所有进程共享,用于执行系统调用、内核代码。

2. 直观举例:变量存在哪里?

看一段简单的 C 代码,不同的变量对应不同的内存段:

c

运行

int a = 10; // 已初始化全局变量 → Data段 int b; // 未初始化全局变量 → BSS段 void main() { int c = 20; // 局部变量 → 栈 int *p = malloc(100); // malloc申请的内存 → 堆 static int d = 30; // 静态局部变量 → Data段 }

通过/proc/[PID]/maps文件,可以直接查看一个进程真实的内存分段地址,验证上述布局。


下篇我们将继续讲解进程的调度属性、IO 资源属性、权限与家族属性,进一步深入理解进程的运行机制。

谢谢
http://www.cnnetsun.cn/news/2930619.html

相关文章:

  • 如何实现单机多人游戏:Nucleus Co-Op 终极分屏工具完整指南
  • 别再硬啃英文了!Vue3 + bpmn.js 7.3.1 保姆级汉化实战,附完整翻译文件
  • 从一次DataWorks任务失败排查说起:深度解析ODPS引擎的报错日志与调试技巧
  • 魔兽争霸3性能优化实战:5分钟告别卡顿,解锁高帧率体验
  • UVa 499 What‘s The Frequency Kenneth
  • why does she think
  • LabelImg闪退别重装!Python 3.10下这个canvas.py文件bug的精准修复指南
  • 3PEAK思瑞浦 TPA1286U-VS1R MSOP8 精密运放
  • 2026 Excel转TXT详细教程:手把手教你3种方法步骤
  • 2026免费JPG转换软件推荐:电脑手机在线保姆级教程
  • 交通事故识别 车辆碰撞检测 碰撞报警识别 智慧城市治理
  • 基于YOLO系列草莓识别 深度学习的智慧农业草莓成熟度目标检测系统
  • Anthropic最强模型Claude Fable 5上线4天被美国政府强制下线,背后风波耐人寻味
  • 深入芯片内部:SkyEye仿真FT-M6678 DSP时,如何观察ReWorks任务调度与内存状态?
  • NLP动态知识切片系统:面向研究者的可编程领域感知基础设施
  • 假新闻检测实战:模型选型与超参数优化的工程化路径
  • 别再为vCenter HA网络配置头疼了!保姆级教程:从零配置管理网卡和HA私网VLAN
  • Hitboxer:终极游戏按键冲突优化工具,彻底解决SOCD问题
  • 开源罗技鼠标宏:3步掌握PUBG精准压枪技巧
  • 别小看这颗2.2nF电容!手把手教你排查MPU6050‘有ID无数据’的经典硬件故障
  • RK3588 Qt开发避坑实录:如何正确引入MPP、FFmpeg等SDK库到Qt5.12.10项目(附完整.pri配置)
  • 3步完成微信数据库本地解密:免费恢复聊天记录的完整指南
  • Spyder里报错‘No module named gurobipy’?别慌,手把手教你搞定Python环境与Gurobi的配置
  • InfluxDB Studio:Windows平台时间序列数据库图形化管理工具完整教程
  • Vivado里信号总被优化掉?试试DONT_TOUCH属性的正确打开方式(附代码对比)
  • 营业执照丢失怎么登报声明?营业执照丢失登报挂失的流程是什么?
  • N32G45X调试接口配置避坑指南:SWD模式、JTAG模式与IO释放的三种实战场景
  • 计算机毕业设计之网页小说阅读系统
  • 老师们试试录音AI,2026年讲座网课都能轻松整理
  • 专业音频解密解决方案:QMCDecode完全使用指南