第四课:程序(Program)和进程(Process)

很多新手会说:

程序就是进程。

其实这是 错误的

我们先不要看教材定义,先来看一个生活中的例子。


先讲一个故事

假设你去饭店。

厨师有一本:

《宫保鸡丁菜谱》

菜谱里面写着:

第一步:

切鸡肉

↓

第二步:

放油

↓

第三步:

放辣椒

↓

第四步:

翻炒

请问:

菜谱是不是一道菜?

不是。

它只是:

做菜的方法。


然后:

厨师开始真正做菜。

这个时候:

锅已经热了。

鸡肉已经切好了。

锅里放了多少油。

炒到第几步。

这些信息都在不断变化。

这时候:

真正做菜的过程 ,才是进程。

所以:

菜谱
↓

程序(Program)

----------------------

真正炒菜

↓

进程(Process)

再举一个电脑例子

你的电脑里有:

QQ.exe

它静静躺在:

D:\QQ\

它有没有运行?

没有。

它只是一个文件。

所以:

程序 = 存放在磁盘上的静态文件。


现在:

你双击QQ。

发生了什么?

QQ.exe

↓

Windows加载

↓

进入内存

↓

CPU开始执行

↓

QQ窗口出现

这个时候:

QQ已经变成:

进程。


官方定义(翻译成人话)

教材:

程序是指令的集合。

翻译:

就是:

一个普通文件。

例如:

QQ.exe

微信.exe

Chrome.exe

都是程序。


教材:

进程是程序的一次执行过程。

翻译:

程序:

只是躺在那里。

进程:

已经开始跑了。


最重要的一句话(考试必考)

程序是静态的。

进程是动态的。

一定要记住。

我们来对比。

程序(Program) 进程(Process)
静态 动态
存在磁盘 存在内存
不占CPU 正在使用CPU
永久存在 会创建、结束
可以被复制很多次 每次运行都会产生新的进程

一个程序可以产生多个进程吗?

答案:

当然可以。

例如:

打开QQ。

再打开一个QQ。

再打开一个QQ。

电脑里:

QQ.exe

↓

进程1

↓

进程2

↓

进程3

是不是:

一个程序。

三个进程。

所以:

一个程序可以对应多个进程。


为什么需要进程?

现在有一个问题。

假设:

浏览器正在播放视频。

突然:

CPU切去运行QQ。

过了一会儿:

再回来。

CPU怎么知道:

浏览器刚才执行到了哪里?

例如:

浏览器程序:

① 读取视频

↓

② 解码

↓

③ 播放声音

↓

④ 显示画面

CPU切走以后。

回来:

怎么知道:

现在应该执行:

②?

还是③?

必须有人记住。

于是:

操作系统为每一个进程建立:

身份证。

教材叫:

PCB(Process Control Block,进程控制块)


PCB是什么?

PCB就是:

进程档案。

我们举个学生档案的例子。

学校不会只记:

张三

还会记:

姓名

学号

班级

成绩

联系方式

同样:

操作系统也要记录:

QQ

↓

运行到哪里

↓

用了多少内存

↓

优先级

↓

打开了哪些文件

这些全部放进:

PCB。


PCB里面有什么?

教材一般会分四类。

我们先理解,不要求背。


① 进程标识信息

例如:

PID = 1024

每个进程:

都有自己的身份证号。

Linux:

ps

看到的:

PID

1024

1031

2056

就是:

进程编号。


② CPU现场

这是最重要的。

例如:

CPU刚刚运行到:

第200行代码。

突然:

CPU去运行微信。

回来以后。

必须继续:

第201行。

所以:

PCB里面要保存:

CPU寄存器

程序计数器(PC)

栈指针

现在不用死记,知道作用即可:

保存运行现场。


③ 资源信息

例如:

QQ:

用了:

500MB内存

打开:

聊天.db

头像.png

这些:

PCB都要记录。


④ 调度信息

操作系统要决定:

谁先运行?

所以:

PCB里面还有:

优先级

状态

等待时间

以后讲调度算法会详细说。


PCB为什么重要?

一句话:

PCB是进程存在的唯一标志。

什么意思?

很多同学误以为:

程序在内存里就是进程。

其实不是。

真正让操作系统认识一个进程的是:

PCB

教材经常说:

创建进程,本质就是创建PCB。

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

这两句话非常重要。


一个完整的流程

当你双击QQ时,发生的是:

磁盘

QQ.exe
     │
     ▼
操作系统

① 创建PCB
② 分配内存
③ 加载程序
④ 分配资源
     │
     ▼
CPU开始运行
     │
     ▼
QQ进程

所以:

程序是原材料,进程是生产出来并正在运行的产品,PCB是它的身份证和档案。


今天最重要的一张图(一定记住)

程序(Program)
(磁盘上的静态文件)
          │
双击 / 操作系统加载
          │
          ▼
   创建 PCB(身份证)
          │
   分配内存、CPU等资源
          │
          ▼
   进程(Process)
(正在运行的程序)

本课重点总结(考试高频)

程序是静态的,进程是动态的。

程序存放在磁盘,进程运行在内存。

一个程序可以创建多个进程。

PCB(进程控制块)是进程存在的唯一标志。

创建进程 = 创建PCB;撤销进程 = 删除PCB。

下一课预告

下一课我们会学习 进程的三种基本状态(就绪、运行、阻塞)
这一节是整个进程管理的基础,也是 调度算法、同步、死锁 等内容的前置知识。你会明白为什么程序有时候"卡住了",其实并不是CPU在偷懒,而是进程进入了不同的状态。

继续下一课

很好,从这一课开始,我们真正进入 操作系统最经典、也是考试出现频率最高的知识点
​ > 这一节学会了,你就真正开始理解操作系统是怎么"管理程序"的。

Logo

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

更多推荐