zoukankan      html  css  js  c++  java
  • 进程与线程

    为什么要引入进程和线程的问题呢?

    综述

    一项新概念的引入一般都是为了更好的描述或构建一个新的体系。进程与线程也不外乎如此。
    进程是在多道程序系统中引入,但直到目前为止,进程的定义也未能完全统一。而线程则出现的较晚,但却是弥补了进程的一些缺陷,所以线程又名轻进程。

    进程

    关于进程这一概念的解释有很多种,但这些解释都具有同一个特性——强调程序的执行,即进程所具有的一种动态特性,这是进程与程序间本质上的差异。

    进程与程序的区别:

    1. 程序是静态的,进程是动态的。
    2. 程序可通过存储介质长期保存,进程具有生命周期
    3. 程序和进程是一对多的关系,而进程和程序确只能是一对一

    关于进程,我们做出如下讨论。

    进程的类型

    1. 系统进程:也称守护进程,一个系统进程所完成的任务是相对独立和具体的,其优先级高于用户进程。
    2. 用户进程:在操作系统之上运行的所有应用程序都称为用户进程。

    无论是系统进程还是用户进程,都具有:
    并发性,动态性,独立性,交互性,异步性,结构性等几大特性。

    注意:进程是调度的基本单位

    进程的状态

    基本状态有三种:

    1. 运行态(Run):进程占有处理器资源,正在运行。
    2. 就绪态(Ready):进程等待处理器资源,已具备运行条件。
    3. 等待态(Wait):不具备运行条件。

    进程状态转换:
    运行->就绪:剥夺进程所占有的处理器资源(也可能是进程正常执行结束)。
    运行->等待:等待某事件的发生。
    就绪->运行:分配进程处理器资源。
    就绪->等待:不存在。
    等待->就绪:进程所等待的事件以发生,当前正在等待处理器资源。
    等待->运行:不存在。

    NOTE:
    非抢占式调度,不存在运行->就绪的状态转换。
    处理器调度算法对于进程的状态转换具有直接的影响,如上所述即为一种情况。

    进程的组成

    进程控制块(PCB)

    进程控制块是标志进程存在的数据结构(对用户透明),在其中包含系统对进程管理所需要的全部信息。

    PCB中所包含的信息数量与系统规模,功能成正相关关系。

    建立进程->建立PCB
    撤销PCB->撤销进程

    程序

    1. 代码:不采用绝对地址,采用相对地址。
    2. 数据:一般包含静态变量,动态堆(保存动态变量)以及动态栈。

    进程的管理

    进程队列

    1. 就绪队列:根据调度算法确定,一般来说,整个系统就只有一个。
    2. 等待队列:与事件个数对等,即每个等待事件有一个等待队列。
    3. 运行队列:与处理器个数有关,每个CPU有一个。

    创建与撤销

    1. 创建:
      • 建立一个进程控制块
      • 初始化该进程控制块
      • 为该进程分配存储空间
      • 加载所要执行的程序
      • 将进程控制块送入就绪队列

    由父进程创建的子进程是其全盘复制,即子进程除了进程号与父进程不一致外,其他均相同。

    1. 撤销:
      • 撤销进程的内存分配
      • 撤销进程控制块
      • 通知父进程

    进程的撤销的原因可以是正常执行结束,也可以是进程执行是发生错误而结束。

    进程间关系

    逻辑关系:

    1. 相关进程: 具有逻辑联系
    2. 无关进程:无任何逻辑联系

    相互作用:

    1. 直接相互作用: 不需要第三方而发生相互作用

    只能发生在相关进程之间。

    1. 间接相互作用: 需要第三方才能发生作用

    线程

    线程与进程相类似,所以又成线程为轻进程,但线程是进程内的一个相对独立的执行流,即一个线程包含多个线程。

    进程内的多个线程执行同一程序中相同或不同代码段,共享数据区和堆。
    进程是资源的分配单位,线程是CPU的调度单位。

    线程的结构

    线程控制块(TCB)

    TCB中内容较少,因为大多数内容是记录在进程中。
    线程的实现方式决定TCB的归属。

    TCB归属:操作系统空间,用户进程空间。

    线程实现

    1. 核心级别线程(KLT)

      • 并发行好
      • 真正并行
      • 系统开销大
      • 进程状态不具有实际意义
    2. 用户级别线程(ULT)

      • 灵活
      • 实现效率高
      • 不能实现并行
    3. 混合线程

    引入多线程

    当一个应用中进程间的功能有所重叠(如具有相同的代码和数据),此时如果采用多进程的方式,那么对于系统来说,系统开销是非常巨大的。
    所以多线程的引入成为了必需:

    1. 同一进程的多个线程间可共享内存,合作完成某项功能。
    2. 同一进程的多个线程间切换速度快。
    3. 提高处理器与设备之间的并行性。
    4. 多处理器环境下,多线程可并行执行(不同进程)。

    只有当同一进程中的多个线程具有相同代码和数据,或者这些线程之间是合作(执行代码不同部分)的,或者是同构(执行相同代码)。才可以采用多线程处理模式。

    小结

    程序是进程的组成部分,进程是为了执行对应的程序而存在的,如此可知没有程序,进程也失去了讨论的意义。
    而没了进程,线程也就不复存在了。

    本文首发于个人博客,欢迎来撩啊^-^。
  • 相关阅读:
    Running APP 使用说明
    Android 控件八 WebView 控件
    Android 控件七 ImageView 控件
    Android 控件六 CheckBox 控件
    Android 控件五 RadioButton 控件
    Android 控件四 EditText 控件
    Android 控件三 TextView 控件实现 Button
    Android 控件二 Button
    Android 基础控件演示实例
    Android 控件一 TextView
  • 原文地址:https://www.cnblogs.com/keepsmart/p/11368485.html
Copyright © 2011-2022 走看看