`
cloudeagle
  • 浏览: 112575 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

用户级线程和内核级线程

 
阅读更多


转自http://col1.blog.163.com/blog/static/1909775192012719114033352/

1 .内核级线程:切换由内核控制,当线程进行切换的时候,由用户态转化为内核态。切换完毕要从内核态返回用户态;可以很好的利用smp,即利用多核cpu。windows线程就是这样的。

2. 用户级线程内核的切换由用户态程序自己控制内核切换,不需要内核干涉,少了进出内核态的消耗,但不能很好的利用多核Cpu,目前Linux pthread大体是这么做的。

线程的实现可以分为两类:用户级线程(User-Level Thread)和内核线线程(Kernel-Level Thread),后者又称为内核支持的线程或轻量级进程。在多线程操作系统中,各个系统的实现方式并不相同,在有的系统中实现了用户级线程,有的系统中实现了内核级线程。

用户线程指不需要内核支持而在用户程序中实现的线程,其不依赖于操作系统核心,应用进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程。不需要用户态/核心态切换,速度快,操作系统内核不知道多线程的存在,因此一个线程阻塞将使得整个进程(包括它的所有线程)阻塞。由于这里的处理器时间片分配是以进程为基本单位,所以每个线程执行的时间相对减少。

内核线程:由操作系统内核创建和撤销。内核维护进程及线程的上下文信息以及线程切换。一个内核线程由于I/O操作而阻塞,不会影响其它线程的运行。Windows NT和2000/XP支持内核线程。

用户线程运行在一个中间系统上面。目前中间系统实现的方式有两种,即运行时系统(Runtime System)和内核控制线程。“运行时系统”实质上是用于管理和控制线程的函数集合,包括创建、撤销、线程的同步和通信的函数以及调度的函数。这些函数都驻留在用户空间作为用户线程和内核之间的接口。用户线程不能使用系统调用,而是当线程需要系统资源时,将请求传送给运行时,由后者通过相应的系统调用来获取系统资源。内核控制线程:系统在分给进程几个轻型进程(LWP),LWP可以通过系统调用来获得内核提供的服务,而进程中的用户线程可通过复用来关联到LWP,从而得到内核的服务。

以下是用户级线程和内核级线程的区别:

(1)内核支持线程是OS内核可感知的,而用户级线程是OS内核不可感知的。

(2)用户级线程的创建、撤消和调度不需要OS内核的支持,是在语言(如Java)这一级处理的;而内核支持线程的创建、撤消和调度都需OS内核提供支持,而且与进程的创建、撤消和调度大体是相同的。

(3)用户级线程执行系统调用指令时将导致其所属进程被中断,而内核支持线程执行系统调用指令时,只导致该线程被中断。

(4)在只有用户级线程的系统内,CPU调度还是以进程为单位,处于运行状态的进程中的多个线程,由用户程序控制线程的轮换运行;在有内核支持线程的系统内,CPU调度则以线程为单位,由OS的线程调度程序负责线程的调度。

(5)用户级线程的程序实体是运行在用户态下的程序,而内核支持线程的程序实体则是可以运行在任何状态下的程序。

内核线程的优点:

(1)当有多个处理机时,一个进程的多个线程可以同时执行。

缺点:

(1)由内核进行调度。

用户进程的优点:

(1) 线程的调度不需要内核直接参与,控制简单。

(2) 可以在不支持线程的操作系统中实现。

(3) 创建和销毁线程、线程切换代价等线程管理的代价比内核线程少得多。

(4) 允许每个进程定制自己的调度算法,线程管理比较灵活。

(5) 线程能够利用的表空间和堆栈空间比内核级线程多。

(6) 同一进程中只能同时有一个线程在运行,如果有一个线程使用了系统调用而阻塞,那么整个进程都会被挂起。另外,页面失效也会产生同样的问题。

缺点:

(1)资源调度按照进程进行,多个处理机下,同一个进程中的线程只能在同一个处理机下分时复用


linux上主流的线程实现机制:

转自http://www.ibm.com/developerworks/cn/linux/kernel/l-thread/


1.NPTL

NPTL的设计目标归纳可归纳为以下几点:

  • POSIX兼容性

  • SMP结构的利用

  • 低启动开销

  • 低链接开销(即不使用线程的程序不应当受线程库的影响)

  • 与LinuxThreads应用的二进制兼容性

  • 软硬件的可扩展能力

  • 多体系结构支持

  • NUMA支持

  • 与C++集成

在技术实现上,NPTL仍然采用1:1的线程模型,并配合glibc和最新的Linux Kernel2.5.x开发版在信号处理、线程同步、存储管理等多方面进行了优化。和LinuxThreads不同,NPTL没有使用管理线程,核心线程的管理直接放在核内进行,这也带了性能的优化。

主要是因为核心的问题,NPTL仍然不是100%POSIX兼容的,但就性能而言相对LinuxThreads已经有很大程度上的改进了。

2.NGPT

IBM的开放源码项目NGPT在2003年1月10日推出了稳定的2.2.0版,但相关的文档工作还差很多。就目前所知,NGPT是基于GNU Pth(GNU Portable Threads)项目而实现的M:N模型,而GNU Pth是一个经典的用户级线程库实现。

按照2003年3月NGPT官方网站上的通知,NGPT考虑到NPTL日益广泛地为人所接受,为避免不同的线程库版本引起的混乱,今后将不再进行进一步开发,而今进行支持性的维护工作。也就是说,NGPT已经放弃与NPTL竞争下一代Linux POSIX线程库标准。

3.其他高效线程机制

此处不能不提到Scheduler Activations。这个1991年在ACM上发表的多线程内核结构影响了很多多线程内核的设计,其中包括Mach3.0、NetBSD和商业版本Digital Unix(现在叫Compaq True64 Unix)。它的实质是在使用用户级线程调度的同时,尽可能地减少用户级对核心的系统调用请求,而后者往往是运行开销的重要来源。采用这种结构的线程机制,实际上是结合了用户级线程的灵活高效和核心级线程的实用性,因此,包括Linux、FreeBSD在内的多个开放源码操作系统设计社区都在进行相关研究,力图在本系统中实现Scheduler Activations。

分享到:
评论

相关推荐

    用户级线程的介绍,怎样实现多线程等等

    综合方法,如Solaris操作系统,结合了用户级线程和内核级线程的优点,通过用户级线程库进行线程管理和调度,但在需要时可以利用内核级线程实现线程并行执行,避免了用户级线程的一些限制。 在不同的操作系统和平台...

    哈工大操作系统-L11内核级线程1

    在操作系统中,线程是程序执行的基本单元,分为用户级线程和内核级...总结来说,内核级线程和用户级线程各有优缺点,适用于不同的应用场景。理解这两种线程的工作原理对于优化系统性能和设计高效的并发程序至关重要。

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

    根据线程的管理和调度是在用户空间还是内核空间进行,线程可以分为用户级线程和内核级线程。 **用户级线程**,也称为用户级线程(User-Level Threads,ULT),是由应用程序自身通过线程库来管理和调度的。操作系统...

    系统线程(内核线程)和用户线程区别 - 简书.pdf

    系统线程和用户线程的主要区别在于它们的实现和应用方式系统线程是由操作系统内核创建和撤销的,而用户线程是用户程序中实现的线程。系统线程需要内核的支持和参与,而用户线程不需要内核的支持和参与。 在现代语⾔...

    操作系统(进程和线程创建及其线程模型).docx

    尽管用户级线程和内核级线程在实现上有很大差异,但它们都属于线程的一种形式,并且都旨在提高并发执行能力。无论是哪种类型的线程,它们都共享同一个进程的资源,包括地址空间、文件句柄等。此外,它们都是为了提高...

    操作系统精髓与设计原理-第4章线程_对称多处理和微内核宣贯.pdf

    五、用户级线程和内核级线程的比较 用户级线程相比内核级线程具有三个优点:(1)线程切换不需要内核模式的特权,(2)调度算法可以根据应用程序的需求进行调整,(3)用户级线程可以在任何操作系统中运行,不需要...

    2.1_6_线程的实现方式和多线程模型1

    多线程模型是指用户级线程和内核级线程之间的映射关系。常见的模型有: 1. 一对一模型:每个用户级线程都映射到一个内核级线程。这种模型能够提供良好的并发性能,但可能因为每个用户线程都需要一个内核线程而消耗...

    linux系统线程的结构分析

    线程模型通常分为核心级线程(Kernel-Level Threads, KLTs)和用户级线程(User-Level Threads, ULTs)。核心级线程由内核调度,更适合SMP系统,而用户级线程的调度在用户态完成,上下文切换开销小。现代操作系统...

    哈工大 操作系统 实验8 内核级线程

    与用户级线程(User-Level Threads,ULT)不同,内核级线程由操作系统内核直接管理,具备以下特点: 1. **调度与切换**:内核级线程的调度和切换操作都在内核模式下完成,因此可以快速地进行线程上下文的切换,提高...

    Linux 多线程开发技术

    为了结合用户级线程和内核级线程的优点,同时也避免它们各自的缺点,开发了一种称为混合线程模型的技术。这种模型允许程序员在同一程序中使用不同类型的线程。 - **调度层次**: 在混合模型中,存在两层调度:用户级...

    Unix下用户级线程库

    与内核级线程(Kernel-Level Threads, KLTs)不同,用户级线程的调度和管理全部由应用程序自身或者特定的线程库负责,而不是由操作系统内核直接支持。这个压缩包提供的就是一个简单的用户级线程库实现,对于学习和...

    操作系统-4.2-线程模型1

    4. 混合模型:这种模型结合了用户级线程和内核级线程的特点,通常在用户空间有一个线程库,同时内核也支持线程。这样,用户级线程可以快速地在本地CPU上进行上下文切换,而内核则负责跨CPU的线程调度。 二、几种...

    Linux真正的线程实现机制

    但在现代Linux发行版中,主要采用的是混合线程模型(Hybrid Model),即NPTL(Native POSIX Threads Library)模型,该模型结合了用户级线程和内核级线程的优点,既提供了良好的性能又保持了系统的高效性。...

    Linux 线程实现分析

    - **混合模型(Mixed Model)**:混合模型结合了核心级线程和用户级线程的优点。在这种模型中,一个核心线程可以代表多个用户级线程,这样既可以在多处理器系统中高效地利用硬件资源,又能减少线程切换的开销。 #### ...

    Linux下的LWP(轻量级进程)、进程、线程、用户级线程、内核线程

    本文主要讲解了Linux下的LWP(轻量级进程)、...、线程、用户级线程、内核线程的概念、区别与联系、优缺点、发展等相关内容。 本文来自于CSDN,由火龙果软件Linda编辑、推荐。 再看正文之前我要先强调一下几点: 1.Li

    78-教学课件-线程概念1

    其次,多线程模型分为用户级线程和内核级线程。用户级线程仅对程序员可见,不被内核感知,线程的管理由用户空间的线程库负责,创建和调度快速,但当一个线程因系统调用阻塞时,整个进程都会受到影响。内核级线程则由...

    c++多线程 Linux版本

    1.线程的基础 进程是资源管理的最小单位,线程是程序执行最小单位。 每个进程有自己的数据段,代码段和堆栈段。线程通常叫做轻型的...线程按照其调度者可分为用户级线程和内核级线程两种 用户级线程:主要解决的是上

    玩转多线程编程.pptx

    多线程编程可以分为两类:用户级线程和内核级线程。用户级线程是在用户空间中实现的线程,内核级线程是在内核空间中实现的线程。 LinuxThreads 是一种通用的线程库,提供了线程的创建、管理和同步机制。NPTL...

Global site tag (gtag.js) - Google Analytics