二:操作系统之进程概念
揭秘操作系统核心:进程的生命旅程与五种状态
在现代计算机系统中,我们同时运行着各种各样的程序:浏览器、音乐播放器、文本编辑器、后台服务…… 操作系统如何有效地管理这些并发执行的任务,让它们既能共享系统资源,又不相互干扰,安全有序地运行?答案在于进程(Process)。
进程是操作系统中最基本、最重要的概念之一。理解进程,就是理解操作系统的核心工作之一。
1. 什么是进程 (Process Concept)?
最简单也最准确的定义:进程是程序的一次执行实例。
这句话包含了几个关键点:
- 程序 (Program): 程序是静态的,它是一组存储在磁盘上的指令集合。就像菜谱一样,只是一份蓝图或说明书。
- 执行 (Execution): 进程是动态的,它代表了程序正在运行的过程。就像按照菜谱“做菜”一样,是一个正在进行中的活动。
- 实例 (Instance): 同一个程序可以同时运行多次,每次运行都是一个独立的进程。比如,你可以同时打开多个浏览器窗口,每个窗口通常对应一个或多个独立的进程。
所以,当你双击一个应用程序图标时,操作系统就会为你创建一个进程,并将该程序的指令和数据加载到内存中,然后让 CPU 开始执行这些指令。
一个进程不仅仅包含程序代码,它还包含程序执行所需的各种资源和状态信息:
- 程序代码 (Text Segment): 正在执行的程序的机器指令。
- 程序数据 (Data Segment): 全局变量、静态变量等。
- 堆 (Heap): 运行时动态分配的内存区域。
- 栈 (Stack): 存储局部变量、函数参数和返回地址等,用于函数调用。
- 进程控制块 (Process Control Block, PCB): 这是操作系统用来管理进程的关键数据结构。它包含了进程的几乎所有信息,如进程 ID (PID)、进程状态、程序计数器 (PC)、CPU 寄存器值、内存管理信息(页表/段表)、文件描述符表、调度信息、优先级等。PCB 是进程存在的唯一标志,操作系统通过 PCB 来跟踪和控制进程。
可以把 PCB 看作是进程的“身份证”和“状态记录表”。
2. 进程与程序的区别
通过上面的定义,我们可以明确区分进程和程序:
特征 | 程序 (Program) | 进程 (Process) |
---|---|---|
概念 | 静态的指令集合 | 动态的程序执行实例 |
存在形式 | 存储在磁盘或文件系统中 | 存在于内存中,由操作系统管理 |
生命周期 | 永久存在(除非被删除) | 有生命周期:创建、运行、终止 |
资源 | 不拥有系统资源(如内存、文件句柄) | 拥有和控制系统资源 |
并发性 | 不具备并发性 | 可以并发执行(多个进程同时运行同一个程序) |
实体 | 无对应的系统实体 | 操作系统管理的独立实体,有唯一的 PID 和 PCB |
举例:
假设你在电脑上安装了 Google Chrome 浏览器 (chrome.exe
)。
chrome.exe
文件:这是程序。它静静地躺在你的硬盘上,不会消耗 CPU 或内存(除了存储空间)。- 你打开了三个 Chrome 窗口:这时,操作系统为你创建了三个或更多(Chrome 会为每个标签页等创建独立进程)进程,每个进程都运行着
chrome.exe
的代码。这三个进程是独立的,它们有各自的内存空间(数据、堆、栈)、文件句柄(如打开的网页文件)、进程 ID。它们是chrome.exe
这个程序的三次独立的执行实例。你关闭一个窗口(一个进程终止)并不会影响其他窗口(其他进程)。
3. 进程的状态 (Process States)
进程在其整个生命周期中,会经历不同的阶段,这些阶段被称为进程状态。操作系统需要跟踪进程的状态以便进行有效的管理和调度。常见的进程状态有五种:
- 新建 (New): 进程正在被创建。操作系统正在为其分配资源(如内存、PCB)。
- 何时进入: 当用户启动一个程序(例如双击应用图标),或者一个进程通过系统调用(如
fork()
) 创建另一个进程时。 - 举例: 你刚点击运行某个程序,系统正在准备它。
- 何时进入: 当用户启动一个程序(例如双击应用图标),或者一个进程通过系统调用(如
- 就绪 (Ready): 进程已经被创建,所需的资源(除了 CPU)都已分配到位,并已被加载到主存。它已准备好随时运行,只等待 CPU 的调度。
- 何时进入: 新建状态的进程资源分配完成后;运行状态的进程时间片用完被剥夺 CPU 时;等待状态的进程等待的事件发生后。
- 举例: 你的多个程序都已启动并加载到内存,等待 CPU 执行它们的指令。
- 运行 (Running): 进程的指令正在 CPU 上执行。在单核 CPU 系统中,任意时刻只有一个进程处于运行状态;在多核 CPU 系统中,每个核上最多有一个进程处于运行状态。
- 何时进入: 操作系统调度器从就绪队列中选择一个进程分配 CPU。
- 举例: 当前 CPU 正在执行你的浏览器进程的代码。
- 等待/阻塞 (Waiting / Blocked): 进程由于等待某个事件的发生而被暂停执行。这些事件通常是 I/O 操作完成、等待某个资源可用、等待接收某个信号等。处于等待状态的进程即使 CPU 空闲也无法运行。
- 何时进入: 进程发出 I/O 请求(如读写文件、发送网络数据);进程等待某个锁或信号量;进程调用
sleep()
函数;进程等待子进程结束 (wait()
)。 - 举例: 你的文本编辑器正在等待你输入键盘字符;你的音乐播放器正在等待从硬盘读取下一首歌曲。
- 何时进入: 进程发出 I/O 请求(如读写文件、发送网络数据);进程等待某个锁或信号量;进程调用
- 终止 (Terminated): 进程执行完毕(正常退出),或者被操作系统或用户强制终止。操作系统会回收该进程所占用的所有资源(内存、文件描述符等),并最终移除其 PCB。
- 何时进入: 进程调用
exit()
系统调用正常结束;进程收到终止信号被杀死;父进程调用kill()
杀死子进程;操作系统出现错误终止
- 何时进入: 进程调用