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

版本 b75665aefcc9a3f4c3408408e42676506f1011fc

User/SmallHanley

Changes from b75665aefcc9a3f4c3408408e42676506f1011fc to 752d0a41f5543ad9eb3a25b8dae1a87b80c56073

---
title: SmallHanley (林霆寬)
categories: User
...

# 簡介
* 國立成功大學 資訊工程學系 111 級 (2018 ~ 2022)

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

## 成果發表

## Linux 核心和相關專案貢獻
* 優化 [lab0-c](https://github.com/sysprog21/lab0-c):[commit 17f36bf](https://github.com/sysprog21/lab0-c/pull/63/commits/17f36bf53ac0616eb723922af841d3f72e7bf3e3), [commit b986710](https://github.com/sysprog21/lab0-c/pull/68/commits/b98671012d3cc6cab894b07ebc59850fe09554d5)
* NCKU Wiki linux/schedule 教材錯誤修正
* 《Demystifying the Linux CPU Scheduler》[修改討論](https://hackmd.io/@SmallHanley/SJEQH6pd5)

# 2022 Linux 核心設計 春季班 自我評量
## 作業共筆

* lab0-c: [HackMD](https://hackmd.io/@SmallHanley/linux2022-lab0) / [GitHub](https://github.com/SmallHanley/lab0-c)
* fibdrv: [HackMD](https://hackmd.io/@SmallHanley/linux2022-fibdrv) / [GitHub](https://github.com/SmallHanley/fibdrv)
* ktcp: [HackMD](https://hackmd.io/@SmallHanley/linux2022-ktcp)

## 測驗共筆

* quiz1: [HackMD](https://hackmd.io/@SmallHanley/linux2022-quiz1)
* quiz2: [HackMD](https://hackmd.io/@SmallHanley/linux2022-quiz2)
* quiz4: [HackMD](https://hackmd.io/@SmallHanley/linux2022-quiz4)

## 期末專題

* BMQ 排程器研究: [HackMD](https://hackmd.io/@SmallHanley/linux2022-projects)

## 修課心得

這門課是我修過難度第二高的課,難度最高必須給到 [2021 年暑期「Linux 核心」課程](https://hackmd.io/@sysprog/linux2021-summer)。每週需要投入至少 16 小時的時間 (後來發現要吸收課程內容,16 小時遠遠不夠)。這門課除了學習到課程教材以及相關議題探討,也學習到 trace code 的技巧和開發紀錄的撰寫。程式從剛開學的一百行規模,到期末專題的上萬行規模,甚至 linux 核心上千萬行的規模,光要理解程式運作原理就不是一件容易的事,看半天很可能只是在意淫程式碼。只是理解程式運作原理也不夠,需要理解其中的設計哲學、理論,甚至修改、實驗,並且指出實作缺陷 (修完這門課我還沒辦法完整做到,要探討更深就需要更多背景知識)。而開發紀錄撰寫方面,我學期初寫得不好,後來想要準備面試相關資料時,我問自己要怎麼說服 interviewer 我做過事情 (不一定能做出像樣的作品),發現只有詳細紀錄開發過程才有說服力。因此學期後半我有注重開發紀錄的撰寫,往後的開發我也要保持這個習慣。

學期間,因為 quiz4 延伸問題和期末專題需求,閱讀老師撰寫的《Demystifying the Linux CPU Scheduler》(我只有閱讀前三章和一部分四、五章),對我幫助很大,因為 linux 核心的文件寫得比較簡潔,很多變數命名剛接觸時也無法想像其功用,老師整理的書籍可以幫助我了解排程器發展歷史,以及相關背景知識、資料結構、函式功能等等。過程中也有發現一些沒寫好的部份,有跟老師討論。

## 自我評量 (1 ~ 10)

我給自己 7 分。

在修這門課程以前,有聽過老師開設的 [2021 年暑期「Linux 核心」課程](https://hackmd.io/@sysprog/linux2021-summer),該課程只用六週就上完一整個學期的份量,每次上課都會提到很多東西,特別是 HackMD 共筆,連結點一點,點不完。這學期初選修這門課時,知道自己很可能無法吸收全部課程內容,不過因為還是學生,有較多時間深入研究,所以給自己定個一週投入 20 小時的目標,並且從中選幾個有興趣的議題研究。可惜學期中後段投入時間不足,每週只投入 10 ~ 15 小時。

學期間還是有學到東西。quiz1 探討 hash function 議題,借閱 TAOCP 來看,了解 collision 和 cache locality 間的取捨。lab0-c 搭配 git log 和核心程式,比較 linux sort 不同版本間 compare 次數的差異。quiz2 研究 branchless 程式,發現過去 linux 有一個 `int2float()` 函式,利用 `ror32()` 函式,透過 bitwise operation 讓編譯器生成 rotate 系列指令,並且巧妙達成 branchless。quiz4 與期末專題接觸一系列排程器以及學習效能分析方式。