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

版本 f290c190045095260eacaef80c781ce587ef25d7

User/jimmylu890303

Changes from f290c190045095260eacaef80c781ce587ef25d7 to 2747defa9451e144400637008f149a47ff0bec4a

---
title: jimmylu890303 (盧俊銘)
categories: User
...

# 簡介
* 國立成功大學 電機工程所 114 級 (2023~ 2025)

* GitHub: [`jimmylu890303`](https://github.com/jimmylu890303)
* HackMD: [`jimmylu0303`](https://hackmd.io/@jimmylu0303)

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

### 成果發表與貢獻

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

[Linux-Slab 教材](https://hackmd.io/@sysprog/linux-slab)

[Linux-KVM 教材](https://hackmd.io/@sysprog/linux-kvm)

### 作業與隨堂測驗
* lab0: [GitHub](https://github.com/jimmylu890303/lab0-c) / [HackMD](https://hackmd.io/@jimmylu0303/linux2024-homework1)

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

* quiz1 + 2: [HackMD](https://hackmd.io/@jimmylu0303/linux2024-homework2)
    
    探討 Quick sort 的效能與其時間複雜度、Timsort 各個函式及使用雜湊表實作 LRU Cache。 

* quiz3 + 4: [HackMD](https://hackmd.io/@jimmylu0303/linux2024-homework4)
    
    分析 bitwise 的操作,內容包含整數平方根的計算、 log2 、除以 10 和取餘數等操作,使用位元操作來加速計算,減少了除法和乘法的使用、及 Popcount 計算 Hamming  Distance 的操作,且外使用 GCC 提供的 built-in 函數用來優化編譯結果。

* Assessment: [HackMD](https://hackmd.io/@jimmylu0303/linux2024-homework5)

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

* Integration: [HackMD](https://hackmd.io/@jimmylu0303/rJzI8mtZC)

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


### 期末專題

Virtio-net with KVM-host: [HackMD](https://hackmd.io/@jimmylu0303/linux2024-final) / [GitHub](https://github.com/jimmylu890303/kvm-host/tree/Implement-virtio-net)

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

### 與授課教師的互動

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

* [問題一](https://hackmd.io/@jimmylu0303/linux2024-homework5#%E5%95%8F%E9%A1%8C%E4%B8%80): 為何後續 linux 的維護者不將不可靠信號改成可靠信號?
額外分成非即時信號及即時信號的必要性?

* [問題二](https://hackmd.io/@jimmylu0303/linux2024-homework5#%E5%95%8F%E9%A1%8C%E4%BA%8C): 當在一開始 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\n"); 一次,但是真實的作用是會觸發 setjmp(Buf) != 0 行為則執行 else 內的行為。

* [問題三](https://hackmd.io/@jimmylu0303/linux2024-homework5#%E5%95%8F%E9%A1%8C%E4%B8%89): 在 /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 間相互傳送。

### 自我評量