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

版本 8b45dc8f0426c26ad0a0ddacd916b6467f2b530f

User/Shiang1212

Changes from 8b45dc8f0426c26ad0a0ddacd916b6467f2b530f to b83f63211892929a82c26b08dfd0884b28b72d5a

---
title: Shiang1212 (薛翔宇)
categories: User
...

# 簡介
* 國立成功大學 資訊工程研究所
* GitHub:[Shiang1212](https://github.com/Shiang1212)
* HackMD:[Shiang1212](https://hackmd.io/@Shiang1212)

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

## 成果發表和貢獻
評分: 4

* 並行程式設計:Hazard pointer:修復〈Lock-Free Data Structures with Hazard Pointers〉論文連結

這堂課的名稱叫做 Linux 核心實作,修課期間沒有對 Linux 核心做出貢獻本身就是件令人遺憾的事,但學期結束不代表學習結束,只有持續接受新知,才能在未來對 Linux 核心乃至這個世界有所貢獻。

## 作業
評分:5

* homework1 & 3:[Github](https://github.com/Shiang1212/lab0-c) / [HackMD](https://hackmd.io/@Shiang1212/BJa00MInp)
    * 透過雙向鏈結串列的實作,強化指標的運用,以及學習 github 的操作 
* homework2:[HackMD](https://hackmd.io/@Shiang1212/rJiKiOvTp)
    * 加強對資料結構與 bit-wise 操作的理解
* homework4:[HackMD](https://hackmd.io/@Shiang1212/ryp4HVK1C)
    * 強化 bit-wise 操作
* homework5:[HackMD](https://hackmd.io/@Shiang1212/rkGfKjwlA)
    * 閱讀[因為自動飲料機而延畢的那一年](https://blog.opasschang.com/the-story-of-auto-beverage-machine-1/),並記錄閱讀教材時產生的疑問

本學期的作業進度落後,很多老師要求完成的項目沒有達成,但從一開始為了趕上進度而盲目參考其他同學的筆記,到現在能好好閱讀程式碼並組織自己的語言,我想我又比當初的我進步了一點。

## 期末專題
評分: 8

* Linux 期末專題-並行佇列設計和實作:[HackMD](https://hackmd.io/@sysprog/S1bpKK3LC)

    * 專題內容是重作[第十週測驗](https://hackmd.io/@sysprog/linux2024-quiz10)測驗二,了解 hazard pointer 於 lock-free queue 的實作,並改用 RCU 同步機制重新實作,最後探討兩者的執行效益,嘗試提出改進方案,藉此體會 Linux 核心相關的設計考量。

以前對於並行程式設計,只知道 OS 教的 mutex lock、semaphore 等等,對其實作也是知其然而不知所以然。在這次的專題中,我第一次接觸到並行設計的程式碼,也透過這個機會讓我增廣見聞,我從中學到:

* Hazard pointer 實作以及閱讀相關論文並提出改善方案
* 透過閱讀 URCU 相關文件並實作
* 使用 ThreadSanitizer 檢測並行程式是否存在 data race
* 使用 Valgrind 的 massif 工具分析程式的記憶體使用情況

提問紀錄:

(待完成)
* [Linux 核心專題: 並行程式設計](https://hackmd.io/lpNYFc8fS7-9LSXWXZGD4Q)
* [Linux 核心專題: 重作第 10 和第 12 週測驗題](https://hackmd.io/@sysprog/SJXN0y9UR)
* [Linux 核心專題: 並行的環狀雙向鏈結串列](https://hackmd.io/@sysprog/rk4C6djLR)
* [Linux 核心專題: 並行化的 Redis 實作](https://hackmd.io/WcW-q-n4QwSOfPK4YRT8Mw)
* [Linux 核心專題: RCU 實作](https://hackmd.io/2Jv0y1OpRgG0IdlcBD9Snw)

## 與授課教師的互動
評分:9

* 2024/05/18 (六) 下午4:00-4:30:一對一討論
    * 討論期末專題:在與老師討論期末專題前,我正好讀到 [Linux 核心設計: 淺談同步機制](https://hackmd.io/@sysprog/linux-sync),此教材中提到 spinlock、semaphore、rwlock 等等同步機制,並搭配 Linux 核心的程式碼介紹。在閱讀此教材時,我一邊閱讀老師的教材,一邊翻看 Linux 的實作方式,理解這些同步機制的實作考量,這讓我有種好像真正觸摸到 Linux 核心的感覺,所以我在與老師一對一討論時,就提出我專題想做並行程式設計相關的研究。

* 2024/06/04 (二) 下午2:54:私訊老師的粉專
    * 請老師打開第十週測驗表單的權限。

* 2024/06/15 (一) 下午10:06:私訊老師的粉專
    * 請老師打開第 6、8、12、17 週測驗表單的權限。

## 所見所聞所感
評分:10

回首這學期的課程,我把我的學習內容總結成兩點:**強化曾經學習的知識**與**補齊尚未學習的知識**。

透過這次的課程,我意識到自己曾經學過的知識是多麼不堪一擊,一問就倒,即使大學修習過資料結構,準備研究所時也有再次複習,但在第一次 code review 中,對於 min-max  heap 的操作是一問三不知,就連 quicksort 的執行步驟也是想了一陣子才想起來。隨著課程進度,我也發現越來越多我曾經學過但沒學好的東西:在第一次作業重新學習 github 的使用並了解 commit message 的重要性,<[你所不知道的 C 語言:linked list 和非連續記憶體](https://hackmd.io/@sysprog/c-linked-list)> 讓我複習我本來就不熟悉的指標操作,<[Linux 核心設計:淺談同步機制](https://hackmd.io/@sysprog/linux-sync)> 讓我重新學習 mutex lock、semaphore 以及如何實作於 Linux 核心,幾乎能在每週的課程中找到自己過往學習成效不彰的證據。
透過這次的課程,我意識到自己曾經學過的知識是多麼不堪一擊,一問就倒,即使大學修習過資料結構,準備研究所時也有再次複習,但在第一次 code review 中,對於 min-max  heap 的操作是一問三不知,就連 quicksort 的執行步驟也是想了一陣子才想起來。隨著課程進度,我也發現越來越多我曾經學過但沒學好的東西:在第一次作業重新學習 github 的使用並了解 commit message 的重要性,<[你所不知道的 C 語言: linked list 和非連續記憶體](https://hackmd.io/@sysprog/c-linked-list)> 讓我複習我本來就不熟悉的指標操作,<[Linux 核心設計: 淺談同步機制](https://hackmd.io/@sysprog/linux-sync)> 讓我重新學習 mutex lock、semaphore 以及如何實作於 Linux 核心,幾乎能在每週的課程中找到自己過往學習成效不彰的證據。

除了既有的知識,我也學到很多從沒看過的東西,就以本次的專題為例,在修習這堂課之前我從來沒聽過 RCU,突然要我使用 RCU 進行實作,並搭配 Valgrind、ThreadSanitizer 等等工具進行程式的評估,對我來說實在是一大挑戰。這也讓我想起我曾經聽一位主管等級的人說過,碩士生與大學生最大的差別就是解決問題的能力,大學生傾向等待別人給答案,碩士生傾向自己理解問題並提出可能的解法。為此,我閱讀相關教材以及網路上的資料,嘗試進行實作,並聽取老師與同學的建議,積極改進尚有缺陷的地方。經過這次的課程,我想我也向我心中碩士生該有的樣子邁進了一步。

> 「你不能現在就放棄,要是現在就放棄的話,你這輩子日後遇到這種等級的困難,就只會想逃避而已。」

這句話給了我莫大的力量,在學期初,我抱持著我一定要在這堂課中好好精進自己的心態遞出加簽單,但隨著課程的深入,修課途中我也考慮過放棄,心態變成且戰且走、能學多少算多少的心態學習。直到第五次作業要求閱讀 <[因為自動飲料機而延畢的那一年](https://blog.opasschang.com/the-story-of-auto-beverage-machine-1/)>,我從中獲得不少勇氣,這份勇氣也支撐著我直到現在。

這堂課我獲益匪淺,很高興最後有撐到學期結束。

## 研究生學習回顧
評分:9

* 二月學習回顧發信:2024/03/07
    * 分享時間管理、作業進度落後、表達時詞不達意等等自身的問題。
* 三月學習回顧發信:2024/04/07
    * 分享閱讀 bit-wise、指標操作、浮點數運算教材的心得,其中浮點數運算提到的 BFloat16 讓我聯想到實驗室學長的論文:使用 BFloat16 改善聯邦學習的傳輸效率。最後我提出對實驗室研究方向的一些想法。
* 四月學習回顧發信:2024/05/13
    * 分享閱讀同步機制教材的心得,以及閱讀 Linux 程式碼帶給我的悸動。
* 五月學習回顧發信:2024/06/25
    * 分享專題方向以及研究時遇到了什麼問題,並簡短講述這一學期以來的學習心得。

> 「大部分的人一輩子洞察力不彰,原因之一是怕講錯被笑。想了一點點就不敢繼續也沒記錄或分享,時間都花在讀書查資料看別人怎麼想。看完就真的沒有自己的洞察了」

在課程結束前回頭看這幾個月發送的回顧信,發現大部分的回顧信都沒有什麼資訊工程相關的洞察,除了第三個月的回顧信有提到對於實驗室研究方向的一點想法,其他回顧信比較多是在描述我閱讀了什麼教材、學到了什麼知識,搞得有點像寫讀書心得或小作文,沒有辦法用我的所見所聞對實驗室有所貢獻。以後,我應該持續學習並保持敏銳,以應對這個瞬息萬變的資訊產業。

## 自我評量 (1 ~ 10)

$(4\times5\times8\times9\times10\times9)^{1/6} = 7.11$

使用方案 B 計分:$1 + floor(7.11) = 8$