Home - ianchen0119/AwesomeCS GitHub Wiki

本文件已出版為實體書籍,如果覺得寫得不錯歡迎購買支持唷! RISC-V-book

緣起

在 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 是什麼? 能吃嗎?

RISC-V 是由 UC Berkeley 發展的 ISA,其官方規格書僅有 200 多頁的長度,相比 ARM 以及 MIPS,是更容易學習的 ISA,本系列文將利用 RISC-V 讓讀者對計算機組織有更深入的暸解。

必須要會的實用工具

受到微中子的拯救資工系學生的基本素養影響,我也整理了一些文章來教大家資工人必須要會的基本工具/技巧。

學習作業系統,從自幹開始!

以自幹作業系統為目標,學習作業系統的導論並閱讀作業系統的專案原始程式碼理解實作原理。

並行程式設計 (使用 C 語言)

之前修讀學校開的作業系統時,因為作業要求,用了 Node.js 寫一個非常基礎的多執行緒程式,筆者自認為沒有真正的搞懂多執行緒。 剛好藉由這次機會,可以學習多執行緒的同步問題以及使用 POSIX Thread 開發多執行緒程式。

RTOS associated resource [整理中]

筆者修讀由交通大學張立平老師開設的嵌入式即時系統所寫的筆記,希望能夠將 RM 排程算法與相關的估量機制整合至 mini-riscv-os 當中。

Independent Task Scheduling

UCOSII

推薦教材 & 好文分享

特別感謝

  • 陳鍾誠教授 感謝陳鍾誠教授願意在平常抽空與我分享作業系統相關的專案,提供了我許多有用的建議。
  • Jserv 感謝 Jserv 抽出時間閱讀小弟的拙作,並針對一些專業術語的翻譯提出建議 <(_ _)>
  • ei498 感謝這位不具名網友協助勘誤內文提出的錯誤論述。
  • 耕銘 感謝央大電神在我最初開始編寫文章時就提醒我修正文章中的錯誤內容。

關於我

  • AwesomeCS 站長
  • Google DSC Lead @NCTU 2021
  • Deno.tw 版主
  • COSCUP 2021 IT Team lead
  • SITCON/COSCUP/GDG DevFest/六角學院 講者
  • 熱愛計算機科學,略懂網頁全端開發、網頁安全、區塊鏈,目前嘗試將觸角延伸到系統程式上,希望在進入職場前具備垂直整合的能力。
  • 因為興趣接觸全端開發以及系統程式,卻準備做 5G 研究的碩一新生。

文章相關問題或勘誤歡迎留言或是發信到我的信箱: [email protected]

⚠️ **GitHub.com Fallback** ⚠️