关于“核心过程”的疑问

时间:2015-09-25 07:29:11

标签: linux process kernel

实际上我不太了解的一个概念是'内核porocess'或内核线程。在网上搜索并在SOO中搜索类似问题我发现了以下内容:What is a Kernel thread?答案是:

  

内核线程是仅在内核模式下运行的内核任务

据我所知,进入'内核模式'的过程必须发出系统调用。所以我不明白这些线程是如何一直在这种模式下运行的。有人可以帮助我理解它是如何工作的吗?

1 个答案:

答案 0 :(得分:2)

内核线程是只能由另一个内核线程创建的线程(已经在"内核模式" - 也许某些驱动程序可能会产生它们来进行一些清理或监视它们),所以'没有用户线程开始(并用syscall切换上下文),这些线程在内核地址空间内启动,所以他们不需要任何额外的东西去进入内核模式。

创建的内核线程以普通优先级和调度程序功能作为用户线程运行。来自kthread_create_on_nodehttp://lxr.free-electrons.com/source/kernel/kthread.c#L269):

310         task = create->result;
311         if (!IS_ERR(task)) {
312                 static const struct sched_param param = { .sched_priority = 0 };
313                 va_list args;
314 
315                 va_start(args, namefmt);
316                 vsnprintf(task->comm, sizeof(task->comm), namefmt, args);
317                 va_end(args);
318                 /*
319                  * root may have changed our (kthreadd's) priority or CPU mask.
320                  * The kernel thread should not inherit these properties.
321                  */
322                 sched_setscheduler_nocheck(task, SCHED_NORMAL, &param);
323                 set_cpus_allowed_ptr(task, cpu_all_mask);
324         }