---
title: 2021 年春季 Linux 核心設計課程期末專題
image:
description: 「Linux 核心設計」課程期末專題清單
---
# 2021 年春季 [Linux 核心設計](http://wiki.csie.ncku.edu.tw/linux/schedule)課程期末專題
###### tags: `linux2021`
:::info
:information_source: 注意事項
1. 所有專案都該確保在 Linux v5.4+ 運作
2. 所謂的「彙整」,是指能撰寫出完整的技術報告,範例: [位元運算整理](https://hackmd.io/@0xff07/BTS) 和 [基於 C 語言標準研究與系統程式安全議題](https://hackmd.io/@sysprog/c-std-security)
3. 專題不僅是課程評分的依據,而且是自己專業的證明,日後可列於個人簡歷
4. 請及早向[授課教師](https://www.facebook.com/JservFans)預約一對一討論,得知專題進行的方式
:::
## LittleFS
Arm Mbed 作業系統有個子項目名為 [littlefs](https://github.com/littlefs-project/littlefs),顧名思義就是針對嵌入式裝置開發的小型檔案系統,我們可透過 [FUSE](https://www.kernel.org/doc/html/latest/filesystems/fuse.html) 掛載到 Linux 或 macOS 作為檔案系統,卻不用撰寫對應的核心模組。本任務嘗試理解 [littlefs](https://github.com/littlefs-project/littlefs) 運作機制,包含其工具。
相關討論:
* [littlefs-fuse](https://www.facebook.com/groups/system.software2020/permalink/326283654972507/)
> 執行人: bobhsiao0306
## simplefs
> 題目: 從無到有開發針對 Linux 核心的檔案系統
為了探索 Linux VFS (virtual file system) 介面及檔案系統實作機制,我們從無到有撰寫一個運作於 Linux 核心模式中的精簡檔案系統,原始程式碼約一千餘行,支援基本的檔案和目錄處理,同時也考慮到權限和並行處理的議題。
相關討論:
* [simplefs](https://www.facebook.com/groups/system.software2020/permalink/330569901210549/)
> 執行人: Nahemah1022 $\to$ [開發紀錄](https://hackmd.io/@Nahemah1022/rJo1sAtid)
> 執行人: fwfly $\to$ [開發紀錄](https://hackmd.io/@fwfly/simplefs)
## usbip
以 USB/IP 來說,這個實作已整合進 Linux 核心,能夠將 USB 裝置透過網路連線重新導向到另外一台電腦,具體來說:
* USB 裝置實際所在的電腦稱為 server (伺服器),接收重導那台稱為 client(客戶端;
* client 端可搭配 udev 和相關的工具,接受裝置重新導向後,自動掛載 server 端的 USB 裝置;
這樣的情境在虛擬化環境變得重要,因為一台伺服器可提供遠端桌面所需要資源,但是 USB 裝置往往就需要適度分享,於是透過 USB/IP 可讓遠端裝置分享變得可行。
相關討論:
* [usbip](https://www.facebook.com/groups/system.software2020/permalink/331069264493946/)
## vcam
> 題目: 打造 Linux 虛擬攝影機裝置驅動程式
vcam 是個針對 Linux 核心開發的虛擬攝影機裝置,全部程式碼僅 1 千 5 百行,從而可理解 V4L2 (video fro Linux APIs, version 2) 的使用和 Linux 多媒體架構。開發一個虛擬的攝影機裝置除了理解 Linux 核心設計外,也有資訊安全的幫助,例如你可以安插相關程式碼,紀錄有哪些應用程式偷偷啟動攝影機,但過程中又不會揭露真正的隱私。本議程不僅討論 V4L2,也涵蓋 DMA-Buf 這樣著重 Zero-copy 裝置驅動程式運作機制。
相關討論:
* [vcam](https://www.facebook.com/groups/system.software2020/permalink/332852434315629/)
* [2020 年開發紀錄](https://hackmd.io/@eecheng/B16rQ3GjU) / [GitHub](https://github.com/eecheng87/vcam)
> 執行人:WayneLin1992 $\to$ [開發紀錄](https://hackmd.io/@WayneLin1992/HkDBmLUDO) / [GitHub](https://github.com/WayneLin1992/vcam)
## `/dev/mem` 研究
編撰 [Linux 核心的 /dev/mem 裝置](https://hackmd.io/@sysprog/linux-mem-device),強化 eBPF, crash 等工具的運用,目標是「成為電腦的主人」 —— 想改哪段記憶體就動手變更
> 執行人: jhan1998 $\to$ [開發紀錄](https://hackmd.io/@jhan1998/Hk61Y4dd_)
## Linux 排程器研究
研讀 "Trace Linux Kernel Scheduler Events" 並擴充
> 執行人: RZHuangJeff $\to$ [開發紀錄](https://hackmd.io/@Forward1105/reading-digest)
> 執行人: henrybear327
## Linux 核心 CoW 研究
探討 Linux 核心內部 CoW 的實作機制
> 執行人: linD026 $\to$ [開發紀錄](https://hackmd.io/@linD026/Linux-kernel-COW-content)
## 改進 [mimalloc](https://github.com/microsoft/mimalloc)
[mimalloc](https://github.com/microsoft/mimalloc) 是 Microsoft Research 主導的開放原始碼專案,旨在提出更輕量且更有效率的記憶體管理器 (即 malloc/free 等函式) 的實作。
* [mimalloc 實作機制和改善](https://hackmd.io/@jserv/BynrpV0eB)
* [Brief History of Free List Sharding](https://hackmd.io/@hPMCWajOS-ORQdEEAQ04-w/HJbeisVNB)
* [IsoAlloc Performance](https://github.com/struct/isoalloc/blob/master/PERFORMANCE.md)
> 執行人: hankluo6 $\to$ [開發紀錄](https://hackmd.io/@hankluo6/mimalloc)
## High performance Web Server
> 題目: 高效能網頁伺服器 —— 針對 Linux 核心和進階系統呼叫重新設計
探討從無到有打造 Linux 平台的高效能網頁伺服器,涵蓋是否該將伺服器實作於 Linux 核心內部、並行處理、I/O 模型、epoll、React pattern,和 Web 伺服器在事件驅動架構的考量。
* [sehttpd 說明](https://hackmd.io/@sysprog/linux2020-sehttpd)
* [sysprog21/timeout](https://github.com/sysprog21/timeout): Tickless Hierarchical Timing Wheel
* [2020 年開發紀錄](https://hackmd.io/@jwang0306/final-project) / [GitHub](https://hackmd.io/@jwang0306/sehttpd)
> 執行人: D4nnyLee, XDEv11 $\to$ [開發紀錄](https://hackmd.io/@XDEv11/sehttpd-project)
## quiz2A - list
重做 [第 2 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz2) 的第 1 部分,並彙整學員們的作業成果,提出效率更好的實作。
> 執行人: shanihsu $\to$ [開發紀錄](https://hackmd.io/@shani/r16CJIjXu)
> 執行人: kevinlin529
## slab
[第 2 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz2) 的第 2 部分提到 [slab allocator](https://en.wikipedia.org/wiki/Slab_allocation),請彙整學員們的作業成果,並整理為新的共筆,新增工作:
1. 回顧 [Linux 核心設計: 記憶體管理](https://hackmd.io/@sysprog/linux-memory),理解必要的背景知識
2. 針對 Linux `v5.20`,在 [User-Mode Linux](https://hackmd.io/@sysprog/user-mode-linux-env) 進行觀察
3. 透過 QEMU 建立模擬環境,載入 Linux `v5.20` 並善用 [SlabDbg](https://github.com/Kyle-Kyle/slabdbg) 追蹤 slab/slub 的內部行為
> 執行人: gyes00205 $\to$ [開發紀錄](https://hackmd.io/@gyes00205/2021q1_slab)
## quiz2C - bitcpy
重做 [第 2 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz2) 的第 3 部分,並彙整學員們的作業成果,提出效率更好的實作,也該探討 Linux 核心原始程式碼裡頭的案例
> 執行人: Jings1017 $\to$ [開發紀錄](https://hackmd.io/@jingsian27/B1dJXWTwu)
> 執行人: IzsKon
## quiz2D - string interning
重做 [第 2 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz2) 的第 4 部分,並彙整學員們的作業成果,提出效率更好的實作,需要考慮到多執行緒環境
> 執行人: Zxiro $\to$ [開發紀錄](https://hackmd.io/@Zxiro/rk4qw64s_)
> 執行人: William0715
## fibdrv
重做 [fibdrv](https://hackmd.io/@sysprog/linux2021-fibdrv) 並彙整學員們的作業成果
> 執行人: yellow-hank $\to$ [開發紀錄](https://hackmd.io/@yellow-hank/fibdriv_project) / [GitHub](https://github.com/yellow-hank/fibdrv)
> 執行人: xxiex123 $\to$ [開發記錄](https://hackmd.io/@yangyang128/SJibwya5u)
## quiz3 - SSO/CoW
重做 [第 3 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz3),並彙整學員們的作業成果,提出效率更好的實作,也該探討 Linux 核心原始程式碼裡頭的案例
> 執行人: yellow951321 $\to$ [開發紀錄](https://hackmd.io/@FO-ksXTRQDSs5Cgb_m3_Ew/rJV2n9Q3_)
## quiz4 - thread pool
重做 [第 4 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz4),並彙整學員們的作業成果,提出效率更好的實作。應當考慮到 [CPU Affinity](https://www.linuxjournal.com/article/6799),參考 [Thread safety with affine thread pools](https://bartoszsypytkowski.com/thread-safety-with-affine-thread-pools/)
> 執行人: iLeafy11
> 執行人: xswzaq44321
:::spoiler
暫停: 重做 [sort](https://hackmd.io/@sysprog/linux2021-sort) 並彙整學員們的作業成果,提出效率更好的實作,需要在 Linux 核心內部驗證
> 執行人: Uduru0522, ccs100203
:::
## Concurrent Programming
研究 [第 14 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz14) (第 1 部分) 和 [第 17 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz17),解讀程式運作機制、量化程式執行表現 (與 lock-based 比較),提出改進方案
執行人: Uduru0522, ccs100203 $\to$ [開發紀錄](https://hackmd.io/@cccccs100203/linux2021-project)
## quiz5A - SSO
重做 [第 5 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz5) 的第 1 部分,並彙整學員們的作業成果,提出效率更好的實作
> 執行人: andy78644 $\to$ [開發紀錄](https://hackmd.io/@JkowjMiFT6uOXNQsa1JgJA/BJvqcrBOd)
> 執行人: richard880523
## kHTTPd
改寫 [kHTTPd](https://hackmd.io/@sysprog/linux2020-khttpd),使用 [CMWQ](https://www.kernel.org/doc/html/latest/core-api/workqueue.html),並支援以下特徵:
1. 學習 [kws](https://github.com/kaiyuanl/kws) 的核心參數風格,指定 port, worker, wwwroot 等設定
2. 實作 HTTP request cache
3. 部分 HTTP 1.1
> 執行人: ParkerMactavish
> 執行人: bakudr18 $\to$ [開發紀錄](https://hackmd.io/@MR-9Qa9wQLWglSAUyd6UhQ/SkFA8Favu)
## quiz6A - arbitrary-precision arithmetic
重做 [第 6 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz6) 的第 1 部分,並彙整學員們的作業成果,提出效率更好的實作,需要探討 Linux 核心的大數運算案例
> 執行人: tigger12613 $\to$ [開發紀錄](https://hackmd.io/@tigger12613/SkFBWcHhu) / [GitHub](https://github.com/tigger12613/arbitrary-precision-arithmetic)
## quiz6B - hash table
重做 [第 6 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz6) 的第 2 部分,並彙整學員們的作業成果,提出效率更好的實作,需要探討 Linux 核心的案例
> 執行人: Chialiang86 $\to$ [開發紀錄](https://hackmd.io/@ChialiangKuo/quiz6B-hash-table) / [Github](https://github.com/Chialiang86/Hash-Table-C)
## quiz6C - fiber
重做 [第 6 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz6) 的第 3 部分,並彙整學員們的作業成果
> 執行人: nickchenchj $\to$ [開發紀錄](https://hackmd.io/@nickchenchj/linux2021-quiz6c) / [GitHub](https://github.com/nickchenchj/ncku-linux-kernal-internals/tree/main/quiz6c)
## quiz7A - shell
重做 [第 7 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz7) 的第 1 部分,包含延伸問題
> 執行人: limaoxd [開發紀錄](https://hackmd.io/@limaoxd/B1BINgL2_) / [GitHub](https://github.com/limaoxd/quiz-7A)
> 執行人: robertlin0401 $\to$ [開發紀錄](https://hackmd.io/@robertlin0401/2021q1-Final-Project) / [GitHub](https://github.com/robertlin0401/Linux-Kernel-Internals-quiz7)
## quiz7B - multi-threaded web server
重做 [第 7 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz7) 的第 2 部分,包含延伸問題
> 執行人: secminhr $\to$ [開發紀錄](https://hackmd.io/@secminhr/quiz7B) / [Github](https://github.com/secminhr/quiz7B)
## quiz7C - SPSC
重做 [第 7 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz7) 的第 3 部分,包含延伸問題
> 執行人: chiehen $\to$ [開發紀錄](https://hackmd.io/@Chiehen/quiz7c) / [GitHub](https://github.com/chiehen/linux2021-quiz7C)
## quiz7D - message bus
重做 [第 7 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz7) 的第 4 部分,包含延伸問題
> 執行人: wiasliaw $\to$ [開發紀錄](https://hackmd.io/@wiasliaw/SyRPYuPuO) / [GitHub](https://github.com/wiasliaw/mbus-c)
## quiz8A - SPMC
重做 [第 8 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz8) 的第 1 部分,包含延伸問題
> 執行人: cyrong $\to$ [開發紀錄](https://hackmd.io/@codelelouch0/SyX7P8AdO)
## quiz8B - MapReduce
重做 [第 8 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz8) 的第 2 部分,包含延伸問題
> 執行人: ilkclord $\to$ [開發紀錄](https://hackmd.io/@ilkclord/Hkt-7TvtO)
## quiz9 - MPMC
重做 [第 9 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz9),包含延伸問題
> 執行人: AmyLin0210
## quiz10 - channel
重做 [第 10 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz10),包含延伸問題
> 執行人: ambersun1234 $\to$ [開發紀錄](https://hackmd.io/@ambersun1234/2021linux_final)
## quiz11 - event loop
重做 [第 11 週測驗題](https://hackmd.io/@sysprog/linux2021-quiz11),包含延伸問題
> 執行人: Julian-Chu $\to$ [開發紀錄](https://hackmd.io/@Julian-Chu/2021q1-quiz11)
## 開放原始碼生態研究
重做 [culture](https://hackmd.io/@sysprog/linux2021-culture),並彙整學員們的作業成果
> 執行人: sherisea $\to$ [開發紀錄](https://hackmd.io/@sherisea/開放原始碼生態研究)
## Real-Time Linux 研究
研究 [xenomai](https://source.denx.de/Xenomai/xenomai/-/wikis/home) 於 real time linux 上的效能表現
> 執行人: RainbowEye0486, fdfdd12345628 $\to$ [開發紀錄](https://hackmd.io/@RainbowEye0486/H1_G1Lhvu)