为什么要引入进程

  • 多道程序设计系统中,CPU 在各程序之间高速切换
  • 需要一种抽象实体来描述正在运行的程序,以便 OS 进行管理和调度
  • 顺序执行:I1 → C1 → P1 → I2 → C2 → P2 → …(无并发,资源利用率低)
  • 引入进程后,多道程序可并发执行,提高 CPU 和 I/O 利用率

进程的定义

  • 对正在运行程序的一个抽象
  • 进程是系统进行资源分配和调度的基本单位
  • 进程是程序在数据集合上的一次运行活动

PCB(进程控制块)

  • 进程在操作系统中的表示,OS 通过 PCB 管理进程
  • 包含以下信息:
    • 进程标识符(PID):唯一标识一个进程
    • 状态:运行态、就绪态、阻塞态等
    • 优先级:调度依据
    • 寄存器上下文:程序计数器 PC、栈指针 SP、通用寄存器等
    • 内存指针:代码段、数据段、栈段指针
    • 资源清单:打开的文件、I/O 设备等
    • 父进程/子进程指针:维护进程家族关系
    • 其他:记账信息、消息队列指针等

进程存储器映像

  • 用户空间
    • 代码段(Text):程序代码,只读
    • 数据段(Data):全局变量、静态变量
    • 栈段(Stack):函数调用参数、返回地址、局部变量
  • 系统空间
    • PCB 存储在内核空间,由 OS 维护

进程状态(5 状态模型)

  • 创建态(New):进程正在被创建,OS 分配 PCB
  • 就绪态(Ready):具备运行条件,等待 CPU 调度
  • 运行态(Running):正在使用 CPU 执行指令
  • 阻塞态(Blocked/Waiting):进程等待某个事件发生(如 I/O 完成)
  • 终止态(Terminated):进程执行完毕,OS 回收资源

状态转换条件

转换条件
创建 → 就绪PCB 初始化完成,进入就绪队列
就绪 → 运行调度程序选中该进程
运行 → 就绪时间片用完 / 被高优先级进程抢占
运行 → 阻塞等待某事件(如 I/O、信号量)
阻塞 → 就绪所等待的事件发生
运行 → 终止进程执行完毕或被撤销

进程组织方式

  • 链接方式:按进程状态(就绪、阻塞等)将 PCB 链接成不同队列
  • 索引方式:建立就绪索引表、阻塞索引表,通过索引查找 PCB
  • 树形结构:UNIX/Linux 用树形结构组织进程,pstree 可见父子关系

当前进程指针

  • 系统中有一个指针指向当前正在运行的进程的 PCB
  • 调度切换时,该指针指向新选中的进程 PCB