---
# System prepended metadata

title: linux 核心實作學習狀況
tags: [linux2022]

---

---
tags: linux2022
---
# linux 核心實作學習狀況
## 學習狀況
目前在研究重構 fibdrv bigNum 的部分, 將寫法從 10 進位改為 2 進位, 完成 bigNum 重構後, 偏向將學習中心放在作業 sehttpd 上。
## 作業狀況
* [lab0-c](https://hackmd.io/gagu7CV0QICdAUwIehFXtA) / [Github](https://github.com/qwe661234/lab0-c)
* [quiz1](https://hackmd.io/z2BV3M7uSHOBJCx4VBSQ_Q)
* [quiz2](https://hackmd.io/7_ABDB-bRwG1T78TjlhODg)
* [fibdrv](https://hackmd.io/uagLte1JR9mv7InkfMMdHQ) / [Github](https://github.com/qwe661234/fibdrv)
* [quiz3](https://hackmd.io/FTd3Ucz4SpCN1zT7JIFaGw)

# 學期心得
---
title: qwe661234 (陳彥甫)
categories: User
...

# 簡介
* 國立成功大學 材料工程學系 110 級

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

# 2022 Linux 核心設計 春季班 自我評量
## 作業

* lab0-c: [GitHub](https://github.com/qwe661234/lab0-c) / [HackMD](https://hackmd.io/gagu7CV0QICdAUwIehFXtA)
* fibdrv: [GitHub](https://github.com/qwe661234/fibdrv) / [HackMD](https://hackmd.io/uagLte1JR9mv7InkfMMdHQ)
* ktcp: [HackMD](https://hackmd.io/@qwe661234/linux2022q1-homework6)


## 隨堂測驗

* quiz1: [HackMD](https://hackmd.io/@qwe661234/linux2022-quiz1)
* quiz2: [HackMD](https://hackmd.io/@qwe661234/linux2022-quiz2)
* quiz3: [HackMD](https://hackmd.io/@qwe661234/SkQauv-Qq)


## 期末專題

* 實作 Thread package: [GitHub](https://github.com/qwe661234/MuThreadPackage) / [HackMD](https://hackmd.io/aBqkoBz9QUq0tH5eHovZWA)
* 一對一討論時間
    * 4/30 
    * 6/9
    * 6/21
* 啟發
    在與老師一對一中，了解到實作 thread package 的動機，由於過去的 thread package 無法解決特定問題或與作業系統不相容，因此要自己開發 thread package。
    
    此外，由於過去開發的程式只有單執行緒，所以忽略掉多執行執行時可能遇到的問題，例如有兩個執行序同時想改變某一執行緒的優先權，如果沒有加入 lock 或其他確保資料正確的方法，將可能造成程式出現非預期的結果，再與老師的討論後才發現原本的程式存在這樣的問題要改進，讓我理解到在開發多執行序的程式時，如果資料在執行緒間是共想的，開發時必須謹慎處理。
    
* 目前成果
    * basic muthread API
    * mutex with mutiple types
    * priority inheritance mutex
    * priority protection mutex
    * simple and complex test cases

## 所見所聞所感
這學期比較多的收穫在於《並行和多執行緒程式設計》這份教材，一方面是期末專題與之息息相關，另一方面是過去在學作業系統時，完全無法理解執行緒、mutex、semaphore 或是 condition variable 這些概念，加上過去寫的程式都不會碰到這些議題，因此想利用這次機會了解這些概念。

在看教材中的多執行緒程式時，因為有詳細的解說，所以沒有特別複雜的感覺，但換成自己寫卻是另一回事。由於每一次的執行結果都不一定一樣，寫出來的程式碼可能存在問題，但這個問題不是每次都會發生，而是有機率的發生，造成 debug 上有很大的困難。這和過去寫程式有截然不同的體驗，為了確保短短幾行程式碼的正確性，需要有很多的背景知識，考慮很多的議題，以及模擬執行緒在不同執行順序下的各種可能。

從不知道如何使用執行序和 mutex 到自己寫出提供基本功能的 thread package，我想這是我在這堂課上最大的進步。雖然學期結束，但感謝老師仍有很多教材以及作業可以持續學習，期末專題也還有很多不足需要改進，讓我能持續從這堂課中收穫更多。

## 自我評量 (1 ~ 10)

我給自己 7 分

這學期完成的作業並不多，大部分的時間都投入在 `fibdrv` 和期末專題中，有很多作業以及上課教材都來不急在這學期完成，因此給自己 7 分。
