C++ / a working model

108 / 163   ·   C11   ·   约 8 分钟

抽象:进程

先记住这句话

本章介绍进程作为运行程序的操作系统抽象,解释CPU虚拟化、进程状态组成以及如何从程序创建进程。

本篇内容
  1. 进程的本质
  2. 通过时间共享虚拟化CPU
  3. 进程状态与创建细节
  4. 运行示例
  5. 动手练习

官方章节 PDF

进程的本质

进程是操作系统将静态程序变为动态执行实体的方式。程序文件包含指令,但只有在操作系统加载并调度后才成为有用的进程。这使得用户能够同时运行多个应用程序而无需直接管理硬件。

通过时间共享虚拟化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信息。程序计数器很重要,因为它指向下一条要执行的指令。

继续查证

标准草案与官方章节会更新;版本标记只说明示例最低要求。

回到目录