2015-09-25 67 views
2

實際上我並不瞭解的其中一個概念是'kernel porocess'或內核線程。搜索在網絡,以及SOO類似的問題,我發現以下幾點:What is a Kernel thread?那裏得到的答案是:對「內核進程」的懷疑

內核線程僅在內核模式下運行的內核任務

據我所知進入'內核模式'的進程必須發出系統調用。所以我不明白這些線程如何在這種模式下始終運行。有人能幫助我理解這是如何工作的嗎?

回答

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   } 
+0

好的,謝謝。這些被視爲正常的線程在時間表,優雅,優先等方面? ..或者因爲他們通常以更高的優先級運行? – redobot

+0

我認爲他們在調度程序中的處理方式基本相同,但我仍需要確認。 –

+0

查看我的編輯@redobot –