假如内核线程之后运行的进程与之前是同一个, 在这种情况下, 内核并不需要修改用户空间地址表。地址转换后备缓冲器(即TLB)中的信息仍然有效。...于是linux-2.6.22引入了kthreadd进程, 并随后演变为2号进程, 它在系统初始化时同1号进程一起被创建(当然肯定是通过kernel_thread), 参见rest_init函数, 并随后演变为创建内核线程的真正建造师...v=2.4.37;i=arch_kernel_thread
但是这种方式创建的线程并不适合运行,因此内核提供了daemonize函数, 其声明在include/linux/sched.h中
//..., 虽然创建的代价已经很小了, 但是对于追求性能的linux内核来说还不能忍受
因此我们只能说kernel_thread是一个古老的接口, 内核中的有些地方仍然在使用该方法, 将一个函数直接传递给内核来创建内核线程...新版本的实现
于是linux-3.x下之后, 有了更好的实现, 那就是
延后内核的创建工作, 将内核线程的创建工作交给一个内核线程来做, 即kthreadd 2号进程
但是在kthreadd还没创建之前