内核级线程(KLT)和用户级线程(ULT)

内核级线程(KLT)和用户级线程(ULT)

tags: KLT ULT 内核级线程 用户级线程


引言:本文涉及到操作系统的内核模式和用户模式,如果不太懂的话,可以参看我的这篇文章内核模式和用户模式,其中简单的进行了介绍。

进程和线程

首先说一下线程对于进程的优势,这其实就是线程出现的意义。

进程是资源拥有的基本单位,进程切换需要保存进程状态,会造成资源的消耗。同一进程中的线程,共享进程获取的部分资源。在同一进程中,线程的切换不会引起进程切换,线程的切换需要的资源少于进程切换,可以提高效率。

内核级线程(Kemel-Level Threads, KLT 也有叫做内核支持的线程)

  • 线程管理的所有工作(创建和撤销)由操作系统内核完成
  • 操作系统内核提供一个应用程序设计接口API,供开发者使用KLT

纯内核级线程特点:

  1. 进程中的一个线程被阻塞,内核能调度同一进程的其他线程(就绪态)占有处理器运行
  2. 多处理器环境中,内核能同时调度同一进程的多线程,将这些线程映射到不同的处理器核心上,提高进程的执行效率。
  3. 应用程序线程在用户态运行,线程调度和管理在内核实现。线程调度时,控制权从一个线程改变到另一线程,需要模式切换,系统开销较大。

用户级线程(User-Level Threads ULT)

  • 用户空间运行线程库,任何应用程序都可以通过使用线程库被设计成多线程程序。线程库是用于用户级线程管理的一个例程包,它提供多线程应用程序的开发和运行支撑环境,包含:用于创建和销毁线程的代码、在线程间传递数据和消息的代码、调度线程执行的代码以及保存和恢复线程上下文的代码。
  • 所以线程的创建,消息传递,调度,保存/恢复上下文都有线程库来完成。内核感知不到多线程的存在。内核继续以进程为调度单位,并且给该进程指定一个执行状态(就绪、运行、阻塞等)。

纯用户级线程的特点:

  1. 线程切换不需要内核模式,能节省模式切换开销和内核资源。
  2. 允许进程按照特定的需要选择不同的调度算法来调度线程。调度算法需要自己实现。
  3. 由于其不需要内核进行支持,所以可以跨OS运行。
  4. 不能利用多核处理器有点,OS调度进程,每个进程仅有一个ULT能执行
  5. 一个ULT阻塞,将导致整个进程的阻塞。

jacketing技术可以解决ULT一个线程阻塞导致整个进程阻塞。

jacketing的目标是把一个产生阻塞的系统调用转化成一个非阻塞的系统调用。例如,当进程中的一个线程调用IO中断钱,先调用一个应用级的I/O jacket例程,而不是直接调用一个系统I/O。让这个jacket例程检查并确定I/O设备是否忙。如果忙,则jacketing将控制权交给该进程的线程调度程序,决定该线程进入阻塞状态并将控制权传送给另一个线程(若无就绪态线程咋可能执行进程切换)。

线程实现的组合策略

可以看出,用户级线程和内核级线程都有各自的优点和缺点,在应用上主要表现为:

  • 用户级多线程对于处理逻辑并行性问题有很好的效果。不擅长于解决物理并发问题。
  • 内核级多线程适用于解决物理并行性问题。

组合策略:

由操作系统内核支持内核级多线程,由操作系统的程序库来支持用户级多线程,线程创建完全在用户空间创建,现成的调度也在应用程序内部进行,然后把用户级多线程映射到(或者说是绑定到)一些内核级多线程。编程人员可以针对不同的应用特点调节内核级线程的数目来达到物理并行性和逻辑并行性的最佳方案。

附上三种线程模式的图,帮助理解(来自网络,版权不可考,如发现出处可以联系作者删除或者增加版权说明

![三种线程模式示意图](https://images2018.cnblogs.com/blog/1356320/201804/1356320-20180402142408977-58366608.jpg)

其实这里还有一个轻进程的概念,但是我觉得不写在本文中反而更好理解。另外如果有什么地方写的不好,欢迎大家评论交流。

原文地址:https://www.cnblogs.com/vinter/p/8693010.html

时间: 2024-08-27 15:05:54

内核级线程(KLT)和用户级线程(ULT)的相关文章

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

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

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

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大体是这么做的. 线程的实现可以分

内核级线程与用户级线程

这两天在写这篇blog的时候,顺带复习操作系统的资料,遇到了一个之前没有弄明白的问题,就是关于内核级线程与用户级线程.在查阅了一些资料之后,发表一下我个人简介. 线程已经在许多系统中实现,到那时各个操作系统实现方式不完全相同. 比如在有的系统中,特倍是一些数据库管理系统如IBM的infomix系统,所实现的用户级线程(UserLevel Threads ,ULT):而另一些系统如(Mac os的前身Macintosh和OS/2操作系统)所实现的是内核支持线程 ( Kernel Supported

用户级线程和内核级线程,你分得清吗?

这篇文章是上一篇博客的补充,旨在把没有讲清楚的「用户级线程和内核级线程」补充完整.希望读者能对线程有更进一步的了解. 小白最近在学习多线程编程. 网上关于多线程的资料很多,小白很快就把线程的基本概念弄懂了,但关于「用户级线程和内核级线程」的概念,她却怎么也搞不清楚,只好向操作系统基础扎实的小明请教. 对于小白的问题,小明总会耐心解答:"线程里面这两个概念确实比较难理解,我先给你讲用户级线程吧." 用户级线程 "既然你说你已经看过线程的基本概念,那我就直接跳过这一部分了. 很久

用户级线程

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

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

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

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

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

多线程 用户级线程和内核级线程 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种实现模