多线程之内核态和用户态对进程和线程的管理

来源:互联网 发布:tomylife是什么软件 编辑:程序博客网 时间:2024/05/22 01:27

         尊重原创,转载请注明出处:http://blog.csdn.net/byperseverance/article/details/44157041


         大家都知道多任务操作系统的线程在内核态和用户态(这两态如果不清楚,大家可以百度,通俗点说就是内核态是在内核和驱动里面,用户态是在应用层里面)下都是可以创建的,那么在系统中这些线程,进程又是怎么管理呢?

         对于在内核态下面创建的线程,一般叫内核线程,这个一定是在内核里面去管理的。我们主要需要理解系统怎么去管理用户态线程,

首先我们先得理解几个概念就是用户级线程,内核级线程,混合线程。建议大家看一下这个博客,里面有图(http://blog.csdn.net/u012535146/article/details/17797911)。

         用户级线程就是大家在应用层创建,销毁,同步之类的工作都是直接去调用线程库,也就是内核是不知道也不关心你在用户层创建了多少个线程,怎么去同步,因为内核只给你的进程分配了一个内核线程,它需要调度管理的就是它面向的应用层进程的这个内核线程。在用户级线程里面用户线程与内核线程表现的关系是多对一的关系。

         内核级线程就是大家在用户态创建的线程通通映射或绑定在内核态里面,直接由内核来调度这些线程。既然是由内核来维护那些上下文关系以及线程切换,那么用户创建的这个线程发生阻塞是不会影响到其它线程的。在内核级线程里面用户线程与内核线程表现的关系是一对一的关系。

         混合线程就是上面两种的组合,个人也不想介绍太多和深入太多,总觉得这种方式太过复杂了。

        

         windowsXP系统属于内核级线程这一类的操作系统,它的缺点是用户线程切换的时候,由用户态转为内核态,切换完了又要从内核态转为用户态,这样看来多了资源的开锁。优点就是用户线程对应到内核线程,利用某些技术能充分的利用多核CPU,比如我一个进程有两个线程,那么对应有两个内核线程,是不是让它一个运行在A核,一个运行在B核。

        linux属于用户级线程这一类操作系统,但是我觉得它又是这一类操作系统中比较特殊的。Linux在核外采用1:1线程模型,即用一个核心进程(它是一个轻量进程,为什么叫进程是因为它内核中的线程和进程管理共享一个结构体struct_task,所以在linux内核中我们可以说没有线程,全是进程,也可统称为任务。)对应一个线程,把线程调度等同于进程调度,交给核心完成,而其它诸如线程取消、线程间的同步等工作,都是在核外线程库中完成的。线程库就是常用的ptherad。

        

       如果想了解linux的线程调度策略请转入:http://blog.csdn.net/byperseverance/article/details/44157041



0 0
原创粉丝点击