113 中正資工所硬體考點分析
15 題單選裡有 6 題與 108–111 年一字不差。第 3 題與 106 年成大第 7 題同一道最大可接受頁錯誤率。
題型與配分
科目名稱:計算機系統,系所組別「資訊工程學系-甲組」,第 3 節,全卷 100 分、5 頁、6 大題。
| 題號 | 配分 | 主題 |
|---|---|---|
| 1 | 30% | 十五個單選(每題 2 分) |
| 2 | 10% | 巢狀 fork + thread_create 的程序與執行緒數 |
| 3 | 10% | 需求分頁的最大可接受頁錯誤率 |
| 4 | 20% | 快取失誤的 3C 分類(兩種區塊大小) |
| 5 | 15% | 管線為何無法達到無限加速(CPI 與時脈兩方面) |
| 6 | 15% | MIPS 迴圈的危障、插 NOP 與總週期數 |
中正硬體的單選題重複率極高:本卷 15 題中至少有 6 題與 108–111 年完全相同(非法位址、Linux 架構、SRTF 的問題、MLFQ 的時間分配、多層頁表的動機、清理髒頁、sandbox 模式)。
OS 與計組的比重:OS 50%(第 1、2、3 題)、計組 50%(第 4、5、6 題)。
第 1 題:十五個單選(30%)
- (1)|程序產生超出合法範圍的位址,立即結果是什麼——與 109 年第 1(7) 題一字不差
- (2)|控制器產生中斷時會發生什麼——要能描述中斷向量在這個流程裡的角色
- (3)|哪個最能描述 Linux 的架構——要能分辨單體式(monolithic)、微核心、模組化三者,以及 Linux 實際上是哪一種的混合。與 108 年第 1(9) 題一字不差
- (4)|單處理器時代就有、如今讓程式能在 SMP 上利用平行的是什麼技術
- (5)|FCFS 排程最大的問題——要能說出這個效應的名稱與成因
- (6)|SRTF 在實務上的根本困難——與 108 年第 1(7) 題一字不差;中央 112 年第 11 題也考過同一個觀念
- (7)|MLFQ 下 CPU 時間如何在各層之間分配——與 108 第 1(4)、109 第 1(9) 題一字不差,這是第三次出現
- (8)|為什麼要發展多層頁表——單層頁表的問題出在哪,要能講清楚。與 108 年第 1(3) 題一字不差
- (9)|為了避免磁碟存取而先花掉一些 CPU 週期,哪一種做法划算——關鍵是「哪一種頁被換出時不必寫回磁碟」。與 108 年第 1(5) 題一字不差
- (10)|什麼是 buddy system——要能說出它怎麼切割與合併區塊
- (11)|驗證使用者身分的方式中,哪個「不是」課本提過的——課本只列三種 something you ___,要能背出來
- (12)|什麼是沙箱(sandbox)模式——與 108 年第 1(10) 題一字不差
- (13)|檔案系統中的內部碎裂是什麼——要能把內部碎裂與外部碎裂各寫一句,選項就是拿兩者互換
- (14)|既然 LOOK 的尋道延遲最小,為何還要設計尋道時間更長的其他磁碟排程演算法——效能以外還有另一個目標
- (15)|哪些是網際網路的應用層協定——要能把 HTTP/FTP/SMTP/POP3 等協定歸到正確的層級
第 2 題:巢狀 fork 與執行緒(10%)
pid_t pid;
pid = fork();
if (pid == 0) {
fork();
thread_create(...);
}
fork();
- (a)|建立了幾個獨特的程序。要逐層畫出程序樹,並標出每個節點走的是哪一條分支。「created」算不算最初的父程序題目沒講清楚,作答時要說明自己的計算方式
- (b)|建立了幾個獨特的執行緒。
thread_create()被包在if區塊裡,要先數出「有哪些程序會走進那個區塊」;另外要說明算不算每個程序原本的主執行緒 - 陷阱:
if裡面的fork()產生的子程序,也會繼續往下執行thread_create,容易漏算
第 3 題:最大可接受頁錯誤率(10%)
頁表放在暫存器中、頁錯誤服務時間 8 ms(乾淨)或 20 ms(髒)、70% 的被換出頁是髒的、記憶體存取 100 ns,要求有效存取時間 ≤ 200 ns。
- 考有效存取時間的公式,並反求頁錯誤率的上限
- 先把兩種頁錯誤服務時間依比例加權,再代入不等式。ms 與 ns 差了六個數量級,單位要統一
這題與成大 106 年第 7 題一字不差——兩校共用同一道 Silberschatz 習題。
第 4 題:快取失誤的 3C 分類(20%)
字位址序列:18, 121, 26, 123, 168, 169, 126, 68, 85, 89(10 個)。
- (a) 10%|直接對映、10 個區塊、每區塊 1 word。要對每個存取標出是 命中/強制失誤/衝突失誤/容量失誤 之一
- (b) 10%|每區塊改成 10 words,再做一次
- 區塊數是 10 而不是 2 的冪,index 要用除法與取餘數算。(b) 要先把字位址換成區塊號再取 index
- 這題的精髓是「加大區塊利用了空間區域性,但也可能製造新的衝突」,兩種效應同時發生,必須逐一追蹤
- 與 111 年第 6 題題型完全相同,只換位址序列
第 5 題:管線為何無法無限加速(15%)
CPU 執行時間 = IC × CPI × 時脈週期。N 級管線理想加速比是 N,但 N → ∞ 時無法達到無限加速。
- (a)|分別說明管線如何透過「CPI」與「時脈週期」影響效能(指令數不變)
- (b)|列出兩個與「CPI」相關、阻止無限加速的因素
- (c)|列出兩個與「時脈週期」相關的因素
- 分類要對:每個因素要歸到正確的那一項(CPI 還是時脈週期),歸錯就答不到點上。可以從危障與管線暫存器/各級切割兩個方向去想
第 6 題:MIPS 迴圈的危障與 NOP(15%)
LOOP: lw $t0, -4($s0) # $s0 初值 400
sw $t0, 996($s0)
addi $s0, $s0, -4
bne $s0, $zero, LOOP
trap
- (a)|找出所有管線危障(五級 IF/ID/EXE/MEM/WB)。資料危障與控制危障都要找
- (b)|無任何危障硬體(無互鎖、無預測、無 forwarding)時,在不改變指令順序的前提下插入最少的 NOP。NOP 數取決於「暫存器檔能不能同週期先寫後讀」與「分支在哪一級解析」,作答時要註明假設
- (c)|執行 (b) 的程式碼共需幾個週期(到
trap完成 WB 為止)。要先算出迴圈跑幾次,再把 (b) 插的 NOP 一起算進去,最後別忘了管線填滿與排空的週期
這份考卷的難點
- 第 4 題要對同一組位址做兩次完整的 3C 分類。 區塊大小改變之後,有些原本失誤的會變成命中、有些原本不衝突的反而開始撞,必須逐一追蹤。
- 第 6(c) 題要先算出迴圈跑幾次。
$s0從 400 開始每次減 4、到 0 為止——邊界要算清楚,差一的錯誤在這裡特別常見。 - 第 5 題要分別從 CPI 與時脈週期兩個方向回答,而且各要兩個因素,分類錯了就沒分。
- 第 2 題的 fork 樹:
thread_create也在 if 區塊裡,要看清楚有哪些程序會執行到它。
準備建議
- 中正硬體的單選題庫重複率極高。 113 年 15 題裡至少 6 題與 108–111 年完全相同。把 108–112 的所有單選題整理成一份題庫背熟,113 年的 30 分先拿一半
- 第 3 題與成大 106 年第 7 題一字不差——兩校共用 Silberschatz 的習題。這代表課本習題本身就是最好的考古題
- 快取失誤的 3C 分類(第 4 題)是中正連兩年的考點(111 年第 6 題、113 年第 4 題)。要練到能:算 index → 追蹤命中失誤 → 判斷是強制、容量還是衝突
- 管線無法無限加速的理由(第 5 題)要能分成 CPI 類與時脈週期類
- 插 NOP 的規則(第 6 題):要清楚 NOP 數跟哪些假設有關,而且要先算出迴圈次數才能算總週期
- 中正十年無倒扣,選擇題全部都要猜完