分享到plurk 分享到twitter 分享到facebook

版本 5643b26cddebae96b2bf6ad2e876b74edc1465f7

kevinshieh0225 (謝旻恩)

簡介

  • 國立成功大學 電機工程學系碩士班 (2021 ~ ongoing)

  • 國立成功大學 電機工程學系學士班 109 級 (2016 ~ 2021)

  • GitHub: kevinshieh0225

  • HackMD: Masamaloka

Linux 核心和相關專案貢獻

  • vcam 專案貢獻:HackMD
  • kecho 修正 thread barrier 實作:#11
  • concurrent-programs/hp_list 修正迭代錯誤:#10

2022 Linux 核心設計 春季班 自我評量

作業共筆

測驗共筆

期末專題

  • vcam:打造 Linux 虛擬攝影機裝置驅動程式 GitHub / HackMD

修課心得

自上學期修習資訊科技產業專案設計後,除了了解台灣產業需求、自己的目標、也深知自身不足,故這一學期決定全力投入在這門課裡,希望對作業系統有更深入的學習與實作,也基於影像處理的興趣給自己設定了最後能開發 vcam 的目標。

課程剛開始就帶給我深深的挫敗感,課程內容與功課量深不見底,我就算一個禮拜投入超過 20 小時也只能勉強達成基本需求,再對比其他神人的修課筆記,深刻感受彼此差距。但這也讓我了解到這堂課是你願意投入多少,就能帶給你超乎預期的成長,怪不得有人願意一修再修,這也激起我的挑戰慾望。

從剛開始的 lab0-c 讓我初探 linux 核心風格的程式開發,也開始思考這些常見的資料結構的實作考量。從課程與考試中扎實的學習指標、函式與巨集、數值系統、Bitwise 操作,這些可謂基礎中的基礎,卻也奠定了一個開發者寫出的程式碼是否有價值的關鍵,而 fibdrv 正體現了這件事,影響效能的因素不只有演算法,還包括你怎麼實現他,如何把所有一丁點的效能都把他拉滿,再再考驗開發者的功力。fibdrv 是我第一次開發核心模組,嘗盡電腦當機的辛酸,也實際透過 perf 來檢測效能,操作 gdb 來偵錯。

學期中我專注於多執行緒的議題,理解到現今影響多核心系統效能的關鍵,反而是記憶體存取的議題。探討 cache coherence、硬體架構 store buffer 和 invalidate queue 如何提昇存取效能,卻也帶來副作用,最終需要靠軟體層級的 memory barrier 來維護多核心執行的正確性。而後在 ktcp 專案學習 TCP 伺服器、I/O multiplexing、kernel thread 和 workqueue 處理機制。最終如願和老師一起開發 vcam 虛擬攝影機裝置,讓我深入理解 v4l2 linux kernel 框架,了解 v4l2-compliance, vlc, ffmpeg 與 video driver 間的互動關係,以修正 vcam 功能以提昇其支援性、改善 vcam 運作流程提高專案的維護性、並改善 scaling, cropping 讓這些功能更符合使用者的使用需求。

在這一門課我學到最寶貴的是獨立研究的能力。每次剛開始我對老師派給我的任務都很陌生,我並沒有相關的知識背景,我必須從頭開始建構對該領域的認知。在理解背後的脈落,才進一步能看懂專案程式為何這樣寫,並能做基礎的開發。然而在開發的更加深入時,會發現很多問題再也無法從網路尋找解答,我必須獨立的去尋找資源、閱讀規格,自行去尋找原因。最終,我建立一套自己的論述,能夠自己提出問題,知道哪裡可以再改進,我認為這時我才真正成為一個獨當一面的工程師。面對日漸複雜的系統開發,工程師的價值便是不斷的學習與挑戰。

自我評量 (1 ~ 10)

10 分,這學期我一半以上的時間都在做這堂課的內容,雖然還是沒有完成所有的作業需求,但真的是從對 C 語言有點陌生,到能夠和老師一起開發專案,真的成長很多!大感謝。