Appearance
进程的组织与控制
考情分析
进程控制原语属于进程管理基础知识,选择题偶有涉及。属于 🔥 中低频考点。
前面讲了进程的状态和转换,但谁来执行这些转换?操作系统通过一组不可中断的原语来完成进程的创建、撤销、阻塞和唤醒。
进程的组织方式
操作系统将 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由其他进程或操作系统调用(被动行为)。阻塞和唤醒必须成对使用。
原语的原子性
原语通过关中断和开中断来保证原子执行:
关中断 ← 不再响应中断,防止被打断
... 原语操作 ...
开中断 ← 恢复中断响应这确保了进程状态转换过程中不会出现中间状态,避免数据不一致。
关中断指令是特权指令
关中断/开中断只能在内核态下执行,因此进程控制原语运行在内核态。
考研高频考点
- 🔥🔥 原语的特点(不可中断、通过关中断实现)
- 🔥🔥 阻塞是进程主动行为,唤醒是被动行为
- 🔥 四个进程控制原语各自的功能
- 🔥 进程的两种组织方式(链接/索引)
进程能被创建和控制了,但多个进程之间如何交换数据?下一篇讨论进程间通信的几种方式。