Skip to content

2023年 408 操作系统 第 27 题

操作系统2023年选择题2分

题目

下列由当前线程引起的事件或执行的操作中,可能导致该线程由执行态变为就绪态的是( )。

错因

A

键盘输入意味着线程要等待 I/O 完成——线程会被放入"等待键盘"的等待队列,状态从执行 → 阻塞,而不是变成就绪态。就绪 ≠ 阻塞:就绪是"只差 CPU 就能跑",阻塞是"在等某个事件,给 CPU 也没用"。

B

缺页异常发生时,操作系统要从磁盘把页调入内存——这是相对长的 I/O 等待。线程被挂起,状态变成执行 → 阻塞(等 I/O 完成)。等到页面调入后再转回就绪。所以缺页异常的直接转换不是"就绪",是"阻塞"。

D

wait() 操作可能让线程阻塞(如果信号量 ≤ 0),状态从执行 → 阻塞;如果信号量 > 0 则不阻塞继续执行——但都不会从执行直接变成"就绪态"。题目问的是"由执行态变为就绪态",wait 不符合。

总解析

线程的三种基本状态及转换:

就绪 ←—调度选中—→ 执行
                   |
                   ├— 时间片用完 / yield → 就绪
                   ├— I/O / wait / 阻塞事件 → 阻塞
                   └— 终止 → 退出

阻塞 —事件完成—→ 就绪

关键区分

  • 执行 → 就绪:线程还能运行,但暂时不占 CPU。典型触发:① 时间片用完(被剥夺);② 高优先级线程到来(抢占);③ 主动出让 CPU(如调用 yield)。
  • 执行 → 阻塞:线程不能运行,需等待某事件。典型触发:① I/O 请求;② 信号量 wait 不通过;③ 缺页等异常等待。

逐项判断

选项线程状态是否符合"执行→就绪"
A 键盘输入执行 → 阻塞(等 I/O)
B 缺页异常执行 → 阻塞(等页面调入)
C 主动出让 CPU执行 → 就绪
D 信号量 wait执行 → 阻塞(信号量不够时)

主动出让 CPU(yield)正是自愿放弃 CPU 但不需要等任何事件的典型场景——所以放回就绪队列,等下次被调度即可继续运行。

最终答案是 C(主动出让 CPU)

记忆要点:执行 → 就绪只有"被剥夺/被抢占/主动让出"三种触发;执行 → 阻塞才需要"等待外部事件"。

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数