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

版本 72725d8d6dca064d127ef1623e20f6ffc55e2648

User/SimonLee0316

Changes from 72725d8d6dca064d127ef1623e20f6ffc55e2648 to current

---
title: SimonLee0316 (李適宏)
categories: User
...

# 簡介
* 國立中山大學 資訊工程研究所

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

# 2024 Linux 核心實作 春季班 自我評量
## 第一項、成果發表和貢獻
無。  
評分: 
我給自己 3 分,在閱讀理解教材上已花費相當大的力氣,尚無能力對於教材提出貢獻,在未來如果有機會再研究 linux 核心程式碼,期許自己可以提出貢獻。
我為自己打 3 分,雖然沒有能夠對教材提出貢獻,在每個月與指導教授發送的學習回顧信中與作業五有記錄我在這堂課所閱讀之教材以及心得,雖然只是簡短說明所學之內容,但有閱讀的教材都認真投入,先確定自己有足夠的背景知識,再投入實作。

## 第二項、作業/隨堂測驗
評分:   
我給自己 10 分,每份作業我都認真對待,盡自己最大的努力去寫,儘管不是每份作業都有完成到每個要求,但我認為我在每個作業當中都有學到東西,也投入了相當程度的時間。
我為自己打 10 分,每份作業我都認真對待,盡自己最大的努力去寫,儘管不是每份作業都有完成到每個要求,但我認為我在每個作業當中都有學到東西,也投入了相當程度的時間。

