打开 Linux 内核源码 sched.h,task_struct 接近 5KB、字段上百个。但真正决定一个进程是什么的核心字段,只有 12 个。看完这期,你再翻内核代码,每一行都对得上号。
本期内容:
- task_struct 在内核里到底是什么、为什么放在哪几个字段在结构体头部
- 12 个核心字段逐一拆解:__state、thread_info、*stack、pid/tgid、parent/children、sched_class、sched_entity、*mm、*files、*fs、*signal、*cred
- pid 和 tgid 的差别:getpid 返回的为什么不是 pid 而是 tgid
- sched_class 虚函数表如何让 CFS、实时、deadline 三种策略共存
- vruntime 是怎么算的,CFS 红黑树为什么 O(log N) 选下一个
- mm 和 active_mm 的"借尸还魂":内核线程没有地址空间怎么办
- fork 端到端时间线:12 个字段在 copy_process 里怎么被填
- fork、vfork、pthread_create 三件套底层都是 clone,差在 clone_flags
- 致敬 Linus Torvalds、Ingo Molnar(CFS 之父)、Peter Zijlstra(调度器与 RCU 维护者)
适合人群:对 Linux 内核源码感兴趣、想从结构体视角建立子系统映射的后端 / 内核 / 系统编程同学。
#Linux内核 #task_struct #进程调度 #CFS #fork