108 高普考高考三級 電子工程 計算機概論 考古題詳解
第 一 題25 分
下圖顯示作業系統(Operating System)組成的五大元件:
🖼️【此處有附圖,請對照原卷】
圖中元件包括:
- User Interface
- Memory Manager
- Process Manager
- Device Manager
- File Manager
(一) 其中的 User Interface 主要有兩種類型:command-line interface(如 Unix 作業系統所用的)及 graphical user interface(如 Windows 作業系統所用的)。請問這兩種 interface 的主要差別為何?(5 分)
(二) 其中的 Memory Manager 需針對兩種可能的技術加以管理記憶體:paging 及 partitioning,請問這兩種技術的主要差別為何?(5 分)
(三) 其中的 Process Manager 需針對 process 兩個可能的問題加以解決:deadlock 及 starvation,請問這兩個問題的主要差別為何?(5 分)
(四) 其中的 Device Manager 通常會為每一個輸出入裝置準備一個 I/O queue,並使用 FIFO 或 shortest length first 策略來存取輸出入裝置,請問這兩種策略的主要差別為何?(5 分)
(五) 其中的 File Manager 通常要處理 archiving 及 backups 兩種工作,請問這兩種工作的主要差別為何?(5 分)
登入後即可作答並保存紀錄。
核心觀念與解題方法
本題考查作業系統五項管理功能中的五組基本概念。作答時抓住每組的管理對象、執行方式與主要目的,再說明兩者差異即可。
(一)命令列介面與圖形使用者介面
**命令列介面(CLI)**以文字為主。使用者在命令提示字元輸入指令,系統解析指令後執行;熟悉指令後,操作快速,也容易將指令組合成批次工作,但使用者須記住指令及其語法。
**圖形使用者介面(GUI)**以視窗、圖示、選單及指標操作為主。使用者透過點選或拖曳來下達操作,通常較直覺、容易上手,但較依賴圖形顯示與互動設備。
**判斷技巧:**CLI 的核心是「輸入文字指令」;GUI 的核心是「操作圖形物件」。
(二)分頁與分割區
**分頁(paging)**將虛擬記憶體切成固定大小的頁(page),將實體記憶體切成相同大小的頁框(frame)。一個程序的各頁可放在不連續的頁框中,透過頁表進行對應。分頁可避免外部碎裂,但最後一頁未用滿時仍會產生內部碎裂。
**分割區(partitioning)**將記憶體劃分成區塊,供程序配置使用。分割區可採固定大小,也可依程序需求劃分大小;程序通常須配置在連續的記憶體區域。可變大小分割區容易產生外部碎裂,固定大小分割區則可能有內部碎裂。
**判斷技巧:**分頁是「固定大小、可分散配置」;分割區是「以區塊配置,通常要求連續空間」。比較碎裂時,須注意分割區的固定式與可變式會有不同結果。
(三)死結與飢餓
**死結(deadlock)**是多個程序彼此等待對方持有的資源,形成循環等待,導致相關程序都無法繼續執行。
**飢餓(starvation)**是程序長期得不到所需資源或處理機時間,因而一直無法獲得服務;其他程序仍可能持續執行。排程偏好、資源分配不公平等情形都可能造成飢餓。
第 二 題25 分
下圖是 Huffman encoding 的一個例子:
🖼️【此處有附圖,請對照原卷】
各符號及其出現次數如下:
Huffman encoding 過程中的合併節點包括:
Code 如下:
(一) 請說明其中步驟 b 為何是選擇節點 B 及 C 來合併?(5 分)
(二) 請說明最後 Code 部分 B 的編碼為何是 ?(5 分)
(三) 這個例子如果原本的 A、B、C、D、E 等符號各自使用 3 個位元來編碼,則使得整個檔案總容量為 300 個位元。請問改用此 Huffman encoding 後整個檔案總容量變為多少位元?(5 分)
(四) Huffman encoding 是一種 lossless compression method,請問 lossless 意思為何?(5 分)
(五) Huffman encoding 是一種 greedy algorithm,請問如何判別它是 greedy algorithm?(5 分)
登入後即可作答並保存紀錄。
核心觀念
Huffman encoding(霍夫曼編碼)依照符號出現頻率建立二元樹:每次取出頻率最低的兩個節點合併,將合併後的頻率總和放回候選集合,直到形成一棵樹。頻率高的符號通常會得到較短的編碼,頻率低的符號通常會得到較長的編碼。
在二元樹中,從根節點走到符號葉節點的路徑就是該符號的編碼;依圖中的標記,左分支記為 ,右分支記為 。
解題方法與各小題
(一)步驟 b 為何合併 B 與 C?
各符號的頻率為 、、、、。步驟 b 要從目前的節點中選出頻率最低的兩個合併。
其中 與 的頻率都是 ,是目前最低的兩個頻率,因此先合併成頻率為
的新節點。這是 Huffman encoding 每一步的選擇規則。
(二)為何 B 的編碼是 ?
由根節點走到 :
- 根節點往左,記為 。
- 到頻率為 的左子樹後往右,記為 。
- 到頻率為 的節點後往左,記為 。
因此路徑編碼為
(三)改用 Huffman encoding 後的檔案大小
每個符號的編碼長度,等於它在 Huffman 樹中從根節點到葉節點的路徑長度。由題圖的 Code 可得:
| 符號 | 出現次數 | 編碼 | 編碼長度 | 所需位元數 |
|---|---|---|---|---|
| A | 17 | 2 | ||
| B | 12 | 3 | ||
| C | 12 | 3 |
第 三 題25 分
樹(Tree)是一種常見的資料結構,可用來表示階層式(Hierarchical)的資料集合。下圖是 Tree 的一個例子:
🖼️【此處有附圖,請對照原卷】
(一) 此例子中,那個節點是 root node?(5 分)
(二) 此例子中,那些節點是 leaf node?(5 分)
(三) 此例子中,節點 D 的 degree 為何?(5 分)
(四) 請列出此例子的 preorder traversal 其拜訪節點的順序。(5 分)
(五) 請列出此例子的 postorder traversal 其拜訪節點的順序。(5 分)
登入後即可作答並保存紀錄。
核心觀念
樹的 root node(根節點) 是沒有父節點的節點;leaf node(葉節點) 是沒有子節點的節點。節點的 degree(度數) 是該節點的子節點數量。
遍訪順序依定義如下:
- Preorder traversal(前序走訪):先訪問目前節點,再依序走訪各子樹。
- Postorder traversal(後序走訪):先依序走訪各子樹,再訪問目前節點。
依圖中由左至右的順序,A 的子節點是 B、C、D;B 的子節點是 E、F,E 的子節點是 K;C 的子節點是 G,G 的子節點是 L、M;D 的子節點是 H、I、J。
解題方法
(一)Root node
找出沒有父節點的節點。圖中 A 位於樹的最上層,沒有父節點,因此根節點是 A。
(二)Leaf node
逐一找出沒有子節點的節點。圖中 F、K、L、M、H、I、J 都沒有子節點,因此它們是葉節點。
(三)節點 D 的 degree
計算 D 直接連接的子節點數。D 的子節點為 H、I、J,共 3 個,因此 degree 為 3。
(四)Preorder traversal
第 四 題25 分
一般程式設計師在建立一支 C++ 程式的過程通常如下圖所示:
🖼️【此處有附圖,請對照原卷】
(一) 上圖 C++ 程式中,#include <iostream.h> 這一行的作用為何?(5 分)
(二) 上圖 C++ 程式中,cin>> 這一個指令的作用為何?(5 分)
(三) 上圖 Compiler 中有兩個部分 Preprocessor 及 Translator,請問它們的功能有何差別?(5 分)
(四) 上圖中 Linker 的功能為何?(5 分)
(五) 在 Microsoft Windows 的作業系統中,假設已有一個檔名為 test1.exe 的文件,請問這文件對應到上圖中何者?(5 分)
登入後即可作答並保存紀錄。
核心觀念
本題考查 C++ 程式從原始碼到可執行檔的建置流程,以及輸入輸出指令的用途。流程可整理為:
原始程式碼 → 前處理 → 編譯/轉譯成目的檔 → 連結程式庫 → 可執行檔
解題方法
依圖中各階段產生的檔案與箭頭判斷:前處理器處理程式中的前置處理指令;Translator 將程式轉成目的碼;Linker 將目的檔與所需程式庫組合,產生可執行檔。接著依 C++ 語法判斷 #include 與 cin >> 的用途。
各小題解析
(一)#include <iostream.h> 的作用
#include 是前置處理指令,要求前處理器引入 iostream.h 標頭檔中的宣告,讓程式能使用相關的輸入輸出功能,例如 cin、cout。它的作用是提供程式所需的宣告,不是直接執行輸入或輸出。
此題使用的是舊式 C++ 標頭檔寫法;現代 C++ 通常寫成 #include <iostream>,並使用 std::cin、std::cout。
(二)cin >> 的作用
cin 代表標準輸入串流,通常從鍵盤讀取資料;>> 是輸入運算子,會把讀入的資料轉換成目標變數的型別,再存入該變數。例如:
int a;
cin >> a;
此程式會從標準輸入讀取一個整數,存入變數 a。
(三)Preprocessor 與 Translator 的功能差別