0%

2.1_进程与线程

进程的概念、组成和特征

进程的概念

进程是进程实体的运行过程,是系统进行资源分配调度的一个独立单位。

视频讲解:可视化进程

视频讲解:从一个程序执行过程进一步理解进程,包括代码段和数据段

进程的组成

一个进程实体(进程映像)由PCB程序段数据段组成。

进程是动态的,进程实体是静态的。进程实体反映了进程在某一时刻的状态。

PCB

数据结构PCB ( Process Control Block),即进程控制块。操作系统需要对各个并发运行的进程进行管理,但凡管理时所需要的信息,都会被放在PCB中。

PCB是进程唯一的标识!

PCB中存储了包括PID,UID(进程所属用户ID),进程运行情况等相关信息

当进程结束后,系统会回收PCB。

程序段和数据段

程序段:程序所包含的指令

数据段:程序产生的数据(如各种变量)

进程的特征

动态性

进程是程序的一次执行过程,是动态地产生、变化和消亡的。

动态性是进程最基本的特征。

并发性

内存中有多个进程实体,各进程可并发执行

独立性

进程是能独立运行独立获得资源独立接受调度的基本单位。

异步性

各进程按各自独立的、不可预知的速度向前推进, 操作系统要提供“进程同步机制”来解决异步问题。

结构性

每个进程都会配置一个PCB。结构上看,进程由程序段、数据段、PCB组成。

进程的状态与转换

视频讲解:进程就绪态和阻塞态

视频讲解:进程终止态

视频讲解:进程五种状态转换

进程的状态

创建态

进程正在被创建。包括建立空白PCB,由系统为进程分配资源等。

就绪态

进程获得了除了处理机外的一切资源。一旦获得了处理机资源就可以立刻开始运行,系统中处于就绪态的进程可以有很多个,通常将它们排成一个队列,称为就绪队列

运行态

进程正在处理机上运行。单处理机情况下每个时刻最多只有一个进程在运行态。

阻塞态(等待态)

进程请求等待某个事件发生,在该事件完成前,即使处理机资源空闲,该进程也不能运行。例如请求了系统调用或者是等待某些资源。

中止态

进程正在结束。系统先将进程置为结束态,之后再进行资源的释放和回收等工作。

如果是多核CPU,可以存在多个运行态的进程

运行态、阻塞态和就绪态是进程的三种基本状态

进程状态的转换

image-20230320213843363

  • 两个不能
    • 不能直接由阻塞态到运行态
    • 不能直接由就绪态到阻塞态
  • 转变模式
    • 运行态到阻塞态一般是主动的行为
    • 阻塞态到就绪态是被动的行为

  • 题目1:进程的状态转换

I/O操作完成之前进程在等待结果,状态为阻塞态,完成后进程等待事件就绪,是就绪态

  • 题目2:进程状态与处理器效率关系

    进程的就绪数目越多,争夺CPU的进程就越多,但只要就绪队列不为空,CPU就一直保持繁忙,而当CPU不忙效率才下降


进程的组织方式

链式方式:将同一状态的PCB连接到同一个队列中;

索引方式:将同一状态的PCB放在一个索引表当中。

进程控制

进程控制是使用原语来实现的。

原语是指执行期间不允许中断的程序段,是一个不可分割的基本单位。

通过“关中断指令”和“开中断指令”实现了原语的原子性

进程的创建

