实际上我不太了解的一个概念是'内核porocess'或内核线程。在网上搜索并在SOO中搜索类似问题我发现了以下内容:What is a Kernel thread?答案是:
内核线程是仅在内核模式下运行的内核任务
据我所知,进入'内核模式'的过程必须发出系统调用。所以我不明白这些线程是如何一直在这种模式下运行的。有人可以帮助我理解它是如何工作的吗?
答案 0 :(得分:2)
内核线程是只能由另一个内核线程创建的线程(已经在"内核模式" - 也许某些驱动程序可能会产生它们来进行一些清理或监视它们),所以'没有用户线程开始(并用syscall切换上下文),这些线程在内核地址空间内启动,所以他们不需要任何额外的东西去进入内核模式。
创建的内核线程以普通优先级和调度程序功能作为用户线程运行。来自kthread_create_on_node
(http://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, ¶m);
323 set_cpus_allowed_ptr(task, cpu_all_mask);
324 }