電子工程 113 年電子計算機原理考古題
題目為考試當年公告版本,實務標準請以現行規範為準。
控制器(controller)是負責電腦與周邊設備(例如印表機、網路卡等) 之間通訊(communication)的元件;當控制器以直接記憶體存取(Direct Memory Access;DMA)方式運作時,可以直接與主記憶體(main memory) 進行資料交換,而不需要依賴中央處理器(CPU)。試解釋為何直接記憶 體存取(DMA)對電腦效能(performance)是重要的技術?但同時也會 加劇馮紐曼瓶頸(von Neumann bottleneck)?(25 分)
CSMA/CD(載波感測多重存取/碰撞偵測)和CSMA/CA(載波感測多重 存取/碰撞避免)是兩種常見的網路協定(protocol)。CSMA/CD 以偵測碰 撞是否發生並解決碰撞問題來提高網路效率;CSMA/CA 則採用避免碰撞 的方式,在傳輸前透過等待退避和頻道偵測來減少碰撞的機率。試分析為 什麼在無線網路環境中,CSMA/CA 相較於CSMA/CD 是更適合的通訊 協定?(建議的分析面向包括:技術可行性、網路效能,隱藏節點問題 等等)(25 分)
泡泡排序(Bubble Sort)是一種排序演算法,透過逐步交換相鄰元素將 序列按大小順序排列。試比較與評論下列兩個版本的泡泡排序程式(in Python)。(25 分) def bubble_sort_v1(arr): n = len(arr) for i in range(n): for j in range(n - 1): if arr[j] > arr[j + 1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] def bubble_sort_v2(arr): n = len(arr) for i in range(n): swapped = False for j in range(n - i - 1): if arr[j] > arr[j + 1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] swapped = True if not swapped: break char toHexDigit(int num) { if (num < 10) return '0' + num; else return 'A' + (num - 10); } void printHexFromBinary(int num) { int leading_zero_found = 0; unsigned int mask = 0xF0000000; int shift_amount = (sizeof(int) * 8) - 4; printf("0x"); for (int i = 0; i < sizeof(int) * 8 / 4; i++) { int hex_digit = (num & mask) >> shift_amount; if (hex_digit != 0 || leading_zero_found){ leading_zero_found = 1; printf("%c", toHexDigit(hex_digit));} mask >>= 4; shift_amount -= 4; } if (!leading_zero_found) printf("0"); printf("\n"); }
下列是一個C 語言的函式(printHexFromBinary)和一個輔助的小函式 (toHexDigit),若呼叫此函式(printHexFromBinary)時傳入一個正整數, 則函式執行完畢會傳回此正整數的十六進位表示法。試論述此函式 (printHexFromBinary)如何完成上述的轉換功能。(25 分)