OS——线程

一、概念:线程(Thread)是进程的一个实体,被独立调度和分派的基本单元。

二、组成:每个线程都有一个线程控制块(Thread Control Block, TCB),用于保存私有信息

  1. 线程标识符,这是唯一的(与进程标识符类似)。
  2. 描述处理机状态信息的一组寄存器。
  3. 栈指针,每个线程包含两个栈:用户栈和核心栈。当线程在用户状态下运行时使用自己的用户栈;当线程在核心态下运行时,使用核心态。
  4. 私有存储区,存放现场保护信息和其他与该线程相关的统计信息。

三、线程与进程的比较

  1. 线程与进程的关系:每个进程都至少拥有一个线程,同时可以根据需要创建多个线程。多线程环境中,进程仍然拥有一个进程控制块(PCB)和用户地址空间。但每个线程都有自己独立的堆栈和线程控制块。线程自己基本上不拥有资源,只拥有少量的必不可少的资源。进程中的所有线程共享该进程中的资源。
  2. 线程的优势:1)线程的创建、切换和销毁都比进程花费的时间少;2)同一进程中的线程的通信效率高,不需要内核的支持就可以互相通信。

四、线程的实现

  1. 根据线程的切换是否依赖于内核可以把线程分成用户级线程和内核级线程。
  2. 用户级线程:线程的创建、切换和撤销都不利用系统调用实现。这种线程与内核无关,内核也不知道线程的存在。
    • 特点:
      1. 应用程序默认以一个线程开始执行,
      2. 线程的创建由线程库完成,线程库为新线程创建一个数据结构
      3. 线程是用户级实现的,内核并不知道线程的存在。
    • 优点:
      1. 线程的切换不需要系统状态的转换;
      2. 每个进程可以使用专用的线程调度算法调度线程
      3. 可以在任何操作系统中运行,不需要对底层操作系统进行修改。
    • 缺点:
      1. 用户级线程调用一个系统调用时,系统会认为是这个线程所在的进程的行为,因此该进程被阻塞。进程中所有的用户级线程都不能继续执行;
      2. 不能利用多处理机技术,即一个进程中至多只能有一个线程可以执行。
  3. 内核级线程:有关线程管理的所有工作都是由内核完成的。
    1. 系统的调度是基于线程的,处理机的切换是以线程为单位进行的。
    2. 内核级线程的调度是由系统的内核完成的,系统内核不需要考虑该线程属于哪个进程(当然系统内核是知道该线程是属于哪个进程的)。
    3. 进程只作为资源的拥有者,线程被视为调度的单位,每个进程至少拥有一个线程。
    4. 主要缺点:同一个进程内的线程切换需要内核状态的转换(即用户态到核心态的转换)。
  4. 用户级线程和内核级线程的主要区别:
    • 切换速度:同一个进程内,用户级线程的切换速度块,而内核级线程切换需要内核模式的转换,因而速度慢;不同进程内的线程切换,用户级线程不占优势(具体情形不清,有待学习)。
    • 阻塞:当用户级线程因阻塞时,导致它所在的整个进程进入阻塞;而内核级线程的阻塞,不会涉及它所在的进程。
  5. 组合方法:
    1. 用户可以在程序中建立多个用户级线程;系统中还设置有大量的内核级线程,内核中的所有工作都是由这些内核级线程去完成。
    2. 用户级线程和内核级线程之间定义了一种轻量级进程(Light Weight Process, LWP),每个LWP包含私有的进程控制块,其中包括进程的状态和寄存器数据等。每个LWP都要连接到一个内核级线程上。
    3. 只有连接到LWP上的用户级线程才能与内核通信,否则或阻塞或等待LWP。
    4. 同一个进程中,m个需要访问内核的用户级线程可以多路复用n个LWP(m>=n,n大了也没用),不需要访问内核的用户级线程则不用设置。
    5. 当某个进程中的一个用户级线程需要与内核通信时,它首先要与一个LWP相连(如果所有可用的LWP都被其他线程占用,则该线程必须等待,阻塞?),该LWP与一个内核级线程连接,如此就可以通过一个LWP把用户级线程与内核级线程连接起来,用户级线程可以通过LWP访问内核。
    6. 对于系统内核而言,它能感知LWP的存在,但是不知道用户级线程的存在。LWP很好的将用户级线程和内核级线程隔离。
    7. 当内核级线程发送阻塞时,与之相连的LWP也会阻塞,进而导致连接到LWP上的用户级线程也发生阻塞。
    8. 一个进程中所有的与之相连接的LWP互不影响,当其中一个LWP阻塞时,其他的LWP仍然可以继续运行;而且即使进程中所有的LWP全部阻塞,进程中的那些不需要访问内核的用户级线程仍然可以继续运行。

转载于:https://www.cnblogs.com/X-bluer/archive/2012/10/29/2745375.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值