[操作系统] 线程管理

一、 为什么使用线程

  效率低下,多线程有效利用系统资源

  问题:进程之间如何通信,共享数据另外,维护进程的系统开销较大:创建进程时,分配资源、建立PCB;撤消进程时,回收资源、撤消PCB;进程切换时,保存当前进程的状态信息。

  需要提出一种新的实体,满足以下特性:

  (1)实体之间可以并发地执行;
  (2)实体之间共享相同的地址空间;

  从两个方面来理解进程

    1. 资源角度来看,进程把一组相关的资源组合起来,构成了一个资源平台,摆阔地址空间(代码段,数据段)、打开的文件等各种资源

    2. 运行的角度看,代码是在这个自由平台上的一条执行流程

  (所以,进程可以看为 资源管理,线程管理)

  线程可以同时共享进程的代码 数据资源

  

  线程优点

    1. 一个进程可以同时存在多个线程

    2. 各个线程之间可以并发的执行

    3. 各个线程之间可以共享地址空间和文件信息

  线程的缺点

    一个线程崩溃,会导致所属进程的所有线程崩溃 (不安全,安全可靠性没有保证)

  线程所需资源

  

  单个线程:进程空间里面只有一个控制流

  多个线程:进程空间有多个控制流 每个控制流还不一样,而且有多个堆栈和寄存器 但是能够共享代码段 数据段 打开的文件

  线程和进程的比较

    1. 进程的是资源分配单位,进程是CPU调度单位

    2. 进程拥有一个完整的资源平台,而线程只独享必不可少的资源,比如寄存器和堆栈

    3. 线程同样具有就绪、阻塞和执行三种基本状态,同样具有状态之间的转换关系

    4. 线程能减少并发执行的事件和空间开销

      线程的创建时间比线程短 (可以直接只用进程的相关资源)

      线程的终止时间被线程短

      同一进程内的线程切换比进程切换快 (所有线程在一个页表 切换的时候不需要切换页表)

      由于进程的各个线程之间可以共享内存和文件资源,可以不用过内核通信 (数据交换效率高)

线程的实现(三种) 

  用户线程:在用户空间实现

    POSIX Pthreads,Mach C-threads,Solars threads

  内核线程:在内核中实现

    Windows、Solaris、Linux

  轻量级进程:在内核中实现,支持用户线程

    Solaris (LightWeight Process)

  用户线程:操作系统不可见的  (由用户线程库管理)

  内核线程:由操作系统关系的 操作系统可见的  (操作系统本身管理)

  用户线程和内核线程的对应关系

    多对一:N个用户线程对应一个内核线程

    一对一:一个用户线程对应一个内核线程

    多对多:多个用户线程对应多个内核线程

  用户线程实现

    由TCB(Thread Control Block)控制管理 操作系统不可见 由线程库管理

    在用户空间实现的线程机制,它不依赖于操作系统的内核,由一组用户级的线程库函数来完成线程的管理,包括进程的创建、终止、同步和调度等。 

    

    ·由于用户线程的维护由相应进程来完成(通过线程库函数),不需要操作系统内核了解用户线程的存在,可用于不支持线程技术的多进程操作系统;
    ·每个进程都需要它自己私有的线程控制块(TCB)列表,用来跟踪记录它的各个线程的状态信息(PC、栈指针、寄存器),TC由线程库函数来维护
    ·用户线程的切换也是由线程库函数来完成,无需用户态/核心态切换,所以速度特别快
    ·允许每个进程拥有自定义的线程调度算法。

    

    用户线程缺点

      进程执行了一个阻塞的系统调用,那么整个进程都在等待  

      当一个线程开始运行之后,除非是主动交出CPU使用权,否则他所在的进程中的其他线程将无法运行

      由于时间片分配给进程,故与其他进程比,多线程在执行时,每个线程得到的时间片较少,执行较慢

      

内核线程

  TCB在在内核里面

  

  内核线程是指操作系统的内核当中实现的一种线程机制,由操作系统内核来完成线程的创建、终止和管理

    在支持内核线程的操作系统中,由内核来维护进程和线程的上下文信息(PCB和TCB)

    线程的创建、终止和切换都是通过系统调用/内核函数的方式来进行的,由内核完成,所以系统开销比较大 (每次都有从内核态到用户态的变化 开销大)

    在一个进程中,如果某个内核进程发起系统调用而被阻塞,并不会影响其他内核线程的运行

    时间片分配给线程,多线程的进程获得更多CPU时间

    Windows NT 和 Windows 2000/XP 支持内核线程

轻量级进程 (LightWeiht Process)

  它是内核支持的用户线程。一个进程可有一个或多个轻量级进程,每个量级进程由一个单独的内核线程来支持。(Solaris/Linux)

原文地址:https://www.cnblogs.com/cjdty/p/10912005.html