--- title: WU CHUNG-LUN (吳仲倫) categories: User ... # 簡介 - 資訊工程學系 114 級(2020~2024) - Github:[`horseface1110`](https://github.com/horseface1110) - Hackmd:[`horseface1110`](https://hackmd.io/@horseface1110) # 2025 Linux 核心設計 春季班 自我評量 ## 自我評分 1.成果發表和貢獻: 2 分 2.作業/隨堂測驗: 8 分 3.期末專題: 6 分 4.與授課教師的互動: 6 分 5.所見所聞所感: 9 分 總分:使用方案 B: 1 + floor(GEOMEAN) = 1+floor(5.1961)= 6 ### 成果發表和貢獻 未曾參與教材內容的修訂。 因為沒有任何貢獻,我給自己2分。 ### 作業/隨堂測驗 * [Homework (lab0)](https://hackmd.io/@horseface1110/linux2025-homework1) * 練習使用 Linux `list.h` 提供的巨集與操作方式,將list嵌入到結構之中,再透過 `container_of` ,並閱讀原始碼,得知是藉由地址計算得到結構體本身的指標。這為我在後續的課程理解鋪下了很重要的基礎。 * 在實作過程中多次遇到 segmentation fault、邏輯錯誤與 memory leak 問題,學會從錯誤訊息中定位原因,並修正如 `strcmp` 型別錯誤、`list_del` 使用錯誤等細節。 * 閱讀論文〈Dude, is my code constant time?〉後,了解如何分辨程式的時間複雜度是否為O(n),並試圖使用dudect分析程式碼,抵禦時間側信道攻擊。 * 了解 commit mesg 的重要性,即使是獨自開發,也應該保持 main 分支的乾淨,以及使用分支維持 commit 紀錄的易讀性,每個 commit mesg 需撰寫改動目標、原因以及解決了什麼問題。 * [Homework2 (quiz1+2)](https://hackmd.io/@horseface1110/linux2025-homework2) * [Homework3 (kxo)](https://hackmd.io/@horseface1110/linux2025-homework3) * 學習 kernel bottom-half 機制的差異與選擇策略,包含 softirq、tasklet、workqueue ,理解各者適用場景與排程模型,並實際於落子通知中應用 queue_work() 將事件推入自建 workqueue 處理。 * 學會使用 kfifo 實作非同步資料通道,並理解其在單一生產者/消費者模型下的 lockless 安全性。 * 為了將強化式學習(Reinforcement Learning, RL)模型移植至 Linux 核心模組,理解了定點數在核心中的表示方式(如 Q16.16 格式)、加減乘除的位元處理細節與飽和問題。 * [Homework5 (assessment)](https://hackmd.io/@horseface1110/linux2025-homework5) * 記錄我在閱讀教材〈你所不知道的 C 語言:記憶體管理、對齊及硬體特性〉過程中的思考與問題,以及發現我在閱讀教材時的缺點,不會反思 * 成功將強化學習演算法移植至 Linux kernel 中執行,並透過將 Q-table 定點化後轉存為 .h 檔,實現無需運算、僅查表的決策機制,顯著降低執行負擔。過程中我觀察到系統僅重複出現特定棋譜,進一步推論 Q-table 生成過程可能存在初始化偏差或探索機制不足。 * 紀錄〈自動販賣機而延畢的那一年〉的閱讀心得,體會到理想與現實間的差距,反思「能動就好」的心態將阻礙精進,也意識到在創業與開發中,對細節與邏輯的重視遠比看起來更關鍵。 綜上所述,我認為這些作業內容確實地增加了我對 linux kernel 的相關知識及實作細節,並讓我重視閱讀習慣及實作細節。所以我給自己8分。 ### 期末專題 [Linux 核心專題: 虛擬無線網路裝置驅動程式](https://hackmd.io/@sysprog/HyUvvBm-ll) 我的期末專題聚焦於 Linux 核心虛擬無線網路裝置(vwifi)的實作,並探討其在記憶體管理、虛擬化架構與傳輸控制上的設計細節。我不僅閱讀並修改 vwifi 驅動原始碼,深入理解核心中同步機制(如 mutex 鎖順序設計以避免死鎖)、記憶體配置策略(使用 GFP_KERNEL 標誌來允許睡眠等待),也在過程中實作了動態速率控制(bitrate mask)與封包延遲模擬機制。 透過這次專題,我也對無線通訊的基本參數有了更具體的理解,例如資料傳輸速率(bitrate)、調變與編碼方案(MCS, Modulation and Coding Scheme)以及 Guard Interval(GI)等設定,這些知識讓我在模擬無線網路傳輸行為時,能更精確地建構出接近實際環境的效能模型。 最後,在速率控制與延遲模擬方面,我設計了 bitrate mask 與速率表的對應邏輯,並加入延遲時間函式,達到傳輸延遲能根據目前的 bitrate 動態調整,以模擬不同傳輸速率下的封包傳輸行為。 但我認為只能給自己這部分 6 分: * 6分在於我參與專案初期的熱忱與激動。這個專案算是這學期學到的知識的集大成之處,應用了前面作業中所學到的相關知識,尤其是 kxo 中的 linux kernel module。 * 扣掉的4分在於我保守、怯弱的個性。研讀完無線通訊的知識及`vwifi`程式碼後,我擔心到期末時做不完一個 TODO ,所以選擇了看起來簡單的,而不是依照我的知識背景,選擇感覺應該優先做的。在開發期間,我也沒有持續與老師溝通,只有一次在下課時詢問老師目前的實作方向是否正確,這導致我在完成整個 TODO 時,才被告知了實作方向錯誤,回過頭才發現,浪費了很多時間,正確的實作方向的工作也被做完了。 ### 與授課教師的互動 #### 一對一討論 * **5/14**:與授課老師討論課業上遇到的問題,詳細紀錄於 [Homework5 (assessment)](https://hackmd.io/@horseface1110/linux2025-homework5)。 * 在與授課老師討論課業問題的過程中,老師提出了幾個基本但本質性的重要問題,例如「為什麼 heap 和 stack 不相鄰?」以及「兩者哪個通常佔用較多空間?」。這些原本是我以為已經「背過」的作業系統知識,但在面對提問時卻無法做出有邏輯的說明,反映出我對核心概念的理解仍停留在表層。會談後,我查閱了相關原始碼、x86 記憶體布局與 glibc malloc 行為的技術文件,也閱讀 Linux 進程記憶體空間(如 /proc/[pid]/maps)的配置來理解兩者的空間隔離設計。雖然一開始查到的大多是部落格整理或教學影片,但這次經驗讓我深刻體會:只有回到第一手資料──例如系統規格書、原始碼實驗與觀察結果──才能真正建立紮實理解。透過這次經驗,我不僅釐清了記憶體分段與保護的設計目的,也養成了「以系統視角追蹤問題來源」的思維方式。這對我後續 debug kernel module 相關 memory 操作時,有明顯的幫助,例如在後續開發 vwifi kernel module 的過程中,我直接參考 IEEE 802.11 規格書來理解架構設計與各項參數的意義,確保模組實作與標準對齊。 #### 課堂問答 誠實面對自己。 我沒有進行課堂問答。 對於放棄了許多與老師互動的大好機會的我來說,我認為自己在這方面做得很糟。所以我給自己 6 分。 ### 所見所聞 這門課帶給我兩大收穫:其一是系統軟體知識的深化(前文已有詳述),其二則是學習態度的改變。接下來,我想專注談談後者。 這堂課讓我真正理解了「學習」應該抱持什麼樣的態度。過去的我總是依賴「背多分」的方式,希望把所有資訊一字不漏地記起來,認為這就是學習。但我現在明白,這樣的策略在這個領域已經不再適用。面對開放性問題時,我常答不出所以然;只要被問到核心,就會顯得手足無措。現在我認為,閱讀資料時,應該從「為什麼」的角度出發,不斷地提問、追根究柢。在這樣的思考過程中,我才能發現原本忽略的細節,也才能真正內化所學的知識。唯有勇敢面對自身的不足,能力才會紮實地進步。 在期末的專題發表環節,我深刻體會到:作為工程師,所有的決策與行動都應建立在理論與規範之上。每一項改動都應該有據可循,不論是數據、文件還是規格書,唯有留下清楚的註解與依據,才能讓成果站得住腳。我也學到,不該急著開始寫程式,而應先投入時間研究、吸收知識,確認方向後再動手。在開發過程中,也要積極與上級或團隊溝通,確保思路一致,如此一來,才能真正事半功倍。 這是我第一次參與開源專案,還記得第一次的 commit 被 merge 時,真的非常開心。若未來有機會,我也非常希望能再次參與老師的開源計畫。 回想課程初期,大家都還處於摸索階段,那時還能笑著與朋友討論作業、小考,甚至開玩笑說老師很兇。隨著時間推進,開始有人展露頭角,我也漸漸發現,儘管我看似擁有較多時間,但無論在作業的理解、教材的吸收或是實作進度上,我卻並未超前他人。當下的我還以為自己已經「有在努力」,但回頭看才發現,我其實還遠遠不夠踏實。 我常常只是快速看過教材、試著背下來,和朋友討論後聽到他們說「也是看看而已」,心裡便感到安心。但日後才發現,他們其實記得非常詳細。有一次課堂中老師提問,我幾乎一問三不知,而朋友卻能對答如流,那一刻讓我深感震撼,也開始反思:是不是自己太鬆懈了?是不是太輕信「大概看看就好」的說法?到了期末才驚覺,自己早已落後一大段距離。 在課程期間,我也常因為害怕被罵或被笑,而不敢主動找老師詢問或交流。但我終於明白,這個世界是狼性的──你必須主動爭取,機會才會屬於你。要敢問、敢表達,才有機會成長。這是我從課堂、師生一對一互動、專題開發與發表過程中,獲得最重要、也最深刻的一個體悟:不要怕丟臉,自尊心是最不值錢的東西。若總是害怕展現無知,就會錯失許多讓自己進步的機會,而根本原因,正是「害怕」。 在撰寫這份自我評量前,我看了幾位朋友的內容,說實話,非常震驚。尤其是 HeatCrab ,雖然這樣說可能有點失禮,但我以前並不知道他是這麼認真且努力的人。我知道他的表現不錯,也知道他幾乎都在忙這門課的事,但到了期末細讀他的紀錄與成果,才發現他在背後默默完成了這麼多事情。那一刻,我真的是自愧不如。明明學期一樣長,但我投入的心力卻遠遠不及他──才發現,在我以為「大家都差不多」的同時,有些人早已在默默前行。 我給自己這部分的自我評價是 9 分。雖然多數是反省與檢討,但這些經驗給我的啟發極深,也將成為我人生中非常重要的一課。