操作系统学习笔记之进程与线程

进程

进程:进程是具有独立功能的程序在某个数据集合上的一次运行活动,也是操作系统进行资源分配和保护的基本单位。

如果你熟悉面向对象编程,并熟知类与对象的概念。不妨这样理解进程和程序两者之间的关系:进程是程序的实例对象,程序是进程的类描述。
或者你也可以这样理解进程与程序:程序是建筑图纸,进程是房子施工建筑的过程。程序为进程的执行提供了规划模板,而进程则是程序的一次动态执行过程。

进程的属性

  1. 动态性:进程是程序在数据集合上动态执行的过程,基于不同的数据集合,程序可以同时创建多个进程。其次进程是具有生命周期的。而程序是静态的,是一种存储在磁盘中的资源文件。在日常工作中,很多时候都把程序和进程混为一谈,不加以区别,比如说:这个程序开始跑了——严格来说是进程在执行。不过一般情况下,也不需要对程序和进程这两个概念加以严格得区分。
  2. 独立性:每个进程都是操作系统中的一个独立实体,有自己的虚存空间,程序计数器和内部状态。
  3. 制约性:进程因共享资源或协同工作产生相互制约关系,造成进程执行速度的不可预测性。
  4. 并发性:多个进程的执行在时间段上是可以重叠的。比如将厨师当成CPU,那么假设煲汤为线程A、煮饭为线程B和炒菜为线程C。在厨师做菜的过程中,煲汤、煮饭和炒菜这三个任务是可以同时去做的。线程也是一样,在某个CPU执行时间段内,CPU并不会等待一个线程执行完再去执行下一个线程,而是不断的调度执行多个线程。

进程的状态

三态模型

  1. 运行态:进程占有CPU正在处理的状态。
  2. 就绪态:进程具备运行条件,等待系统分配CPU以便运行的状态。
  3. 等待态:进程需要等待某个事件完成,不具备运行的状态。

七态模型

  1. 新建态:进程被创建时的状态,尚未进入就绪队列。
  2. 就绪态:同三态模型。
  3. 挂起就绪态:当系统内存等资源不足时,就会将就绪态的进程从内存中剥离,对换到磁盘交换区中的状态。
  4. 挂起等待态:当系统内存等资源不足时,就会将等待态的进程从内存中剥离,对换到磁盘交换区中的状态。
  5. 运行态:同三态模型。
  6. 等待态:同三态模型。
  7. 终止态:进程完成任务结束,或是出现错误而异常终止,或被操作系统终止。最终,系统会将终止态的进程销毁掉。

进程的组成

  1. 进程控制块:即PCB,每个进程有且仅有一个PCB,并与之一一对应的,用来存储进程的标志信息、现场信息和控制信息。
  2. 进程程序块:被进程执行的程序,规定进程一次运行所应完成的功能。
  3. 进程核心栈:每个进程捆绑一个,并与之一一对应。进程在内核状态工作时使用,用来保存中断/异常现场,保存函数调用的参数、局部变量和返回地址。
  4. 进程数据块:时进程的私有地址空间,存放各种私有数据,用户栈也在数据块中开辟,用于在函数调用时存放栈帧、局部变量和返回地址等参数。

线程

线程是进程中能够并发执行的实体,是进程的组成部分,也是处理器调度和分派的基本单位。

如果进程是做菜这样简单的任务,可能还不需要引入线程。当进程是盖房子这样的任务时,就需要引入线程来提高系统资源的利用率和效率了。当建筑公司要修建多做房子时(一个CPU要执行多个进程),多个房子可以按照建筑的不同时期,建筑公司可以同时进行建筑。但由于线程的限制,建筑公司只能是,要么把所有的建筑资源建筑这套房子,要么把所有的建筑资源建筑那套房子。这样,在进程任务复杂之后,建筑公司调整安排建筑任务的资源浪费是十分巨大的(CPU在进行进程任务调度时的资源浪费)。所以为了减少这样的浪费,将进程的程序任务再进行分割小的,可并发的线程程序任务。这样,建筑公司就能够尽量完成某个建筑任务,再去完成其它的(减少CPU在进程之间的调度,转为对进程里多线程的调度)。

多线程结构进程.png

线程的优点

  1. 快速线程切换:同一进程中的多线程切换只需改变堆栈和寄存器,地址空间不变。
  2. 通讯易于实现:自动共享进程的内存和文件,线程可以自由访问全局数据,实现数据共享十分方便,线程通信相对简单不必经过内核。
  3. 减少管理开销:线程插件和撤销工作比进程少很多,并且无须再分配存储空间和各种资源。
  4. 并发程度提高:多线程适宜并发工作,能充分发挥处理器与设备的并行工作能力,是多核和多处理器系统的效能发挥更好。

线程的状态

在同一进程中的不同线程会竞争CPU和数据资源,而出现各种等待事件,继而存在各种状态。同线程一样,有运行、就绪、等待和终止状态。对于线程来说,它并不是资源拥有单位,其资源来自进程的共享。故而挂起状态对线程来说是没有意义的。

参考文献

[1] 费翔林,骆斌.操作系统教程[M].高等教育出版社,2014:71-85.

文章目录
  1. 1. 进程
    1. 1.1. 进程的属性
    2. 1.2. 进程的状态
      1. 1.2.1. 三态模型
      2. 1.2.2. 七态模型
    3. 1.3. 进程的组成
  2. 2. 线程
    1. 2.1. 线程的优点
    2. 2.2. 线程的状态
  3. 3. 参考文献