Skip to content

2024年 408 操作系统 第 24 题

操作系统2024年选择题2分

题目

下列选项中,操作系统在终止进程时不一定执行的是( )。

错因

B

想到"如果进程使用共享内存呢,要不要回收?"——觉得这种"特殊情况"让 B 不一定。但共享内存只是引用计数减 1(不是不动),进程私有的栈、堆、数据段必须回收,否则下次该地址被新进程使用时会出错。任何进程终止都涉及内存回收,没有例外。

C

受 Linux 僵尸进程模型影响——exit 之后 PCB 似乎还残留等父进程 wait,于是怀疑 PCB 不一定撤销。但考研语境下"终止进程" = 完整终止流程(exit + wait 合流),PCB 最终必被撤销。否则进程号永远占用、僵尸越积越多,系统会枯竭。OS 教材定义的"终止"动作集里,最后一步就是撤销 PCB。

D

注意到"进程不一定占用设备"——这思路有一定道理(但还不够精确)。区别在:D 描述的"回收占用的设备"是无条件清理步骤,OS 终止流程会扫描设备占用表,对每个占用的设备执行释放——即便表为空,"扫描+释放"的动作仍要走(对空集合执行)。而 A 的"终止子进程"则是流程里有明显的条件分支if 子进程列表非空),分支可能根本不进入。考研题钉死答案 A 而非 D,区别就在这里。

总解析

判定思路:题目问"不一定执行"——找一个仅在特定条件下才发生的动作。其余三项都是终止流程的标准清理步骤。

进程终止的标准动作集(OS 教材统一描述):

  1. 找到进程 PCB
  2. 终止运行(如果在执行)
  3. 回收所有资源(内存、文件、I/O 设备等)→ B、D
  4. 撤销 PCB → C
  5. 若该进程有子进程,递归终止(级联终止)→ A
  6. 若有等待该进程的父进程,唤醒之

逐项核对

选项是否必做触发条件
A 终止子进程不一定仅当该进程有子进程时才进入级联终止分支
B 回收内存资源必做进程必然占用内存(至少代码段+栈),不回收会泄漏
C 撤销 PCB必做PCB 是 OS 识别进程的唯一标识,不撤销 = 进程没真正终止
D 回收占用的设备必做(流程层面)终止流程的标准步骤,扫描+释放动作总要执行

核心区分:A 是有逻辑分支的步骤(if 有子进程);B/C/D 是无条件的清理步骤——即使作用对象为空(如不占用任何设备),扫描动作仍会跑一次。

速记:进程一定有 PCB 和内存,可能没设备但流程必扫,唯一可能跳过整段动作的就是"终止子进程"——没有子进程就完全不进入这个分支。

最终答案是 A

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题