码迷,mamicode.com
首页 > 编程语言 > 详细

内核级线程与用户级线程

时间:2014-09-01 10:48:03      阅读:261      评论:0      收藏:0      [点我收藏+]

标签:操作系统   用户线程   内核线程   多线程   

这两天在写这篇blog的时候,顺带复习操作系统的资料,遇到了一个之前没有弄明白的问题,就是关于内核级线程与用户级线程。在查阅了一些资料之后,发表一下我个人简介。

线程已经在许多系统中实现,到那时各个操作系统实现方式不完全相同。
比如在有的系统中,特倍是一些数据库管理系统如IBM的infomix系统,所实现的用户级线程(UserLevel Threads ,ULT);而另一些系统如(Mac os的前身Macintosh和OS/2操作系统)所实现的是内核支持线程 ( Kernel Supported threads, KST);还有一些是Solaris操作系统,则同时实现了这两中类型的线程。


KST:

  内核支持线程是在核心空间实现的;内核为每个线程在核心空间中设置了一个线程控制块,用来登记该线程的线程标识符、寄存器值、状态、优先级等信息;所有对线程的操作,如创建、撤消和切换等,都是通过系统功能调用由内核中的相应处理程序完成;设置了内核支持线程的系统,其调度是以线程为单位进行的。

优点:
在多处理器系统中,内核能够同时调度同一进程中多个线程并行执行到多个处理器中;如果进程中的一个线程被阻塞,内核可以调度同一个进程中的另一个线程;内核支持线程具有很小的数据结构和堆栈,线程的切换比较快,切换开销小;内核本身也可以使用多线程的方式来实现。
缺点:
即使CPU在同一个进程的多个线程之间切换,也需要陷入内核,因此其速度和效率不如用户级线程。


ULT:

用户级线程仅存在于用户空间中,与内核无关;就内核而言,它只是管理常规的进程—单线程进程,而感知不到用户级线程的存在每个线程控制块都设置在用户空间中,所有对线程的操作也在用户空间中由线程库中的函数完成,无需内核的帮助设置了用户级线程的系统,其调度仍是以进程为单位进行的。
优点:
线程的切换无需陷入内核,故切换开销小,速度非常快线程库对用户线程的调度算法与OS的调度算法无关,因此,线程库可提供多种调度算法供应用程序选择使用用户级线程的实现与操作系统平台无关。
缺点:
系统调用的阻塞问题:对应用程序来讲,一个线程的阻塞将导致整个进程中所有线程的阻塞;多线程应用无法享用多处理机系统中多个处理器带来的好处。

组合方式:

内核支持多KST线程的建立、调度和管理,同时,也允许用户应用程序建立、调度和管理用户级线程一些内核支持线程对应多个用户级线程,程序员可按应用需要和机器配置对内核支持线程数目进行调整,以达到较好的效果。
优点:
同一个进程内的多个线程可以同时在多处理器上并行执行;在阻塞一个线程时,并不需要将整个进程阻塞


两者比较:

(1)内核支持
用户级线程可在一个不支持线程的OS中实现;
内核支持线程则需要得到OS内核的支持。
(2)处理器分配
在多处理机环境下,对用户级线程而言主,内核一次只为一个进程分配一个处理器,进程无法享用多处理机带来的好处;
在设置有内核支持线程时,内核可调度一个应用中的多个线程同时在多个处理器上并行运行,提高程序的执行速度和效率。

(3)调度和线程执行时间
设置有内核支持线程的系统,其调度方式和算法与进程的调度十分相似,只不过调度单位是线程;
对只设置了用户级线程的系统,调度的单位仍为进程。
因此,在条件相同的情况下,内核支持的线程通常比用户级线程得到更多的CPU执行时间。
(4)切换速度
用户级线程的切换,通常发生在一个应用程序的诸线程之间,而不需要陷入内核,而且切换的规则也很简单,切换速度比内核支持线程至少快一个数量级。

(5)系统调用
在典型OS中,许多系统调用都会引起阻塞。当一个用户级线程执行这些系统调用时,被阻塞的将是整个进程;当一个内核支持线程执行这些系统调用时,内核只阻塞这个线程,但仍可调度其所属进程的其他线程执行。


很多是从CC的ppt上拷贝的,希望会有帮助!


内核级线程与用户级线程

标签:操作系统   用户线程   内核线程   多线程   

原文地址:http://blog.csdn.net/liuqiyao_01/article/details/38975975

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!