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

版本 28023556778c859726932eaf887537fb803f5390

User/weiso131

Changes from 28023556778c859726932eaf887537fb803f5390 to current

---
title: weiso131 (許育瑋)
categories: Usesr
---
# 簡介
- 國立成功大學 資訊工程學系 116 級
- Github: [`weiso131`](https://github.com/weiso131)
- HackMD: [`weiso131`](https://hackmd.io/@weiso131)

# 2025 Linux 核心設計 春季班 自我評量
## 成果發表與貢獻
5 分。

- Concurrency Primer
  - 2025/6/11 [Note -latomic needed when using -mcx16](https://github.com/sysprog21/concurrency-primer/commit/f35f10856741fd0d3168a970cbee91542385145f)
  - 2025/6/11 [Fix function name in book: thread_pool_destroy](https://github.com/sysprog21/concurrency-primer/commit/1a4d1f78c69855cdb622edebe1f180f55069c918)
- 對課程使用的專案貢獻
  - ksort
    - 2025/3/23 [Fix uninitialized variable in error path](https://github.com/sysprog21/ksort/pull/6)
- 課程教材
  - 並行程式設計: Atomics 操作
     - 2025/5/8 `arm64` 得機器 → `arm64` 得機器
     - 2025/5/8 `arm64` 得機器 → `arm64` 的機器
     - 2025/5/8 進進行 → 進行

## 作業/隨堂測驗
9 分。

- [2025q1 Homework1 (lab0)](https://hackmd.io/@weiso131/linux2025-homework1)
- [2025q1 Homework1 (ideas)](https://hackmd.io/@weiso131/linux2025-ideas)
- [2025q1 Homework2 (quiz1+2)](https://hackmd.io/@weiso131/linux2025-homework2)
- [2025q1 Homework3 (kxo)](https://hackmd.io/@weiso131/linux2025-homework3)
- [2025q1 Homework4 (quiz3+4)](https://hackmd.io/@weiso131/linux2025-homework4)
- [2025q1 Homework5 (assessment)](https://hackmd.io/@weiso131/linux2025-homework5)

作業重點回顧:

- lab0
  - 理解 list_sort 程式實作
    - 利用 perf 比較與自身實作的效能差異
    - 理解 final_merge 會更快的原因為: 藉由減少節點存取來減少 cache miss
    - 有趣的收穫 : 在 list_sort.c 發現 likely 可以控制分支預測,在計算機組織學到 control hazard 後理解其意義
  - 參考 list_sort 最後再把鍊結串列恢復成雙向的方法,將原本的 q_merge 做改進,使其能夠支援任意長度佇列的合併
- hw2
  - [實作自己的 memory allocator](https://github.com/weiso131/Customize_allocator)
  - [理解整數開根號的實作原理](https://hackmd.io/p6i9MFQ3RiW3PxDsagfAWw#sqrti) 
- hw3 的 kxo 
  - 實現 ctrl + Q 顯示對亦歷史紀錄
    - 利用鍊結串列儲存對亦資料
    - 自訂 ioctl ,確保多個 terminal 都能正確的取得對亦紀錄

## 期末專題
9 分。

[Linux 核心專題: 改進 kxo](https://hackmd.io/XWDjMx0bTmmNIWvlNHsvKw?both)

專題實現項目:

- 允許核心模組切換多種演算法,並整合 ttt 的 reinforcement_learning
  - 利用過去學過的 Q learning 演算法相關知識,更快的理解 TD learning 的實作,並將 reinforcement_learning 整合到此專案
- 縮減使用者和核心空間通訊的成本
  - 探討各種可能實作所需傳遞的 bytes 數量大小,並討論壓縮空間所需要的額外維護工作是否值得
- 改進棋盤展現的方式,並修訂核心通訊介面
  - 實現 write 支援使用者端棋盤控制
  - 實現 get_user_id 這個 ioctl 來在核心模組建立新的使用者並取得它在對應 tid 下的 user_id,此外,可藉由 bit_mask 指定使用的模式,實現使用者端切換 AI 演算法
- 支援多使用者並強化安全機制
  - 利用 current 這個 task_struct ,得知正在互動的執行緒的 id ,使其確保不同執行緒不會互相干擾
  - 了解 workqueue, kfifo, tasklet, wait_queue 的機制與使用要求,將這些知識應用於多使用者相關資料結構、流程的設計
- 理解何謂 lock-free
  - 釐清 lock-free 與 lock-less 的差異
  - 探討多使用者目前實作是否有可能在調整資料結構的使用後,達到 lock-free
- 在不犧牲棋力的前提,降低 CPU 使用率
  - 利用對 workqueue 的理解,使用 WQ_CPU_INTENSIVE 這個 flag ,確保 worker_pool 的其他工作不會被阻擋

觀摩其他同學的專題:

- [Linux 核心專題: 輕量級容器實作和擴充](https://hackmd.io/elX0ZH57S6CQIEdmsfGPBQ?view)
- [Linux 核心專題: 雲端檔案系統設計和實作](https://hackmd.io/G-5gwxcGSuKYBOt5tiomJQ?view)
- [Linux 核心專題: 重作 kxo (執行人: HeLunWu0317)](https://hackmd.io/@sysprog/r1hGKNN4lx)
- [Linux 核心專題: 重作 kxo (執行人: thwuedwin)](https://hackmd.io/@sysprog/Sk-tf74Ell)
- [Linux 核心專題: bitops 相關測驗題](https://hackmd.io/@sysprog/B13UVSQWel)

## 與授課教師的互動
9 分。

課堂問答:

- [2025-04-29 問答簡記](https://hackmd.io/Tcy6NPtnQiubDGyrRUnSdw#weiso131)
  - 討論 kxo
    - 課堂中發現 commit message 沒有提及如何重現,事後發現其實有寫在 commit message 中,只是 a keyboard event 似乎沒有 Ctrl + P 來的明確,之後使用 git rebase 修改 commit message
    - 探討如何讓一般使用者有權限執行 xo-user ,在專題藉由將 devnode 的 mode 設定為 0666 ,並移除對 sysfs 的依賴,實現了全域可讀可寫
    - 探討如何支援多使用者,在課堂簡記中提出簡單的想法,最後在專題中實現它
- [2025-06-10/17/24 問答簡記](https://hackmd.io/4UVPLWFgQ92AlG3N76dFKA#weiso131)
  探討如何利用 CAS 與 futex 機制實現簡單的 mutex_lock ,在課後實現了可行的 mutex_lock
  - 探討如何利用 CAS 與 futex 機制實現簡單的 mutex_lock ,在課後實現了可行的 mutex_lock

一對一討論:

- 5/7
  - 考量我對核心模組的興趣,加上 [2025-04-29 問答簡記](https://hackmd.io/Tcy6NPtnQiubDGyrRUnSdw#weiso131) 對 kxo 支援多使用者的想法,老師將我的專題安排為改進 kxo ,並要求我把可能的改進項目列出來。

## 所見所聞所感
## 自我評量
9分。

- 大二來修課,缺乏作業系統與計算機組織知識
  - 閱讀 Demystifying the Linux CPU Scheduler 補充作業系統的知識
  - 閱讀教材,發現其中內容可以跟計算機組織剛學的內容呼應,例如 memory barrier 負責處理指令重排的問題,第一次看的時候不太能理解為什麼,在學過 hazard 之後,能理解為了避免 hazard 帶來的延遲,編譯器/CPU 可能做指令重排
- Concurrency Primer
  - 理解何為 lock-free 與其追求
  - 了解 atomic 的特性,並且運用 RMW
- 理解為什麼不要急著編譯執行
  - 在寫 kxo 的時候我切身感受到這點,如果沒有思考清楚就執行,電腦可能就會因此當機,因此在執行前,就應該盡可能確保程式的正確性。
- 理解為什麼不要憑感覺寫程式
  - 老師要求我們不要憑感覺寫程式,要盡可能先查閱第一手資料,在查看 workqueue 的文件之前,我以為 kxo 上的 workqueue 是一個先進先出的結構,然而事實並非如此
  ,若我沒有查閱相關文件就開始實作 kxo 的多使用者功能,可能會因為不正確的假設導致出現奇怪的結果

閱讀《因為自動飲料機而延畢的那一年》之後,讓我更加慶幸自己當初選擇了資訊工程系。撰寫程式最大的優勢之一,就是能夠迅速獲得回饋,立即發現錯誤並加以修正。相比之下,處理硬體問題往往需要以天為單位等待結果,調整流程也更加費時。然而,現實世界中的應用往往不只限於純軟體開發,而是與各種領域密切交織。有些領域本身就具備長回饋週期,這是無法避免的。因此,除了持續鞏固自己的專業能力之外,更要學會與其他領域的專家有效合作與溝通,這對於實際解決跨領域問題至關重要。

大一的時候,我曾嘗試投入機器學習領域,花了很多時間學習各種工具與套件,雖然能跑出結果,但對底層原理始終不夠理解。真正遇到問題時,不知道該如何調整參數,也難以掌握資料本身的特性。後來我意識到,單純依賴現成工具,很難真正累積知識與經驗,尤其當每一筆資料都牽涉到不同的領域背景時,這樣的嘗試往往無法持久。到最後,我甚至開始懷疑,自己是否只是陷入了工具的迷宮,而不是朝著一個清晰的方向前進。

相較之下,這門課雖然涉及的主題多是資工系必修內容的延伸,卻更強調對細節的掌握、系統層次的理解,以及與現實需求的連結。從一開始補足 C 語言中容易被忽略的細節,到後來實際設計核心模組、理解排程與並行的複雜性,每一步都紮實地挑戰我對電腦系統的認識,也讓我感受到電腦科學紮實而有深度的一面。


## 自我評量 (1 ~ 10):
$GEOMEAN = ( 5 \times 9 \times 9 \times 9 \times 9 )^{1/5} = 8.001805825$

方案 B :$1 + floor(GEOMEAN) = 1 + 8 = 9$