公務人員特種考試計算機大意112 年第 21 題單選題
在一個多工的電腦系統內,下列那個情況並不會將正在執行(running)狀態的程序,轉換到另一種狀態?
A程序工作結束
B程序執行到需要 I/O 的資源
C程序執行時間已經用完它所被分配的時槽
D程序執行一個遞迴函式(recursive function)的呼叫正確答案
D正確答案
Running 狀態會因工作結束、等待 I/O、時槽用完而轉換;遞迴呼叫僅是函式內部運作,程序仍在 running。
為什麼答案是 D
遞迴函式呼叫只是同一程序內函式堆疊的壓入與彈出,CPU 仍持續執行該程序,狀態維持在 running,不會轉換。
載入中…
完整詳解
Pro · 無限重點 Running 狀態會因工作結束、等待 I/O、時槽用完而轉換;遞迴呼叫僅是函式內部運作,程序仍在 running。
記三大離開 running 原因:結束(terminate)、等 I/O(blocked)、時間到(ready)。遞迴只是函式呼叫自己,CPU 照跑。
逐選項分析
A✕
程序工作結束會從 running 轉為 terminated(終止)狀態,屬於正常狀態轉換。
B✕
需要 I/O 資源時,程序會從 running 轉為 waiting/blocked 狀態,等 I/O 完成再回 ready。
C✕
時槽(time slice)用完由 scheduler 搶走 CPU,程序從 running 轉回 ready 等待下次排程。
D✓ 正確
遞迴函式呼叫只是同一程序內函式堆疊的壓入與彈出,CPU 仍持續執行該程序,狀態維持在 running,不會轉換。
Process 五種狀態轉換
| 轉換 | 觸發原因 | 目的狀態 | 範例 |
|---|
| New→Ready | 程序建立完成 | Ready | 載入記憶體 |
| Ready→Running | 被 scheduler 選中 | Running | 取得 CPU |
| Running→Ready | 時槽用完/被搶佔 | Ready | 選項 C |
| Running→Blocked | 等待 I/O 或資源 | Waiting | 選項 B |
| Running→Terminated | 工作完成或被終止 | Terminated | 選項 A |
D 混淆「程式語言層級的函式呼叫」與「作業系統層級的程序狀態」。遞迴是程式內部 stack frame 的操作,CPU 仍在為該程序服務,狀態不會變。只有 OS 介入排程時才會發生狀態轉換。