Appearance
题目
下列操作中,操作系统在创建新进程时,必须完成的是( )。
Ⅰ. 申请空白的进程控制块 Ⅱ. 初始化进程控制块 Ⅲ. 设置进程状态为执行态
错因
A
只挑了 Ⅰ"申请 PCB",把 Ⅱ"初始化 PCB"漏掉了。可能想成"申请来一块空 PCB 就完事了"。但 PCB 申请下来只是块原始内存——PID、父进程 ID、初始上下文、初始程序计数器、就绪态、资源初始指针都得填进去,这些初始化动作不做完,进程根本起不来。
C
把"创建后就要跑"想当然地写进了流程,挑了 Ⅰ + Ⅲ。其实进程刚创建好的状态是就绪态——表示"我准备好了,等调度器把 CPU 分给我"。从就绪到执行还差一步调度,不是创建动作的一部分。即使只有这一个进程,也得走调度器选中它,才会从就绪转执行。
D
跟 C 同类错误:把"执行态"当成创建后的初始状态。新进程创建完毕一定是就绪态,加入就绪队列等调度。"执行态"是被调度器选中、CPU 真的跑这个进程时的状态——是调度产生的,不是创建产生的。
总解析
进程创建的标准流程("创建原语"做的事):
| 步骤 | 操作 | 必做? |
|---|---|---|
| ① | 分配新进程标识符 PID | ✓ |
| ② | 申请空白 PCB(Ⅰ) | ✓ |
| ③ | 为进程分配资源(内存、文件、I/O 设备) | ✓ |
| ④ | 初始化 PCB(PID、状态、上下文、程序入口、资源指针等)(Ⅱ) | ✓ |
| ⑤ | 将新进程置为就绪态,挂入就绪队列 | ✓ |
题里的 Ⅲ 写的是"设置为执行态",这是错的——新进程的初始状态是就绪态,要等调度器把 CPU 分配给它才会变成执行态。所以 Ⅲ 既不是必做项、它的描述本身也是错的。
新进程从就绪到执行的链条:
[创建] PCB 申请 + 初始化 → 状态置就绪 → 加入就绪队列
↓ (等调度器选中)
[调度] → 状态变执行 → CPU 开始跑必做的就是 Ⅰ、Ⅱ。
最终答案是 B。