线程、进程基础知识

进程:具有一定独立功能的程序在一个数据集合一次动态执行的过程。
  • 是操作系统对处于执行状态的程序的抽象 - 是程序的执行,是暂时的(一个状态变化的过程)

  • 由程序、数据、进程控制块组成

  • 包含了一个正在运行的程序的所有信息

    • 动态性:可动态地创建、结束进程
    • 并发性:可被独立调度,占用处理机处理
    • 独立性:不同进程的工作不互相影响
    • 制约性:因访问共享数据、资源或进程间同步而产生制约
  • 进程控制块(PCB):控制、管理进程运行所需的信息集合

    • 是进程存在的唯一标志,在操作系统中,每个进程有一个对应的PCB
    • 在进程创建时生成,进程终止时回收
    • 通过对PCB的组织管理来实现对进程的组织管理
      • 调度和状态信息:调度进程和处理机使用情况
      • 进程间通信信息:进程间通信相关的标识
      • 存储管理信息:指向进程映像存储空间数据结构
      • 进程所用资源:进程使用的系统资源
      • 有关数据结构连接信息:PCB相关的进程队列
    • 同一状态的进程的PCB成一链表,各状态进程形成不同的链表。就绪链表、阻塞链表...
    • 同一状态的进程归入一个索引表(索引指向PCB),各状态的进行形成不同的索引表。就绪索引表、阻塞索引表...
  • 三状态进程模型

    • 就绪状态
    • 等待状态
    • 运行状态

  • 挂起进程模型

    • 处于挂起状态的进程映像在磁盘上,目的是减少进程占用内存
    • 等待挂起状态:进程在外存,等待某事件的出现
    • 就绪挂起状态:进程在外存,进入内存即可运行。(内存不够、优先级低...)
    • 挂起:把一个进程从内存转到外存
      • 等待->等待挂起:没有进程处于就绪状态/就绪进程要求更多的内存
      • 就绪->就绪挂起:有高优先级进程,低优先级进程挂起以保证有足够的内存空间
      • 运行->就绪挂起:有高优先级等待挂起进程因事件出现进入就绪挂起状态
    • 外存中的状态转换:
      • 等待挂起 -> 就绪挂起(相关事件出现)
      • 激活:一个进程从外存转到内存
        • 就绪挂起到就绪:没有就绪进程/挂起就绪进程优先级高于就绪进程
        • 等待挂起到等待:有足够的内存,等待挂起优先级较高
  • 状态队列:操作系统维护的一组队列,表示系统中所有进程的当前状态(就绪队列、各种等待队列)

线程:是进程的一部分,描述指令流的执行状态。是进程中指令执行流的最小单元,CPU调度的基本单位。
  • 进程的资源分配角色:一组相关资源 --> 地址空间(代码段,数据段),打开的文件等各种资源

  • 线程的处理机调度角色:线程描述在进程环境中指令流执行状态

  • 线程 = 进程 - 共享资源

  • 优点

    • 一个进程中可同时存在多个线程
    • 各线程间可并发地执行
    • 各线程间可共享地址空间、文件等资源
  • 确定

    • 一个线程的崩溃会导致所属进程的所有线程崩溃
  • 与进程比较

    • 进程是资源分配单位,线程是CPU调度单位
    • 进程拥有一个完整的资源平台,线程只独享指令流执行的必要资源:寄存器、栈等
    • 线程具有就绪、等待、运行三种基本状态和状态间转换
    • 线程能减少并发执行的时间、空间开销
      • 线程创建、终止的时间比进程短
      • 同一进程间线程切换时间比进程短
      • 同一进程的各线程共享文件、内存资源可不通过内核直接进行通信
  • 实现方式

    • 用户线程:在用户空间实现(通过函数库)
      • 由一组用户级的线程库函数来完成现成的管理(线程的创建、终止、同步、调度等)

      • 特征:

        • 不依赖操作系统的内核

          • 内核不了解用户线程的存在
          • 可用于不支持线程的多进程操作系统
        • 在用户空间实现的线程机制

          • 每个进程有私有的线程控制块(TCB)列表
          • TCB由线程库函数维护
        • 同一进程的用户线程切换速度快:无需用户态/核心态切换

        • 允许每个进程有自己的线程调度算法

      • 缺点:

        • 线程发起系统调用而阻塞时,整个进程进入等待
        • 不支持基于线程的处理机抢占:除非当前运行线程主动放弃,所在进程的其它线程无法抢占CPU
    • 内核线程:在内核中实现
      • 进程由内核通过系统调用实现线程机制,由内核完成线程的创建、终止、管理。
      • 特征:
        • 由内核维护PCB/TCB
        • 线程执行系统调用而被阻塞不影响其他线程
        • 线程创建、终止、切换相对较大:通过系统调用/内核函数,在内核实现
        • 以线程为单位进行CPU时间分配:多线程的进程可获得更多CPU时间
    • 轻权进程(LWP):结合前两者的优点(轻量级进程)-- 过于复杂,未完全实现预期效果
      • 内核支持的用户线程。一个进程可以有一个或多个轻量级进程,每个轻权进程由一个单独的内核线程来支持。
    • 轻量级线程:在内核中实现,支持用户线程

原文地址:https://www.cnblogs.com/honey-cat/p/14697325.html