LindaTing0106 (丁子函)
簡介
國立成功大學 電機工程所 113 級 (2023 ~ 2025)
GitHub:
LindaTing0106
HackMD:
LindaTing
2024 Linux 核心實作 春季班 自我評量
成果發表和貢獻
閱讀教材時發現錯誤所作修訂:
在描述 futex_requeue 的部分,提到
該操作會喚醒最多 limit 個等待者,但和 wait 不同的地方是,若 futex 中所有的等待者超過 limit 個,則所有的等待者皆會被喚醒並改在 other 這個 futex word 對應的 wait queue 中等待,函式中的 INT_MAX 表示可以從 futex 移到 other 的最大數量。
上述 但和 wait 不同的地方是
應該改為 和 walk 不同的地方是
。
自我評分:6
作業與隨堂測驗
我認為我在 lab0 學到了最多,從一開始嘗試使用填空的方式完成 linux 中的 list 操作,其中也利用了多種工具分析程式效能,此外在將 tic-tac-toe 加入 lab0 時,看鑾了老師提供的幾個多工案例後,我嘗試使用協同式多工的方式將 ai vs ai 的模式加入,從中也對於排程器原理更加了解。
此外 quiz 的檢討讓我能夠花更多的時間思考為什麼程式需要這樣寫,從中也學到了很多使用 bitwise 使程式效能提升的小技巧。像是利用位移及其他操作省去除法操作所需要的成本。
自我評分:9
期末專題
- Futex 驗證和評估:HackMD
從中,我對於如何能夠撰寫出正確的 mutex 有了更深的認知,也從論文中了解到多種容易導致 data racing 的錯誤,像是因為疏忽而導致需要用來判斷執行緒能否進入 critical section 的變數溢出,進而導致一段 critical section 有超過一個的執行緒。也從論文中更加了解到 Spin/Promela 是如何撰寫,以及其如何被使用來驗證 mutex 模型的正確性。
- 對其他學員的期末專題的提問和建議
自我評分:9
與授課教師的互動
- 一對一討論:5/18 下午 15:00
- Q:第三周的字串反轉範例,為什麼一定要和字串結尾的 ‘\0’ 做更改呢?
- Q:在 lab0 中,希望我們將 tic-tac-toe 加入作業中,並且加入 ai vs ai 模式和處理鍵盤事件,我發現許多人都是使用搶占式的方式加入,所以我自己是使用協同式的方式,但結果發現使用協同式會導致每個 task 都需要等待一段時間才會開始工作,所以想問老師這個作業是其實一定要使用搶占式的模式嗎?另外如果使用起來搶占式的運作比較流暢,那為什麼還需要有協同式的存在呢?
自我評分:9
修課心得
閱讀〈因為自動飲料機而延畢的那一年〉文章後,讓我深刻地思考到,現今我們日常生活中隨手可得的物品,其實背後都蘊藏著前人無數次的失敗與努力。每一個成功的發明和改良,都離不開那些在挫折中不斷嘗試、改進的過程,最終才成為改善我們生活品質的重要物品。這也讓我聯想到老師從課程一開始就不斷強調的一句話:「要誠實面對自己。」只有誠實面對自己,才能夠坦然接受失敗,從中學習並改進。正如那些發明家一樣,他們每一次的失敗並不是終點,而是下一次成功的起點。他們不斷地從錯誤中學習,逐步完善自己的創作,最終才得以創造出那些改變世界的偉大發明。
在這學期的「Linux 核心實作」課程中,我學到了許多實用且深刻的技術,其中讓我印象深刻的是並行程式的實作、並行程式的驗證、定點數運算的應用、位元運算的應用,其中在實作專題就已經學到了許多,另外在 tic-tac-toe 作業中為了對應 Linux 核心內部幾乎不能使用這件問題,我們需要把浮點數運算轉換為定點數運算,在轉換過程中,我才發現原來我們常用的一些函式,像是開平方根,取對數等等,在我們日常中都是呼叫函式就可以實現的功能,真正要去將其實做出來也必須花費不少時間。而位元運算則是常常讓我驚覺原來程式碼還有更加優秀的寫法。
自我評分:10
每月給指導教授的學習回顧
五月回顧:6月19日 下午8:23
在五月這段時間,我專注於課程的期末專題實作。我的專題主題是並行程式設計。在學習並行程式設計的工具之一——Mutex時,我了解到為了避免 data racing 的情況,需要對 Mutex 的設計進行詳細考量。為了減少執行緒在進入或離開 critical section 時必須進入核心操作的頻率,引入了 Futex 。 Futex 的引入可以使在沒有競爭發生時,不需要使用系統呼叫,從而避免每次都必須進入核心操作的情況。在研究 Futex 的過程中,我閱讀了《Model Checking Futexes》這篇論文。論文展示了許多實作案例,描述了錯誤的 Mutex 在什麼情況下會發生問題,並解析了正確設計的 Mutex 程式碼及其原因。另外我將論文中的範例程式碼用 C 語言編寫出來,並與課程教材中的例子進行比較。在過程中,我也更加了解到設計出一個執行正確並且效能優秀的並行程式是有多不容易。我想實驗室在做影像處理的研究時,常常需要平行計算影像中的像素、梯度或是相關特徵。因此,我相信更加了解並行程式的運作將對我之後的研究有所幫助。
沒有達到每月寄信的要求,只在最後一個月發信給指導老師,但有詳細說明期末專題研究的狀況。
自我評分:6
自我評量 (1 ~ 10)
- GEOMEAN:\(\sqrt[6]{6*9*9*9*10*6}=8.001504826\)
- 方案 B:\(1+\lfloor 8.001504826 \rfloor=9\)