---
title: 2023 年 Linux 核心設計/實作課程期末專題
description: 「Linux 核心設計/實作」課程期末專題清單
tags: linux2023
---
# 2023 年 [Linux 核心設計/實作](https://wiki.csie.ncku.edu.tw/linux/schedule)課程期末專題
:::info
:information_source: 注意事項
* 敬請瀏覽學員的成果,亦歡迎在下方「開發紀錄」中,留言提出您的疑惑和改進建議,學員會適度回覆,您的寶貴意見是我們成長的動力
$\to$ 請留言在每份開發紀錄的「提問清單」
* 下方主題對應的開發紀錄、原始程式碼、實驗資訊,和解說影片皆允許公眾存取,若您遇到存取上的困難,請發訊息給 **[授課教師](https://www.facebook.com/JservFans)**
:::
## Linux 核心同步機制研究
探討 Linux 核心的同步機制,並運用 Hazard Pointer 和 RCU 作為資源釋放機制
* 相關資訊
* [concurrent linked list](https://hackmd.io/@kdnvt/concurrent-ll-2022)
* [Revisit Multi-Reader Synchronizations for Scalable Applications](https://osslatam22.sched.com/event/15BsE): Open Source Summit Latin America 2022
* [OSSLA Records](https://hackmd.io/@cccccs100203/OSSLA2022-records)
* [So What Has RCU Done Lately?](https://hackmd.io/@cccccs100203/So-What-Has-RCU-Done-Lately)
* 執行人: Korin777 $\to$ [開發紀錄](https://hackmd.io/@sysprog/ry_6RHgS3)
## Linux 排程器研究
探討 Linux 排程器內部設計,改進《Demystifying the Linux CPU Scheduler》,並尋求貢獻程式碼到 Linux 核心的機會
* 相關資訊
* [Let's Publish a Collaborative e-Book for Linux Kernel](https://hackmd.io/LXD339QGRbaEBvESooItTg)
* [git commits](https://lore.kernel.org/all/?q=%22Jui-Tse+Huang%22)
* [BORE (Burst-Oriented Response Enhancer) CPU Scheduler](https://hackmd.io/@foxhoundsk/bore-sched),是 [CachyOS](https://cachyos.org/) 預設的 CPU 排程器
* [Reducing CPU scheduler latency in Linux](https://www.diva-portal.org/smash/get/diva2:1630380/FULLTEXT01.pdf)
* [Reducing latency spikes by tuning the CPU scheduler](https://www.scylladb.com/2016/06/10/read-latency-and-scylla-jmx-process/)
* [開發進度-1](https://hackmd.io/@steven1lung/scheduler_notes)
* [開發紀錄-2](https://hackmd.io/@SmallHanley/linux2022-projects)
* 執行人: linhoward0522 $\to$ [開發紀錄](https://hackmd.io/@sysprog/BJh9FdlS2)
* 執行人: chun61205 $\to$ [開發紀錄](https://hackmd.io/@sysprog/By-Q7reB3)
* 執行人: irenesu2000 $\to$ [開發紀錄](https://hackmd.io/@sysprog/rklkuZ2rh)
## vwifi 虛擬無線網路裝置驅動程式和實驗環境
[vwifi](https://github.com/sysprog21/vwifi) 是個程式碼約五百行,具體而微的 WiFi 裝置驅動程式,採用 cfg80211 框架。目前 vwifi 支援 scan, connect, disconnect 等 cfg80211 的介面操作,並得以正確處理 Tx/Rx 封包。
* 相關資訊
* [2022 年開發記錄](https://hackmd.io/@rickywu0421/FinalProject)
* 執行人: willwillhi1 $\to$ [開發紀錄](https://hackmd.io/@sysprog/rJD2joOSh)
## 打造 Linux 虛擬攝影機裝置驅動程式
[vcam](https://github.com/sysprog21/vcam) 是個針對 Linux 核心開發的虛擬攝影機裝置,全部程式碼僅 1 千 5 百行,從而可理解 V4L2 (video fro Linux APIs, version 2) 的使用和 Linux 多媒體架構。開發一個虛擬的攝影機裝置除了理解 Linux 核心設計外,也有資訊安全的幫助,例如你可以安插相關程式碼,紀錄有哪些應用程式偷偷啟動攝影機,但過程中又不會揭露真正的隱私。
* 相關資訊:
* [2020 年開發紀錄](https://hackmd.io/@eecheng/B16rQ3GjU)
* [2021 年開發紀錄](https://hackmd.io/@WayneLin1992/HkDBmLUDO)
* [2022 年開發紀錄](https://hackmd.io/@Masamaloka/linux2022-vcam)
* [2023 年開發紀錄](https://hackmd.io/@sysprog/rJEhcgoSn)
## Linux 系統虛擬機器開發和改進
KVM 可將 Linux 核心轉為 type-2 hypervisor,結合硬體的虛擬化支援,使得 host machine 上可以執行多個獨立的虛擬環境,稱為 guest 或者 virtual machine。由於 KVM 直接提供 CPU 和記憶體的虛擬化,guest os 的 CPU 指令不需要額外經過軟體的 decode,而是直接交給硬體進行處理,因此可以有效的提高運行速度。而結合軟體 (例如 KVM 搭配 QEMU) 模擬 CPU 和記憶體以外的裝置後,guest OS 便可以被完整地支援在 host OS 上載入並執行。[kvm-host](https://github.com/sysprog21/kvm-host) 則是建構在 KVM 基礎上的虛擬機器實作,可載入 Linux 核心和相關應用程式。
* 相關資訊:
* [KVM](https://hackmd.io/@RinHizakura/SJpFJ0mfF)
* [2022 年開發紀錄](https://hackmd.io/@ray90514/HyefaHiwc)
* [KVM-host 筆記](https://github.com/magnate3/linux-riscv-dev/blob/main/exercises2/kvm/kvm.md)
* [Gunyah Hypervisor from QUIC](https://www.phoronix.com/news/Qualcomm-Gunyah-Linux-v12)
* 執行人: yanjiew1 $\to$ [開發紀錄](https://hackmd.io/@sysprog/rkro_FeSh)
## simplefs
為了探索 Linux VFS (virtual file system) 介面及檔案系統實作機制,我們從無到有撰寫一個運作於 Linux 核心模式中的精簡檔案系統,原始程式碼約一千餘行,支援基本的檔案和目錄處理,同時也考慮到權限和並行處理的議題。本任務也規劃移植 Arm 公司發展的 [littlefs](https://github.com/littlefs-project/littlefs) 成為 Linux 核心原生檔案系統 (不透過 [FUSE](https://en.wikipedia.org/wiki/Filesystem_in_Userspace))
* 相關資訊:
* [開發紀錄-1](https://hackmd.io/@Nahemah1022/rJo1sAtid)
* [開發紀錄-2](https://hackmd.io/@fwfly/simplefs)
* [開發紀錄-3](https://hackmd.io/@freshLiver/linux-vfs-main/)
* 執行人: fewletter $\to$ [開發紀錄](https://hackmd.io/@sysprog/BymZ7EeH3)
## 實作高效記憶體配置器
[第 5 週測驗題](https://hackmd.io/@sysprog/linux2023-quiz5)、[第 6 週測驗題](https://hackmd.io/@sysprog/linux2023-quiz6)、[第 11 週測驗題](https://hackmd.io/@sysprog/linux2023-quiz11)提及逐步建構記憶體配置器 (memory allocator),本任務針對 Linux 核心的機制,設計現代的高效記憶體配置器
* 相關資訊
* [rpmalloc](https://github.com/mjansson/rpmalloc)
* [Deterministic Memory Allocation for Mission-Critical Linux](https://ossna2017.sched.com/event/BCsR)
* 執行人: WangHanChi $\to$ [開發紀錄](https://hackmd.io/@sysprog/HkNR4RVrn)
* 執行人: a1091150 $\to$ [開發紀錄](https://hackmd.io/@sysprog/Hy5kBl5Hh)
* 執行人: cin-cout $\to$ [開發紀錄](https://hackmd.io/@sysprog/Sys6U7nB2)
## 高效網頁伺服器
探討從無到有打造 Linux 平台的高效能網頁伺服器,涵蓋是否該將伺服器實作於 Linux 核心內部、並行處理、I/O 模型、epoll、Reactor pattern,和 Web 伺服器在事件驅動架構的考量。
* 相關資訊:
* [sysprog21/timeout](https://github.com/sysprog21/timeout): Tickless Hierarchical Timing Wheel
* [2020 年開發紀錄](https://hackmd.io/@jwang0306/final-project) / [GitHub](https://hackmd.io/@jwang0306/sehttpd)
* [2021 年開發紀錄](https://hackmd.io/@XDEv11/sehttpd-project)
* [2022 年開發紀錄](https://hackmd.io/@tommy2234/HJgbwqvvc)
* [開發紀錄-4](https://hackmd.io/@jim12312321/linux2022-sehttpd)
* 執行人: SPFishcool $\to$ [開發紀錄](https://hackmd.io/@sysprog/HJgX4_MH3)
* 執行人: JoshuaLee0321 $\to$ [開發紀錄](https://hackmd.io/@sysprog/SJyZrfnSh)
## kHTTPd 改進
擴充 [kHTTPd](https://github.com/sysprog21/khttpd),使其具備現代網頁伺服器的經典特色,並運用 Linux 核心的機制,例如使用 RCU 管理 HTTP 連線,參見 [ktcp](https://hackmd.io/@sysprog/linux2023-ktcp)
* 相關資訊:
* [Tempesta FW](https://github.com/tempesta-tech/tempesta): 在現有的 Linux TCP/IP 堆疊上建構 Web 加速器
* [http-server-rcu](https://github.com/frextrite/http-server-rcu): 以 RCU 管理連線
* [kws](https://github.com/kaiyuanl/kws): 參照其待辦事項
* [2022 年開發紀錄](https://hackmd.io/@Risheng/linux2022-khttpd)
* [開發紀錄-2](https://hackmd.io/@eric88525/linux2022-ktcp)
* 執行人: Jerejere0808 $\to$ [開發紀錄](https://hackmd.io/@sysprog/HkzcnhOHn)
* 執行人: zeddyuu $\to$ [開發紀錄](https://hackmd.io/@sysprog/BknrvhuHn)
* 執行人: Paintako $\to$ [開發紀錄](https://hackmd.io/@sysprog/BkSW8Z2Bn)
* 執行人: terry23304 $\to$ [開發紀錄](https://hackmd.io/@sysprog/r1vb6bhH2)
## 以 eBPF 建構 TCP 伺服器
嘗試以 [eBPF](https://hackmd.io/@sysprog/linux-ebpf) 來建構 TCP 伺服器。
* 執行人: YSRossi $\to$ [開發紀錄](https://hackmd.io/@sysprog/ryBw0adH2)
## 透過 Netfilter 自動過濾廣告
儘管我們可在網頁瀏覽器中透過像是 [AdBlock](https://getadblock.com/) 這類的 extension 來過濾廣告,但需要額外的設定和佔用更多系統資源,倘若我們能透過 [netfilter](https://www.netfilter.org/),直接在核心層級過濾網路廣告,那所有應用程式都有機會受益。
* 參考資訊:
* [How to drop 10 million packets per second](https://blog.cloudflare.com/how-to-drop-10-million-packets/)
* [Use the iptables firewall to block ads on your Linux machine](https://securitronlinux.com/debian-testing/use-the-iptables-firewall-to-block-ads-on-your-linux-machine/)
* [nBlock](https://github.com/notracking/nBlock)
* [2020 年開發紀錄](https://hackmd.io/@ZhuMon/2020q1_final_project)
* 執行人: ItisCaleb $\to$ [開發紀錄](https://hackmd.io/@sysprog/BJb0NRYH3)
## 以 Linux XDP 為基礎的防火牆
XDP (eXpress Data Path) 自 Linux 核心 4.8 版本起作為以 eBPF 為基礎的高效資料處理路徑,一旦網路中斷觸發後,XDP 允許將特定的操作提前在 TCP/IP 堆疊之前就處理,不僅反應更快而且省下寶貴的記憶體分配的成本。本議程以 XDP 作為切入,探討如何在這之上發展高效網路負載平衡器,並針對典型的 High Availability (HA) 叢集和非典型的情境去調整。
* 參考資訊:
* [XDP Use-case: Load Balancer](https://prototype-kernel.readthedocs.io/en/latest/networking/XDP/use-cases/xdp_use_case_load_balancer.html)
* [COSCUP 2020](https://coscup.org/2020/zh-TW/agenda/FFF8UM)
* [XDP Firewall](https://github.com/gamemann/XDP-Firewall)
* 執行人: jhin1228, D4nnyLee $\to$ [開發紀錄](https://hackmd.io/@sysprog/ryvKMFgr2)
## 改進 Linux 核心的 `lib/{list_}sort.c`
解釋 Linux 核心的 `lib/{list_}sort.c` 現有的 bottom-up merge/heap sort 實作,並尋求效能改進,例如 hybrid sort 的引入
* 參考資訊
* [Bottom-up Heapsort](https://hackmd.io/@Uduru0522/bottomup-heapsort-analyze)
* [Timsort 研究與對 Linux 核心貢獻嘗試](https://hackmd.io/@yanjiew/linux2023q1-timsort)
* 執行人: visitorckw $\to$ [開發紀錄](https://hackmd.io/@sysprog/Hy5hmaKBh)
* 執行人: kart81604 $\to$ [開發紀錄](https://hackmd.io/@sysprog/B146OVeHn)
## `simrupt` 研究和應用
[simrupt](https://github.com/sysprog21/simrupt) 專案名稱由 simulate 和 interrupt 二個單字組合而來
* 作用是模擬 [IRQ 事件](https://www.kernel.org/doc/html/latest/core-api/genericirq.html),並展示以下 Linux 核心機制的運用:
- irq
- softirq
- tasklet
- workqueue
- kernel thread
- [kfifo](https://www.kernel.org/doc/htmldocs/kernel-api/kfifo.html)
- [memory barrier](https://www.kernel.org/doc/Documentation/memory-barriers.txt)
* 相關資訊:
* [2021 年開發紀錄](https://hackmd.io/@linD026/simrupt-vwifi)
* [2022 年開發紀錄](https://hackmd.io/@Build-A-Moat/BJasWQhOc)
* 執行人: brianlin314 $\to$ [開發紀錄](https://hackmd.io/@sysprog/HJXlHtlB2)
## Linux Kernel Module Programming Guilde (LKMPG) 校訂和改進
[LKMPG](https://sysprog21.github.io/lkmpg/) 是 [Linux 核心內建文件](https://www.kernel.org/doc/Documentation/process/kernel-docs.rst)所推薦的電子書,儘管品質不算好,但仍是世上極少數自由流通的 Linux 核心專書。投入這項專案,就意味著可獲得大量的關注,也是對自身專業的極好肯定。
* 執行人: fourcolor $\to$ [開發紀錄](https://hackmd.io/@sysprog/Sk8IMQ9S2)
## 〈[每位程式開發者都該有的記憶體知識](https://sysprog21.github.io/cpumemory-zhtw/)〉翻譯和校訂
本文翻譯自 Ulrich Drepper 於 2007 年撰寫的論文〈[What Every Programmer Should Know About Memory](https://www.akkadia.org/drepper/cpumemory.pdf)〉(版次: 1.0)
* 相關資訊
* [現代處理器設計: Cache 原理和實際影響](https://hackmd.io/@sysprog/HkW3Dr1Rb)
* [CPU Cache 原理探討](https://hackmd.io/@drwQtdGASN2n-vt_4poKnw/H1U6NgK3Z)
* [prefetch 背景知識簡略整理](https://hackmd.io/@Rance/Hy3KRm1CG)
* [Random and sequential](https://hackmd.io/@dange/B1J3omXfV)
* [2022 年開發紀錄](https://hackmd.io/@6649/linux2022-cpumemory)
* 執行人: lorian0738 $\to$ [開發紀錄](https://hackmd.io/@sysprog/Sk6wB3FS2)
## 《Concurrency Primer》校訂和範例撰寫
檢視〈Concurrency Primer〉草稿並記錄閱讀過程中的疑惑,嘗試用 C11 Atomics 改寫原有程式碼,並確保在 QEMU/Arm 正確運作。
* 相關資訊
* [2022 年開發記錄](https://hackmd.io/@huang-me/2022linux_atomic_primer)
* 執行人: PlusThousand0107 $\to$ [開發紀錄](https://hackmd.io/@sysprog/HySGuWXL3)
* 執行人: GaberPlaysGame $\to$ [開發紀錄](https://hackmd.io/@sysprog/S1kFNL6L3)
## 並行程式設計
回顧〈[並行和多執行緒程式設計](https://hackmd.io/@sysprog/concurrency)〉教材和相關測驗題,強化對延伸問題的掌握
* 執行人: csm1735 $\to$ [開發紀錄](https://hackmd.io/@sysprog/SkzPgZnB2)
* 執行人: WeiHongWi $\to$ [開發紀錄](https://hackmd.io/@sysprog/H1L_mbhrh)
## [rhashtable](https://elixir.bootlin.com/linux/latest/source/include/linux/rhashtable.h) 及 Linux 核心記憶體管理研究
Linux 核心提供一套 Resizable, Scalable, Concurrent Hash Table,名為 `rhashtable` (見 [include/linux/rhashtable.h](https://elixir.bootlin.com/linux/latest/source/include/linux/rhashtable.h) 及 [lib/rhashtable.c](https://elixir.bootlin.com/linux/latest/source/lib/rhashtable.c)),描述於論文〈[Resizable, Scalable, Concurrent Hash Tables via Relativistic Programming](https://www.usenix.org/legacy/event/atc11/tech/final_files/Triplett.pdf)〉。摘譯 LWN 文章,並佐以原論文,描述 rhashtable 何以落實高效的並行雜湊表,搭配撰寫 Linux 核心模組作為試驗
* 相關資訊
* [Relativistic hash tables, part 1: Algorithms](https://lwn.net/Articles/612021/)
* [Relativistic hash tables, part 2: Implementation](https://lwn.net/Articles/612100/)
* [2022 年開發紀錄](https://hackmd.io/@linjohn/rhashtable)
* 執行人: chiangkd, POCHUN-CHEN $\to$ [開發紀錄](https://hackmd.io/@sysprog/HkKKE5eB3)
## 針對 rv32emu 實作 JIT 編譯器
[rv32emu](https://github.com/sysprog21/rv32emu) 是針對 RISC-V 32 位元指令集開發的精簡高效模擬器,本任務是引入 JIT 編譯器,以加速 RV32 指令的執行。
* 相關資訊
* [2022 年開發紀錄](https://hackmd.io/@lambert-wu/rv32emu)
* [設計精簡又快速的 RISC-V 指令集模擬器](https://hackmd.io/@coscup/ByiRHCyTc)
* 執行人: qwe661234 $\to$ [開發紀錄](https://hackmd.io/@sysprog/Syh834lH3)
## RISC-V System Emulator + Linux
[semu](https://github.com/jserv/semu) 是個能夠執行 Linux 核心的精簡 RISC-V 系統模擬器。
* 執行人: JiggerChuang $\to$ [開發紀錄](https://hackmd.io/@sysprog/Skuw3dJB3)
## 在 RISC-V 處理器運作 Linux 核心 (FPGA/虛擬機器)
* 相關資訊
* [從零開始的 RISC-V SoC 架構設計與 Linux 核心運行](https://hackmd.io/@w4K9apQGS8-NFtsnFXutfg/B1Re5uGa5)
* [semu](https://github.com/jserv/semu): RISC-V 系統模擬器,可執行 Linux 核心
* 執行人: Chiwawachiwawa $\to$ [開發紀錄](https://hackmd.io/@sysprog/B1Jl_HlBn)
* 執行人: fennecJ $\to$ [開發紀錄](https://hackmd.io/@sysprog/S1jNiYgr2)
## 紅黑樹實作改進
重做[第 3 週測驗題](https://hackmd.io/@sysprog/linux2023-quiz3) 的測驗一及[第 4 週測驗題](https://hackmd.io/@sysprog/linux2023-quiz4)的測驗一,彙整其他學員的成果,連同延伸問題
* 執行人: koty6069 $\to$ [開發紀錄](https://hackmd.io/@sysprog/ryDD1HgS3)
* 執行人: LiChiiiii $\to$ [開發紀錄](https://hackmd.io/@sysprog/rJbMiW3S3)
* 執行人: EdwardCKC $\to$ [開發紀錄](https://hackmd.io/@sysprog/Sy7jXmnrh)
## 運用 Skip List 於 Linux 核心
* 相關資訊
* [第 8 週測驗題](https://hackmd.io/@sysprog/linux2023-quiz8)
* [2019 年開發紀錄](https://hackmd.io/@Vy_ZuZdnSo-Wv4jSWgNmLw/B1OZFDL1H)
* 執行人: Tonr01 $\to$ [開發紀錄](https://hackmd.io/@sysprog/SJ6drDgB2)
## 回顧 Linux 核心的 bitops 並尋求貢獻程式碼的機會
Linux 核心的 [include/asm-generic/bitops](https://github.com/torvalds/linux/tree/master/include/asm-generic/bitops) 存在若干實作不一致的狀況,本任務嘗試追蹤 git log 和 LKML,以理解發展脈絡,並嘗試用精簡有效的方式改寫,最後嘗試貢獻程式碼到 Linux 核心。
* 執行人: Shiritai $\to$ [開發紀錄](https://hackmd.io/@sysprog/ByS9w_lHh)
## Linux 亂數產生器研究
[第 3 週測驗題](https://hackmd.io/@sysprog/linux2023-quiz3)第三題介紹到 Linear feedback shift register (LFSR),這也是 Linux 核心亂數產生器 (RNG) 的基礎之一。本任務探討 [Linux RNG](https://www.amossys.fr/fr/ressources/blog-technique/linux-csprng-architecture/) 的原理、實作機制,以及應用場景。
* 執行人: ShamrockLee $\to$ [開發紀錄](https://hackmd.io/@sysprog/r18z86NHh)
## 位元操作
[第 2 週測驗題](https://hackmd.io/@sysprog/linux2023-quiz2)嘗試檢驗學員對[位元操作](https://hackmd.io/@sysprog/c-bitwise)的認知,本任務強化相關練習。
* 執行人: tab08222 $\to$ [開發紀錄](https://hackmd.io/@sysprog/BJBQgOZI2)
## Trusted Firmware-A 及 Linux 啟動流程分析
[Trusted Firmware](https://www.trustedfirmware.org/) 是 Arm 公司針對 TrustZone 和 [Platform Security Architecture](https://www.arm.com/architecture/security-features/platform-security) 開發的基礎建設,本任務理解 Trusted Firmware-A (TF-A) 及探討 Linux 在 TF-A 的系統啟動流程分析。
* 執行人: chien1214 $\to$ [開發紀錄](https://hackmd.io/@sysprog/rkxaDOWI3)
## Kernel PWN
藉由回顧經典的 PWN 手法,理解 Linux 核心機制。
* 執行人: Welly0902 $\to$ [開發紀錄](https://hackmd.io/@sysprog/H1c8jONIh)
## 重做 fibdrv 並彙整學員成果
改進並彙整其他學員的成果
* 執行人: ericlai1021 $\to$ [開發紀錄](https://hackmd.io/@sysprog/HyyMNz7S3)
* 執行人: p96114175 $\to$ [開發紀錄](https://hackmd.io/@sysprog/SJzDwvQS2)
* 執行人: bonianlee $\to$ [開發紀錄](https://hackmd.io/@sysprog/H1DuThFHn)
* 執行人: seasonwang0905 $\to$ [開發紀錄](https://hackmd.io/@sysprog/rJxjTe5B2)
* 執行人: paulpeng-popo $\to$ [開發紀錄](https://hackmd.io/@sysprog/Hk2NJG3H2)
* 執行人: tintinjian12999 $\to$ [開發紀錄](https://hackmd.io/@sysprog/B1lbIu73Sh)
* 執行人: ctfish7063 $\to$ [開發紀錄](https://hackmd.io/@sysprog/ByWO973r3)
## 重做 lab0 並彙整學員成果
改進並彙整其他學員的成果
* 執行人: oEric0929o $\to$ [開發紀錄](https://hackmd.io/@sysprog/SJ8ZkFxSh)
* 執行人: andy155224 $\to$ [開發紀錄](https://hackmd.io/@sysprog/HJmB5x5Hn)
* 執行人: yihsuan1011 $\to$ [開發紀錄](https://hackmd.io/@sysprog/B1itMCUI3)