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

版本 f290c190045095260eacaef80c781ce587ef25d7

jimmylu890303 (盧俊銘)

簡介

2024 Linux 核心設計 春季班 自我評量

成果發表與貢獻

閱讀文件時做的錯字修訂:

作業與隨堂測驗

  • lab0: GitHub / HackMD

    完成佇列作的操作,實作出 Fisher–Yates shuffle 及 q_sort ,再 q_sort 與 list_sort 及 tim_sort 做效能上的評估與比較

  • quiz1 + 2: HackMD

    探討 Quick sort 的效能與其時間複雜度、Timsort 各個函式及使用雜湊表實作 LRU Cache。

  • quiz3 + 4: HackMD

    分析 bitwise 的操作,內容包含整數平方根的計算、 log2 、除以 10 和取餘數等操作,使用位元操作來加速計算,減少了除法和乘法的使用、及 Popcount 計算 Hamming Distance 的操作,且外使用 GCC 提供的 built-in 函數用來優化編譯結果。

  • Assessment: HackMD

    撰寫閱讀〈因為自動飲料機而延畢的那一年〉後的心得,研讀 CS:APP 3/e 第一章、第二章並對前期作業進行改進兩題。

  • Integration: HackMD

    閱讀〈Linux 核心模組運作原理〉並對照 Linux 核心原始程式碼 (v6.1+),閱讀《The Linux Kernel Module Programming Guide》(LKMPG),並且學習實作字符設備的練習。

期末專題

Virtio-net with KVM-host: HackMD / GitHub

在這次專題中,分析 KVM 運作原理,並展示一個以 KVM 為基礎的精簡虛擬機器管理程式實作( kvm-host ),它能在 x86-64 及 arm64 平台上運作,提供了基本的 VirtIO 儲存裝置、 serial 裝置 (用來作為 console) ,並且能成功在上面執行 Linux 系統,而專題目標是在該虛擬機器上實作 Virtio-net 裝置。

與授課教師的互動

一對一討論:5月 20日 (星期一)⋅下午2:30 - 3:00

  • 問題一: 為何後續 linux 的維護者不將不可靠信號改成可靠信號? 額外分成非即時信號及即時信號的必要性?

  • 問題二: 當在一開始 A 呼叫 setjmp 時, setjmp 會將 stack pointer, instruction pointer, the values of other registers, the signal mask 存在 jmp_buf 的 buffer 內 longjmp 作使用。但在執行 setjmp 時, pc 會指向 line 8 的位置。 當 B 使用 longjmp 時會恢復 Buf 內的資訊,那應該會執行printf(“A setjmp address”); 一次,但是真實的作用是會觸發 setjmp(Buf) != 0 行為則執行 else 內的行為。

  • 問題三: 在 /dev/ 下的裝置有 major number 和 minor number,在對 /dev/下的裝置作操作時, linux kernel 會透過 major number 去找到對應的 module , 但是若有多個 device 對應到同個 major number,也是會找相同的 module,但是要如何透過不同的 minor number 去控制不同的驅動行為 ?

修課心得

與指導教授的學習回顧

二月回顧:3月8日 下午12:58

了解 Linux 核心中鏈結串列的實作(通用的結構(list_head))、撰寫清晰好理解的 git commit message ,並且深入學習 Linux 核心知識以提升撰寫高品質程式的能力。

三月回顧:4月8日 下午7:25

學習 Bitwise Operation 操作,許多表達式都可以透過位元運算來實現。以轉換大小寫為例,過去我總是使用較笨拙的方法,但在閱讀老師的教材後,我才發現原來可以只需一行程式碼,即將目標字母與 32 進行 XOR 運算,就能完成轉換。此外,許多 Bitwise Operation 的程式碼寫得非常藝術,也極具效率。

學習如何透過 C 語言中的前置處理器來優化和簡化程式碼。在 Linux Kernel 的程式碼中,廣泛使用了許多巨集(macro)。透過這些巨集,能夠有效地使程式碼變得更加簡潔。

四月回顧:5月11日 下午3:33

研讀黃敬群老師的《你所不知道的 C 語言》教材以及《 Computer Systems: A Programmer’s Perspective 》這本課本的前兩章,並將學習到的東西紀錄下來。 在 CS:APP 這本書中,從最基礎的事情開始介紹,介紹許多關於變數型態的事情。 在撰寫程式時,常常會遇到未知的錯誤,而這些未知的錯誤常常就是因為不同型態的變數轉換所造成的錯誤,所以在閱讀完這前兩章後,有更進一步的了解數值系統的重要性。

認識 Linux Kernel Module ,閱讀完黃敬群老師的教材後,認識到 Module 如何透過虛擬檔案系統 (Virtual File System, VFS) 與周邊裝置進行互動,並且透過 Character Device 可以將資料從 User space 到 Kernel space 間相互傳送。

自我評量