## 如何快速上手一項新技術 Ian Chen --- ## 關於我 --- - 在交大資工所擔任菸酒生 - 開源社群 - COSCUP 2021 IT Team Lead - 在 COSCUP, SITCON, DevFest 擔任過講者 Speaker - Deno Taiwan 社群管理員(雖然有點荒廢) - Leader @ Google DSC NYCU - IT 幫鐵人賽老鳥 --- ## 今天談什麼? - 我的學習路徑 - 如何快速上手一門技術 - 作業系統理論與實作 - 個人推廣 --- ### 我的學習路徑 背景:大一 GPA 2.4 的電子系學生 QQ 0. PHP 1. Vue.js 2. Deno (TypeScript) 3. C 4. golang --- ## 如何快速上手一門技術 --- 0. 一個好的學習動機 1. 學習基礎理論 2. 實戰 3. 學習進階理論 4. 繼續實戰... --- 以我學習作業系統的經驗來說: - 契機 - 基礎理論 - 實戰 --- - 逛 GitHub 時偶然發現陳鍾誠老師的新專案 **mini-riscv-os** - 因為看到 Jserv 的 COSCUP 演講影片,覺得自幹作業系統超酷的! https://github.com/cccriscv/mini-riscv-os --- ### 基礎理論 - RISC-V Specification - 交大開放式課程 -- 計算機組織 - 作業系統概論 - Trace code - 計算機組織跟作業系統都沒學好 - 本來都在寫 JavaScript,對於 C 語言排斥到爆 --- ### 實戰 - 路見不平,拿 Patch (Pull Request) 來補! ![](https://i.imgur.com/b1onhqp.png) --- ### 成果 - 鐵人賽軟體組佳作 -- 微自幹的作業系統輕旅行 - GDG DevFest 演講 - 部分內容收錄至金門大學資工系與成功大學資工系的相關課程中 --- 讓我們也來學習作業系統開發吧! --- ### 開始之前:記憶體金字塔 ![](https://i.imgur.com/FLTdf6n.png) --- ### 開始之前:處理器內的暫存器 ![](https://i.imgur.com/E5ORlRf.png) 舉例:乘除法心算 --- ### 為何要用 C 語言開發作業系統? - 在 C 語言出現之前:**組合語言**! - [UNIX 發展](https://github.com/ianchen0119/AwesomeCS/wiki/UNIX%E3%80%81BSD-%E8%88%87-Linux-%E7%9A%84%E6%84%9B%E6%81%A8%E6%83%85%E4%BB%87) --- ### 組合語言(ㄧ) ```assembly li x6, 1 # a = 1 li x7, 2 # b = 2 add x5, x6, x7 # c = a + b ``` --- ### 組合語言(二) ``` _start: # i = 0 # while (i < 5) i++; li x5, 0 li x6, 5 loop: addi x5, x5, 1 bne x5, x6, loop stop: j stop # Infinite loop to stop execution ``` --- ### 作業系統是什麼? 幫助我們管理硬體資源的軟體,它決定了哪些軟體在哪個時刻能夠分配到 CPU 資源,同時還負責了所有的外部硬體訊號。 --- ### 學習作業系統的好處 1. 加強對軟體與硬體的理解 2. 學習記憶體管理、檔案存取的方法 3. 許多技術都是以作業系統的某個觀念作為參考 --- ### C 語言與 JS 的差異 1. 強型別與弱型別 2. 記憶體管理 3. 同步與非同步 4. 多執行緒的可能? ![](https://i.imgur.com/coWJHqe.png) --- ### 作業系統如何管理硬體資源? 利用 Scheduler! ![](https://i.imgur.com/huSh8gb.png) <small> Ref: http://cs241.cs.illinois.edu/coursebook/Scheduling </small> --- ### 什麼是 Process? - Thread - Process - Program --- ### Thread - N 個核心就能有 N 個實體 Thread - N 個實體 Thread 可以對應更多個 Thread ![](https://i.imgur.com/ipCqqdJ.png) 舉例:餐廳的前場與後場 --- ### Process Process 是正在運行的程式,每一個 Process 都會有各自的: - Register set - Stack - Priority - **通常**一個 Process 只會有一個 Thread --- Hart -> Kernel Thread -> User Thread -> Process Hart: 實體執行緒 --- ### Program - Executable file - 當我們執行 Program 時,作業系統會將它初始化並載入 RAM,初始化完成後就是剛剛提到的 Process --- ### 作業系統如何做到任務切換 - 只考慮 Single Thread 硬體 - 已知 Process 有自己的 Stack 以及 Register Set - 答案: [Context Switch](https://github.com/ianchen0119/AwesomeCS/wiki/%E5%AD%B8%E7%BF%92%E4%B8%8A%E4%B8%8B%E6%96%87%E4%BA%A4%E6%8F%9B)! --- ### 作業系統如何處理外部訊號? 1. [Interrupt 處理](https://docs.google.com/presentation/d/1VZ0my-lc7o5pIV59_B07NnGUtOlhkv05/edit#slide=id.p13) 2. [User/Kernel Space](https://github.com/ianchen0119/AwesomeCS/wiki/%E6%B7%BA%E8%AB%87%E7%89%B9%E6%AC%8A%E6%A8%A1%E5%BC%8F%E8%88%87%E6%A8%A1%E5%BC%8F%E5%88%87%E6%8F%9B) --- ### 個人推廣 - [微自幹的作業系統輕旅行](https://github.com/ianchen0119/AwesomeCS/wiki) - [AwesomeCS](https://www.facebook.com/AwesomeComputerScience/) - [Youtube](https://www.youtube.com/channel/UCaN0t7tYczmrCVLbXljn4tQ) - [GitHub](https://github.com/ianchen0119) - [LinkedIn](https://www.linkedin.com/in/ian-chen-88b70b1aa/) --- ### 如何找到我? - [AwesomeCS](https://www.facebook.com/AwesomeComputerScience/) - [Linkedin](https://www.linkedin.com/in/ian-chen-88b70b1aa/) - [IT Help](https://ithelp.ithome.com.tw/users/20110850)
{"metaMigratedAt":"2023-06-16T23:38:46.028Z","metaMigratedFrom":"YAML","title":"六角演講 [Slide]","breaks":true,"slideOptions":"{\"theme\":\"solarized\",\"transition\":\"fade\"}","contributors":"[{\"id\":\"7333ca6e-8194-4198-bafa-dc6af47703ab\",\"add\":7149,\"del\":3609}]"}
    589 views
   Owned this note