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

转载于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)资源调度按照进程进行,多个处理机下,同一个进程中的线程只能在同一个处理机下分时复用

时间: 2024-12-28 02:38:37

用户级线程和内核级线程的区别的相关文章

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

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

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

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

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

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

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

(转)用户级和内核级线程

转:http://book.51cto.com/art/201006/206946.htm 6.1.1  用户级线程和内核级线程 线程有3种实现模型: 用户级或应用程序级线程 内核级线程 用户级和内核级混合线程 图6-1显示了3种线程实现模型.图6-1(a)显示了用户级线程,图6-1(b)显示了内核级线程,图6-1(c)则显示了用户线程和内核线程的混合.   (点击查看大图)(a) 用户级线程   (点击查看大图)(b) 内核级线程图6-1   (点击查看大图)(c) 混合线程图6-1(续) 这

内核级线程与用户级线程

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

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

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

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

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

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

内核级线程(KLT)和用户级线程(ULT) tags: KLT ULT 内核级线程 用户级线程 引言:本文涉及到操作系统的内核模式和用户模式,如果不太懂的话,可以参看我的这篇文章内核模式和用户模式,其中简单的进行了介绍. 进程和线程 首先说一下线程对于进程的优势,这其实就是线程出现的意义. 进程是资源拥有的基本单位,进程切换需要保存进程状态,会造成资源的消耗.同一进程中的线程,共享进程获取的部分资源.在同一进程中,线程的切换不会引起进程切换,线程的切换需要的资源少于进程切换,可以提高效率. 内核