内核级线程与用户级线程

这两天在写这篇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上拷贝的,希望会有帮助!

时间: 2024-12-28 05:05:54

内核级线程与用户级线程的相关文章

操作系统--内核支持线程和用户级线程

内核支持线程(Kernel Supported threads)KST OS中的所有进程(用户和内核)都是依靠内核完成的.KST也是如此,它的创建,阻塞,撤销,切换都是在内核空间实现. 优点: 内核可以同时调度同一进程中的多个线程并行执行 一个线程被阻塞了,内核可以调度随便一个进程中的其他线程占用处理器 采用多线程技术,可以提高西永的执行速度 用户级线程ULT 在用户空间实现,它的创建,阻塞,撤销,切换都无需内核的支持-->用户级线程与内核无关.所以内核完全不知道用户级线程的存在,也就不能看到用

线程的实现方式之内核支持线程和用户级线程

线程是OS进行独立调试.执行的基本单位,进程是系统进行资源分配的基本单位,一个进程可以包含若干个线程.无论是系统进程还是用户进程,进程的创建.撤消.以及要求系统设备完成的IO操作,都是利用系统调用而进入内核,再由内核中相应处理程序予以完成.进程的切换同样是在内核的支持下实现的.即不论什么样的进程,它们都是在OS内核的支持下运行的,是与内核紧密相关的. 1. 线程的分类 线程根据其实现方式不同又可分为内核支持线程KST(Kernel Supported Threads).用户级线程ULT(User

操作系统--用户级线程和内核级线程

在多线程操作系统中,各个系统的实现方式并不相同.在有的系统中实现了用户级线程,有的系统中实现了内核级线程 1.内核级线程: (1)线程的创建.撤销和切换等,都需要内核直接实现,即内核了解每一个作为可调度实体的线程. (2)这些线程可以在全系统内进行资源的竞争. (3)内核空间内为每一个内核支持线程设置了一个线程控制块(TCB),内核根据该控制块,感知线程的存在,并进行控制. 在一定程度上类似于进程,只是创建.调度的开销要比进程小.有的统计是1:10 2.用户级线程: (1)用户级线程仅存在于用户

线程的3种实现方式--内核级线程, 用户级线程和混合型线程

之前降解过内核线程.轻量级进程.用户线程三种线程概念解惑(线程≠轻量级进程), 但是一直对其中提到的线程的实现模型比较迷惑, 这次就花了点时间怎么学习了一下子 1 线程的3种实现方式 在传统的操作系统中,拥有资源和独立调度的基本单位都是进程.在引入线程的操作系统中,线程是独立调度的基本单位,进程是资源拥有的基本单位.在同一进程中,线程的切换不会引起进程切换.在不同进程中进行线程切换,如从一个进程内的线程切换到另一个进程中的线程时,会引起进程切换 根据操作系统内核是否对线程可感知,可以把线程分为内

[No000039]操作系统Operating Systems用户级线程User Threads

多进程是操作系统的基本图像 是否可以资源不动而切换指令序列? 进程 = 资源 + 指令执行序列 线程: 保留了并发的优点,避免了进程切换代价 实质就是映射表不变而PC 指针变 多个执行序列+ 一个地址空间是否实用? 一个网页浏览器 一个线程用来从服务器接收数据 一个线程用来显示文本 一个线程用来处理图片( 如解压缩) 一个线程用来显示图片 这些线程要共享资源吗? 接收数据放在100 处,显示时要读.. 所有的文本.图片都显示在一个屏幕上 开始实现这个浏览器… void WebExplorer()

用户级线程

线程的切换 在看进程切换前,我们先来看线程的切换吧. 这一篇主要说的是用户级线程的切换. 因为 进程的切换=资源切换+指令执行序列切换. 将资源和指令序列分开看,如果只是从一个执行指令序列切换到另一个执行指令序列,那么这就是线程的切换. 线程保留了并发(一个cpu上交替的执行多个程序)的优点,避免了进程切换代价,不需要切资源(映射表),只是切执行指令序列.线程切换的实质就是映射表不变而PC指针变. 用户级线程的切换 一个网页浏览器 一个线程用来从服务器接收数据 一个线程用来显示文本 开始实现这个

操作系统: 用户级线程和内核级线程

1 .内核级线程:切换由内核控制,当线程进行切换的时候,由用户态转化为内核态.切换完毕要从内核态返回用户态:可以很好的利用smp,即利用多核cpu.windows线程就是这样的. 2. 用户级线程内核的切换由用户态程序自己控制内核切换,不需要内核干涉,少了进出内核态的消耗,但不能很好的利用多核Cpu,目前Linux pthread大体是这么做的. 线程的实现可以分为两类:用户级线程(User-Level Thread)和内核线线程(Kernel-Level Thread),后者又称为内核支持的线

用户级线程和内核级线程的区别

转载于http://col1.blog.163.com/blog/static/1909775192012719114033352/ 1 .内核级线程:切换由内核控制,当线程进行切换的时候,由用户态转化为内核态.切换完毕要从内核态返回用户态:可以很好的利用smp,即利用多核cpu.windows线程就是这样的. 2. 用户级线程内核的切换由用户态程序自己控制内核切换,不需要内核干涉,少了进出内核态的消耗,但不能很好的利用多核Cpu,目前Linux pthread大体是这么做的. 线程的实现可以分

多线程 用户级线程和内核级线程 from C++多核高级编程

转 http://book.51cto.com/art/201006/206946.htm 6.1.1 用户级线程和内核级线程 2010-06-21 20:37 齐宁/董泽惠 译 清华大学出版社 字号:T | T <C++多核高级编程>第6章多线程,本章将介绍:什么是线程; 用于线程管理的pthread API;线程调度及优先级;线程竞争范围;扩展thread_object以封装线程属性功能.本节为大家介绍用户级线程和内核级线程. AD: 6.1.1  用户级线程和内核级线程 线程有3种实现模