Skip to content
Ian Chen edited this page Sep 11, 2021 · 54 revisions

Welcome to AwesomeCS wiki page, this wiki is established by Ian Chen, cause Ian hopes all you guys can know deeper about Computer Science via this wiki page.

此 Wiki 尚在構建中,構建進度可以參考 AwesomeCS/issues/1

緣起

在 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-next 的原始碼方便解說。

受眾

目標讀者需要有以下條件:

  • 熟悉 C 語言:
    • 指標操作 (記憶體概念)
    • 前置處理器
    • C 語言的物件導向概念
  • 喜愛計算機科學並對其有一定的認知
  • 熟悉最基本的資料結構
  • 了解發問的正確起手式

目錄

本系列文採取先理論後實作的策略,先補足計算機科學的基本知識,再探討作業系統設計並嘗試研讀開源專案的原始碼。

知己知彼百戰百勝

學習 System programming 以及 Operation system 之前,我們需要對計算機有更進一步的認知:

ISA 是什麼? 能吃嗎?

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

必須要會的實用工具

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

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

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

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

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

推薦教材 & 好文分享

關於我

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

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

Clone this wiki locally