`
cloudeagle_bupt
  • 浏览: 547620 次
文章分类
社区版块
存档分类
最新评论

进程,轻量级进程,内核线程,用户线程的区别关系

 
阅读更多

进程,轻量级进程,内核线程,用户线程的区别关系

在现代操作系统中,进程支持多线程。进程是资源管理的最小单元;而线程是程序执行的最小单元。一个进程的组成实体可以分为两大部分:线程集合资源集。进程中的线程是动态的对象;代表了进程指令的执行。资源,包括地址空间、打开的文件、用户信息等等,由进程内的线程共享。

线程有自己的私有数据:程序计数器,栈空间以及寄存器。

Why Thread?(传统单线程进程的缺点)

1. 现实中有很多需要并发处理的任务,如数据库的服务器端、网络服务器、大容量计算等。

2. 传统的UNIX进程是单线程的,单线程意味着程序必须是顺序执行,不能并发;既在一个时刻只能运行在一个处理器上,因此不能充分利用多处理器框架的计算机。

3. 如果采用多进程的方法,则有如下问题:
a. fork一个子进程的消耗是很大的,fork是一个昂贵的系统调用,即使使用现代的写时复制(copy-on-write)技术。
b. 各个进程拥有自己独立的地址空间,进程间的协作需要复杂的IPC技术,如消息传递和共享内存等。

多线程的优缺点

多线程的优点和缺点实际上是对立统一的。

支持多线程的程序(进程)可以取得真正的并行(parallelism),且由于共享进程的代码和全局数据,故线程间的通信是方便的。它的缺点也是由于线程共享进程的地址空间,因此可能会导致竞争,因此对某一块有多个线程要访问的数据需要一些同步技术。

三种线程——内核线程、轻量级进程、用户线程

内核线程

内核线程就是内核的分身,一个分身可以处理一件特定事情。这在处理异步事件如异步IO时特别有用。内核线程的使用是廉价的,唯一使用的资源就是内核栈和上下文切换时保存寄存器的空间。支持多线程的内核叫做多线程内核(Multi-Threads kernel )。

轻量级进程[*]

轻量级线程(LWP)是一种由内核支持的用户线程。它是基于内核线程的高级抽象,因此只有先支持内核线程,才能有LWP。每一个进程有一个或多个LWPs,每个LWP由一个内核线程支持。这种模型实际上就是恐龙书上所提到的一对一线程模型。在这种实现的操作系统中,LWP就是用户线程。

由于每个LWP都与一个特定的内核线程关联,因此每个LWP都是一个独立的线程调度单元。即使有一个LWP在系统调用中阻塞,也不会影响整个进程的执行。

轻量级进程具有局限性。首先,大多数LWP的操作,如建立、析构以及同步,都需要进行系统调用。系统调用的代价相对较高:需要在usermode和kernel mode中切换。其次,每个LWP都需要有一个内核线程支持,因此LWP要消耗内核资源(内核线程的栈空间)。因此一个系统不能支持大量的LWP。

注:

1 LWP的术语是借自于SVR4/MP和Solaris 2.x。

2 有些系统将LWP称为虚拟处理器。

3 将之称为轻量级进程的原因可能是:在内核线程的支持下,LWP是独立的调度单元,就像普通的进程一样。所以LWP的最大特点还是每个LWP都有一个内核线程支持。

用户线程

LWP虽然本质上属于用户线程,但LWP线程库是建立在内核之上的,LWP的许多操作都要进行系统调用,因此效率不高。而这里的用户线程指的是完全建立在用户空间的线程库,用户线程的建立,同步,销毁,调度完全在用户空间完成,不需要内核的帮助。因此这种线程的操作是极其快速的且低消耗的。

上图是最初的一个用户线程模型,从中可以看出,进程中包含线程,用户线程在用户空间中实现,内核并没有直接对用户线程进行调度,内核的调度对象和传统进程一样,还是进程本身,内核并不知道用户线程的存在。用户线程之间的调度由在用户空间实现的线程库实现。

这种模型对应着恐龙书中提到的多对一线程模型,其缺点是一个用户线程如果阻塞在系统调用中,则整个进程都将会阻塞。

加强版的用户线程——用户线程+LWP

这种模型对应着恐龙书中多对多模型。用户线程库还是完全建立在用户空间中,因此用户线程的操作还是很廉价,因此可以建立任意多需要的用户线程。操作系统提供了LWP作为用户线程和内核线程之间的桥梁。LWP还是和前面提到的一样,具有内核线程支持,是内核的调度单元,并且用户线程的系统调用要通过LWP,因此进程中某个用户线程的阻塞不会影响整个进程的执行。用户线程库将建立的用户线程关联到LWP上,LWP与用户线程的数量不一定一致。当内核调度到某个LWP上时,此时与该LWP关联的用户线程就被执行。

小结:

很多文献中都认为轻量级进程就是线程,实际上这种说法并不完全正确,从前面的分析中可以看到,只有在用户线程完全由轻量级进程构成时,才可以说轻量级进程就是线程。

分享到:
评论

相关推荐

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

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

    进程 线程 轻量级线程1

    线程的执行是由系统内核来管理的,通常被称为内核线程或者k-线程。不同于由操作系统内核调度的线程,轻量级线程由应用级线程调度程序来负责调度。轻量级线程也有它的缺点

    linux多线程及网络编程

    内核线程,在有的系统上称为LWP(Light Weight Process,轻量级线程),运行在内核空间,由内核调度;用户线程运行在用户空间,由线程库来调度。当进程的一个内核线程获得CPU的使用权时,它就加载并运行一个用户线程。...

    操作系统进程、线程、协程之间的关系

    协程是用户态的轻量级线程,可以在用户态下实现线程的调度和切换,避免了内核态的切换开销。 四、进程、线程、协程之间的关系 进程、线程、协程都是操作系统中重要的组成部分,它们之间存在着紧密的联系。进程是一...

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

    11级本人自写的作业, 于实验八截至后第一天上传; 没采用轻量级风格的线程, 而是仿造windows solaris的风格. 应该好使, 欢迎讨论, 联系方式在下载包内.

    LINUX系统下多线程与多进程性能分析.pdf

    线程又称为轻量级进程(LWP),是程序执行的最小单元。一个进程至少需要有一个线程来执行指令。线程也具有自己的可执行程序、专用系统堆栈空间、私有的“进程控制块”(即task_struct数据结构),但没有自己的存储...

    Java与线程.pdf

    线程是比进程更轻量级的调度执行单位,它可以将一个进程的资源分配和执行调度分开,既可以共享进程资源,又可以独立调度。线程的实现有两种方式:用户线程和内核线程。 用户线程是在用户态中实现的,不需要内核的...

    基于Linux内核的进程检查点系统设计与实现.pdf

    7. Linux内核线程:是一种轻量级的线程机制,用于实现检查点与恢复内核模块。 8. 内核模块:是一种加载到内核中的模块,用于实现检查点与恢复功能。 9. 检查点函数库:是一种提供给用户的接口,用于实现具体的检查...

    疯狂内核之——进程管理子系统

    1.2 Linux的线程——轻量级进程 15 1.3 进程的创建——do_fork()函数详解 19 1.4 执行进程间切换 33 1.4.1 进程切换之前的工作 33 1.4.2 进程切换实务 —— switch_to宏 37 1.4.3 __switch_to函数 39 1.5 fork与...

    Java线程实现与安全

    首先并发并不是我们通常我们认为的必须依靠线程才能实现,但是在Java中并发的实现是离不开线程的,线程的主要实现有三种方式:使用内核线程(KernelThread,KLT)实现使用用户线程实现使用用户线程加轻量级进程混合...

    linux编程面试题.pdf

    Solaris 的二级线程模型将进程中的内核线程分为两级:轻量级进程和用户线程。轻量级进程允许进程中的每个内核线程,获得与同一进程中的其他内核线程无关的系统调用。Solaris 的调度类有 TS(分时)、IA(交互类)、...

    linux系统编程之线程.zip

    LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下) 进程:独立地址空间,拥有PCB 线程:也有PCB,但没有独立的地址空间(共享) 区别:在于是否共享地址空间。 独居(进程);合租(线程)。 ...

    Linux多线程编程.pdf

    1. 线程基本概念:Linux中的线程是轻量级线程,线程调度是由内核调度程序完成的,每个线程有自己的ID号。 2. 线程分类:Linux线程分为两类,一是核心级支持线程,二是用户级支持线程。 3. 线程创建:系统创建线程时...

    【Java面试】为什么引入偏向锁、轻量级锁,介绍下升级流程.doc

    需要将锁升级到轻量级锁,在轻量级锁状态下,竞争锁的线程根据自适应自旋次数去尝试抢占锁资源,如果在轻量级锁状态下还是没有竞争到锁,就只能升级到重量级锁,在重量级锁状态下,没有竞争到锁的线程就会被阻塞,...

    uThreads:用C ++实现的并发用户级线程库

    用户级线程是轻量级线程,它们在内核线程之上执行以提供并发性和并行性。 内核线程是使用处理器所必需的,但是它们具有以下缺点: 每个挂起/恢复操作都涉及内核上下文切换线程抢占会导致额外的开销线程优先级和高级...

    操作系统面经.docx

    线程也被称为轻量级进程。每个进程拥有独立的地址空间,但同一进程的线程共享本进程的地址空间。进程之间的资源是独立的,但同一进程内的线程共享本进程的资源。 3. 进程和线程的特点 进程的特点是:每个进程拥有...

    操作系统答案2.doc

    一般来说,用户线程之间的上下文切换 涉及到用一个用户程序的轻量级进程(LWP)和用另外一个线程来代替。这种行为 通常涉及到寄存器的节约和释放。 4.3在哪些情况下使用多内核线程的多线程方案比单处理器系统的单个...

    一个进程池的服务器程序

    总的来说,思想是让子进程accept并处理请求,父进程通过子进程发来的信息控制请求数与子进程数之间的关系。 代码如下: 代码如下: #include #include #include #include #include #include #include #...

    java开发面试常见的操作系统、python基础相关的技术点介绍以及面试问题解答

    答案:进程是资源分配的基本单位,线程是 CPU 调度的基本单位,协程是一种用户态的轻量级线程。 2. 线程、协程的对比? 答案:一个线程可以多个协程,一个进程也可以单独拥有多个协程,这样 python 中则能使用多核...

Global site tag (gtag.js) - Google Analytics