--- title: 2020 年春季 Linux 核心設計課程期末專題 image: description: 列舉「Linux 核心設計」課程期末專題的可能題目 --- # 2020 年春季 Linux 核心設計課程期末專題 ## XDP 透過 XDP(eXpress Data Path,Linux 核心得以更有效率地處理低階封包,拋棄帶有 L4Drop 的 DoS 攻擊封包。如果封包發現錯誤,則在 protocol stack 前就會判斷是否要繼續處理或丟棄。 > 執行人: AndybnACT ## 透過 Netfilter 自動過濾廣告 儘管我們可在網頁瀏覽器中透過像是 [AdBlock](https://getadblock.com/) 這類的 extension 來過濾廣告,但需要額外的設定和佔用更多系統資源,倘若我們能透過 netfilter,直接在核心層級過濾網路廣告,那所有應用程式都有機會受益。 參考資訊: * [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) > 執行人: ZhuMon > [開發紀錄](https://hackmd.io/@ZhuMon/2020q1_final_project) ## KTLS > 題目: KTLS —— Linux 核心內部的 TLS 實作 在 Linux 核心內部實作 Transport Layer Security (TLS),好處是: 1. 更低的 CPU 使用率 2. 過往 SSL 實作僅限於使用者層級緩衝區的安全,但 TLS 成為核心的服務後,即可提升為傳輸層級的安全 Linux 核心自 `v4.13` 已整合來自 Facebook 和 Red Hat 合作的 KTLS,相關資訊可見: * [Kernel TLS](https://github.com/torvalds/linux/blob/master/Documentation/networking/tls.rst) * [Kernel TLS offload](https://github.com/torvalds/linux/blob/master/Documentation/networking/tls-offload.rst) 相關討論: * [来自 Facebook 的 KTLS (Kernel SSL/TLS) 原理和實例](https://blog.csdn.net/dog250/article/details/53868519) * [TLS in the kernel](https://lwn.net/Articles/666509/) * [Linux Kernel TLS/DTLS Module](https://github.com/ktls/af_ktls) * [Hacker News](https://news.ycombinator.com/item?id=15164568) > 執行人: OscarShiang - [共筆](https://hackmd.io/@oscarshiang/linux_ktls) ## Twin YouTube: [TWIN: An Even Smaller Window System For Even Smaller Devices](https://youtu.be/726RpDWE-O0) [論文和投影片](https://keithp.com/~keithp/talks/twin-ols2005/) 相關討論: 1. [嵌入式向量图形系统设计](https://blog.joouis.com/2020/evgui-design-review/) 2. [SVG Tiny 与 Libsvgtiny](https://blog.joouis.com/2020/evgui-svgtiny/) 3. [XML Parser for Libsvgtiny](https://blog.joouis.com/2020/evgui-xml-parser/) 4. [EVGUI 触控简单处理笔记](https://blog.joouis.com/2020/evgui-touch-interaction/) 5. [TWIN API 整理](https://blog.joouis.com/2020/evgui-twin-apis/) 6. [以 Clock 应用为例追踪 TWIN 的运作流程](https://blog.joouis.com/2020/evgui-twin-workflow-review/) ## LittleFS Arm Mbed 作業系統有個子項目名為 littlefs,顧名思義就是針對嵌入式裝置開發的小型檔案系統,我們可透過 FUSE 掛載到 Linux 或 macOS 作為檔案系統,卻不用撰寫對應的核心模組。 本任務嘗試改寫 littlefs,使其直接成為 Linux 核心原生 (native) 檔案系統,並確保在並行操作依舊符合預期。 相關討論: * [littlefs-fuse](https://www.facebook.com/groups/system.software2020/permalink/326283654972507/) > 執行人: simpson0114 ## simplefs > 題目: 從無到有開發針對 Linux 核心的檔案系統 為了探索 Linux VFS (virtual file system) 介面及檔案系統實作機制,我們從無到有撰寫一個運作於 Linux 核心模式中的精簡檔案系統,原始程式碼約一千餘行,支援基本的檔案和目錄處理,同時也考慮到權限和並行處理的議題。 相關討論: * [simplefs](https://www.facebook.com/groups/system.software2020/permalink/330569901210549/) > 執行人: ndsl7109256 ## 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/) > 執行人: ire33164 ## 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/) > 執行人: eecheng87 * [開發紀錄(vcam)](https://hackmd.io/@eecheng/B16rQ3GjU) / [Github](https://github.com/eecheng87/vcam) ## `/dev/mem` 研究 編撰 [Linux 核心的 /dev/mem 裝置](https://hackmd.io/@sysprog/linux-mem-device),強化 eBPF, crash 等工具的運用,目標是「成為電腦的主人」 —— 想改哪一段記憶體就可輕鬆達成 > 執行人: oucs638 ## Linux 排程器研究 * [Linux fork之后,到底是子进程先运行还是父进程先运行](https://blog.csdn.net/dog250/article/details/105756168) * [从一个CFS调度案例谈Linux系统卡顿的根源](https://blog.csdn.net/dog250/article/details/105710571) > 執行人: babysusue * [開發紀錄(Linux 排程器研究)](https://hackmd.io/@babysuse2018/Hya2VEziI) ## Faceboo"c" Facebooc (注意書寫方式,最後的字母是 c) 用 C 語言打造一套類似 Facebook 的網路服務,允許使用者發文並按讚,本專案唯一的相依套件是 SQLite3。 這個專案實質引導學員成為 full stack engineer —— 從 web 伺服器開發、資料庫處理、SQL 命令、Linux 系統呼叫 (如 select) 和進階的 epoll,到網頁程式開發都一把抓。這不單是 C 程式,還是很好的系統分析題材 相關討論: * [Facebooc](https://www.facebook.com/groups/system.software2020/permalink/336683797265826/) ## High performance Web Server > 題目: 高效網頁伺服器 —— 針對 Linux 核心和進階系統呼叫重新設計 本議程探討從無到有打造 Linux 平台的高效網頁伺服器,涵蓋是否該將伺服器實作於 Linux 核心內部、並行處理、I/O 模型、epoll、React pattern,和 Web 伺服器在事件驅動架構的考量。 > 執行人: jwang0306 * [開發紀錄](https://hackmd.io/@jwang0306/final-project) ## 以 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) > 執行人: foxhoundsk ## 重做 [quiz5](https://hackmd.io/@sysprog/linux2020-quiz5) 重做指定隨堂測驗並完成延伸問題 > 執行人: 64079102 ## 重做 [quiz6](https://hackmd.io/@sysprog/linux2020-quiz6), [quiz7](https://hackmd.io/@sysprog/linux2020-quiz7), [quiz9](https://hackmd.io/@sysprog/linux2020-quiz9) 重做指定隨堂測驗並完成延伸問題 > 執行人: YanjenChen ## 重做 [quiz11](https://hackmd.io/@sysprog/linux2020-quiz11), [quiz12](https://hackmd.io/@sysprog/linux2020-quiz12) > 執行人: kylekylehaha ## 重做 [quiz13](https://hackmd.io/@sysprog/linux2020-quiz13), [quiz14](https://hackmd.io/@sysprog/linux2020-quiz14), [quiz10](https://hackmd.io/@sysprog/linux2020-quiz10) > 執行人: eddie9712 > [重做 quiz13,quiz14,quiz10](https://hackmd.io/Nprhfx-kQR6iNwZqjHY0UA) ## 重做 kecho 彙整同學們的共筆材料,並依據作業要求予以補強 > 執行人: C24042018 ## 重做 fiber 彙整同學們的共筆材料,並依據作業要求予以補強 > 執行人: a20034294 ## 重做 fibdrv 彙整同學們的共筆材料,並依據作業要求予以補強 > 執行人: sherisea ## 重做 kcalc 彙整同學們的共筆材料,並依據作業要求予以補強 > 執行人: cicero884 ## 重做 khttpd 彙整同學們的共筆材料,並依據作業要求予以補強 > 執行人: IepIweidieng ## 重做 fibdrv [2020q2 Homework2 (fibdrv)](https://hackmd.io/@KYWeng/rkGdultSU) > 執行人: KYWeng
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.