109 年 國立成功大學製造資訊與系統研究所丙組《計算機概論》
第 1 題
Obtain minimum SOP (Sum of Products) expressions and minimum POS (Product of Sums) expressions for F using K-maps with four inputs (A, B, C, D), where A is the most significant bit and D is the least significant bit. The inverse Boolean functions of F are given below, where is the maxterm expansion, is the minterm expansion, and denotes don't care.
(a) . (10%)
(b) . (10%)
登入後即可作答並保存紀錄。
核心觀念
四變數卡諾圖以 為列、 為欄,並依 Gray code 排列:
- 列:
- 欄:
卡諾圖分組規則:
- 求最小 SOP:圈選輸出為 的格子, 可視需要納入分組。
- 求最小 POS:圈選輸出為 的格子, 可視需要納入分組。
- 每組格數必須為 ,且可上下、左右相鄰,邊界也視為相鄰。
- SOP 中,一組 對應一個乘積項;POS 中,一組 對應一個和項。
本題的關鍵差異是:
- :列出的 maxterm 編號是 的位置。
- :列出的 minterm 編號是 的位置。
(a)
因此:
- :
- :
- :其餘位置,即
最小 SOP
圈選 與適當的 don't-care:
-
分組 :
其中 固定,得到
-
分組 :
其中 固定,得到
-
分組 :
是 don't-care,四格中 固定,得到
因此最小 SOP 為
最小 POS
求 POS 時圈選 與適當的 don't-care。
-
分組 :
固定。對於 分組,固定值為 的變數寫未反相,固定值為 的變數寫反相,因此得到
-
分組 :
固定,得到
-
分組 :
固定,得到
因此最小 POS 為
(b)
因此:
第 2 題
In how many ways can 36 identical robots be assigned to five assembly lines with
- at least four robots assigned to each line? (5%)
- at least four, but no more than ten, assigned to each line? (5%)
(no score if you give no details.)
登入後即可作答並保存紀錄。
此題考驗組合數學中的「隔板法」(Stars and Bars) 以及相關的計數技巧。
核心觀念:
- 隔板法 (Stars and Bars): 將 個相同的物品分配到 個不同的箱子。
- 若箱子可以為空:有 種方法。
- 若箱子每個至少一個:先放入一個物品,剩下 個物品分配到 個箱子,有 種方法。
部分 1: 至少四個機器人分配到五條生產線
問題:將 36 個相同的機器人分配到 5 條不同的生產線,要求每條生產線至少有 4 個機器人。
設 為分配給第 條生產線的機器人數量,其中 。
我們需要找到非負整數解的數量,滿足:
且 對於所有 。
為了解決 的條件,我們進行變數替換。
令 。由於 ,所以 。
將 代入原方程式:
現在我們需要找到 16 個非負整數 的組合數量,這是一個標準的隔板法問題。
物品數量 (星星,Stars)。
箱子數量 (生產線)。
需要 個隔板 (Bars)。
總共有 個位置,從中選擇 個位置給隔板。
方法數為 。
計算 :
所以,至少有四個機器人分配到每條生產線的方法數是 4845 種。
詳細步驟:
- 定義變數:設 為分配給五條生產線的機器人數量。
- 建立方程式:。
- 建立限制條件: for 。
- 進行變數替換以滿足非負條件:令 。
- 轉換方程式:。
- 套用隔板法:計算將 16 個相同物品分配到 5 個不同箱子的方法數。
- 計算結果:。
部分 2: 至少四個,但最多十個機器人分配到五條生產線
問題:將 36 個相同的機器人分配到 5 條不同的生產線,要求每條生產線至少有 4 個機器人,且最多有 10 個機器人。
設 為分配給第 條生產線的機器人數量。
我們需要找到整數解的數量,滿足:
且 對於所有 。
首先,處理下限條件 。
令 ,則 。
方程式變為 。
現在處理上限條件 。
將 代入 :
所以,我們需要找到非負整數 的數量,滿足:
且 對於所有 。
這個問題可以使用「排容原理」(Inclusion-Exclusion Principle) 來解決。
總共有 種方法,不考慮上限。
第 3 題10 分
Please draw the parent-child process relationship graph resulting from the execution of the following pseudo codes. Note that the following codes are included in an executable file called "ProgramP". (10%)
main()
{
if (fork()=0)
exec("ProgramA");
else
{
if (fork()=0)
exec("ProgramB");
else
exec("ProgramC");
}
}
登入後即可作答並保存紀錄。
這題是作業系統中關於「程序控制(Process Control)」的經典考題,核心觀念在於測試考生是否清楚理解 fork() 系統呼叫的返回值機制、父子程序的執行流程分流,以及 exec() 系列函數如何替換當前程序的記憶體映像。解題關鍵在於掌握 fork() 會在父程序返回子程序的 PID(非零值),而在子程序返回 0,藉此判斷式決定執行路徑;同時必須記住一旦呼叫 exec() 成功,該程序原本的後續程式碼將不會再執行,因為整個程序空間已被新程式取代。
解題過程分析
我們將逐步追蹤 ProgramP 的執行流程,假設初始程序為 (即執行 main() 的程序)。
步驟 1:第一個 fork() 呼叫
程式進入 main() 後首先執行條件判斷:
if (fork() == 0)
此時發生第一次程序分叉:
- 父程序 ():
fork()返回子程序的 PID(假設為 ,且 )。因此條件fork() == 0為假(False), 進入else區塊。 - 子程序 ():
fork()返回 。因此條件fork() == 0為真(True), 進入if區塊。
步驟 2:分析子程序 的行為
進入 if 區塊後執行:
exec("ProgramA");
exec() 函數的功能是用新的程式(此處為 "ProgramA")替換當前程序的程式碼、資料與堆疊段。若執行成功, 原本的後續指令(包含 main 函數的結束)將不再執行。
- 結果: 轉變為執行 "ProgramA" 的程序。在親屬關係圖中, 仍是 的子程序,但其內容已變為 ProgramA。
步驟 3:分析父程序 的行為
進入 else 區塊後,遇到第二個 if 判斷:
if (fork() == 0)
此時發生第二次程序分叉(僅由 執行):
- 父程序 ( 本身):
fork()返回新子程序的 PID(假設為 ,且 )。條件為假,進入內層的else區塊。 - 新子程序 ():
fork()返回 。條件為真,進入內層的if區塊。
步驟 4:分析新子程序 的行為
進入內層 if 區塊後執行:
exec("ProgramB");
同樣地,exec() 替換了 的記憶體映像。