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

Wufangni (吳芳霓)

2024 Linux 核心實作 春季班 自我評量

  • 簡介:國立成功大學電機所 114 級
  • GitHub: Wufangni
  • HackMD: Wufangni

成果發表和貢獻

相關錯字修訂:

Linux 核心的紅黑樹

Linux 核心專題: RISC-V 系統模擬器

作業與隨堂測驗

  • lab0: HackMD / GitHub

    第一次作業完成了對 Queue 的各種操作,且在第三次作業引入 lib/list_sort.c 、 shuffle 等操作,且研讀指定論文並參考 dudect 原始程式,修改函式使所有測資皆可通過。

  • quiz1 + 2: HackMD

    第二次作業重新回顧第一及第二週的隨堂測驗,對測驗時沒時間深入思考的程式原理有更深入的理解。

  • quiz3 + 4: HackMD

    類同第二次作業所得,第四次作業重新回顧第三及第四週的隨堂測驗,更加了解取對數的各種方式、ewma 在存取資料時的樣子,以及計算二進位表示法內 bit 設置數目等考題內容。

  • Assessment: HackMD

    閱讀〈因為自動飲料機而延畢的那一年〉得到許多啟發,且研讀了課程指定教材 CS:APP 3/e 到第二章節內容,對於電腦對數值的處理方式和各種細節操作更加熟悉,另外也整理了閱讀課程教材時遇到的幾種問題在一對一約談時與老師討論,以及觀摩去年期末專題發表,從中挑選了想投入的期末專題主題。

  • Integration: HackMD

    第六次作業我完成了自我檢查清單中的幾項任務,包括事前準備、研讀核心模組教材,以及了解 mutex lock、CMWQ 等相關運作原理。

期末專題

紅黑樹實作: HackMD / GitHub

研讀教材了解紅黑樹與其他資料結構的差異,並設計實驗評估紅黑樹各種操作的效能。

解說影片連結:Linux 核心專題: 紅黑樹實作改進

與授課教師的互動

一對一約談時間:5月22日 (週三) 下午1:30 – 下午2:00

  • 類神經網路的 ReLU 及其常數時間複雜度實作

    說明 union 的運用方式,與老師討論內部組成大小不相同可能造成的錯誤和我對於程式碼設計的理解,以及共用記憶體與 shared memory 在用語上應該做區隔。

  • 記憶體管理、對齊及硬體特性

    討論 CPU 是否做對齊的實驗結果。

  • 編譯器和最佳化原理篇

    針對編譯時不同格式的輸出使用方式做討論,因 format string 的處理成本較高,老師提到有一種方式會直接判斷內容是否是純字串型態使用 puts() 的方式輸出,減輕輸出成本。

  • 不只挑選任務的排程器

    老師提到在教材 CPU sched book 中有針對不同版本下 Linux 挑選任務的排程方式,並簡單介紹了關於 2.4 版本中 global runqueue 與 2.6.0 版本採用的兩種 queue 交互的比較。

修課心得

在作業五中我詳細閱讀了〈因為自動飲料機而延畢的那一年〉,對作者投入大量時間在與夢想奮鬥時的迷茫深感共鳴,早在上學期就聽聞這堂課的各種資訊,因考量到自身能力不知道是否能負荷這堂課的要求,以及需要兼顧實驗室本身的任務和其餘選修課程的各種作業及測驗,在最後決定修課前考量了許久才決定為自己衝一把,跨出我在學習環境的舒適圈。 學期剛開始我在對於 C 語言還不太熟悉的情況下接到了老師指派給學員的第一週作業,不斷的與身邊修課同學討論和研讀老師所提供的教材,才終於在時間截止前完成對指定佇列的程式碼操作,雖然完成的進度遠遠不及作業中的所有要求,但還是讓我在對 C 語言的程式實做方面有很大一個進展,以及能成功使用 Linux 核心所提供的 API 去完成我需要的操作。

隨著課堂的推進,在每個禮拜老師提供的測驗題都讓我可以在最短時間內了解到教材內所述的運作原理,也因為前期的兩次作業讓我能夠花更多時間去對這些內容做更深入的回顧,且足夠透明的作業繳交流程也能讓我觀摩其他同學對於這些程式多種角度下的不同理解方式,打破我傳統以來自己獨立學習的侷限性,得到更多啟發和構想。透過這種作業紀錄的方式讓我學習到了如何更有系統性的統整自己所學,不只方便在未來可能記憶模糊時回來複習,也能在做筆記時進一步加強對於這些知識的認知,有時甚至能取得當下思考不到的想法。

經過這幾個月的各種測驗和作業所學,我對於 Linux 核心的架構和操作有更深厚的認知基礎,例如簡易又有效率的數值換算和排程器運行原理…等,雖然不可否認的是與作者相同我在這堂課投入大量的時間卻與課堂預計能獲得的知識不能完全成正比,但在迷茫過程中也額外學習到許多寶貴的經驗(時間規劃和系統整理能力…等),非常感謝一路幫助我解惑的修課同學,以及老師每週用心的課程規劃,在這堂課提供給我超出我原先預計還要多許多的幫助,也成功達成不讓自己後悔選這門課的自我要求。

每月給指導教授的學習回顧

  • 二月份學習回顧:3月7日 週四 下午10:27

    1.與指導教授提及 Linux 核心實作 課程可習得的內容以及可對自身與實驗室研究帶來的好處

    2.列出在二月份研讀的論文及在課堂所學的 Linux 核心相關的原始碼(linked list)的學習狀況

  • 三月份學習回顧:4月7日 週日 上午2:15

    1.說明了第二次及第三次作業內容,包括自身的作業回顧和如何對前次作業進行補強

    2.附上作業筆記的連結供指導教授參考

  • 四月份學習回顧:5月7日 週二 下午8:52

    1.說明對第四次作業的測驗回顧內容,以及第五次作業的學習狀況

    2.附上作業筆記的連結供指導教授參考

  • 五月份學習回顧:6月14日 週五 下午5:35

    1.列出在第六次作業的自我檢查清單學習概況,以及一對一約談的情況說明

    2.附上作業筆記的連結以及期末專題方向供指導教授參考

自我評量 (1 ~ 10)

成果發表和貢獻:我給自己 2 分,雖然沒有對程式碼直接的修正,但在閱讀教材期間我對 linux 核心模組的運作原理更為熟悉,且對文字編排做了幾處修訂,期許自己未來能運用到這堂課學習的基礎為此做出相關貢獻。

作業與隨堂測驗:我給自己 9 分,在前期我認真投入在老師所提出的六次作業,並建立許多像是數值計算、C 語言操作…等基礎,以及研讀關於教材內提供的各種相關論文,而在回顧隨堂測驗期間我也成功了解到當初測驗時沒能讀懂的原始程式碼,加深我對教材的理解程度。

期末專題:我給自己 7 分,進行專題研究的期間我重新了解紅黑樹的整個資料結構運作方式,且與其他常用的方式進行比較和評估,不足的地方在於我對實驗設計方面的不熟悉,以至於沒辦法完整判斷實驗結果與理想狀態呈現誤差的情況,無法完整驗證紅黑樹在資料存取方面受肯定的主要原因。

與授課教師的互動:我給自己 7 分,在一對一約談時我與老師討論了幾處在閱讀教材時遇到的困惑,從老師的講解中成功得到解答,且驗證了我對程式碼的理解,可惜的地方在於我比較少在課堂中與老師進行互動,若能勇於在課堂中提出自己的想法和疑問或許能更大程度加深我對於這堂課的理解和實作能力。

修課心得:我給自己 9 分,在修這堂課中我成功得到了許多啟發和經驗,獲得了許多修課同學的幫助,讓原本毫無基礎的我能在短時間上手關於 linux 和 C 語言的各種相關知識,另外也從中得到許多額外的技能(例如更有效率的時間管理等)。

每月給指導教授的學習回顧:我給自己 9 分,在每個月初時我都會與我的指導教授簡短的回顧前一個月在修課時的所有學習狀況(附上作業筆記連結),讓他可以對我在實驗室須負責的工作及課業負載中做出的權衡有一定掌握,且說明在這門課我能為實驗室帶來的益處。

我在這門課的自我評分:

\((2 \times 8 \times 6 \times 7 \times 8 \times 9) ^ {1/6} = 6.03\)

使用方案 B 計分:\(1 + floor(6.03) = 7\)