112 年 國立中山大學資訊工程學系碩士班甲組《作業系統與資料結構》

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

第 1 題5 分

What are printed by each of the following C program?
(a) (5%)
int a=40, b=24;
printf("%d \n", (a&(~b))((~a) & b));
// ~: bitwise NOT; &: bitwise AND; |: bitwise OR

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

這一題的完整詳解

題面說明

題面在 (a&(~b)) 與 ((~a)&b) 之間缺少運算子;依題目附註列出的運算子,以下以遺漏的位元 OR 運算子 | 解題:

printf("%d\n", (a & (~b)) | ((~a) & b));

核心觀念

本題考查:

  • 位元 NOT:~x 將整數每一個位元反轉。
  • 位元 AND:x & y 只有兩者對應位元皆為 1 時才為 1。
  • 位元 OR:x | y 只要其中一個對應位元為 1 即為 1。
  • 位元互斥或的等價式:
(a&∼b)∣(∼a&b)=a^b(a \mathbin{\&} \sim b) \mathbin{|} (\sim a \mathbin{\&} b)=a\mathbin{\char94}b

其中 ^ 是位元互斥或。

解題方法

已知:

a=40=(00101000)2a=40=(00101000)_2 b=24=(00011000)2b=24=(00011000)_2

只列出低 8 位即可,因為 aa、bb 都是正整數,高位的 NOT 結果不會影響最後的 AND。

先計算第一部分:

∼b=(11100111)2\sim b=(11100111)_2

因此:

a&(∼b)=(00101000)2&(11100111)2=(00100000)2=32\begin{aligned} a\mathbin{\&}(\sim b) &=(00101000)_2\mathbin{\&}(11100111)_2\\ &=(00100000)_2\\ &=32 \end{aligned}

再計算第二部分:

🔒

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

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

免費註冊

第 1 題10 分

What are printed by each of the following C program?
(b) (10%)
// ~: bitwise NOT; &: bitwise AND; |: bitwise OR
int b[ ]={ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42};
int h(int i) {
if (i==1)
{
printf("%d ", b[i]);
return (b[1]);
}
else if (i % 2 == 0) {
printf("%d ", b[i]);
b[i/2] += 1/2;
return (h(i/2));
}
else {
b[i+1] ++;
return (h(i+1));
}
}
int main()
{
h(9);
}

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

這一題的完整詳解

核心觀念

本題考查:

  • 遞迴函式的呼叫順序。
  • 陣列元素的共用與修改。
  • C 語言整數除法:1/2=01/2=0。
  • if、else if、else 的分支判斷。
  • printf 的執行時機。

其中:

b[i/2] += 1/2;

因為 1 與 2 都是整數常數,所以採用整數除法:

1/2=01/2=0

因此這一行不會改變任何陣列元素。


解題方法

初始陣列為:

b[0],b[1],…,b[12]=30,31,32,33,34,35,36,37,38,39,40,41,42b[0],b[1],\ldots,b[12] =30,31,32,33,34,35,36,37,38,39,40,41,42

函式的執行規則如下:

  • i=1i=1:印出 b[1],並結束遞迴。
  • ii 為偶數:先印出 b[i],再呼叫 h(i/2)。
  • ii 為奇數且不等於 11:將 b[i+1] 加 11,再呼叫 h(i+1)。

逐次追蹤如下:

呼叫分支執行動作印出內容
h(9)奇數b[10]++:40→4140\to41,呼叫 h(10)無
h(10)偶數印出 b[10]=41;b[5] += 0;呼叫 h(5)41
h(5)奇數b[6]++:36→3736\to37,呼叫 h(6)無
h(6)偶數印出 b[6]=37;b[3] += 0;
🔒

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

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

免費註冊

第 2 題

