计算机操作系统6
第六课:进程控制(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、时间片轮转等调度算法都会在这里展开)。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)