日期:2014-05-16  浏览次数:20714 次

内核栈~ 内核线程 ~用户线程 之间关系 问题
问下 一个进程的内核栈是有一个还是可能有多个(多个线程)?
第二个问,Linux中 用户线程和核心线程有什么关系吗?
一个用户线程会对应拥有一个核心线程吗,像WINDOWS一样?

------解决方案--------------------
问下 一个进程的内核栈是有一个还是可能有多个(多个线程)?
A: 每个kernel thread各有一个kernel stack.
第二个问,Linux中 用户线程和核心线程有什么关系吗?
A:没有关系,kernel thread是独立于user space的。
一个用户线程会对应拥有一个核心线程吗,像WINDOWS一样?
A:不一定,应当说linux kernel开发者认为功能实现用 kernel thread是very ugly,一般用tasklet or work queue.
------解决方案--------------------
一个进程的内核栈是有一个还是可能有多个(多个线程)?
--------------------
linux每个线程都有自己的task_struct ,其中有thread_struct,最终是ksp记录内核栈
线程是最小的调度单位,理论上每个线程都得有自己的内核栈,才能保证调度不出问题。

用户线程和内核线程的区别主要是内核线程task_struct的mm为空,即不拥有用户态内存空间。
linux下用户线程也能进入内核态,所以不需要一个内核线程来配合,只要同一个task_struct就能描述。