单选题
若计算机系统中的进程在“就绪”,“运行”和“等待”三种状态之间转换,进程不可能出现( )的状态转换。
A
“就绪”→“运行”
B
“运行”→“就绪”
C
“运行”→“等待”
D
“就绪”→“等待”
答案解析
正确答案:D
解析:
在操作系统的进程管理中,进程通常有三种基本状态:**就绪(Ready)**、**运行(Running)**和**等待(Waiting/Blocked)**。我们需要分析这三种状态之间合法的转换逻辑,从而找出不可能发生的转换。
### 1. 状态定义与合法转换分析
* **就绪态 → 运行态(选项 A)**
* **发生场景**:当调度程序(Scheduler)从就绪队列中选择一个进程,并分配 CPU 给它时。
* **结论**:这是进程获得 CPU 时间片的正常过程,**可能发生**。
* **运行态 → 就绪态(选项 B)**
* **发生场景**:正在运行的进程时间片用完(分时系统),或者被更高优先级的进程抢占 CPU 时。此时进程并未结束,也未等待外部事件,只是暂时让出 CPU,回到就绪队列排队。
* **结论**:这是进程调度的常见情况,**可能发生**。
* **运行态 → 等待态(选项 C)**
* **发生场景**:正在运行的进程请求某种资源(如 I/O 操作、申请信号量等),而该资源当前不可用。进程必须放弃 CPU,进入等待状态,直到资源可用或被事件唤醒。
* **结论**:这是进程因等待事件而阻塞的正常过程,**可能发生**。
* **就绪态 → 等待态(选项 D)**
* **逻辑分析**:
* “就绪”意味着进程已经具备了除 CPU 以外的所有运行条件,正在等待被调度执行。
* “等待”意味着进程因为缺乏某些非 CPU 资源(如 I/O 完成、数据到达)而无法继续执行。
* **关键点**:只有**正在运行**的进程才能发起资源请求或触发导致阻塞的事件。处于“就绪”状态的进程并没有在 CPU 上执行指令,因此它无法主动发起 I/O 请求或执行任何会导致其进入等待状态的操作。
* 如果一个问题导致进程需要等待,它必须先被调度到“运行”态,在执行过程中发现需要等待,才会从“运行”转为“等待”。
* **结论**:进程不能直接从就绪变为等待,**不可能发生**。
### 2. 补充:其他可能的转换
* **等待态 → 就绪态**:当等待的事件发生(如 I/O 完成、信号量释放),进程会被唤醒,从等待态转入就绪态,重新排队等待 CPU。
### 3. 总结
进程状态转换图如下所示:
```mermaid
graph LR
Ready[就绪] -->|被调度| Running[运行]
Running -->|时间片到/被抢占| Ready
Running -->|请求I/O/等待事件| Waiting[等待]
Waiting -->|事件发生/资源到位| Ready
```
可以看出,**不存在**从“就绪”直接指向“等待”的箭头。
因此,正确答案是 **D**。
相关知识点:
进程状态转换,无就绪到等待
题目纠错
2023电力行业多旋翼无人机竞赛
