当前位置: 技术问答>linux和unix
内核进程线程问题,大家指教
来源: 互联网 发布时间:2016-07-17
本文导语: 1.kthread_create kernel_thread产生的是进程还是线程,如果是线程那么进程如何产生,如果说内核线程和进程是一个东西,那么到底是进程还是线程,我在一个.C里声明个全局变量,其它的线程可以共享吗? 2.产生内核进...
1.kthread_create kernel_thread产生的是进程还是线程,如果是线程那么进程如何产生,如果说内核线程和进程是一个东西,那么到底是进程还是线程,我在一个.C里声明个全局变量,其它的线程可以共享吗?
2.产生内核进程用哪个函数?
2.产生内核进程用哪个函数?
|
没有“内核进程”。“内核线程”本身就是一种特殊的进程,它只在内核空间中运行,因此没有与之相关联的“虚拟地址空间”,也就永远不会被切换到用户空间中执行。但跟一般的进程一样,它们也是可调度的、可抢占的。这一点跟中断处理程序不一样。
Linux一般用内核线程来执行一些特殊的操作。比如负责page cache回写的pdflush内核线程。
另外,在Linux内核中,可调度的东西都对应一个thread_info以及一个task_struct,同一个进程中的线程,跟进程的区别仅仅是它们共享了一些资源,比如地址空间(mm_struct成员指向同一位置)。所以,如果非要觉得内核线程应该被称为“内核进程”,那也没啥不可以,只是这样说的话,就成了文字游戏了。毕竟官方的叫法就是“内核线程”。
Linux一般用内核线程来执行一些特殊的操作。比如负责page cache回写的pdflush内核线程。
另外,在Linux内核中,可调度的东西都对应一个thread_info以及一个task_struct,同一个进程中的线程,跟进程的区别仅仅是它们共享了一些资源,比如地址空间(mm_struct成员指向同一位置)。所以,如果非要觉得内核线程应该被称为“内核进程”,那也没啥不可以,只是这样说的话,就成了文字游戏了。毕竟官方的叫法就是“内核线程”。
|
去研究 do_fork 的实现就知道了,http://lxr.linux.no/linux+v2.6.31/kernel/fork.c#L1333。 sys_clone / sys_fork 最后都是走到这里。
|
100啊。深更半夜,来看看!