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

版本 39cd1da7ecbcf82c3affe9969b84e8576eaa4451

MikazukiHikari(傅約榮)

簡介

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

成果發表和貢獻

7分。

作業/隨堂測驗

9分。

在進行作業的過程中,一開始我很不習慣留下詳細的開發紀錄,特別是在 lab-0 的實作過程中,總覺得與其拿時間撰寫開發紀錄不如推進更多實作進度,然而在多人實作中,詳盡且可追蹤的開發過程很重要,這牽涉到工程訓練的基本素養,不接受「突然冒出進度」這種事。此外有開發過程也能使別人更快速理解自己的想法並激發討論與交流,其實變相的也能幫助到實作進度,也能印證或改進自己的實作方向,利遠大於弊。於是到作業二開始基本上一定會邊做邊把自己完成的內容整理成開發紀錄,我很慶幸自己有養成留下詳細紀錄的習慣。事後發現,這不只是單純記錄步驟而已,更像是一種幫助自己釐清思緒的過程。

此外這個過程我發現我常以為自己已經掌握了一個概念,但每當試圖用文字寫下來、條理清楚地表達時,才發現原來理解得並不深入。撰寫開發紀錄讓我必須重新梳理每個想法,用更嚴謹的方式組織內容,不能只停留在「大概懂了」的模糊認知。透過這樣的過程,我更深刻地體會到,唯有能夠清楚說明並寫出來,才是真正理解的表現。我幾乎每次作業都是發布後就立即開始著手實作,並投入了很大的心力去完成,但第六次作業未能實作,因此無法給自己滿分。

期末專題

10分。

這一個月來,我投入了大量時間專注於寫程式或查詢相關資料及程式碼,幾乎每天都在密集思考與實作中度過,甚至常因為反覆推敲細節而夜深難眠。這樣的高強度投入,讓我每天都能清楚感受到自己的成長——不只是技術上的提升,更包括面對挑戰時的心態轉變。從一開始完全看不懂 linux 中描述 File System Device 以及 FUSE 的規格書到思索如何解決 host 不支援 virtio-fs 功能,之後在建置一個能支援我們要的功能的 container 的過程中突然理解了虛擬化和容器化技術的含意,再到如何解決無法初始化 virtio-fs 裝置,且無法參考其他已實作的 virtio 功能,只能自己查閱資料去一個一個排除問題,然後終於成功讓系統偵測到 / 能掛載我的裝置,到現在能收到 guest 發出的 request ,最後實作對應的 response 就能完成不同的命令,並且在過程中也理解了一開始的 linux 規格書上表達的意思,這個過程實在是太漫長了,但我獲得了超乎想像的收穫。

背負著碩士研究可能會延誤的風險,我依舊堅持選修本課程,並審慎依據事先規劃的目標,著重在上述的題目,尤其是這與我碩班口試的時間上完全重疊,但我仍努力做到自己認為的最好並投入了不亞於我碩論研究的時間,只因我做這些始終是在追求翻身的機會,並為此在 Linux 核心的基礎上不斷的進行自我突破。

與授課教師的互動

10分。

  • 第十一週:5/2
    • 線上討論
    • 發現對於先前教材整數開平方根的操作的不熟悉,誠實面對自己。
    • 本來想做 ML 相關的專題,但發現這並不適合這堂課以及未來的就業環境。
  • 第十二週:5/5
  • 第十七週:6/10
    • 2025-06-10/17/24 問答簡記
    • 問題 : DAG 是甚麼? 和離散數學中的圖 (graph) 差別最大的地方是?
    • 問題 : DAG 在 linux kernel 哪裡會用到?
    • 問題 : make 與 DAG 的關聯
  • 第十八週:6/17
    • 問題 : 想讓 semu 支援 virtio-fs 透過 make modules 去獲得 virtio_fs.ko ,之後再將 virtio_fs.ko 安裝到/lib/modules/$(uname -r)/kernel,是對的嗎?或者其實根本不需要 virtio_fs.ko 就能執行 semu 的 virtio-fs 功能?
    • 問題 : 全部編譯 linux kernel 的檔案這件事常見嗎?
    • 問題 : 全部編譯真的很慢,我該如何加速?或者直接能告訴我可以只編譯哪裡就好?
    • 只需在建置環境時額外添加參數即可讓 semu 的 linux kernel 內置 virtio-fs 。

所見所聞所感

10分。

這堂課首先第一件事就是要我們去誠實面對自己,最忌諱的就是一知半解。我以為自己懂了,然而我只是沒面對自己,必須能清楚的和人解釋其過程及原理才能勉強自稱會了,這又體現了撰寫開發紀錄的效益,我必須重新梳理每個想法,用更嚴謹的方式組織內容,不能只停留在「大概懂了」的模糊認知,缺什麼就補什麼,不懂就說不懂,然後馬上補,意識到這件事是這門課帶給我最大的收穫。

這堂課也一再地佐證數學的重要,哪怕是簡單的整數開平方根,其中所牽涉的數學,逐位法的原理,都足以讓我認真思考好幾天,更不用說後面的用牛頓法改進並加速,以及使用效能檢驗工具 perf 去驗證結果,這一切都只是始於一個不到三十行的程式碼;此外,這堂課也不斷地要求我們留意細節,像是我在建置一個能支援 virtio_fs 裝置的 container 時,就因為沒注意 semu 文件上的介紹而額外花了很多時間去尋找方法,把小事情做好是很重要的,光是留意細節就可以減少很多時間的消耗,如此方可征服數千萬行等級的 Linux 核心原始程式碼。

還有,我意識到作為一個學生,我有許多基本素養需要學習,像是如何撰寫好的 git commit message、如何流暢清楚的表達自己的想法以及如何有效的溝通等等。

承擔著碩論研究可能會延誤的風險去選修本課程是我做過人生中最正確的決定之一,在這門課中,我有機會接觸到許多優秀的同學。每當看到他們的成果,除了佩服之外,也常讓我反思自己的不足。不過,我也藉此激勵自己持續進步。從一開始經常被指正,到後來逐漸注意到過去忽略的細節,這一路上的成長與累積,都是屬於自己的寶貴收穫,如同老師說的:「跟厲害的人共事想變得不強也很難。」我相信未來我在面對困難時,都會想起這段經歷,學習如何處理與承受失敗,並勉勵自己堅持下去,最終克服它,最後再一次慶幸自己在這學期有機會參與課程並持續到現在。

自我評量 (1 ~ 10):

\(GEOMEAN = ( 7 \times 9 \times 10 \times 10 \times 10 )^{1/5} = 9.117\)

方案 A :\(8 + floor(GEOMEAN) = 8 + 2 = 10\)

方案 B :\(1 + floor(GEOMEAN) = 1 + 9 = 10\) 選擇此方案。