7.1 进程的定义

image-20200424205148926
  • 定义:一个具有一定独立功能的程序在一个数据集合上一次动态的执行过程

    进程代表运行的程序的执行过程,需要消耗各种计算机的资源

    通过进程可以更好的表示程序的执行过程

    进程是程序动态执行的过程

7.2 进程的组成

进程的组成

  • 程序的代码
  • 程序处理的数据
  • 程序计数器中的值,指示下一条将运行的指令
  • 一组通用的寄存器的当前值,堆、栈
  • 一组系统资源(如打开的程序)

进程与程序的联系(多对多)

  • 程序是产生进程的基础
  • 程序的每次运行构成不同的进程
  • 进程是程序功能的
  • 通过多次执行,一个程序可对应多个进程;通过调用关系,一个进程可以包含多个程序

进程与程序的区别

进程 程序
动态的 静态的
暂时的 永久的
进程组成包含程序、数据、进程控制块 ……

7.3 进程的特点

  • 动态性:可动态的创建、结束进程
  • 并发性:进程可以被独立调度并占用处理及运行
  • 独立性:不同进程的工作不相互影响
  • 制约性:因访问共享数据/资源或进程间同步而产生制约

==程序 = 算法 + 数据结构==

描述进程的数据结构:进程控制块(Process Control Block,PCB)

操作系统为每个进程维护了一个PCB,用来保存与该进程有关的各种信息状态

7.4 进程的控制结构

进程控制块:操作系统管理控制进程运行所用的信息集合

操作系统用PCB来描述进程的基本情况以及运行变化的过程,PCB是进程存在的唯一标志

进程控制块的使用:

  • 进程的创建:生成PCB
  • 进程的终止:回收PCB
  • 进程的组织管理

PCB含有下列三大类信息:

  1. 进程标识信息(pid)

  2. 处理机状态信息保存区(状态信息)

    • 用户可见寄存器、用户程序可以使用的数据、地址等寄存器
    • 控制和状态控制器,如程序计数器(PC)、程序状态字(PSW)
    • 栈指针,过程调用/系统调用/中断处理和返回时用到
  3. 进程控制信息(控制信息)

    image-20200424212652589
image-20200424213026940

7.5 进程的生命周期原理

进程的生命周期管理:

  • 进程创建
  • 进程运行
  • 进程等待
  • 进程唤醒
  • 进程结束

进程创建

image-20200424213324923

进程运行

image-20200424213348158

进程等待

image-20200424213450286

进程唤醒

image-20200424213605087

进程结束

image-20200424213718947

7.6 进程状态变化模型

image-20200424213908227 image-20200424213934958 image-20200424214214017

7.7 进程挂起

image-20200424214727314

7.8 为什么使用线程

80年代中期,人们提出了比进程更小的能独立运行的基本单位——线程。

为什么要使用线程?

  • 案例:编写一个MP3播放软件

    核心模块功能:

    • 从MP3音频文件当中读取数据
    • 对数据进行解压
    • 把解压后的音频数据播放出来
    image-20200426101500455 image-20200426101537425

    如何来解决上述问题呢?

    我们需要一个新的实体来满足以下特性:

    • 实体之间可以并发的执行
    • 实体之间共享相同的地址

    这种实体就是,线程(Thread)

7.9 什么是线程

定义

线程是进程当中的一条执行流程。

进程的主要功能是管理资源,线程用来管理进程的执行资源。

特点

  • 线程 = 进程 - 共享资源

  • 线程的优点:

    • 一个进程中可以同时存在多个线程
    • 各线程之间可以并发地执行
    • 线程之间可以共享地址空间和文件等资源
  • 线程的缺点:

    • 安全可靠性没有保障,一个线程崩溃,会导致其所属的进程的所有线程崩溃

线程与进程比较

进程 线程
资源分配单位 CPU调度单位
拥有完整的资源平台 独享必不可少的资源,如寄存器、栈
具有就绪、阻塞、执行三种基本状态 具有就绪、阻塞、执行三种基本状态

线程能减少并发执行的时间和空间开销:

  • 线程的创建时间比进程短
  • 线程的终止时间比进程短
  • 同一进程内的线程切换时间比进程短
  • 由于同一进程的各线程间共享内存和文件资源,可直接进行不通过内核的通信

7.10 线程的实现

用户线程:在用户空间实现

操作系统看不到的线程

由专门的用户线程库来进行管理,包括线程的创建、终止、同步、调度等。

image-20200426103953516
  • 用户线程缺点:
    • 阻塞性的系统调用(读文件,可能发生阻塞),如果一个线程发起系统调用而阻塞,则整个进程在等待;
    • 当一个线程开始运行后,除非他主动交出CPU的使用权,否则他所在的线程当中的其他线程将无法运行;
    • 由于时间片分配给进程,故与其他进程相比,在多线程执行时,每个线程得到的时间片较少,执行较慢。

内核线程:在内核中实现

操作系统能够看到并进行管理的线程

由操作系统本身进行管理

image-20200426104620533

轻量级进程:在内核中实现,支持用户线程

内核支持用户线程。一个进程可有一个或多个轻量级进程,每个轻量级进程由一个单独的内核线程来支持。

image-20200426104921999

7.11 上下文切换

image-20200426105252010

image-20200426105318686image-20200426105516465

image-20200426105516465