Skip to content

进程的组织与控制

考情分析

进程控制原语属于进程管理基础知识,选择题偶有涉及。属于 🔥 中低频考点。

前面讲了进程的状态和转换,但谁来执行这些转换?操作系统通过一组不可中断的原语来完成进程的创建、撤销、阻塞和唤醒。

进程的组织方式

操作系统将 PCB 组织起来以便管理,常用两种方式:

链接方式

将同一状态的 PCB 链接成一个队列:

就绪队列头指针 → PCB₁ → PCB₃ → PCB₇ → null
阻塞队列头指针 → PCB₂ → PCB₅ → null
空闲队列头指针 → PCB₈ → PCB₉ → null

索引方式

为每种状态建立一个索引表,表中存放指向 PCB 的指针:

就绪索引表: [→PCB₁, →PCB₃, →PCB₇]
阻塞索引表: [→PCB₂, →PCB₅]

进程控制原语

原语(Primitive)是一种特殊的程序段,执行过程中不可被中断(通过关中断/开中断实现原子性)。想象搬家公司搬一件家具的过程——从旧房间搬出到新房间放好,中间不能停在走廊里不管,否则走廊就堵了。原语也是如此,状态转换必须一气呵成。

进程控制通过以下原语完成:

创建原语

procedure Create(pid, priority, ...)
    申请空白 PCB
    分配 PID
    分配内存等资源
    初始化 PCB(设置优先级、状态等)
    将进程状态设为「就绪态」
    将 PCB 插入就绪队列
end

触发创建的事件:用户登录、作业调度、系统调用(fork)、应用请求。

撤销(终止)原语

procedure Terminate(pid)
    找到 pid 对应的 PCB
    终止该进程及其所有子进程
    回收所有资源(内存、文件等)
    将 PCB 从所在队列中移除
    回收 PCB
end

触发终止的事件:正常退出(exit)、异常退出、被父进程终止(kill)。

阻塞原语

procedure Block(reason)
    保存当前进程的 CPU 上下文到 PCB
    将进程状态改为「阻塞态」
    将 PCB 插入对应的阻塞队列
    调度其他进程运行
end

由进程自身调用(主动行为)。

唤醒原语

procedure Wakeup(pid)
    从阻塞队列中找到 pid 对应的 PCB
    将进程状态改为「就绪态」
    将 PCB 插入就绪队列
end

其他进程或操作系统调用(被动行为)。阻塞和唤醒必须成对使用。

原语的原子性

原语通过关中断和开中断来保证原子执行:

关中断          ← 不再响应中断,防止被打断
  ... 原语操作 ...
开中断          ← 恢复中断响应

这确保了进程状态转换过程中不会出现中间状态,避免数据不一致。

关中断指令是特权指令

关中断/开中断只能在内核态下执行,因此进程控制原语运行在内核态。

考研高频考点

  • 🔥🔥 原语的特点(不可中断、通过关中断实现)
  • 🔥🔥 阻塞是进程主动行为,唤醒是被动行为
  • 🔥 四个进程控制原语各自的功能
  • 🔥 进程的两种组织方式(链接/索引)

进程能被创建和控制了,但多个进程之间如何交换数据?下一篇讨论进程间通信的几种方式。

真题练习

相关真题(5题)

2022Q24选择题2分

进程终止:不一定有子进程,所以终止子进程不是必须的

2021Q23选择题2分

系统调用:创建新进程(fork)通过系统调用完成

2021Q30选择题2分

父子进程:各有独立的虚拟地址空间(fork后写时复制)

2020Q24选择题2分

进程创建:用户登录和启动程序会创建新进程,设备分配不会

2009Q24选择题2分

进程创建:用户登录和启动程序会创建新进程,设备分配不会