进程与线程

作者: 贪婪的君子 | 来源:发表于2017-05-13 10:53 被阅读89次

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

综述


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

进程


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

进程与程序的区别:

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

进程的类型

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

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

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

进程的状态

基本状态有三种:

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

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

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

进程的组成

进程控制块(PCB)

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

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

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

程序

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

进程的管理

进程队列

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

创建与撤销

1.创建:

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

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

2.撤销:

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

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

进程间关系

逻辑关系:

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

相互作用:

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

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

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

线程


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

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

线程的结构

线程控制块(TCB)

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

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

线程实现

1.核心级别线程(KLT)

  • 并发行好
  • 真正并行
  • 系统开销大
  • 进程状态不具有实际意义

2.用户级别线程(ULT)

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

引入多线程

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

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

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

小结


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

相关文章

  • iOS_进程与线程(多进程与多线程)

    iOS_进程与线程(多进程与多线程)

  • Java 线程相关

    目录1.并行与并发2.进程与线程---- 2.1 进程---- 2.2 线程---- 2.3 进程与线程的区别--...

  • 并发编程之进程与线程

    并发编程之进程与线程 2.1 线程与进程 2.1.1 进程 2.1.2 线程 2.1.3 二者对比 2.2 并行与...

  • 进程与线程、线程池

    进程与线程的相关总结进程与线程的简单解释进程: 基本的资源分配资源线程: 最小调度单元 线程安全 线程安全是多线程...

  • 详解iOS面试:进程与线程

    进程与线程 进程 = 资源管理 + 线程, 进程是资源分配单位,线程是 CPU 调度单位 以前没有线程的时候,进程...

  • Python多线程与多进程

    内容简述: 线程与进程的相关概念1、程序,进程,线程,多进程,多线程2、线程的生命周期3、并行与并发,同步与异步4...

  • OpenMP笔记

    进程与线程 进程:进程是正在运行的程序实例线程:线程是进程中实际运作单位,一个进程可以并行多个线程 进程包含如下程...

  • java面试3

    1. 进程与线程的区别? 进程和线程的关系: 进程与线程的区别: 2.struts2和springMVC的区别? ...

  • 22.iOS底层学习之多线程原理

    本篇提纲:1、线程与进程2、多线程3、多线程相关面试题4、线程安全问题5、线程与runloop的关系 线程与进程 ...

  • GO学习笔记(18) - 并发编程(1) - 理解gorouti

    目录 进程、线程与协程 并发模模型介绍 GO并发编程介绍 进程、线程与协程 进程和线程 进程是程序在操作系统中的一...

网友评论

  • d4c608004d28:像是面向操作系统介绍的进程和线程的概念,有伪代码会更好,有小例子就更好了,up加油!

本文标题:进程与线程

本文链接:https://www.haomeiwen.com/subject/xxrxxxtx.html