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

版本 9c0006ab252599b1726e993729eb8540e77db610

User/YangYeh-PD

Changes from 9c0006ab252599b1726e993729eb8540e77db610 to a6dd541091db0d62b84dde45d6f8e87f8a31efc8

---
title: YangYeh-PD (葉振揚)
categories: User
...

# 個人簡介
# 個人簡介與背景
* 姓名: 葉振揚
* 國立成功大學 物理學系 113 級 (2019 ~ 2023)

* GitHub: [`YangYeh-PD`](https://github.com/YangYeh-PD)
* HackMD: [`YangYeh`](https://hackmd.io/@YangYeh)

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

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

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

# 成果發表與貢獻
我其實在前六週的作業中,想嘗試對 Linux 當中的 [`lib/math/int_sqrt.c`](https://github.com/torvalds/linux/blob/master/lib/math/int_sqrt.c) 做出改善效能的貢獻。

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

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

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

* [錯誤更正碼介紹和實作考量](https://hackmd.io/2xkLnKGIRt-bZokpCyAgTw) - 改良某處數學式的表達。
* [你所不知道的 C 語言 : bitwise 操作](https://hackmd.io/WxAJUeZKQMuKk5IV9yBlqg#) - 修正原先**算術位移**的錯誤描述,並引入 C99 規格書佐證。

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

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

* [2024q1 Homework1 (lab0)](https://hackmd.io/@YangYeh/linux2024-homework1)
* [2024q1 Homework2 (quiz1+2)](https://hackmd.io/@YangYeh/linux2024-homework2)
* [2024q1 Homework4 (quiz3+4)](https://hackmd.io/@YangYeh/linux2024-homework4)

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

# 期末專題
(待完成)
* [Linux 排程器研究](https://hackmd.io/@sysprog/HyFog6kw0)

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

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

# 與受課教師的互動

課程問答紀錄

* [2024-05-07,14,18](https://hackmd.io/@sysprog/r18CGUwMR)

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

一對一討論時間

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

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

我給自己打 **8** 分。

# 所見所聞所感
(待完成)

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

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

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

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

# 幾何平均計算
GEOMEAN = (5 * 8 * ? * 8 * ?) ^ (1/5)
GEOMEAN = (5 * 8 * 6 * 8 * 9) ^ (1/5) ~ 7.039

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

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