1、內核線程,只是一個稱呼,實際上就是一個進程,有自己獨立的TCB,參與內核調度,也參與內核搶占。
這個進程的特別之處有兩點,第一、該進程沒有前台。第二、永遠在內核態中運行。
2、創建內核線程有兩種方法,一種是 kthread_create() ,一種是 kernel_thread() ,兩種有什么區別?使用場景分別是什么?
http://www.cnblogs.com/sky-heaven/p/5395864.html
3、內核線程既然也是進程,那么新創建出來的內核線程,用戶是誰?所屬哪個組?
4、內核線程的父進程PPID,有的為0,有的為2,絕大部分是2,是什么含義?
解答:仔細觀察得知,既然PPID是2,那么進程ID為2的內核線程是誰?從上圖可以看到,它是kthreadd線程,該線程啟動后,在這個線程的運行期間,
會去啟動其他內核線程,代碼如下:
文件:kthread.c (kernel)
內容:
源碼解析:可以看出,kthread_create_list是需要創建內核線程的列表,一定有一個函數供其他模塊調用,往這個列表中增加內容。
那么,kthreadd本身在哪里啟動的呢?見下面的rest_init函數實現。
5、既然每個內核線程都是一個進程,進程的地址空間是互相隔離的,為何說所有的內核線程共享同一個地址空間?
同樣的問題,在Linux用戶態編程中,線程也是通過進程控制塊的方式管理的,他們如何實現共享地址空間的呢?
(待補充)
6、kernel_thread()的關鍵是調用在內核中實現的 do_fork(),核心本質上還是一個進程。