Homework1 (lab0) [HackMD](https://hackmd.io/mpoK-iFNRRiXbHTeiooz0g)/[GitHub](https://github.com/SimonLee0316/lab0-c)

這份作業中主要實作了針對指定串列的操作,也引入的不同的洗牌演算法,並比較了自己實作的排序和 linux 核心程式碼之間的效能落差。

Homework2 (quiz1+2) [HackMD](https://hackmd.io/bAyUjId9QzWPqx7Lm5h4Rw)

使用非遞迴的方式實做 quick sort 和實作 Timsort。
藉由給定的 preorder 和 inorder traversal 序列,進行二元樹的重建和 LRU 概念的呈現。

Homework3 (tic-tac-toe) [HackMD](https://hackmd.io/mpoK-iFNRRiXbHTeiooz0g#%E4%BF%AE%E6%94%B9-qtest-%E7%A8%8B%E5%BC%8F%EF%BC%8C%E4%BD%BF%E5%85%B6%E6%96%B0%E5%A2%9E-ttt-%E5%91%BD%E4%BB%A4)/[GitHub](https://github.com/SimonLee0316/lab0-c)

藉由改寫井字遊戲來熟悉數值系統、bitwise 操作、排程器原理和 Linux 核心的 List API。

Homework4 (quiz3+4) [HackMD](https://hackmd.io/U-Ez8DYHSuWtsv6wjDMmQw)

使用 bit-waise 技巧包含 : 取 $log_2$、對 mod 10 和 div 10 減少運算成本、popcount、針對符合 $2^k+1$ 的除數取模同餘。  
XTree 的平衡機制與 AVL tree 相似,利用高度來評估是否需要做 rotate。
提供了五個 XTree 的操作。

Homework5 (assessment) [HackMD](https://hackmd.io/ki2aCEL_Q3iz9daIqwJrEg)

紀錄閱讀〈因為自動飲料機而延畢的那一年〉的啟發。

Homework6 (integration) [HackMD](https://hackmd.io/pf4n8UYSQWymdKScemeVWA)/[GitHub](https://github.com/SimonLee0316/ksort)

在自己的實體電腦運作 GNU/Linux、閱讀〈Linux 核心模組運作原理並解釋 insmod 、閱讀《The Linux Kernel Module Programming Guide》(LKMPG) 並解釋 simrupt 程式碼裡頭的 mutex lock 的使用方式,並探討能否改寫為 lock-free、閱讀論文 Pattern Defeating Quicksort (pdqsort)、善用 CMWQ 達成排序的並行處理。

## 第三項、期末專題
評分:   
我給我自己 10 分,起初我對網頁伺服器完全沒有概念,但透過閱讀許多文件以及實作,能夠理解其原理,並結合測驗八實作出一個網頁伺服器,並搭配相關測試,雖然最後的結果並沒有比全部測試的比較對象還要好,但我對於這個專題的投入,已盡學生最大的努力。 
我為我自己打 10 分,起初我對網頁伺服器完全沒有概念,但透過閱讀許多文件以及實作,能夠理解其原理,並結合測驗八實作出一個網頁伺服器,透過壓力測試工具實驗自己實作的伺服器與市占率第一的網頁伺服器 nginx 和 老牌伺服器 apache 以及參考 lwan 網路伺服器所建構的 cserv ,在測試結果只有贏 apache ,在之後透過 perf 工具找出效能的瓶頸在關閉連線的 I/O 操作上,並提出可以引入 KEEP-ALIVE 機制來減少反覆建立和關閉連線的成本。

Linux 核心專題: 高效網頁伺服器 [HackMD](https://hackmd.io/@sysprog/Byq9C2q80)/[GitHub](https://github.com/SimonLee0316/c-web-server)

藉由 coroutine 和 POSIX Thread,以 M:N 執行緒模型建構高性能的網頁伺服器。

## 第四項、與授課教師的互動
評分:   
我給自己 10 分,在討論過程中雖然我連乘 10 都不會,但是我在與老師討論的過程中,能夠理解討論的重點以及方向,並且會後針對討論內容做筆記及分析。
我為自己打 10 分,在討論過程中雖然我連乘 10 都不會,但是我在與老師討論的過程中,能夠理解討論的重點以及方向,並且會後針對討論內容做筆記及分析。

與授課教師「一對一討論」的時間為 2024/5/16 14:30。

詳細討論可見[HackMD](https://hackmd.io/ki2aCEL_Q3iz9daIqwJrEg?view#%E4%B8%80%E5%B0%8D%E4%B8%80%E8%A8%8E%E8%AB%96)

在討論中老師問我如何使用 bit-wise 方法做到浮點數乘 10,而我連乘 10 都不會,更不用說誠實面對自己,在討論結束之後我將自己在計算機組織所學到的浮點數乘法使用 bit-wise 實作出來,並搭配相關測試,在這個討論中我深刻理解在遇到問題時,不會的原因是因為我第一次看過這個問題,所以我才覺得我不會,但是如果我能夠具備足夠的基礎能力,無論遇到什麼沒遇到過的問題也能透過積累的經驗去慢慢解決問題。
在討論中老師問我如何使用 bit-wise 方法做到浮點數乘 10,而我連乘 10 都不會,更不用說誠實面對自己,在討論結束之後我將自己在計算機組織所學到的浮點數乘法使用 bit-wise 實作出來,並搭配相關測試,在這個討論中我深刻理解在遇到問題時,不用因為題目沒有看過而認為自己不會,而是從問題的根本去解決,分析基本原理,再帶入程式實作,即可解決問題。

## 第五項、 所見所聞所感
評分:   
我給自己 10 分。  
我為自己打 10 分。  
* [〈因為自動飲料機而延畢的那一年〉](https://blog.opasschang.com/the-story-of-auto-beverage-machine-1/) **讀後感想**:

閱讀完後深刻體會到再做專案的時候,先做好規劃是很重要的。

在作者沒有夠多的行業知識時,盲目的認為問題很簡單而自己去實做,走了很多冤枉路,且在專案過程中,考慮不夠週到或著資金的問題,都造成了無法持續推動專案前進,但我想這就是學生時代無可避免的,失敗總是貫徹人生始終,但這就是人生,作者再做這個專案時不為了什麼功成名就,就是為了一個自我實現的過程,儘管結果並不怎麼美好,但就因為這些失敗的過程,親自走過的路,都會成為以後的養份,讓自己能夠變得更好。

也替作者感到很高興有這麼幾個很好的夥伴,每個人都有自己擅長的領域,將大家擅長的領域結合在一起才能夠完成這項專案,我認為最應該感謝的是紘銘,他無條件的支持著作者的想法和這個專案,為這個專案挹注資金,甚至在作者延畢時,食衣住行都由紘銘贊助,更不用說買那些高昂的設備,且不求回報,我在紘銘身上看到當初 FACEBOOK 創辦人 Mark Zuckerberg 的共同創辦人 Eduardo Saverin 的影子,深感佩服。

* 回顧自身在本課程的投入狀況:

深知自己實力不如人,我在這堂課每個禮拜至少投入25個小時,儘管成效不如預期,光是忙著理解教材就已筋疲力盡,但我認為課程是很充實的。
深知自己實力不如人,我在這堂課每個禮拜至少投入25個小時,儘管成效不如預期,光是忙著理解教材就已投入超過一半的時間,但是一份教材的內容絕對是值得投入時間去學習的。
課程中除了學習 linux 核心之外,也學到了如何養成良好撰寫 commit message 的習慣,一個好的 commit message 能夠讓其他開發者能夠了解改動的意義,也可以讓開發流程清楚明瞭。

## 第六項、每月發給實驗室指導教授的學習回顧

評分:   
我給自己 10 分,雖然我寄給指導教授的學習回顧數量不多,但我在實驗室進度開會的時候會跟指導教授說明課程的相關內容,指導教授也大概了解我的學習狀況,在回顧信中,我會詳細的說明我在課堂上的學習狀況還有掌握的知識。 
我為自己打 10 分,雖然我寄給指導教授的學習回顧數量不多,但我在實驗室進度開會的時候會跟指導教授說明課程的相關內容以及討論,舉例來說在有一次會議上指導教授在跟學姐討論該怎麼洗牌才是足夠好的,這時我想到我在作業1中有實作到的洗牌演算法(Fisher–Yates shuffle),並有搭配相關統計的原理來分析的實作,探究洗牌的「亂度」,與指導教授和學姐討論後加入學姐之論文中,在回顧信中,我也會詳細的說明我在課堂上的學習狀況還有掌握的知識。 

* 四月發信日期:2024/5/13 21:15
* 五月發信日期:2024/6/24 21:15


 
## 自我總評量得分
自我總評量我給自己 9 分。
自我總評量得分為 **9** 分。

$(3*10*10*10*10*10)^{1/6} = 8.18$  
根據幾何平均計算第一至第六項的細項得分,得到 GEOMEAN 為 8.18。  
選擇方案 B 的計算方式 $1 + floor(8.18) = 9 $,因此自我評量中得到了 9 分。
* GEOMEAN : $\sqrt[6]{3*10*10*10*10*10} = 8.18$  
* 方案 B:$1+\lfloor 8.18 \rfloor=9$