news 2026/6/13 19:18:29

进程PCB

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
进程PCB

1. PCB 到底是什么?

从代码角度看,PCB 就是内核空间里定义的一个巨大的C 语言结构体 (Struct)

  • 存放位置:它存在于内核内存区 (Kernel Space),普通用户程序无法直接读写,只有操作系统核心才能访问。

  • 生命周期:进程创建时 (fork) 产生,进程结束时回收。如果进程退出了但 PCB 没回收,就变成了“僵尸进程”。


2. PCB 里存了什么?(核心解剖)

PCB 里的信息非常多,但归纳起来主要包含以下4 大类核心信息:

A. 进程标识信息 (Who am I?)

这是进程的身份证明。

  • PID (Process ID):进程的唯一编号(身份证号)。

  • PPID (Parent PID):父进程的 ID(户口本上的父亲)。

  • UID/GID:属于哪个用户、哪个组(决定了你有没有权限读写文件)。

B. 处理器状态信息 (Where did I stop?) ——最关键!

这是实现并发上下文切换的基础。当进程被 CPU 踢下去(暂停)时,必须把当前的“案发现场”保存下来,下次回来才能继续跑。

  • 通用寄存器值:EAX, EBX 等寄存器里暂存的数据。

  • 程序计数器 (PC / IP)最重要。记录了下一条该执行哪行代码指令。

  • 栈指针 (SP):记录当前函数调用栈顶在哪里。

  • 状态字 (PSW):记录当前 CPU 的状态(如是否发生了进位、溢出等)。

通俗理解:这就好比玩单机游戏时的“存档”。没有这个存档,下次打开游戏你就得从头开始,而不能接着上次的进度玩。

C. 进程调度与控制信息 (When can I run?)

操作系统用这些信息来决定把 CPU 分给谁。

  • 进程状态:Running(运行)、Ready(就绪)、Blocked(阻塞)等。

  • 优先级 (Priority):你是 VIP 还是普通用户?优先级高的先跑。

  • 时间片 (Time Slice):你这次能跑多久?

  • 调度队列指针:指向下一个 PCB 的指针(OS 通常把 PCB 串成链表来管理)。

D. 资源控制信息 (What do I own?)

记录进程占用的系统资源。

  • 内存管理信息:指向页表 (Page Table)的指针。决定了该进程的虚拟地址如何映射到物理内存(即该进程的地盘在哪里)。

  • 文件描述符表 (File Descriptors):你打开了哪些文件?使用了哪些 Socket?

  • 信号处理句柄:如果有信号(如kill)发过来,该怎么处理?


3. PCB 如何工作:上下文切换 (Context Switch)

这是 PCB 发挥作用的高光时刻。

假设 CPU 正在运行进程 A,现在要切换到进程 B,OS 会做以下动作:

  1. 暂停 A:通过中断机制打断进程 A。

  2. 保存 A (Save):把 CPU 当前所有寄存器的值(PC, SP 等)全部抄写到进程 A 的 PCB中。

  3. 调度:调度器决定运行进程 B。

  4. 恢复 B (Restore):从进程 B 的 PCB中读取它上次保存的寄存器值,填回到 CPU 寄存器里。

  5. 运行 B:CPU 指针指向了 B 上次停下的地方,进程 B 继续运行。

代价:你可以看到,读写 PCB 需要大量内存操作。这就是为什么进程切换(Context Switch)很“重”,很消耗性能的原因。这也是为什么现代高并发编程(如 Go 协程)倾向于在用户态搞轻量级调度的原因——为了绕过笨重的 PCB 切换。


4. Linux 中的 PCB:task_struct

在 Linux 内核源码中,PCB 对应的具体结构体名叫task_struct

  • 定义位置<include/linux/sched.h>

  • 大小:这是一个非常复杂的结构体,包含数百个字段。

  • 查看方式:虽然你不能直接看内存,但 Linux 的/proc文件系统把部分 PCB 信息映射成了文件。

    • 比如查看 PID 为 1234 的状态:cat /proc/1234/status

    • 查看它的内存映射:cat /proc/1234/maps

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 12:38:30

基于 STM32 的太阳能 MPPT 充电控制器设计

摘要针对传统太阳能充电控制器充电效率低、无法自适应光照和负载变化的问题&#xff0c;设计了一款基于 STM32 单片机的最大功率点跟踪&#xff08;MPPT&#xff09;太阳能充电控制器。该系统以 STM32F103C8T6 为核心控制单元&#xff0c;结合电压电流采样电路、DC-DC 变换电路…

作者头像 李华
网站建设 2026/6/12 12:22:50

高效获取高质量外链:2026年必须掌握的10个核心策略

反向链接是从其他网站指向你网站的链接。而获得反向链接仍然是提升你在线可见度最有效的方法之一。 反向链接长期以来被认可为传统搜索的价值&#xff0c;但它们对人工智能搜索同样重要。这是因为像ChatGPT、Perplexity和谷歌的AI概览部分基于他人在线谈论你的信息来了解你的品…

作者头像 李华
网站建设 2026/6/12 13:49:20

Feign基本知识

Feign声明式服务调用 1. 学习目标2. 什么是Feign ​ Feign是Spring Cloud Netflix组件中的一个轻量级Restful的HTTP客户端&#xff0c;实现了负载均衡和Rest调用的开源框架&#xff0c;封装了Ribbon和RestTemplate&#xff0c;实现了WebService的面向接口编程&#xff0c;进一…

作者头像 李华
网站建设 2026/6/12 12:23:05

探索含光伏、火电与飞轮储能系统的奇妙调频之旅

含有光伏&#xff0c;火电&#xff0c;飞轮储能的系统。 30秒系统负荷增加&#xff0c;0-30秒飞轮处于充电状态&#xff0c;30秒以后飞轮参与调频。在当今复杂且多变的能源世界里&#xff0c;由光伏、火电以及飞轮储能构成的综合能源系统越来越受到关注。这种系统巧妙地融合了不…

作者头像 李华
网站建设 2026/6/13 18:47:45

YOLOv13涨点改进 | 独家创新首发、Conv卷积改进篇 | SCI一区 2025 | 引入MSConvStar多尺度卷积星形模块,有效增强捕捉多范围特征,助力目标检测、图像分割、图像分类高效涨点

一、本文介绍 🔥本文给大家介绍使用MSConvStar多尺度卷积星形模块改进YOLOv13模型性能。通过结合多尺度卷积和星形操作,MSConvStar增强了特征提取能力,尤其在处理不同尺寸和复杂背景的物体时,能够更有效地捕捉多范围特征,改善模型的空间感知和非线性特征变换能力。该模块…

作者头像 李华
网站建设 2026/6/11 16:20:11

YOLOv11涨点改进 | 全网独家创新、Neck特征融合改进篇 | TGRS 2025顶刊 | 引入ADSF自适应特征融合模块,自适应融合浅层特征与深层特征,适合红外小目标检测、图像分割等有效涨点

一、本文介绍 🔥本文给大家介绍使用ADSF自适应特征融合模块改进 YOLOv11网络模型,可有效改进其多尺度特征融合方式。ADSF 通过自适应建模浅层高分辨率结构特征与深层高语义特征之间的跨层依赖关系,动态调节二者在融合过程中的贡献比例,在保留细节信息的同时增强语义判别能…

作者头像 李华