登录/注册

从源码分析pcb

华秋PCB(https://www.hqpcb.com/zhuoluyex7?zt-499)四层板板材费降至499元/㎡,狂降16.83%;多层板全面大幅度降价,交期再提速

更多

从源码分析 PCB(以 Linux 内核为例)

在操作系统中,PCB(进程控制块) 是描述进程状态和资源的核心数据结构。不同系统的实现有差异,本文以 Linux 5.15 内核为例,分析其 PCB 实现——task_struct(位于 include/linux/sched.h)。


1. 核心结构体:task_struct

Linux 的 PCB 是一个 2000+ 行的复杂结构体,涵盖进程的所有信息。以下列举关键字段:

(1) 进程状态

volatile long state; // 进程状态(如运行、就绪、阻塞等)
int exit_state;      // 退出状态

状态常量定义在 include/linux/sched.h

#define TASK_RUNNING        0x0000
#define TASK_INTERRUPTIBLE  0x0001
#define TASK_UNINTERRUPTIBLE    0x0002
#define __TASK_STOPPED      0x0004
#define __TASK_TRACED       0x0008
/* ... */

(2) 进程标识

pid_t pid;                   // 进程 ID
pid_t tgid;                  // 线程组 ID(主线程 PID)
struct task_struct *parent;  // 父进程指针
struct list_head children;   // 子进程链表
struct list_head sibling;    // 兄弟进程链表

(3) 调度信息

int prio;                     // 动态优先级
int static_prio;              // 静态优先级
const struct sched_class *sched_class; // 调度器类(CFS、RT 等)
struct sched_entity se;       // 调度实体(用于 CFS)
struct sched_rt_entity rt;    // 实时调度实体
unsigned int policy;          // 调度策略(SCHED_NORMAL、SCHED_FIFO 等)

(4) 内存管理

struct mm_struct *mm;         // 进程内存描述符(地址空间、页表等)
struct vm_area_struct *mmap;  // 虚拟内存区域链表

(5) 文件系统

struct files_struct *files;   // 打开的文件描述符表
struct fs_struct *fs;         // 工作目录等信息

(6) 信号处理

struct signal_struct *signal; // 信号处理函数指针
sigset_t blocked;             // 阻塞的信号掩码
struct sigpending pending;    // 待处理信号队列

(7) 计时与统计

u64 utime, stime;            // 用户态/内核态 CPU 时间
unsigned long nvcsw, nivcsw; // 自愿/非自愿上下文切换计数
struct timespec64 start_time;// 进程启动时间戳

2. 关键工作机制

(1) 进程创建(fork() 源码路径)

(2) 状态转换示例


3. 典型操作

查找进程(通过 PID):

struct task_struct *find_task_by_vpid(pid_t pid) {
    return pid ? find_task_by_pid_ns(pid, task_active_pid_ns(current)) : NULL;
}

获取当前进程:

内核通过 current 宏(通常用 Per-CPU 变量寄存器缓存)快速访问当前进程的 task_struct

// x86 实现(通过栈偏移定位)
#define current get_current()

static __always_inline struct task_struct *get_current(void) {
    return this_cpu_read_stable(pcpu_hot.current_task);
}

4. 设计特点

  1. 统一线程模型
    线程与进程共用 task_struct,线程通过共享 mm_struct(内存空间)和 files_struct(文件句柄)实现轻量化。
  2. 高效访问
    current 宏通过硬件特性(如 x86 的 %gs 寄存器)实现纳秒级访问当前 PCB。
  3. 模块化组织
    资源通过指针分离(如 mm_structfiles_struct),便于共享和写时复制(Copy-On-Write)。

总结

提示:深入源码可参考 Linux Kernel Source 搜索 task_struct

EDA到3D电磁场,CST PCB Studio信号完整性分析工作流详解

CST PCB Studio提供从版图到三维全波分析的无缝集成环境,解决高速PCB

2025-08-06 11:25:08

epoll源码分析

个函数进行源码分析。 源码来源 由于epoll的实现内嵌在内核中,直接查看内核源码

2023-11-13 11:49:27

PCB线路板溯源镭雕机,电路板追溯码机

1970-01-01 08:00:00 至 1970-01-01 08:00:00

什么是pcb分析

华秋DFM是国内首款免费的PCB设计可制造性分析软件,是面向PCB工程师、硬件工程师、

资料下载 佚名 2021-07-28 18:24:50

物流pcb分析

华秋DFM是国内首款免费的PCB设计可制造性分析软件,是面向PCB工程师、硬件工程师、

资料下载 佚名 2021-07-28 18:24:45

pcb分析是什么

华秋DFM是国内首款免费的PCB设计可制造性分析软件,是面向PCB工程师、硬件工程师、

资料下载 佚名 2021-07-28 18:24:31

pcb分析

华秋DFM是国内首款免费的PCB设计可制造性分析软件,是面向PCB工程师、硬件工程师、

资料下载 佚名 2021-07-28 18:24:27

pcb分析

华秋DFM是国内首款免费的PCB设计可制造性分析软件,是面向PCB工程师、硬件工程师、

资料下载 佚名 2021-07-28 18:24:20

源码分析 import axios from 'axios' 的执行过程-1

这两篇文章我们看一下 axios 的相关知识。从 import axios from 'axios' 再到 axios 的内部源码,带大家看一下经典库的运行流程。

2023-03-01 10:01:44

Busybox源码简介

在嵌入式系统构建中,Busybox可用于构建轻量级的根文件系统,本文从源码结构和源码入口角度

2022-10-12 09:07:58

uCOS2源码分析

uCOS2源码分析3-RTOS核心代码视频课程-第4季第4部分 互联网课程品...

2022-01-12 06:28:37

互斥量源码分析测试

文章目录互斥量源码分析测试参考资料:RTT官网文档关键字:分析RT-Thread源码

2021-08-24 06:01:11

uCOS2源码分析

uCOS2源码分析1-BSP部分-第4季第2部分视频课程 互联网课程品牌《朱...

2021-07-20 06:48:46

鸿蒙源码分析系列(总目录) | 给HarmonyOS源码逐行加上中文注释

同步更新。鸿蒙源码分析系列篇|- 鸿蒙内核源码分析 |-图解鸿蒙

2020-11-20 11:24:44

Linux内核源码之我见——内核源码分析方法

的代码高手。透过阅读Linux内核代码的方式,我们学习到的不光是内核相关的知识,在我看来更具价值的是学习和体会它们的编程技巧以及对计算机的理解。我也是通过一个项目接触了Linux内核源码的分析,

2020-05-11 07:00:00
7天热门专题 换一换
相关标签