The pseudo code for the insertion sort is given as follows.
Read input elements into a ( ); //stored in a[1], a[2], ..., a[n]
for i = 2 to n do
{
j = i;
while (j >= 2) and (a[j] < a[j-1]) do
{
Swap(a[j], a[j-1]); // exchange a[j] and a[j-1]
j = j-1;
}
}
(a) (5%) Suppose that the input elements are 3, 9, 6, 5, 8, 2. How many times (counts) are needed for the execution of Swap( )?
(b) (5%) Suppose that the input is a permutation of {1,2,3,..., n}. What permutation will make Swap() be executed the least times? How many times?
(c) (5%) Suppose that the input is a permutation of {1,2,3,..., n}. What permutation will make Swap () be executed the most times? How many times?

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

這一題的完整詳解

核心觀念

此程式是以相鄰交換實作的插入排序。每次 Swap(a[j], a[j-1]) 都是把目前元素向左移動一格,直到前一個元素不大於它。

定義反轉對(inversion)為:

(p,q) 是反轉對  ⟺  p<q 且 a[p]>a[q](p,q)\text{ 是反轉對}\iff p<q\text{ 且 }a[p]>a[q]

相鄰交換只會消除一個反轉對,因此:

Swap 執行次數=原始排列的反轉對數量\text{Swap 執行次數}=\text{原始排列的反轉對數量}

關鍵程式碼如下:

for i = 2 to n do
{
    j = i;
    while (j >= 2) and (a[j] < a[j-1]) do
    {
        Swap(a[j], a[j-1]);
        j = j-1;
    }
}

(a) 計算指定輸入的交換次數

原始序列為:

[3,9,6,5,8,2][3,9,6,5,8,2]

依照每次插入的結果:

ii本輪排序後序列Swap 次數
22[3,9,6,5,8,2][3,9,6,5,8,2]00
33[3,6,9,5,8,2][3,6,9,5,8,2]11
44[3,5,6,9,8,2][3,5,6,9,8,2]22
55[3,5,6,8,9,2][3,5,6,8,9,2]11
66[2,3,5,6,8,9][2,3,5,6,8,9]55

因此總交換次數為:

0+1+2+1+5=90+1+2+1+5=9

也可直接計算反轉對:

  • 33 後面只有 22 比它小:11 個
  • 99 後面的 6,5,8,26,5,8,2 都比它小:44 個
  • 66 後面的 5,25,2 比它小:22 個
  • 55 後面的 22 比它小:11 個
  • 88 後面的 22 比它小:11 個
1+4+2+1+1=91+4+2+1+1=9

(b) 使交換次數最少的排列

🔒

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

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

免費註冊

第 3 題10 分

Suppose that there are 6 data elements A, B, C, D, E, F with their searching frequencies 4, 9, 1, 6, 8, 7, respectively, where A <B<C<D<E< F. Please present the optimal binary search tree built with these 6 elements such that the searching cost is minimized.

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

這一題的完整詳解

本題考查如何建構一個搜尋成本最小的二元搜尋樹 (Optimal Binary Search Tree, OBST)。

核心觀念:
二元搜尋樹的搜尋成本 (Search Cost) 定義為所有節點搜尋次數的加權總和。如果一個節點 k 的搜尋頻率為 freq(k),並且它在樹中的深度為 depth(k) (根節點深度為 1),則該節點對總搜尋成本的貢獻為 freq(k) * depth(k)。總搜尋成本是所有節點貢獻的總和。
Total Cost=∑i=1nfreq(ki)×depth(ki)\text{Total Cost} = \sum_{i=1}^{n} \text{freq}(k_i) \times \text{depth}(k_i)
我們的目標是選擇一個根節點,然後遞迴地為其左右子樹選擇根節點,使得總搜尋成本最小。

已知資訊:

  • 節點:A, B, C, D, E, F
  • 搜尋頻率:freq(A)=4, freq(B)=9, freq(C)=1, freq(D)=6, freq(E)=8, freq(F)=7
  • 節點順序:A < B < C < D < E < F (這意味著它們可以自然地構成一個二元搜尋樹,其中 A 在左,F 在右,依此類推)
  • 節點數量:n = 6

