115 年 國立中山大學資訊工程學系碩士班甲組《作業系統與資料結構》
第 1 題20 分
- (20%) Fill-in questions (2 points each)
(a) The number of processes currently in memory is known as the degree of .
(b) The modify bit (also called ____ bit) is set when page content is changed.
(c) The ____ is a module in the CPU-scheduling function, which provides the control of a CPU core to the process selected by the CPU scheduler.
(d) Any solution to the ____ problem must satisfy three requirements of mutual exclusion, progress, and bounded waiting.
(e) The main mass-storage system is secondary storage, which is usually provided by hard disk drive devices and ____ memory devices.
(f) To encapsulate details and oddities of different I/O devices, the kernel of an operating system is structured to employ device- modules.
(g) Among all necessary deadlock conditions, the condition of ____ implies the condition of hold and wait.
(h) File is a ____ collection of related information that is recorded on secondary storage.
(i) The ____ principle says that at any time, a process can access only resources that it currently requires to complete its task.
(j) Breach of ____ means unauthorized reading of data.
登入後即可作答並保存紀錄。
(a)
觀念:記憶體中同時存在的程序(process)數量稱為多工度(degree of multiprogramming)。
【答案】multiprogramming
(b)
觀念:分頁系統中,若頁面內容被修改,頁表中的 modify bit 會被設為 1,該位元又稱為髒位元(dirty bit),用於分頁替換時判斷是否需要寫回次級儲存設備。
【答案】dirty
(c)
觀念:分派器(dispatcher)是 CPU 排程功能中的模組,負責將 CPU 控制權交給被 CPU 排程器選中的程序,並執行上下文切換(context switch)與切換至使用者模式。
【答案】dispatcher
(d)
觀念:解決臨界區段問題(critical-section problem)的演算法必須同時滿足三大條件:互斥(mutual exclusion)、進行(progress)與有限等待(bounded waiting)。
【答案】critical-section(或 critical section)
第 2 題10 分
- (a) (6%) What are three cases that cause a running process to give up the CPU core involuntarily? Please also mention the queue it will be placed in.
(b) (4%) Explain warm cache from the perspective of processor affinity.
登入後即可作答並保存紀錄。
核心觀念
「非自願交出 CPU」指的是 preemption(搶占):執行中的 process 並未主動呼叫 yield、等待 I/O 或結束,而是被時鐘中斷、排程器或核心管理機制強制暫停。
若該 process 仍可繼續執行,狀態轉移為:
作業系統會先將暫存器、程式計數器等執行環境存入 PCB,再把它放入 Ready Queue(就緒佇列);多核心系統通常是放入某一 CPU 的 per-CPU run queue。
(a) 解題方法與三種案例
| 案例 | 觸發原因 | 目前 process 的狀態轉移 | 放入的佇列 |
|---|---|---|---|
| 1. 時間片耗盡 | Timer interrupt 發生,Round Robin 等搶占式排程的 time quantum 用完 | Ready Queue | |
| 2. 更高優先權的 process 變成可執行 | 新 process 到達、建立,或其他事件使高優先權 process 進入就緒狀態 | Ready Queue | |
| 3. 多核心排程器強制重新分配 CPU | 負載平衡、CPU core 被停用、強制 task migration 等 | 原 CPU 或目標 CPU 的 Ready Queue |
第 2 種情況常由 I/O 完成中斷引起。被喚醒的 process 會從等待佇列進入 Ready Queue;若其優先權高於目前執行中的 process,排程器便會搶占目前 process。此時:
- 被喚醒的 process:等待佇列 Ready Queue
- 原本正在執行的 process:Running Ready Queue
常見陷阱
目前 process 主動提出 I/O、等待 semaphore、呼叫 sleep,屬於阻塞:
此時應放入相應的 I/O 或事件等待佇列,不是非自願搶占。若 process 已執行完畢,則進入 Terminated 狀態,也不會放入任何就緒佇列。
第 3 題10 分
- (a) (6%) Please give three common ways to handle a deadlock problem in operating systems.
(b) (4%) Explain copy-on-write from the perspective of memory management.
登入後即可作答並保存紀錄。
第 3 題
(a) 處理死結問題的三種常見方法
核心觀念
死結(deadlock)是指一組行程彼此等待對方所持有的資源,導致所有行程都無法繼續執行。
死結成立時,通常同時具備以下四個必要條件:
- 互斥(mutual exclusion):資源一次只能由一個行程使用。
- 持有並等待(hold and wait):行程持有部分資源,同時等待其他資源。
- 不可剝奪(no preemption):資源不能被系統強制取回,只能由行程主動釋放。
- 循環等待(circular wait):存在行程等待鏈,形成環狀依賴。
處理死結的三種標準方法如下。
1. 死結預防(deadlock prevention)
預先設計資源分配規則,使上述四個必要條件至少有一個不成立,從根本上避免死結。
常見做法包括:
- 要求行程一次取得所有需要的資源,破壞「持有並等待」。
- 允許系統剝奪行程已持有的資源,破壞「不可剝奪」。
- 對所有資源訂定全域順序,行程只能依固定順序取得資源,破壞「循環等待」。
- 將不可共享的資源改為可共享,破壞「互斥」,但並非所有資源都能如此處理。
優點是保證不發生死結;缺點是資源使用效率可能降低,且可能造成長時間等待。
2. 死結避免(deadlock avoidance)
允許系統具備形成死結的可能性,但每次分配資源前,先判斷分配後是否仍處於安全狀態(safe state)。
安全狀態表示:存在某種行程執行順序,使所有行程都能取得所需資源並順利完成。若某次資源請求會使系統進入不安全狀態,系統便暫緩該請求。
典型方法是 銀行家演算法(Banker’s algorithm)。它需要事先知道各行程的最大資源需求,再根據:
Available:目前可用資源Max:各行程的最大需求Allocation:目前已分配資源Need = Max - Allocation:尚需資源
判斷資源分配後是否仍存在安全序列。
優點是資源利用率通常比預防法高;缺點是需要知道最大需求,且每次分配前都要進行額外檢查。
3. 死結偵測與復原(deadlock detection and recovery)
系統先允許資源自由分配,不事先阻止死結;當系統定期執行死結偵測演算法,確認已形成死結後,再採取復原措施。
偵測方式包括:
- 單一實例資源:可利用等待圖(wait-for graph)檢查是否存在循環。
- 多重實例資源:可使用類似銀行家演算法的死結偵測程序。
發現死結後,可採取:
- 終止一個或多個行程。
- 強制剝奪部分資源。
- 回復行程至先前的檢查點。
- 依優先權、已執行時間、剩餘需求等條件選擇犧牲行程。
優點是平時不需支付大量預防或避免成本;缺點是死結發生後才處理,可能造成資料遺失、行程終止與復原成本。
解題技巧
題目要求「三種常見方法」時,最標準的三項是:
- Deadlock prevention
- Deadlock avoidance
- Deadlock detection and recovery
「忽略死結(ignore the problem)」也是部分作業系統採用的實務策略,但通常不列入這題要求的標準三大類。作答時應優先寫出上述三項,並為每項補上核心作法與優缺點。
(b) Copy-on-write
第 4 題10 分
- (10%) What are the five steps involved in a typical sector-sparing transaction?
登入後即可作答並保存紀錄。
核心觀念
本題考查磁碟壞區(bad block/bad sector)的處理方式。磁碟在低階格式化時會保留部分備用區塊(spare sectors),並由磁碟控制器維護壞區清單。當某個實體磁區損壞時,控制器將原本的邏輯區塊重新導向至備用磁區,此機制稱為 sector sparing,也稱為 sector forwarding。作業系統仍使用原本的邏輯區塊編號,無須知道實際的實體位置。Bad Blocks 教材內容
解題方法
題目要求列出交易流程,因此依照「發出讀取要求 → 偵測錯誤 → 建立替代 → 後續重新導向」的時間順序作答。以邏輯區塊 為例,五個步驟如下:
-
作業系統要求讀取邏輯區塊
作業系統發出讀取請求,指定要存取邏輯區塊 。此時作業系統只使用邏輯位址,不直接處理磁碟的實體磁區位置。
-
控制器計算 ECC,偵測出磁區損壞
磁碟控制器讀取該磁區後,重新計算錯誤更正碼(Error-Correcting Code, ECC),並與磁區中原本儲存的 ECC 比對。若比對結果顯示資料已損壞,控制器便判定該磁區為壞區。
-
控制器將壞區資訊回報給作業系統
第 5 題10 分
- What is printed by each of the following C programs?
(a) (5%)
int x = 12;
int y = 25;
printf("%d\n", x^y & ~x | y << 2);
//^: bitwise XOR; &: bitwise AND; ~: bitwise NOT; |: bitwise OR; <<: left shift
(b) (5%)
int mystery(int *p, int n) {
static int count = 0;
count++;
if (n <= 0) return count;
if (*p > 10)
return *p + mystery (p + 1, n - 1);
else
return mystery(p + 1, n - 1);
}
int main() {
int arr[] = {15, 5, 20, 8, 30};
printf("%d\n", mystery(arr, 3));
return 0;
}
登入後即可作答並保存紀錄。
(a) 題目詳解
核心觀念
本題測驗 C 語言的**運算子優先順序(Operator Precedence)與結合性(Associativity)以及位元運算子(Bitwise Operators)**的二進位數值計算。
在 C 語言中,相關運算子的優先順序由高至低依序為:
- 一元位元 NOT(Bitwise NOT):
~(單目運算子,優先權最高) - 位移運算子(Bitwise Shift):
<<、>> - 位元 AND(Bitwise AND):
& - 位元 XOR(Bitwise XOR):
^ - 位元 OR(Bitwise OR):
|(優先權最低)
運算式 x ^ y & ~x | y << 2 依優先權加上括號後的實際執行順序為:
解題方法與逐步推導
給定變數初始值:
步驟 1:計算優先權最高的子運算式 ~x 與 y << 2
y << 2:將 左移 位元(相當於 ):
~x:對 進行逐位元取反。在 32 位元有號整數中:
步驟 2:計算位元 AND 運算 y & ~x
- 的本質為「保留 中 對應位元為 的位元,清除 對應位元為 的位元」:
步驟 3:計算位元 XOR 運算 x ^ (y & ~x)
- 將 與 進行互斥或(XOR)運算(相同為 0,相異為 1):
步驟 4:計算位元 OR 運算 29 | 100
- 將步驟 3 的結果 與步驟 1 的結果 進行位元 OR 運算:
因此,printf 印出之數值為 125。
解題技巧與常見陷阱
- 優先順序口訣:位元邏輯運算子的優先權為 「AND 先於 XOR,XOR 先於 OR」(記憶法:類似邏輯/代數運算中「乘法先於加法」,
&^|)。
第 6 題10 分
- (10%) Given the inorder traversal ABCDEFGHIJ and the postorder traversal ABDCGIHJFE of a binary tree, determine the preorder traversal.
登入後即可作答並保存紀錄。
核心觀念
二元樹三種走訪順序定義如下:
- Inorder(中序):左子樹 根 右子樹
- Postorder(後序):左子樹 右子樹 根
- Preorder(前序):根 左子樹 右子樹
後序走訪的最後一個節點必為整棵樹的根。利用根在中序序列中的位置,可將左右子樹分開,再遞迴判斷各子樹的根。
解題方法
已知:
1. 找出整棵樹的根
後序序列最後一個節點為 ,因此整棵樹的根是 。
在中序序列中, 將節點分成:
- 左子樹:
- 右子樹:
因此後序序列可分成:
- 左子樹後序:
- 右子樹後序:
- 根:
2. 建立左子樹
左子樹的中序與後序分別為:
後序最後一個節點為 ,所以左子樹的根是 。
在中序 中, 左側為 ,右側為 :
- 的左子樹:中序 ,後序
- 的右子樹:節點
對於中序 、後序 :
- 後序最後一個節點 為根
- 為 的左子節點
所以左子樹的前序為:
3. 建立右子樹
右子樹的中序與後序分別為:
第 7 題10 分
- (10%) Consider a hash table of size M = 11, where each bucket can hold only one key. The table uses double hashing. The primary hash function is h₁(k) = (k mod 11), and the secondary hash function is h₂(k) = 7 - (k mod 7). Insert the keys 11, 33, 66, 7, 77 (in this order) into the empty hash table. Show the final state of the hash table after all insertions.
登入後即可作答並保存紀錄。
核心觀念
本題考查雜湊表的「雙重雜湊」(double hashing)碰撞處理法。
對每個鍵值 ,第 次探測的位置為:
其中:
第 次探測先檢查主要雜湊位置 ;若發生碰撞,便依照 的步距繼續探測。
解題方法與逐一插入
1. 插入鍵值
第 次探測位置:
位置 為空,因此將 放入位置 。
2. 插入鍵值
第 次探測:
位置 已有 ,發生碰撞。
第 次探測:
位置 為空,因此將 放入位置 。
3. 插入鍵值
第 次探測:
位置 已被 佔用。
第 次探測:
位置 為空,因此將 放入位置 。
4. 插入鍵值
第 8 題10 分
- Consider the adjacency matrix of an undirected graph as follows:
A B C D E F
A [0 2 4 0 5 0]
B [2 0 1 9 0 7]
C [4 1 0 0 6 10]
D [0 9 0 0 0 8]
E [5 0 6 0 0 3]
F [0 7 10 8 3 0]
(a) (8%) Starting from vertex A, show the order in which the edges are added into the minimum spanning tree using Prim's algorithm. Use the weight to represent edges in your answer.
(b) (2%) Let V and E denote the number of vertices and edges in a graph, respectively. What is the time complexity of Prim's algorithm when it is implemented using an adjacency list and a binary heap?
登入後即可作答並保存紀錄。
核心觀念
本題考查以 Prim's algorithm 求無向加權圖的 minimum spanning tree(MST)。
- 鄰接矩陣中的非零非對角線元素代表一條邊及其權重; 代表沒有邊。
- Prim's algorithm 維護一個已加入樹中的頂點集合 。
- 每一步都從所有「一端在 、另一端不在 」的邊中,選擇權重最小者加入 MST。
- 這是利用 minimum cut property:跨越切割 的最小權重邊,可安全加入某棵 MST。
- 本圖有 個頂點,因此 MST 必須包含 條邊。
解題方法
由鄰接矩陣可得:
從 開始,令初始集合為 。
| 步驟 | 當前頂點集合 | 可選的跨集合邊 | 選入 MST 的邊 |
|---|---|---|---|
| 1 | |||
| 2 | |||
| 3 | |||
| 4 | |||
| 5 |
因此,邊加入 MST 的順序為:
若只以權重表示,順序為:
第 9 題10 分
- For each of the following sorting algorithms, state its worst-case time complexity using Big-O notation (e.g., O(n)).
(a) (2%) Bubble sort
(b) (2%) Insertion sort
(c) (2%) Quick sort
(d) (2%) Merge sort
(e) (2%) Heap sort
登入後即可作答並保存紀錄。
核心觀念
題目要求的是各排序法在「最壞情況」下的時間複雜度。對輸入規模為 的資料,最壞情況表示在所有可能輸入中,執行時間最長的情形。
分析重點是:
- 每一輪或每一層需要處理多少元素。
- 演算法總共需要執行多少輪。
- 分治法可用遞迴式表示:
解題方法與各小題分析
(a) Bubble sort
Bubble sort 會反覆比較相鄰元素,將較大的元素逐步交換至右側。
最壞情況通常是資料完全反向排列。第 1 輪約需比較 次,第 2 輪約需比較 次,依此類推,因此總比較次數為
即使實作中加入「本輪沒有交換便提前結束」的最佳化,反向排列仍會發生大量交換,因此最壞情況不變。
(b) Insertion sort
Insertion sort 依序將目前元素插入前方已排序的區段。
在最壞情況下,資料完全反向排列。處理第 個元素時,最多需要與前方 個元素比較,並將這些元素向右移動,因此總操作次數約為
所以最壞情況時間複雜度為
(c) Quick sort
Quick sort 每次選擇一個 pivot,進行 partition。一次 partition 需要掃描目前區段中的元素,因此成本為 。
最壞情況發生在每次 pivot 都是目前區段的最小值或最大值,使得分割後一邊有 個元素,另一邊為空集合。遞迴式為
展開後:
因此:
Quick sort 平均情況通常為 ,但題目問的是最壞情況,答案仍為 。