zoukankan      html  css  js  c++  java
  • 线程、进程基础知识

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

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

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

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

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

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

    • 挂起进程模型

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

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

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

    • 线程 = 进程 - 共享资源

    • 优点

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

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

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

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

        • 特征:

          • 不依赖操作系统的内核

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

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

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

        • 缺点:

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

  • 相关阅读:
    使用Index()+Match()函数实现更为灵活的VLookUp()
    Hexo搭建博客笔记
    Jenkins自动化部署项目
    Ubuntu安装docker
    Ubuntu的简单使用
    ansible之Ad-Hoc
    redis的集群
    redis的主从复制和哨兵
    redis的持久化存储
    redis数据库基础
  • 原文地址:https://www.cnblogs.com/honey-cat/p/14697325.html
Copyright © 2011-2022 走看看