解題方法:
這個問題可以使用動態規劃 (Dynamic Programming) 來解決。令 cost(i, j) 表示建構包含節點 i 到 j (假設節點已按大小排序,並賦予索引 1 到 n) 的最佳二元搜尋樹的最小搜尋成本。
令 freq_sum(i, j) 表示節點 i 到 j 的搜尋頻率總和。
cost(i,j)=min⁡k=ij{cost(i,k−1)+cost(k+1,j)+freq_sum(i,j)}\text{cost}(i, j) = \min_{k=i}^{j} \{ \text{cost}(i, k-1) + \text{cost}(k+1, j) + \text{freq\_sum}(i, j) \}
其中 cost(i, i-1) = 0 (空樹成本為 0)。

在本題中,節點順序和頻率如下:
節點:A, B, C, D, E, F
索引:1, 2, 3, 4, 5, 6
頻率:4, 9, 1, 6, 8, 7

首先計算頻率總和:
freq_sum(1, 6) = 4 + 9 + 1 + 6 + 8 + 7 = 35

接著,我們需要計算 cost(i, j)。這個過程比較繁瑣,通常需要填寫一個表格。
由於題目要求「Present the optimal binary search tree」,我們可以直接嘗試不同的根節點,並計算其總成本。

嘗試不同的根節點:

  1. 若根節點為 A (freq=4):
    左子樹:空 (cost=0)
    右子樹:B, C, D, E, F (freq=9+1+6+8+7=31)
    總成本 = freq(A) * 1 + cost(B,F)
    我們需要遞迴計算 cost(B,F)。

  2. 若根節點為 B (freq=9):
    左子樹:A (freq=4)
    右子樹:C, D, E, F (freq=1+6+8+7=22)
    總成本 = freq(B) * 1 + cost(A,A) + cost(C,F)
    cost(A,A) = freq(A)*1 = 4 (A為單節點樹的根)
    總成本 = 9 + 4 + cost(C,F)

  3. 若根節點為 C (freq=1):
    左子樹:A, B (freq=4+9=13)
    右子樹:D, E, F (freq=6+8+7=21)
    總成本 = freq(C) * 1 + cost(A,B) + cost(D,F)

  4. 若根節點為 D (freq=6):
    左子樹:A, B, C (freq=4+9+1=14)
    右子樹:E, F (freq=8+7=15)
    總成本 = freq(D) * 1 + cost(A,C) + cost(E,F)

  5. 若根節點為 E (freq=8):
    左子樹:A, B, C, D (freq=4+9+1+6=20)
    右子樹:F (freq=7)
    總成本 = freq(E) * 1 + cost(A,D) + cost(F,F)
    cost(F,F) = freq(F)*1 = 7
    總成本 = 8 + cost(A,D) + 7

  6. 若根節點為 F (freq=7):
    左子樹:A, B, C, D, E (freq=4+9+1+6+8=28)
    右子樹:空 (cost=0)
    總成本 = freq(F) * 1 + cost(A,E)
    總成本 = 7 + cost(A,E)

為了找到最佳樹,我們需要系統地計算。
令 w(i, j) 為節點 i 到 j 的頻率總和。
令 e(i, j) 為節點 i 到 j 的最佳搜尋樹成本。
e(i,j)=min⁡i≤k≤j{e(i,k−1)+e(k+1,j)+w(i,j)}e(i, j) = \min_{i \le k \le j} \{ e(i, k-1) + e(k+1, j) + w(i, j) \}
w(i,j)=w(i,j−1)+freq(j)w(i, j) = w(i, j-1) + freq(j)
w(i,i)=freq(i)w(i, i) = freq(i)
e(i,i−1)=0e(i, i-1) = 0

節點及其頻率:
1:A(4), 2:B(9), 3:C(1), 4:D(6), 5:E(8), 6:F(7)

計算長度為 1 的子問題:
e(1,1) = w(1,1) = 4
e(2,2) = w(2,2) = 9
e(3,3) = w(3,3) = 1
e(4,4) = w(4,4) = 6
e(5,5) = w(5,5) = 8
e(6,6) = w(6,6) = 7

