Appearance
concepts/process/ —— 进程与线程的内核内部
进程在内核里长什么样(task_struct)?怎么创建/调度/切换?中断和系统调用怎么走?这是 10 篇 + 1 个深化子目录的内核视角主题簇。
全局地图见 ../../overview.md;配套工具见 ../../tools/。
核心:进程到底是什么
- task-struct.md —— 总纲:内核视角的进程 = 一个
task_struct+ 它用指针挂出去的全套资源对象。先读这篇建立全局观。- 子目录 task-resources/:每一样资源对象逐篇展开详解——含 task 私有字段、mm_struct、files_struct、fs_struct、信号(3篇)、凭证、命名空间/cgroup、io_context/seccomp/rseq 共 9 篇
- vfs-binding.md:进程与VFS文件系统的完整绑定机制——task_struct的fs_struct/files_struct如何关联全局VFS挂载树、路径解析流程、fork时的写时复制
- task-struct-knowledge-framework.md:task_struct 子系统索引与学习路径——按子系统维度重新组织的字段→文档映射速查表,配合主文档使用
进程/线程的创建与生命周期
- process-creation.md —— fork/exec/clone、写时复制(CoW)、一次调用两次返回
- thread-creation.md —— pthread/
std::thread底层 clone、主线程何时返回 - thread-startup.md —— 线程启动执行流程深化:主线程(execve→load_elf_binary→start_thread伪造pt_regs→_start→main)与子线程(clone→copy_process→copy_thread伪造内核栈→ret_from_fork→用户态start_thread→线程入口)两条路径的完整内核/用户函数调用栈、调度介入时机、pt_regs伪造机制对比
- fork-and-threads.md —— 多线程 fork 的陷阱(锁死)、async-signal-safe
- vfork.md —— vfork 机制深度分析与避坑:fork 卡死的四类根因(SIGCHLD+waitpid 冲突/锁继承死锁/大 VMA exit 阻塞/SA_RESTART)、vfork 为什么能"恢复"、标准化根治方案
- signal-multithread.md —— 多线程程序的信号投递:主线程身份(tgid/group_leader)、内核怎么选线程(complete_signal 算法)、从信号产生到 handler 执行的完整时序(含内核↔用户态切换每一步)、sigframe/sigreturn 机制
- process-group-and-child-reap.md —— 进程组与子进程回收:PGID/SID/会话/控制终端概念、fork 后 PGID 继承规则、正确回收子进程 task_struct 的六种策略(阻塞 wait / SIGCHLD handler / SA_NOCLDWAIT / Double Fork / signalfd / subreaper)、低延时场景选择指南
- waitpid-kernel-internals.md —— waitpid 内核实现深度剖析:完整调用链
waitpid→kernel_wait4→do_wait→wait_task_zombie→release_task、3 幅时序图、wait_chldexit 等待队列机制、8 个选项位详解、子进程退出如何唤醒父进程 - zombie-case.md —— 反面案例:uv_file_process 僵尸进程堆积:四个致命 BUG 逐层拆解(条件反向死锁/flag 竞态丢帧/1s 轮询窗口/多线程信号投递)、含 3 幅 PlantUML 时序图、完整修复与监控 checklist
进程持久化:检查点与重启
- dmtcp.md —— DMTCP 透明检查点/重启:功能全景、coordinator+libdmtcp 架构、LD_PRELOAD 劫持、全局静止点、内存/FD/线程/socket 保存与恢复、与 CRIU 对比
进程追踪与控制
- ptrace.md —— ptrace 原理:tracer/tracee 模型、ptrace-stop 状态、四大类操作(执行控制/内存寄存器读写/事件获取/选项设置)、内核 task_struct 实现、一次 PTRACE_SYSCALL 的完整流程(含开销分析)、strace 与 gdb 的使用差异、ptrace_scope 安全控制、与 BPF 的对比与替代
调度与切换
- scheduling.md —— 内核调度:调度类分层、CFS/EEVDF、运行队列、抢占与切换、负载均衡
- context-switch.md —— 上下文切换的实现:四大触发场景(时间片耗尽/主动阻塞/抢占/syscall 返回前)含完整时序图、
switch_mm+switch_to、切线程 vs 切进程、量化开销分析 - kernel-stack-snapshot.md —— 线程内核栈的快照分析:一条线程在多次切换中内核栈的"冻结点"变化(从创建→用户态→陷入内核→被切走→睡眠→被调度回来→被信号打断,7 个典型快照的全景可视化),
switch_to()栈帧精确解剖 - scheduling-interrupts.md:调度与中断的深入交互——主动调度vs被动抢占、内核抢占配置差异、上下文切换现场保存机制、内核栈分层原理
- thread-affinity.md —— 线程亲和性(绑核):三层接口、绑核 vs 绑 NUMA、isolcpus
陷入内核的两种路径
- syscall.md —— 系统调用的执行过程及开销:陷入、syscall/sysret、开销(切换/TLB/KPTI)、vDSO
- syscall-details.md —— 系统调用深入细节:同一线程从用户态到内核态的完整过程。段寄存器管理(CS/SS/DS 的切换与 GDT 描述符)、特权级切换的硬件微操作序列、内核栈与 pt_regs、KPTI 页表切换与 PCID 优化、为什么 rcx/r11 被 syscall 征用。
- x86-64-registers.md —— x86-64 关键寄存器体系:Linux 性能/底层机制的前置知识。按功能分组(通用寄存器/段寄存器/控制寄存器/MSR/SIMD/APIC/调试/TSC),每个说明"是什么、在哪个场景出现、对性能意味着什么"。含寄存器速查表、调用约定、
rcx/r11被 syscall 征用的完整故事、CR3 与 KPTI 开销、CR0.TS 惰性 FPU 切换、MSR 位域分解、XCR0 状态组件、APIC 寄存器与中断投递、阅读文档时的场景速查表。 - segment-management.md —— 内核段管理:x86-64 下代码段/数据段/段权限的完整机制。段选择子结构、GDT 描述符深度拆解(Access Byte 逐位分析)、CPL/RPL/DPL 三者权限检查公式、syscall/sysret 如何绕过段检查、用户态/内核态双层保护(段 DPL + 页表 U/S + KPTI)、per-CPU GDT 管理、TLS 描述符动态修改。
- interrupts.md —— 内核中断处理:完整分类体系(外部 IRQ/异常/软中断陷入/NMI/IPI)、五大设计矛盾与权衡、14 步完整处理流程、四部分开销量化、上下半部机制(softirq/tasklet/workqueue/NAPI)
- irq-affinity.md —— IRQ 亲和性:中断绑核的完整机制。硬件层面(IO-APIC 重定向表/MSI-X Message Address 的目标 APIC ID)、软件接口(
/proc/irq/N/smp_affinity位图与 smp_affinity_list)、irqbalance 守护进程原理与何时该关掉、网卡多队列 RSS 与中断亲和性的一一对应最佳实践、与 isolcpus/nohz_full 的协同配置、观测与调试方法
配套 IO 全链路:../io/read-write-process.md —— read/write 全过程中模式切换、上下文切换、栈变化、数据流的完整分析。
一句话:先读 task-struct.md 看懂进程的内核"身份证"(私有字段 + 可共享资源对象的全套图谱),然后按你的目的选——想懂创建过程读 process-creation/thread-creation/fork-and-threads,想懂调度读 scheduling/context-switch/thread-affinity,想懂"怎么进内核"读 syscall/syscall-details/interrupts,想懂低延迟优化读 irq-affinity/thread-affinity(中断绑核+线程绑核,消除抖动)。阅读底层文档前建议先看 x86-64-registers.md 了解关键的硬件寄存器。