--- title: MikazukiHikari(傅約榮) categories: User ... # 簡介 * 國立成功大學 電機工程學系碩士班 112 級 (2023 ~ 2025) * GitHub: [`MikazukiHikari`](https://github.com/MikazukiHikari) * HackMD: [`MikazukiHikari`](https://hackmd.io/@DboOgKS6RtOmMLCltFsBig) # 2025 Linux 核心設計 春季班 自我評量 ## 成果發表和貢獻 5分。 在[類神經網路的 ReLU 及其常數時間實作](https://hackmd.io/@sysprog/constant-time-relu),順手修正標點符號的錯誤,勿以善小而不為。 ## 作業/隨堂測驗 9分。 * [2025q1 Homework1 (lab0)](https://hackmd.io/@DboOgKS6RtOmMLCltFsBig/linux2025-homework1) * [2025q1 Homework2 (quiz1+2)](https://hackmd.io/@DboOgKS6RtOmMLCltFsBig/linux2025-homework2) * [2025q1 Homework3 (kxo)](https://hackmd.io/@DboOgKS6RtOmMLCltFsBig/linux2025-homework3) * [2025q1 Homework4 (quiz3+4)](https://hackmd.io/@DboOgKS6RtOmMLCltFsBig/linux2025-homework4) * [2025q1 Homework5 (assessment)](https://hackmd.io/@DboOgKS6RtOmMLCltFsBig/linux2025-homework5) 在進行課程作業的過程中,起初並不習慣撰寫詳細的開發紀錄,尤其是在 lab-0 的實作階段,當時傾向優先投入時間於推進功能開發。然而,在多人成員參與的實作環境中,紀錄清晰、可追蹤的開發過程被證明是必要的工程基本素養,可避免出現「無預警的進度跳躍」等不利協作的情況。例如第一次作業時由於不習慣留下詳細的 [commit message](https://github.com/sysprog21/lab0-c/commit/30eb1e95e3e7b2bc76ef1db8ad96d8933b4bbe72) ,所以在第三次作業時,被 reviewer 給予好幾點建議,像是「更具體描述要解決哪個問題,讓 reviewer 不用另外點進去看程式碼就能大致理解你解決了什麼」或是「commit message 的內文除了說明 what 和 why,也建議補充一些簡要的 how(特別是對於邏輯較複雜的部分)」,之後的 [commit message](https://github.com/sysprog21/lab0-c/commit/4909ad55525f9047dead3cac1de489624e4d93e0) ,就有了較大的改善,逐漸養成工程師的基本素養。 我幾乎每次作業都是發布後就立即開始著手實作,在作業區靠前的位置都可看到自己的 ID 在上面,並且作業的每一題至少都會完成解釋該程式碼,力求至少理解其背後的原理,這是其他同學沒有做到的。但第六次作業未能實作,因此無法給自己滿分。 ## 期末專題 10分。 * [Linux 核心專題: RISC-V 系統模擬與 VirtIO](https://hackmd.io/@sysprog/SkL_nUFWle) * [TODO: 實作 virtio-fs](https://hackmd.io/@sysprog/SkL_nUFWle#TODO-%E5%AF%A6%E4%BD%9C-virtio-fs) * 並附上程式碼與講解影片 這一個月來,我投入了大量時間專注於寫程式或查詢相關資料及程式碼,幾乎每天都在密集思考與實作中度過,甚至常因為反覆推敲細節而夜深難眠。這樣的高強度投入,讓我每天都能清楚感受到自己的成長——不只是技術上的提升,更包括面對挑戰時的心態轉變。從一開始完全看不懂 linux 中描述 File System Device 以及 FUSE 的規格書到思索如何解決 host 不支援 virtio-fs 功能,之後在建置一個能支援我們要的功能的 container 的過程中突然理解了虛擬化和容器化技術的含意,再到如何解決無法初始化 virtio-fs 裝置,且無法參考其他已實作的 virtio 功能,只能自己查閱資料去一個一個排除問題,然後終於成功讓系統偵測到 / 能掛載我的裝置,到現在能收到 guest 發出的 request ,最後實作對應的 response 就能完成不同的命令,並且在過程中也理解了一開始的 linux 規格書上表達的意思,這個過程實在是太漫長了,但我獲得了超乎想像的收穫。 期末專題觀摩並提問 * [Linux 核心專題: 高度並行的 Valkey 實作](https://hackmd.io/@sysprog/HyqlsB7Zxe#Reviewed-by-MikazukiHikari) * [Linux 核心專題: 雲端檔案系統設計和實作](https://hackmd.io/@sysprog/BJH6UVXZle#Reviewed-by-MikazukiHikari) * [Linux 核心專題: 輕量級隔離運行環境](https://hackmd.io/9GPMGNiRS-mMGLoNmVKNJw#Reviewed-by-MikazukiHikari) * [Linux 核心專題: 位元運算](https://hackmd.io/HjRFCuIiTBa-xDiSnidUuw#Reviewed-by-MikazukiHikari) * [Linux 核心專題: bitops 相關測驗題](https://hackmd.io/KjzKiTVJSl-J6CBDZFI9iQ#Reviewed-by-MikazukiHikari) ## 與授課教師的互動 10分。 * 第十一週:5/2 * [線上討論](https://docs.google.com/document/d/1nV6BP4nttrO0OgaycJRXjkScE1R6Jf1lwmqxQylr4N0/edit?pli=1&tab=t.0#heading=h.ux527w72951q) * 發現對於先前教材整數開平方根的操作的不熟悉,誠實面對自己。 * 本來想做 ML 相關的專題,但發現這並不適合這堂課以及未來的就業環境。 * 第十二週:5/5 * [線上討論](https://docs.google.com/document/d/1nV6BP4nttrO0OgaycJRXjkScE1R6Jf1lwmqxQylr4N0/edit?pli=1&tab=t.0#heading=h.ux527w72951q) * 討論期末專題題目,決定實作 RISC-V 相關之主題。 * 在和老師一對一討論時,被老師問到了教材 [從 √2 的存在談開平方根的快速運算](https://hackmd.io/HUzAPdVVSACpsnaj5Omvgw?utm_source=suggest-edit-card&utm_medium=icon#Digit-by-digit-Method) 的相關問題,我對其做出了回應,還有一系列的實驗及解釋並記錄於[整數開平方根](https://hackmd.io/@DboOgKS6RtOmMLCltFsBig/SkS4ZDUeeg)。 * 和老師模擬面試。 * 第十七週:6/10 * [2025-06-10/17/24 問答簡記](https://hackmd.io/4UVPLWFgQ92AlG3N76dFKA#MikazukiHikari) * 問題 : 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、如何流暢清楚的表達自己的想法以及如何有效的溝通等等。 在這門課中,我有機會接觸到許多優秀的同學。每當看到他們的成果,除了佩服之外,也常讓我反思自己的不足。不過,我也藉此激勵自己持續進步,如同老師說的:「跟厲害的人共事想變得不強也很難。」從一開始連安裝 linux/windows 雙系統都要看教學影片,到作業還需要參考別人的實作才能完成,然後自己開始在每次作業發布後就立刻開始寫作業,力求每一題至少都會完成解釋該程式碼, 之後和老師第一次一對一討論後被老師要求解決之後作業的額外問題,並且自己對「開平方根的快速運算」做了一系列的實驗及解釋,到最後自己實作一個從沒聽過的期末專題。這一路上的成長與累積,都是屬於自己的寶貴收穫。我相信未來我在面對困難時,都會想起這段經歷,如同<因為自動飲料機而延畢的那一年>中提及的:「學習如何處理與承受失敗,才能變得比以前更強大。」並勉勵自己堅持下去,最終克服困難,最後再一次慶幸自己在這學期有機會參與課程並持續到現在。 ## 自我評量 (1 ~ 10): $GEOMEAN = ( 5 \times 9 \times 10 \times 10 \times 10 )^{1/5} = 8.52$ 方案 A :$8 + floor(0.3 * GEOMEAN) = 8 + 2 = 10$ 方案 B :$1 + floor(GEOMEAN) = 1 + 8 = 9$ 選擇此方案。