計算長度為 2 的子問題:
w(1,2) = 4+9 = 13
e(1,2) = min { e(1,0)+e(2,2)+w(1,2), e(1,1)+e(3,2)+w(1,2) }
= min { 0+9+13, 4+0+13 } = min { 22, 17 } = 17 (根為 B)

w(2,3) = 9+1 = 10
e(2,3) = min { e(2,1)+e(3,3)+w(2,3), e(2,2)+e(4,3)+w(2,3) }
= min { 0+1+10, 9+0+10 } = min { 11, 19 } = 11 (根為 B)

w(3,4) = 1+6 = 7
e(3,4) = min { e(3,2)+e(4,4)+w(3,4), e(3,3)+e(5,4)+w(3,4) }
= min { 0+6+7, 1+0+7 } = min { 13, 8 } = 8 (根為 D)

w(4,5) = 6+8 = 14
e(4,5) = min { e(4,3)+e(5,5)+w(4,5), e(4,4)+e(6,5)+w(4,5) }
= min { 0+8+14, 6+0+14 } = min { 22, 20 } = 20 (根為 E)

w(5,6) = 8+7 = 15
e(5,6) = min { e(5,4)+e(6,6)+w(5,6), e(5,5)+e(7,6)+w(5,6) }
= min { 0+7+15, 8+0+15 } = min { 22, 23 } = 22 (根為 F)

計算長度為 3 的子問題:
w(1,3) = 4+9+1 = 14
e(1,3) = min {
k=1: e(1,0)+e(2,3)+w(1,3) = 0+11+14 = 25 (根 A)
k=2: e(1,1)+e(3,3)+w(1,3) = 4+1+14 = 19 (根 B)
k=3: e(1,2)+e(4,3)+w(1,3) = 17+0+14 = 31 (根 C)
} = 19 (根為 B)

w(2,4) = 9+1+6 = 16
e(2,4) = min {
k=2: e(2,1)+e(3,4)+w(2,4) = 0+8+16 = 24 (根 B)
k=3: e(2,2)+e(4,4)+w(2,4) = 9+6+16 = 31 (根 C)
k=4: e(2,3)+e(5,4)+w(2,4) = 11+0+16 = 27 (根 D)
} = 24 (根為 B)

🔒

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

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

免費註冊

第 4 題10 分

The stamp cost problem (SCP) is to stick the exact cost of stamps on an envelope. In the post office, there are five types of stamps: 1, 2, 3, 4, 5 dollars. You are asked to calculate all possible combination ways for getting j dollars. Let g(i,j) denote the number of combination ways for j dollars, where only stamps with 1, 2, ...,i dollars are used. Note that i and j are both positive integers, 1≤ i ≤ 5 and 1 ≤ j ≤ n (an integer constant). For example, g(2, 3)=2, since there are two ways for constituting 3 dollars with 1-dollar and 2-dollar stamps: 1+1+1 and 1+2. As another example, g(3, 4)=4, since four ways can be used to get 4 dollars with 1-dollar, 2-dollar and 3-dollar stamps: 1+1+1+1, 1+1+2, 2+2 and 1+3. However, the stamps with 3-dollar and 4-dollar have been sold out (no such stamps) today. Other stamps are assumed to be unlimited. Please give the recursive formula to calculate g(i,j). You can assume that g(i,0)=1, g(i,j)=0 for 1 ≤ i ≤ 5 and j ≤ -1.

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

這一題的完整詳解

核心觀念

本題考查「無限供應郵票的組合計數」遞迴。g(i,j)g(i,j) 表示只使用面額不超過 ii 的郵票,湊出 jj 元的組合數;郵票排列順序不影響組合,例如 1+21+2 與 2+12+1 視為同一種。

可將組合依「是否使用至少一張 ii 元郵票」分成兩類:

  • 不使用 ii 元郵票:共有 g(i−1,j)g(i-1,j) 種。
  • 至少使用一張 ii 元郵票:先拿走一張 ii 元郵票,剩下 j−ij-i 元,且仍可繼續使用 ii 元郵票,因此共有 g(i,j−i)g(i,j-i) 種。

