Home - ianchen0119/AwesomeCS GitHub Wiki
本文件已出版為實體書籍,如果覺得寫得不錯歡迎購買支持唷!
在 2020 年底,隨著推甄告一段落,閒來無事的我看到了一個有趣的東西:由金門大學資工系陳鍾誠教授開源的作業系統專案: mini risc-v os 以及麻省理工學院開發的 xv6 os。 在嘗試閱讀專案原始程式碼時,我發現自己對計算機科學領域的認知與 C 語言程式能力都有嚴重的不足。 Jserv 也曾說過本科生的定義:
不要強調自己「非本科」,在這個世紀只要沒強度都是非本科。
我想,這世界上最可怕的事情莫過於知道自己的不足卻坐以待斃。 就算自己在大學時並不是正資工系也不能作為逃避的藉口,因此我買了幾本書並參考大量文獻,在空閒時研讀、整理成筆記,實踐 Teach Yourself Computer Science 的精神。
本系列文名為計算機科學之美,所以它包含了非常廣大的領域,主要應該包含了:
- 數位邏輯: 邏輯閘、數值系統、補數概念。
- 計算機組織: 管線、 CPU 快取、 MMIO 、中斷與異常、冒險 (hazards) 、組合語言。
- 作業系統: 中斷、排程、上下文交換、執行緒、檔案系統...。
- 資工人必須會用的基本工具:
gdb
,Makefile
,gcc
,vim
,git
等。
其中,作業系統是一門綜合性的 CS 學科。我想,比起直接閱讀,修讀過資料結構與演算法和計算機概論、計算機組織後再來研讀會有更深的感觸。 本系列文會圍繞在 RISC-V 上建構,介紹導讀作業系統原始程式碼所需要的工具、 RISC-V ISA 介紹、作業系統原始程式碼導讀,在介紹 RISC-V 以及計算機組織的相關知識時也會用到 rv32emu 的原始程式碼方便解說。
目標讀者需要有以下條件:
- 熟悉 C 語言:
- 指標操作 (記憶體概念)
- 前置處理器
- C 語言的物件導向概念
- 喜愛計算機科學並對其有一定的認知
- 熟悉最基本的資料結構
- 了解發問的正確起手式
本系列文採取先理論後實作的策略,先補足計算機科學的基本知識,再探討作業系統設計並嘗試研讀開源專案的原始程式碼。
學習 System programming 以及 Operation system 之前,我們需要對計算機有更進一步的認知:
- 一次搞懂 ISA、CISC 與 RISC
- 數值系統與補數
- 關於計算機,你必須知道的事 -- CPU 快取
- 透過數位邏輯電路學習 Bitwise 操作
- 透過 RISC-V 模擬器搞懂指令管線化
- 淺談分支預測與 Hazards 議題
- goto die? 那個 goto 到底能不能用啊?
- IEEE-754 與浮點數運算
- 組譯器與連結器 (上)
- 組譯器與連結器 (下)
RISC-V 是由 UC Berkeley 發展的 ISA,其官方規格書僅有 200 多頁的長度,相比 ARM 以及 MIPS,是更容易學習的 ISA,本系列文將利用 RISC-V 讓讀者對計算機組織有更深入的暸解。
- RISC-V::關於基本暫存器
- RISC-V::RV32I 指令介紹
- RISC-V::中斷與異常處理 -- 異常篇
- RISC-V::中斷與異常處理 -- 中斷篇
- RISC-V::中斷與異常處理 -- PLIC 介紹
- 窺探 ISA 的精妙設計
受到微中子的拯救資工系學生的基本素養影響,我也整理了一些文章來教大家資工人必須要會的基本工具/技巧。
- GNU Debugger
- GNU Compiler Collection
- Valgrind
- Git
- Makefile
- Vim
- 善用 Linux Programmer's Manual
- 那些多人混戰的開發經驗談
以自幹作業系統為目標,學習作業系統的導論並閱讀作業系統的專案原始程式碼理解實作原理。
- 教練,我想自幹作業系統!
- UNIX、BSD 與 Linux 的愛恨情仇
- Hello, OS!
- 動態記憶體分配
- 學習上下文交換
- 關於任務排程
- 中斷與異常
- 軟體與硬體的距離
- 淺談檔案系統
- Shell
- 淺談特權模式與模式切換
- Microkernel
- 實作系統呼叫與簡易的 Shell
之前修讀學校開的作業系統時,因為作業要求,用了 Node.js 寫一個非常基礎的多執行緒程式,筆者自認為沒有真正的搞懂多執行緒。 剛好藉由這次機會,可以學習多執行緒的同步問題以及使用 POSIX Thread 開發多執行緒程式。
筆者修讀由交通大學張立平老師開設的嵌入式即時系統所寫的筆記,希望能夠將 RM 排程算法與相關的估量機制整合至 mini-riscv-os 當中。
- 「你所不知道的 C 語言」系列講座
- 成大資工 wiki
- 交大 OCW
- 陳鍾誠的網站
- cplusplus.com
- SystemProgramming Wiki
- nctuos
- 我應該怎麼快速掌握 C 語言專案架構
- xv6: a simple, Unix-like teaching operating system
- The Adventures of OS: Making a RISC-V Operating System using Rust
- 中文電子書 -- 從 RISC-V 處理器到 UNIX 作業系統
- 陳鍾誠教授 感謝陳鍾誠教授願意在平常抽空與我分享作業系統相關的專案,提供了我許多有用的建議。
- Jserv
感謝 Jserv 抽出時間閱讀小弟的拙作,並針對一些專業術語的翻譯提出建議
<(_ _)>
- ei498 感謝這位不具名網友協助勘誤內文提出的錯誤論述。
- 耕銘 感謝央大電神在我最初開始編寫文章時就提醒我修正文章中的錯誤內容。
- AwesomeCS 站長
- Google DSC Lead @NCTU 2021
- Deno.tw 版主
- COSCUP 2021 IT Team lead
- SITCON/COSCUP/GDG DevFest/六角學院 講者
- 熱愛計算機科學,略懂網頁全端開發、網頁安全、區塊鏈,目前嘗試將觸角延伸到系統程式上,希望在進入職場前具備垂直整合的能力。
- 因為興趣接觸全端開發以及系統程式,卻準備做 5G 研究的碩一新生。
文章相關問題或勘誤歡迎留言或是發信到我的信箱: [email protected]
。