内核线程的创建和运行

本文详细介绍了Linux内核线程的创建过程,包括0号、1号和2号线程的创建,以及kthreadd和kthread的工作流程。通过kthread_create和wake_up_process函数,阐述了内核线程如何被创建并开始运行。

上面讲完了用户进程/线程的创建,这里我们看下内核是如何创建线程的。

通过 ps 命令可以看到红色方框标出的都是父进程为2号进程的内核线程,2号进程即蓝色方框标出的进程 kthreadd,1号进程是绿色方框标出的进程 init,它们的父进程号都是0。

下面我们一起看下,内核的0号,1号,2号线程的创建过程。

0号线程

linux 内核中为0号进程专门定义了一个静态的 task_struct 的结构,称为 init_task:

/* include/linux/init_task.h */
#define INIT_TASK_COMM "swapper"

/* init/init_task.c */
struct task_struct init_task
#ifdef CONFIG_ARCH_TASK_STRUCT_ON_STACK
        __init_task_data
#endif
        __aligned(L1_CACHE_BYTES)
= {
#ifdef CONFI
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值