--- title: aa860630 (魏泳禎) categories: User ... ## 2024 Linux 核心設計 春季班 自我評量 * 簡介:國立成功大學電機所 114 級 * GitHub: [aa860630 ](https://github.com/aa860630) * HackMD: [aa860630 ](https://hackmd.io/@aa860630) ### 成果發表與貢獻 閱讀文件時做的錯字修訂: ### 作業與隨堂測驗 * lab0: [GitHub](https://github.com/aa860630/lab0-c) / [HackMD](https://hackmd.io/@aa860630/linux2024-homework1) 針對佇列作指定的操作,實作出 q_sort 再與 list_sort 做效能上的評估與比較 * Integration: [HackMD](https://hackmd.io/@aa860630/Sk2XZ7K-R) 閱讀〈Linux 核心模組運作原理〉並對照 Linux 核心原始程式碼 (v6.1+),閱讀《The Linux Kernel Module Programming Guide》(LKMPG) 並解釋 simrupt 程式碼裡頭的 mutex lock 的使用方式 * Assessment: [HackMD](https://hackmd.io/@aa860630/linux2024-homework5) 閱讀〈因為自動飲料機而延畢的那一年〉後的心得,研讀 CS:APP 3/e 第一章、第二章並對前期作業進行改進 * quiz1 + 2: [HackMD](https://hackmd.io/@aa860630/linux2024-homework2) 探討 Quick sort 的儲存效能與其時間複雜度、Timsort 各個函式及 Timsort 的穩定性;針對 hash table 結構,討論 DFS 演算法過程與其程式碼 * quiz3 + 4: [HackMD](https://hackmd.io/@aa860630/linux2024-homework4) 主要針對 bitwise 的操作,內容包含如何有效找到最高位元、利用加法與乘法來取代除法、及 Exponentially Weighted Moving Average 的實際操作,其中提到 GCC 提供一系列的 built-in 函數用來優化編譯結果 ### 期末專題 Netfilter: [HackMD](https://hackmd.io/@aa860630/linux2024-final) / [GitHub](https://github.com/aa860630/adriver) 使用核心模組以過濾廣告,透過解析 TCP 與 UDP 協定的方式找到網路封包包含的有效訊息,並與 iptable 施行比對後決定是否允許封包通過,將含有廣告訊息的封包丟棄 ### 與授課教師的互動 一對一討論:5月 20日 (星期一)⋅下午7:30 - 8:00 * [問題一](https://hackmd.io/@aa860630/linux2024-homework5#%E7%A0%94%E8%AE%80-CSAPP-3e-%E7%AC%AC%E4%B8%80%E7%AB%A0): 在二的補數乘法應用中,討論到乘法溢位造成的安全漏洞,乘法溢位可能造成資料結構被破壞或者程式崩潰,還有哪些問題嚴重到可以被稱之為安全漏洞,抑或是上述問題可以如何被拿來惡意操作? * [問題二](https://hackmd.io/@aa860630/linux2024-homework5#%E6%95%99%E6%9D%90%E5%BB%B6%E4%BC%B8%E5%95%8F%E9%A1%8C): 在 bitwise 操作中,可以透過建立 LUT 來加速 RGB 轉為灰階的運算,方法不同可能產生哪些差別? * [問題三](https://hackmd.io/@aa860630/linux2024-homework5#%E6%95%99%E6%9D%90%E5%BB%B6%E4%BC%B8%E5%95%8F%E9%A1%8C): 在 RGBA 轉為灰階的操作中,為何透明度 alpha 不與 RGB 一樣建立表格? ### 修課心得 課程的第一個禮拜出了第一項作業 – 指定的佇列操作,每天寫程式的時間超過10個小時,心想第一個作業就已經讓我疲憊不堪,退選的心一直存在,看到一起修課的同學半夜持續在更新自己的 github 與 HackMD 就覺得自己不能輸 在比較 list sort、merge sort 跟 Timsort 的過程我發現影響排序的因素很多,包括資料、穩定度等,過去的我會因為求出𝑂(𝑛)或𝑂(𝑛log⁡𝑛)這類大方向的時間複雜度而去判斷一個演算法的好壞,我學習到工程師追求更精準、更有效率的精神,在判別時間複雜度時讓我理解做研究的態度應當是專注於更細緻的分析與比較,而非只停留於表面 經過一整個學期我感覺收穫良多,尤其是在學習 C 語言的基礎方面。最令我印象深刻的是 Bitwise Operation 這一章節。我發現許多表達式例如乘法、除法、轉換大小寫…,都可以用簡單的邏輯運算子像 or,xor 等這類運算子進行運算,這不僅改進運算效率,也讓我對計算機如何在底層處理資料有了更深入的理解。除此之外,期末專題的呈現方式跟以往我所接觸到的大不同,感受得出來除了編寫程式碼,如何表達作品及書寫文件能力也是需要培養,為的就是在將來可以成為一個好的工程師 在上過了計算機結構與 Linux 核心實作,發現老師對我們要求不僅僅是程式上的,誠實面對自己、如何清楚的表達自己、如何探究問題本身等,都是我在這兩堂課程中學到的,現在做其他作業的筆記都會使用老師要求我們的方法,在中英切換時也會下意識地按下空白鍵,我清楚的看見自己成長了,也希望可以把課堂所學在未來的各個地方發揮上 ### 與指導教授的學習回顧 * 二月回顧:3月7日 週四 下午7:15 1. 了解「Linux 核心實作」的作業對於程式碼品質、執行效率、記憶體使用率,還有各式「品味」(good taste,呼應 Linus Torvalds 在 TED 訪談的用語) 的重視 2. 閱讀 Linux 核心關於 linked list, hash table,以及 bitops 相關的原始程式碼,並試圖撰寫程式碼來使用 Linux 核心提供的 API * 三月回顧:4月8日 週一 下午9:50 1. Bitwise Operation 在程式上可以讓許多運算節省效能 2. 影響 list sort、merge sort 跟 tim sort 的因素很多,包括資料、穩定度等 3. 學習到工程師追求更精準、更有效率的精神 * 五月回顧 : 6月28日 週五 下午3:40 1.閱讀網路知識,其中包括:TCP協議、UDP協議如何運作、TLS/SSL加密方法,以及封包是如何在網路七層中運輸 2.查找了關於Netfilter及封包處理的程式碼 ### 自我評量 $(4 \times 9 \times 9 \times 7 \times 9 \times 7) ^ {1/6} = 7.23$ 使用方案 B 計分:$1 + floor(7.23) = 8$