定义
- 使用原语来创建、撤消进程,以及完成进程各状态之间的转换
- 由操作系统内核实现
原语(Primitive)
- 由若干条机器指令构成的可完成特定功能的程序段
- 原子操作:要么全部完成,要么全都不做
- 通过屏蔽各种中断保证原子性
分类
基本原语
创建原语
- 创建新进程,分配 PCB
- 步骤:
- 分配新的 PCB,获取唯一 PID
- 为进程分配内存空间,加载程序映像(代码 + 数据 + 栈)
- 初始化 PCB:填写 PID、状态(就绪)、优先级、寄存器上下文等
- 将 PCB 插入就绪队列
撤销原语
- 终止进程,回收其所占用的所有资源(内存、文件、设备等)
- 回收 PCB
阻塞原语
- 进程从运行态 → 阻塞态
- 保护当前 CPU 上下文到 PCB,将 PCB 移入等待队列
唤醒原语
- 进程从阻塞态 → 就绪态
- 将 PCB 从等待队列移到就绪队列
挂起原语
激活原语
fork() 系统调用
- UNIX/Linux 中创建进程的核心系统调用
- 返回值语义:
fork() 在父进程中返回子进程 PID,在子进程中返回 0,失败返回 -1
- 父子进程并发执行:fork() 后父进程和子进程是独立的进程,调度顺序不确定
- 写时复制(Copy-on-Write):父子进程共享同一物理内存,仅当写入时复制新页
进程树结构
- UNIX/Linux 中进程形成树形关系:
init(PID=1)是所有进程的祖先
fork() 创建子进程后,可通过 exec() 系列函数替换进程映像
模式切换 vs 进程切换
- 模式切换(Mode Switch):在同一进程中,用户态 ↔ 内核态(如系统调用、中断),不改变当前进程
- 进程切换(Process Switch/Context Switch):从一个进程切换到另一个,需保存/恢复 PCB 上下文,开销更大