108 / 163 · C11 · 约 8 分钟
抽象:进程
先记住这句话
本章介绍进程作为运行程序的操作系统抽象,解释CPU虚拟化、进程状态组成以及如何从程序创建进程。
进程的本质
进程是操作系统将静态程序变为动态执行实体的方式。程序文件包含指令,但只有在操作系统加载并调度后才成为有用的进程。这使得用户能够同时运行多个应用程序而无需直接管理硬件。
通过时间共享虚拟化CPU
为了让有限的物理处理器看起来像有许多个,操作系统采用时间共享:短暂运行一个进程,然后切换到下一个。这种机制结合调度策略,提供了并发执行的错觉,尽管可能影响单个程序的速度。
进程状态与创建细节
进程状态涵盖可寻址内存(代码、数据、堆、栈)、关键寄存器(如程序计数器和栈指针)以及打开的文件。创建时,操作系统从磁盘读取可执行文件到内存,分配栈和堆,设置初始寄存器值,然后开始执行。
常见误区
- 将磁盘上的程序文件直接等同于进程
- 低估时间共享对性能的影响
- 遗漏寄存器作为进程状态的一部分
运行一个例子
最低标准 C11 · 完整程序 · 下载 .c
#include <stdio.h>
int main(void) {
printf("Process abstraction in action.\n");
return 0;
}
在本地编译
gcc -std=c11 -Wall -Wextra -Wpedantic -Werror ostep-04-processes.c -o example && ./example预期结果
Process abstraction in action.
CHECK YOUR UNDERSTANDING
合上答案,试着解释。
进程的机器状态主要包括哪些部分?为什么程序计数器很重要?
查看参考答案
主要包括内存地址空间、寄存器和I/O信息。程序计数器很重要,因为它指向下一条要执行的指令。
继续查证
标准草案与官方章节会更新;版本标记只说明示例最低要求。