Linux内核线程的思考与总结-创新互联

1、内核线程,只是一个称呼,实际上就是一个进程,有自己独立的TCB,参与内核调度,也参与内核抢占。

成都创新互联公司从2013年开始,先为桐乡等服务建站,桐乡等地企业,进行企业商务咨询服务。为桐乡企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

   这个进程的特别之处有两点,第一、该进程没有前台。第二、永远在内核态中运行。

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(),核心本质上还是一个进程。


标题名称:Linux内核线程的思考与总结-创新互联
网页URL:http://pwwzsj.com/article/hgeei.html