Linux内核分析之进程管理-08
第8章 内核线程
基于 Linux 6.12.38 源码分析
8.1 内核线程概述
8.1.1 特点
内核线程是运行在内核空间的特殊进程:
- 没有用户地址空间:
mm为 NULL - 运行在内核态:只能在内核空间执行
- 不访问用户空间:不能直接访问用户内存
- 直接访问内核数据:可以使用所有内核函数和数据结构
8.1.2 与用户进程对比
| 特性 | 用户进程 | 内核线程 |
|---|---|---|
| 地址空间 | 独立的用户空间 | mm = NULL |
| 运行级别 | 可运行在用户态和内核态 | 仅内核态 |
| 栈 | 用户栈 + 内核栈 | 仅内核栈 |
| 创建方式 | fork/clone | kthread_create |
| 数据访问 | 需要系统调用访问内核数据 | 直接访问内核数据 |
8.2 内核线程创建 API
8.2.1 核心函数
位置: kernel/kthread.c
1 | /* |
8.2.2 停止内核线程
1 | /* |
8.3 内核线程实现
8.3.1 kthread_create_on_node()
1 | // kernel/kthread.c |
8.3.2 kthread() 函数
1 | // kernel/kthread.c |
8.4 常见内核线程
8.4.1 ksoftirqd
功能: 处理软中断
位置: kernel/softirqd.c
1 | /* |
8.4.2 kworker
功能: 执行工作队列任务
位置: kernel/workqueue.c
1 | /* |
8.4.3 kswapd
功能: 页面回收
位置: mm/vmscan.c
1 | /* |
8.4.4 migration
功能: 负载均衡,迁移任务到其他 CPU
位置: kernel/sched/topology.c
1 | /* |
8.5 内核线程的内存管理
8.5.1 active_mm 机制
1 | // 内核线程没有 mm,使用 active_mm 借用 |
8.5.2 内核线程分配内存
1 | // 内核线程使用 GFP_KERNEL 分配内存 |
8.6 内核线程调度
8.6.1 调度策略
1 | /* |
8.6.2 绑定到特定 CPU
1 | /* |
8.7 内核线程与信号
8.7.1 信号处理
1 | /* |
8.8 内核线程监控
8.8.1 查看内核线程
1 | # 查看所有内核线程 |
8.8.2 常见内核线程列表
1 | $ ps -ef | grep '\[' |
8.9 本章小结
本章介绍了 Linux 内核线程机制:
- 特点:没有用户地址空间,仅运行在内核态
- 创建 API:kthread_create、kthread_run
- 停止 API:kthread_stop、kthread_should_stop
- 实现:通过 kthread() 统一入口执行线程函数
- 常见线程:ksoftirqd、kworker、kswapd、migration 等
- 内存管理:使用 active_mm 借用机制
- 调度绑定:可以设置调度策略和 CPU 亲和性
- 监控:通过 ps 和 /proc 查看内核线程
下一章将介绍进程关系与组管理。
- Title: Linux内核分析之进程管理-08
- Author: 韩乔落
- Created at : 2026-01-14 19:20:22
- Updated at : 2026-01-19 13:40:54
- Link: https://jelasin.github.io/2026/01/14/Linux内核分析之进程管理-08/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments