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

YangYeh-PD (葉振揚)

個人簡介與背景

  • 姓名: 葉振揚

  • 國立成功大學 物理學系 113 級 (2019 ~ 2024)

  • GitHub: YangYeh-PD

  • HackMD: YangYeh

這其實是我第二次修這堂課,第一次修這堂課是在去年。考慮到我那個學期還有修量子物理以及熱統計等課程,因此在第 13 週星期五的時候退選了。

那時候退選能寫的程度,跟我今年剛開始修這門課時的程度差不多,就是只會 C 語言的基本語法以及簡單的 DSA,對於作業系統的認知一竅不通,只知道 OS 能做電腦資源的管理。

我覺得這也是我的問題,沒有好好利用去年的時間增強自己的實力。

成果發表與貢獻

我其實在前六週的作業中,想嘗試對 Linux 當中的 lib/math/int_sqrt.c 做出改善效能的貢獻。

由於我在看該核心程式碼赫然發現有使用到分支,因此我本來想利用前幾週所學到的 bitmask 來避免掉這個分支。不過我做過實驗後才發現 bitmask 的作法竟然比分支多了 5 個 instructions。因此我最後沒有送出我的程式碼。(詳情請見 2024q1 Homework4 (quiz3+4))

雖然我對大型的 Github 教材專案沒有貢獻,不過在看 HackMD 教材的時候,我會修改裡面的錯字、排版,以及對應 C 語言規格書補充相關的內容。

以下是目前透過 HackMD 還能夠追溯到的修改內容。

考量到這部份雖然嘗試過,但終究對大型專案沒什麼貢獻,只對教材有些許調整,因此我只能給自己 5 分。

作業與隨堂測驗

以下是我這學期有寫的作業以及隨堂測驗。

雖然都不完整,很多作業要求也都沒有完成,但我透過這些作業,學會使用很多我先前沒聽過的工具(比如 perf 或是 gnuplot) 來作實驗,測量程式碼執行效率,並呈現實驗結果(詳情請見上方連結)。同時,我也藉由做作業開始實際去看 Linux 核心程式碼,並嘗試做出貢獻。不過考量到這部份我也有兩份大作業(integration 以及 ktcp)完全沒有動工,因此扣兩分,我最多只能給自己 8 分。

期末專題

我從做專題了解到一個排程器需要考慮到各種面向,比如 Interactive 與 Throughput 的取捨, Liveness 的設計等。同時我也透過老師的教材,了解到各種排程器策略的差異。

不過由於完成度不高,實驗也沒有完成,因此我最高只能給自己 6 分。

與受課教師的互動

課程問答紀錄

我一開始對作業系統很陌生,甚至在選擇期末專題的時候,很多題目都看不懂。因此在選擇做排程器研究的時候,我其實也沒有研究方向,只是選擇了我能夠理解的題目。直到跟老師討論後,才了解排程器有很多的研究方向。比如如何降低 CPU Largest Latency,或是怎麼嘗試判斷一個任務需不需要 migrate 等等,都是與效率有關的重大議題。這讓我對 Scheduler 有更多的了解。

一對一討論時間

  • 18 May, 2024 19:00 ~ 20:00

在一對一討論,除了期末專題,我也向老師請教如何自己動手用 C 語言製作一個作業(或嵌入式)系統。因為我認為實際寫過一遍,會比起只讀教科書印象更深刻。我也從老師給的資料當中也獲益良多。從最簡單的 C 語言開始,一直到 Makefile, ELF 詳細說明很清楚。雖然我還是對很多專有名都不熟,需要去查,但至少對如何架構一個作業系統有更明確的方向。

我給自己打 8 分。

所見所聞所感

其實我必須承認,大概到第 8 週的時候我就沒有很投入了。因為我之前在看教材的時候,發現有很多 DSA 的概念我都不懂。這讓我發現在搞懂作業系統之前,必須要先補足比如優先權佇列, 紅黑樹旋轉等後面的 DSA 知識。因此,我中間有很镸一段時間在學 DSA ,並開始刷 Leetcode 跟打 codeforces 的比賽 (還刷到綠色…帳號在這裡),快要期末的時候才開始碰作業系統跟排程器。也因此,我很晚才開始進行專題,導致完整度不高。

此外,在這之前,我沒有任何與別的軟體工程師共事或討論的經驗。但透過這堂課,我至少開始有做投入和貢獻,尤其是課程教材(見第一部份),雖然都不大,但至少開始跟老師與別的同學有所互動,探討排程器的議題。

最後,我也藉由這堂課確立我以後想要做的事。 我把資訊領域分成三大類: 作業系統, 網路, 以及人工智慧。而我發現在 AI 的領域實在太過競爭。太多比我強,成績比我好的人在裡面還沒有表現空間。如果我想要在這方面佔有一席之地,那就必須往底層走,並結合我本科系學到的知識(比如往太空產業的嵌入式系統發展)。

所以,雖然與大部分資訊系同學相比沒什麼,但我真的覺得,我比剛進來修這們課的時候強了非常多(一開始連 lab0 都沒寫)。我給自己 9 分。

幾何平均計算

GEOMEAN = (5 * 8 * 6 * 8 * 9) ^ (1/5) ~ 7.039

由於我對 Linux, glibc, gcc 等沒有 non-trivial 的貢獻,因此只能採取方案 B。

總分 = 1 + floor(GEOMEAN) = 1 + floor(7.039) = 8