【转载】到底什么是用户态线程,内核态线程?
1)先要明白用户态和内核态,这个在操作系统的教材中有明确的定义。我们可以把OS提供 的API层作为分界点,粗略的以此来划分内核和用户代码。调用API的一方是用户程序,API的具体执行部分是OS的系统程序。
由API作为分割线,一个完整的程序在执行期间就有两个部分组成,即可以初略的理解为一边是用户态,另外一边是内核态。
继续往下看
执行的程序,由于API层而初略的分成两个部分,更进一步的情况是,两边的程序代码执行所在的进程都是不一样的,调用API的代码是在用户创建的进程中执行,而另一边的API执行部分,则是在另外的一个进程中执行。由此,一个完整的程序在执行期间就分到不同的进程中去执行。
说到这里,应该就可以理解什么是用户态和内核态这两个名词了吧。
如果你有兴趣去看看硬件的芯片手册,就能发现,这个界限的划分还是有硬件基础的,大多的mcu都会有一个特权位,相应的,特权位设置为1,对应的是内核态,设置为0,对应的就是用户态。
为什么需要如此的划分呢?答案是为了安全,为了os的稳定,系统总不能因为用户代码的bug导致os层面的问题吧,所以把彼此分割开来,可控而不相互干扰。
2)接下来再要明白什么是进程,什么是线程。
进程之中,更小的颗粒“线程”。这个答案可以参考我的另外一个回答:
https://www.zhihu.com/answer/81152571
3)开始回答楼主的提问
明白了上面的基础知识,那就理解了用户态线程
和内核态线程的字面意思。
这里线程被分割成两个部分,用户态的,和内核态的,分界点仍然是API,调用api的部分就是用户态线程,而API的执行部分,就是处于os内,属于内核态。这样这个代码的执行就分在两个线程中,协作完成。注意既然已经在不同的线程中完成,对应的堆栈资源也就是不同的。
故此得名,用户态线程,内核态线程。

浙公网安备 33010602011771号