因此,當 ii 元郵票有貨時,遞迴式為

g(i,j)=g(i−1,j)+g(i,j−i).g(i,j)=g(i-1,j)+g(i,j-i).

其中第二項仍是 g(i,j−i)g(i,j-i),而不是 g(i−1,j−i)g(i-1,j-i),因為同一面額的郵票數量不限。


解題方法

本題中可使用的郵票面額為

{1,2,5},\{1,2,5\},

而 33 元與 44 元郵票售罄。

基本條件為

g(i,0)=1(1≤i≤5),g(i,0)=1 \qquad (1\le i\le 5),

因為湊出 00 元代表不取任何郵票,算一種空組合;若剩餘金額為負數,則不可能湊出:

g(i,j)=0(1≤i≤5, j≤−1).g(i,j)=0 \qquad (1\le i\le 5,\ j\le -1).

只有 11 元郵票時,每個正整數金額都只能用全部 11 元郵票湊成,因此

g(1,j)=1(j≥0).g(1,j)=1 \qquad (j\ge 0).

對 j≥1j\ge1,實際遞迴式為

g(i,j)={g(i−1,j)+g(i,j−i),i∈{2,5},g(i−1,j),i∈{3,4}.g(i,j)= \begin{cases} g(i-1,j)+g(i,j-i), & i\in\{2,5\},\\[4pt] g(i-1,j), & i\in\{3,4\}. \end{cases}

逐一寫出即為

g(2,j)=g(1,j)+g(2,j−2),g(2,j)=g(1,j)+g(2,j-2), g(3,j)=g(2,j),g(3,j)=g(2,j),
🔒

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

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

免費註冊

第 5 題

(a) (7%) What are the seven common components in a process control block?
(b) (3%) What are the purposes of mutex, semaphore, and condition variable?

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

這一題的完整詳解

(a) Process Control Block (PCB) 的七項常見元件

  1. 行程狀態 (Process State):記錄行程目前的執行狀態(如:New、Ready、Running、Waiting、Terminated)。
  2. 程式計數器 (Program Counter, PC):記錄該行程下一條要執行的指令記憶體位址。
  3. CPU 暫存器 (CPU Registers):保存 Context Switch 時的 CPU 暫存器內容(如:累加器、堆疊指標、通用暫存器、狀態暫存器等),以便後續恢復執行。
  4. CPU 排程資訊 (CPU Scheduling Information):包含行程優先權 (Priority)、排程佇列指標 (Scheduling Queue Pointers) 與其他排程參數。
  5. 記憶體管理資訊 (Memory-management Information):包含基底/界限暫存器 (Base/Limit Registers)、頁表 (Page Tables) 或段表 (Segment Tables) 等記憶體映射資訊。
  6. 帳務資訊 (Accounting Information):記錄 CPU 已使用時間、時間限制、行程識別碼 (PID) 等統計資料。
  7. I/O 狀態資訊 (I/O Status Information):記錄分配給該行程的 I/O 裝置清單與開啟檔案清單 (Open File Table) 等。

🔒

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

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

免費註冊

第 6 題

(a) (6%) What is the difference of the binding of instructions and data to memory addresses in compile time, load time, and execution time?
(b) (4%) How to solve the thrashing problem by using the working-set model?

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

這一題的完整詳解

(a) 指令與資料的位址繫結

核心觀念

程式中的指令與資料,最初通常以符號位址或相對位址表示;作業系統必須在某個時點將它們繫結(binding)到實際的記憶體位址。三種繫結時機的差異,在於「何時決定位址」以及「程式載入後能否搬移」。

指令與資料的繫結原則相同:

  • 指令繫結:決定 CPU 從哪個記憶體位址擷取指令。
  • 資料繫結:決定指令存取變數、陣列或其他資料時所使用的記憶體位址。

1. 編譯時繫結(Compile-time binding)

若在編譯時便已知程式將被載入的記憶體位置,編譯器可以直接產生絕對位址(absolute address)。

例如,假設程式一定從位址 1000 開始,變數 x 位於位址 1200,編譯器便可將相關指令直接產生為存取位址 1200。

特點如下:

  • 編譯時直接決定指令與資料的絕對位址。
  • 程式載入時不需要重新定位。
  • 若程式實際載入位置改變,原本的絕對位址便失效,必須重新編譯。

可表示為:

實體位址=編譯器產生的絕對位址\text{實體位址}=\text{編譯器產生的絕對位址}

2. 載入時繫結(Load-time binding)

若編譯時不知道程式將被載入哪一段記憶體,編譯器會產生可重定位程式(relocatable code),使用相對於程式起始位置的位址。

載入器(loader)選定程式的載入起始位址後,再將所有指令與資料參照加上載入基底位址。

若某資料的相對位址為 200200,程式載入基底位址為 50005000,則:

實體位址=5000+200=5200\text{實體位址}=5000+200=5200

特點如下:

  • 編譯時只產生相對位址。
  • 程式載入記憶體時,由載入器完成重定位。
  • 程式開始執行後,位址通常已固定,不能直接搬到另一位置。
  • 若要改變載入位置,必須重新載入並重新定位。

3. 執行時繫結(Execution-time binding)

執行時繫結將位址決定延後到程式執行期間。CPU 產生的是邏輯位址或虛擬位址,再由記憶體管理單元(MMU)於存取當下轉換成實體位址。

在分頁系統中,轉換可概念化表示為:

虛擬位址→頁表與 MMU實體位址\text{虛擬位址} \xrightarrow{\text{頁表與 MMU}} \text{實體位址}

在基底暫存器模型中,則可表示為:

實體位址=基底位址+邏輯位址\text{實體位址} = \text{基底位址} + \text{邏輯位址}

特點如下:

  • 指令擷取與資料存取時才進行位址轉換。
  • 需要硬體支援,例如 MMU、頁表、基底暫存器或界限暫存器。
  • 程式執行期間仍可被搬移。
  • 指令與資料不必連續放置,能配合分頁或分段機制管理。

解題技巧

判斷三種繫結時機,可記成:

繫結時機位址何時決定載入後能否搬移
編譯時編譯時不能,位置改變須重新編譯
載入時載入時通常不能,須重新載入定位
執行時每次執行或存取時可以,需要硬體位址轉換支援

最容易混淆的是「載入時」與「執行時」:

  • 載入時:程式開始執行前完成重定位。
  • 執行時:程式執行期間仍持續進行位址轉換,因此可動態搬移。

(b) 使用 Working-set Model 解決 Thrashing

核心觀念

Thrashing(抖動)是指系統花費大量時間處理 page fault 與換頁,真正執行程式的時間反而很少。其根本原因通常是:

所有程序目前需要的頁面總數>可用實體框架總數\text{所有程序目前需要的頁面總數} > \text{可用實體框架總數}

Working-set model 用一段最近的參照區間估計程序目前的 locality,也就是程序近期實際需要的頁面集合。

Working set 定義

🔒

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

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

免費註冊

第 7 題

(a) (6%) Explain sequential, direct, and index accesses for a file.
(b) (4%) What are consistency semantics for a file system?

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

這一題的完整詳解

核心觀念

本題考查兩個檔案系統的重要主題:

  1. 檔案存取方法(file access methods):說明系統如何找到檔案中的資料。
  2. 檔案一致性語意(consistency semantics):說明多個程序同時讀寫共用檔案時,一個程序的修改何時、以何種形式被其他程序看見。

記憶方式如下:

  • Sequential:依序找資料。
  • Direct:直接依位置找資料。
  • Indexed:先查索引,再找資料。
  • Consistency semantics:規範「何時可見、看到哪個版本、更新是否具原子性」。

解題方法

(a) 以「取得檔案中某筆資料時,是否必須先經過前面的資料」作為區分基準:

  • 必須從目前位置逐筆前進:Sequential access。
  • 已知資料位置即可直接跳至該處:Direct access。
  • 先由索引取得資料位置,再進行存取:Indexed access。

(b) 先定義共用檔案的一致性語意,再說明常見的四種模型:

  • UNIX semantics
  • Session semantics
  • Immutable shared files
  • Transaction semantics

(a)檔案的三種存取方式

1. Sequential access(循序存取)

循序存取按照資料在檔案中的排列順序,一筆接一筆地讀取或寫入。系統通常維護一個目前位置指標,執行一次 read next 或 write next 後,位置自動向後移動。

基本操作可表示為:

  • read next:讀取目前位置之後的下一筆資料。
  • write next:在目前位置之後寫入資料。
  • rewind:將目前位置移回檔案開頭。

例如要讀取第 10001000 筆資料,通常必須先依序處理前面的資料。若檔案由固定長度記錄組成,循序存取第 nn 筆資料的成本大致與 nn 成正比。

適用情境包括:

  • 磁帶等循序儲存媒體。
  • 文字檔逐行讀取。
  • Log 檔案。
  • 影音串流與批次資料處理。

其優點是實作簡單、連續讀取效率高;缺點是查找檔案中間的資料較慢。


2. Direct access(直接存取、隨機存取)

直接存取將檔案視為一組具有編號的固定長度邏輯區塊或記錄,程式可以直接指定要讀寫的區塊編號,不必先讀取前面的內容。

常見操作包括:

  • read(n):讀取第 nn 個邏輯區塊。
  • write(n):寫入第 nn 個邏輯區塊。
  • seek(n):將目前位置移至第 nn 個邏輯區塊。

若每筆記錄長度為 LL bytes,且記錄編號從 00 開始,則第 nn 筆記錄的相對位移量為:

offset=nL\text{offset}=nL

若以區塊大小 BB 表示,則第 kk 個邏輯區塊的位移量為:

offset=kB\text{offset}=kB

檔案系統會再將邏輯區塊映射至實體儲存區塊。

直接存取適合:

  • 磁碟檔案。
  • 資料庫資料檔。
  • 陣列型資料。
  • 需要快速查詢指定位置資料的應用程式。

其優點是可快速跳至指定位置;缺點是若資料為變動長度,單靠記錄編號無法直接計算位置,必須搭配額外的位址表或索引結構。


3. Indexed access(索引存取)

索引存取使用額外的索引結構,將「查詢鍵值」或「邏輯記錄編號」對應至資料所在的區塊或位移量。

查詢流程為:

  1. 在索引中搜尋目標鍵值。
  2. 取得對應的資料區塊位址。
  3. 直接讀取該資料區塊。

例如索引內容如下:

學號資料位置
1001Block 8
1002Block 21
1003Block 5

查詢學號 10021002 時,先在索引中找到 Block 21,再讀取該區塊中的學生資料。

索引也可以採用多層結構。當檔案很大時,第一層索引可指向第二層索引,最後再指向實際資料區塊,以減少搜尋成本。

索引存取適合:

  • 依學號、姓名、日期等鍵值查詢資料。
  • 變動長度記錄。
  • 需要同時支援快速查詢與循序走訪的檔案。

其代價包括:

  • 需要額外儲存索引。
  • 新增、刪除或搬移資料時,必須同步更新索引。
  • 索引損壞會影響資料定位。

三種方式比較

存取方式找資料的方法優點主要限制
Sequential從目前位置依序讀取連續讀取效率高、實作簡單中間資料查找速度慢
🔒

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

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

免費註冊

第 8 題

(a) (4%) Explain how the deadlock prevention scheme works.
(b) (3%) Explain three latencies concerned by a real-time system.
(c) (3%) Give three reasons not to use caching in a distributed file system.

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

這一題的完整詳解

(a) Deadlock prevention

核心觀念

死結(deadlock)發生的必要條件為下列四項同時成立:

  1. 互斥(mutual exclusion):資源一次只能由一個行程使用。
  2. 持有並等待(hold and wait):行程持有部分資源,同時等待其他資源。
  3. 不可剝奪(no preemption):資源只能由持有者主動釋放。
  4. 循環等待(circular wait):存在行程與資源形成環狀等待鏈。

死結預防(deadlock prevention)的核心,是在系統設計階段保證上述至少一項條件永遠不成立,因此不允許死結形成。它與死結避免不同:死結避免是在每次配置資源前檢查是否仍處於安全狀態,例如 Banker’s algorithm。

解題方法

可採取下列任一類策略:

  • 破壞互斥條件:若資源允許共享,便改為共享使用,例如唯讀檔案可由多個行程同時讀取。印表機等不可共享資源則無法用此方法處理。

  • 破壞持有並等待條件:要求行程開始執行前一次取得所有所需資源;或規定行程申請新資源前,必須先釋放目前持有的資源。缺點是資源利用率降低,也可能使行程長時間佔有暫時不用的資源。

  • 破壞不可剝奪條件:行程持有資源而申請不到新資源時,系統剝奪其已持有的資源,待日後能取得完整資源集合時再重新執行。此方法只適用於狀態可以保存與恢復的資源,不適合直接剝奪印表機等不可回復資源。

  • 破壞循環等待條件:為所有資源類型建立全序,例如
    R1<R2<R3R_1 < R_2 < R_3
    並要求行程只能依遞增順序申請資源。如此若形成循環,必須同時滿足
    R1<R2<⋯<Rn<R1,R_1<R_2<\cdots<R_n<R_1,
    這在全序關係中不可能成立,因此不會有循環等待。

解題技巧

看到「deadlock prevention」時,先寫出四個必要條件,再說明系統如何破壞其中至少一項。不要將它與「偵測後復原」或「安全狀態檢查」混淆。


(b) 即時系統的三種延遲

核心觀念

即時系統(real-time system)不只要求計算結果正確,也要求結果在期限(deadline)前產生。因此重點是延遲的最壞情況上限,而非平均執行時間。

解題方法

  1. 中斷延遲(interrupt latency)

    從硬體中斷發生,到中斷服務常式(ISR)開始執行的時間。這段時間可能包含完成目前指令、保存暫存器狀態、辨識中斷類型等工作。

  2. 派送延遲(dispatch latency)

    從系統決定要執行某個高優先權即時行程,到該行程實際取得 CPU 開始執行的時間。通常包含結束不可中斷區段、執行排程器、進行內容切換等成本;排程延遲常被視為此階段的一部分。

🔒

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

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

免費註冊

第 9 題10 分

Explain the following terms:
(a) vectored I/O
(b) safety-critical system
(c) logic bomb
(d) turnaround time
(e) race condition

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

這一題的完整詳解

(a) Vectored I/O(向量化 I/O / 散集 I/O)

  • 核心觀念:一種允許單一系統呼叫(如 readv/writev)在多個非連續記憶體緩衝區(buffers)與單一 I/O 裝置/檔案之間進行讀寫傳輸的機制。
  • 優勢:避免多次呼叫 I/O 所產生的上下文切換(context switch)開銷,亦免去在使用者空間手動拼湊與複製緩衝區資料的成本。

(b) Safety-Critical System(安全攸關系統)

  • 核心觀念:若系統發生故障或功能失效,可能直接導致人員傷亡、重大財產損失或嚴重環境災害的系統。
  • 特性:極度強調高可靠度(reliability)、高可用性(availability)與硬即時(hard real-time)回應能力,常見於飛航控制、醫療設備、核能電廠及自動駕駛系統。

(c) Logic Bomb(邏輯炸彈)

  • 核心觀念:隱藏在正常軟體中的惡意程式碼片段,平時處於潛伏狀態。
  • 觸發機制:當預設的特定條件(如指定日期時間、特定使用者登入或特定檔案被刪除)滿足時即被啟動,執行破壞性行為(如抹除資料或毀損系統)。

(d) Turnaround Time(週轉時間)

  • 核心觀念:CPU 排程中,一個行程(process)從提交(submission)至完全執行完畢(completion)所經歷的總時間。
  • 公式:
🔒

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

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

免費註冊

其他考古題