# [Linux Kernel Internals 2024 Spring Collections](https://hackmd.io/@Kuanch/linux2024-collection) Overview
Instructor: Jim Huang (黃敬群) <jserv.tw@gmail.com>
Syllabus/Schedule: https://wiki.csie.ncku.edu.tw/linux/schedule
This is a collection of the course materials and assignments for the course Linux Kernel Internals 2024 Spring at National Cheng Kung University.
:::info
>[name=Kuanch]
>This course has been concluded on July 7, however, the content on this page will be updated regularly.
>
> You might be also interested on my degree essay about Point Cloud Segmentation [2DDATA](https://arxiv.org/abs/2309.11755) and [Image and Point Cloud Misamatch (SNPD 2023)](https://arxiv.org/abs/2309.14932).
>
>課程已經於 7 / 7結束,但仍將持續更新內容
>若您從履歷至此,亦可參考我的碩士論文 [2DDATA](https://arxiv.org/abs/2309.11755) 及 [Image and Point Cloud Misamatch (SNPD 2023)](https://arxiv.org/abs/2309.14932)
>
> 部分工作如編修《[Demystifying the Linux CPU Scheduler](https://hackmd.io/@Kuanch/linux-kernel-scheduler-notes2)》將持續進行,不受課程進度影響,歡迎指教。
:::
---
## [Term Project](https://hackmd.io/@sysprog/rkJd7TFX0) (in progress)
Keyword: EEVDF, EAS, QEMU and Buildroot, sched_ext
#### 重點節錄
* 編修 《[Demystifying the Linux CPU Scheduler](https://hackmd.io/@Kuanch/linux-kernel-scheduler-notes2)》EEVDF 章節
* 以 QEMU + remote GDB + Buildroot 整理 Linux Kernel Scheduler 調用
* 以不同方式分析及測量 EEVDF, BORE, EAS 等排程器效能 (schbench)
* 撰寫 Kernel Module 評估現有排程策略之效能 (EEVDF, EAS)
* 嘗試以 sched_ext 撰寫簡單的排程器,並驗證其效能差異
---
## Assigment 1 (Due 3/4)
Keyword: Circular Linked List in Linux Kernel, `container_of`, [Dude, is my code constant time?](https://eprint.iacr.org/2016/1123.pdf)
[Assignment Requirements 作業說明](https://hackmd.io/@sysprog/linux2024-lab0/%2F%40sysprog%2Flinux2024-lab0-a)
[Github](https://github.com/Kuanch/lab0-c)
#### 重點節錄
* `container_of` 及 `struct list_head` 初探
* 實作 `struct list_head` 之佇列操作
* 論文〈Dude, is my code constant time?〉
---
## Assigment 2 (Due 3/11)
Keyword: Timsort, Hash Table, LRU, Maple Tree, CPU affinity, `cpumaks`, `cpuset`
[Assignment Requirements 作業說明](https://hackmd.io/@sysprog/BkmmEQCn6)
#### 重點節錄
* 以 linked list 實作 Linux 核心風格之 merge sort
* 理解 Linux Kernel 中的 merge sort
* **Maple Tree** 與 **RCU** 初探
* **CPU affinity** 初探
---
## Assigment 3 (Due 3/25)
Keyword: Double replacing with Fixed Point, Fixed Point Arithmetic, Square and log, coroutine
[Assignment Requirements 作業說明](https://hackmd.io/@sysprog/linux2024-ttt)
[Github](https://github.com/Kuanch/lab0-c/tree/ttt)
#### 重點節錄
* IEEE 754 浮點數與定點數轉換
* 使用牛頓勘根法求定點數之近似平方根
* 使用尤拉公式求定點數之近似對數
---
## Assigment 4 (Due 4/2)
Keyword:
Red Black Tree, Bitwise Square, Bitwise Disivion and Modular, Bitwise Log2, Bitwise Hamming Distance, EWMA
[Assignment Requirements 作業說明](https://hackmd.io/@sysprog/HkatSCZCT)
#### 重點節錄
* 使用 bitwise operations 計算數學函式
* Square, division, mod and log2
* 使用 magic number (`0x24924925` etc.) 計算**定點數除法**
* 紅黑數初探
---
## Assigment 5 (Due 4/15)
Keyword : CPU Scheduling, Completely Fair Scheduling (CFS), Energy Aware Scheduling (EAS), EEVDF
Midterm Self Assessment and Term Project Proposal
[Assignment Requirements 作業說明](https://hackmd.io/@sysprog/BySwQtt06)
---
## Assigment 6 (Due 4/29)
Keyword: Linux Kernel Module, Concurrency Managed Workqueue (cmwq)
[Assignment Requirements 作業說明](https://hackmd.io/@sysprog/linux2024-integration/%2F%40sysprog%2Flinux2024-integration-a)
#### 重點節錄
* 理解 character device 、其涉及的系統呼叫機制以及 ABI
* 透過核心模組 `simrupt` 理解 **CMWQ** 以及 **Divided Handler** 模型
* 嘗試釐清 `work_struct` 與 `task_struct` 關係
* 嘗試以 `strace` 靜態分析 `simrupt`
* 嘗試以 `QEMU + remote gdb + Buildroot` 動態分析 `simrupt`
---
## Assigment 7 (Due 5/13)
Keyword: ktcp, sehttpd