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

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

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

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

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

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

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

    • 挂起进程模型

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

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

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

    • 线程 = 进程 - 共享资源

    • 优点

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

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

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

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

        • 特征:

          • 不依赖操作系统的内核

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

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

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

        • 缺点:

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

  • 相关阅读:
    Visual Studio 2010使用Visual Assist X的方法
    SQL Server 2000 评估版 升级到 SQL Server 2000 零售版
    双网卡多网络单主机同时访问
    开发即过程!立此纪念一个IT新名词的诞生
    delphi dxBarManager1 目录遍历 转为RzCheckTree2树
    5320 软件集合
    delphi tree 从一个表复制到另一个表
    DELPHI 排课系统课表
    长沙金思维 出现在GOOGLE的 金思维 相关搜索里啦!!
    如何在DBGrid的每一行前加一个单选框?
  • 原文地址:https://www.cnblogs.com/honey-cat/p/14697325.html
Copyright © 2011-2022 走看看