# 2024q1 Homework5 (assessment) contributed by < [Ackerman666](https://github.com/Ackerman666) > ## 閱讀〈[因為自動飲料機而延畢的那一年](https://blog.opasschang.com/the-story-of-auto-beverage-machine-1/)〉的啟發 故事中看到作者滿滿的熱忱與不具艱難的精神,實在讓我佩服。 尤其是冰塊模組上卡關許久,看到一半還以為專案會就此告吹,所幸最後還是有解決問題。 其中也觀察到三位夥伴的職人精神,不管是在設計還是選料上都可以看出他們嚴謹的態度 ! > 只有把東西生出來做實驗,你才會知道該如何改進。 這段話看時特別帶感,我以往做專案時總是會先在腦中空想,遲遲不肯提早動手開始實踐。 導致成品最後缺乏反覆實驗改進而變成四不像。也讓我體悟到有想法固然好,但還是要及早動手及早面對錯誤來反覆改進。而這也才是開發系統軟體所應具備的良好態度。 > 你該學習的不是看到事情要完蛋了就去避免失敗,而是應該學習如何處理與承受失敗,你才能變得比以前更強大。 這句話是 Jserv 對作者說的話,看到當下感觸很深。 我以前在做事很討厭失敗的發生,因此會想很多不正規的方式繞過去來避免失敗,甚至是不做了。 但其實我們現在正處青春的年紀,能被允許犯錯的機會多的是。雖然有點雞湯,但債遲早要還,提早犯錯提早學習,是我必須理解的事實與接受的課題。 套一句饒舌歌手蛋堡所說的 "**一切都是過程**",唯有正視自己接受失敗才能更加茁壯 > 這個世界比任何人都殘酷,也比任何人都公平,犧牲了多少就會得到多少。飲料機現在能做到的事,就只是付出犧牲的結果罷了。 我不太贊同有等價交換這回事,畢竟不可否認運氣也是實力的一環。但知道沒有犧牲絕對沒有結果,也就是俗稱的 "**no pain no gain**"。尤其是在軟體領域,常用的無論是開源或商業軟體,背後一定是由許多工程師付出許多心血而得。而這也再再提醒我身在此領域,唯有積極付出與犧牲,才可能換得一絲成果! ### 學習課程 5 週之後的感想 當初會選這堂課目的很簡單,就是想跳脫自己的舒適圈,而且選的當下想說難度頂多以往課程的2~3倍。但事實是我太過膚淺,大錯特錯 !!,不論是難度廣度真的有值得 10 學分的價值。 課堂的教材之豐富,我到現在也還沒有追上應有的進度,這也是我還沒有完全抱持覺悟面對這堂課所造成的後果。其中在有細讀的課程裡,我才驚覺以往學到的東西是如此的表面,很多重要的精隨如 function pointer,bitwise 操作等,都是過去未曾探究的。現在不敢說有完全的理解,但至少此時此刻絕對比開學前的我進不了不少。 在作業部分,老師有開放作業區讓我們可以觀摩其他學員的成果。很多位學員撰寫的完成度與專業度都比我好上許多,除了讚嘆同學的強大外,更多的是自己的省思。我在寫作業時,遇到不懂的還是有很大部分會直接找網路上的解說,卻忽視了老師準備的第一手教材,這當然就會讓我撰寫的內容缺乏深度。而有耐心的閱讀原始碼和第一手教材正是我現在正努力的部分。 原先我完全對貢獻程式碼沒有太多興趣,甚至老實講對 Linux 也沒有熱忱。 但學習到現在我發現 Linux 真的是集各領域精華所成,裡面能挖的寶真的是一般上課老師不會教的 ! 因此上到現在我的心境轉變挺大,也有對 Linux 燃起了一點興趣,而在看開源程式碼時也會更注重觀察細節。不只更好理解,也希望能偷個一招半式來加深自己的技能知識的廣度與深度。 套一句老師的話 "**爛又不努力**",雖然很想就這樣說我就爛,但頭都洗一半了,我還是會持續花費時間來投入課程。即使最終無法貢獻到 Linux 核心,但過程得到的回報一定是會有價值。 ## 紀錄課程疑惑 ### [Linux: 不只挑選任務的排程器](https://hackmd.io/@sysprog/linux-scheduler) :::info AMP (Asymmetric multiprocessing) 會比 SMP (symmetric multiprocessing) 更適用於 RTOS 是因為 AMP 的單一核心都會專注執行特定行程,而少了許多 context switch 進而減少非必要的資源開銷嗎 ? > [Difference between Asymmetric and Symmetric Multiprocessing](https://www.geeksforgeeks.org/difference-between-asymmetric-and-symmetric-multiprocessing/) ::: > https://www.openampproject.org/docs/whitepapers/Introduction_to_OpenAMPlib_v1.1a.pdf > https://github.com/siemens/jailhouse $\to$ https://wiki.linuxfoundation.org/_media/realtime/events/rt-summit2016/jailhouse_jan-kiszka.pdf > latency (interrupt, scheduler, MMU, ...), mixed-critical ### [你所不知道的 C 語言:編譯器和最佳化原理篇](https://hackmd.io/@sysprog/c-compiler-optimization) :::info 能否直接用 constant folding 方式,在編譯時期就偵測到溢位的出現 ? 如以下,在編譯時期就跳出 C 會溢位的錯誤訊息 int a = INT_MAX int b = 1 int c = a + b ::: > optimizer **assume** UB > formal methods, Cppcheck, infer (Facebook) ### [事件驅動伺服器:原理和實例](https://hackmd.io/@sysprog/linux-io-model/https%3A%2F%2Fhackmd.io%2F%40sysprog%2Fevent-driven-server) :::info 教材提到 `epoll_wait` 本質上還是 blocking 操作 那 blocking 發生的時長,是否就是經過 mode transition 後,在核心監聽所耗的時間 ? 也就是說 timeout 設定的越久,blocking 的時間越長 ? ::: ### others :::info user space thread 會對應到 kernel thread。那麼這個 kernel thread 和 CMWQ 中提到的 worker 是同個東西嗎 ::: > thread pool, workqueue, paradigm, design pattern (23) > kernel thread 是核心最小的執行單元 ## 簡述想投入的專案 ### Linux 核心同步機制研究 看了教材後發現相關知識薄弱,想透過執行相關專案增強對同步機制的理解 (目前對研究 non-blocking 資料結構有興趣) ### 高效網頁伺服器 在看了 [事件驅動伺服器:原理和實例](https://hackmd.io/@sysprog/linux-io-model/https%3A%2F%2Fhackmd.io%2F%40sysprog%2Fevent-driven-server) 覺得很有趣,想研究看看有無更高效能的實作方式 > [完成 ktcp](https://hackmd.io/@sysprog/linux2024-ktcp/%2F%40sysprog%2Flinux2024-ktcp-a) ### coroutine 相關<s>實做</s> 實作 $\to$ https://hackmd.io/@sysprog/it-vocabulary 對 coroutine 僅於概念上理解,尚未實做,因此想透過實作更熟悉原理 > 完成 [ttt](https://hackmd.io/@sysprog/linux2024-ttt) or 其他相關習題 ### Linux 模組 在寫第 6 週作業時,覺得模組運作方式很有趣,但我目前的完成度不高,專案可更加精進 TCP 3-way handshake SYN [為什麼TCP 建立連線需要三次握手](https://hackmd.io/IJjjOcUWSeC38SgspfP9Fw?view) TODO: ktcp + extra (kHTTPd + RCU)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up