创建原语

  1. 申请空白PCB
  2. 为进程分配所需资源
  3. 初始化PCB
  4. 将PCB插入就绪队列(创建态→就绪态

引起进程创建的事件

  • 用户登录
  • 作业调度(有新的作业将要运行
  • 提供服务
  • 应用请求(用户进程主动请求创建子进程

进程的终止

撤消原语

  1. 从PCB集合中找到终止进程的PCB
  2. 若进程正在运行,立刻剥夺CPU,将CPU分配给其他进程
  3. 中止其所有子进程
  4. 将该进程所有资源归还给父进程或是操作系统
  5. 删除PCB

引起进程中止的事件

  • 正常结束
  • 异常结束
  • 外界干预

举例:

A:对

B:虚拟地址空间不可共享

C:每个进程PCB都不一样

D:对


进程的阻塞和唤醒

阻塞原语和唤醒原语必须成对使用

阻塞原语

  1. 找到要阻塞进程对应的PCB
  2. 保护进程运行现场,将进程设置为阻塞态,暂时停止进程运行
  3. 将PCB插入对应事件的等待队列

引发阻塞的事件

  • 需要等待系统分配某种资源
  • 需要等待合作的其他进程完成工作

唤醒原语

  1. 在事件队列中找到对应的PCB
  2. 将PCB从等待队列移除,设置为就绪态
  3. 将PCB插入就绪队列,等待被唤醒

引发唤醒的事件

  • 等待的事件发生

进程的切换

切换原语

  1. 将运行环境信息存入PCB
  2. PCB移入相应队列
  3. 选择另一个进程执行,并更新其PCB
  4. 根据PCB回复进程所需的运行环境

运行环境:进程运行中的临时变量等视频讲解:运行环境

引起切换的事件

  • 当前进程时间片到
  • 更高优先级的进程到达
  • 当前进程主动阻塞
  • 当前进程中止

原语公共点

  1. 更新PCB中信息
  2. 将PCB插入合适队列
  3. 分配/回收资源

进程通信

视频讲解:进程通信需要操作系统支持的原因

共享存储

视频讲解:共享存储

  • 两个进程对共享空间的访问必须是互斥的。
  • 操作系统只提供共享空间同步互斥工具(如P,V操作)。

两种方式:基于数据结构的共享、基于存储区的共享

基于数据结构的共享

  • 只能共享固定的数据结构
  • 速度慢,是一种低级的共享方式

可以理解为低级全局变量

基于存储区的共享

  • 共享方式和大小由进程自己决定
  • 速度快,是一种高级的共享方式

管道通信

视频讲解:管道通信

管道实际上是一个固定大小的缓冲区

  • 管道通信只能实现半双工通信,想实现双向通信需要两个管道
  • 各个进程对管道的访问也需要是互斥的
  • 管道中没有写满(读空)时,不能向管道中再写(读)数据,会被阻塞
  • 从管道中读取数据是一次性的,数据一旦被读取就会从管道中抛弃
    • 一次只能有一个读进程
    • 但是可以有多个写进程

消息传递

视频讲解:消息传递

进程间的数据交换以格式化消息(message)为单位。

通过发送消息/接收消息两个原语进行数据交换

两种方式:直接通信方式、间接通信方式

直接通信方式

发送进程直接将消息发送到接收进程的消息缓冲队列中

间接通信方式

发送进程将消息发送到某个中间实体,一般称为_信箱_,接收端从中间实体接收消息

勘误


举例:两个进程交换数据的方法


线程的概念和特点

线程的概念

线程是程序执行的最小单元,是进程中的一个实体,是系统独立调度与分派的基本单位。

线程是程序执行的最小单元,是调度的基本单位

进程是资源分配的最小单元

线程的特点

  • 调度:线程作为独立调度的基本单位,进程内的线程调度不会引起进程切换,开销变小
  • 并发性:更好
    • 进程之间可以并发运行
    • 同一进程内的线程可以并发运行
    • 不同进程间的线程可以并发执行
  • 占有资源:线程几乎不占有资源
  • 独立性
    • 进程拥有独立的地址空间和资源
    • 同一进程内的线程共享地址空间和资源
  • 系统开销:当进行进程内线程的切换时,开销远小于进程
  • 支持多处理机系统:可以将多个线程分配给多个处理机运行

举例:

  • 题1:线程的特点
img

A:线程是处理机调度的基本单位,所以可以独立执行程序

B:线程没有自己独立的地址空间,而是共享所属进程的空间

C:进程能创建多个线程

D:由于共享内存空间,同一进程中的线程间通信无需使用系统调用函数

  • 题2:线程与进程的关系

    img

​ B,D:进程是资源分配的单位,内核级线程是处理器调度和分派的单位

​ A:假如有一个内核进程,映射到用户级后有多个线程,那么这些线程之间切换不需要内核级切换进程,也就不需要内核支持


线程的实现方式

线程库支持的线程(用户级线程 User-Level Thread, ULT)

视频讲解:用户级线程

  • 线程切换由应用程序负责,在用户态下即可完成

  • 线程表存储在用户空间,系统内核意识不到线程的存在

  • 调度

    • 操作系统为进程分配时间片

    • 用户的调度程序再讲时间片分给线程

  • 优点

    • 线程的切换在用户态即可完成,开销小、效率高
  • 缺点

    • 当一个线程被阻塞后,其他线程都会被阻塞,并发度不高

内核支持的线程(内核级线程 Kernel-Level Thread)

视频讲解:内核级线程

  • 内核级线程的管理工作由操作系统内核完成

  • 内核的切换需要在内核态下实现

  • 线程表存储在内核空间,内核态线程是操作系统内核能够看到的

  • 调度

    • 操作系统以线程为调度单位
  • 优点

    • 一个线程被阻塞后,其他线程继续运行,并发性强
  • 缺点

    • 线程的切换需要内核态,成本高、开销大

  • 题目1:内核级线程

    img

    A:内核级线程切换相当于进程切换,所以系统开销大

    B:内核线程不会堵死,用户线程会

    C:内核线程之所以叫内核线程就是因为运行在内核,那么对应的进程也在内核

    D:同B

  • 题目2:用户级线程和内核级线程关系

img

A:没学到

B:用户级线程调度实际上调度对象是进程,所以需要内核参与

C:用户级线程实际上不存在,所以任何操作系统都能运行

D:同B


多线程模型

视频讲解:多线程模型

一对一模式

一个用户级线程映射一个内核级线程(一个UTL一个TCB)

  • 并发能力强

  • 开销大

多对一模式

将多个用户级线程映射到一个内核级线程,等同于用户级线程(多个UTL一个TCB)

  • 效率高

  • 并发能力弱;多个线程不能并行的运行在多处理机上

多对多模式

将n个用户级线程映射到m个内核级线程上(m <= n)

线程的资源共享

  • 共享
    • 进程的虚拟地址空间
  • 独立

视频讲解:对于用户级线程和内核级线程之间通俗易懂的区分理解

用户级线程是代码逻辑的载体

内核级线程是运行机会的载体

线程的控制

线程的状态转换

线程的组织与控制

视频讲解:线程的组织与控制

将TCB组织成线程表进行管理