112 年 國立臺灣大學電機工程研究所丙組《計算機結構與作業系統(A)》

📄 試題原卷 免費註冊後即可對照原始考卷 PDF免費註冊

第 1 題5 分

Consider a program P that originally runs on a single processor. Assume we have 6 processors now. What is the minimum
percentage of P that can be parallelizable to attain 3X speed-up using 6 processors?
a. 75%
b. 50%
c. 80%
d. 66%
e. None of the above is correct

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查計算機結構中的 阿姆達爾定律(Amdahl's Law)。

阿姆達爾定律用於評估當系統部分組件進行改善(例如增加處理器數量進行平行運算)時,整體系統所能獲得的加速比(Speedup)。在平行處理情境下,假設程式中包含「可平行化(Parallelizable)」的部份與「必須串行執行(Serial)」的部份。當處理器數量為 NN,可平行化比例為 ff(0≤f≤10 \le f \le 1)時,整體加速比 SS 的公式為:

S=1(1−f)+fNS = \frac{1}{(1 - f) + \frac{f}{N}}

各符號定義如下:

  • SS:改善後獲得的整體加速比(Speedup)。
  • NN:平行執行的處理器(Processor)數量。
  • ff:程式中可被平行執行的比例(Parallelizable fraction)。
  • 1−f1 - f:程式中無法平行化、必須串行執行的比例(Serial fraction)。

解題方法

根據題意,題目給定:

  • 處理器數量 N=6N = 6
  • 目標加速比 S=3S = 3

設程式 PP 可平行化的最小比例為 ff,代入阿姆達爾定律公式:

3=1(1−f)+f63 = \frac{1}{(1 - f) + \frac{f}{6}}

詳細推導與計算步驟如下:

  1. 對等式兩邊取倒數,求出改善後的總執行時間比例:
    (1−f)+f6=13(1 - f) + \frac{f}{6} = \frac{1}{3}

  2. 展開並整理含未知數 ff 的項:
    1−f+16f=131 - f + \frac{1}{6}f = \frac{1}{3}
    1−56f=131 - \frac{5}{6}f = \frac{1}{3}

  3. 移項求解 ff:
    56f=1−13\frac{5}{6}f = 1 - \frac{1}{3}
    56f=23\frac{5}{6}f = \frac{2}{3}
    f=23×65=1215=45=0.8=80%f = \frac{2}{3} \times \frac{6}{5} = \frac{12}{15} = \frac{4}{5} = 0.8 = 80\%

求得可平行化的最小百分比為 80%。


選項分析

  • a. 75%:錯誤。若 f=75%=0.75f = 75\% = 0.75,代入公式計算加速比
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 2 題5 分

There are a primary cache L1 and a primary memory RAM. The access times of L1 and RAM are 1ns and 100ns, respectively.
The miss rate of L1 is 0.05%, so the average access time is 6ns. To speed up the memory system, we add a secondary cache L2
with access time 10ns. For a 2X speed-up, what should the maximum miss rate of L2 be?
a. 50%
b. 20%
c. 30%
d. 15%
e. None of the above is correct

登入後即可作答並保存紀錄。

這一題的完整詳解

平均存取時間 TT 由三段構成

  • 直接命中 L1:1 ns1\text{ ns}
  • L1 錯失率 r1=0.05r_1 = 0.05(5%),此時必須再存取 L2:10 ns10\text{ ns}
  • L2 錯失率 r2r_2,若再錯失則存取主記憶體 RAM:100 ns100\text{ ns}

因此

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 3 題5 分

Consider an 8-way set-associate cache. Assume that a physical address has 32 bits, the size of a block is 16 words, and the
cache contains 64K bytes data. How many bits does the cache at least need? (Remember the valid bits)
a. 28672
b. 29696
c. 34816
d. 20480
e. None of the above is correct

登入後即可作答並保存紀錄。

這一題的完整詳解

先計算快取的結構

  1. 區塊大小
    16 words × 4 bytes/word = 64 bytes = 262^{6} bytes → offset bits=log⁡264=6 \text{offset bits}= \log_2 64 = 6

  2. 快取容量
    64 KB = 65536 bytes

  3. 組合度
    8‑way set‑associative

  4. 組數

#sets=容量組合度×區塊大小=655368×64=128=27\#\text{sets}= \frac{\text{容量}}{\text{組合度}\times\text{區塊大小}} = \frac{65536}{8 \times 64}=128 = 2^{7}

→ index bits=7\text{index bits}=7

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 4 題5 分

Consider a processor with an instruction cache and a memory cache. Assume that the basic CPI (i.e., for an ideal cache) is 1.5,
the miss rate of the instruction cache is 2%, the miss rate of the memory cache is 5%, the miss penalty is 80 cycles, and 40% of
instructions access the memory. What is the effective CPI?
a. 7.1
b. 3.74
c. 6.14
d. 4.7
e. None of the above is correct

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查計算機結構中**有效每指令週期數(Effective CPI, Effective Cycles Per Instruction)**與快取記憶體(Cache)缺失損失(Miss Penalty)的計算。

在理想快取(Ideal Cache,即完全命中)的情況下,處理器的執行效能由基本 CPI(CPIbase\text{CPI}_{\text{base}})決定。然而在實際系統中,指令讀取(Instruction Fetch)與資料存取(Data Access / Memory Access)若發生快取缺失(Cache Miss),均會產生額外的記憶體停頓週期(Memory Stall Cycles)。

計算 Effective CPI 的核心公式如下:
Effective CPI=CPIbase+Memory Stall Cycles per Instruction\text{Effective CPI} = \text{CPI}_{\text{base}} + \text{Memory Stall Cycles per Instruction}

其中,記憶體停頓週期可分為指令快取(I-Cache)停頓與資料快取(D-Cache / Memory Cache)停頓兩部分:
Memory Stall Cycles per Instruction=StallI-cache+StallD-cache\text{Memory Stall Cycles per Instruction} = \text{Stall}_{\text{I-cache}} + \text{Stall}_{\text{D-cache}}
StallI-cache=Instruction Access Frequency×Miss RateI×Miss Penalty\text{Stall}_{\text{I-cache}} = \text{Instruction Access Frequency} \times \text{Miss Rate}_{\text{I}} \times \text{Miss Penalty}
StallD-cache=Data Access Frequency×Miss RateD×Miss Penalty\text{Stall}_{\text{D-cache}} = \text{Data Access Frequency} \times \text{Miss Rate}_{\text{D}} \times \text{Miss Penalty}


解題方法

根據題目給定的參數進行整理與計算:

  1. 基本 CPI(CPIbase\text{CPI}_{\text{base}}):1.51.5
  2. 指令快取缺失率(Miss RateI\text{Miss Rate}_{\text{I}}):2%=0.022\% = 0.02
  3. 記憶體快取缺失率(Miss RateD\text{Miss Rate}_{\text{D}}):5%=0.055\% = 0.05
  4. 缺失損失(Miss Penalty\text{Miss Penalty}):80 cycles80 \text{ cycles}
  5. 存取記憶體的指令比例:40%=0.440\% = 0.4

步驟一:計算指令快取停頓週期(StallI-cache\text{Stall}_{\text{I-cache}})
每一條指令在執行時均必須進行指令擷取(Instruction Fetch),因此指令存取頻率(Instruction Access Frequency)固定為 1.01.0(即 100%100\%)。
StallI-cache=1.0×2%×80=1.0×0.02×80=1.6 cycles/instruction\text{Stall}_{\text{I-cache}} = 1.0 \times 2\% \times 80 = 1.0 \times 0.02 \times 80 = 1.6 \text{ cycles/instruction}

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 5 題5 分

Consider the following assembly program. There are one input parameter n and one output parameter b. We assume that n is
a positive integer. The input parameter n is stored in the address 0(x1) before the program starts, and the output parameter b
needs to be stored in the address 4(x1) after the program ends.
1 Id x5, 0(x1)
2 addi x6, x0, 1
3 add x7, x0, x0
4 bge x6, x5, END
5 add x6, x6, x7
6 addi x7, x7, 1
7 j LOOP
8 END: sd x7, 4(x1)

登入後即可作答並保存紀錄。

這一題的完整詳解

參考書等級:大學三年級以上,電腦結構/作業系統教材

程式流程

  1. x5 ← n(輸入)
  2. x6 ← 1、x7 ← 0(迴圈變數)
  3. 迴圈條件 bge x6, x5, END:若 x6 ≥ n 則跳至 END,否則執行第 5–6 行。
  4. 第 5 行 x6 ← x6 + x7  第 6 行 x7 ← x7 + 1
  5. 回到第 4 行重新比較。
  6. 迴圈結束時 x7 的值寫入 b(第 8 行)。

數學模型
設迴圈執行了 kk 次(k≥0k\ge 0),則

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 6 題5 分

Consider three instructions and two programs that uses the three instructions as follows.

InstructionCPI
A3
B1
C2
ABC
P1221
P2143

Which of the following statements is/are true?
a. CPI of P1 is 2
b. CPI of P2 is 1.6
c. CPI of P2 is 1.625
d. P1 is 1.3X faster than P2
e. P2 is 1.3X faster than P1

登入後即可作答並保存紀錄。

這一題的完整詳解

計算方式

P1 執行週期總數

CP1=2⋅3+2⋅1+1⋅2=10C_{\text{P1}} = 2\cdot3 + 2\cdot1 + 1\cdot2 = 10

指令總數

IP1=2+2+1=5I_{\text{P1}} = 2+2+1 = 5

CPIP1=CP1IP1=105=2\text{CPI}_{\text{P1}} = \frac{C_{\text{P1}}}{I_{\text{P1}}}= \frac{10}{5}=2

P2 執行週期總數

CP2=1⋅3+4⋅1+3⋅2=13C_{\text{P2}} = 1\cdot3 + 4\cdot1 + 3\cdot2 = 13

指令總數

IP2=1+4+3=8I_{\text{P2}} = 1+4+3 = 8

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 7 題5 分

Consider the floating point numbers defined by IEEE 754-1985. A floating point number X is represented as follows:
X=(−1)Sign×(1+Fraction)×2Exponent−BiasX = (-1)^{Sign} \times (1 + Fraction) \times 2^{Exponent-Bias}
In single precision, Exponent has 8 bits, Fraction has 23 bits and Bias is 127; In double precision, Exponent has 11 bits, Fraction
has 52bit and Bias is 1023. In the corresponding binary string, Sign lies in the left, Exponent lies in the middle, and Fraction lies
in the right. Remember that Exponents 0000...00 and 1111...11 are reserved, i.e., in single precision, Exponent is from 1 to 254,
and in double precision, Exponent is from 1 to 2046.
Which of the following statements is/are true?
a. In double precision, the largest positive number is (2−2−52)×21023(2-2^{-52}) \times 2^{1023}.
b. In double precision, the smallest normalized positive number is 2−10222^{-1022}.
c. In single precision, the binary string of -0.3125 is 10111110101000000000000000000000.
d. In single precision, the binary string 00111111011100000000000000000000 represents 0.875.
e. In double precision, the smallest denormalized positive number is 2−10232^{-1023}.

登入後即可作答並保存紀錄。

這一題的完整詳解

a. 真 (2−2−52)×21023 (2-2^{-52})\times2^{1023} 為 double precision 最大有限正數。
b. 真 最小規格化正數為 2−10222^{-1022}(指數為 1,Fraction 為 0)。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 8 題5 分

A simplified RISC datapath consists of five stages: Instruction Fetch, Instruction Decode, Execution, Memory Access and Write
Back. The processing time for these five stages are 0.5 ns, 0.35 ns, 0.25 ns, 0.5 ns and 0.4 ns.
Which of the following statements is/are true?
a. The clock rate is at most 500 MHZ.
b. If we pipeline the datapath, the clock rate is at most 2 GHZ
c. If we pipeline the datapath, the clock rate is at least 4 GHZ
d. The speed-up by pipelining the datapath is at most 4 times.
e. The speed-up by pipelining the datapath is at least 2 times

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考驗計算機結構中單時脈週期(Single-Cycle)與流水線(Pipelined)資料通道的時脈週期(Clock Cycle Time)、時脈速率(Clock Rate / Frequency)以及**加速比(Speedup)**的計算與邏輯推演。

  1. 單時脈週期資料通道 (Unpipelined Single-Cycle Datapath):
    單一指令必須在同一個時脈週期內完成所有執行階段。因此,最小時脈週期 TsingleT_{\text{single}} 取決於所有階段處理時間(Processing Time)的總和:
    Tsingle≥∑i=1kτiT_{\text{single}} \ge \sum_{i=1}^{k} \tau_i
  2. 流水線資料通道 (Pipelined Datapath):
    指令被分割為多個階段平行執行。在不考慮流水線暫存器延遲(Pipeline Register Overhead, τreg\tau_{\text{reg}})的理想狀況下,流水線的最小時脈週期 TpipeT_{\text{pipe}} 取決於處理時間最長的瓶頸階段(Bottleneck Stage):
    Tpipe≥max⁡1≤i≤k(τi)T_{\text{pipe}} \ge \max_{1 \le i \le k} (\tau_i)
  3. 時脈速率(Clock Rate):
    時脈速率為時脈週期的倒數:
    f=1Tf = \frac{1}{T}
    因為時脈週期有下限(T≥TminT \ge T_{\text{min}}),故時脈速率有上限(f≤fmax=1Tminf \le f_{\text{max}} = \frac{1}{T_{\text{min}}}),即時脈速率**至多(at most)**為 fmaxf_{\text{max}}。
  4. 加速比(Speedup):
    流水線相較於未建置流水線時的性能提升倍數:
    Speedup=TsingleTpipe\text{Speedup} = \frac{T_{\text{single}}}{T_{\text{pipe}}}

解題方法

Step 1:計算未建立流水線時的時脈週期與最高時脈速率

已知五個階段的處理時間分別為:
τIF=0.5 ns\tau_{\text{IF}} = 0.5\text{ ns}、τID=0.35 ns\tau_{\text{ID}} = 0.35\text{ ns}、τEX=0.25 ns\tau_{\text{EX}} = 0.25\text{ ns}、τMEM=0.5 ns\tau_{\text{MEM}} = 0.5\text{ ns}、τWB=0.4 ns\tau_{\text{WB}} = 0.4\text{ ns}。

單時脈週期的最小週期時間為各階段總延遲:
Tsingle=0.5+0.35+0.25+0.5+0.4=2.0 nsT_{\text{single}} = 0.5 + 0.35 + 0.25 + 0.5 + 0.4 = 2.0\text{ ns}

對應的最高時脈速率 fsingle, maxf_{\text{single, max}} 為:
fsingle, max=1Tsingle=12.0 ns=0.5 GHz=500 MHzf_{\text{single, max}} = \frac{1}{T_{\text{single}}} = \frac{1}{2.0\text{ ns}} = 0.5\text{ GHz} = 500\text{ MHz}
因此,未建立流水線時,時脈速率滿足 fsingle≤500 MHzf_{\text{single}} \le 500\text{ MHz}。

Step 2:計算建立流水線後的時脈週期與最高時脈速率

流水線資料通道的瓶頸階段為 IF 與 MEM(均為 0.5 ns0.5\text{ ns})。
在忽略暫存器延遲的理想條件下,最小時脈週期為:
Tpipe=max⁡(0.5,0.35,0.25,0.5,0.4)=0.5 nsT_{\text{pipe}} = \max(0.5, 0.35, 0.25, 0.5, 0.4) = 0.5\text{ ns}

對應的最高時脈速率 fpipe, maxf_{\text{pipe, max}} 為:
fpipe, max=1Tpipe=10.5 ns=2.0 GHz=2000 MHzf_{\text{pipe, max}} = \frac{1}{T_{\text{pipe}}} = \frac{1}{0.5\text{ ns}} = 2.0\text{ GHz} = 2000\text{ MHz}
因此,建立流水線後,時脈速率滿足 fpipe≤2 GHzf_{\text{pipe}} \le 2\text{ GHz}。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 9 題5 分

Consider a memory system in which a virtual address has 40 bits, a physical address has 32 bits, a page has 16K bytes, and a
physical address stores a byte.
a. There are 2^23 virtual pages.
b. There are 2^26 virtual pages.
c. The page offset has 14 bits.
d. There are 2^18 physical pages.
e. There are 2^15 physical pages.

登入後即可作答並保存紀錄。

這一題的完整詳解

先算頁面位元組大小
16K=16×210=21416\text{K}=16\times2^{10}=2^{14} 位元組 → 頁面位元組偏移需 1414 位元。

虛擬位址:4040 位元
虛擬頁號位元 = 40−14=2640-14=26 位元 → 虛擬頁面數 =226=2^{26}。
因此

  • a. 2232^{23} 錯
  • b. 2262^{26} 正
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 10 題5 分

Consider the following simple assembly code:
1 Id x5, 0(x1)
2 addi x5, x5, 2
3 Id x6, 4(x1)
4 addi x7, x5, x6
5 sd x7, 8(x1)
We assume that the pipelined datapath consists of five stages: Instruction Fetch, Instruction Decode, Execution, Memory
Access and Write Back. Although some instructions do not perform the fifth stage, please also count the fifth stage
Which of the following statements is/are true?
a. Without data forwarding, this code requires 13 cycles.
b. With data forwarding, this code requires 11 cycles.
c. Re-ordering this code can totally avoid data hazard.
d. Re-ordering this code and forwarding data can attain 9 cycles
e. Re-ordering this code and forwarding data only can attain 10 cycles

登入後即可作答並保存紀錄。

這一題的完整詳解

階段計算
5 階段流水線,NN 條指令的最少週期為
base=5+(N−1)=9  cycles\text{base}=5+(N-1)=9\;\text{cycles}


(a) 無 forwarding

  • I1 → I2 (load → addi):需等到 WB 才能在 ID 讀取 → 2 個停頓
  • I2 → I4 (addi → addi):同上 → 2 個停頓
  • I3 → I4 (load → addi):同上 → 2 個停頓

總停頓 =2+2+2=6=2+2+2=6,  9+6=15\;9+6=15 cycles。
a ≠ 13 → 錯誤


(b) 有 forwarding

  • load‑use 仍需 1 個停頓:I1 → I2、I3 → I4
  • I2 → I4 可在 EX 階段直接轉發,無停頓

總停頓 =1+1=2=1+1=2,  9+2=11\;9+2=11 cycles。
b 為 正確


🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 11 題5 分

SRTF is the Shortest Remaining Time First scheduling algorithm. Please write down a set of processes to explain how SRTF can
result in starvation.

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考驗作業系統中 CPU 排程演算法(CPU Scheduling Algorithm) 的特性,特別是 SRTF(Shortest Remaining Time First,最短剩餘時間優先) 演算法及其引起的 飢餓現象(Starvation / Indefinite Blocking)。

  1. SRTF(Shortest Remaining Time First):

    • SRTF 是 SJF(Shortest Job First) 的 搶佔式(Preemptive) 版本。
    • 排程決策點:每當有新程序進入 Ready Queue 或目前執行的程序結束時,CPU 永遠指派給「剩餘 CPU Burst Time 最短」的程序。
    • 若新到達程序的 Burst Time 小於當前執行程序的「剩餘時間」,當前程序會立即被搶佔(Preempted),CPU 轉交給新程序。
  2. 飢餓現象(Starvation):

    • 指某一程序在 Ready Queue 中長期(甚至無限期)無法獲得 CPU 資源執行的狀態。
    • 在 SRTF 中,若系統中持續有短 CPU Burst 的程序源源不絕地到達,其剩餘時間皆小於長程序的剩餘時間,長程序將永遠無法競爭到 CPU,因而陷入 Starvation。

解題方法

要證明 SRTF 會導致 Starvation,必須設計一組程序集合(包含程序名稱、到達時間 Arrival Time, AT、CPU 執行時間 Burst Time, BT),並透過時間軸推導(Gantt Chart 邏輯)展示長程序如何被無限期阻塞。

1. 程序集合設計(Process Set Design)

設程序集合包含一個「長程序 P1P_1」與一連串「短程序序列 P2,P3,P4,…P_2, P_3, P_4, \dots」:

程序 (PiP_i)到達時間 (Arrival Time, AT)CPU 執行時間 (Burst Time, BT)
P1P_1001010
P2P_21122
P3P_33322
P4P_45522
⋮\vdots⋮\vdots⋮\vdots
PkP_k (k≥2k \ge 2)2k−32k - 322

2. 執行過程與剩餘時間推導(Execution Trace)

  • 時間 t=0t = 0:

    • Ready Queue 僅有 P1P_1。
    • P1P_1 開始執行,其剩餘時間 Remaining Time(P1)=10\text{Remaining Time}(P_1) = 10。
  • 時間 t=1t = 1:

    • P1P_1 已執行 11 個時間單位,剩餘時間 Remaining Time(P1)=9\text{Remaining Time}(P_1) = 9。
    • 短程序 P2P_2 到達(AT=1,BT=2\text{AT} = 1, \text{BT} = 2)。
    • 比較剩餘時間:Remaining Time(P2)=2<Remaining Time(P1)=9\text{Remaining Time}(P_2) = 2 < \text{Remaining Time}(P_1) = 9。
    • 發生搶佔(Preemption):P1P_1 被迫切回 Ready Queue,CPU 轉而執行 P2P_2。
  • 時間 t=3t = 3:

    • P2P_2 執行完畢(執行區間 t∈[1,3]t \in [1, 3])。
    • 同時,短程序 P3P_3 到達(AT=3,BT=2\text{AT} = 3, \text{BT} = 2)。
    • 比較剩餘時間:Remaining Time(P3)=2<Remaining Time(P1)=9\text{Remaining Time}(P_3) = 2 < \text{Remaining Time}(P_1) = 9。
    • CPU 選擇執行 P3P_3。
  • 時間 t=5t = 5:

    • P3P_3 執行完畢(執行區間 t∈[3,5]t \in [3, 5])。
    • 同時,短程序 P4P_4 到達(AT=5,BT=2\text{AT} = 5, \text{BT} = 2)。
    • 比較剩餘時間:Remaining Time(P4)=2<Remaining Time(P1)=9\text{Remaining Time}(P_4) = 2 < \text{Remaining Time}(P_1) = 9。
    • CPU 選擇執行 P4P_4。
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 12 題5 分

Continuing from problem 11, let us consider the Highest Response Ratio Next (HRRN) scheduling algorithm in which the priority
of a process at a timepoint is defined as (accumulated waiting time + remaining time)/remaining time. Please explain how the
HRRN algorithm can avoid starvation to the set of processes in your answer to problem 11.

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查作業系統中 HRRN (Highest Response Ratio Next) 排程演算法的設計原理與 Starvation(飢餓現象) 的防範機制。

  1. HRRN 的優先權定義公式:
    在任何時間點,Process 的優先權(Response Ratio, RR)定義如下:
    R=W+SS=1+WSR = \frac{W + S}{S} = 1 + \frac{W}{S}

    • WW:累積等待時間(Accumulated Waiting Time)。
    • SS:預估或剩餘執行時間(Estimated / Remaining Service Time)。
  2. SJF / SRTF 的 Starvation 問題:
    在 Shortest Job First (SJF) 或 Shortest Remaining Time First (SRTF) 排程中,優先權僅取決於 SS。若系統中持續有短執行時間(Small SS)的 Process 到達,長執行時間(Large SS)的 Process 優先權將永遠低於新來的短 Process,導致長 Process 無法獲得 CPU 資源,產生 Starvation。

  3. Aging(老化機制):
    HRRN 透過將等待時間 WW 納入優先權分子中,隱式實現了 Aging 機制,使長期等待的 Process 優先權動態提升。


解題方法

說明 HRRN 如何避免 Starvation 的關鍵推導步驟如下:

  1. 等待時間 WW 的動態成長特性:
    當一個 Process 被放入 Ready Queue 後,只要它未被排程執行,其累積等待時間 WW 就會隨著時間 tt 線性增加(ΔW=Δt\Delta W = \Delta t)。

  2. Response Ratio RR 的單調遞增性:
    對於任意給定且有限的剩餘執行時間 SS(S>0S > 0),當 W→∞W \to \infty 時:
    lim⁡W→∞R=lim⁡W→∞(1+WS)=∞\lim_{W \to \infty} R = \lim_{W \to \infty} \left(1 + \frac{W}{S}\right) = \infty
    這說明只要 Process 在 Ready Queue 中持續等待,其 Response Ratio RR 就會持續上升。

  3. 新進短 Process 與長期等待長 Process 的優先權對比:

    • 假設系統持續湧入新的極短 Process PnewP_{\text{new}},其剛到達時 W=0W = 0,其 Response Ratio 為:
      Rnew=1+0Snew=1R_{\text{new}} = 1 + \frac{0}{S_{\text{new}}} = 1
    • 設存在一個長期等待的長 Process PlongP_{\text{long}},其 SlongS_{\text{long}} 較大。當其等待時間達到 Wlong>0W_{\text{long}} > 0 時,其 Response Ratio 為:
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 13 題5 分

Please write down a short program in pseudo code to explain data parallelism.

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

資料平行化 (Data Parallelism) 是平行計算與計算機結構(Computer Architecture)中的核心概念之一,其重點要點如下:

  1. 核心定義:將一份龐大的資料集切分為多個獨立的子集(Subsets),交由多個處理單元(如 CPU 多核心、GPU 運算單元、SIMD 向量暫存器)同時對不同的資料點執行相同的運算邏輯(Single Instruction, Multiple Data, SIMD 或 Single Program, Multiple Data, SPMD)。
  2. 與任務平行化 (Task Parallelism) 之對比:
    • 資料平行化 (Data Parallelism):相同的指令/程式碼,作用於不同的資料區塊上。
    • 任務平行化 (Task Parallelism):不同的指令/程式碼(獨立任務),同時在不同處理器上執行。
  3. 關鍵前提——資料獨立性 (Data Independence):資料點之間的計算不得存在迴圈攜帶相依性 (Loop-Carried Dependency)。即第 ii 個元素的計算結果不能依賴第 (i−1)(i-1) 個元素的計算結果,否則無法安全地進行平行化。

解題方法

為了在考場上最直觀且完整地示範 Data Parallelism,本題採用最經典且具代表性的向量加法 (Vector Addition):C[i]=A[i]+B[i]C[i] = A[i] + B[i] 進行虛擬碼 (Pseudo Code) 設計。

1. 概念推導

  • 順序執行 (Sequential):由單一執行緒從 i=0i = 0 到 N−1N-1 依序計算 NN 次,時間複雜度為 O(N)O(N)。
  • 平行執行 (Parallel):若系統擁有 PP 個處理核心/執行緒,可將長度為 NN 的陣列均分為 PP 個子區塊,每個執行緒獨立且同時處理 N/PN/P 個元素。

2. Data Parallelism Pseudo Code

方法一:高階抽象平行迴圈語法 (parallel_for)
Procedure VectorAddition_DataParallel(A, B, C, N):
    // 輸入:長度為 N 的陣列 A, B
    // 輸出:長度為 N 的陣列 C (C[i] = A[i] + B[i])
    
    // parallel_for 表示所有 iterations 彼此獨立,可由硬體多核心同時執行
    parallel_for i from 0 to N - 1 do
        C[i] <- A[i] + B[i]
    end parallel_for
End Procedure
方法二:顯式多執行緒劃分語法 (SPMD Thread Mapping)
// 假設系統有 P 個執行緒,每個執行緒擁有獨一無二的 thread_id (0 <= thread_id < P)
Procedure VectorAddition_SPMD(A, B, C, N, P, thread_id):
    chunk_size <- N / P
    start_index <- thread_id * chunk_size
    end_index <- min(start_index + chunk_size, N)

    // 各執行緒並行執行此程序,各自處理專屬的資料區塊
    for i from start_index to end_index - 1 do
        C[i] <- A[i] + B[i]
    end for
End Procedure

3. 複雜度分析 (Complexity Analysis)

  • 時間複雜度 (Time Complexity):
    • 順序執行:O(N)O(N)
    • 平行執行(設核心數為 PP,且 P≤NP \le N):O(NP)O\left(\frac{N}{P}\right)
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 14 題5 分

Please write down a short program in pseudo code to explain task parallelism.

登入後即可作答並保存紀錄。

這一題的完整詳解

任務平行(Task Parallelism)指將 相互獨立且無資料相依 的子工作分配至多個執行單元,同時執行,以縮短總執行時間。典型模型為 fork‑join:父任務分裂 (fork) 多個子任務,子任務結束後回收 (join)。若每個子任務執行時間為 TiT_i,平行度為 PP(可用處理器數),理想總時間為

Ttotal=max⁡i=1..PTiT_{\text{total}} = \max_{i=1..P} T_i

(忽略同步開銷)。

精簡偽碼範例(四個獨立任務)

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 15 題5 分

Please explain how a thread library manage to implement a multi-thread program in a single kernel thread.

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查作業系統中執行緒模型(Thread Models)的實現機制,特別是多對一模型(Many-to-One Model / User-Level Threads, ULT)。

在單一核心執行緒(Kernel Thread / Lightweight Process, LWP)之上實現多執行緒程式,代表作業系統核心(Kernel)完全感知不到使用者層級的多執行緒架構,核心僅將整個行程(Process)視為單一執行執行緒。所有的執行緒建立、管理、排程、上下文切換與狀態維護,均由執行緒函式庫(Thread Library,如早期 Java Green Threads 或 GNU Pth)在**使用者空間(User Space)**獨立完成。


解題方法

要完整說明執行緒函式庫如何於單一核心執行緒中實現多執行緒,必須從資料結構與記憶體配置、使用者空間上下文切換、排程與搶佔機制,以及**阻塞系統呼叫的處理(Jacketing / Non-blocking I/O)**四個核心面向說明:

1. 資料結構與記憶體配置(Thread Control Block & Stack)

  • 使用者層級 TCB(User-level Thread Control Block):執行緒函式庫會在使用者空間中維護一個 TCB 結構,用以儲存各個使用者執行緒的狀態(READY、RUNNING、BLOCKED)、執行緒 ID、程式計數器(Program Counter, PC)、堆疊指標(Stack Pointer, SP)及通用暫存器(General-purpose Registers)數值。
  • 獨立使用者堆疊(Independent User Stacks):函式庫會在行程的堆疊區或堆積區(Heap)為每個使用者執行緒分配一塊獨立的記憶體空間作為其專屬的使用者堆疊(User Stack),用於維護區域變數與函式呼叫框架(Stack Frames)。

2. 使用者空間上下文切換(User-Space Context Switch)

當排程器決定切換執行執行緒時,上下文切換完全在使用者空間執行,不需透過系統呼叫(System Call)觸發模式切換(User Mode 到 Kernel Mode):

  1. 保存現有狀態:將當前 CPU 暫存器(PC、SP、通用暫存器等)的值寫入當前執行緒的 TCB 中。
  2. 載入目標狀態:將下一個準備執行的執行緒之 TCB 中儲存的暫存器數值寫回 CPU 暫存器。
  3. 跳轉執行:更新 SP 至目標執行緒的堆疊,並將 PC 指向其待執行指令位址以恢復執行(實作上常採用 C 語言標準庫的 setjmp() / longjmp() 或 POSIX 的 swapcontext() 機制與組譯碼常式)。

3. 排程與搶佔機制(Scheduling & Preemption)

  • 自願讓出(Voluntary Yielding):執行緒可主動呼叫函式庫提供的 API(如 thread_yield()),觸發函式庫排程器進行上下文切換。
  • 非自願搶佔(Preemptive Scheduling):為了防止單一執行緒因無窮迴圈而獨佔核心執行緒,函式庫利用作業系統提供的時脈訊號(如 POSIX 的 setitimer() 或 SIGALRM 訊號)。當計時器到期,作業系統傳送訊號給該行程,觸發函式庫註冊的訊號處理常式(Signal Handler),由該常式充當使用者排程器強行切換執行緒。

4. 阻塞系統呼叫之包裝與處理(Jacketing / Non-blocking I/O)

  • 痛點:若某個使用者執行緒發起傳統阻塞式系統呼叫(如傳統的 blocking read()),作業系統核心會將唯一的核心執行緒掛起(Block),導致該行程內的所有使用者執行緒全部被迫凍結。
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 16 題5 分

Please write down a page-reference sequence to explain how the LFU (least frequently used) algorithm can perform worse than
the reference-bit algorithm.

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

  1. LFU(Least Frequently Used,最少使用)頁面置換演算法:

    • 為每個在記憶體中的頁面維護一個「存取次數計數器(Access Frequency Counter)」。
    • 當發生頁面錯誤(Page Fault)且實體頁框(Page Frame)已滿時,選擇累積存取次數最少的頁面予以淘汰置換;若有多個頁面次數相同,通常以 FIFO(先先進出)作為平手打破規則(Tie-breaker)。
    • 核心缺點:具有歷史累積效應。在早期被頻繁存取的頁面會累積很高的計數,即使後續程式的工作集(Working Set)轉移且該頁面不再被使用,其高計數仍會使其長期被鎖在記憶體中(成為過時的殭屍頁面),擠占有限的頁框資源。
  2. 參考位元演算法(Reference-Bit Algorithm / 二次機會演算法 Second-Chance Algorithm):

    • 為每個頁面設置 1 個參考位元(Reference Bit RR)。當頁面被載入或被存取時,系統將其設為 R=1R = 1。
    • 當發生缺頁需置換時,依據環狀指標(Clock Pointer)依序檢查:若指標指向頁面的 R=1R = 1,給予二次機會並將其清零(R=0R = 0),指標移至下一個頁框;若遇到 R=0R = 0 的頁面,則直接淘汰該頁面並置換新頁面,最後將指標移至下一位置。
    • 核心優點:參考位元會在搜尋置換目標時被定期清零,能淘汰舊的存取歷史,進而快速反應近期的區域性(Locality of Reference)。

解題方法

要證明 LFU 演算法的表現劣於參考位元演算法,只需設定適當的實體頁框數量(Frame Size mm),並構造一組特定的頁面參考序列(Page-Reference Sequence SS),分別推導兩者產生的頁面錯誤(Page Fault)次數。

1. 實驗條件設定

  • 實體頁框數:m=3m = 3(初始皆為空)。
  • 頁面參考序列:S=A, A, B, C, D, B, C, DS = \text{A, A, B, C, D, B, C, D}(總長度 8 次存取)。

2. LFU 演算法推導過程

  • 置換規則:選擇累積存取次數最小者淘汰;次數相同時淘汰最早載入者(FIFO)。
步驟存取頁面記憶體頁框狀態 [Frame 0, Frame 1, Frame 2] (存取次數)是否發生 Page Fault說明與置換決策
1A[A(1), _, _]Fault (1)載入 A,計數 A=1A=1
2A[A(2), _, _]HitA 命中,計數累加 A=2A=2
3B[A(2), B(1), _]Fault (2)載入 B,計數 B=1B=1
4C[A(2), B(1), C(1)]Fault (3)載入 C,計數 C=1C=1
5D[A(2), D(1), C(1)]Fault (4)記憶體滿。最小次數為 1(B 與 C)。依 FIFO 淘汰較早載入的 B。載入 D(D=1D=1)
6B[A(2), D(1), B(1)]Fault (5)記憶體滿。最小次數為 1(C 與 D)。依 FIFO 淘汰較早載入的 C。載入 B(B=1B=1)
7C[A(2), C(1), B(1)]Fault (6)記憶體滿。最小次數為 1(D 與 B)。依 FIFO 淘汰較早載入的 D。載入 C(C=1C=1)
8D[A(2), C(1), D(1)]Fault (7)記憶體滿。最小次數為 1(B 與 C)。依 FIFO 淘汰較早載入的 B。載入 D(D=1D=1)
  • LFU 總缺頁次數:77 次。

3. 參考位元(二次機會)演算法推導過程

  • 置換規則:指標初始指向 Frame 0。存取頁面時將該頁面的參考位元 RR 設為 11。缺頁時若指標指向 R=1R=1 則清零為 00 並前進,直到遇到 R=0R=0 的頁面予以淘汰。
步驟存取頁面頁框狀態與參考位元 [Frame 0, Frame 1, Frame 2]環狀指標位置是否發生 Page Fault說明與置換決策
1A[A(R=1), _, _]Frame 1Fault (1)載入 A(RA=1R_A=1),指標移至 Frame 1
🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 17 題5 分

Please explain NUMA in memory management and its design and function in a symmetric multiprocessing system.

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考驗多處理器系統(Multiprocessor Systems)中**非均勻記憶體存取(Non-Uniform Memory Access, NUMA)**架構的硬體設計原理以及作業系統(OS)在記憶體管理上的因應機制與功能。

  1. UMA vs. NUMA 架構對比:

    • 均勻記憶體存取(Uniform Memory Access, UMA):所有 CPU 核心透過共享匯流排(Shared Bus)存取集中式實體記憶體,任意 CPU 存取任意記憶體位置的延遲皆相同(Latency 為常數 tUMAt_{\text{UMA}})。當 CPU 數量增加時,共享匯流排會成為嚴重的效能瓶頸(Bus Contention)。
    • 非均勻記憶體存取(Non-Uniform Memory Access, NUMA):實體記憶體被切分並分散建置於各個 CPU 節點(NUMA Node)側。CPU 存取同節點內的記憶體稱為本地存取(Local Access),延遲為 tlocalt_{\text{local}};透過跨節點互連網路存取其他節點的記憶體稱為遠端存取(Remote Access),延遲為 tremotet_{\text{remote}}。兩者滿足 tremote>tlocalt_{\text{remote}} > t_{\text{local}},其比值稱為 NUMA Factor(NUMA Factor=tremotetlocal>1\text{NUMA Factor} = \frac{t_{\text{remote}}}{t_{\text{local}}} > 1)。
  2. 對稱多處理系統(SMP)與 ccNUMA:

    • 儘管實體記憶體物理上分散,NUMA 系統仍維持 SMP 的核心特性:所有 CPU 共享單一連續的實體位址空間(Single Physical Address Space),並透過硬體層級的快取一致性協定(Cache Coherence Protocol,如 MESI/MOESI 延伸協定)維持資料一致,此架構又稱為 ccNUMA(Cache-Coherent NUMA)。
  3. 作業系統 NUMA 感知記憶體管理(NUMA-Aware Memory Management):

    • OS 核心必須將實體記憶體劃分為多個 NUMA 節點(在 Linux Kernel 中以 pg_data_t 結構抽象化)。
    • OS 記憶體配置器(Memory Allocator)與排程器(Scheduler)必須協同運作,極大化本地存取比例(Locality Optimization),降低跨節點流量。

解題方法

在臺灣大學電機工程研究所(丙組)考試中,解答此類英文申論題時,必須採取「結構化條列式」撰寫,精準命中硬體設計與 OS 記憶體管理兩大面向:

1. NUMA 的硬體設計原理(Design in SMP)

  • 分散式共享記憶體(Distributed Shared Memory):每個處理器 Socket 擁有獨立的本地記憶體控制器(Local Memory Controller)與直接掛載的 DRAM 通道。
  • 點對點互連網路(Point-to-Point Interconnect):節點之間透過高速互連通道(如 Intel UPI/QPI、AMD Infinity Fabric)連接,用於轉發遠端記憶體讀寫請求與快取一致性訊號。
  • 解決 SMP 擴充性瓶頸:消除傳統 UMA 匯流排的單點爭用,使系統記憶體總頻寬(Aggregate Bandwidth)隨著 CPU 節點數增加而呈線性成長。

2. OS 記憶體管理機制與功能(Function in Memory Management)

  • 頁面配置策略(Page Allocation Policies):
    1. 首觸策略(First-Touch Policy,預設):當行程觸發 Page Fault 時,OS 優先在「當前執行該行程的 CPU 所在之 NUMA 節點」配置實體頁面(Physical Page Frame),從源頭極大化 Local Access。
    2. 交錯配置策略(Interleave Policy):將連續的虛擬頁面以 Round-Robin 方式輪流配置給各個 NUMA 節點,適用於多執行緒共享且頻寬導向的大型資料集,避免單一節點記憶體頻寬飽和。
    3. 綁定策略(Binding Policy):限定行程只能從特定的 NUMA 節點配置記憶體。
  • NUMA 感知排程與親和性(NUMA-Aware Scheduling & Affinity):
    • CPU/Memory Affinity:OS 排程器盡量保留執行緒於同一 CPU 節點執行,避免 Thread Migration 導致原本的 Local Access 變成 Remote Access。
  • 動態頁面遷移與重平衡(Dynamic Page Migration / AutoNUMA):
    • 當排程器迫不得以將執行緒遷移至新節點時,OS 核心(如 Linux AutoNUMA)會追蹤頁面的存取頻率(使用 Page Fault 追蹤)。若發現某頁面被遠端 CPU 頻繁存取,OS 會自動將該實體頁面遷移(Migrate)至該 CPU 的本地記憶體節點,或是將執行緒移回資料所在的節點(Task Migration)。

選項分析

本題為問答申論題,答題時應將 NUMA 各項關鍵設計面向與配置策略做對比分析,說明各種設計決策的優缺點與適用場景:

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

第 18 題5 分

Please write down a multithread program in pseudo code to explain race condition.

登入後即可作答並保存紀錄。

這一題的完整詳解

核心觀念

本題考查多執行緒中的 Race Condition(競爭情況)。

當多個執行緒同時存取共享資料,且至少有一個執行緒會修改該資料,而程式結果又取決於執行緒的執行順序時,就會發生競爭情況。

以共享變數 counter 為例,執行:

counter←counter+1counter \leftarrow counter + 1

表面上是一個運算,實際上通常包含三個步驟:

  1. 讀取 counter
  2. 計算讀取值加一
  3. 將結果寫回 counter

這三個步驟不是不可分割的原子操作,因此多個執行緒交錯執行時,可能互相覆蓋更新結果。

解題方法

建立兩個執行緒,讓它們同時對同一個共享變數執行遞增操作。預期結果與實際結果不一致,即可清楚展示競爭情況。

會產生競爭情況的虛擬碼

shared counter = 0

procedure increment():
    repeat 1000 times:
        temp = counter
        temp = temp + 1
        counter = temp

thread T1 runs increment()
thread T2 runs increment()

wait until T1 and T2 finish

print counter

理論上,兩個執行緒各遞增 10001000 次,因此預期結果為:

counter=1000+1000=2000counter = 1000 + 1000 = 2000

但程式不一定輸出 20002000。

競爭情況的具體執行順序

假設目前:

counter=0counter = 0

兩個執行緒可能依照下列順序執行:

執行步驟執行緒操作counter
1T1讀取 counter 到 temp0
2T2讀取 counter 到 temp0
3T1temp = temp + 10
4T2temp = temp + 10
5T1寫回 counter = 11
6T2寫回 counter = 11

兩個執行緒都完成了一次遞增,但最後結果只有 11,其中一次更新被覆蓋。

因此,兩個執行緒各執行 10001000 次後,實際結果可能小於 20002000。實際數值取決於執行緒切換與指令交錯的順序。

臨界區與修正方法

上述程式中,以下區段屬於 Critical Section(臨界區):

temp = counter
temp = temp + 1
counter = temp

臨界區必須確保同一時間只有一個執行緒進入。可以使用互斥鎖(Mutex)保護共享資料。

🔒

後續完整解題步驟與【答案】

免費註冊,享三天全站完整詳解閱覽。

免費註冊

其他考古題