【操作系统】2.1 进程概况

本文探讨了进程的定义、组成、组织方式及特征,深入解析了进程状态转换、控制原语和通信机制,包括线程概念、多线程模型与进程通信方法。重点讲解了创建、撤销、阻塞与唤醒原语,以及进程间和线程间的通信手段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 进程的定义、组成、组织方式、特征

定义

程序:就是一个指令序列。(静态概念)
进程是程序的一次执行,该程序可以与其他程序并发执行。(强调动态性)

组成

  1. PCB,进程控制块,是进程存在的唯一标志
  2. 程序
  3. 数据

PCB包含如下信息

  1. 进程描述信息
  2. 进程控制和管理信息
  3. 资源分配上清单
  4. 处理及相关信息

在这里插入图片描述

组织方式

在这里插入图片描述
链接方式
指针指向一个进程队列
在这里插入图片描述
索引方式
指针指向索引表
在这里插入图片描述

特征

在这里插入图片描述

2. 进程的状态与转换

进程的状态

在这里插入图片描述

进程是程序的一次执行。在这个执行过程中,有时进程正在倍CPU处理,有时又需要等待CPU服务,可见,
进程的三种基本状态:
在这里插入图片描述
进程的另外两种状态:
在这里插入图片描述

进程的转换

进程的基本调度状态:
在这里插入图片描述

3. 进程控制

3.1 什么是进程控制?

  进程的控制主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程、撤销已有进程、实现进程状态转换等功能。
  简而言之:进程控制就是要实现进程状态转换

3.2 如何实现进程控制?

  用原语实现进程控制。原语的特点是执行期间不允许中断,只能一气呵成。这种不可被中断的操作即原子操作。
  原语采用“关中断指令”和“开中断指令”实现。如图所示,使用了关中断指令之后,外部的中断信号不会影响原语代码的执行。
在这里插入图片描述
  关/开中断指令的权限是非常大,是只能在核心态下执行的特权指令。

3.3 进程控制原语:

  进程控制会导致进程状态的转换。无论是哪个原语,要做的无非三件事:

  1. 更新PCB中的信息
    - 所有的进程控制原语一定会修改进程状态标志
    - 剥夺当前运行进程的CPU使用权必然需要保存其运行环境
    - 某进程开始运行前必然要恢复其运行环境
  2. 将PCB插入合适的队列
  3. 分配/回收资源
创建原语:

创建原语执行步骤

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

引起进程创建的事件

  • 用户登录:分时系统中,用户登录成功,系统会为其建立一个新的进程
  • 作业调度:多道批处理系统中,有新的作业放入内存时,会为其建立一个新的进程
  • 提供服务:用户向操作系统提出某些请求时,会新建一个进程处理改请求
  • 应用请求:由用户进程主动请求创建一个子进程
撤销原语

  就绪态/阻塞态/运行态–>终止态
撤销步骤:

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

引起终止的事件:

  1. 正常结束
  2. 异常结束
  3. 外界干预
阻塞原语与唤醒原语

阻塞原语:运行态–>阻塞态
唤醒原语:阻塞态–>就绪态
阻塞原语执行步骤

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

引起阻塞的事件

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

唤醒原语执行步骤

  1. 在事件等待队列中找到PCB
  2. 将PCB插入相应事件的等待队列
  3. 将PCB插入就绪队列,等待被调度

引起唤醒的事件

  • 等待事件发生(因合适阻塞,就应由何事唤醒)

注意:阻塞原语和唤醒原语要成对出现

切换原语

运行态–>阻塞态/就绪态
就绪态–>运行态
切换原语执行步骤

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

引起进程切换的事件

  • 当前进程事件片到
  • 有更高优先级的进程达到
  • 当前进程主动阻塞
  • 当前进程终止

4. 进程通信

4.1 什么是进程通信?

在这里插入图片描述

共享存储

在这里插入图片描述

管道通信:

在这里插入图片描述

消息传递:

在这里插入图片描述
两种消息传递的区别是:

  • 直接通信方式是进程1直接将消息挂到进程2的消息队列上。
  • 间接通信方式是进程1通过发送原语将消息发送给信箱,进程2通过接收原语从信箱中取得消息。

5. 线程的概念和多线程模型

什么是线程,为什么要引入线程?

在这里插入图片描述

  • 可以把线程理解为“轻量级进程”。
  • 线程是一个基本的CPU执行单原,也是程序执行流的最小单元。
  • 引入线程后,不仅是进程之间可以并发,进程内的个线程之间也可以并发,进一步提升了系统的并发度,使得一个进程内也可以并发处理各种任务。
  • 引入线程后,进程制作为除CPU之外的系统资源的分配单元。

资源分配是分给进程的而不是分配给线程的。

引入线程机制后。有什么变化?

在这里插入图片描述

线程有哪些重要的属性

  • 线程是处理机调度的单位
  • 多CPU计算机中,各个线程可占用不同的CPU
  • 每个线程都有一个线程ID,线程控制块(TCB)
  • 线程也有就绪、阻塞、运行三种基本状态
  • 线程几乎不拥有系统资源
  • 同一进程的不同线程之间贡献进程的资源
  • 由于共享内存地址空间,同一进程中的线程间通信甚至无需系统干预
  • 同一进程中线程切换,不会引起进程切换
  • 不同进程中的线程切换,会引起进程切换
  • 切换同进程内的线程,系统开销很小
  • 切换进程,系统开销较大

线程的实现方式

用户级线程

  • 用户级线程有应用程序通过线程库实现
  • 所有的线程管理工作都由应用程序负责(包括线程切换)
  • 在用户看来,是有多个线程。但在操作系统意识不到线程的存在
  • 在这里插入图片描述

内核级线程(Kernel-Level Thread)

  • 内核级线程的管理工作由操作系统完成。线程调度,切换等工作都由内核负责,因此内核级线程的切换必然需要在核心态下才能完成。
  • “内核级线程”就是“从操作系统内核视角能看到的线程”
    在这里插入图片描述
    组合线程
    在这里插入图片描述

多线程模型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值