定义

  • 使用原语来创建、撤消进程,以及完成进程各状态之间的转换
  • 由操作系统内核实现

原语(Primitive)

  • 由若干条机器指令构成的可完成特定功能的程序段
  • 原子操作:要么全部完成,要么全都不做
  • 通过屏蔽各种中断保证原子性

分类

  • 进程控制原语
  • 进程通信原语
  • 进程管理原语

基本原语

创建原语

  • 创建新进程,分配 PCB
  • 步骤
    1. 分配新的 PCB,获取唯一 PID
    2. 为进程分配内存空间,加载程序映像(代码 + 数据 + 栈)
    3. 初始化 PCB:填写 PID、状态(就绪)、优先级、寄存器上下文等
    4. 将 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 上下文,开销更大