第六课:进程控制(Process Control)

这一课主要学习四个操作:

创建(Create)

↓

撤销(Terminate)

↓

阻塞(Block)

↓

唤醒(Wakeup)

其实,一个进程的一生,基本就是这四件事。


我们先看一个真实例子

假设你开机以后:

第一件事:

双击微信。

接着:

微信:

读取头像。

等待网络。

收到消息。

退出登录。

整个过程:

创建

↓

运行

↓

阻塞

↓

唤醒

↓

继续运行

↓

退出

↓

撤销

是不是:

已经包含四个操作?

所以:

进程控制就是:

管理进程的一生。


第一部分:创建进程(Create)

假设:

电脑里:

微信.exe

现在:

你双击。

操作系统会不会直接:

开始运行?

不会。

它要先做好准备。


创建进程需要做什么?

教材一般分四步。

我们换成人话。


第一步:申请PCB

还记得上一课吗?

PCB就是:

身份证。

所以:

操作系统先说:

新来了一个微信。

先建档案。

例如:

PID:

3001

于是:

PCB创建完成。


第二步:分配资源

微信需要:

内存:

600MB

操作系统:

先看看:

还有没有空闲内存。

如果:

没有。

怎么办?

有些系统:

可能等待。

有些:

可能拒绝。

总之:

资源必须先准备。


第三步:加载程序

微信还在:

硬盘。

现在:

复制到:

内存。

CPU以后:

只能执行:

内存里的代码。

这一点很重要。


第四步:进入就绪队列

很多人这里会错。

创建完成:

是不是马上运行?

不是。

为什么?

因为:

CPU:

可能正在运行:

浏览器。

所以:

微信:

只能:

创建

↓

进入就绪队列

↓

等待CPU

创建流程图

双击程序

↓

创建PCB

↓

分配资源

↓

装入内存

↓

进入就绪队列

↓

等待CPU

注意:

不是:

↓

立即运行

第二部分:撤销进程(Terminate)

什么时候:

进程结束?

例如:

你关闭QQ。

或者:

程序运行结束。

或者:

程序崩溃。

都会:

撤销。


撤销以后做什么?

操作系统:

首先:

回收资源。

例如:

释放:

CPU

内存

文件

网络

PCB

PCB:

也删除。

所以:

教材有一句:

撤销进程,本质就是撤销PCB。


一个生活例子

酒店:

客人退房。

酒店要:

收回房卡

↓

打扫房间

↓

删除入住记录

↓

准备下一位客人

这就是:

撤销。


第三部分:阻塞(Block)

上一课:

我们知道:

阻塞:

就是:

等待。

那么:

是谁让进程进入阻塞?

答案:

操作系统。


例如:

微信:

开始:

等待网络。

操作系统:

发现:

网络还没回来。

于是:

修改PCB:

状态:

Running

↓

Blocked

然后:

CPU:

马上:

去运行别人。


为什么不能一直等?

假设:

网络:

要:

2秒。

CPU:

如果:

一直等:

是不是:

浪费?

当然。

所以:

CPU:

立即:

运行:

浏览器。


第四部分:唤醒(Wakeup)

网络终于回来了。

例如:

图片:

下载完成。

谁告诉:

操作系统?

答案:

一般是:

中断。

(以后设备管理会详细讲。)

操作系统收到通知:

图片好了。

于是:

修改PCB:

Blocked

↓

Ready

注意:

这里:

不是:

Running。

为什么?

因为:

CPU:

可能:

还忙。

所以:

只能:

先排队。


为什么没有"运行→运行"?

很多同学问:

运行的时候:

是不是一直:

运行?

不是。

例如:

CPU时间片:

只有:

10ms。

微信:

运行10ms

↓

时间到了

↓

进入就绪

↓

以后再回来

所以:

操作系统:

一直:

修改PCB。


PCB到底有多重要?

现在:

你应该能理解:

为什么:

教材一直强调:

PCB。

因为:

所有控制:

都是:

修改PCB。

例如:

创建:

创建PCB

阻塞:

PCB状态:

Running

↓

Blocked

唤醒:

Blocked

↓

Ready

撤销:

删除PCB

所以:

可以说:

操作系统管理进程,本质上就是管理PCB。

这句话一定要记住。


一个完整例子

假设:

打开浏览器。

整个生命周期:

浏览器.exe(磁盘)

↓

创建PCB

↓

分配资源

↓

进入就绪

↓

获得CPU

↓

运行

↓

访问网页

↓

等待网络

↓

阻塞

↓

网页回来

↓

进入就绪

↓

再次运行

↓

关闭浏览器

↓

释放资源

↓

删除PCB

是不是:

所有知识:

串起来了?


本章知识总结

四个进程控制操作

操作 做什么
创建 建PCB、分配资源、进入就绪队列
撤销 回收资源、删除PCB
阻塞 等待事件,状态改为阻塞
唤醒 事件完成,状态改为就绪

状态变化总结

创建
  │
  ▼
就绪
  │(获得CPU)
  ▼
运行
 ├──────────────┐
 │              │
 │ 时间片到      │ 等待I/O等事件
 ▼              ▼
就绪          阻塞
 ▲              │
 └──── 事件完成 ─┘

最后:

运行结束

↓

撤销

↓

资源回收

今天补充一个考试常考点

很多同学会混淆:

创建(Create)唤醒(Wakeup)

对比一下:

创建 唤醒
新产生一个进程 已存在的进程恢复运行资格
需要创建PCB PCB已经存在
第一次进入就绪队列 从阻塞回到就绪队列

举例:

  • 第一次双击微信 → 创建
  • 微信等待网络,网络恢复 → 唤醒

下一课(真正进入高频考点)

下一课开始,我们进入 CPU调度

你会学习:

  • 为什么CPU要不停切换进程?
  • 什么是调度器(Scheduler)?
  • 什么是时间片(Time Slice)?
  • 为什么有的软件总是"反应快",有的软件却感觉很慢?

从下一课开始,就进入了考试中最重要的计算题部分(FCFS、SJF、时间片轮转等调度算法都会在这里展开)。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